Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Архитектура и вокруг... | Вперед |
Архитектура и вокруг...
«Эти правила, язык и грамматика Игры, представляют собой некую разновидность высокоразвитого тайного языка, в котором участвуют самые разные науки и искусства …, и который способен выразить и соотнести содержание и выводы чуть ли не всех наук.»
Герман Гессе «Игра в бисер».
Для ясного понимания чем является модуль для ядра, необходимо вернуться к рассмотрению того, как пользовательские процессы взаимодействуют с сервисами ядра, что представляют из себя системные вызовы, и какие интерфейсы возникают в этой связи от пользователя к ядру, или к модулям ядра, представляющим функциональность ядра.
Ядро: монолитное и микроядро
«... message passing as the fundamental operation of the OS is just an exercise in computer science masturbation. It may feel good, but you don't actually get anything done.»
Linus Torvalds
Исторически все операционные системы, начиная от самых ранних (или считая даже от самых рудиментарных исполняющих систем, которые с большой натяжкой вообще можно назвать операционной системой) делятся на самом верхнем уровне на два класса, различающихся в принципе:
монолитное ядро (исторически более ранний класс), называемые ещё: моноядро, макроядро; к этому классу, из числа самых известных, относятся, например (хронологически): OS/360, RSX-11M+, VAX-VMS, MS-DOS, Windows (все модификации), OS/2, Linux, все клоны BSD (FreeBSD, NetBSD, OpenBSD), Solaris — почти все широко звучащие имена операционных систем.
микроядро (архитектура появившаяся позже), известный также как клиент-серверные операционные системы и системы с обменом сообщениями; к этому классу относятся, например: QNX, MINIX 3, HURD, ядро Darvin MacOS, семейство ядер L4.
В микроядерной архитектуре все услуги для прикладного приложения система (микроядро) обеспечивает отсылая сообщения (запросы) соответствующим сервисам (драйверам, серверам, ...), которые, что самое важное, выполняются не в пространстве ядра (в пользовательском кольце защиты). В этом случае не возникает никаких проблем с динамической реконфигурацией системы и добавлением к ней новых функциональностей (например, драйверов проприетарных устройств).
Примечание: Это же свойство обеспечивает и экстремально высокие живучесть и устойчивость микроядерных систем по сравнению с моноядерными: вышедший из строя драйвер можно перезагрузить не останавливая систему. Так что с утверждением Линуса Торвальдса, процитированным в качестве эпиграфа, можно было бы согласиться (и то с некоторой натяжкой) ... да и то, если бы в природе не существовало такой операционной системы как QNX, которая уже одна своим существованием оправдывает существование микроядерной архитектуры. Но это уже совсем другая история, а сегодня мы занимаемся исключительно Linux.
= = = = = = = = = =
здесь Рис. 1а: системный вызов в моноядерной ОС.
= = = = = = = = = =
= = = = = = = = = =
здесь Рис. 1б: системный вызов в микроядерной ОС.
= = = = = = = = = =
В макроядерной архитектуре все услуги для прикладного приложения выполняют отдельные ветки кода внутри ядра (в пространстве ядра). До некоторого времени в развитии такой системы, и так было и в ранних версиях ядра Linux, всякое расширение функциональности достигалось пересборкой (перекомпиляцией) ядра. Для системы промышленного уровня это недопустимо. Поэтому, рано или поздно, любая монолитная операционная система начинает включать в себя ту или иную технологию динамической реконфигурации (что сразу же открывает дыру в её безопасности и устойчивости). Для Linux это — технология модулей ядра (появившаяся с ядер версий 2.0.х).
Предыдущий раздел: | Оглавление | Следующий раздел: |
Обсуждение раздела 2 | Траектория системного вызова |