Введение. Монолитная операционная система

Лекция 2

Тенденции в структурном построении операционных систем

Монолитные системы

В общем случае "структура" монолитной системы представляет собой отсутствие структуры. ОС написана как набор процедур, каждая из которых может вызывать другие, когда ей это нужно. При использовании этой техники каждая процедура системы имеет хорошо определенный интерфейс в терминах параметров и результатов, и каждая вольна вызвать любую другую для выполнения некоторой нужной для нее полезной работы.

Для построения монолитной системы необходимо скомпилировать все отдельные процедуры, а затем связать их вместе в единый объектный файл с помощью компоновщика (примерами могут служить ранние версии ядра UNIX или Novell NetWare). Каждая процедура видит любую другую процедуру (в отличие от структуры, содержащей модули, в которой большая часть информации является локальной для модуля, и процедуры модуля можно вызвать только через специально определенные точки входа).

Однако даже такие монолитные системы могут быть немного структурированными. При обращении к системным вызовам, поддерживаемым ОС, параметры помещаются в строго определенные места, такие, как регистры или стек, а затем выполняется специальная команда прерывания, известная как вызов ядра или вызов супервизора. Эта команда переключает машину из режима пользователя в режим ядра, называемый также режимом супервизора, и передает управление ОС. Затем ОС проверяет параметры вызова для того, чтобы определить, какой системный вызов должен быть выполнен. После этого ОС индексирует таблицу, содержащую ссылки на процедуры, и вызывает соответствующую процедуру. Такая организация ОС предполагает следующую структуру:

а) главная программа, которая вызывает требуемые сервисные процедуры;

б) набор сервисных процедур, реализующих системные вызовы.

В) набор утилит, обслуживающих сервисные процедуры.

Многоуровневые системы

Обобщением предыдущего подхода является организация ОС как иерархии уровней. Уровни образуются группами функций операционной системы - файловая система, управление процессами и устройствами и т.п. Каждый уровень может взаимодействовать только со своим непосредственным соседом - выше- или нижележащим уровнем. Прикладные программы или модули самой операционной системы передают запросы вверх и вниз по этим уровням.

Первой системой, построенной таким образом была простая пакетная система THE, которую построил Дейкстра и его студенты в 1968 году. Система имела 6 уровней. Уровень 0 занимался распределением времени процессора, переключая процессы по прерыванию или по истечении времени. Уровень 1 управлял памятью - распределял оперативную память и пространство на магнитном барабане для тех частей процессов (страниц), для которых не было места в ОП, то есть слой 1 выполнял функции виртуальной памяти. Слой 2 управлял связью между консолью оператора и процессами. С помощью этого уровня каждый процесс имел свою собственную консоль оператора. Уровень 3 управлял устройствами ввода-вывода и буферизовал потоки информации к ним и от них. С помощью уровня 3 каждый процесс вместо того, чтобы работать с конкретными устройствами, с их разнообразными особенностями, обращался к абстрактным устройствам ввода-вывода, обладающим удобными для пользователя характеристиками. На уровне 4 работали пользовательские программы, которым не надо было заботиться ни о процессах, ни о памяти, ни о консоли, ни об управлении устройствами ввода-вывода. Процесс системного оператора размещался на уровне 5.


В системе THE многоуровневая схема служила, в основном, целям разработки, так как все части системы компоновались затем в общий объектный модуль.

Дальнейшее обобщение многоуровневой концепции было сделано в ОС MULTICS. В системе MULTICS каждый уровень (называемый кольцом) является более привилегированным, чем вышележащий. Когда процедура верхнего уровня хочет вызвать процедуру нижележащего, она должна выполнить соответствующий системный вызов, то есть команду TRAP (прерывание), параметры которой тщательно проверяются перед тем, как выполняется вызов. Хотя ОС в MULTICS является частью адресного пространства каждого пользовательского процесса, аппаратура обеспечивает защиту данных на уровне сегментов памяти, разрешая, например, доступ к одним сегментам только для записи, а к другим - для чтения или выполнения. Преимущество подхода MULTICS заключается в том, что он может быть расширен и на структуру пользовательских подсистем. Например, профессор может написать программу для тестирования и оценки студенческих программ и запустить эту программу на уровне n, в то время как студенческие программы будут работать на уровне n+1, так что они не смогут изменить свои оценки.

Многоуровневый подход был также использован при реализации различных вариантов ОС UNIX.

Хотя такой структурный подход на практике обычно работал неплохо, сегодня он все больше воспринимается монолитным. В системах, имеющих многоуровневую структуру было нелегко удалить один слой и заменить его другим в силу множественности и размытости интерфейсов между слоями.

