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

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

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

Ответ 1

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

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

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

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

Недостатком микроядра является то, что асинхронный обмен сообщениями IPC может стать очень трудным для отладки, особенно если GNU Hurd страдает от этих проблем отладки ( ссылка). Я даже не собираюсь идти в контрольную точку при работе со сложными очередями сообщений. Микроядра не для слабонервных.

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

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

Edit

Если вы добрались до моего очень долгого ответа, вам, вероятно, придётся немного почитать " Обсуждение в Great Torvalds-Tanenbaum по дизайну ядра". Еще смешнее читать в 2013 году, более чем через 20 лет после его появления. Самая смешная часть - подпись Линуса в одном из последних сообщений:

Linus "my first, and hopefully last flamefest" Torvalds

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

Примечание:

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

Ответ 2

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

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

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

Ответ 3

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

введите описание изображения здесь

Ответ 4

От wikipedia

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

С недавних версий Windows используйте Hybric kernel.

Гибридное ядро ​​- это архитектура ядра, основанная на объединении аспектов микроядерных и монолитных ядерных архитектур, используемых в компьютерных операционных системах. Категория спорна из-за сходства с монолитным ядром; этот термин был отклонен некоторыми как простой маркетинг. Традиционными категориями ядер являются монолитные ядра и микроядра (с наноядрами и экзоянами, рассматриваемыми как более экстремальные версии микроядра).

Ответ 5

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

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

  • Планирование
  • Управление памятью
  • Межпроцессные коммуникации

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


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

  • Микроядра - будущее
  • x86 вымирает, а архитектуры RISC будут доминировать на рынке.
  • (через 5 лет) у всех будет бесплатная ОС GNU

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

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

По-видимому, три прогнозируют успех Linux.; -)


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

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

Ответ 6

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

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

Ответ 7

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

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

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