高級配置與電源接口

高級配置和電源管理接口(ACPI)是一個開放的標準，作業系統可用於發現與配置電腦、提供電源管理（例如：將未使用的硬體置於睡眠狀態）、自動配置（例如：即插即用和熱插拔）和狀態監控。它最初發布於1996年12月，旨在取代高級電源管理(APM)、多處理器規範和即插即用BIOS(PnP)規範。1 ACPI將電源管理置於作業系統的控制之下，而不是依賴於平台特定的固件來確定電源管理和配置策略的以前的BIOS中心系統。2 該規範是作業系統定向配置和電源管理(OSPM)系統的核心。ACPI定義了設備固件(例如：BIOS、UEFI)、電腦硬體組件和作業系統之間的硬體抽象接口。34

在內部，ACPI通過系統固件（UEFI或BIOS）提供的指令列表（「方法」）向作業系統內核廣告可用組件及其功能，內核對此進行解析。然後，ACPI使用嵌入的最小虛擬機執行用ACPI機器語言編寫的所需操作（例如，硬體組件的初始化）。

英特爾、微軟和東芝最初開發了該標準，而惠普、華為和Phoenix也後來參與其中。在2013年10月，ACPI特別興趣小組（ACPI SIG），即ACPI標準的最初開發者，同意將所有資產轉讓給UEFI論壇，未來的所有開發將進行在該論壇中。該標準的最新版本6.6於2025年5月13日發布。

## 概要

作為標準中最廣為認可的部分，電源管理經歷了較多的改進。

首先，進階電源管理（APM, Advanced Power Management）將電源管理幾乎完全分配給BIOS控制，這大大的限制了作業系統在控制電能消耗方面的功能。

ACPI可以實現的功能包括：

- 系統電源管理（System power management）
- 設備電源管理（Device power management）
- 處理器電源管理（Processor power management）
- 設備和處理器性能管理（Device and processor performance management）
- 配置/即插即用（Configuration/Plug and Play）
- 系統事件（System Event）
- 電池管理（Battery management）
- 溫度管理（Thermal management）
- 嵌入式控制器（Embedded Controller）
- SMBus控制器（SMBus Controller）

Windows 98是微軟第一個支持ACPI的作業系統。FreeBSD v5.0是支持ACPI的第一個UNIX作業系統。Linux、NetBSD和OpenBSD都支持ACPI。Windows Vista及以後的Windows要求電腦必須支援ACPI。

## ACPI術語（部分）

- 高級配置電源管理接口（Advanced Configuration and Power Interface (ACPI)）

按照在本文中的定義， ACPI是一種描述硬體接口的方法，要足夠抽象以允許靈活創新的硬體實現，並且足夠具體以允許shrink-wrap OS code使用這個硬體接口

- ACPI硬體（ACPI Hardware）

它是一種電腦硬體，具有支持OSPM所必備的特性，而且還具有特定的接口，這些接口的特性是由ACPI規範所指定的描述表（Description Tables）所描述的。

- ACPI命名空間（ACPI Namespace）

一個樹狀層次機構，在受作業系統控制的記憶體裡面，這段記憶體裡面包含命名對象（named objects）等。這些對象（objects）可以是數據對象，控制方法對象，總線/設備包對象等。作業系統通過從駐留在 ACPI BIOS 中的 ACPI Tables 載入載出（loading and/or unloading）定義塊（definition blocks），來動態改變命名空間（namespace）的內容。在ACPI Namespace 中的所有資訊都來自 Differentiated System Description Table (DSDT)，DSDT 裡面包含了 Differentiated Definition Block 還有一個或者多個其他的定義塊（definition blocks）。

- ACPI機器語言（ACPI Machine Language (AML)）

是一種由ACPI兼容的OS支持的虛擬機的偽代碼（Pseudo-code），裡面寫有ACPI控制方法和控制對象。

- 高級可編程中斷控制器（Advanced Programmable Interrupt Controller (APIC)）

一個中斷控制器架構，通常多見於Intel32位架構（Intel Architecture-based 32-bit）的PC系統。APIC架構支持多處理器中斷管理（中斷均勻的分布在所有處理器），多I/O子系統支持，與8259A兼容，並且支持處理器內部中斷（Inter-Processor Interrupt, IPI）。這個架構由直屬於處理器的本地APICs（Local APICs）和在（南橋）晶片中的I/O APIC組成。

- ACPI源語言（ACPI Source Language (ASL)）

一種和AML等同的程式語言。ASL編譯以後就是AML鏡像（AML images）。

