Почему Linux называют монолитным ядром?


Я читал, что Linux-это монолитное ядро. Означает ли монолитное ядро компиляцию и связывание полного кода ядра в исполняемый файл?

Если Linux может поддерживать модули, почему бы не разбить все подсистемы на модули и не загрузить их при необходимости? В этом случае ядро не должно загружать все модули изначально и может поддерживать индекс функций в модуле и загружать их при необходимости.

7 180

7 ответов:

монолитное ядро-это ядро, в котором находятся все службы (файловая система, VFS, драйверы устройств и т. д.), а также основные функции (Планирование, выделение памяти и т. д.).)- это сплоченная группа, разделяющая одно и то же пространство. Это прямо противоположно a микроядро.

микроядро предпочитает подход, при котором основная функциональность изолирована от системных служб и драйверов устройств (которые в основном являются просто системными службами). Например, VFS (виртуальная файловая система) и блочное устройство файловые системы (т. е. minixfs) - это отдельные процессы, которые выполняются вне пространства ядра, используя IPC для связи с ядром, другими службами и пользовательскими процессами. Короче говоря, если это модуль в Linux, это сервис в микроядре, что указывает на изолированный процесс.

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

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

недостатком микроядра является то, что асинхронный IPC-обмен сообщениями может стать очень сложным для отладки, особенно если фибрилл есть. Кроме того, просто отслеживание проблемы FS/write означает изучение процесса пользовательского пространства, службы блочных устройств, службы VFS, службы файловой системы и (возможно) службы PCI. Если вы получаете пробел на это, его время, чтобы посмотреть служба IPC. Это часто проще в монолитном ядре. GNU Hurd страдает от этих проблем отладки (ссылка). Я даже не собираюсь входить в контрольные точки при работе со сложными очередями сообщений. Микроядра не для слабонервных.

самый короткий путь к работе, стабильное ядро монолитное подход. Любой подход может предложить интерфейс POSIX, где дизайн ядра становится малоинтересным для кого-то просто хочу написать код для запуска на любой заданной конструкции.

Я использую Linux (монолитный) в производстве. Однако большая часть моего обучения, взлома или возни с разработкой ядра переходит в микроядро, в частности HelenOS.

Edit

Если вы получили это далеко через мой очень многословный ответ, вы, вероятно, будет иметь некоторое удовольствие читать 'великая дискуссия Торвальдса-Таненбаума по дизайну ядра'. Это еще смешнее читать в 2013 году, более чем через 20 лет после того, как это произошло. Самой смешной частью была подпись Лайнуса в одном из последних сообщений:

Linus "my first, and hopefully last flamefest" Torvalds

очевидно, что это сбылось не больше, чем предсказание Таненбаума о том, что x86 скоро устареет.

Примечание:

когда я говорю "Minix", я не подразумеваю Minix 3. Кроме того, когда я упоминаю HURD, я ссылаюсь (в основном) на микроядро Маха. Я не собираюсь принижать недавнюю работу другие.

вот мой короткий ответ... Найдите ниже изображение. Вы получите четкое представление о обоих типах ядра

enter image description here

монолитное ядро означает, что вся операционная система выполняется в режиме ядра (т. е. привилегированным оборудования). То есть ни одна часть ОС не работает в пользовательском режиме (более низкие привилегии). Только приложения на вершине ОС работают в пользовательском режиме.

в немонолитных операционных системах ядра, таких как Windows, большая часть самой ОС работает в пользовательском режиме.

в любом случае, ОС может быть очень модульной.

с Википедия

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

последние версии Windows, с другой стороны, использовать ядра Hybric.

; tl-dr-нет, Linux всегда монолитен.

Linux модули может означать модульная в каком-то смысле. Как отмечали другие, монолитный обычно представляет собой микроядро и монолитно ядра. Традиционный микроядро только эти функции,

  1. планирование
  2. управление памятью
  3. Интер-процесс коммуникации

нет драйверы,стеков протоколов,файловые системы,приостановки/возобновления,управление, etc в главном ядре. Эти вещи одинаковых для любой пользовательской задачи (хотя они могут иметь разные привилегии через MMU/scheduler).


предсказания Таненбаума

  1. микроядра являются будущее
  2. x86 вымрет, и архитектуры RISC будут доминировать на рынке
  3. (через 5 лет) все будут работать под управлением свободной GNU OS

программисты ПК и сервера могут смеяться, но два и три, безусловно, верно для большинства существующих мобильных телефонов. Таненбаум был бы прав на всех счетах, если бы BlackBerry QNX был успешным.

кроме того, многие L1-гипервизоры есть микро-ядра нижний. Это потому, что гипер-козырек обычно не делает много рядом контекст переключатель.

по-видимому, три предсказывает успех Linux. ; -)


аргумент микроядер заключается в том, что все монолитные подсистемы должны синхронизировать несколько значений одновременно. Для того чтобы сделать это, они должны использовать замки и пострадает от закон Амдала при распространении на параллельные архитектуры. Счетчик в том, что микроядер результат в большом количестве сообщений IPC.

основным развитием является использование блокировка-Free Программирование, чтобы избежать конкуренции в монолитном ядре. Это позволяет избежать блокировки в монолитном ядре, а также снизить накладные расходы IPC. В последнее время все процессоры расширяют свои ISA, чтобы включить лучшие примитивы для блокировка-Free алгоритмов. Таким образом, Linux, вероятно, останется монолитным ядром в течение некоторого времени.

"монолитный" в этом контексте не относится к одному большому исполняемому файлу, и, как вы говорите, Linux поддерживает динамическую загрузку модулей ядра во время выполнения. Когда речь идет о ядрах, "монолитный" означает, что вся операционная система работает в режиме "привилегированный" или "супервизор", в отличие от других типов операционных систем, которые используют тип ядра, такой как "микроядро", где только минимальный набор функций работает в привилегированном режиме, а большая часть операционной системы работает в привилегированном режиме. система работает в пользовательском пространстве.

L4 является хорошим примером этого.

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

Я думаю, что этот пост поможет вам больше понять концепция.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html