0:06
Здравствуйте! Теперь коснемся видев ядер ОС.
Монолитное ядро — классическая
и, на сегодняшний день, распространенная архитектура
ядер операционных систем.
Монолитные ядра предоставляют собой богатый набор
абстракций оборудования.
Все части монолитного ядра работают
в одном адресном пространстве.
Монолитные ядра имеют долгую историю развития
и усовершенствования и, на данный момент,
являются наиболее зрелыми и пригодными к эксплуатации.
Вместе с тем, монолитность ядер усложняет их отладку,
понимание кода ядра,
добавление новых функций и возможностей,
удаление «мертвого», ненужного,
унаследованного от предыдущих версий кода.
«Разбухание» кода монолитных ядер также
повышает требования к объему оперативной памяти,
требуемой для функционирования ядра операционной системы.
Это делает монолитные ядерные архитектуры
малопригодными к эксплуатации в системах,
сильно ограниченных по объему ОЗУ.
1:07
Например, во встраиваемых системах,
производственных микроконтроллерах.
Альтернативой монолитным ядрам считаются архитектуры,
основанные на микроядрах.
1:16
Следующий тип ядер — модульное ядро.
Это современная, усовершенствованная модификация
архитектуры монолитных ядер операционных систем компьютеров.
В отличие от «классических» монолитных ядер,
считающихся ныне устаревшими,
модульные ядра, как правило, не требуют
полной перекомпиляции ядра при изменении
состава аппаратного обеспечения компьютера.
Вместо этого модульные ядра
предоставляют тот или иной механизм
дозагрузки модулей ядра, поддерживающих
1:43
то или иное аппаратное обеспечение
(ну, например, драйверов).
При этом дозагрузка модулей может быть как
динамической (выполняемой «на лету»,
без перезагрузки операционной системы,
1:54
так и статической (выполняемой при
перезагрузке операционной системы
после переконфигурирования системы на загрузку тех или иных модулей).
Все модули ядра работают
в едином адресном пространстве
и могут пользоваться всеми функциями,
предоставляемыми самим ядром.
Поэтому модульные ядра продолжают оставаться монолитными.
Модульность ядра осуществляется на уровне бинарного образа,
а не на архитектурном уровне,
2:21
так как динамически подгружаемые модули
загружаются в адресное пространство самого ядра
и в дальнейшем работают как интегральная часть ядра.
Модульные монолитные ядра не следует путать
с архитектурным уровнем модульности,
присущий микроядрам.
Практически, динамичная загрузка модулей —
это просто более гибкий способ изменения образа ядра
во время выполнения —
в отличие от перезагрузки с другим ядром.
Модули позволяют легко расширить возможности
ядра по мере необходимости.
2:57
Так как от разработчика не требуется многократная
полная перекомпиляция ядра
при работе над какой-либо его подсистемой или драйвером.
Выявление, локализация, отладка и устранение ошибок
при тестировании также облегчаются.
3:19
В свою очередь, не любая часть программы
может быть сделана модулем ядра.
На модули ядра накладываются определенные ограничения
в части используемых функций.
Например, они не могут пользоваться функциями
стандартной библиотеки С++
и должны использовать специальные аналоги,
являющиеся функциями API ядра.
3:36
Кроме того, модули ядра обязаны экспортировать
определенные функции, нужные ядру
для правильного подключения и распознавания модуля,
для его корректной инициализации при загрузке
и корректного завершения при выгрузке,
3:49
для регистрации модуля в таблице модулей ядра
и для обращения из ядра к сервисам, предоставляемым модулем.
Третий вид ядер — это микроядро.
Это минимальная реализация функций ядра операционной системы.
Классические микроядра предоставляют лишь очень
небольшой набор низкоуровневых примитивов,
или системных вызовов, реализующих базовые сервисы
операционной системы.
К ним относятся: управление адресным пространством
оперативной памяти; управление адресным пространством
виртуальной памяти; управление процессами;
средства межпроцессной коммуникации.
Все остальные сервисы ОС,
в классических монолитных ядрах
предоставляемые непосредственно ядром,
в микроядерных архитектурах реализуются в
адресном пространстве пользователя
и называются сервисами.
Примерами таких сервисов,
выносимых в пространство пользователя в микроядерных архитектурах,
являются сетевые сервисы, файловая система, драйверы.
4:46
это модифицированная микроядрная реализация
основных функций ядра операционной системы компьютера,
позволяющие для ускорения работы запускать
«несущественные» части в пространстве ядра.
4:56
Также существует большое количество исследовательских направлений,
не нашедших широкой области распространения,
но обладающих своими преимуществами.
Например, экзоядро, когда ядро операционной системы,
предоставляющее лишь функции
для взаимодействия между процессами,
безопасного выделения и освобождения ресурсов.
Предполагается, что API для прикладных программ
будут предоставляться внешними
по отношению к ядру библиотеками
(откуда и название архитектуры).
Возможность доступа к устройствам на уровне контроллеров
позволит эффективней решать задачи,
которые плохо вписываются
в рамки универсальной операционной системы,
например, для реализации СУБД будет иметь
доступ к диску на уровне секторов диска,
а не файлов и кластеров, что положительно скажется на быстродействии.
Наноядро — архитектура ядра операционной системы,
в рамках которой крайне упрощенное
и минималистичное ядро выполняет лишь одну задачу —
обработку аппаратных прерываний,
генерируемых устройствами компьютера.
После обработки прерываний от аппаратуры наноядро,
в свою очередь, посылает информацию о результатах
обработки (например, полученные с клавиатуры символы)
вышележащему программному обеспечению
при помощи того же механизма прерываний.
6:18
Для надежного управления ходом выполнения приложений
операционная система должна иметь по отношению
к приложениям определенные привилегии.
Иначе некоторое работающее приложение
может вмешаться в работу операционной системы
и, например, разрушить часть ее кодов.
6:32
Операционная система должна обладать
исключительными полномочиями также
для того, чтобы играть роль арбитра
в споре приложений за ресурсы компьютера
в мультипрограммном режиме.
6:44
Ни одно приложение не должно иметь возможности
без ведома операционной системы получать
дополнительную область памяти,
занимать процессор дольше разрешенного
операционной системой периода времени
или непосредственно управлять совместно
используемыми внешними устройствами.
Обеспечить привилегии операционной системе
невозможно без специальных средств аппаратной поддержки.
7:11
пользовательский режим (так называемый usermode)
и привилегированный режим, который
также называют режимом ядра (kernel mode),
или режимом супервизора (supervisor mode).
Подразумевается, что операционная система
или некоторые ее части работают
в привилегированном режиме,
а приложения — в пользовательском режиме.
7:31
Так как ядро выполняет все основные функции
операционной системы, то чаще всего
именно ядро становится той частью операционной системы,
которая работает в привилегированном режиме.
7:41
Иногда это свойство — работа в привилегированном режиме —
служит основным определением понятия «ядро».
Приложения ставятся в подчиненное положение
за счет запрета выполнения в пользовательском режиме
критичных команд, связанных с переключением
процессора с задачи на задачу;
управлением устройствами ввода-вывода;
доступом к механизмам распределения и защиты памяти.
8:02
Выполнение некоторых инструкций в пользовательском режиме
запрещается безусловно (очевидно,
что к таким инструкциям относится инструкция
перехода в привилегированный режим),
тогда как другие запрещается выполнять
только при определенных условиях.
Например, инструкции ввода-вывода могут быть запрещены
приложениям при доступе к контроллеру жесткого диска,
который хранит данные, общие для операционной системы
и всех приложений, но разрешены при доступе
к последовательному порту, который выделен
в монопольное владение для определенного приложения.
Важно, что условия разрешения выполнения
критичных инструкций находятся под полным контролем
операционной системы и этот контроль
обеспечивается за счет набора инструкций,
безусловно запрещающих для пользовательского режима.
Аналогичным образом обеспечиваются привилегии
операционной системы при доступе к памяти.
Например, выполнение инструкции доступа к памяти
для приложения разрешается,
если инструкция обращается к области памяти,
отведенной данному приложению,
9:02
Очень важно, что механизмы защиты памяти
используются операционной системой не только для защиты
своих областей памяти от приложений,
но и для защиты областей памяти,
выделенных операционной системой какому-либо приложению,
от остальных приложений.
Говорят, что каждое приложение работает
в своем адресном пространстве.
Это свойство позволяет локализовать
некорректно работающее приложение
в собственной области памяти
так, что его ошибки не оказывают влияния
на остальные приложения и операционную систему.
Повышение устойчивости операционной системы,
обеспечиваемое переходом ядра
в привилегированный режим,
достигается за счет некоторого замедления
выполнения системных вызовов.
Системный вызов привилегированного ядра
инициирует переключение процессора
из пользовательского режима в привилегированный,
а при возврате к приложению —
переключение из привилегированного режима в пользовательский.
9:49
Во всех типах процессоров из-за дополнительной
двукратной задержки переключения переход
на процедуру со сменой режима выполняется медленнее,
чем вызов процедуры без смены режима.
9:59
Архитектура ОС, основанная на привилегированном ядре
и приложениях пользовательского режима, стала,
по существу, классической.
Ее используют многие популярные операционные системы,
в том числе многочисленные версии UNIX, VAX и Windows.