Pages Menu
Rss
Categories Menu

Posted | 0 comments

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

Как уже упоминалось, одним из наиболее важных элементов конструкции 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

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

  • Pshed.dll, драйвер ошибок оборудования — Platform-Specific Hardware Error Driver (PSHED), зависящий от используемой платформы. Этот драйвер предоставляет абстракцию средства выдачи отчетов об ошибках оборудования исходной платформы, скрывая подробности присущих платформе механизмов обработки ошибок от операционной системы и открывая операционной системе Windows однообразный интерфейс.
  • Bootvid.dll (только на 32-разрядных операционных системах), видеодрайвер загрузки. Bootvid предоставляет поддержку команд VGA, требуемых для отображения при запуске загрузочного текста и загрузочного логотипа. На системах x64 эта библиотека во избежание конфликтов со средством защиты ядра от исправлений — Kernel Patch Protection (KPP) встроена в ядро.
  • Kdcom.dll, библиотека протокола коммуникаций отладчика ядра — KernelDebuggerProtocol (KD) CommunicationsLibrary.
  • Ci.dll, библиотека целостности кода.
  • Clfs.sys, драйвер общей системы файлов журнала, используемых, кроме всего прочего, диспетчером транзакций ядра — Transaction Manager (KTM).

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

Post a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.


↓