Однажды я прочитал, что одним из преимуществ архитектуры микроядра является то, что вы можете останавливать / запускать важные службы, такие как сетевые и файловые системы, без необходимости перезагружать всю систему. Но, учитывая, что в настоящее время ядро Linux (так было всегда?) Предлагает возможность использовать модули для достижения того же эффекта, каковы (оставшиеся) преимущества микроядра?
39
Ответы:
Микроядро требует меньше кода для запуска в самом внутреннем и наиболее надежном режиме, чем монолитные ядра . Это имеет много аспектов, таких как:
Графические интерфейсы Unix предоставляются через окно X, которое является кодом пользователя (за исключением (часть) драйвера видеоустройства). Многие современные устройства позволяют обычным пользователям загружать драйверы файловой системы через FUSE . Некоторая фильтрация сетевых пакетов в Linux может быть выполнена в пользовательском пространстве. Тем не менее, драйверы устройств, планировщики, диспетчеры памяти и большинство сетевых протоколов по-прежнему только для ядра.
Классическим (если он датируется) прочтением о Linux и микроядрах является дискуссия о Таненбауме-Торвальдсе . Двадцать лет спустя можно было бы сказать, что Linux очень и очень медленно движется в направлении структуры микроядра (загружаемые модули появились на ранних этапах, FUSE появился совсем недавно), но впереди еще долгий путь.
Другая вещь, которая изменилась, - возросшая актуальность виртуализации на настольных компьютерах и встроенных компьютерах высшего класса: для некоторых целей соответствующее различие не между ядром и пользовательским пространством, а между гипервизором и гостевыми ОС.
источник
Микроядро ограничивает время, в течение которого система находится в режиме ядра, в отличие от пространства пользователя, до максимально возможного минимума.
Если происходит сбой в режиме ядра, все ядро выходит из строя, а это означает, что вся система выходит из строя. Если происходит сбой в пользовательском режиме, просто этот процесс прекращается. Linux является надежным в этом отношении, но любая подсистема ядра все еще может перезаписывать память любой другой подсистемы ядра, целенаправленно или случайно.
Концепция микроядра помещает множество вещей, которые традиционно работают в режиме ядра, такие как сетевые драйверы и драйверы устройств, в пользовательское пространство. Поскольку микроядро на самом деле не несет ответственности за многое, это также означает, что оно может быть проще и надежнее. Подумайте о том, как протокол IP, будучи простым и глупым, действительно ведет к созданию надежных сетей, подталкивая сложность к краям и оставляя ядро скудным и подлым.
источник
Вы должны прочитать другую сторону вопроса:
Чрезвычайно высокая производительность вычислений или почему микроядра отстой
Файловая система принадлежит ядру
источник
Достаточно взглянуть на архитектуру x86 - монолитное ядро использует только кольца 0 и 3. На самом деле - пустая трата. Но, опять же, это может быть быстрее из-за меньшего переключения контекста.
источник
Монолитное ядро намного старше микроядра . Он используется в Unix, в то время как идея микроядра появилась в конце 1980-х годов .
Примерами операционных систем с монолитным ядром являются UNIX, LINUX, а операционными системами с микроядром являются QNX, L4, HURD и первоначально Mach (не MacOS X), которые впоследствии были преобразованы в гибридное ядро. Даже MINIX не является чистым микроядром, потому что его драйверы устройств скомпилированы как часть ядра.
Монолитные ядра быстрее, чем микроядра . Первое микроядро Маха на 50% медленнее монолитных ядер. Более поздние версии, такие как L4, только на 2% или 4% медленнее, чем монолитное ядро .
Монолитные ядра обычно громоздки, в то время как чистое микроядро должно быть небольшого размера , даже вписываться в кэш первого уровня процессора (микроядро первого поколения).
В монолитных ядрах драйверы устройств находятся в пространстве ядра, а драйверы устройств микроядра - в пользовательском пространстве .
Поскольку драйверы устройств находятся в пространстве ядра, это делает монолитное ядро менее безопасным, чем микроядро (сбой в драйвере может привести к сбою). Микроядра более безопасны, чем монолитные ядра, поэтому они используются во многих военных устройствах.
Монолитные ядра используют сигналы и сокеты для обеспечения IPC, в то время как микроядерный подход использует очереди сообщений . 1 - ое поколение микроядра плохо реализовало IPC, поэтому они медленно переключали контексты.
Добавление новых функций в монолитную систему означает перекомпиляцию всего ядра, в то время как вы можете добавлять новые функции или патчи без перекомпиляции
источник
Windows NT (базовое ядро для современных систем Windows) изначально представляло собой довольно ванильный дизайн микроядра. Из-за проблем с производительностью все больше и больше кода "пользовательского пространства" мигрировали в "микроядро" ... сегодня его структура микроядра рудиментарна.
источник
Дело в том, что ядро Linux является гибридом монолитного и микроядерного. В чисто монолитной реализации нет загрузки модулей во время выполнения.
источник
Термины
monolithic kernel
иmicrokernel
не могут быть серьезно сопоставлены, поскольку они описывают различные аспекты дизайна ядра (структура против размера).Типичным монолитным ядром было ядро SunOS-4.x, и Linux все еще похож, поскольку вы вручную конфигурируете содержимое основного ядра.
Ядро Solaris (начиная с 2.1 по 1992) больше нельзя называть монолитным, поскольку все драйверы загружаются автоматически по требованию, и только малая часть загружается во время начальной загрузки.
SunOS-4.x и Solaris (SunOS-5.x) и Linux представляют собой единую реализацию контекста. Весь их код выполняется в одном контексте MMU.
Mac OS X основана на Mach и работает как многоконтекстная реализация с несколькими процессами, разделенными контекстами MMU. В этой концепции драйверы находятся в отдельных процессах и в разных контекстах MMU.
Многие называют Mac OS X «системой микроядра», но может случиться так, что базовое ядро не меньше базового ядра Solaris.
Так что, кажется, лучше поговорить о
single context kernels
противmulti context kernels
.источник
microkernel
неверен в любом случае, так как он обычно используется для чего-то, что следует назватьmulti context kernel
.