Монолітне ядро - це ядро, де всі сервіси (файлова система, VFS, драйвери пристроїв тощо), а також основна функціональність (планування, розподіл пам’яті тощо) - це тісна в’язана група, що розділяє один і той же простір. Це прямо протистоїть мікроядер .
Мікроядро віддає перевагу підходу, коли функціональність основної системи ізольовані від системних служб та драйверів пристроїв (які в основному є лише системними службами). Наприклад, VFS (віртуальна файлова система) та блокова файлова система пристрою (тобто minixfs) - це окремі процеси, які працюють за межами простору ядра, використовуючи IPC для зв'язку з ядром, іншими службами та користувачами. Коротше кажучи, якщо це модуль в Linux, це послуга в мікроядрі, що вказує на ізольований процес.
Не плутайте термін модульне ядро як будь-що, крім монолітного. Деякі монолітні ядра можуть бути складені модульними (наприклад, Linux). Важливо те, що модуль вставляється і працює з того самого простору, який обробляє основні функціональні можливості (простір ядра).
Перевага мікрокереля полягає в тому, що будь-яка невдала служба може бути легко перезапущена, наприклад, немає зупинки ядра, якщо коренева файлова система кидає аборт. Це також може розглядатися як недолік, оскільки він може приховати досить критичні помилки (або зробити їх здатися не дуже критичними, оскільки проблема, здається, постійно виправляється). Це сприймається як велика перевага в сценаріях, коли ви просто не можете зручно щось виправити після його розгортання.
Недоліком мікроядра є те, що асинхронний обмін повідомленнями IPC може стати дуже важким для налагодження, особливо якщо реалізовані фібрили . Крім того, лише відстежувати проблему FS / write означає вивчення процесу простору користувача, служби блокового пристрою, послуги VFS, сервісу файлової системи та (можливо) послуги PCI. Якщо у вас з’явилося пробіл, настав час переглянути послугу IPC. Це часто простіше в монолітному ядрі. GNU Hurd страждає від цих проблем налагодження ( посилання ). Я навіть не збираюся вступати в контрольну точку, коли маю справу зі складними чергами повідомлень. Мікрохвильовки не для слабкого серця.
Найкоротший шлях до працездатного стабільного ядра - це монолітний підхід. Будь-який підхід може запропонувати POSIX-інтерфейс, де дизайн ядра стає малоцікавим для когось, хто просто хоче написати код для роботи на будь-якій заданій конструкції.
Я використовую Linux (монолітний) у виробництві. Однак більша частина мого навчання, злому або майстерності з розробкою ядра переходить у мікроядро, зокрема в HelenOS .
Редагувати
Якщо ви отримали це далеко через мою дуже завзяту відповідь, вам, мабуть, буде весело, читаючи " Велику дискусію Торвальда-Таненбаума про дизайн ядра ". Це навіть смішніше читати у 2013 році, через 20 років після того, як це вийшло. Найсмішнішою частиною був підпис Лінуса в одному з останніх повідомлень:
Linus "my first, and hopefully last flamefest" Torvalds
Очевидно, що це не справдилося більше, ніж передбачення Таненбаума, що x86 скоро застаріє.
Примітка:
Коли я кажу "Minix", я не маю на увазі Minix 3. Крім того, коли я згадую про HURD, я маю на увазі (в основному) мікроядро Mach. Це не мій намір зневажати недавню роботу інших.