2G_L6-7

advertisement
30
ЛЕКЦИЯ 6 (17/03/03)
ГЛАВА 2 АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ
Под архитектурой ОС понимают структурную организацию ОС на
основе различных программных модулей.
§1 Основные принципы структурирования ОС
1.1 Иерархическая декомпозиция и абстрактные машины
Различия между языком, на котором формулируются задачи, и
языком, на котором описываются алгоритмы их решения, порождают
трудности при разработке концепции программ.
Термин "язык" определяет некоторые объекты (и механизмы,
позволяющие их создавать); действия, или примитивы, позволяющие
оперировать объектами, и правила композиции таких действий.
Любой
язык
концептуально
определяет
некоторую
"машину",
способную его интерпретировать. Перечень инструкций для нее
совпадает со множеством операций языка, ее память позволяет
представлять
объекты,
определяемые
языком;
а
механизм
выполнения инструкций определяется правилами интерпретации
языка. Подобная машина называется абстрактной, поскольку она не
имеет физической реализации.
Метод
нисходящей
декомпозиции
является
разновидностью
декартова
покоординатного
спуска,
который
заключается
в
сведении задачи к последовательности элементарных подзадач,
решаемых более простыми способами.
Вначале определяем машину M0 так, что с помощью объектов и
примитивов, реализованных на ней, надеемся решить поставленную
задачу более простым способом. При этом возникает проблема
реализации машины M0 (определенной нами), на реально имеющейся
машине M. Для решения этой новой задачи определяем машину M1 и
так далее до тех пор, пока очередную машину Mn будет легко
реализовать на имеющейся машине M.
На каждом новом уровне таким образом достигается упрощение
за счет сужения задачи. В процессе абстрагирования происходит
выделение существенных аспектов проблемы за счет спецификации
машин; второстепенные для данной фазы вопросы откладываются до
реализации
соответствующей
специфицированной
машины.
Спецификация машины для пользователя сводится к ее интерфейсу,
т.е. к объектам и операциям, предоставляемым данной машиной.
На практике этот метод никогда не используется в "чистом"
виде;
для
сложных
задач
практически
невозможно
заранее
фиксировать спецификации интерфейса в деталях, т.к. при их
разработке
используются
результаты
экспериментов
с
промежуточными реализациями.
В любом случае, иерархическая структура
рядом преимуществ благодаря абстрагированию:
слоев
обладает
 Независимость концепции: состояние машины для пользователя
полностью
описывается
спецификациями
ее
интерфейса
(пользователю безразлична конкретная реализация данной машины).
31
 Независимость модификаций: изменения в реализации некоторой
машины не требуют изменений в машинах, ее использующих, если
спецификации интерфейса не меняются.
 Независимость отладки: после того, как интерфейс некоторой
машины
специфицирован,
ее
отладка
может
производиться
независимо.
1.2 Понятие объекта
Иерархическая декомпозиция не затрагивает всех аспектов
структурирования систем. Новое средство структурирования –
понятие объекта. Обычно объекты определяются совокупностью
своих
свойств
(атрибутов)
и
механизмов
взаимодействия
(составляющих компонентов).
Объект определяется с помощью следующих атрибутов:
 имени, которое позволяет обозначать объект и отличать его
от других;
 состояния, которое определяется в каждый момент и может
изменяться с течением времени;
 множества
