高階配置與電源介面（，縮寫：ACPI），是 1997 年由英特爾、微軟、東芝共同提出、制定的作業系統電源管理、硬體組態介面，是一種開放標準，取代了進階電源管理、多處理器規範、規範。2000 年 8 月康柏和鳳凰科技加入，推出 ACPI 20 規格。2004 年 9 月惠普取代康柏，推出 ACPI 30 規格。2009 年 6 月 16 日則推出 ACPI 40 規格。2011 年 11 月 23 日推出 ACPI 50 規格。由於 ACPI 技術正被多個作業系統和處理器架構採用，該規格的管理模式需要與時俱進。2013 年 10 月，ACPI 的推廣者們一致同意將 ACPI 的屬有歸到 UEFI 論壇。今後新的 ACPI 規格將由 UEFI 論壇制定。ACPI 定義了系統韌體（BIOS 或 UEFI）和作業系統之間的硬體抽象介面。 概要 作為標準中最廣為認可的部分，電源管理經歷了較多的改進。 首先，進階電源管理（APM Advanced Power Management）將電源管理幾乎完全分配給 BIOS 控制，這大大的限制了作業系統在控制電能消耗方面的功能。 ACPI 可以實現的功能包括： 系統電源管理（System power management） 裝置電源管理（Device power management） 處理器電源管理（Processor power management） 裝置和處理器效能管理（Device and processor performance management） 配置 即插即用（ConfigurationPlug and Play） 系統事件（System Event） 電池管理（Battery management） 溫度管理（Thermal management） 嵌入式控制器（Embedded Controller） SMBus 控制器（SMBus Controller） Windows 98 是微軟第一個支援 ACPI 的作業系統。FreeBSD v50 是支援 ACPI 的第一個 UNIX 作業系統 。Linux、NetBSD 和 OpenBSD 都支援 ACPI。Windows Vista 及以後的 Windows 要求電腦必須支援 ACPI。 ACPI 術語（部分） 高階配置電源管理介面（Advanced Configuration and Power Interface ACPI） 按照在本文中的定義， ACPI 是一種描述硬體介面的方法，要足夠抽象以允許靈活創新的硬體實現，並且足夠具體以允許 shrinkwrap OS code 使用這個硬體介面 ACPI 硬體（ACPI Hardware） 它是一種電腦硬體，具有支援 OSPM 所必備的特性，而且還具有特定的介面，這些介面的特性是由 ACPI 規範所指定的描述表（Description Tables）所描述的。 ACPI 名稱空間（ACPI Namespace） 一個樹狀層次機構，在受作業系統控制的記憶體裡面，這段記憶體裡面包含命名物件（named objects）等。這些物件（objects）可以是資料物件，控制方法物件，匯流排 裝置包物件等。作業系統透過從駐留在 ACPI BIOS 中的 ACPI Tables 載入載出（loading andor unloading）定義塊（definition blocks），來動態改變名稱空間（namespace）的內容。在 ACPI Namespace 中的所有資訊都來自 Differentiated System Description Table DSDT，DSDT 裡面包含了 Differentiated Definition Block 還有一個或者多個其他的定義塊（definition blocks）。 ACPI 機器語言（ACPI Machine Language AML） 是一種由 ACPI 相容的 OS 支援的虛擬機器的虛擬碼（Pseudocode），裡面寫有 ACPI 控制方法和控制物件。 高階可程式設計中斷控制器（Advanced Programmable Interrupt Controller APIC） 一箇中斷控制器架構，通常多見於 Intel32 位架構（Intel Architecturebased 32bit）的 PC 系統。APIC 架構支援多處理器中斷管理（中斷均勻的分佈在所有處理器），多 IO 子系統支援，與 8259A 相容，並且支援處理器內部中斷（InterProcessor Interrupt IPI）。這個架構由直屬於處理器的本地 APICs（Local APICs）和在（南橋）晶片中的 IO 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 提供一組 welldefined 的控制方法，以使 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 廠商必須在 RSDTXSDT 中提供 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 ACPIaware driver）扮演事件的處理者。 固定特徵暫存器（Fixed Feature Registers） 一組在 fixed feature register space 中的硬體暫存器，fixed feature register space 在系統 IO 地址空間的特殊的地址裡。ACPI 為 fixed features 定義了暫存器塊（register blocks）（每個暫存器塊從 FADT 那裡得到一個單獨的指標） 一般目的事件暫存器（GeneralPurpose Event Registers） The generalpurpose event registers contain the event programming model for generic features All generalpurpose 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 ArchitecturePersonal Computer IAPC） 一種對於計算機的一般描述術語，這種計算機的處理器架構符合 Intel 處理器家族基於 Intel 架構指令集（Intel Architecture instruction set）的定義，並且有工業標準（industrystandard）PC 的結構。 IO APIC（InputOutput Advanced Programmable Interrupt Controller） 一個輸入輸出高階可程式設計中斷控制器，用來從裝置傳遞中斷給處理器裡面的本地 APIC（local APIC）。 IO SAPIC An InputOutput Streamlined Advanced Programmable Interrupt Controller 用來從裝置傳遞中斷給處理器裡面的本地 APIC（local APIC）。應用於安騰處理器（Itanium）。和 APIC 的不同可以看看 Intel Itanium Processor Family Interrupt Architecture Guide ，PDF 文件的最後一章會講到不同點。 老式的（Legacy） 這是一種電腦狀態，在這個電腦狀態下電源管理策略是由平臺硬體 韌體決定的。在如今的系統中，傳統電源管理特性被用來支援安裝有傳統 OS 的電腦中的電源管理，這種傳統 OS 並不支援 OS 直接管理電源架構（OSdirected power management architecture）。 老式的硬體（Legacy Hardware） 沒有 ACPI 或者 OSPM 電源管理支援的電腦系統。 老式的作業系統（Legacy OS） 此類的作業系統無法得知或對系統的電源管理功能做管理，包含在此型別內的如一些支援 APM 1x 的作業系統。 本地 APIC（Local APIC） 接收來自 IO APIC 的中斷。 本地 SAPIC（Local SAPIC） 接收來自 IO SAPIC 的中斷。關於 SAPIC，請看 IO SAPIC。 複合 APIC 描述表（Multiple APIC Description Table MADT） 它被用在支援 APIC 和 SAPIC 的系統上，以描述 APIC 的實現。Following the MADT is a list of APICSAPIC structures that declare the APICSAPIC 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 Systemdirected 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 的系統必須在系統低地址空間（systems low address space）提供一個 RSDP。這種結構的唯一目的就是提供 RSDT 和 XSDT 的物理地址。 根系統描述表（Root System Description Table RSDT） signature 為 RSDT 的 table，它跟隨在一組指向其他系統描述表（system description tables）的物理指標之後。OS 透過跟隨 RSDP 結構中的指標來定位 RSDT。 狀態 全域性狀態（Global System States，GState） ACPI 規範定義了一臺相容 ACPI 的計算機系統可以有以下七個狀態（所謂的全域性狀態）： G0 S0 正常工作狀態：計算機的正常工作狀態 作業系統和應用程式都在執行。CPU 執行指令。 在這個狀態下 即沒有進入 G1 睡眠，CPU、硬碟、光碟機等裝置可以進入節能狀態（如裝置和處理器效能狀態 PState、裝置電源狀態 DState、處理器電源狀態 CState）或從節能狀態恢復。 G1 睡眠 細分為從 S0ix 到 S4 等幾種狀態。Linux 內核的 syspowerstate 檔案中對應的關鍵字與狀態 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 和 S1S3 狀態有很大不同，更類似 G2Soft Off 狀態和 G3 Mechanical Off 狀態。在 S4 狀態下的系統同樣可進入 G3 Mechanical Off 狀態，並且保留 S4 時候的狀態資訊。在 Windows 中可用 powercfg 命令的 h 開關設定 Windows 的休眠功能。 G2（S5）Soft OffG2，S5，和 Soft Off 都是相同的叫法。G2 和 G3Mechanical Off 幾乎是相同的，但有些部件仍然帶電，使計算機仍然可以被鍵盤、時鐘（RTC）、資料機、LAN、USB 等裝置所喚醒。Aram Kananov How To ACPI Suspend to RAM on Dell Latitude D800 with Fedora Core 3 在啟動系統從 G2 恢復到 G0 正常工作模式的過程中，無論是 G3 Mechanical Off 還是 G2 都得執行啟動程式來啟動作業系統。 此外，當作業系統在不支援 ACPI 的情況下執行，這種狀態被定義為 Legacy。在這個狀態下，硬體和電源不是透過 ACPI 來管理的，而是由進階電源管理（APM）、舊式隨插即用（Legacy Plug and Play）等管理。 G3（S6）Mechanical OffG3，S6，和 Mechanical Off 都是相同的叫法。即全部件斷電，在這種情況下只能從開機鍵喚醒。 （參考資料：ACPI 規範 30b 版的連結在下面 External links 檢視 chapter 734 裝置電源狀態 Device Power State 當一個裝置已沒有電源供應的時候，可能整個電腦系統還在工作，光碟機是一個很好的例子。 裝置狀態是與裝置相關的狀態，他們的定義和以下四個因素有關： 電源消耗（Power consumption），裝置用電量的多少。 裝置狀態 環境（Device context），裝置（從 D0 進入其他狀態的時候）保留了多少原來的狀態 環境。作業系統負責儲存丟失的裝置狀態 環境。 裝置驅動（Device driver），讓裝置恢復到 D0，驅動程式應該做什麼（或者做多少）。 裝置狀態有以下幾個： D0 FullyOn 是（正常）工作狀態，電源消耗量最多，裝置是完全被響應的，並且裝置保留了全部的裝置狀態 環境。 D1 和 D2 是中間電源狀態，它的定義根據裝置的不同而有所不同。 D3 Off 是裝置電源關閉所以對匯流排來說是沒有相應的。裝置狀態 環境全部丟失，作業系統會重新初始化裝置當重新給它加電的時候。這個狀態下的裝置恢復到 D0 相比之下需要最長的時間。 裝置狀態總結 裝置狀態 電源消耗 保留裝置狀態資訊 驅動程式恢復 D1 D0D1D2D3 D2 D2 D2 D0D1D2D3 D1D1 D3 Off 0 沒有保留 完全初始化並且裝載 處理器電源狀態 Processor Power State 處理器電源狀態（C0，C1，C2，C3Cn 狀態）是指在 G0 狀態下的處理器電能消耗和溫度管理的狀態。 只有 C0 狀態下 CPU 才會執行指令，C1 到 Cn 狀態下 CPU 都處於各種不同程度的睡眠狀態（Sleeping States），在這睡眠狀態下，CPU 都有一個恢復到 C0 的喚醒時間（latency），它是和 CPU 的電能消耗有關的，通常，用電能量越小意味著得花更長的時間恢復到 C0 狀態，也就是喚醒時間越長。 當在 C0 狀態下時，ACPI 可以透過效能狀態（Pstates）來改變處理器的效能。 各個狀態的定義如下所示： C0 是正常工作狀態，當處理器處於這種狀態下的時候，它能正常處理指令。 C1（通常稱為 Halt），擁有最短的喚醒時間，這個延時必須短到作業系統軟體使用 CPU 的時候不會考慮到喚醒時間方面的因素。一些處理器，比如 Pentium 4、酷睿，支援 C1E（Enhanced C1 state）。 C2 通常稱為 StopClock，這個狀態下處理器維持著所有的軟體所見的狀態資訊，但是需要更長的時間來恢復到 C0。這個狀態下情況最壞的硬體喚醒時間是由 ACPI 韌體提供，並且作業系統可以利用這些資訊來決定是採用 C1 而不是 C2 狀態，C2 比 C1 更省電。 C3 通常稱為 Sleep，相比 C1 和 C2 更省電了。這個狀態下情況最壞的硬體喚醒時間是由 ACPI 韌體提供，並且作業系統可以利用這些資訊來決定是採用 C2 而不是 C3 狀態，當處於 C3 狀態時，處理器快取保留了所有的狀態資訊，但是忽略所有的偵聽。作業系統負責保證快取資料的一致性。 附加的 CState 由處理器廠商來定義，如 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、CoolnQuiet，在 VIA 處理器中稱為 PowerSaver。 參見 BIOS UEFI 韌體 參考文獻 外部連結 httpsacpicaorg CategoryBIOS Category 計算機硬體標準 Category 統一可延伸韌體介面