операционная система – это обычная программа, поэтому было бы логично и организовать ее так же, как устроено большинство программ, то есть составить из процедур и функций. В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы. Такая структура операционной системы называется монолитным ядром (monolithic kernel). Монолитное ядро представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме. Таким образом, монолитное ядро – это такая схема операционной системы , при которой все ее компоненты являются составными частями одной программы, используют общие структуры данных и взаимодействуют друг с другом путем непосредственного вызова процедур. Для монолитной операционной системы ядро совпадает со всей системой.

Во многих операционных системах с монолитным ядром сборка ядра, то есть его компиляция, осуществляется отдельно для каждого компьютера, на который устанавливается операционная система . При этом можно выбрать список оборудования и программных протоколов, поддержка которых будет включена в ядро. Так как ядро является единой программой, перекомпиляция – это единственный способ добавить в него новые компоненты или исключить неиспользуемые. Следует отметить, что присутствие в ядре лишних компонентов крайне нежелательно, так как ядро всегда полностью располагается в оперативной памяти. Кроме того, исключение ненужных компонентов повышает надежность операционной системы в целом.

Монолитное ядро – старейший способ организации операционных систем . Примером систем с монолитным ядром является большинство Unix-систем.

Даже в монолитных системах можно выделить некоторую структуру. Как в бетонной глыбе можно различить вкрапления щебенки, так и в монолитном ядре выделяются вкрапления сервисных процедур, соответствующих системным вызовам . Сервисные процедуры выполняются в привилегированном режиме, тогда как пользовательские программы – в непривилегированном. Для перехода с одного уровня привилегий на другой иногда может использоваться главная сервисная программа, определяющая, какой именно системный вызов был сделан, корректность входных данных для этого вызова и передающая управление соответствующей сервисной процедуре с переходом в привилегированный режим работы. Иногда выделяют также набор программных утилит, которые помогают выполнять сервисные процедуры.

Многоуровневые системы (Layered systems)

Продолжая структуризацию, можно разбить всю вычислительную систему на ряд более мелких уровней с хорошо определенными связями между ними, так чтобы объекты уровня N могли вызывать только объекты уровня N-1. Нижним уровнем в таких системах обычно является hardware, верхним уровнем – интерфейс пользователя. Чем ниже уровень, тем более привилегированные команды и действия может выполнять модуль, находящийся на этом уровне. Впервые такой подход был применен при создании системы THE (Technishe Hogeschool Eindhoven) Дейкстрой (Dijkstra) и его студентами в 1968 г. Эта система имела следующие уровни:


Рис. 1.2.

Слоеные системы хорошо реализуются. При использовании операций нижнего слоя не нужно знать, как они реализованы, нужно лишь понимать, что они делают. Слоеные системы хорошо тестируются. Отладка начинается с нижнего слоя и проводится послойно. При возникновении ошибки мы можем быть уверены, что она находится в тестируемом слое. Слоеные системы хорошо модифицируются. При необходимости можно заменить лишь один слой, не трогая остальные. Но слоеные системы сложны для разработки: тяжело правильно определить порядок слоев и что к какому слою относится. Слоеные системы менее эффективны, чем монолитные. Так, например, для выполнения операций ввода-вывода программе пользователя придется последовательно проходить все слои от верхнего до нижнего.

Виртуальные машины

В начале лекции мы говорили о взгляде на операционную систему как на виртуальную машину , когда пользователю нет необходимости знать детали внутреннего устройства компьютера. Он работает с файлами, а не с магнитными головками и двигателем; он работает с огромной виртуальной, а не ограниченной реальной оперативной памятью; его мало волнует, единственный он на машине пользователь или нет. Рассмотрим несколько иной подход. Пусть операционная система реализует виртуальную машину для каждого пользователя, но не упрощая ему жизнь, а, наоборот, усложняя. Каждая такая виртуальная машина предстает перед пользователем как голое железо – копия всего hardware в вычислительной системе, включая процессор , привилегированные и непривилегированные команды, устройства ввода-вывода, прерывания и т.д. И он остается с этим железом один на один. При попытке обратиться к такому виртуальному железу на уровне привилегированных команд в действительности происходит системный вызов реальной операционной системы , которая и производит все необходимые действия. Такой подход позволяет каждому пользователю загрузить свою операционную систему на виртуальную машину и делать с ней все, что душа пожелает.


Рис. 1.3.

Первой реальной системой такого рода была система CP/CMS, или VM/370, как ее называют сейчас, для семейства машин IBM/370.

