ACPI
ACPI (Advanced Configuration and Power Interface, расширенный интерфейс управления конфигурацией и питанием) — это открытый промышленный стандарт, определяющий интерфейс взаимодействия операционной системы (ОС) с аппаратным обеспечением компьютера для управления энергопотреблением, конфигурацией устройств и обнаружением оборудования. ACPI пришёл на смену более ранним технологиям, таким как APM (Advanced Power Management), PnP BIOS (Plug and Play BIOS) и MP (MultiProcessor) таблицы, и является основой для управления питанием во всех современных компьютерах архитектуры x86, x86-64, а также ARM.
История
Разработка ACPI была начата в 1996 году компаниями Intel, Microsoft и Toshiba. Первая версия спецификации, ACPI 1.0, была выпущена в декабре 1996 года. Основной целью было создание единого, независимого от конкретного производителя аппаратного обеспечения стандарта, который бы позволил операционной системе централизованно управлять питанием и конфигурацией, а не полагаться на BIOS (Basic Input/Output System).
В 2000 году вышла версия ACPI 2.0, которая добавила поддержку 64-битных адресов и процессоров с архитектурой Itanium. ACPI 3.0 (2004 год) ввёл поддержку технологии SATA (Serial ATA) и улучшенное управление охлаждением. Версия ACPI 4.0 (2009 год) добавила поддержку USB 3.0 и виртуализации. ACPI 5.0 (2011 год) была адаптирована для ARM-архитектуры и мобильных устройств, а также ввела поддержку сенсорных экранов и других интерфейсов. Последняя на данный момент версия, ACPI 6.5, была выпущена в 2022 году и включает улучшения для работы с энергоэффективностью в центрах обработки данных и новыми типами памяти.
Архитектура и компоненты
ACPI реализуется на нескольких уровнях: аппаратном (микросхема ACPI на материнской плате), прошивке (Firmware — ACPI BIOS) и программном (драйверы ОС). Ключевым компонентом являются ACPI-таблицы, которые передаются от BIOS к операционной системе при загрузке. Эти таблицы описывают аппаратную конфигурацию и возможности управления питанием.
Основные ACPI-таблицы
- RSDP (Root System Description Pointer) — корневой указатель, который ОС ищет в области памяти BIOS. Указывает на XSDT или RSDT.
- RSDT (Root System Description Table) и XSDT (Extended System Description Table) — содержат указатели на другие таблицы ACPI.
- FADT (Fixed ACPI Description Table) — описывает фиксированные аппаратные регистры ACPI (например, регистры управления питанием).
- FACS (Firmware ACPI Control Structure) — структура, используемая для управления режимами сна и пробуждения.
- DSDT (Differentiated System Description Table) — основная таблица, содержащая код на языке ACPI Machine Language (AML). DSDT описывает все устройства, их возможности по управлению питанием и методы взаимодействия с ними.
- SSDT (Secondary System Description Table) — дополнительные таблицы, которые могут расширять или переопределять DSDT (например, для процессоров, видеокарт или других устройств).
- MADT (Multiple APIC Description Table) — описывает контроллер прерываний APIC (Advanced Programmable Interrupt Controller).
- SRAT (System Resource Affinity Table) — описывает близость процессоров и памяти (NUMA-топологию).
- SLIT (System Locality Information Table) — предоставляет информацию о задержках доступа к памяти между различными узлами NUMA.
- BGRT (Boot Graphics Resource Table) — содержит данные для отображения логотипа производителя во время загрузки.
ACPI Machine Language (AML)
Код, написанный на AML, интерпретируется операционной системой. AML — это псевдо-ассемблерный язык, который позволяет описывать сложные последовательности действий по включению/отключению устройств, управлению тактовой частотой процессора, вентиляторами и т.д. Исходный код на языке ASL (ACPI Source Language) компилируется в байт-код AML и встраивается в таблицы DSDT/SSDT.
Состояния питания
ACPI определяет несколько глобальных состояний (G-states) и состояний для отдельных устройств (D-states), процессоров (C-states) и производительности (P-states).
Глобальные состояния (G-states)
- G0 (Working) — нормальный рабочий режим, система включена и работает.
- G1 (Sleeping) — система находится в одном из режимов сна (S1, S2, S3, S4).
- G2 (Soft Off) — программное выключение (S5). Система выключена, но сохраняет питание на некоторых компонентах (например, для Wake-on-LAN).
- G3 (Mechanical Off) — полное отключение питания.
Состояния сна (S-states)
- S1 (Power on Suspend) — процессор останавливается, кэш-память и оперативная память (RAM) остаются под напряжением. Потребление минимально, пробуждение быстрое.
- S2 (Standby) — процессор и кэш отключаются, RAM сохраняет данные.
- S3 (Suspend to RAM, STR) — питание подаётся только на оперативную память. Все остальные устройства отключаются. Это самый распространённый режим «сна» в современных ноутбуках и ПК (также известен как «Сон» в Windows и «Suspend» в Linux).
- S4 (Hibernate, Suspend to Disk) — содержимое оперативной памяти записывается на жёсткий диск или SSD, после чего питание отключается полностью. При включении данные загружаются обратно в RAM. Этот режим требует больше времени для входа и выхода, но не потребляет энергию в выключенном состоянии.
- S5 (Soft Off) — состояние программного выключения. Система полностью выключена, но может быть запущена по сигналу от сетевой карты, клавиатуры или таймера.
Состояния устройств (D-states)
- D0 — устройство полностью включено и работает.
- D1, D2 — промежуточные состояния с пониженным энергопотреблением.
- D3 — устройство отключено от питания. Подразделяется на D3hot (питание подаётся на шину, но устройство неактивно) и D3cold (питание на устройство полностью отключено).
Состояния процессора (C-states)
- C0 — процессор активен и выполняет инструкции.
- C1 (Halt) — процессор остановлен (инструкция HLT), но может быстро вернуться к работе. Отключаются тактовые сигналы.
- C2 (Stop Grant) — более глубокое состояние, отключаются тактовые сигналы и часть схем.
- C3 (Sleep) — кэш-память процессора теряет свои данные (или сбрасывается в основную память), тактовые генераторы отключаются.
- C6 (Deep Power Down) — процессорное ядро полностью отключается, его состояние сохраняется в специальной области (LLC — Last Level Cache). Используется в современных процессорах для максимальной экономии энергии.
- C7, C8, C9, C10 — ещё более глубокие состояния, в которых отключаются всё больше внутренних блоков процессора и системной логики.
Состояния производительности (P-states)
P-states позволяют динамически изменять напряжение и тактовую частоту процессора (технология DVFS — Dynamic Voltage and Frequency Scaling). ОС может выбирать между более высокими P-состояниями (P0 — максимальная производительность) и более низкими (P1, P2... Pn — пониженное энергопотребление). Эта технология лежит в основе режимов энергосбережения и турбо-буста.
Применение и значение
ACPI является критически важным компонентом для работы современных операционных систем. Без него невозможны:
- Управление питанием: режимы сна (S3), гибернации (S4), автоматическое выключение монитора и жёстких дисков.
- Управление температурой: включение и регулировка скорости вентиляторов на основе данных с датчиков (Thermal Zones).
- Plug and Play: автоматическое обнаружение и конфигурирование новых устройств (например, подключение USB-устройств или установка видеокарты).
- Управление батареей: мониторинг уровня заряда, ёмкости и состояния аккумулятора на ноутбуках.
- Поддержка многопроцессорных систем: ACPI используется для обнаружения процессоров, их ядер и потоков, а также для управления прерываниями (APIC).
- Виртуализация: ACPI предоставляет гостевой ОС информацию об аппаратной платформе и позволяет ей корректно управлять питанием.
Критика и проблемы
Несмотря на свою распространённость, ACPI не лишён недостатков:
- Сложность и объём кода AML: таблицы DSDT/SSDT часто содержат ошибки, нестандартные реализации и «костыли» от производителей материнских плат. Это может приводить к нестабильной работе, зависаниям, невозможности выйти из режима сна или перегреву.
- Зависимость от BIOS/UEFI: качество реализации ACPI напрямую зависит от прошивки материнской платы. Пользователи Linux и других не-Windows систем часто сталкиваются с проблемами, вызванными некорректными ACPI-таблицами, которые разработчики BIOS тестируют в основном на Windows.
- Отсутствие строгой стандартизации: хотя спецификация ACPI является стандартом, производители часто трактуют её по-своему, что приводит к несовместимости.
- Безопасность: теоретически, вредоносное ПО может использовать ACPI для управления аппаратным обеспечением на низком уровне, хотя на практике такие атаки редки.
Для решения проблем, связанных с некорректными таблицами ACPI, в операционных системах (особенно в Linux) существует возможность их замены или исправления с помощью загрузчика (например, загрузка патченного DSDT).
Источники
- Спецификация ACPI 6.5 — Advanced Configuration and Power Interface Specification, November 2022.
- Intel Corporation, Microsoft Corporation, Toshiba Corporation. ACPI Specification, Revision 1.0, 1996.
- Документация ядра Linux: ACPI (Advanced Configuration and Power Interface) — kernel.org.
- Учебник по ACPI для разработчиков — acpica.org.
- «ACPI: The Advanced Configuration and Power Interface» — статья на OSDev Wiki.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →