Может ли кто-нибудь объяснить на примерах разницу между монолитным и микроядром? Также другие классификации ядра?
Может ли кто-нибудь объяснить на примерах разницу между монолитным и микроядром? Также другие классификации ядра?
Ответы:
Монолитное ядро - это один большой процесс, полностью работающий в одном адресном пространстве. Это единственный статический двоичный файл. Все службы ядра существуют и выполняются в адресном пространстве ядра. Ядро может напрямую вызывать функции. Примеры ОС на основе монолитного ядра: Unix, Linux.
В микроядрах ядро разбито на отдельные процессы, известные как серверы. Некоторые из серверов работают в пространстве ядра, а некоторые - в пространстве пользователя. Все серверы хранятся отдельно и работают в разных адресных пространствах. Серверы вызывают «службы» друг у друга, отправляя сообщения через IPC (межпроцессное взаимодействие). Такое разделение имеет то преимущество, что в случае отказа одного сервера другие серверы все еще могут работать эффективно. Примеры ОС на базе микроядра: Mac OS X и Windows NT.
Конструкция монолитного ядра намного старше идеи микроядра, появившейся в конце 80-х годов.
Ядра Unix и Linux являются монолитными, а QNX, L4 и Hurd - микроядрами. Mach изначально был микроядром (а не Mac OS X), но позже был преобразован в гибридное ядро. Minix (до версии 3) не был чистым микроядром, потому что драйверы устройств были скомпилированы как часть ядра.
Монолитные ядра обычно быстрее микроядер. Первое микроядро Mach было на 50% медленнее, чем большинство монолитных ядер, в то время как более поздние, такие как L4, были всего на 2% или 4% медленнее, чем монолитные конструкции.
Монолитные ядра имеют большие размеры, а микроядра - небольшие по размеру - они обычно помещаются в кэш L1 процессора (микроядра первого поколения).
В монолитных ядрах драйверы устройств находятся в пространстве ядра, а в микроядрах драйверы устройств находятся в пространстве пользователя.
Поскольку драйверы устройств монолитных ядер находятся в пространстве ядра, монолитные ядра менее безопасны, чем микроядра, и сбои (исключения) в драйверах могут привести к сбоям (отображаются как BSOD в Windows). Микроядра более безопасны, чем монолитные ядра, поэтому чаще используются в военных устройствах.
Монолитные ядра используют сигналы и сокеты для реализации межпроцессного взаимодействия (IPC), микроядра используют очереди сообщений. Микроядра 1-го поколения плохо реализуют IPC и медленно переключают контекст - это и является причиной их низкой производительности.
Добавление новой функции в монолитную систему означает перекомпиляцию всего ядра или соответствующего модуля ядра (для модульных монолитных ядер), тогда как с микроядрами вы можете добавлять новые функции или исправления без перекомпиляции.
Монолитное ядро
Все части ядра, такие как планировщик, файловая система, управление памятью, сетевые стеки, драйверы устройств и т. Д., Поддерживаются в одном блоке внутри ядра в монолитном ядре.
преимущества
• Более быстрая обработка
Недостатки
• Небезопасный сбой • Негибкость переноса • Взрыв размера ядра
Примеры • MS-DOS, Unix, Linux
Микро ядро
В ядро помещаются только очень важные части, такие как IPC (межпроцессное взаимодействие), базовый планировщик, базовая обработка памяти, базовые примитивы ввода-вывода и т. Д. Связь происходит посредством передачи сообщений. Остальные поддерживаются как серверные процессы в пространстве пользователя.
преимущества
• Устойчивый к ударам, портативный, меньший размер
Недостатки
• Более медленная обработка из-за дополнительной передачи сообщений
Примеры • Windows NT
1. монолитное ядро (чистое монолитное):all
Все службы ядра из одного компонента
(-) добавление / удаление невозможно, меньше / Ноль гибкий
(+) межкомпонентная связь лучше
например: - Традиционный Unix
2. микро ядро:few
несколько служб (управление памятью, управление процессором, IPC и т. д.) из ядра ядра, другие сервисы (управление файлами, управление вводом-выводом и т. д.) из разных уровней / компонентов
Разделенный подход [Некоторые службы находятся в привилегированном (ядровом) режиме, а некоторые - в нормальном (пользовательском) режиме]
(+) гибкость для изменений / апгрейда
(-) накладные расходы на связь
например: - QNX и т. д.
3. Модульное ядро (Modular Monolithic):most
Комбинация микро- и монолитного ядра
Сборник модулей - модули могут быть -> статические + динамические
Драйверы представлены в виде модулей.
например: - Современная ОС Linux
В спектре конструкций ядер двумя крайними точками являются монолитные ядра и микроядра.
Например, (классическое) ядро Linux представляет собой монолитное ядро (как и все коммерческие ОС на сегодняшний день, хотя они могут утверждать иное);
В том смысле, что его код представляет собой один файл C, порождающий единый процесс, реализующий все вышеперечисленные службы.
Чтобы проиллюстрировать инкапсуляцию ядра Linux, отметим, что ядро Linux даже не имеет доступа ни к одной из стандартных библиотек C. Действительно, ядро Linux не может использовать элементарные функции библиотеки C, такие как printf. Вместо этого он реализует свою собственную функцию печати (называемую печатью).
Такое изолирование ядра Linux и самодостаточности обеспечивает ядру Linux его главное преимущество: ядро находится в едином адресном пространстве1, что позволяет всем функциям взаимодействовать максимально быстро, не прибегая к передаче сообщений любого типа. В частности, монолитное ядро реализует все драйверы устройств системы.
Однако это главный недостаток монолитного ядра: внедрение любого нового неподдерживаемого оборудования требует переписывания ядра (в соответствующих частях), его перекомпиляции и переустановки всей ОС.
Что еще более важно, если какой-либо драйвер устройства выйдет из строя, в результате страдает все ядро. Этот немодульный подход к добавлению оборудования и сбоям оборудования является главным аргументом в пользу другого крайнего подхода к проектированию ядер. Микроядро - это в некотором смысле минималистичное ядро, в котором размещаются только самые основные службы ОС (например, управление процессами и управление файловой системой). В микроядре драйверы устройств находятся вне ядра, что позволяет добавлять и удалять драйверы устройств во время работы ОС и не требует изменений ядра.
Монолитное ядро включает в себя все службы ядра вместе с частью ядра ядра, поэтому они тяжелые и негативно влияют на скорость и производительность. С другой стороны, микро-ядро легкое, что увеличивает производительность и скорость.
Я ответил на тот же вопрос на сайте wordpress. Чтобы увидеть разницу между монолитным ядром, микроядром и экзоядром в табличной форме, вы можете посетить здесь