Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 75
Текст из файла (страница 75)
Любая деятельность, связанная с безопасностью, может быть отслежена и тем самым учтена. Это как раз то, что требует стандарт для системкласса С2 и что обычно нужно банкам. Однако коммерческие пользователи, какправило, не хотят расплачиваться производительностью за повышенный уровеньбезопасности. Уровень безопасности А занимает своими управляющими механизмами до 90 % процессорного времени, что, безусловно, в большинстве случаев неприемлемо. Более безопасные системы не только снижают эффективность, но исущественно ограничивают число доступных прикладных пакетов, которые соответствующим образом могут выполняться в подобной системе. Например, для операционной системы Solaris (версия UNIX) есть несколько тысяч приложений, а дляее аналога уровня В — только около ста.Микроядерные операционные системыВ микроядерных операционных системах мы можем выделить центральный компактный модуль, относящийся к супервизорной части системы.
Этот модуль имеет очень небольшие размеры и выполняет относительно небольшое количествоуправляющих функций, но позволяет передать управление на другие управляющие модули, которые и выполнят затребованную функцию. Микроядро — это минимальная главная (стержневая) часть операционной системы, служащая основой модульных и переносимых расширений. Микроядро само является модулемсистемного программного обеспечения, работающим в наиболее приоритетномсостоянии компьютера и поддерживающим связи с остальной частью операционной системы, которая рассматривается как набор серверных приложений (служб).в 90-е годы XX века было весьма распространенным убеждение, что большинствооперационных систем следующих поколений будут строиться как микроядерные.Однако практика показывает, что это не совсем так.
Разработчики желают иметькомпактное микроядро, но при этом включить в него как можно больше функций,исполняемых непосредственно этим программным модулем. Ибо выполнение зареоованной функции другим модулем, вызываемым из микроядра, приводиткДополнительным задержкам, и к дополнительным сложностям. Более того, имеТсямасса разных мнений по поводу того, как следует организовывать службы операционной системы по отношению к микроядру; как проектировать драйверыР°йств, чтобы добиться наибольшей эффективности, но сохранить функции290Глава 9. Архитектура операционных системдрайверов максимально независимыми от аппаратуры; следует ли выполнять операции, не относящиеся к ядру, в пространстве ядра или в пространстве пользователя; стоит ли сохранять программы имеющихся подсистем (например, UNIX) илилучше отбросить все и начать с нуля.Основная идея, заложенная в технологию микроядра заключается в том, чтобысоздать необходимую среду верхнего уровня иерархии, из которой можно легкополучить доступ ко всем функциональным возможностям уровня аппаратногообеспечения.
При этом микроядро является стартовой точкой для создания всехостальных модулей системы. Все эти остальные модули, реализующие необходимые системе функции, вызываются из микроядра и выполняют сервисную роль.При этом они получают статус обычного процесса или задачи. Можно сказать,что микроядерная архитектура соответствует технологии клиент-сервер.
Именно эта технология позволяет в большей мере и с меньшими трудозатратами реализовать перечисленные выше принципы проектирования операционных систем.Важнейшая задача разработки микроядра заключается в выборе базовых примитивов, которые должны находиться в микроядре для обеспечения необходимого идостаточного сервиса. В микроядре содержится и исполняется минимальное количество кода, необходимое для реализации основных системных вызовов. В число этих вызовов входят передача сообщений и организация другого общения между внешними по отношению к микроядру процессами, поддержка управленияпрерываниями, а также ряд других весьма немногочисленных функций. Остальные системные функции, характерные для «обычных» (не микроядерных) операционных систем, обеспечиваются как модульные дополнения-процессы, взаимодействующие главным образом между собой и осуществляющие взаимодействиепосредством передачи сообщений.Для большинства микроядерных операционных систем основой для такой архитектуры выступает технология микроядра Mach.
Эта операционная система быласоздана в университете Карнеги Меллон, и многие разработчики брали с нее пример.Исполняемые микроядром функции ограничены в целях сокращения его размеров и максимизации количества кода, работающего как прикладная программа.Микроядро включает только те функции, которые требуются в целях определения набора абстрактных сред обработки для прикладных программ и организациисовместной работы приложений. В результате микроядро обеспечивает только пятьразличных типов сервисов:•управление виртуальной памятью;•поддержка заданий и потоков;Q взаимодействие между процессами (Inter-Process Communication, IPC);Q управление поддержкой ввода-вывода и прерываниями;•сервисы хоста (host) 1 и процессора.Хост — главный компьютер.
Нынче этим термином обозначают любой компьютер, имеющийМикроядерные операционные системы291Другие подсистемы и функции операционной системы, такие как файловые системы, поддержка внешних устройств и традиционные программные интерфейсы,оформляются как системные сервисы либо получают статус обычных обрабатывающих задач. Эти программы работают как приложения на микроядре.С применением концепции нескольких потоков выполнения на одно задание микроядро создает прикладную среду, обеспечивающую использование мультипроцессоров; при этом совсем не обязательно, чтобы машина была мультипроцессорной: на однопроцессорной машине различные потоки просто выполняются в разноевремя. Вся поддержка, требуемая для мультипроцессорных машин, сконцентрирована в сравнительно малом и простом микроядре.Благодаря своим небольшим размерам и способности поддерживать остальныеслужбы в виде обычных процессов, выполняющихся вместе с прикладными программами, сами микроядра проще, чем ядра монолитных или модульных операционных систем.
С микроядром супервизорная часть операционной системы разбивается на модульные части, которые могут быть сконфигурированы целым рядомспособов, позволяя строить большие системы добавлением частей к меньшим.Например, каждый аппаратно-независимый нейтральный сервис логически отделен и может быть сконфигурирован различными способами.
Микроядра такжеоблегчают поддержку мультипроцессоров созданием стандартной программнойсреды, которая может использовать несколько процессоров, если они есть, однакоесли их нет, работает на одном. Специализированный код для мультипроцессоровограничен самим микроядром. Более того, сети из общающихся между собой микроядер могут быть использованы для операционной системной поддержки возникающего класса массивно параллельных машин.В некоторых случаях использование микроядерного подхода на практике сталкивается с определенными сложностями, что проявляется в некотором замедлениискорости выполнения системных вызовов при передаче сообщений через микроядро по сравнению с классическим подходом.
С другой стороны, можно констатировать и обратное. Поскольку микроядра малы и в значительной степени оптимизированы, при соблюдении ряда условий они позволяют обеспечить характеристикиреального времени, требующиеся для управления устройсч вами и для высокоскоростных коммуникаций. Наконец, хорошо структурированные микроядра обеспечивают изолирующий слой для аппаратных различий, которые не маскируютсяприменением языков программирования высокого уровня. Таким образом, ониупрощают перенесение кода и увеличивают уровень его повторного использования.Наиболее ярким представителем микроядерных операционных систем являетсяоперационная система реального времени QNX. Микроядро QNX поддерживаеттолько планирование и диспетчеризацию процессов, взаимодействие процессов,обработку прерываний и сетевые службы нижнего уровня (подробнее об ОС QNXсм.
в главе 10). Это микроядро обеспечивает всего лишь пару десятков системныхвызовов, но благодаря этому оно может быть целиком размещено во внутреннемкэше даже таких процессоров, как Intel 486. Как известно, разные версии этой операционной системы имели и разные объемы ядер — от 8 до 46 Кбайт.292Глава 9. Архитектура операционных систо иЧтобы построить минимальную систему QNX, требуется добавить к микроядпуменеджер процессов, который создает процессы и управляет ими и памятью процессов. Чтобы операционная система QNX была применима не только во встроенных и бездисковых системах, нужно добавить файловую систему и менеджер устройств. Эти менеджеры исполняются вне пространства ядра, так что ядро остаетсянебольшим.Макроядерные операционные системыВ макроядерных, или монолитных, операционных системах ядро, состоящее из множества управляющих модулей и структур данных, не разделено на центральнуючасть и периферийные (по отношению к этой центральной части) модули.
Ядрополучается монолитным, неделимым. В этом смысле макроядерные операционные системы являются прямой противоположностью микроядерным. Можно согласиться с тем, как трактуется архитектура монолитных операционных систем вработах [29,30]. В монолитной операционной системе, несмотря на ее возможнуюсильную структуризацию, очень трудно удалить один из уровней многоуровневоймодульной структуры. Добавление новых функций и изменение существующихдля монолитных операционных систем требует очень хорошего знания всей архитектуры операционной системы и чрезвычайно больших усилий.Очень плодотворным оказался подход, основанный на модели клиент-сервер.
Этамодель предполагает наличие программного компонента — потребителя какоголибо сервиса, или клиента, и программного компонента — поставщика этого сервиса, или сервера. Взаимодействие между клиентом и сервером стандартизируется,так что сервер может обслуживать клиентов, реализованных различными способами и, возможно, разными разработчиками. При этом главным требованием является то, чтобы использовался единообразный интерфейс. Инициатором обменаобычно является клиент, который посылает запрос на обслуживание серверу, находящемуся в состоянии ожидания запроса. Один и тот же программный компонент может быть клиентом по отношению к одному виду услуг и сервером длядругого вида услуг. Модель клиент-сервер является скорее удобным концептуальным средством ясного представления функций того или иного программного элемента в той или иной ситуации, нежели технологией. Эта модель успешно применяется не только при построении операционных систем, но и на всех уровняхпрограммного обеспечения, и имеет в некоторых случаях более узкий, специфический смысл, сохраняя, естественно, при этом все свои общие черты.