Недостатком таких операционных систем является снижение эффективности виртуальных машин по сравнению с реальным компьютером, и, как правило, они очень громоздки. Преимущество же заключается в использовании на одной вычислительной системе программ, написанных для разных операционных систем .

Микроядерная архитектура

Современная тенденция в разработке операционных систем состоит в перенесении значительной части системного кода на уровень пользователя и одновременной минимизации ядра. Речь идет о подходе к построению ядра, называемом микроядерной архитектурой ( microkernel architecture) операционной системы , когда большинство ее составляющих являются самостоятельными программами. В этом случае взаимодействие между ними обеспечивает специальный модуль ядра, называемый микроядром. Микроядро работает в привилегированном режиме и обеспечивает взаимодействие между программами, планирование использования процессора , первичную обработку прерываний , операции ввода-вывода и базовое управление памятью.


Рис. 1.4.

Остальные компоненты системы взаимодействуют друг с другом путем передачи сообщений через микроядро.

Основное достоинство микроядерной архитектуры высокая степень модульности ядра операционной системы . Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая ее работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы . Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.

В то же время микроядерная архитектура операционной системы вносит дополнительные накладные расходы, связанные с передачей сообщений, что существенно влияет на производительность. Для того чтобы микроядерная операционная система по скорости не уступала операционным системам на базе

  • Важнейшие технологические процессы капитального строительства
  • Возведение монолитных ж/б плит перекрытий и наружных стен
  • Глава 13 Практика достоверного определения полной восстановительной стоимости
  • В общем виде операционная система монолитного типа представляет собой набор процедур, каждая из которых может вызывать другие. Процедуры ОС компилируются, а затем компонуются в единый объектный файл, специального формата, отличающегося от пользовательских приложений.

    Однако, организация механизма реализации системных вызовов в такой ОС предполагает всё таки следующую структуру:

    1. Главная программа, которая осуществляет обработку системных прерываний;

    2. Набор служебных процедур, реализующие системные вызовы;

    3. Набор утилит, обслуживающие служебные процедуры.

    В ОС программа, которая инициирует и прекращает процессы обработки системных прерываний называется супервизором (supervisor). Спервизор - управляющая резидентная программа в составе операционной системы, координирующая распределение и использование ресурсов вычислительной системы.

    В операционной системе может быть несколько супервизоров. Например, С. ввода-вывода контролирует состояние средств ввода-вывода, инициирует и прекращает процессы ввода-вывода. С. основной памяти осуществляет учет и динамическое распределение области оперативной памяти, в которую загружаются программы пользователей и некоторые системные программы. С. страниц организует страничный обмен виртуальной памяти.

    В современных ВС в основном речь идёт о модульных ОС с монолитным ядром и в качестве примеров приводятся большинство UNIX-систем Linux; реализуемых на традиционных ядрах, ядро MS-DOS, ядро KolibriOS.

    В качестве примера монолитной ОС можно привести ОС MS-DOS, в качестве ядра можно рассматривать два модуля msdos.sys Базовый модуль DOS, файл MSDOS.SYS и io.sys, Модуль расширения BIOS, к ним с системными вызовами обращались командный интерпретатор command.com, системные утилиты и приложения.

    Недостатки:

    1. Монолитные ядра требуют перекомпиляции при любом изменении состава оборудования.

    2. «Разбухание» кода монолитных ядер делает их малопригодными для систем, ограниченных по объёму ОЗУ, например, встраиваемых системах, микроконтроллерах и т. д.

    Альтернативой монолитным ядрам считаются архитектуры, основанные на микроядрах.

    Альтернативой монолитным ОС выступает архитектура модульной ОС.

    Модульные ОС структурно состоят из модулей, каждый из которых реализует определённый набор функций. Наиболее общим подходом к структуризации операционной системы является разделение всех ее модулей на две группы:

    1. Ядро - модули, выполняющие основные функции ОС;

    2. Модули, выполняющие вспомогательные функции ОС.

    Модули ядра выполняют такие базовые функции как управление процессами, памятью, устройствами ввода вывода, обработка прерываний.

    Вспомогательные модули как правило подразделяются на следующие:

    · утилиты – программы, решающие задачи сопровождения ВС (сжатие дисков, архивация);

    · системные обрабатывающие программы (редакторы, отладчики, компиляторы и пр.)

    · программные модули, обеспечивающие графический пользовательский интерфейс.

    · библиотеки процедур различного назначения, упрощающие разработку приложений (библиотека математических функций, функций ввода-вывода).

    Как и обычные пользовательские приложения, для выполнения своих задач вспомогательные модули, обращаются к функциям ядра посредством системных вызовов. Вспомогательные модули являются транзитными загружаются в оперативную память только на время выполнения своих функций. Такая организация ОС экономит оперативную память компьютера.

    Модульное ядро - современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.

    Модульность реализуется за счёт механизма подгрузки модулей поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом не требуются полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера.

    В странах бывшего Советского Союза в гражданском и промышленном строительстве отдавалось предпочтение возведению сборных архитектурных сооружений из железобетона. Хотя еще в 30-х годах двадцатого века были попытки освоить монолитные технологии строительства. Но низкое на то время качество строительной опалубки и отсутствие технологических решений по работе с бетоном в холодное время года существенно затормозили развитие монолитного строительства.

    Первым успешным отечественным опытом можно считать возведение в г. Сочи пятнадцатиэтажной гостиницы, при строительстве которой использовалась скользящая строительная опалубка, а подъем жидкого бетона осуществлялся по схеме «кран-бадья». Монолитные работы были окончены всего через 15 дней после начала заливки опалубки для фундамента . При этом калькуляция затрат показала, что расход строительной смеси снижен на 30,7%, а армирующего каркаса - на 24,5%. Общая экономия возведения здания с применением съемной опалубки составила 20%.

    Возведение монолитных зданий и архитектурных сооружений особенно широкое развитие получило в начале 21 столетия, когда на отечественном рынке появились качественные и надежные опалубочные системы, а также модифицирующие добавки для бетона, изменяющие его технологические и эксплуатационные свойства.

    Преимущества монолитных технологий

    Монолитное строительство вряд ли получило бы такое распространение, если бы не обладало существенными преимуществами в сравнении с традиционными технологиями возведения зданий и архитектурных сооружений.

    1. Одним из главных достоинств монолитной архитектуры с применением съемной опалубки является независимость от, так называемого, шага конструкции.

    В классическом сборном железобетонном строительстве все элементы должны иметь размеры, кратные определенному шагу (или модулю). Все заводы, специализирующиеся на производстве ж/б-изделий, изготавливают ограниченный ряд типоразмеров элементов для сборного строительства и не имеют возможности гибкой переналадки производства под выпуск индивидуального или несерийного продукта.

    Такая вынужденная унификация соответствующим образом сказывается и на архитектурных решениях. Проектировщик просто не в силах перешагнуть за рамки унификации и стандартизации. Монолитное строительство зданий с помощью съемной строительной опалубки стерло эти границы, открыв новые горизонты для проектных и дизайнерских решений.

    2. Монолитные технологии позволяют увеличить длину пролетов со стандартных 12 метров до 15-16, а иногда и до 20 метров без ущерба жесткости, устойчивости и прочности перекрытий .

    3. Монолитные дома не имеют монтажных швов, что положительно сказывается на их звукоизоляционных и теплосберегающих характеристиках. В жилых зданиях, возведенных с помощью съемной опалубки, затраты на отопление в среднем ниже на 20% в сравнении с обычными сборными из ж/б-элементов, кирпичной или блочной кладки, а в монолитных домах, построенных с применением несъемной опалубки, - на 50-70% (в зависимости от материала, из которого она произведена).

    4. За счет более рационального расхода материалов (в частности строительных смесей и армирующего металлокаркаса) общий вес здания легче на 15-20%, что в свою очередь дает возможность сэкономить на фундаменте.

    5. Скорость возведения монолитных зданий и сооружений существенно выше, чем при классическом сборном строительстве. «Львиную» долю работ составляет монтаж строительной опалубки. После того, как съемная опалубка установлена, выверена и закреплена, в межпалубное пространство подается строительная смесь (обычно из бункера или с помощью бетоноподающих насосов).

    6. Все работы сконцентрированы на строительной площадке (кроме подготовки бетонных смесей и производства опалубки). Нет необходимости в аренде тяжелой грузоподъемной техники, организации рельсовых путей для ее хода, не требуется выделение площадей для складирования ж/б-изделий перед их монтажом и пр.

    7. Высокое качество бетонных поверхностей. При использовании качественной строительной опалубки и соблюдении технологий монолитного строительства бетонные перекрытия получаются ровными и гладкими, что существенно упрощает их последующую чистовую отделку.

    8. Монолитное строительство позволяет возводить более прочные, надежные и долговечные здания. Расчетный срок эксплуатации обычных панельных зданий составляет 50 лет, тогда как для монолитных - более 200! Кроме того, монолитные сооружения обладают большей сейсмической устойчивостью.

    Будущее монолитных технологий

    Первые монолитные сооружения имели более высокую себестоимость в сравнении со зданиями, возведенными по классической сборной технологии. Монолитное строительство стало экономически выгодным благодаря развитию съемных опалубочных систем. В настоящее время монолитные дома ориентировочно на 20-40% дешевле в строительстве, чем сборные из железобетонных элементов.

    Качество строительной опалубки - краеугольный камень монолитного зодчества, от которого зависят все его преимущества: скорость и качество работ, надежность и долговечность здания, и др. Применение монолитной опалубки дает возможность еще на стадии проектирования планировать какой угодно интерьер будущих помещений, ограничение составляет только максимальная площадь комнаты. В зависимости от назначения монолитная опалубка делится на стеновую , для фундаментов, горизонтальных перекрытий и колонн .

    Тенденция развития монолитных технологий показывает, что они уверенно набирают «обороты» и, возможно, постепенно вытеснят сборные железобетонные технологии с рынка вовсе. Статистика строительства г. Москвы говорит, что в 90-х годах прошлого столетия доля монолитных сооружений составляла всего 10%. В 1999 году соотношение монолитных зданий к панельным составило уже 30:70, а всего через два года, в 2001 - 50:50. Сейчас с каждым годом перевес усиливается в сторону монолитного зодчества.

    • Рост популярности возведения в Москве зданий с помощью монолитной опалубки объясняется несколькими факторами:
      • более низкой себестоимостью работ;
      • условиями плотной застройки, когда строительство сборных панельных домов ограничено небольшой площадью;
      • запретами на строительство типовых панельных зданий в исторических регионах.

    В монолитных , или макроядерных , операционных системах ядро, состоящее из мно­жества управляющих модулей и структур данных, не разделено на центральную часть и периферийные (по отношению к этой центральной части) модули. Ядро получается монолитным, неделимым. В этом смысле макроядерные операцион­ные системы являются прямой противоположностью микроядерным . В монолитной операционной системе, несмотря на ее возможную сильную структуризацию, очень трудно удалить один из уровней многоуровневой модульной структуры. Добавление новых функций и изменение существующих для монолитных операционных систем требует очень хорошего знания всей архи­тектуры операционной системы и чрезвычайно больших усилий. Очень плодотворным оказался подход, основанный на модели клиент-сервер. Эта модель предполагает наличие программного компонента - потребителя какого-либо сервиса, или клиента, и программного компонента - поставщика этого сер­виса, или сервера.

    Взаимодействие между клиентом и сервером стандартизируется, так что сервер может обслуживать клиентов, реализованных различными спосо­бами и, возможно, разными разработчиками. При этом главным требованием яв­ляется то, чтобы использовался единообразный интерфейс. Инициатором обмена обычно является клиент, который посылает запрос на обслуживание серверу, на­ходящемуся в состоянии ожидания запроса. Один и тот же программный компо­нент может быть клиентом по отношению к одному виду услуг и сервером для другого вида услуг. Модель клиент-сервер является скорее удобным концептуаль­ным средством ясного представления функций того или иного программного эле­мента в той или иной ситуации, нежели технологией. Эта модель успешно приме­няется не только при построении операционных систем, но и на всех уровнях программного обеспечения, и имеет в некоторых случаях более узкий, специфи­ческий смысл, сохраняя, естественно, при этом все свои общие черты. Микроядер­ные операционные системы в полной мере используют модель клиент-сервер.

    При поддержке монолитных операционных систем возникает ряд проблем, свя­занных с тем, что все компоненты макроядра работают в едином адресном про­странстве. Во-первых, это опасность возникновения конфликта между различны­ми частями ядра, во-вторых, сложность подключения к ядру новых драйверов. Преимущество микроядерной архитектуры перед макроядерной заключается в том, что каждый компонент системы представляет собой самостоятельный процесс, запуск или остановка которого не отражается на работоспособности остальных процессов.

    Микроядерные операционные системы нынче разрабатываются чаще монолитных. Однако следует заметить, что использование технологии клиент-сервер - это еще не гарантия того, что операционная система станет микроядерной. В качестве под­тверждения этому можно привести пример с операционными системами класса Windows NT, которые построены на идеологии клиент-сервер, но которые тем не менее трудно назвать микроядерными. Их «микроядро» имеет уже достаточно боль­шой размер, приставка «микро» здесь вызывает улыбку. Хотя по своей архитекту­ре супервизорная часть этих систем без каких-либо условностей может быть отне­сена к системам, построенным на базе модели клиент-сервер. Причем для последних версий операционных систем с общим названием NT (New Technology) еще более заметным является отход от микроядерной архитектуры, но сохранение принципа клиент-сервер во взаимодействиях между модулями управляющей (супервизорной) части. Для того чтобы согласиться с таким высказыванием, достаточно срав­нить операционную систему QNX и операционные системы Windows NT/2000/ХР.