База полезных знаний

Уровень аппаратных абстракций

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

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

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

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

Содержание:

Перечень HAL-модулей для x86.

Имя HAL-файлаПоддерживаемые системы
Halacpi.dllПерсональные компьютеры с усовершенствованным интерфейсом
управления конфигурированием и энергопотреблением — Advanced
Configuration and Power Interface (ACPI). Предназначается только
для однопроцессорной машины без поддержки усовершенствованного программируемого контроллера прерываний — APIC (наличие любого из таких контроллеров заставит систему использовать
вместо этого HAL-модуль, показанный ниже)
Halmacpi.dllПерсональные компьютеры с усовершенствованным программируемым контроллером прерываний — Advanced Programmable Interrupt
Controller (APIC), имеющие ACPI. Наличие APIC подразумевает
поддержку симметричной мультипроцессорной обработки — SMP

ПРИМЕЧАНИЕ. На x64-машинах имеется только один HAL-образ по имени Hal.dll. Это обусловлено наличием у всех x64-машин материнских плат одинаковой конфигурации, поскольку процессы требуют поддержки ACPI и APIC. Следовательно, поддержка машин без ACPI или со стандартного программируемого контроллера прерываний — PIC, не требуется.

Эксперимент: определение запущенного HAL-модуля.

Определить, какая версия HAL-модуля запущена, можно с помощью WinDbg и открытия сеанса локальной отладки ядра. Обеспечьте путем ввода команды .reload загрузку символов, а затем наберите команду lm vm hal.

Например, следующий вывод получен на системе, запустившей ACPI HAL:

lkd> lm vm hal

start end module name

fffff800'0181b000 fffff800'01864000 hal (deferred)

Loaded symbol image file: halmacpi.dll

Image path: halmacpi.dll

Image name: halmacpi.dll

Timestamp: Mon Jul 13 21:27:36 2009 (4A5BDF08)

CheckSum: 0004BD36

ImageSize: 00049000

File version: 6.1.7600.16385

Product version: 6.1.7600.16385

File flags: 0 (Mask 3F)

File OS: 40004 NT Win32

File type: 2.0 Dll

File date: 00000000.00000000

Translations: 0409.04b0

CompanyName: Microsoft Corporation

ProductName: Microsoft® Windows® Operating System

InternalName: halmacpi.dll

OriginalFilename: halmacpi.dll

ProductVersion: 6.1.7600.16385

FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)

FileDescription: Hardware Abstraction Layer DLL

LegalCopyright: © Microsoft Corporation. All rights reserved.

Эксперимент: просмотр зависимостей NTOSKRNL и HAL.

Взаимоотношения между ядром и HAL-образами можно просмотреть путем изучения их таблиц экспорта и импорта с помощью средства DependencyWalker (Depends.exe). Для изучения образа в DependencyWalker выберите пункт Open (Открыть) в меню File (Файл), чтобы открыть требуемый файл образа.

Пример вывода, который можно увидеть путем просмотра зависимостей Ntoskrnl с использованием этого средства может иметь следующий вид.

Обратите внимание на то, что Ntoskrnl связан с HAL, который, в свою очередь, связан с Ntoskrnl. (Они оба используют функции друг друга.) Ntoskrnl также связан со следующими исполняемыми файлами:

Подробное описание информации, показываемой этим средством, дана в справочном файле по DependencyWalker (Depends.hlp).

Exit mobile version