Монолитное ядро - это ядро, в котором все службы (файловая система, VFS, драйверы устройств и т. Д.), А также основные функции (планирование, распределение памяти и т. Д.) Представляют собой сплоченную группу, разделяющую одно пространство. Это прямо против микроядра .
Микроядро предпочитает подход, в котором функциональность ядра изолирована от системных служб и драйверов устройств (которые в основном являются просто системными службами). Например, VFS (виртуальная файловая система) и файловые системы блочных устройств (например, minixfs) - это отдельные процессы, которые выполняются вне пространства ядра, используя IPC для связи с ядром, другими службами и пользовательскими процессами. Короче говоря, если это модуль в Linux, то это сервис в микроядре, указывающий на изолированный процесс.
Не путайте термин модульное ядро с чем-либо, кроме монолитного. Некоторые монолитные ядра могут быть скомпилированы для модульности (например, Linux), важно то, что модуль вставляется и запускается из того же пространства, которое обрабатывает функциональность ядра (пространство ядра).
Преимущество микроядра в том, что любой сбойный сервис можно легко перезапустить, например, нет остановки ядра, если корневая файловая система выбрасывает прерывание. Это также может быть расценено как недостаток, потому что он может скрывать довольно критические ошибки (или заставлять их казаться не столь критичными, потому что проблема, кажется, постоянно исправляется). Это рассматривается как большое преимущество в сценариях, когда вы просто не можете удобно что-то исправить после того, как это будет развернуто.
Недостаток микроядра в том, что асинхронный обмен сообщениями IPC может стать очень трудным для отладки, особенно если реализованы фибриллы . Кроме того, простое отслеживание проблемы FS / записи означает проверку процесса пользовательского пространства, службы блочных устройств, службы VFS, службы файловой системы и (возможно) службы PCI. Если вы ничего не знаете, самое время взглянуть на сервис IPC. Это часто проще в монолитном ядре. GNU Hurd страдает от этих проблем отладки ( ссылка ). Я даже не собираюсь вдаваться в контрольные точки при работе со сложными очередями сообщений. Микроядра не для слабонервных.
Кратчайший путь к работающему стабильному ядру - это монолитный подход. Любой из этих подходов может предложить интерфейс POSIX, где разработка ядра становится малоинтересной для человека, который просто хочет написать код для работы с любым конкретным проектом.
Я использую Linux (монолитный) в производстве. Тем не менее, большая часть моего обучения, взлома или возни с разработкой ядра идет в микроядро, в частности HelenOS .
редактировать
Если вы дошли до этого из-за моего очень многословного ответа, вам, вероятно, будет весело читать « Великие дебаты Торвальдса-Таненбаума о разработке ядра ». Это даже смешнее читать в 2013 году, более чем через 20 лет после его появления. Самой смешной была подпись Линуса в одном из последних сообщений:
Linus "my first, and hopefully last flamefest" Torvalds
Очевидно, что это сбылось не больше, чем предсказание Таненбаума о том, что x86 скоро устареет.
NB:
Когда я говорю «Minix», я не имею в виду Minix 3. Кроме того, когда я упоминаю The HURD, я ссылаюсь (главным образом) на микроядро Mach. Я не намерен унижать недавнюю работу других.
Монолитное ядро означает, что вся операционная система работает в режиме ядра (то есть высоко привилегированна аппаратным обеспечением). То есть ни одна часть ОС не работает в пользовательском режиме (более низкая привилегия). Только приложения поверх операционной системы запускаются в пользовательском режиме.
В немонолитных операционных системах с ядром, таких как Windows, большая часть самой ОС работает в пользовательском режиме.
В любом случае ОС может быть очень модульной.
источник
Модули Linux могут означать модульность в некотором смысле. Как уже отмечали другие, монолитное обычно представляет собой микроядро по сравнению с монолитным ядром. Традиционное микроядро имеет только эти особенности,
В основном ядре нет аппаратных драйверов , стеков протоколов , файловых систем , приостановки / возобновления , управления часами и т. Д. Эти вещи идентичны любой пользовательской задаче (хотя они могут иметь разные привилегии через MMU / планировщик).
Предсказания Таненбаума
Программисты для ПК и серверов могут смеяться, но два и три, безусловно, верны для большинства существующих сотовых телефонов. Таненбаум был бы прав во всех отношениях, если бы BlackBerry QNX был успешным.
Кроме того, многие гипервизоры L1 имеют микроядра внизу. Это потому, что гипервизор обычно мало что делает помимо переключения контекста .
По-видимому, три предсказывают успех Linux. ;-)
Аргументом для микроядра является то, что все монолитные подсистемы должны синхронизировать несколько значений одновременно. Чтобы сделать это, они должны использовать замки и пострадают от закона Амдала при распространении на параллельные архитектуры. Счетчик в том, что микроядра приводят к большому количеству сообщений IPC.
Основное развитие - использование программирования без блокировок, чтобы избежать конфликтов в монолитном ядре. Это позволяет избежать блокировки в монолитном ядре, а также снижает накладные расходы IPC. В последнее время все процессоры расширяют свои ISA, чтобы включить лучшие примитивы для алгоритмов без блокировки . Таким образом, Linux, вероятно, останется монолитным ядром в течение некоторого времени.
источник
Из Википедии :
Последние версии Windows, с другой стороны, используют гибридное ядро .
источник
«Монолитный» в этом контексте не означает, что существует один большой исполняемый файл, и, как вы говорите, Linux поддерживает динамическую загрузку модулей ядра во время выполнения. Говоря о ядрах, «монолитный» означает, что вся операционная система работает в «привилегированном» или «супервизорном» режиме, в отличие от других типов операционных систем, которые используют тип ядра, такой как «микроядро», где только минимальное Набор функций работает в привилегированном режиме, а большая часть операционной системы работает в пользовательском пространстве.
Сторонники микроядра говорят, что это лучше, потому что меньший код означает меньше ошибок, а ошибки, работающие в режиме супервизора, могут вызывать гораздо большие проблемы, чем в коде пользовательского пространства (например, повышается вероятность появления уязвимостей в системе безопасности или общего сбоя системы в форме «паника ядра»). Некоторые микроядра достаточно минимальны, чтобы их можно было «формально проверить», что означает, что вы можете математически доказать, что ядро «правильно» в соответствии со спецификацией. L4 является хорошим примером этого.
источник
Монолитное ядро представляет собой один большой процесс, работающий полностью в одном адресном пространстве. Это один статический двоичный файл. Все службы ядра существуют и выполняются в адресном пространстве ядра. Ядро может вызывать функции напрямую. Примерами монолитных ядер на основе ОС являются Linux, Unix.
Я думаю, что этот пост поможет вам больше понять концепцию.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
источник