Вся соль в ядре!

Немного о ядрах операционных систем

Термин "ядро операционной системы" можно особенно часто услышать от поклонников POSIX-систем. Впрочем, сами понимаете, это вовсе не означает, что в той же, например, Windows, ядра нет как такового. Что такое ядро операционной системы? Для чего оно нужно? Какими бывают ядра у разных ОС? Вот на эти вопросы мы сейчас с вами и попробуем найти ответы.


Зачем нужно ядро?

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

Итак, что же такое ядро? Это часть операционной системы, постоянно находящаяся в оперативной памяти и занимающаяся обработкой системных прерываний. Именно обработка прерываний является самой важной из функций ядра, потому что именно на неё, в конечном итоге, завязана практически вся остальная функциональность ОС. Ядро осуществляет, впрочем, только предварительную обработку прерываний, передавая их на дальнейшую обработку запущенным в системе процессам. Это позволяет обрабатывать прерывания достаточно быстро, и ядро может оперативно реагировать на каждое новое прерывание.

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

Вы можете спросить, всякая ли операционная система имеет ядро. Вопрос, несмотря на кажущуюся наивность, вполне правомерный и логичный. Впрочем, ответ на него будет краток: да, всякая. В любой операционной системе есть та часть, которая не участвует в ожесточённой борьбе за системные ресурсы - просто потому, что часть эта загружена в оперативную память всегда и имеет преимущество при доступе к процессорному времени. Именно эта часть и является ядром.

Впрочем, конечно, в зависимости от операционной системы и её предназначения, ядра бывают разными - и даже очень. Какими именно? Сейчас мы с вами и займёмся тем, что поговорим о видах ядер операционных систем.


Какими бывают ядра?

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

Начнём, пожалуй, с такой интересной вещи, как монолитное ядро. Как видно из названия этого типа ядер операционных систем, они отличаются высокой степенью интеграции компонентов ядра, что приводит к ряду особенностей его работы - более высокой скорости и сравнительной простой разработке. Но, правда, при этом есть минус, что если какой-то из модулей ядра начнёт работать некорректно, это может привести к некорректной работе всего ядра (читай, к краху операционной системы). Все компоненты такого ядра работают в одном и том же адресном пространстве - то есть всё ядро являет собой одну большую программу. Старые операционные системы были все исключительно с монолитными ядрами и требовали перекомпиляции ядра при изменении конфигурации "железа", с которой работала операционная система. Современные операционные системы с монолитными ядрами также не вполне излечились от подобного недуга: при изменениях в оборудовании нужно изменить некоторые модули в ядре и после этого выполнить перекомпиляцию всего ядра. Удобно ли это? Вряд ли. Но, тем не менее, благодаря простоте создания такого ядра, монолитная архитектура пользуется значительной популярностью у системных программистов. POSIX-системы (по крайней мере, большая их часть), в том числе и BSD-систем, пользуются той же архитектурой, что и старые UNIX'ы, и MS-DOS - именно монолитным ядром. Поэтому и нужно пользователям BSD-систем собирать ядро всякий раз по новой, когда они добавляют в систему новое устройство. Впрочем, это относится не ко всем BSD-системам - их всё-таки довольно много.

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

Архитектура модульного ядра позволяет при изменениях конфигурации аппаратного обеспечения того компьютера, на котором работает операционная система, не выполнять перекомпиляции самой важной части всей операционной системы. Каким же образом этого добиться? На самом деле, всё очень просто. Ядра подобного типа позволяют работать с подгружаемыми внешними модулями, обеспечивающими поддержку различных устройств, - драйверами. Поскольку модули внешние, то при смене оборудования достаточно изменить набор этих модулей, а само ядро уже трогать не обязательно. Это, кстати, очень удобно и для разработчиков - драйверы для операционных систем с модульной ядерной архитектурой проще писать и отлаживать. Впрочем, модульность не избавляет ядро от необходимости иметь некую резидентную часть, которую нельзя выполнить в виде подключаемого модуля. Модульная архитектура ядра используется в более продвинутой, по сравнению со старыми UNIX'ами, операционной системе Linux1, что во многом и определило её популярность среди пользователей POSIX-систем. Модульные ядра также работают в одном адресном пространстве, что позволяет им работать по-прежнему быстро, но всё же накладывает на драйверы массу ограничений. Поэтому и модульное ядро не стало последним этапом в развитии ядер операционных систем.