- 控制方法（Control Method）

控制方法定義OS如何執行一個簡單的硬體任務。例如，OS調用控制方法（Control Method）去讀取一個高溫區的溫度。控制方法是用一種叫做AML的編碼語言寫的，AML可以被兼容ACPI的OS所解釋並執行。ACPI兼容的系統必須在ACPI table中提供一組最小的控制方法。OS提供一組well-defined 的控制方法，以使ACPI table開發者能夠在他們的控制方法中引用。OEM廠商可以通過，要麼Including control methods in the BIOS that test configurations and respond as needed，要麼為晶片組的不同修訂版包含一組不同的控制方法，來使一個BIOS能夠同時支持晶片組的不同修訂版。

- 中央處理器或者處理器（Central Processing Unit (CPU) or Processor）
- 定義區塊（Definition Block）

Definition Blockl以數據和控制方法（編碼成AML）的形式包含關於硬體實現和配置詳細資訊。OEM廠商可以在ACPI Tables中提供一個或者多個Definition Blocks。有一個definition block是必須被提供：那就是Differentiated Definition Block，它描述了基本的系統。在裝載Differentiated Definition Block之後，緊接著OS會把Differentiated Definition Block的內容插入到ACPI Namespace。OS可以動態的從the active ACPI Namespace插入和刪除的其他definition blocks，可以包含指向Differentiated Definition Block的引用。

- 裝置（Device）
- 熱溫區（Thermal Zone）
- ACPI 風扇（Fan）
- 裝置上下文（Device Context）

裝置中包含的變化的數據；通常是易失性（volatile）數據。當進入或者離開特定的狀態（states）的時候，設備應該忘記這些資訊，在這種情況下OS軟體負責保存並恢復這些資訊。設備上下文（Device Context）指的是包含在設備周邊的小數量的資訊。同樣可以看看系統上下文。

- 區分系統描述表（Differentiated System Description Table (DSDT)）

OEM廠商必須為ACPI兼容的OS提供一個DSDT。這個DSDT包含區分定義塊，它能提供關於基本系統的實現和配置資訊。OS總是在ACPI Namespace中插入DSDT資訊，當系統啟動的時候，而且絕不會刪除它。

- 統一可擴展固件接口（Unified Extensible Firmware Interface (UEFI)）

它是一個在OS和固件平台之間的接口。

- 嵌入式控制器（Embedded Controller）
- 嵌入式控制器介面（Embedded Controller Interface）
- 韌體ACPI控制結構（Firmware ACPI Control Structure (FACS)）

在讀寫記憶體中的一種結構，BIOS用它來實現韌體和OS之間的資訊交換（handshaking）。通過FADT(Fixed ACPI Description Table)FACS被轉到兼容ACPI的OS中。FACS包含上次啟動時的系統硬體簽名，firmware waking vector，和Global Lock。

- 固定ACPI描述表（Fixed ACPI Description Table (FADT)）

一個包含ACPI 硬體寄存器塊（Hardware Register Block）的實現和配置詳細資訊的表，OS需要用這些配置資訊來直接管理ACPI硬體寄存器塊和DSDT的物理地址，DSDT則包含其他平台的實現和配置詳細資訊。OEM廠商必須在RSDT/XSDT中提供FADT給兼容ACPI的OS。當系統啟動的時候，OS則總是把已經定義好了的namespace資訊（它存在於DSDT的Differentiated Definition Block中）插入到ACPI Namespace，並且OS絕不會刪除它。

- 固定特徵（Fixed Features）

ACPI接口提供的一組特徵。ACPI規範限制硬體編程模型（hardware programming model）在哪產生還有如何產生的。所有的Fixed Features，如果被使用了，會按照本片規範中的描述進行實現，以使OSPM能夠直接訪問Fixed Features寄存器（fixed feature registers）。

- 固定特徵事件（Fixed Feature Events）

一組事件，當Fixed Feature寄存器中的一對狀態和事件位（event bits）被在同一時間設定時，這組事件會在ACPI接口處發生。當一個Fixed Feature時間發生時，系統控制中斷（SCI，system control interrupt）is raised。對於ACPI Fixed Feature Events來說OSPM（or an ACPI-aware driver）扮演事件的處理者。

- 固定特徵寄存器（Fixed Feature Registers）

一組在fixed feature register space中的硬體寄存器，fixed feature register space在系統I/O地址空間的特殊的地址里。ACPI為fixed features定義了寄存器塊（register blocks）（每個寄存器塊從FADT那裡得到一個單獨的指針）

