Advanced Configuration and Power Interface

Advanced Configuration and Power Interfaceは、1997年にインテル、東芝、マイクロソフトが共同で作り上げた、PC/AT互換機等の電源制御と構成要素に関する公開された統一規格である。ACPI2.0からはさらにコンパック、フェニックステクノロジーズが主な開発団体として参加している。

1. 概要
-----

ACPIは電源管理のための枠組であるだけではなく、プラットフォームの構成要素を列挙し管理する統一された枠組でもあり、プラットフォームの電源管理を行うAPMのみならず、マザーボード上のリソースを列挙するPnPBIOS,マルチプロセッサの列挙を行うMPTable等をも統一した形で置き換えるものである。これらはBIOS主導の管理方式だったが、ACPIはオペレーティングシステム主導の管理を実現し、システム全体の電源管理だけでなく緻密なデバイスの電源をも含めた管理に加え、温度管理やスタンバイdate=2022年4月}}、冷却ファン制御など、さまざまな機能を提供する。また、マルチプロセッサや16ビットコードの呼び出しにくい64ビットのプロセッサ、CPUの速度制御も可能になり、最近ではノートパソコンだけでなくデスクトップやワークステーション、サーバに関しても使用される局面が多くなった。

必要の無いデバイスへの電源供給を停止したり、使用しないときは自動的にスタンバイしたりすることにより消費電力を抑えられる。これによりノートパソコンではバッテリーの持続時間が飛躍的に長くなった。

実装の複雑さ、およびオペレーティングシステムとの競合で問題が出やすいため、最近ではAPMをサポートせずACPIのみのBIOSが増えてきている。

2. 構成要素
-------

ACPIはACPI ハードウエアレジスタ・ACPI BIOS・ACPI テーブルおよびACPI Machine Language  の構成要素を持つ。

ACPI BIOS ACPI テーブルを初期化し、OS起動後は必要とされる機会は少ないが必要に応じて動作する。APMとは違い、電源イベントは主にオペレーティングシステム側に見える割り込みとして伝わって来る。メモリマップ取得BIOSコールInt 15H AX=E820HはOSが後述のACPIテーブルを意識せずに書き潰さないようにするために、ACPIのテーブル等を含むメモリをOSに通知する必要がある。 ACPI テーブル メモリ  上に置かれたデータ構造で、システムの初期化に必要なデータが拡張性の高い形で並べられている。 大きな構造は、下位1MBの16ビットモードからもアクセス可能ないわゆるBIOSエリア等の何処かに16バイト整列されたRSDP  と呼ばれる構造体がある。RSDPは、RSDT  もしくはXSDT  と呼ばれるメモリ構造を指す。RSDTは様々なテーブルへのポインタを含み、XSDTはその64ビットメモリ空間対応版である。それに含まれているテーブルで最も重要なものはFixed ACPI Control Pointer  またはFixed ACPI Description Table と呼ばれるポインタで、ここにACPIハードウエアレジスタの位置や、FACS  と呼ばれるBIOSとの排他制御やサスペンドリジューム時にBIOSとのやりとりに使うメモリの位置、そしてDifferentiated System Description Table  と呼ばれる後述のAML  で記述されたシステム上のデバイス等の情報の入ったメモリブロックの位置を指し示す。非常に柔軟なので基本的には以上に挙げたもので必要な情報はほぼ記述可能であるが、DSDTの解釈はオーバーヘッドが大きく、ブート
の初期に必要なもの等に関してはRSDTもしくはXSDTの他のエントリを使って特別に記述されているものがある。RSDP以外のメモリブロックは、システムのメモリマップ取得で予約される領域に置かれ、英文字4文字のシグネチャを持つ。 XSDTに置かれることのある他のテーブルをシグネチャとともにACPI spec 4.0bから列挙する。 SSDT  DSDTの補足として使われるAMLで記述されたデバイスなどの情報。 APIC  システムにあるAPICの情報を記述したテーブル。MPTablesと同等の情報を提供するが、より高機能でハイパースレッディング対応した機械の場合必ず存在する。 ECDT  エンベデッドコントローラデバイスの情報を記述したテーブル。DSDT内でもデバイスとして定義されており、ACPI1.0の頃はこのテーブルは定義されていなかったが、他のACPIのデバイス記述がこれによってアクセス可能なリソースを使用するため初期化順の解決が困難であった。 TCPA  トラステッド・コンピューティング・グループによって定義されたメモリテーブルで、ブートシーケンスの妥当性を検証するためのデータへのポインタを含むテーブル。 MCFG  PCI Expressのアクセスメモリ空間の場所、バス番号の範囲などを示すテーブル。 等のようなものがある。 AML プラットホームから独立した中間言語列でACPI Source Language  から生成され、これをオペレーティングシステムが解釈することで、高度な機能を実現する。木構造の名前空間やサブルーチン呼出や繰り返しなどの制御構造を持ち、デバイスはその木構造の名前空間の中にあるオブジェクト
として表現され、その識別の枠組に関しては、使用される識別用IDや、使用リソースの記述に使われるデータ構造等の点でPnPBIOSの特徴を受け継いでいる。 このように、高級言語により、OSのブートに使われる構成情報を記述するものにOpen Firmwareがあるが、Open Firmwareと違い、解釈を行うのはOSのコンテクストでありインタプリタをOSに内蔵する必要がある。

