В чем разница между монолитным и микроядром?

114

Может ли кто-нибудь объяснить на примерах разницу между монолитным и микроядром? Также другие классификации ядра?

Ренджит Дж.
источник
2
Я бы также порекомендовал страницы Википедии
Дэвид Хеффернан
Еще один полезный вопрос - stackoverflow.com/questions/1806585/…
Аникет Такур

Ответы:

114

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

В микроядрах ядро ​​разбито на отдельные процессы, известные как серверы. Некоторые из серверов работают в пространстве ядра, а некоторые - в пространстве пользователя. Все серверы хранятся отдельно и работают в разных адресных пространствах. Серверы вызывают «службы» друг у друга, отправляя сообщения через IPC (межпроцессное взаимодействие). Такое разделение имеет то преимущество, что в случае отказа одного сервера другие серверы все еще могут работать эффективно. Примеры ОС на базе микроядра: Mac OS X и Windows NT.

сарифуль ислам
источник
36
и Mac OS X, и Windows являются гибридным ядром, поскольку в большей степени связаны с монолитным ядром. Примеры микроядер: Mach QNX AmigaOS Minix
zeitue
7
GNU Hurd - отличный пример ОС, работающей на микроядре. Он все еще находится в активной разработке, и некоторые популярные дистрибутивы Linux имеют порт Hurd (Debian / Hurd, Arch Hurd и т. Д.).
beatgammit
78
  1. Конструкция монолитного ядра намного старше идеи микроядра, появившейся в конце 80-х годов.

  2. Ядра Unix и Linux являются монолитными, а QNX, L4 и Hurd - микроядрами. Mach изначально был микроядром (а не Mac OS X), но позже был преобразован в гибридное ядро. Minix (до версии 3) не был чистым микроядром, потому что драйверы устройств были скомпилированы как часть ядра.

  3. Монолитные ядра обычно быстрее микроядер. Первое микроядро Mach было на 50% медленнее, чем большинство монолитных ядер, в то время как более поздние, такие как L4, были всего на 2% или 4% медленнее, чем монолитные конструкции.

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

  5. В монолитных ядрах драйверы устройств находятся в пространстве ядра, а в микроядрах драйверы устройств находятся в пространстве пользователя.

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

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

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

simplePerson43
источник
1
упоминая MINIX, какую версию вы имеете в виду? Третья версия отделила драйверы устройств и файловую систему от ядра .
орустамманапов 04
Примерно 8. Означает ли это, что при установке программы в Linux перекомпилируется весь двоичный файл ядра? Также где этот двоичный файл ядра? Спасибо.
Nikos
@ Nik-Lz: Не программа, а особенности. Программы обычно запускаются в пользовательском пространстве. Если вы хотите выполнить код в пространстве ядра, у вас есть два варианта: встроить его в ядро ​​или загрузить с помощью модуля ядра. ref
bayuah
26

Монолитное ядро

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

преимущества

• Более быстрая обработка

Недостатки

• Небезопасный сбой • Негибкость переноса • Взрыв размера ядра

Примеры • MS-DOS, Unix, Linux

Микро ядро

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

преимущества

• Устойчивый к ударам, портативный, меньший размер

Недостатки

• Более медленная обработка из-за дополнительной передачи сообщений

Примеры • Windows NT


источник
14

1. монолитное ядро ​​(чистое монолитное):all

  • Все службы ядра из одного компонента

    (-) добавление / удаление невозможно, меньше / Ноль гибкий

    (+) межкомпонентная связь лучше

например: - Традиционный Unix

2. микро ядро:few

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

  • Разделенный подход [Некоторые службы находятся в привилегированном (ядровом) режиме, а некоторые - в нормальном (пользовательском) режиме]

    (+) гибкость для изменений / апгрейда

    (-) накладные расходы на связь

например: - QNX и т. д.

3. Модульное ядро ​​(Modular Monolithic):most

  • Комбинация микро- и монолитного ядра

  • Сборник модулей - модули могут быть -> статические + динамические

  • Драйверы представлены в виде модулей.

например: - Современная ОС Linux

Наман Вайшнав
источник
1

В спектре конструкций ядер двумя крайними точками являются монолитные ядра и микроядра.

Например, (классическое) ядро ​​Linux представляет собой монолитное ядро ​​(как и все коммерческие ОС на сегодняшний день, хотя они могут утверждать иное);

В том смысле, что его код представляет собой один файл C, порождающий единый процесс, реализующий все вышеперечисленные службы.
Чтобы проиллюстрировать инкапсуляцию ядра Linux, отметим, что ядро ​​Linux даже не имеет доступа ни к одной из стандартных библиотек C. Действительно, ядро ​​Linux не может использовать элементарные функции библиотеки C, такие как printf. Вместо этого он реализует свою собственную функцию печати (называемую печатью).

Такое изолирование ядра Linux и самодостаточности обеспечивает ядру Linux его главное преимущество: ядро ​​находится в едином адресном пространстве1, что позволяет всем функциям взаимодействовать максимально быстро, не прибегая к передаче сообщений любого типа. В частности, монолитное ядро ​​реализует все драйверы устройств системы.

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

TheLogicGuy
источник
-2

Монолитное ядро ​​включает в себя все службы ядра вместе с частью ядра ядра, поэтому они тяжелые и негативно влияют на скорость и производительность. С другой стороны, микро-ядро легкое, что увеличивает производительность и скорость.
Я ответил на тот же вопрос на сайте wordpress. Чтобы увидеть разницу между монолитным ядром, микроядром и экзоядром в табличной форме, вы можете посетить здесь

Йогеш Джилхавар
источник