- 一般目的事件寄存器（General-Purpose Event Registers）

The general-purpose event registers contain the event programming model for generic features. All general-purpose events generate SCIs.

- 一般特徵（Generic Feature）
- 全局系統狀態（Global System States）

Global System States適用於整個系統，而且對於使用者是可見的。各種不同的Global System States在ACPI規範中是從G0標記到G3的。

- 省略位（Ignored Bits）

在ACPI硬體寄存器中的一些沒有被使用的位（bits），在ACPI規範中會指定這些位是「ignored」的。在讀的時候，軟體會忽略ACPI硬體寄存器中的Ignored Bits位（而不去讀取它），寫的時候，會保護Ignored Bits（不去寫這寫位）。

- Intel個人電腦架構（Intel Architecture-Personal Computer (IA-PC)）

一種對於電腦的一般描述術語，這種電腦的處理器架構符合Intel處理器家族基於Intel架構指令集（Intel Architecture instruction set）的定義，並且有工業標準（industry-standard）PC的結構。

- I/O APIC（Input/Output Advanced Programmable Interrupt Controller）

一個輸入輸出高級可編程中斷控制器，用來從設備傳遞中斷給處理器裡面的本地APIC（local APIC）。

- I/O SAPIC

An Input/Output Streamlined Advanced Programmable Interrupt Controller用來從設備傳遞中斷給處理器裡面的本地APIC（local APIC）。應用於安騰處理器（Itanium）。和APIC的不同可以看看Intel® Itanium® Processor Family Interrupt Architecture Guide，PDF文檔的最後一章會講到不同點。

- 老式的（Legacy）

這是一種電腦狀態，在這個電腦狀態下電源管理策略是由平台硬體/固件決定的。在如今的系統中，傳統電源管理特性被用來支持安裝有傳統OS的電腦中的電源管理，這種傳統OS並不支持OS直接管理電源架構（OS-directed power management architecture）。

- 老式的硬體（Legacy Hardware）

沒有ACPI或者OSPM電源管理支持的電腦系統。

- 老式的作業系統（Legacy OS）

此類的作業系統無法得知或對系統的電源管理功能做管理，包含在此類型內的如一些支援APM 1.x的作業系統。

- 本地APIC（Local APIC）

接收來自I/O APIC的中斷。

- 本地SAPIC（Local SAPIC）

接收來自I/O SAPIC的中斷。關於SAPIC，請看「I/O SAPIC」。

- 複合APIC描述表（Multiple APIC Description Table (MADT)）

它被用在支持APIC和SAPIC的系統上，以描述APIC的實現。Following the MADT is a list of APIC/SAPIC structures that declare the APIC/SAPIC features of the machine.

- 對象（Object）

ACPI Namespace的節點就是objects，這些objects被OS用system definition tables中的資訊插入tree。這些objects可以是數據對象（data objects），包對象（package objects），控制方法對象（control method objects）等。包對象refer to其他對象（objects）。對象同樣擁有類型（type），大小（size），和相對名稱（relative name）。

- 對象名（Object name）

ACPI Namespace的一部分。有一組規則for naming objects。

- 作業系統直接電源管理（Operating System-directed Power Management (OSPM)）

電源（和系統）管理的一個模型，在其中OS扮演重要的角色，使用全局資訊為手邊的任務優化系統行為（system behavior）。

- 包（Package）

一組objects。

- 電源按鈕（Power Button）

使用者按的按鈕或者其他有觸點的開關（switch contact）設備，通過它可以把系統從睡眠或者soft off狀態切換到工作狀態，還可以給OS發送信號使OS從睡眠或者soft off狀態恢復到工作狀態。

- 電源管理（Power Management）

一種最小化系統電源消耗的軟硬體機制，管理系統熱量限制，延長系統電池使用時間（battery life）。電源管理在系統速度，噪音，電池使用時間，處理器速度，還有電源消耗之間取得平衡。一些system functions，比如appliance (for example, answering machine, furnace control) operations，需要電源管理。

- 電源資源（Power Resources）

設備需要的資源（比如power planes和clock sources），設備需要在給定的電源狀態下對這些資源進行操作。

- 電源來源（Power Sources）
- 寄存器分組（Register Grouping）

由兩個寄存器塊組成（它有兩個指向兩個不同寄存器塊的指針）。在寄存器分組（register grouping）內部的固定位可以被在兩個寄存器塊（register blocks）之間拆分。這就允許了在寄存器分組內部的位可以被在兩個晶片（chips）之間拆分。

- 保留位（Reserved Bits）

在ACPI硬體寄存器中有一些沒有被使用的位，在ACPI規範中被稱為保留位。為了未來能夠擴展，硬體寄存器保留位總是被歸零，並且寫入的數據不會造成其他的影響。OSPM的實現必須往所有使能和狀態寄存器的保留位寫「0」，同樣還要往控制寄存器（control registers）的preserve bits寫「0」

- 根系統描述指針（Root System Description Pointer (RSDP)）

兼容ACPI的系統必須在系統低地址空間（system’s low address space）提供一個RSDP。這種結構的唯一目的就是提供RSDT和XSDT的物理地址。

- 根系統描述表（Root System Description Table (RSDT)）

signature為RSDT的table，它跟隨在一組指向其他系統描述表（system description tables）的物理指針之後。OS通過跟隨RSDP結構中的指針來定位RSDT。

## 狀態

### 全局狀態（Global System States，G-State）

ACPI規範定義了一台兼容ACPI的電腦系統可以有以下七個狀態（所謂的全局狀態）：

- G0(S0)正常工作狀態：電腦的正常工作狀態-作業系統和應用程式都在運行。CPU執行指令。在這個狀態下(即沒有進入G1睡眠)，CPU、硬碟、光碟機等設備可以進入節能狀態（如裝置和處理器效能狀態P-State、裝置電源狀態D-State、處理器電源狀態C-State）或從節能狀態恢復。
- G1 睡眠 細分為從S0ix到S4等幾種狀態。Linux內核的/sys/power/state檔案中對應的關鍵字與狀態: standby(S1), mem(S3), disk(S4)。在Windows中可用`powercfg /a`命令列出平台支援的ACPI G1狀態。
- S0ix：Modern Standby。只有BIOS、作業系統和所有的硬體都支援S0ix才能使用Modern Standby。S0ix與S3不相容。
- S1：最耗電的睡眠模式。CPU的所有寄存器被刷新，並且CPU停止執行指令。CPU和記憶體的電源被維持。這種模式通常叫Power on Suspend或者叫做POS。老式的電腦對S1支持可能比S3好。
- S2：一種比S1更深的睡眠狀態，停止CPU的電源供應。然而，這種模式通常並不被採用。
- S3：又稱為Suspend to RAM或STR，在Windows XP以後的Windows版本和一些Linux發行版中叫做"待機(Standby)"，在Windows Vista和Mac OS X則叫做"睡眠(Sleep)"。在這個狀態下，RAM是唯一的有電源供應的元件。S3的恢復的過程比S4快。如果S3睡眠過程中斷電，則所有儲存在RAM中的資料將遺失。S3是筆記型電腦最常用的睡眠模式。
- S4：在Windows中叫休眠，在Mac OS X中叫作安全睡眠，也稱為Suspend to Disk。在這個狀態下，所有記憶體的內容被儲存在硬碟，儲存作業系統當前的狀態。S4和S3之間的差異是：S4消耗的時間較S3長；S3狀態下的時候如果系統斷電，則所有RAM上的數據就會丟失，包括所有的沒有保存的文檔，而在S4狀態下則沒有影響。S4和"S1-S3"狀態有很大不同，更類似G2Soft Off狀態和G3 Mechanical Off狀態。在S4狀態下的系統同樣可進入G3(Mechanical Off)狀態，並且保留S4時候的狀態資訊。在Windows中可用`powercfg`命令的`/h`開關設定Windows的休眠功能。
- G2（S5）Soft Off--G2，S5，和Soft Off都是相同的叫法。G2和G3Mechanical Off幾乎是相同的，但有些部件仍然帶電，使電腦仍然可以被鍵盤、時鐘（RTC）、數據機、LAN、USB等設備所喚醒。在啟動系統從G2恢復到G0正常工作模式的過程中，無論是G3 Mechanical Off還是G2都得運行啟動程式來啟動作業系統。

此外，當作業系統在不支持ACPI的情況下運行，這種狀態被定義為Legacy。在這個狀態下，硬體和電源不是通過ACPI來管理的，而是由進階電源管理（APM）、舊式隨插即用（Legacy Plug and Play）等管理。

- G3（S6）Mechanical Off--G3，S6，和Mechanical Off都是相同的叫法。即全部件斷電，在這種情況下只能從開機鍵喚醒。

（參考資料：ACPI規範3.0b版的連結在下面 External links, 查看chapter 7.3.4)

