Расширенный интерфейс конфигурации и питания ( ACPI ) — это открытый стандарт , который операционные системы могут использовать для обнаружения и настройки компонентов компьютерного оборудования , для управления питанием (например, перевода неиспользуемых аппаратных компонентов в спящий режим), автоматической настройки (например, Plug and Play и горячая замена ) и мониторинга состояния. Впервые он был выпущен в декабре 1996 года. ACPI призван заменить Advanced Power Management (APM), MultiProcessor Specification и Plug and Play BIOS (PnP). [1] ACPI переводит управление питанием под контроль операционной системы, в отличие от предыдущей системы, ориентированной на BIOS, которая полагалась на специфичную для платформы прошивку для определения политик управления питанием и конфигурации. [2] Спецификация является центральной для системы конфигурации и управления питанием, управляемой операционной системой ( OSPM ). ACPI определяет интерфейсы абстракции оборудования между прошивкой устройства (например, BIOS , UEFI ), компонентами компьютерного оборудования и операционными системами . [3] [4]
Внутри себя ACPI объявляет доступные компоненты и их функции ядру операционной системы, используя списки инструкций (« методы »), предоставляемые через системную прошивку ( UEFI или BIOS ), которые ядро анализирует. Затем ACPI выполняет требуемые операции, написанные на машинном языке ACPI (например, инициализацию аппаратных компонентов), используя встроенную минимальную виртуальную машину .
Первоначально стандарт разработали Intel , Microsoft и Toshiba , а позже к нему присоединились HP , Huawei и Phoenix . В октябре 2013 года группа ACPI Special Interest Group (ACPI SIG), первоначальные разработчики стандарта ACPI, согласились передать все активы UEFI Forum , в котором будет проходить вся будущая разработка. [5] Последняя версия [обновлять]стандарта 6.5 была выпущена в августе 2022 года. [6]
Уровень прошивки ACPI состоит из трех основных компонентов: таблиц ACPI, ACPI BIOS и регистров ACPI. ACPI BIOS генерирует таблицы ACPI и загружает таблицы ACPI в основную память . Большая часть функциональности прошивки ACPI предоставляется в байт-коде ACPI Machine Language (AML), полного по Тьюрингу , доменно-специфического языка низкого уровня , хранящегося в таблицах ACPI. [7] Для использования таблиц ACPI операционная система должна иметь интерпретатор для байт-кода AML. Реализация эталонного интерпретатора AML предоставляется архитектурой компонентов ACPI (ACPICA). Во время разработки BIOS байт-код AML компилируется из кода ASL (исходный язык ACPI). [8] [9]
Архитектура компонентов ACPI ( ACPICA ), в основном написанная инженерами Intel, предоставляет независимую от платформы эталонную реализацию кода ACPI, связанного с операционной системой, с открытым исходным кодом . [10] Код ACPICA используется Linux, Haiku , ArcaOS [11] и FreeBSD , [8] которые дополняют его своим кодом, специфичным для операционной системы.
Первая версия спецификации ACPI была выпущена в декабре 1996 года, поддерживая 16-, 24- и 32-битные адресные пространства. Только в августе 2000 года ACPI получил поддержку 64-битных адресов, а также поддержку многопроцессорных рабочих станций и серверов с версией 2.0.
В 1999 году тогдашний генеральный директор Microsoft Билл Гейтс заявил в электронном письме, что Linux выиграет от ACPI без необходимости выполнять какую-либо работу, и предложил сделать его доступным только для Windows. [12] [13] [14]
В сентябре 2004 года была выпущена версия 3.0, добавившая в спецификацию ACPI поддержку интерфейсов SATA , шины PCI Express , многопроцессорную поддержку более 256 процессоров, датчиков внешнего освещения и устройств присутствия пользователя, а также расширившую тепловую модель за пределы предыдущей поддержки, ориентированной на процессор.
Выпущенная в июне 2009 года версия 4.0 спецификации ACPI добавила в конструкцию различные новые функции; наиболее примечательными являются поддержка USB 3.0 , поддержка простоя логического процессора и поддержка x2APIC .
Изначально ACPI был эксклюзивным для архитектуры x86 ; Версия 5.0 спецификации ACPI была выпущена в декабре 2011 года, [15] в которую была добавлена поддержка архитектуры ARM . Версия 5.1 была выпущена в июле 2014 года. [16]
Последняя версия спецификации — 6.5, выпущенная в августе 2022 года. [6]
Windows 98 от Microsoft была первой операционной системой, реализовавшей ACPI, [17] [18] но ее реализация была несколько ошибочной или неполной, [19] [20] хотя некоторые из проблем, связанных с ней, были вызваны оборудованием ACPI первого поколения. [21] Другие операционные системы, включая более поздние версии Windows , macOS (x86 macOS только), eComStation , ArcaOS , [22] FreeBSD (начиная с FreeBSD 5.0 [23] ), NetBSD (начиная с NetBSD 1.6 [24] ), OpenBSD (начиная с OpenBSD 3.8 [25] ), HP-UX , OpenVMS , Linux , GNU/Hurd и версии Solaris для ПК , имеют по крайней мере некоторую поддержку ACPI. [26] Некоторые новые операционные системы, такие как Windows Vista , требуют, чтобы компьютер имел ACPI-совместимый BIOS, а начиная с Windows 8 , было реализовано состояние S0ix/Modern Standby . [27]
Операционные системы Windows используют acpi.sys [28] для доступа к событиям ACPI.
Серия 2.4 ядра Linux имела лишь минимальную поддержку ACPI, с лучшей поддержкой, реализованной (и включенной по умолчанию) начиная с версии ядра 2.6.0. [29] Старые реализации ACPI BIOS, как правило, довольно глючны и, следовательно, не поддерживаются более поздними операционными системами. Например, Windows 2000 , Windows XP и Windows Server 2003 используют ACPI только если дата BIOS после 1 января 1999 года. [30] Аналогично, ядро Linux 2.6 может не использовать ACPI, если дата BIOS до 1 января 2001 года. [29]
Операционные системы на базе Linux могут обеспечивать обработку событий ACPI через acpid. [31]
Как только операционная система, совместимая с OSPM, активирует ACPI, она берет на себя исключительный контроль над всеми аспектами управления питанием и конфигурацией устройств. Реализация OSPM должна предоставить драйверам устройств среду, совместимую с ACPI, что открывает определенные состояния системы, устройства и процессора.
Спецификация ACPI определяет следующие четыре глобальных состояния «Gx» и шесть состояний сна «Sx» для компьютерной системы, совместимой с ACPI: [32] [33]
Спецификация также определяет состояние Legacy : состояние операционной системы, которая не поддерживает ACPI. В этом состоянии оборудование и питание не управляются через ACPI, что фактически отключает ACPI.
Состояния устройства D0 – D3 зависят от устройства:
Состояния мощности ЦП C0 – C3 определяются следующим образом:
Пока устройство или процессор работает (D0 и C0 соответственно), он может находиться в одном из нескольких состояний мощности и производительности . Эти состояния зависят от реализации. P0 всегда является состоянием с наивысшей производительностью, а P1 и P n являются последовательно более низкими состояниями производительности. Общее количество состояний зависит от устройства или процессора, но не может быть больше 16. [41]
P-состояния стали известны как SpeedStep в процессорах Intel , как PowerNow! или Cool'n'Quiet в процессорах AMD и как PowerSaver в процессорах VIA .
Системы, совместимые с ACPI, взаимодействуют с оборудованием либо через «интерфейс фиксированных функций оборудования (FFH)», либо через платформенно-независимую модель программирования оборудования, которая опирается на платформенно-зависимый машинный язык ACPI (AML), предоставляемый производителем оригинального оборудования (OEM).
Интерфейсы фиксированного оборудования — это специфичные для платформы функции, предоставляемые производителями платформ для повышения производительности и восстановления после сбоев. Стандартные ПК на базе Intel имеют фиксированный функциональный интерфейс, определенный Intel, [43] , который предоставляет набор основных функций, что снижает потребность ACPI-совместимой системы в полных стеках драйверов для предоставления основных функций во время загрузки или в случае серьезного сбоя системы.
Интерфейс ошибок платформы ACPI (APEI) — это спецификация для сообщения операционной системе об ошибках оборудования, например, чипсета или оперативной памяти.
ACPI определяет множество таблиц, которые обеспечивают интерфейс между ACPI-совместимой операционной системой и системной прошивкой ( BIOS или UEFI ). Сюда входят, например, RSDP, RSDT, XSDT, FADT, FACS, DSDT, SSDT, MADT и MCFG. [44] [45]
Таблицы позволяют описывать системное оборудование в платформенно-независимой манере и представлены либо в виде структур данных фиксированного формата, либо в AML. Основная таблица AML — это DSDT (дифференцированная таблица описания системы). AML можно декомпилировать с помощью таких инструментов, как iASL от Intel (с открытым исходным кодом, часть ACPICA) для таких целей, как исправление таблиц для расширения совместимости ОС. [46] [47]
Указатель описания корневой системы (RSDP) располагается в зависимости от платформы и описывает остальные таблицы.
Пользовательская таблица ACPI, называемая двоичной таблицей платформы Windows (WPBT), используется Microsoft, чтобы позволить поставщикам автоматически добавлять программное обеспечение в ОС Windows. Некоторые поставщики, такие как Lenovo , были пойманы на использовании этой функции для установки вредоносного программного обеспечения, такого как Superfish . [48] Samsung поставляла ПК с отключенным Центром обновления Windows. [48] Версии Windows старше Windows 7 не поддерживают эту функцию, но можно использовать альтернативные методы. Такое поведение сравнивают с руткитами . [49] [50]
Основатель Ubuntu Марк Шаттлворт говорит, что ACPI представляет собой риск для безопасности. [51] Он говорит, что «спорить за ACPI на вашем устройстве следующего поколения — значит спорить за троянского коня монументальных размеров, который будет установлен в вашей гостиной и в вашем центре обработки данных» и «прошивка на вашем устройстве — лучший друг АНБ ». Он продолжает: «Ваша самая большая ошибка — предполагать, что АНБ — единственное учреждение, злоупотребляющее этим положением доверия — на самом деле, разумно предположить, что все прошивки — это выгребная яма небезопасности, любезно предоставленная некомпетентностью высочайшей степени производителей и компетентностью высочайшей степени очень широкого круга таких агентств». Он предлагает в качестве решения декларативную прошивку с открытым исходным кодом (ACPI или не-ACPI). [52]
Общее решение по дизайну не обошлось без критики. В ноябре 2003 года Линус Торвальдс — автор ядра Linux — описал ACPI как «полную катастрофу дизайна во всех отношениях». [52] [53]