legal note
IC Book © 2001

hardware
software

support
buy

Home page
   




Press
Практикум по ACPI
 


Таблицы и структуры ACPI

Операционная система, или программа, желающая воспользоваться ин­тер­фей­сом ACPI, сначала должна выполнить его детектирование и определить расположение таблиц. Для этого, в области адресов выполняемого блока BIOS (E0000h-FFFFFh) необходимо найти структуру RSDP (Root System Description Poin­t­er). Структура имеет размер 36 байт, может быть расположена в про­из­воль­ном месте внутри указанного 128-Кбайтного блока и обнаруживается по пос­ле­до­ва­тель­нос­ти символов "RSD PTR". Если структура не обнаружена или ее кон­троль­ная сумма неверна, детектирующая программа делает вывод, что ACPI не под­дер­жи­вается. Если структура обнаружена и имеет правильную контрольную сумму, из нее считывается 32-битный адрес таблицы RSDT (Root System De­scrip­tion Table), содержащей каталог таблиц ACPI. В реализациях ACPI версии 2.0 и выше, доступен также 64-битный адрес таблицы XSDT (Extended System De­scrip­tion Table). Функции этой таблицы, такие же, как у таблицы RSDT, но за счет использования 64-битных указателей, таблица XSDT, а также таблицы, на которые она ссылается, могут быть расположены выше 4 Гб.

Ниже перечислены основные таблицы ACPI, полная номенклатура таблиц приведена в [1].

Таблица FADT (Fixed ACPI Description Table) содержит набор параметров, опи­сы­ва­ю­щих платформу и чипсет. ОС использует эти параметры при вза­и­мо­дей­ствии с оборудованием. Таблица FADT форматирована, то есть назначение каж­до­го поля определяется его адресом внутри таблицы. Здесь содержатся кон­стан­ты, характеризующие платформу, адреса структур в оперативной памяти, ис­поль­зу­е­мых для взаимодействия BIOS и ОС, адреса регистров чипсета, ис­поль­зу­е­мых для передачи заданных команд (регистры управления) и опроса текущего состояния (регистры статуса), номера линий запросов на прерывание, ис­поль­зу­е­мых для оповещения ОС о заданных событиях в подсистеме ACPI и другая информация.

Структура FACS (Firmware ACPI Control Structure) используется для управления переходом в "спящий" режим и выходом из него. Она содержит век­тор для передачи управления на процедуру, запускаемую при выходе из спящего режима. Также здесь находится 32-битная сигнатура оборудования или Hardware Signature, используемая для контроля изменений конфигурации, про­и­зо­шед­ших за время нахождения системы в "спящем режиме", например удаления или подключения каких-либо устройств. Это переменная, вычисляемая как функция от текущей конфигурации оборудования. После выхода из "спящего" режима, зна­че­ние этой переменной вычисляется повторно и сравнивается с образцом, хра­ня­щим­ся в структуре FACS.

Таблица DSDT (Differentiated System Description Table) является самой сложной. Она содержит описание методов выполнения типовых системных опе­ра­ций (например, считывание температуры процессора или изменение номера линии запроса на прерывание, используемой заданным устройством), ин­фор­ма­цию об устройствах, шинах, всех системных объектах и методах взаимодействия с ними. Декларации системных устройств (объекты System Plug and Play Nodes), также продублированы в этой таблице, при этом номенклатура описанных устройств существенно расширена. Таблица DSDT, в отличие от FADT, не фор­ма­ти­ро­ва­на, то есть доступ к заданной записи осуществляется не по фик­си­ро­ван­но­му адресу, а последовательным сканированием и детектированием требуемой записи. Исходный код таблицы DSDT пишется программистом на языке ASL (ACPI Source Language), который преобразуется компилятором в код AML (ACPI Machine Language). Интерпретатор языка AML, входящий в состав операционной системы, обеспечивающий обработку DSDT, обычно называется виртуальной машиной ACPI.

Таблицы SSDT (Secondary System Description Table) используются как модули расширения таблицы DSDT. В системе может присутствовать несколько таблиц SSDT. Мотивация применения таблиц SSDT состоит в том, что отдельные порции AML кода (например, выбираемые в зависимости от типа установленного про­цес­со­ра или состояния опций BIOS Setup) удобно выделить в виде отдельных таблиц, а не размещать в главной таблице DSDT.

Таблица MADT (Multiple APIC Description Table) используется для ин­фор­ми­ро­ва­ния операционной системы о присутствующих логических и физических процессорах и контроллерах прерываний I/O APIC (Input-Output Advanced Programmable Interrupt Controller). Подобно "старой" таблице MPT (Multiprocessing Table), расположенной в выполняемом блоке BIOS, таблица MADT содержит по­сле­довательность информационных структур, описывающих процессоры, кон­трол­ле­ры прерываний, а также соответствие между номерами линий запросов на прерывание и входами контроллеров прерываний. Заметим, что в большинстве сис­тем, использующих технологию Hyper Threading, в таблице MPT де­кла­ри­ро­ва­ны только физические процессоры или ядра, а в таблице MADT перечислены все логические процессоры. Это дает операционной системе дополнительную возможность для распознавания типа мультипроцессорной системы.

Первые 36 байт каждой таблицы образуют заголовок, назначение полей ко­то­ро­го одинаково для всех таблиц. Далее следует основной блок, это ин­фор­ма­ция, структура которой определяется типом таблицы. Полная но­мен­кла­ту­ра и де­таль­ное описание всех таблиц и структур, а также формат указателя RSDP приводится в [1].

Протоколы дизассемблирования таблиц ACPI

В прилагаемом каталоге DISASM содержатся протоколы ручного диз­ас­сем­блирования некоторых таблиц ACPI и их фрагментов с детальными ком­мен­та­ри­ями (текстовые файлы в кодировке DOS). Разумеется, существует возможность для автоматизированного выполнения этой задачи, например, дизассемблер фирмы Phoenix Technologies – AD.EXE (ACPI Dump). Вместе с тем, для получения некоторых сведений, необходимых для написания собственной виртуальной ма­шины ACPI и других исследовательских работ, автор посчитал уместным "коп­нуть глубже", несмотря на очевидную трудоемкость данного подхода.

Примечание. В комментариях к дизассемблированным таблицам ACPI, ис­поль­зу­ют­ся ссылки на страницы и пункты документов, указанных в файле README.TXT. Для того чтобы ссылки оставались верными, необходимо ис­поль­зо­вать именно те версии документов, которые указаны. Например, вместо до­ступ­ной на сегодня спецификации ACPI 3.0 (документ [1]), во время вы­пол­не­ния дан­ных работ использовалась спецификация ACPI 2.0.

Продолжение…





about
press


вверх