Преимущества и недостатки микроядерной архитектуры
ОС, основанные на концепции микроядра, во многом удовлетворяют требованиям, предъявляемым к современным ОС, обладая переносимостью, расширяемостью, надежностью, и создают хорошие предпосылки для поддержки распределенных приложений. Но, к сожалению, все эти достоинства ОС приобретает в ущерб производительности. Рассмотрим более подробно, чем же обусловливается наличие перечисленных качеств у ОС, основанных на микроядерной архитектуре.
Как уже было сказано ранее, микроядерной ОС присуща изолированность всего машинно-зависимого кода в микроядре, вследствие чего для переноса системы на новую аппаратную платформу требуется минимальное количество изменений, причём все они логически сгруппированы. Эта особенность ОС с микроядром является их несомненным достоинством.
Особенности архитектуры микроядерных ОС обеспечивают их высокую степень расширяемости по сравнению с другими ОС. В классических системах, даже если и реализуется многослойная архитектура, бывает очень трудно, порой невозможно, поменять один слой на другой по причине множественности и размытости межслойных интерфейсов. Изменение существующих и добавление новых функций, а следовательно, изменение межслойных интерфейсов, требует не только глубокого знания ОС, но и больших временных затрат. Наряду с этим ограниченный набор четко определенных интерфейсов микроядра позволяет системе упорядоченно расти и эволюционировать. Добавление очередной подсистемы требует только лишь разработки нового приложения и никоим образом не затрагивает целостность микроядра. Микроядерная структура позволяет не только увеличивать, но и сокращать число компонентов ОС, что также бывает необходимо. Например, не всем пользователям нужны средства безопасности или поддержки распределенных приложений, а удаление их из традиционного ядра зачастую просто невыполнимая задача. Обычно традиционные ОС позволяют динамически добавлять в ядро или удалять из ядра только драйверы внешних устройств. Ввиду частых изменений в конфигурации подключенных к компьютеру внешних устройств подсистема ввода-вывода ядра допускает загрузку и выгрузку драйверов “на ходу”, но для этого она разрабатывается особым образом (например, среда STREAMS в UNIX или менеджер ввода-вывода в Windows NT). При микроядерном подходе конфигурируемость не вызывает никаких проблем и не требует особых мер, достаточно изменить файл с настройками начальной конфигурации системы или же остановить ненужные больше серверы в ходе работы обычными для остановки приложений средствами.
Использование микроядерной модели повышает надежность ОС. Каждый сервер выполняется в виде отдельного процесса в своей собственной области памяти и таким образом защищен от других серверов ОС, чего не наблюдается в традиционной ОС, где все модули ядра влияют друг на друга. И если отдельный сервер терпит крах, то он может быть перезапущен без останова или повреждения остальных серверов ОС. Более того, поскольку серверы выполняются в пользовательском режиме, они не имеют непосредственного доступа к аппаратуре и не могут модифицировать память, в которой хранится и работает микроядро. Другим потенциальным источником повышения надежности ОС является уменьшенный объем кода микроядра по сравнению с классическим ядром – это снижает вероятность появления ошибок программирования.
Модель с микроядром хорошо подходит для поддержки распределенных вычислений, так как использует механизмы, аналогичные сетевым, – взаимодействие клиентов и серверов путем обмена сообщениями. Серверы микроядерной ОС могут работать как на одном, так и на разных компьютерах. При получении сообщения от приложения микроядро обработает его самостоятельно и передаст локальному серверу или же перешлет его по сети микроядру, работающему на другом компьютере. Переход к распределенной обработке требует минимальных изменений в работе ОС – просто локальный транспорт заменяется на сетевой.
Все рассмотренные ранее свойства ОС с микроядерной архитектурой свидетельствовали о предпочтительности ее использования разработчиками. Однако, как уже говорилось, все эти качества приобретаются за счет снижения производительности ОС. Что же является этому причиной? Дело в том, что при классической организации ОС (рис. 7а) выполнение системного вызова сопровождается двумя переключениями режимов, а при микроядерной организации (рис. 7б) – четырьмя.
Таким образом, ОС на основе микроядра при прочих равных условиях всегда будет менее производительной, чем ОС с классическим ядром. Именно поэтому микроядерный подход не получил такого широкого распространения, которое ему предрекали.
Серьезность этого недостатка хорошо иллюстрирует история развития ОС Windows NT. В версиях 3.1 и 3.5 диспетчер окон, графическая библиотека и высокоуровневые драйверы графических устройств входили в состав сервера пользовательского режима и вызов функций этих модулей осуществлялся в соответствии с микроядерной схемой. Но очень скоро разработчики Windows NT поняли, что такой механизм обращений к часто используемым функциям графического интерфейса существенно замедляет работу приложений и делает данную ОС уязвимой в условиях острой конкуренции. В результате в версию Windows NT 4.0 были внесены существенные изменения – все перечисленные выше модули были перенесены в ядро, что отдалило эту ОС от идеальной микроядерной архитектуры, но зато резко повысило ее производительность.
Данный пример иллюстрирует главную проблему, с которой сталкиваются разработчики ОС, решившие применить микроядерный подход, что включить в микроядро, а что вынести в пользовательское пространство. В идеальном случае микроядро может состоять только из средств передачи сообщений и средств взаимодействия с аппаратурой, в том числе средств доступа к механизмам привилегированной защиты. Однако многие разработчики не всегда жестко придерживаются принципа минимизации функций ядра, часто жертвуя этим ради повышения производительности. В результате реализации ОС образуют некоторый спектр, на одном краю которого находятся системы с минимально возможным микроядром, а на другом – системы, в которых микроядро выполняет достаточно большой объем функций. Конфигурация микроядра конкретной ОС определяется в соответствии с критериями эффективности, применимыми к данной системе.