операций,
или
функций
доступа,
которые
позволяют создавать и уничтожать объекты, проверять и
изменять их состояния, комбинировать объекты между собой.
Класс объектов группирует объекты с общими свойствами и,
следовательно, представляет собой средство абстракции.
Каждому классу соответствует множество функций, применимых
ко всем объектам данного класса; каждый объект класса обладает
своим
собственным
именем
и
состоянием.
Каждый
объект
принадлежит
некоторому
классу;
при
создании
объекта
определяются его имя и начальное состояние, после чего все
операции, допустимые в данном классе, могут быть к нему
применены.
Подкласс объектов – множество объектов в некотором классе,
обладающих дополнительно некоторыми общими свойствами.
Подклассы наследуют свойства порождающего класса.
В теории ОС понятие класса объектов служит для реализации
конкретного физического объекта (или ресурса) абстрактным
образом. При этом преследуются две цели:
1) отказаться от детализации его внутреннего функционирования
благодаря переопределению интерфейса;
2) обеспечить
распределение
объекта
между
многими
пользователями с помощью механизма динамического порождения
объектов.
Пример: Наиболее широко распространенные классы
представляющие абстракцию физических ресурсов:
Классы объектов
Файлы
Потоки
Процессы
Виртуальная память
объектов,
Ресурсы
Внешняя память
Периферийные устройства
Процессор
Физическая память
32
1.3 Интерфейсы и спецификация
Рассмотрим форму интерфейсов и способы их спецификации.
Пока ограничимся интерфейсами, для которых механизм активации
представляет собой обращение к процедуре (механизм, основанный
на передаче сообщений, рассмотрим позднее). Каждый интерфейс
связан либо с абстрактной машиной, либо с классом объектов. Он
предоставляет пользователям информацию только трех типов:
структуры данных, процедуры и правила пользования данными
процедурами.
Правила пользования обычно отражают структуру и ограничения
на данные и процедуры и могут принимать следующие формы:
 ограничения на доступ к данным (например, только чтение);
 ограничения на порядок выполнения процедур;
 строгий
режим
одновременного
выполнения
процедур
или
одновременного доступа к данным.
Часть спецификаций может быть выражена формальным образом и
поддается автоматической верификации, например, типы параметров
и параметры процедур.
Для определения эффекта вызова процедур используются два
средства:
 задание предусловий и постусловий;
 установление
эквивалентности
между
разными
формами
алгоритмов для данной процедуры.
Однако
наиболее
распространенным
спецификаций остается естественный язык.
Методы учета
интерфейсов:
возможности
ошибок,
способом
исходя
из
выражения
спецификации
 просмотр кодов ошибок (дополнительный параметр процедуры,
его значение может быть изменено процедурой);
 присоединение процедуры обработки (с каждой потенциально
возможной
ошибкой
связывается
специальная
процедура
обработки). Такой способ позволяет четко разграничить
нормальные и исключительные ситуации. Определение таких
ситуаций и учет возможных причин сбоев в работе, вытекающих
из спецификаций, относятся к компетенции разработчика.
§2 Ядро и вспомогательные модули ОС
В состав ОС входит множество модулей (т.е. частей со строго
определенными функциями и правилами их взаимодействия). Это
исполняемые и объектные модули стандартных форматов, библиотеки
разных типов, конфигурационные файлы, файлы документации,
программные модули специального формата (загрузчик ОС, драйверы
ввода/вывода)…
Все эти модули ОС можно разделить на два больших класса:
1) Ядро – модули, выполняющие основные функции ОС.
2) Модули, выполняющие вспомогательные функции ОС.
Охарактеризуем
каждый из этих классов.
33
1) Ядро. Состав ядра можно условно разделить на два подкласса:
 Функции,
решающие
внутрисистемные
задачи
организации
вычислительного процесса – такие, как переключение контекста,
загрузка/выгрузка страниц, обработка прерываний. Эти функции
недоступны для приложений.
 Функции поддержки приложений, создающие так называемую
прикладную программную среду. Эти функции образуют интерфейс
прикладного программирования – API (application programming
interface). Приложения обращаются к ядру с запросами –
системными вызовами – для выполнения тех или иных действий
(например, для открытия и чтения файла, вывода графической
информации на дисплей, получения системного времени).
Функции,
выполняемые
ядром,
являются
наиболее
часто
используемыми функциями ОС, поэтому скорость их выполнения
определяет производительность системы в целом. Для обеспечения
высокой скорости работы ОС все модули ядра (или большая их
часть) постоянно находятся в оперативной памяти, т.е. являются
резидентными.
Надежность кодов ядра является определяющей для надежности
всей ОС.
Обычно
ядро
оформляется
в
виде
программного
модуля
некоторого специального формата, отличающегося от форматов
пользовательских приложений.
Существует два подхода к построению ядра – это монолитное
ядро (классический подход) и микроядерная архитектура. При
монолитном ядре оно является, по сути, обычной программой, т.е.
состоит не из отдельных самостоятельных модулей, а из процедур
и функций. При микроядерном подходе к построению ядра все его
составляющие являются самостоятельными программами и, возможно,
выполняются в разных адресных пространствах. Взаимодействие
между ними осуществляет специальный модуль ядра, называемый
микроядром.
Ниже рассмотрим эти подходы подробно.
2) Остальные модули ОС, которые выполняют полезные, но менее
обязательные функции (например, архивация данных на магнитной
ленте, дефрагментация диска). Такие модули ОС оформляются либо
в виде приложений, либо в виде библиотек процедур.
Грань между пользовательскими приложениями и ОС является
весьма условной. Нередко бывает, что за время существования
приложения его статус меняется. Например, Web-браузер компании
Microsoft изначально являлся отдельным приложением, затем стал
частью ОС Windows NT версии 4.0 и Windows 95/98.
Вспомогательные
модули
ОС
обычно
подразделяются
на
следующие группы:
 Утилиты – программы, решающие отдельные задачи управления и
сопровождения компьютерной системы (сжатие диска и т.п.).
 Системные
обрабатывающие
программы
компиляторы, отладчики, компоновщики.
–
редакторы,
34
 Программы предоставления пользователю дополнительных услуг
–
специальный
вариант
пользовательского
интерфейса
(калькулятор, игры).
 Библиотеки процедур различного
функций, функций ввода/вывода, …).
назначения
(математических
Вспомогательные модули ОС загружаются в оперативную память
только на время выполнения своих функций, т.е. являются
транзитными.
Такая архитектура обеспечивает расширяемость и безопасность
операционной системы.
§3 Многослойная структура ОС
Вычислительную
систему,
работающую
под
управлением
ОС
на
основе
ядра,
можно
рассматривать как систему, состоящую из трех
иерархически расположенных слоев:
1 – аппаратура; 2 – ядро ОС; 3 – утилиты,
обрабатывающие программы, библиотеки.
На схеме такая структура имеет вид системы
концентрических окружностей, что иллюстрирует
тот факт, что каждый слой может взаимодействовать
соседними.
3
2
1
только
с
Многослойный подход обычно распространяется и на структуру
ядра. Здесь мы видим реализацию того принципа иерархической
декомпозиции, о котором говорили ранее. Система состоит из
иерархии слоев. Каждый слой обслуживает вышележащий слой,
выполняя для него некоторый набор функций, которые образуют
межслойный интерфейс. На основе функций нижележащего слоя
следующий слой строит свои функции, более сложные и мощные,
которые, в свою очередь, являются примитивами для создания еще
более сложных функций следующего слоя. Связи между модулями
внутри слоя могут быть произвольными. Отдельный модуль может
выполнять свою работу самостоятельно, или обращаться к другому
модулю своего слоя, или к нижележащему слою через межслойный
интерфейс.
ЛЕКЦИЯ 7 (22/03/03)
Ядро может состоять из следующих слоев:
 Средства аппаратной поддержки ОС (те, которые прямо
участвуют в организации вычислительных процессов – средства
поддержки привилегированного режима, системных прерываний,
средства переключения контекстов, защиты областей памяти).
 Машинно-зависимые компоненты ОС – программные модули, в
которых отражена специфика аппаратной платформы компьютера.
Этот
слой
экранирует
вышележащие
слои
от
особенностей
аппаратуры.
 Базовые механизмы ядра выполняют наиболее примитивные
операции ядра, отрабатывая "принятые наверху" решения, т.е.
представляют собой исполнительные механизмы для модулей верхних
35
слоев (перемещение страниц из памяти
программное переключение контекстов).
на
диск
и
обратно,
 Менеджеры ресурсов. Мощные функциональные модули этого слоя
решают стратегические задачи по управлению основными ресурсами
всей системы (Диспетчеры процессов, ввода-вывода, файловой
системы, оперативной памяти). Каждый менеджер ведет учет
свободных и используемых ресурсов и планирует их распределение
в соответствии с запросами приложений.
 Интерфейс системных вызовов – верхний слой ядра, который
взаимодействует
непосредственно
с
приложениями,
образуя
прикладной программный интерфейс ОС – API.
Приведенное разбиение на слои является достаточно условным.
В реальной системе количество слоев и распределение функций
между ними может быть иным. Кроме того, иногда нарушается
иерархия
и
обращения
осуществляются
через
слой.
Выбор
количества слоев является очень важным, т.к. увеличение их
количества замедляет работу системы, а уменьшение – ухудшает
расширяемость и логичность системы.
Интерфейс прикладного программирования
Прикладные программисты используют в своих приложениях
обращения к ОС, когда для выполнения тех или иных действий им
требуется особый статус, которым обладает только операционная
система. Программист для своих целей может воспользоваться
набором сервисных функций ОС либо реализовать соответствующую
функцию самостоятельно, если предлагаемый операционной системой
вариант его не вполне устраивает.
Возможности
операционной
системы
доступны
прикладному
программисту в виде набора функций, называющегося интерфейсом
прикладного
программирования
(Application
Programming
Interface, API).
Для разработчиков приложений все особенности конкретной
операционной системы представлены особенностями ее API. Поэтому
операционные системы с различной внутренней организацией, но с
одинаковым набором функций API, кажутся им одной и той же ОС.
Это упрощает стандартизацию операционных систем и обеспечивает
переносимость
приложений
между
внутренне
различными
ОС,
соответствующими определенному стандарту на API.
Приложения выполняют обращения к функциям API с помощью
системных вызовов (технику рассмотрим подробно далее). Способ
реализации системных вызовов зависит от структурной организации
ОС, которая, в свою очередь, тесно связана с особенностями
аппаратной
платформы.
Кроме
того,
он
зависит
от
языка
программирования. При использовании языка программирования
высокого уровня функции ОС вызываются тем же способом, что и
написанные
пользователем
подпрограммы,
требуя
задания
определенных аргументов в определенном порядке.
Пользовательский интерфейс
не
Операционная система должна обеспечивать удобный интерфейс
только для прикладных программ, но и для человека,
36
работающего за терминалом. Этот человек может быть конечным
пользователем, программистом или администратором ОС.
В ранних операционных системах пакетного режима функции
пользовательского интерфейса были минимальными и не требовали
наличия терминала. Команды языка управления набивались на
перфокарты, а результаты выводились на печатающее устройство.
Современные
ОС
поддерживают
развитые
функции
пользовательского интерфейса для работы за терминалами двух
типов: алфавитно-цифровыми и графическими.
При работе за алфавитно-цифровым терминалом пользователь
имеет в своем распоряжении систему команд, мощность которой
отражает функциональные возможности данной ОС. Обычно командный
язык ОС позволяет запускать и останавливать приложения,
выполнять различные операции с файлами и каталогами, получать
информацию о состоянии ОС (количество работающих процессов,
объем
свободного
пространства
на
дисках
и
т.п.),
администрировать
систему.
Команды
могут
вводиться
в
интерактивном режиме с терминала или считываться из т.н.
командного файла, содержащего некоторую последовательность
команд. Программный модуль ОС, ответственный за чтение команд,
называют командным интерпретатором.
Если
операционная
система
поддерживает
графический
пользовательский интерфейс, ввод команды упрощается. В этом
случае пользователь для выполнения нужного действия с помощью
мыши выбирает на экране необходимый пункт меню или графический
символ.
§4 Принципы построения ядра
4.1 Монолитное ядро
Монолитное ядро является старейшим принципом организации
ОС. Оно применяется в большинстве UNIX-систем. Сборка ядра,
т.е. его компиляция – это единственный способ добавить в него
новые компоненты или исключить неиспользуемые. Присутствие
лишних компонент в ядре нежелательно, т.к. оно располагается в
несвопируемой
памяти
(т.е.
не
может
быть
вытеснено
из
физической памяти). Кроме того, исключение ненужных компонент
повышает надежность операционной системы в целом.
Для надежного управления вычислительным процессом ОС должна
иметь по отношению к приложениям определенные привилегии.
Рассмотрим, в чем они состоят.
Во-первых, все основные функции ОС, составляющие ядро,
выполняются в привилегированном режиме, т.е. аппаратура должна
поддерживать как минимум два режима работы – пользовательский и
привилегированный (т.н. режим ядра). Вспомогательные функции ОС
при этом оформляются в виде приложений и выполняются в
пользовательском режиме наряду с обычными пользовательскими
программами (см. рис.).
Приложения ставятся в подчиненное положение за счет запрета
в пользовательском режиме некоторых инструкций (переключение
процессора с задачи на задачу, управление механизмом защиты
памяти). Некоторые инструкции запрещены в пользовательском
37
Утилиты ОС
Системные обрабатывающие
программы
Приложения
пользователей
Пользовательский режим
Привилегированный режим
Ядро ОС
режиме
безусловно
(например,
инструкция
перехода
в
привилегированный режим), а некоторые – при определенных
условиях.
Например,
инструкция
ввода-вывода
может
быть
запрещена при доступе к контроллеру жесткого диска, который
хранит данные, общие для ОС и всех приложений, но разрешена при
доступе
к
последовательному
порту,
который
выделен
в
монопольное владение данному приложению. Условия разрешения
выполнения критичных инструкций находятся под полным контролем
ОС.
Во-вторых, привилегии ОС при доступе к памяти выражаются в
том, что код ядра имеет доступ к областям памяти всех
приложений, но сам полностью от них защищен. Каждое приложение
пользовательского режима работает в своем адресном пространстве
и тем самым защищено от вмешательства каких-либо других
приложений.
Взаимодействие между пользовательской программой и ядром ОС
осуществляется посредством системных вызовов. Системный вызов
очень похож на обращение к обычной функции, отличие состоит в
том, что при системном вызове задача переходит в режим ядра. В
этом режиме работает код ядра ОС, причем он исполняется в
адресном пространстве и в контексте вызвавшей его задачи.
Системный
вызов
реализуется
посредством
программного
прерывания.
Работа
приложения
Системный
вызов
Работа
приложения
Пользовательский режим
Работа ядра
Привилегированный
режим
Время переключения
режимов
Смена режимов при выполнении системного вызова
В
момент
системного
вызова
обработчик
прерывания
переключает стек на стек режима ядра, а после завершения
обработки
системного
вызова
–
обратно
на
стек
режима
пользователя. При этом каждый процесс должен иметь свой
собственный стек режима пользователя и стек режима ядра. Стек
38
режима пользователя должен быть уникальным, поскольку состояние
стека является частью контекста, т.е. должно сохраняться при
переключении. Отдельный стек режима ядра нужен по следующим
причинам. Со своим стеком программа может делать, что хочет, в
том числе может создать несколько стеков и переключаться между
ними.
Она
сама
определяет
размер
своего
стека.
Если
предположить, что код ядра исполняется на том же стеке, что был
у
пользователя
в
момент
системного
вызова,
то
нельзя
гарантировать, что стек будет иметь достаточный размер.
Следовательно, может возникнуть исключительная ситуация, а
такое событие в режиме ядра может привести к краху всей
системы. Если в режиме ядра находится несколько процессов, то
для каждого из них создается свой стек режима ядра.
Иногда разработчики ОС отступают от классической схемы,
изложенной выше, и организуют работу ядра и приложений в одном
и том же режиме.
Примеры.
1. ОС NetWare компании Novell использует привилегированный
режим процессоров Intel x86/Pentium как для работы ядра, так и
для работы своих специфических приложений – загружаемых
модулей NLM. Обращения к ядру выполняются быстрее, но
отсутствует надежная аппаратная защита памяти, занимаемой
модулями ОС, от некорректно работающего приложения. Этот
недостаток компенсируется тщательной отладкой модулей.
2. В одном режиме работают ядро и приложения тех ОС, которые
разработаны
для
процессоров,
не
поддерживающих
привилегированного режима работы – Intel 8088/86, послуживший
основой для компьютеров компании IBM. В ОС MS-DOS ядром, по
сути, являлись два модуля – msdos.sys и io.sys, к которым
обращались с системными вызовами командный интерпретатор
command.com, системные утилиты и приложения. Некорректно
написанные
приложения
могли
разрушить
(что
нередко
и
происходило) ядро этой ОС. Аналогичные ОС – это ранние ОС MSX,
CP/M . Но область применения таких ОС и не выдвигала строгих
требований.
4.2 Микроядерная архитектура
Микроядерная архитектура – это такая схема ядра ОС, при
которой все его компоненты, кроме микроядра, являются
самостоятельными процессами, работающими, возможно, в разных
адресных пространствах, и взаимодействуют друг с другом путем
передачи сообщений.
Микроядро
–
это
модуль
ядра
ОС,
обеспечивающий
взаимодействие между процессами, планирование процессов,
первичную обработку прерываний и базовое управление памятью.
В
привилегированном
режиме
остается
работать
только
микроядро,
которое
защищено
от
остальных
частей
ОС
и
приложений.
Набор
функций
микроядра
обычно
соответствует
функциям слоя базовых механизмов обычного ядра. Остальные,
более
высокоуровневые
функции
ядра,
оформляются
в
виде
приложений, работающих в пользовательском режиме.
39
Утилиты ОС
Приложения
пользователей
Утилиты ОС
Приложения
пользователей
Серверы ОС
Пользовательский режим
Пользовательский режим
Привилегированный режим
Привилегированный режим
Микроядро
Ядро ОС
Перенос основного объема функций ядра в пользовательское пространство
Опять же не существует однозначного решения, какие функции
относить к микроядру, а какие – оформлять отдельными модулями.
В общем случае многие менеджеры ресурсов, являющиеся обычно
составными частями монолитного ядра (файловая система, менеджер
безопасности, подсистемы управления виртуальной памятью и
процессами),
становятся
модулями,
работающими
в
пользовательском режиме.
Но менеджеры ресурсов, хотя и работают в пользовательском
режиме, имеют принципиальные отличия от традиционных утилит и
обрабатывающих
программ
операционной
системы.
Утилиты
и
обрабатывающие программы вызываются пользователями, поэтому в
ОС с классической архитектурой отсутствует механизм вызова
одного
приложения
другим.
При
микроядерной
архитектуре
приложения,
выделенные
из
состава
ядра,
специально
предназначены для обслуживания запросов других приложений
(например, создание процесса, выделение памяти, проверка прав
доступа к ресурсу и т.п.). Поэтому менеджеры ресурсов,
вынесенные в пользовательский режим, называются серверами ОС,
т.е.
модулями,
основным
назначением
которых
является
обслуживание запросов локальных приложений и других модулей ОС.
Очевидно,
что
необходимым
условием
для
реализации
микроядерной
архитектуры
является
наличие
удобного
и
эффективного способа вызова процедур одного процесса из
другого. Осуществление этого механизма является одной из
главных задач микроядра. Схема механизма обращения к функциям
ядра ОС, оформленным в виде серверов (причем это обращение
может осуществляться как со стороны приложения, так и со
стороны другого сервера), имеет следующий вид (см. рисунок).
Клиент (прикладная программа или компонент ОС) запрашивает
у сервера выполнения некоторой функции, посылая ему для этого
сообщение.
Непосредственная
передача
сообщений
между
приложениями
невозможна
в
силу
изоляции
их
адресных
пространств. Микроядро, работающее в привилегированном режиме,
имеет доступ к адресным пространствам всех приложений, поэтому
может выполнять функции
посредника. Микроядро передает
сообщение, содержащее имя и параметры вызываемой процедуры,
40
нужному серверу, тот выполняет операцию, после чего ядро
возвращает результаты клиенту с помощью другого сообщения.
Таким образом, микроядерная архитектура соответствует модели
клиент–сервер, в которой роль транспортных средств выполняет
микроядро.
Сетевой
сервер
Приложения
пользователей
Сообщениезапрос
Сообщениеответ
Файловый
сервер
Сервер
процессов
Сервер
безопасности
Пользовательский режим
Привилегированный режим
Микроядро
Реализация системного вызова в микроядерной архитектуре.
Работа
приложения
Системный
вызов
Работа
сервера ОС
Работа
приложения
Пользовательский режим
Привилегированный режим
Работа
микроядра
Работа
микроядра
Время переключения режимов
Смена режимов при выполнении системного вызова – сравнение
микроядерной ОС с классической
4.3
Сравнение
недостатки
двух
архитектур:
достоинства
и
Мы рассмотрели две модели архитектуры ядра ОС. Каждая имеет
свои достоинства и недостатки, поэтому ни одна из них не может
полностью вытеснить другую.
ОС
с
микроядерной
архитектурой
в
высокой
степени
удовлетворяет
большинству
требований,
предъявляемых
к
современной
ОС,
обладая
переносимостью,
расширяемостью,
надежностью.
Действительно, множественность и размытость межслойных
интерфейсов
классической
ОС
ухудшает
расширяемость
такой
системы.
Напротив,
ограниченный
набор
четко
определенных
интерфейсов микроядра позволяет легко добавлять новые функции
41
путем простой разработки новых приложений. Отключение ненужных
функций ОС осуществляется изменением файла настроек начальной
конфигурации системы.
Надежность системы с микроядром повышается потому, что
каждый сервер работает в своей области памяти и не может влиять
не только на микроядро, но и на другие модули ОС. Уменьшение
кода микроядра также уменьшает вероятность ошибок.
Итак, сведем все вышесказанное в таблицу для удобства
выполнения сравнений двух архитектур.
Монолитная архитектура
Микроядерная архитектура
 Высокая скорость работы – 
Дополнительные
накладные
вызовы
функций
ядра расходы
снижают
представляют
собой
обычные производительность системы.
вызовы процедур.
 Простота
проектирования
систем – не нужно беспокоиться
о
разбиении
на
модули
и
спецификациях интерфейсов, т.к.
любой
модуль
может
вызвать
любую функцию.

Необходимо очень аккуратно
проектировать
разбиение
на
отдельные
компоненты,
чтобы
минимизировать
взаимодействия
между слоями.

Множественность
и
размытость интерфейсов ухудшает
расширяемость
системы.
Для
добавления новых (или удаления
старых)
компонент
необходимо
выполнять перекомпиляцию ядра и
перезагрузку системы.
 Высокая степень модульности
ядра ОС улучшает расширяемость,
т.к.
облегчается
добавление
новых компонент и отключение
ненужных.
Можно
выполнять
загрузку/выгрузку компонент, не
прерывая работы системы.

Сложность отладки – после
внесения изменений необходимо
выполнять заново сборку ядра и
перезапуск
системы.
Сложно
находить ошибки.
 Упрощается процесс отладки
компонент
ядра
(можно
использовать обычные средства
отладки), легче найти ошибки,
уменьшаются их последствия.

Низкая надежность – все
компоненты работают в одном
адресном пространстве и ошибка
в
одной
влечет
повреждение
других и крах всей системы.
 Повышается надежность, т.к.
каждый сервер работает в своем
адресном
пространстве
и
не
может влиять на работу других.
 Простота
распределенной
информации.
организации
обработки
Основным
недостатком
микроядерного
подхода
является
снижение
производительности,
т.к.
вместо
обычных
двух
переключений режимов при выполнении системного вызова в ОС с
классической архитектурой здесь происходит четыре переключения
(см. рисунок выше).
Следовательно, ОС на основе микроядра при прочих равных
условиях всегда будет менее производительной, чем ОС с
классической
архитектурой.
Этим
объясняется
то,
что
микроядерный подход не получил того распространения, которое
42
ему предрекали.
Для
повышения
производительности
ОС
некоторые
часто
используемые приложения вносятся в состав микроядра. Например,
в ОС Windows NT 3.1, 3.5 диспетчер окон, графическая библиотека
входили в состав сервера пользовательского режима. Частое
использование этих приложений снижало производительность всей
системы. Поэтому при разработке очередной версии системы –
Windows NT 4.0 – эти функции были внесены в микроядро, что
существенно повысило эффективность работы системы.
Архитектура большинства современных ОС содержит как черты
монолитного ядра, так и элементы микроядерной архитектуры. Один
из подходов выбирается в роли базового, с последующими
коррективами
в
сторону
альтернативного
подхода.
Ранее
говорилось о необходимости перекомпиляции монолитного ядра для
внесения изменений – например, для изменения аппаратных
драйверов. В современных UNIX-системах этот недостаток устранен
за счет динамической загрузки драйверов устройств. Т.е., хотя
драйверы и работают в едином адресном пространстве, они должны
иметь четко специфицированный интерфейс с остальной частью ядра
ОС, чтобы обеспечить их загрузку в любой момент времени. В ядре
Linux разрешена динамическая загрузка любых компонент ядра –
т.н. модулей. В момент загрузки модуля его код загружается в
адресное пространство ядра и связывается с остальной частью
ядра.
Существуют системы с монолитным ядром под управлением
микроядра (например, 4.4 BSD и MkLinux, основанные на микроядре
Mach). Микроядро управляет виртуальной памятью и работой
низкоуровневых
драйверов.
Остальные
функции,
в
т.ч.
взаимодействие с прикладными программами, выполняет монолитное
ядро.
Операционная система Windows NT, например, хотя и cчитается
микроядерной, но имеет также и черты классической ОС. Микроядро
ее слишком сложно и велико, чтобы иметь приставку "микро" (оно
занимает более 1 мегабайта). Компоненты ядра взаимодействуют
друг с другом путем передачи сообщений, как в микроядерной ОС.
Но в то же время они работают в одном адресном пространстве и
используют общие структуры данных, как ОС с монолитным ядром.
Таким образом, ОС Windows NT с полным правом может называться
гибридной.
Download