Открыть сервис

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 является критически важным компонентом для работы современных операционных систем. Без него невозможны:

  1. Управление питанием: режимы сна (S3), гибернации (S4), автоматическое выключение монитора и жёстких дисков.
  2. Управление температурой: включение и регулировка скорости вентиляторов на основе данных с датчиков (Thermal Zones).
  3. Plug and Play: автоматическое обнаружение и конфигурирование новых устройств (например, подключение USB-устройств или установка видеокарты).
  4. Управление батареей: мониторинг уровня заряда, ёмкости и состояния аккумулятора на ноутбуках.
  5. Поддержка многопроцессорных систем: ACPI используется для обнаружения процессоров, их ядер и потоков, а также для управления прерываниями (APIC).
  6. Виртуализация: ACPI предоставляет гостевой ОС информацию об аппаратной платформе и позволяет ей корректно управлять питанием.

Критика и проблемы

Несмотря на свою распространённость, ACPI не лишён недостатков:

  • Сложность и объём кода AML: таблицы DSDT/SSDT часто содержат ошибки, нестандартные реализации и «костыли» от производителей материнских плат. Это может приводить к нестабильной работе, зависаниям, невозможности выйти из режима сна или перегреву.
  • Зависимость от BIOS/UEFI: качество реализации ACPI напрямую зависит от прошивки материнской платы. Пользователи Linux и других не-Windows систем часто сталкиваются с проблемами, вызванными некорректными ACPI-таблицами, которые разработчики BIOS тестируют в основном на Windows.
  • Отсутствие строгой стандартизации: хотя спецификация ACPI является стандартом, производители часто трактуют её по-своему, что приводит к несовместимости.
  • Безопасность: теоретически, вредоносное ПО может использовать ACPI для управления аппаратным обеспечением на низком уровне, хотя на практике такие атаки редки.

Для решения проблем, связанных с некорректными таблицами ACPI, в операционных системах (особенно в Linux) существует возможность их замены или исправления с помощью загрузчика (например, загрузка патченного DSDT).

Источники

  1. Спецификация ACPI 6.5 — Advanced Configuration and Power Interface Specification, November 2022.
  2. Intel Corporation, Microsoft Corporation, Toshiba Corporation. ACPI Specification, Revision 1.0, 1996.
  3. Документация ядра Linux: ACPI (Advanced Configuration and Power Interface) — kernel.org.
  4. Учебник по ACPI для разработчиков — acpica.org.
  5. «ACPI: The Advanced Configuration and Power Interface» — статья на OSDev Wiki.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →