Монолитное ядро - это ядро, в котором все службы (файловая система, 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. Кроме того, когда я упоминаю HURD, я имею в виду (в основном) микроядро Mach. Я не намерен принижать недавнюю работу других.
person
Community
schedule
27.11.2009