Микроядро - это уже более современная версия ядерной архитектуры. В ней само ядро предоставляет сравнительно небольшой список функций, в который входят обычно только работа с процессами и аппаратная абстракция операционной системы. Вся остальная функциональность операционной системы вынесена в специальные процессы, имеющие статус пользовательских и называемые, как правило, сервисами. Такой подход к организации ядра операционной системы имеет ряд преимуществ по сравнению с монолитным и модульным ядрами. Благодаря тому, что адресных пространств процессов уже много, ядро более устойчиво к ошибкам в сервисных процессах, но при этом на "общение" между этими самыми процессами тратится довольно много ресурсов компьютера - хотя бы того же процессорного времени. Поэтому микроядерные операционные системы появились уже тогда, когда мощности компьютеров позволяли не слишком терять в быстродействии при такой схеме организации ядра операционной системы. Микроядро удобно для пользователей, которые могут менять драйверы прямо в процессе работы операционной системы, и для системных программистов, которым нет нужды лезть в ядро для добавления какой-то функциональности в операционную систему: достаточно реализовать сервис, который будет работать как простое пользовательское приложение. Системы с микроядрами - это MacOS X, QNX, Symbian OS и некоторые другие, менее известные.

Как видите, в списке операционных систем ни с одним из упоминавшихся выше типов ядер не было самой распространённой в мире операционной системы - сиречь Windows (имеется в виду линейка NT - NT 4.0, 2000, XP, 2003, Vista, 2008). Причина этого, как вы уже, наверное, догадались, в том, ядро системы Windows имеет совершенно особый тип - это гибридное ядро. За таким названием - гибрид микроядра и монолитного ядра. Многие теоретики построения операционных систем ругают корпорацию Microsoft за ядра её ОС, однако такая архитектура наиболее эффективна с точки зрения сочетания надёжности и производительности. Конечно, помимо достоинств обеих архитектур она объединяет и их недостатки, но их год от года становится всё меньше, потому что нет таких трудностей, которые бы Microsoft не преодолела ради денег. Компоненты ядра Windows работают в одном и том же адресном пространстве (это, как видите, пришло из старых операционных систем с монолитным ядром), но при этом взаимодействуют друг с другом не напрямую, а путём обмена сообщениями (это уже характерно для микроядер).

Есть и другие типы ядер - например, наноядро, которое только обрабатывает прерывания, или экзоядро, которое помимо прерывания только организует взаимодействие процессов и распределяет память. Но эти ядра не слишком востребованы, поскольку современные аппаратные средства позволяют применять "нормальную" архитектуру ядра даже во встраиваемых операционных системах (как, например, в случае с той же QNX).


Резюме

Как видите, ничего концептуально сложного в ядрах операционных систем нет. Эта часть должна быть у каждой операционной системы, потому что без ядра теряется смысл в самой ОС. При этом, в зависимости от задач, решаемых при создании той или иной операционной системы, ядро у неё может иметь свою архитектуру. Какую именно - решают уже разработчики самой операционной системы, но о ядрах всех самых известных и распространённых операционных систем мы с вами поговорили.

Если вы решите написать ОС со своим ядром (а это совсем непросто), то информации, которая содержится в статье, вам не хватит даже для того, чтобы просто приступить к непосредственному написанию программного кода. Что ж, тут, как говорится, Гугл в помощь. Информации по ядрам операционных систем в интернете много, часть из неё представлена даже на русском, так что с поиском, думаю, особых проблем не должно возникнуть.

Вадим СТАНКЕВИЧ

1 Linux, вообще говоря, и есть название ядра. Название самой операционной системы - GNU/Linux. Впрочем, эти тонкости не слишком волнуют даже большинство пользователей этой ОС, не говоря уже обо всех остальных.

Версия для печатиВерсия для печати

Номер: 

34 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!