3. システムスリープ状態
-------------

システムスリープ状態はS0・S0ix・S1・S2・S3・S4・S5の7状態が定義されており、深いスリープ状態ほど復帰への時間がかかるが、待機時の電力消費は少ない。

S0 通常の運用状態。 S0ix Modern Standby。 S1 スタンバイとよばれるメモリ、デバイス、レジスタコンテクストおよびキャッシュコンテクストをCPUが保持したまま割り込み等を止め、低消費電力状態に移行する状態である。タイマの復帰などを電源管理イベントとして扱い処理する程度で矛盾無く復帰可能である。 S2 デバイスなどのコンテクストが保存されているのはS1と同様であるが、レジスタコンテクストとキャッシュコンテクストが失われているためS3と同様の方式で復帰する必要がある。 S3 Suspend to RAMまたはスリープと呼ばれる状態で、メモリは保持されているが、チップセットの情報やレジスタコンテクストが失われる。サスペンドに入る前にOSはレジスタコンテクストをメモリに書き出し、16ビットコードの復帰ベクタをFACSの然るべき場所に書いておく。復帰はリセット状態から復帰し、BIOSがサスペンド状態であったことを検知して初期化を行った後復帰ベクタへ移行する。その後復帰ベクタからプロテクトモードへの復帰などを行って最終的にレジスタを書き戻して運用状態に復帰する。 S4 Suspend to Diskまたはハイバネーションと呼ばれる状態で、メモリ内容も失われる。メモリをディスクに書き出し、電源断状態にするのと同じである。初期は書き出し復帰はBIOSが行う事もあり、その場合の処理はS1やS3等と同等だったが、OSが行う場合は復帰時はブートローダやOSがハイバネーション内容が存在することを検出してメモリ内容を書き戻すことになる。 S5 完全なる電源断である。商用電源あるいは無停電電源装置から電力を全く消費しない状態。

4. サポートされるプラットフォーム
------------------

いわゆるAT互換機アーキテクチャの他にAMD64やIA-64を使用したシステムで使用されている。特にIA-64上のOSではACPIサポートは必須の要件となっている。その上で動くOSではWindowsではWindows 98から、Linuxでは2.3.19からFreeBSDでは5-CURRENTからACPIが利用できるようになったが、管理対象となるデバイス全てがACPIをサポートしていないと不具合が出ることがある。ACPI 3.0の規格書の\_OSIオブジェクトの記述から読み取れる通りこの他にIA-64上のHP-UX、OpenVMSでもサポートされている。

LinuxやFreeBSDやNetBSDではインテルによって開発及び保守されているACPI Component Architecture と呼ばれるカーネル内コンテキストで動作するライブラリを使用して実装されている。

5. 歴史
-----

1997年に初めて仕様が公開された。ACPI 2.0は2000年にリリースされ、ACPI 3.0は2004年にリリースされ、ACPI 4.0は2009年にリリースされ、ACPI 5.0は2011年にリリースされた。2013年10月、ACPIはUnified EFI Forumの下に置かれ、新しいACPI仕様はUEFI Forumによって開発される。

6. 脚注
-----

7. 関連項目
-------

Advanced Power Management 
System Management BIOS
Basic Input/Output System
Unified Extensible Firmware Interface
Hardware Abstraction Layer
ハイバネーション
スリープ 

8. 外部リンク
--------

[1]: ACPI 5.0以降各バージョンの仕様書へのリンクが掲載されている。
[2]
[3]