### 設備電源狀態(Device Power State)

當一個設備已沒有電源供應的時候，可能整個電腦系統還在工作，光碟機是一個很好的例子。

設備狀態是與設備相關的狀態，他們的定義和以下四個因素有關：

電源消耗（Power consumption），設備用電量的多少。

設備狀態/環境（Device context），設備（從D0進入其他狀態的時候）保留了多少原來的狀態/環境。作業系統負責保存丟失的設備狀態/環境。

設備驅動（Device driver），讓設備恢復到D0，驅動程序應該做什麼（或者做多少）。

設備狀態有以下幾個：

- D0 Fully-On 是（正常）工作狀態，電源消耗量最多，設備是完全被響應的，並且設備保留了全部的設備狀態/環境。
- D1 和 D2是中間電源狀態，它的定義根據設備的不同而有所不同。
- D3 Off是設備電源關閉所以對總線來說是沒有相應的。設備狀態/環境全部丟失，作業系統會重新初始化設備當重新給它加電的時候。這個狀態下的設備恢復到D0相比之下需要最長的時間。

設備狀態｜電源消耗｜保留設備狀態資訊｜驅動程序恢復

D1｜D0>D1>D2>D3｜>D2｜D1>D2>D3｜D1

D3 - Off｜0｜沒有保留｜完全初始化並且裝載

### 處理器電源狀態(Processor Power State)

處理器電源狀態（C0，C1，C2，C3……Cn狀態）是指在G0狀態下的處理器電能消耗和溫度管理的狀態。

只有C0狀態下CPU才會執行指令，C1到Cn狀態下CPU都處於各種不同程度的睡眠狀態（Sleeping States），在這睡眠狀態下，CPU都有一個恢復到C0的喚醒時間（latency），它是和CPU的電能消耗有關的，通常，用電能量越小意味著得花更長的時間恢復到C0狀態，也就是喚醒時間越長。

當在C0狀態下時，ACPI可以通過性能狀態（P-states）來改變處理器的性能。

各個狀態的定義如下所示：

- C0是正常工作狀態，當處理器處於這種狀態下的時候，它能正常處理指令。
- C1（通常稱為Halt），擁有最短的喚醒時間，這個延時必須短到作業系統軟體使用CPU的時候不會考慮到喚醒時間方面的因素。一些處理器，比如Pentium 4、酷睿，支持C1E（Enhanced C1 state）。
- C2 (通常稱為Stop-Clock)，這個狀態下處理器維持著所有的軟體所見的狀態資訊，但是需要更長的時間來恢復到C0。這個狀態下情況最壞的硬體喚醒時間是由ACPI固件提供，並且作業系統可以利用這些資訊來決定是採用C1而不是C2狀態，C2比C1更省電。
- C3 (通常稱為Sleep)，相比C1和C2更省電了。這個狀態下情況最壞的硬體喚醒時間是由ACPI固件提供，並且作業系統可以利用這些資訊來決定是採用C2而不是C3狀態，當處於C3狀態時，處理器緩存保留了所有的狀態資訊，但是忽略所有的偵聽。作業系統負責保證緩存數據的一致性。
- 附加的C-State由處理器廠商來定義，如Intel Haswell處理器最多有C10。

### 設備和處理器性能狀態（Device and Processor Performance States）

設備和處理器性能狀態（Px狀態）是在C0（對於處理器）和D0（對於設備）下定義的電源消耗和能力的狀態。性能狀態允許OSPM在性能和能源消耗之間取得平衡。P0是最高性能狀態，從P1到Pn是連續的低性能狀態，最高限制n為16。

- P0狀態，使用最大性能並且消耗的電能最多。
- P1狀態，性能比前者要小，但是消耗電能也相應少一些。
- Pn狀態，n是的大小是依賴於處理器和設備的，處理器和設備可以定一個任意的不超過16的數字。

這個狀態在Intel處理器中稱為SpeedStep，在AMD處理器中稱為PowerNow!、Cool'n'Quiet，在VIA處理器中稱為PowerSaver。

## 基本資料

- 頭銜：ACPI
- 車隊名稱：高級配置和電源管理接口
- 縮寫：ACPI
- 狀態：已出版
- 首次出版：1996年12月
- 版本：6.6
- version_date：2025年5月
- 組織：ACPI 特別興趣小組 (1996-2013)、UEFI論壇 (2013至今)
- 有關標準：UEFI
- 前任：高級電源管理、多處理器規範、傳統的即插即用
- 領域：電源管理固件