Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория / Теория / ОСиСП ответы на некоторые вопросы.doc
Скачиваний:
81
Добавлен:
11.05.2015
Размер:
1.38 Mб
Скачать

Уровень абстрагирования от оборудования

Другая важная задача ядра — абстрагирование или изоляция исполнитель­ной системы и драйверов устройств от различий между аппаратными архи­тектурами, поддерживаемыми Windows (т. е. различий в обработке преры­ваний, диспетчеризации исключений и синхронизации между несколькими процессорами).

Архитектура ядра нацелена на максимальное обобщение кода — даже в случае аппаратно-зависимых функций. Ядро поддерживает набор семанти­чески идентичных и переносимых между архитектурами интерфейсов. Боль­шая часть кода, реализующего переносимые интерфейсы, также идентична для разных архитектур.

Но одна часть этих интерфейсов по-разному реализуется на разных ар­хитектурах, а другая включает код, специфичный для конкретной архитек­туры. Архитектурно-независимые интерфейсы могут быть вызваны на лю­бой машине, причем семантика интерфейса будет одинаковой — независи­мо от специфического кода для той или иной архитектуры. Некоторые ин­терфейсы ядра (например, процедуры спин-блокировки, описанные в гла­ве 3) на самом деле реализуются в HAL (см. следующий раздел), поскольку их реализация может отличаться даже в пределах семейства процессоров с одинаковой архитектурой.

В ядре также содержится небольшая порция кода с х8б-специфичными интерфейсами, необходимыми для поддержки старых программ MS-DOS. Эти интерфейсы не являются переносимыми в том смысле, что их нельзя вызывать на машине с другой архитектурой, где они попросту отсутствуют. Этот х8б-специфичный код, например, поддерживает манипуляции с GDT (global descriptor tables) и LDT (local descriptor tables) — аппаратными сред­ствами x86.

Другим примером архитектурно-специфичного кода ядра может служить интерфейс, предоставляющий поддержку буфера трансляции и процес­сорного кэша. Эта поддержка требует разного кода на разных архитектурах, поскольку кэш в них реализуется различным образом.

Еще один пример — переключение контекста. Хотя на высоком уровне для выбора потоков и переключения контекста применяется один и тот же алгоритм (сохраняется контекст предыдущего потока, загружается контекст нового и запускается новый поток), существуют архитектурные различия между его реализациями для разных процессоров. Поскольку контекст опи­сывается состоянием процессора (его регистров и т. д.), сохраняемая и заг­ружаемая информация зависит от архитектуры.

Уровень абстрагирования от оборудования

Как отмечалось в начале этой главы, одной из важнейших особенностей архи­тектуры Windows является переносимость между различными аппаратными платформами. Ключевой компонент, обеспечивающий такую переносимость, — уровень абстрагирования от оборудования (hardware abstraction layer, HAL). HAL — это загружаемый модуль режима ядра (Hal.dll), предоставляющий низ­коуровневый интерфейс с аппаратной платформой, на которой выполняется Windows. Он скрывает от операционной системы специфику конкретной ап­паратной платформы, в том числе ее интерфейсов ввода-вывода, контроллеров прерываний и механизмов взаимодействия между процессорами, т. е. все функ­ции, зависимые от архитектуры и от конкретной машины.

Когда внутренним компонентам Windows и драйверам устройств нужна платформенно-зависимая информация, они обращаются не к самому обо­рудованию, а к подпрограммам HAL, что и обеспечивает переносимость этой операционной системы. По этой причине подпрограммы HAL документиро­ваны в Windows DDK, где вы найдете более подробные сведения о HAL и о его использовании драйверами.

Хотя в Windows имеется несколько модулей HAL (см. таблицу 2-6), при ус­тановке на жесткий диск компьютера копируется только один из них — Hal.dll. (В других операционных системах, например в VMS, нужный модуль HAL вы­бирается при загрузке системы.) Поскольку для поддержки разных процессо­ров требуются разные модули HAL, системный диск от одной х8б-установки скорее всего не подойдет для загрузки системы с другим процессором.

Таблица 2-6. Список модулей HAL для х86 в \ Windows\Driver\Cache\i386\Driver.cab

Имя файла HAL Поддерживаемые системы

Hal.dll

Стандартные персональные компьютеры (ПК)

Halacpi.dll

ПК с ACPI (Advanced Configuration and Power Interface)

Halapic.dll

ПК с APIC (Advanced Programmable Interrupt Controller)

Halaacpi.dll

ПК с APIC и ACPI

Halmps.dll

Многопроцессорные ПК

Halmacpi.dll

Многопроцессорные ПК с ACPI

Halborg.dll

Рабочие станции Silicon Graphics (только для Windows

2000; больше не продаются)

Halsp.dll

Compaq SystemPro (только для Windows XP)

ПРИМЕЧАНИЕ В базовой системе Windows Server 2003 нет HAL, специ­фических для конкретных вендоров.