APIC

APIC(Advanced Programmable Interrupt Controller



APIC、すなわちAdvanced Programmable Interrupt Controllerは、インテルが開発したx86アーキテクチャにおける割り込みコントローラです。従来のLegacy割り込みコントローラであるPIC(Programmable Interrupt Controller)、特に8259に代わるものであり、マルチプロセッサのサポートやプライオリティ制御など、より高度な機能を追加しています。APICはインテルアーキテクチャの進化に合わせて進化し、複数のバージョンが存在しています。

概要


APICは主に2種類のコンポーネントから構成されています。それは、プロセッサコアに組み込まれたLocal APICと、I/Oデバイスからの割り込みを管理するためのIOAPICです。これら2つはそれぞれ独自のプロトコルで通信し、割り込みの通知を行います。Pentium Proの世代では、APIC Busという専用のバスが利用されていましたが、その後のNetBurst世代以降はAPIC Busが廃止され、FSBを使って通知が行われるようになりました。

Local APIC


Local APICはプロセッサコア内に実装されており、外部からのすべての割り込みを管理します。I/Oからの割り込みだけでなく、IPI(Inter-Processor Interrupt)を通じて、マルチプロセッサ環境におけるCPU間の通信も行います。このように、Local APICは割り込み処理の中枢として機能します。

IOAPIC


IOAPICは、I/Oデバイスから受け取った割り込みをCPUに通知するためのリダイレクション・テーブルを持っています。すべてのI/O割り込みはまずIOAPICで受信され、その後、オペレーティングシステムやBIOSによって設定されたリダイレクション・テーブルに基づいてCPUに通知されます。リダイレクション・テーブルでは、割り込みの種類や優先順位、どのCPUに割り込みを送信するかの設定が可能です。

特徴


一般的なIA-32アーキテクチャでの実装と動作について解説します。PCIバスには最大4本のI/O割り込み線(INT_A、B、C、D)が存在し、これらの割り込み線はIOAPICに接続されています。IOAPICはそれぞれの割り込み線に対するリダイレクション・テーブルを持ち、割り込みの種類やベクタなど、Local APICとの通信に必要な設定が行われます。また、I/Oデバイスの数が多い場合は、複数のデバイスが1本の割り込み線を共有することもありますが、この管理もIOAPICが担います。IOAPICはシステム内で複数存在することが可能です。

PCIのI/Oデバイスの中には、MSI(Message Signaled Interrupts)をサポートしているものもあります。これらのデバイスでは割り込み線を使用せず、チップセットを通じてIOAPICにメッセージがルーティングされ、リダイレクション・テーブルを基にCPUに通知されます。

動作


IOAPICがPCIインターフェースからの割り込み信号の変化を感知すると、定められたリダイレクション・テーブルに基づいてCPUに割り込みメッセージを発行します。Local APICがこのメッセージを受信すると、自己の割り込み処理の状態や優先度をチェックし、割り込みハンドラを呼び出します。ハンドラは割り込みを発生させたI/Oデバイスを検出し、通知を停止させて処理を開始します。一連の割り込み処理を終えると、CPUはEOI(End of Interrupt)コマンドをIOAPICに送り、処理が完了したことを通知します。この時、依然としてI/Oデバイスから割り込み信号が送られている場合には、直ちに再度CPUに通知が発行されます。これにより割り込みを無駄にロストすることを防ぎ、共有制御が行われます。

プライオリティ制御


マルチプロセッサ環境において、高い優先度の処理を行っているCPUには低い優先度の割り込みは通知されず一時的に待機します。そこで、余裕のあるCPU、もしくは低優先度の処理中のCPUに割り込みを送信すべきです。NetBurst世代以降のLocal APICには、割り込み処理の状況を定期的に通知する機能が搭載されており、これによりOSは最適な割り込み分散が可能となります。しかし、この機能を使用するには、対応したIOAPICおよびノースブリッジが必要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。