この記事は更新が必要とされています。 この記事には古い情報が掲載されています。編集の際に新しい情報を記事に
反映 させてください。反映後、このタグは除去してください。
(2012年1月 )
レノボ ラップトップのACPIテーブルの例
Advanced Configuration and Power Interface (アドバンスド・コンフィグレーション・アンド・パワー・インターフェイス、ACPI )は、1997年 にインテル 、東芝 、マイクロソフト が共同で作り上げた、PC/AT互換機 等の電源 制御 と構成要素に関する公開された統一規格である。ACPI2.0(2000年 8月に公開)からはさらにコンパック (現ヒューレットパッカード )、フェニックステクノロジーズ が主な開発団体として参加している。
概要
ACPIは電源管理のための枠組であるだけではなく、プラットフォーム の構成要素を列挙し管理する統一された枠組でもあり、プラットフォームの電源管理を行うAPM のみならず、マザーボード 上のリソース を列挙するPnPBIOS ,マルチプロセッサ の列挙を行うMPTable 等をも統一した形で置き換えるものである。これらはBIOS 主導の管理方式だったが、ACPIはオペレーティングシステム 主導の管理を実現し、システム全体の電源管理だけでなく緻密なデバイス の電源をも含めた管理に加え、温度管理やスタンバイ [要曖昧さ回避 ] (サスペンド)、冷却ファン 制御など、さまざまな機能を提供する。また、マルチプロセッサや16ビット コードの呼び出しにくい64ビット のプロセッサ、CPU の速度制御も可能になり、最近ではノートパソコン だけでなくデスクトップ やワークステーション 、サーバ 、スマートフォン 、タブレット端末 に関しても使用される局面が多くなった。
ACPIの規格自体はCPUアーキテクチャに依存するものではないため、ARMアーキテクチャ をはじめとした、非x86/x64系の情報端末の電源およびハードウェアリソースの管理にも使用されている。
必要の無いデバイスへの電源供給を停止したり、使用しないときは自動的にスタンバイ(サスペンド)したりすることにより消費電力 を抑えられる。これによりノートパソコンではバッテリー の持続時間が飛躍的に長くなった。
実装の複雑さ、およびオペレーティングシステムとの競合 で問題が出やすいため、最近ではAPM をサポートせずACPIのみのBIOSが増えてきている。
構成要素
ACPIはACPI ハードウエアレジスタ ・ACPI BIOS ・ACPI テーブル およびACPI Machine Language (AML ) の構成要素を持つ。
ACPI BIOS
ACPI テーブルを初期化し、OS起動後は必要とされる機会は少ないが(IA-32 の場合はシステムマネジメントモード を通すことにより)必要に応じて動作する。APMとは違い、電源イベントは主にオペレーティングシステム側に見える割り込みとして伝わって来る。メモリマップ取得BIOSコールInt 15H AX=E820HはOSが後述のACPIテーブルを意識せずに書き潰さないようにするために、ACPIのテーブル等を含むメモリをOSに通知する必要がある。
ACPI テーブル
メモリ (RAM ) 上に置かれたデータ構造で、システムの初期化に必要なデータが拡張性の高い形で並べられている。 大きな構造は、下位1MBの16ビットモードからもアクセス可能ないわゆるBIOSエリア等の何処かに16バイト整列されたRSDP (Root System Description Pointer) と呼ばれる構造体がある。RSDPは、RSDT (Root System Description Table) もしくはXSDT (eXtended System Description Table) と呼ばれるメモリ構造を指す。RSDTは様々なテーブルへのポインタを含み、XSDTはその64ビットメモリ空間対応版である。それに含まれているテーブルで最も重要なものはFixed ACPI Control Pointer (FACP) またはFixed ACPI Description Table (FADT)と呼ばれるポインタで、ここにACPIハードウエアレジスタの位置や、FACS (Firmware ACPI Control Structure) と呼ばれるBIOSとの排他制御やサスペンドリジューム時にBIOSとのやりとりに使うメモリの位置、そしてDifferentiated System Description Table (DSDT) と呼ばれる後述のAML (ACPI Machine Language) で記述されたシステム上のデバイス等の情報の入ったメモリブロックの位置を指し示す。非常に柔軟なので基本的には以上に挙げたもので必要な情報はほぼ記述可能であるが、DSDTの解釈はオーバーヘッド が大きく、ブート の初期に必要なもの等に関してはRSDTもしくはXSDTの他のエントリを使って特別に記述されているものがある。RSDP以外のメモリブロックは、(PCの場合のBIOS呼出Int15H AX=E820Hのような)システムのメモリマップ取得で予約される領域に置かれ、英文字4文字のシグネチャ を持つ。
XSDTに置かれることのある他のテーブルをシグネチャとともにACPI spec 4.0bから列挙する。
SSDT (SSDT : Secondary System Description Table)
DSDTの補足として使われるAMLで記述されたデバイスなどの情報。
APIC (MADT : Multiple Apic Description Table)
システムにあるAPIC の情報を記述したテーブル。MPTablesと同等の情報を提供するが、より高機能でハイパースレッディング 対応した機械の場合必ず存在する。
ECDT (ECDT : Embedded Controller Description Table)
エンベデッドコントローラデバイスの(使用I/Oポート等の)情報を記述したテーブル。DSDT内でもデバイスとして定義されており、ACPI1.0の頃はこのテーブルは定義されていなかったが、他のACPIのデバイス記述がこれによってアクセス可能なリソースを使用するため初期化順の解決が困難であった。
TCPA (Trusted Computing Platform Alliance Capability Table)
トラステッド・コンピューティング・グループ によって定義されたメモリテーブルで、ブートシーケンスの妥当性を検証するためのデータへのポインタを含むテーブル。
MCFG (PCI Express memory mapped configuration space base address Description Table)
PCI Express のアクセスメモリ空間の場所、バス番号の範囲などを示すテーブル。
等のようなものがある。
AML
プラットホームから独立した中間言語 列でACPI Source Language (ASL ) から生成され、これをオペレーティングシステムが解釈することで、高度な機能を実現する。木構造 の名前空間 やサブルーチン 呼出や繰り返しなどの制御構造 を持ち、デバイスはその木構造の名前空間の中にあるオブジェクト として表現され、その識別の枠組に関しては、使用される識別用IDや、使用リソースの記述に使われるデータ構造等の点でPnPBIOSの特徴を受け継いでいる。
このように、高級言語 により、OSのブート に使われる構成情報を記述するものにOpen Firmware があるが、Open Firmwareと違い、解釈を行うのはOSのコンテクストでありインタプリタ をOSに内蔵する必要がある。
システムスリープ状態
システムスリープ 状態はS0・S0ix・S1・S2・S3・S4・S5の7状態が定義されており、深いスリープ状態ほど復帰への時間がかかるが、待機時の電力消費は少ない(なお、直接の関係は無いが、アイドル時のプロセッサのスリープ状態Cxやデバイスのスリープ状態Dxというものも別に定義されている)。
S0
通常の運用状態。
S0ix
Modern Standby[ 1] 。
S1
スタンバイとよばれるメモリ、デバイス、レジスタコンテクストおよびキャッシュコンテクストをCPUが保持したまま割り込み等を止め、低消費電力状態に移行する状態である。タイマの復帰などを電源管理イベントとして扱い処理する程度で矛盾無く復帰可能である。
S2
デバイスなどのコンテクストが保存されているのはS1と同様であるが、レジスタコンテクストとキャッシュコンテクストが失われているためS3と同様の方式で復帰する必要がある(ほとんど実装されている事例を見ない)。
S3
Suspend to RAMまたはスリープ と呼ばれる状態で、メモリは保持されているが、チップセットの情報やレジスタコンテクストが失われる。サスペンドに入る前にOSはレジスタコンテクストをメモリに書き出し、16ビットコードの復帰ベクタをFACSの然るべき場所に書いておく。復帰はリセット状態から復帰し、BIOSがサスペンド状態であったことを検知して初期化を行った後復帰ベクタへ移行する。その後復帰ベクタからプロテクトモード への復帰などを行って最終的にレジスタを書き戻して運用状態に復帰する。
S4
Suspend to Diskまたはハイバネーション と呼ばれる状態で、メモリ内容も失われる。メモリをディスクに書き出し、電源断状態にするのと同じである。初期は書き出し復帰はBIOSが行う事もあり、その場合の処理はS1やS3等と同等だったが、OSが行う場合は復帰時はブートローダやOSがハイバネーション内容が存在することを検出してメモリ内容を書き戻すことになる。
S5
完全なる電源断である。商用電源 あるいは無停電電源装置 から電力を全く消費しない状態。
サポートされるプラットフォーム
いわゆる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 (ACPI-CA ) と呼ばれるカーネル内コンテキストで動作するライブラリを使用して実装されている。
歴史
1997年に初めて仕様が公開された[ 2] 。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によって開発される。
脚注
関連項目
外部リンク