Ядро в привилегированном режиме

Современные ОС поддерживают как минимум два режима:

Пользовательский режим

Привилегированный режим - режим ядра (kernel mode) – режим супервизора (supervisor mode)

Ядро выполняет все основные функции - поэтому работает в привилегированном режиме

Контроль за выполнением критичных инструкций обеспечивается запретом их выполнения в пользовательском режиме. Например доступ к памяти (доступ к системным таблицам памяти) разрешен только в привилегированном режиме. Для упорядочивания прав доступа вводятся уровни привилегий (например, в Pentium их четыре: 0,1,2,3). Работа с возможностью переключения в привилегированный режим приводит к замедлению работы.

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

При таком построении ОС работает быстрее, т.к. нет переключения режимов, однако при этом отсутствует надежная аппаратная защита памяти.

Классическое ядро может состоять из следующих слоев:

Интерфейс системных вызовов к функциям API (например, fd=open("/doc/a.txt,O_RDONLY)

Менеджеры ресурсов - учет, планирование (процессы, ввод-вывод, файловая система, память)

Базовые механизмы ядра (переключение контекстов, перемещение страниц и пр.)

Машинно-зависимый слой (например в Windows NT/2000 слой HAL-Hardware Abstraction Level)

Аппаратная поддержка ОС (средства поддержки привилегированного режима, система прерываний, переключение контекстов, трансляция адресов, защита памяти)

Каждый слой взаимодействует лишь с ниже лежащими, за некоторым исключением. UNIX имеет меньшее число четких слоев, Windows NT/2000 - большее.

Аппаратная зависимость и переносимость ОС.

Типичный набор средств аппаратной поддержки:

поддержка привилегированного режима (слово состояние машина, проверка текущего уровня привилегированности)

трансляция адресов (таблицы, указатели)

переключение процессов (контекст)

система прерываний (реакция, синхронизация, процедура обработки, int, svc)

таймер (регистр, частота «тиков»)

защита памяти (чтение, запись, переход, встраивается в систему трансляции адресов)

Машинно-зависимые компоненты ОС

Для облегчения переносимости ОС с одной аппаратной платформы на другую аппаратно-зависимый код локализуют в нескольких модулях ОС.

При переносе, в случае несовпадении системы команд - перепрограммируются только эти модули. Разработчики стремятся сократить количество машинно-зависимых модулей.

Реально разработчики ОС для переносимости ограничиваются несколькими аппаратными платформами: Pentium, Alpha,DEC, MIPS, многопроцессорные.

К аппаратно зависимым модулям ОС относятся также низкоуровневые драйверы внешних устройств. В Intel x86/Pentium разработка машинно-зависимого слоя упрощается за счет встроенной в постоянную память базовой системы ввода-вывода (BIOS)