Монолитное ядро - это ядро, в котором все службы (файловая система, VFS, драйверы устройств и т. Д.), А также основные функции (планирование, распределение памяти и т. Д.) Представляют собой сплоченную группу, разделяющую одно пространство. Это прямо противоположно микроядру .
Микроядро предпочитает подход, в котором основные функции изолированы от системных служб и драйверов устройств (которые в основном являются просто системными службами). Например, VFS (виртуальная файловая система) и файловые системы блочных устройств (например, minixfs) - это отдельные процессы, которые выполняются за пределами пространства ядра и используют IPC для связи с ядром, другими службами и пользовательскими процессами. Короче говоря, если это модуль в Linux, то это служба в микроядре, что указывает на изолированный процесс.
Не путайте термин modular kernel с чем-либо, кроме монолитного. Некоторые монолитные ядра могут быть скомпилированы для модульности (например, Linux), важно то, что модуль вставляется и запускается из того же пространства, которое обрабатывает функциональность ядра (пространство ядра).
Преимущество микроядра в том, что любой сбойный сервис можно легко перезапустить, например, нет остановки ядра, если корневая файловая система выбрасывает прерывание. Это также может быть расценено как недостаток, потому что он может скрывать довольно критические ошибки (или заставлять их казаться не столь критичными, потому что проблема, кажется, постоянно исправляется). Это рассматривается как большое преимущество в сценариях, когда вы просто не можете удобно что-то исправить после того, как это будет развернуто.
Недостаток микроядра в том, что асинхронный обмен сообщениями IPC может стать очень трудным для отладки, особенно если реализовано fibrils . Кроме того, просто отслеживание проблемы FS / записи означает проверку процесса пользовательского пространства, службы блочных устройств, службы VFS, службы файловой системы и (возможно) службы PCI. Если вы ничего не знаете, самое время взглянуть на сервис IPC. Это часто проще в монолитном ядре. GNU Hurd страдает от этих проблем отладки ( ссылка ). Я даже не собираюсь вдаваться в контрольные точки при работе со сложными очередями сообщений. Микроядра не для слабонервных.
Кратчайший путь к работающему стабильному ядру - это монолитный подход. Любой из этих подходов может предложить интерфейс POSIX, где разработка ядра становится малоинтересной для человека, который просто хочет написать код для работы с любым заданным дизайном.
Я использую Linux (монолитный) в производстве. Тем не менее, большая часть моего обучения, взлома или возни с разработкой ядра идет в микроядро, в частности HelenOS .
Редактировать
Если вы добрались до этого из-за моего очень многословного ответа, вам, вероятно, будет интересно почитать дискуссию « Великий Торвальдс-Таненбаум о дизайне ядра ». Это даже смешнее читать в 2013 году, более чем через 20 лет после его появления. Самой смешной была подпись Линуса в одном из последних сообщений:
Linus "my first, and hopefully last flamefest" Torvalds
Очевидно, что это сбылось не больше, чем предсказание Таненбаума о том, что x86 скоро устареет.
Примечание:
Когда я говорю «Minix», я не имею в виду Minix 3. Кроме того, когда я упоминаю The HURD, я ссылаюсь (главным образом) на микроядро Маха. Я не намерен унижать недавнюю работу других.