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

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

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

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

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

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

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

недостатком микроядра является то, что асинхронные IPC-сообщения могут стать очень трудными для отладки, особенно если [фибрилл есть. Кроме того, просто отслеживание проблемы FS/write означает изучение процесса пользовательского пространства, службы блочных устройств, службы VFS, службы файловой системы и (возможно) службы PCI. Если вы получите пробел в этом, пришло время посмотреть на служба IPC. Это часто легче сделать в монолитном ядре.](http://lwn.net/Articles/219954/)  [GNU Hurd](http://www.gnu.org/software/hurd/) страдает от этих проблем отладки ([ссылка](http://www.gnu.org/software/hurd/open_issues/bash.html)). Я даже не собираюсь входить в checkpointing при работе со сложными очередями сообщений. Микроядра не для слабонервных.

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

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

**редактировать**

Если вы так далеко зашли в моем очень длинном ответе, вам, вероятно, будет интересно прочитать "[Великий Торвальдс-Таненбаум дебаты о дизайне ядра](http://oreilly.com/catalog/opensources/book/appa.html)'. Это еще смешнее. читать в 2013 году, более чем через 20 лет после того, как это произошло. Самым смешным была подпись Лайнуса в одном из последних сообщений:--4-->

```
Linus "my first, and hopefully last flamefest" Torvalds

```

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

**NB:**

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



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

[![enter image description here](/images/content/1806585/2745230c24cf203f0cde77a24f4a6ccd.png)](https://i.stack.imgur.com/gV8hn.png)



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

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

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



с [Википедия](http://en.wikipedia.org/wiki/Monolithic_kernel)

> 
> монолитное ядро-это архитектура ядра, где вся операционная система работает в пространстве ядра и только в режиме супервизора. В отличие от других архитектур,[1](http://en.wikipedia.org/wiki/Monolithic_kernel) монолитное ядро определяет только виртуальный интерфейс высокого уровня над компьютерным оборудованием с набором примитивов или системных вызовов для реализации всех служб операционной системы, таких как управление процессами, параллелизм и память само управление и один или несколько драйверов устройств в виде модулей.
> 
> 
> 

последние версии Windows, с другой стороны, использовать [Hybric kernel](http://en.wikipedia.org/wiki/Hybrid_kernel).

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



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

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

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

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

---

Таненбаум-х

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

кроме того, многие [L1-гипервизоры](http://en.wikipedia.org/wiki/Hypervisor) есть [микро-ядра](http://en.wikipedia.org/wiki/L4_microkernel_family) нижний. Это потому, что гипер-визор обычно не делает много, кроме *контекст* переключатель.

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

---

аргумент *микроядер* заключается в том, что все монолитные подсистемы должны синхронизировать несколько значений одновременно. Для этого они должны использовать замки и будут страдать от  [закон Амдала](http://en.wikipedia.org/wiki/Amdahl%27s_law) при расширении на параллельные архитектуры. Счетчик таков: *микроядер* результат в большом количестве сообщений IPC.

основным развитием является использование [lock-free](https://stackoverflow.com/questions/tagged/lock-free) Программирование, чтобы избежать конфликтов в монолитном ядре. Это позволяет избежать блокировки в монолитном ядре, а также уменьшить накладные расходы IPC. В последнее время все процессоры расширяют свои ISA, чтобы включить лучшие примитивы для *lock-free* алгоритмов. Таким образом, Linux, вероятно, останется монолитным ядром в течение некоторого времени.



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

сторонники microkernels говорят, что это лучше, потому что меньший код означает меньше ошибок, а ошибки, запущенные в режиме супервизора, могут вызвать гораздо большие проблемы, чем в пользовательском космическом коде (например, большая вероятность наличия уязвимостей безопасности или общих сбоев системы в виде "паники ядра"). Некоторые микроядра достаточно минимальны, чтобы их можно было "формально проверить", что означает, что вы можете математически доказать, что ядро "правильно" согласно спецификации. [L4](http://ertos.nicta.com.au/research/l4.verified/) является хорошим примером этого.



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

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

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