"ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャであって、前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、前記仮想プロセッサが前記割込みの対象にされる、デバイス割込みマネージャ。1つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、前記1つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項1に記載のデバイス割込みマネージャ。前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項2に記載のデバイス割込みマネージャ。前記デバイスによって送信される割込みベクトルを前記1つ又は複数のテーブルにおける前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするようにさらに構成される、請求項2に記載のデバイス割込みマネージャ。前記エントリにおける前記指示に応答して前記仮想プロセッサがハードウェアプロセッサ上でアクティブであるか否かを判定するようにさらに構成され、前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェアプロセッサ上でアクティブであることの検出に応答して前記ハードウェアプロセッサに向けられた割込みメッセージを送信するように構成される、請求項2に記載のデバイス割込みマネージャ。前記仮想プロセッサが前記ハードウェアプロセッサ上で走っていないことの検出に応答して前記仮想プロセッサをスケジュール設定する要求を記録するために前記システムメモリに書込み動作を送信するようにさらに構成される、請求項5に記載のデバイス割込みマネージャ。方法であって、デバイス割込みマネージャが割込みを記憶域に記録するステップを含み、前記記憶域がゲストに関連付けられた仮想プロセッサに関連付けられ、前記デバイスが前記ゲストに割り当てられ、前記仮想プロセッサが前記割込みの対象にされる、方法。前記デバイス割込みマネージャが、割込みコントローラ識別子を仮想プロセッサにマッピングするようにプログラムされる1つ又は複数のテーブルにおけるエントリを選択するステップであり、割込みに関連付けられる割込みコントローラ識別子に応答した、デバイス割込みマネージャによるエントリの選択ステップと、前記デバイス割込みマネージャが、前記エントリに格納されるアドレスを介して前記記憶域を識別するステップと、をさらに含む、請求項7に記載の方法。前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項8に記載の方法。前記デバイス割込みマネージャが、前記デバイスによって送信される割込みベクトルを、前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするステップをさらに含む、請求項8に記載の方法。前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェアプロセッサ上でアクティブであることを前記デバイス割込みマネージャが判定するステップと、前記仮想プロセッサが前記ハードウェアプロセッサ上でアクティブであることの検出に応答して、前記デバイス割込みマネージャが前記ハードウェアプロセッサに向けられた割込みメッセージを送信するステップと、をさらに含む、請求項8に記載の方法。前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェアプロセッサ上でアクティブではないことを前記デバイス割込みマネージャが判定するステップと、前記仮想プロセッサが前記ハードウェアプロセッサ上でアクティブではないことの検出に応答して、前記仮想プロセッサをスケジュール設定する要求を記録するために前記デバイス割込みマネージャが前記システムメモリに書込み動作を送信するステップと、をさらに含む、請求項8に記載の方法。コンピュータシステム上で実行可能なプログラムによって動作するデータ構造を備えるコンピュータ可読記憶媒体であって、集積回路を製作するプロセスの一部を行うために前記データ構造上で動作する前記プログラムが、前記データ構造によって記述される回路を含み、前記データ構造で記述される前記回路が、ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャを含み、前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、前記仮想プロセッサが前記割込みの対象にされる、コンピュータ可読記憶媒体。前記デバイス割込みマネージャが、1つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、前記1つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項13に記載のコンピュータ可読記憶媒体。前記デバイス割込みマネージャが、前記仮想プロセッサが実行のためにハードウェアプロセッサに割り当てられるか否かを判定するようにさらに構成され、前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェアプロセッサに割り当てられることの検出に応答して前記ハードウェアプロセッサに向けられた割込みメッセージを送信するように構成される、請求項13に記載のコンピュータ可読記憶媒体。コンピュータ上で実行されるときに複数の命令を格納するコンピュータ可読記憶媒体であって、仮想マシンにおける仮想プロセッサに対応する記憶域に割込みが記録されていることを検出する命令であり、前記割込みが仮想マシンに割り当てられたデバイスによって生じる、検出する命令と、前記割込みをサービスするために前記仮想プロセッサに対して記録されている前記割込みに応答して、前記コンピュータにおけるハードウェアプロセッサ上での実行のために前記仮想プロセッサをスケジュール設定する命令と、を含むコンピュータ可読記憶媒体。実行時に割込みが記録されていることを検出する前記命令が、前記コンピュータにおいて検出されるイベントのログを格納する別の記憶域を実行時に読み出す命令を含み、前記イベントのログが、前記コンピュータシステムにおけるデバイス割込みマネージャによって更新され、前記デバイス割込みマネージャが、前記割込みを受信し且つ前記割込みが前記仮想プロセッサを対象とすることを判定するように構成される、請求項16に記載のコンピュータ可読記憶媒体。実行時に前記仮想プロセッサをスケジュール設定する前記命令が、前記仮想プロセッサがアクティブであることを示すために仮想プロセッサへの割込みをマッピングする1つ又は複数のテーブルを実行時に更新する命令を含む、請求項17に記載のコンピュータ可読記憶媒体。実行時に前記仮想プロセッサをスケジュール解除し且つ前記仮想プロセッサがアクティブではないことを示すために前記1つ又は複数のテーブルを更新する命令をさらに格納する、請求項18に記載のコンピュータ可読記憶媒体。デバイスがゲストに割り当てられる場合に前記1つ又は複数のテーブルにおける前記データを実行時に管理する命令をさらに格納する、請求項19に記載のコンピュータ可読記憶媒体。仮想化に付随して起こる可能性がある1つの問題は、割込み送達の待ち時間である。前述のように、周辺デバイスは、仮想マシンによる使用のために仮想マシンの仮想周辺デバイスとして作用するように割り当てることができる。こうした周辺デバイスは、仮想マシンのソフトウェアによって処理されるべき割込みを発生させることがある。仮想化されていない環境では、割込み処理の待ち時間は比較的短い可能性がある。仮想化された環境では、割込みは、一般に、ある種のソフトウェア機構を用いてVMMによって横取りされ、VMMによって処理され、VMMによって対象となる仮想マシンに送達される。しかしながら、割込み処理の待ち時間は、仮想化されない環境よりもかなり多い例えば約100倍長い可能性がある。周辺デバイスにより発生した割込み本明細書では、より簡潔にデバイス割込みに加えて、プロセッサが、プロセッサ間の割込みinterprocessorinterruptIPIを発生させることがある。仮想マシンでは、IPIは、仮想プロセッサすなわちvCPUと仮想マシンにおける別のvCPUとの間で発生する可能性がある。vCPUは、所与のゲストの仮想マシンに含まれるように定義されるプロセッサである。ゲストには少なくとも1つのvCPUが存在するが、多重処理ゲストのための複数のvCPUが存在する場合がある。一実施形態では、デバイス割込みマネージャは、ゲストに割り当てられるデバイスからの又はゲストに割り当てられる仮想機能をサポートするデバイスからの割込みを受信するように構成されてもよい。デバイス割込みマネージャは、ゲスト内の仮想プロセッサに対する割込みを記録するためにシステムメモリの中の記憶域を対象にした動作を送信するように構成されてもよく、割込みは対象となる仮想プロセッサに送達されることになる。一実装では、デバイス割込みマネージャは、入力/出力I/Oメモリ管理ユニットmemorymanagementunitIOMMUに含まれてもよい。一実施形態では、仮想マシンマネージャは、現在実行中ではない仮想プロセッサに対するデバイス割込みマネージャによって割込みが記録されていることを検出するように構成されてもよい。仮想マシンマネージャは、割込みに応答して、ハードウェアプロセッサ上での実行のために仮想プロセッサをスケジュール設定するように構成されてもよく、又はスケジューリングのために仮想プロセッサに優先順位をつけてもよい。以下の詳細な説明は、ここで簡単に説明される付属の図面を参照するものである。本発明は種々の修正及び代替的形態の余地があるが、その具体的な実施形態が単なる例として図面に示され、本明細書で詳細に説明されるであろう。しかしながら、図面及びその詳細な説明は、本発明を開示された特定の形態に限定することを意図されないが、これに対して、本発明は、付属の請求項によって定義される場合の本発明の精神及び範囲内に入るすべての修正、均等物、及び変形を包含することを意図されることを理解されたい。本明細書で用いられる見出しは、系統立てる目的のみであって、説明の範囲を制限するために用いられるように意図されるものではない。本出願の全体を通して用いられる場合の~であってもよい、~の可能性がある、~の場合があるという言葉は、義務付けの意味すなわち、しなければならないという意味ではなく、許容の意味で用いられるすなわち、可能性を有することを意味する。同様に、~を含むinclude、includes、~を含んでいるという言葉は、~を含むがこれに限定されないことを意味する。種々のユニット、回路、又は他のコンポーネントが、1つ又は複数のタスクを行うように構成されるとして説明される場合がある。このような文脈では、ように構成されるは、動作中に1つ又は複数のタスクを行う回路を有することを概して意味する構造体の広い列挙である。したがって、ユニット/回路/コンポーネントは、ユニット/回路/コンポーネントが現在オンではないときであってもタスクを行うように構成することができる。一般に、ように構成されるに対応する構造体を形成する回路は、動作を実装するためにハードウェア回路を含んでもよい。同様に、種々のユニット/回路/コンポーネントは、説明の便宜のために、1つ又は複数のタスクを行うとして説明される場合がある。こうした説明は、するように構成されるというフレーズを含むとして解釈されるべきである。幾つかの場合には、1つ又は複数のタスクを行うように構成される回路は、動作を実装するために実行可能なプログラム命令を格納するメモリを含んでもよい。メモリは、静的又は動的ランダムアクセスメモリのような揮発性メモリ、及び/又は光又は磁気ディスク記憶装置、フラッシュメモリ、プログラム可能読出し専用メモリなどのような不揮発性メモリを含むことができる。1つ又は複数のタスクを行うように構成されるユニット/回路/コンポーネントの列挙は、該ユニット/回路/コンポーネントに対して35U.S.C.§112、パラグラフ6の解釈を行使しないことを明確に意図される。一実施形態では、コンピュータシステムは、VMMと仮想マシン内で実行する1つ又は複数のゲストとを含む。周辺デバイスは、ゲストに例えばゲストの仮想マシンにおける対応する仮想周辺デバイスとして動作するように割り当てられてもよい。代替的に、周辺デバイスは、仮想機能をサポートしてもよく、仮想機能は、ゲストに割り当てられてもよい。周辺デバイスは、ゲストに送達されるべきデバイス割込みを発生させてもよい。デバイス割込みマネージャは、もしあるとしたらVMM又はVMMを実行するホストソフトウェアを対象とするホスト割込みとは対照的にデバイス割込みがゲストを対象とすることを検出するように構成されてもよい。より詳細には、デバイス割込みマネージャは、ゲストの仮想マシン内のどのvCPUが割込みの対象にされるかを検出するように構成されてもよい。デバイス割込みマネージャは、ゲスト割込みコントローラのデータ構造に割込みを記録するように構成されてもよい。対象にされたvCPUがコンピュータシステムにおけるハードウェアプロセッサ上で現在実行中である場合、ハードウェアプロセッサは、ゲスト割込みを検出してもよく、且つ割込みのサービスのためにゲスト/vCPUをリダイレクトしてもよい。例えば、デバイス割込みマネージャは、データ構造に新しいゲスト割込みが記録されていることを示すために、ハードウェアプロセッサにメッセージを送信してもよい。メッセージに応答して、ハードウェアプロセッサは、ゲスト割込みデータ構造を読み出し、データ構造に記録された他の保留中の割込みもしあるとしたらと共に割込みに優先順位をつけてもよい。優先順位付けに基づいて、ハードウェアプロセッサは、割込みを送達するか若しくは1つ又は複数のより高い優先度の割込み及び/又はより高い優先度のプロセスの完了を待ってもよい。別の例では、ハードウェアプロセッサは、データ構造に割込みが記録されていることを検出するために、対応するゲストvCPUの実行中にゲスト割込みデータ構造又はゲスト割込みデータ構造内の領域を監視するように構成されてもよい。データ構造の更新の検出に応答して、ハードウェアプロセッサは、データ構造を読み出し、上述のように割込みを送達してもよい。一実施形態では、ハードウェアプロセッサは、ゲスト割込みに対する上記の動作のプロセッサ部分を実装するように構成されるゲスト割込み制御ユニットを含んでもよい。加えて、ゲスト割込み制御ユニットは、vCPUの割込みコントローラへのゲストアクセスが、ハードウェアプロセッサに結合されてもよいホスト割込みコントローラを通じてではなくゲスト割込みデータ構造を通じて処理されることを保証してもよい。すなわち、ゲストにおける割込みコントローラアクセスは、ゲスト割込みデータ構造内でメモリアクセスに変換されてもよい。したがって、ゲスト割込み制御ユニットは、ゲスト割込み制御ユニットの仮想化及びエミュレートに関与してもよい。一実装では、ゲスト割込み制御ユニットは、少なくとも部分的にマイクロコードに実装されてもよい。マイクロコードは、プロセッサ内の不揮発性メモリに格納され、或る命令又は他の動作の検出に応答してプロセッサ回路によって呼び出され、マイクロコードルーチンを介して実施される命令であってもよい。マイクロコードは、したがって、実施される動作を行うべくプロセッサでの実行のためにディスパッチされてもよい。幾つかの実施形態では、ゲスト割込み制御ユニットは、主としてマイクロコードに実装されてもよい。他の実施形態では、ゲスト割込み制御ユニットは、ハードウェアに実装されてもよい。vCPU割込みコントローラへのゲストアクセスは、割込みコントローラにおけるレジスタの読出し/書込みを含んでもよい。一実施形態では、割込みコントローラにおける1つ又は複数のレジスタの書込みは、IPIをトリガしてもよい。プロセッサにおけるゲスト割込み制御ユニットは、IPIを引き起こすゲストにおける書込みに応答して、対象vCPUへのIPIを開始してもよい。ゲストIPIは、IPIを記録するために対象vCPUに関連付けられたデータ構造の更新を含んでもよい。一般に、IPIは、プロセッサによって又はより詳細にはプロセッサ上で実行するソフトウェアによって生じる割込みであってもよい。IPIは、時にはソーシングプロセッサを含むシステムにおける1つ又は複数のプロセッサを対象にしてもよい。したがって、IPIは、別のプロセッサ上で実行するソフトウェアに割込むために1つのプロセッサ上で実行するソフトウェアの機構であってもよい。IPIは、異なるプロセッサ上で実行するスレッドの間でメッセージを渡すため、元々は1つのプロセッサを対象とする割込みを別のプロセッサに通信するためなどに用いられてもよい。プロセッサ又はvCPUは、プロセッサ/vCPUに関連付けられた割込みコントローラによって割込みが受信されることになる場合に、割込みの対象にされてもよい。プロセッサ/vCPUは、必ずしも割込みを処理しなくてもよいが、割込みを処理するための候補であってもよく、どのプロセッサ単数又は複数/vCPU単数又は複数が割込みを処理することになるかを判定することに関与してもよい。割込みは、その対象単数又は複数例えば物理又は論理IDを伴うを明示的に指定してもよく、又はすべてのプロセッサ/vCPUを対象とするブロードキャスト割込みであってもよい。一般に、割込みは、対象プロセッサに関連付けられた割込みコントローラがプロセッサに送達するための割込みを記録した場合に、受付けられたacceptedと呼ばれてもよい。すなわち、受付け後の或る時点で、割込みがプロセッサに送達されるであろう。割込みをサービスするためにプロセッサに割込むことは、割込みの送達と呼ばれてもよい。vCPU及び/又は対応する仮想割込みコントローラ及び/又はそのペアは、本明細書ではより簡潔にゲスト内の割込みの宛先と呼ばれてもよい。宛先は、最終的には割込みをサービスするvCPUであってもよいが、対応する仮想割込みコントローラはまた、それが対応するプロセッサに関連付けられ及び割込みを記録するので、宛先とみなされてもよい。コンピュータシステムは、少なくとも1つのホスト割込みコントローラを含んでもよい。ホスト割込みコントローラは、ホスト例えば、仮想化された環境における仮想マシンマネージャ、すなわちVMM、及び/又は、幾つかの実施形態ではVMMを走らせてもよいホストOSのような他のソフトウェアによってサービスされるべき割込みを管理してもよい。こうした割込みは、例えば、システム上で実行するゲストに割り当てられていないコンピュータシステムにおけるデバイスからの割込み、VMMがゲストに露出することを望まないシステムレベルの割込みなどを含んでもよい。上記のゲスト割込み動作は、ゲストによってサービスされるべき割込みゲスト割込みを管理するのに用いられてもよい。ゲスト割込みは、例えば、ゲストの仮想マシンに対するデバイスの機能を提供するためにゲストに割り当てられるデバイスによって発行された割込み又はゲスト内の1つのvCPUから別のvCPUに発行されるIPIを含んでもよい。一実施形態では、本明細書で説明されるゲスト割込み動作は、ゲスト割込みに関する減少した待ち時間につながる可能性がある。例えば、幾つかの実施形態では、ゲストデバイス割込みを送達するための待ち時間は、ホストデバイス割込みを送達するための待ち時間と類似している場合がある。ゲスト割込み待ち時間は、ホスト割込み待ち時間、同じオーダーの大きさの待ち時間などとほぼ同じであってもよい。一実施形態では、ゲスト割込み管理の大部分は、ハードウェアプロセッサに実装されてもよい。幾つかの実施形態では、動作のほとんどをシステムの一部分に位置付けることによって実装が簡略化されてもよい。したがって、幾つかの実施形態では、実装は、訂正される可能性が高い場合、より迅速に完了する場合、などがある。仮想化の概要図1は、仮想化を実装するコンピュータシステム5の一実施形態のブロック図を例証する。図1の実施形態では、複数のゲスト10A~10Nが示される。ゲスト10Aは、ゲストオペレーティングシステムOS12と、ゲストOS12上で走る1つ又は複数のアプリケーション14A~14Nとを含む。ゲスト10Nは特権付きコード16を含む。ゲスト10A~10Nは、仮想マシンマネージャVMM18によって管理される。VMM18及びゲスト10A~10Nは、コンピュータシステム5に含まれる物理的ハードウェアを含んでもよいホストハードウェア20上で実行する。一実施形態では、VMM18は、一組の仮想マシン制御ブロックVMCB22を維持してもよい。各ゲスト10A~10Nに対して1つのVMCB22が存在してもよい。一実施形態では、各ゲスト10A~10Nの各vCPUに対して1つのVMCB22が存在してもよい。VMCB22は、図1の例証ではVMM18の一部として示されるが、VMCB22は、メモリに及び/又はホストハードウェア20におけるディスクドライブのような不揮発性媒体上に格納されてもよい。ホストハードウェア20は、一般に、コンピュータシステム5に含まれるハードウェアのすべてを含む。種々の実施形態では、ホストハードウェア20は、1つ又は複数のプロセッサ、メモリ、周辺デバイス、及び上記のコンポーネントを結合するのに用いられる他の回路を含んでもよい。例えば、パーソナルコンピュータPC型のシステムは、PCIエクスプレスインターフェースPCIExpressInterfaceのようなインターフェースを用いるプロセッサ、メモリ、及びグラフィックスデバイスを結合するノースブリッジを含んでもよい。加えて、ノースブリッジは、種々の周辺コンポーネントがそれに直接又は間接的に結合されてもよいペリフェラルコンポーネントインターフェースperipheralcomponentinterfacePCIバスのようなペリフェラルバスに結合してもよい。レガシー機能を提供する及び/又はレガシーハードウェアに結合するために、サウスブリッジもまた含まれ、及びPCIバスに結合されてもよい。他の実施形態では、種々のハードウェアコンポーネントをリンクするために他の回路が用いられてもよい。例えば、ノードをリンクするためにHyperTransport商標HTリンクが用いられてもよく、この各々は、1つ又は複数のプロセッサ、ホストブリッジ、及びメモリコントローラを含んでもよい。各ノードはまた、ノースブリッジを含んでもよい。HTリンクを介して周辺デバイスにデイジーチェーンの状態で結合するために、ホストブリッジが用いられてもよい。代替的に、コンポーネントの多くは、例えば、1つ又は複数のプロセッサ、ノースブリッジ機能、及びグラフィックスデバイスを集積する単一のデバイスのような単一のデバイス上に含まれてもよい。任意の所望の回路/ホストハードウェア構造が用いられてもよい。VMM18は、ゲスト10A~10Nの各々のための仮想化を提供するように構成されてもよく、ホストハードウェア20へのゲスト10A~10Nのアクセスを制御してもよい。VMM18はまた、ホストハードウェア20及びより詳細には、1つ以上のvCPUが含まれる場合にゲスト内のvCPU上での実行のためのゲスト10A~10Nのスケジューリングを担当してもよい。VMM18は、仮想化のためにホストハードウェア20において提供されるハードウェアサポートを用いるように構成されてもよい。例えば、プロセッサは、イベントを横取りし及びゲストをハンドリングのためにVMM18に出すハードウェアを含む、仮想化のためのハードウェアサポートを提供してもよい。プロセッサにおけるデバイス割込みマネージャ及び/又はゲスト割込み制御ユニットは、同様に仮想化をサポートするために提供されたハードウェアであってもよい。幾つかの実施形態では、VMM18は、ホストハードウェア20上で実行し且つゲスト10A~10Nのための仮想化を提供する薄い独立型ソフトウェアプログラムとして実装されてもよい。こうしたVMM実装は、時にはハイパーバイザと呼ばれる場合がある。他の実施形態では、VMM18は、ホストOSに集積され又はホストOS上で実行してもよい。こうした実施形態では、VMM18は、ホストOSにおける任意のドライバ、システムBIOSによって提供されるプラットフォームシステム管理モードsystemmanagementmodeSMMコードなどを含むホストOSに頼ってもよい。したがって、ホストOSコンポーネント及びプラットフォームSMMコードのような種々のより低レベルのコンポーネントは、ホストハードウェア20上で直接実行し、VMM18によって仮想化されない。VMM18とホストOS含まれる場合は、一実施形態では合わせてホストと呼ばれる場合がある。一般に、ホストは、使用中にホストハードウェア20の直接制御下にある任意のコードを含んでもよい。例えば、ホストは、VMM18、ホストOSと組み合わされたVMM18、又はホストOS単独例えば仮想化されない環境においてであってもよい。種々の実施形態では、VMM18は、フル仮想化、準仮想化、又はこの両方をサポートしてもよい。さらに、幾つかの実施形態では、VMM18は、準仮想化されるゲストとフル仮想化されるゲストとを同時に実行してもよい。フル仮想化の状態では、ゲスト10A~10Nは、仮想化が起こっていることに気づかない。各ゲスト10A~10Nは、その仮想マシンに一連のゼロベースのメモリを有してもよく、VMM18は、ホストの物理アドレススペースへのアクセスを制御するために、シャドウページテーブル又はネストしたページテーブルを用いてもよい。シャドウページテーブルは、ゲスト仮想アドレスからホスト物理アドレスに再マッピングゲスト10A~10Nのメモリ管理ソフトウェアによって割り当てられたゲスト物理アドレスをホスト物理アドレスに効果的に再マッピングしてもよく、一方、ネストしたページテーブルは、ゲスト物理アドレスを入力として受信し、ホスト物理アドレスにマッピングしてもよい。各ゲスト10A~10Nに対するシャドウページテーブル又はネストしたページテーブルを用いることで、VMM18は、ゲストがホストハードウェア20における他のゲストの物理メモリにアクセスしないことを保証してもよい。準仮想化の状態では、ゲスト10A~10Nは、少なくとも部分的にVM-アウェアであってもよい。こうしたゲスト10A~10Nは、メモリページに関してVMM18と交渉してもよく、したがってゲスト物理アドレスをホスト物理アドレスに再マッピングすることは要求されない場合がある。一実施形態では、準仮想化において、ゲスト10A~10Nは、ホストハードウェア20における周辺デバイスと直接対話することを可能にされてもよい。任意の所与の時点で、周辺デバイスは、1つ又は複数のゲスト10A~10Nによって所有されてもよい。一実装では、例えば、周辺デバイスは、該周辺デバイスを現在所有する1つ又は複数のゲスト10A~10Nと共に保護ドメインにマッピングされてもよい。周辺デバイスを所有するゲストだけが、これと直接対話してもよい。また、保護ドメインにおけるデバイスが別の保護ドメインにおけるゲストに割り当てられたページを読出す/書き込むのを防ぐために、保護機構が存在してもよい。代替的に、周辺デバイスは、ゲストによって所有されてもよい又はゲストがそれと対話してもよい仮想機能をサポートしてもよい。既述のように、VMM18は、各ゲスト10A~10N及び/又はゲストの各vCPUのためのVMCB22を維持してもよい。VMCB22は、一般に、対応するゲスト10A~10Nに対するVMM18によって割り当てられる記憶領域に格納されるデータ構造を備えてもよい。一実施形態では、VMCB22は、メモリのページを備えてもよいが、他の実施形態は、より大きい又は小さいメモリ領域を使用してもよく、及び/又は不揮発性記憶装置のような他の媒体上の記憶装置を使用してもよい。一実施形態では、VMCB22は、ゲストが実行するようにスケジュールされるときにホストハードウェア20におけるプロセッサにロードされてもよく、且つゲストが終了するときにそのスケジュールされた時間の完了に起因して又はゲストが終了するのをプロセッサが検出することの1つ又は複数の横取りに起因してVMCB22に戻して格納されてもよい、ゲストのプロセッサ状態を含んでもよい。幾つかの実施形態では、プロセッサ状態の一部のみが、VMCB22に対応するゲストに制御を伝送する命令仮想マシン実行VirtualMachineRunVMRUN命令を介してロードされ、VMRUN命令を実行する前にVMM18によって他の所望の状態がロードされてもよい。同様に、こうした実施形態では、プロセッサ状態の一部のみが、ゲスト終了時にプロセッサによってVMCB22に格納されてもよく、VMM18は、必要な場合に任意の付加的な状態を格納することを担当してもよい。他の実施形態では、VMCB22は、プロセッサ状態が格納される別のメモリ領域へのポインタを含んでもよい。さらに、一実施形態では、2つ以上の終了機構が定義されてもよい。一実施形態では、格納される状態の量と、ロードされる状態の場所は、どの終了機構が選択されるかに応じて変化してもよい。一実施形態では、VMM18はまた、VMM18に対応するプロセッサ状態を格納するために割り当てられたメモリの領域を有してもよい。VMRUNが実行されるときに、VMM18に対応するプロセッサ状態が領域に保存されてもよい。ゲストを終了してVMM18に出るときに、VMM18が実行を続けることができるように、領域からのプロセッサ状態が領域から再ロードされてもよい。一実装では、例えば、プロセッサは、VMM18のアドレスを保存領域に格納するために、レジスタ例えば、モデル固有レジスタmodelspecificregister、すなわちMSRを実装してもよい。加えて、VMCB22は、ゲストに対してイネーブルにされる横取りイベントを識別する横取り構成と、イネーブルにされた横取りイベントが検出される場合にゲストを終了するための機構を含んでもよい。一実施形態では、横取り構成は、プロセッサがサポートする各横取りイベントに対して1つの指示である、一組の横取り指示を含んでもよい。横取り指示は、プロセッサが対応するイベントを横取りするか否かすなわち、別の観点では、横取りがイネーブルにされるか否かを示してもよい。本明細書で用いられる場合のイベントは、ゲストにおいてイベントが起こることになればゲストにおいて横取りされ、プロセッサはイベントの処理のためにゲストを終了する。一実施形態では、横取り構成は、2つの終了機構のうちのどちらが用いられるかを示す指示の第2の組を含んでもよい。他の実施形態は、2つよりも多い終了機構を定義してもよい。別の実施形態では、横取り構成は、イベントに対して第1の終了機構が用いられるべきか否かを示す、1つの横取りイベントにつき1つである横取り指示の第1の組と、イベントに対して第2の終了機構が用いられるべきか否かを示す、1つの横取りイベントにつき1つである横取り指示の第2の組とを備えてもよい。一般に、終了機構は、概して再始動可能な方法でゲスト実行を終了するため及び他のコードの実行を始めるためにプロセッサによって行われる動作を定義してもよい。一実施形態では、1つの終了機構は、少量のプロセッサ状態の保存と、Minivisorのための状態のロードを含んでもよい。Minivisorは、ゲスト物理アドレススペースで実行してもよく、比較的簡単な横取り処理を行ってもよい。別の終了機構は、VMMに出て、より多量のプロセッサ状態を保存し、及びVMMのプロセッサ状態をロードしてもよい。したがって、横取りイベントは、イベントに応じて異なる命令コードによって処理されてもよい。加えて、幾つかの実施形態では、実行するのにあまり時間がかからない可能性があり性能を改善する可能性があるより軽いウエイトの終了機構を通じて比較的簡単な横取り処理が処理されてもよい。終了するのにより重いウエイトの機構が用いられた後で、より複雑な処理がVMMで行われてもよい。したがって、この実施形態では、VMM18は、ゲスト10A~10Nが内部的に処理することをVMM18が望まないイベントを横取りするようにプロセッサを構成してもよく、且つまた、それに対して終了機構を用いるようにプロセッサを構成してもよい。イベントは、命令すなわち、命令を実行する代わりに命令を横取りする、割込み、例外、及び/又はゲスト実行中に起こる可能性があるあらゆる他の所望のイベントを含んでもよい。一実施形態では、VMCB22は、VMCB22のロードによりプロセッサに或るアクションを行わせる可能性がある他の制御ビットをさらに含んでもよい。例えば、制御ビットは、プロセッサにおけるTLBをフラッシュする指示を含んでもよい。他の制御ビットは、ゲストに対する実行環境例えば割込み処理モード、ゲストに対するアドレススペース識別子などを指定してもよい。何故ゲストが終了したかなどを記述する終了コードを通信するために、さらに他の制御ビットが用いられてもよい。一般に、ゲストは、コンピュータシステム5における実行のために仮想化されるべき任意の1つ又は複数のソフトウェアプログラムを備えてもよい。ゲストは、特権付きモードで実行する少なくとも幾つかのコードを含んでもよく、したがって、ゲストを実行しているコンピュータシステムに対するフル制御を有することを期待する。既述のように、ゲスト10Aは、ゲストがゲストOS12を含む例である。ゲストOS12は、MicrosoftCorp.ワシントン州レッドモンドから入手可能なWindows登録商標OS、Linux登録商標のような任意のUNIX登録商標型オペレーティングシステム、IBMCorporationニューヨーク州アーモンクからのAIX、SunMicrosystems,Inc.カリフォルニア州サンタクララからのSolaris、Hewlett-PackardCompanyカリフォルニア州パロアルトからのHP-UXなどのうちのいずれかのような任意のOSであってもよい。ゲスト10Nは、非OS特権付きコード16を備えるゲストの例である。本明細書で10Nのような参照番号に用いられるときの文字Nは、該参照番号をもつ任意の数の要素例えば1つのゲストを含む任意の数のゲスト10A~10Nを概して示すように意図されることに留意されたい。加えて、文字Nを使用する異なる参照番号例えば10N及び14Nは、他の方法で言及されない限り、同じ数の異なる要素が提供されることを示すように意図されない例えば、ゲスト10A~10Nの数は、アプリケーション14A~14Nの数とは異なる場合がある。ホストハードウェア及び割込み仮想化ここで図2に移ると、ホストハードウェア20の一実施形態を例証するブロック図が示される。例証された実施形態では、ホストハードウェア20は、複数のプロセッサ30A~30B、それぞれの高度なプログラム可能割込みコントローラAdvancedProgrammableInterruptControllerAPIC32A~32B、ブリッジ36メモリコントローラ42及び入力/出力I/Oメモリ管理ユニットIOMMU40を含み、IOMMU40はデバイス割込みマネージャ38をさらに含む、複数のインターフェース回路IF44A~44C、メモリインターフェース回路memoryinterfacecircuitMIF46、I/OAPIC以下、IOAPIC50を含んでもよい随意的なブリッジ48、周辺デバイス52A~52Bそのうち幾つかはIOAPIC54のようなIOAPICを含んでもよい、及びメモリ56を含む。プロセッサ30A~30Bは、図2に例証されるように、ブリッジ36に及びそれぞれのAPIC32A~32Bに結合される。APIC32A~32Bは、ブリッジ36に結合され、これはインターフェース回路44A~44C及びメモリインターフェース回路46に結合される。メモリインターフェース回路46はメモリ56に結合され、インターフェース回路44Aはブリッジ48に結合され、これは周辺デバイス52A~52Bに結合される。例証された実施形態では、各プロセッサ30A~30Bは、関連付けられたAPIC32A~32Bを有する。この実施形態では、割込みは、IntelCorporationカリフォルニア州サンタクララによって記述されるAPIC仕様に従ってホストハードウェア20において通信されてもよい。例えば、参照によりその全体が本明細書に組み込まれる、Intel64及びIA-32アーキテクチャソフトウェア開発者用マニュアルArchitecturesSoftwareDeveloper’sManual、Volume3A:システムプログラミングガイドSystemProgrammingGuide、Part1、Chapter102009年12月を参照されたい。この仕様では、各プロセッサは、プロセッサ自体から、他のプロセッサから、内部APIC割込みソースから、及び周辺デバイスに関連付けられたIOAPICから割込みを受ける関連付けられたローカルAPICを有する。ローカルAPICは、保留中の割込みに優先順位をつけ、プロセッサ上で進行中の別の割込みよりも高い優先度である場合に及び/又はプロセッサの現在のタスクよりも高い優先度である場合に割込みをプロセッサに送信する。本明細書では例としてAPIC仕様が用いられることになるが、他の実施形態では任意の割込み管理仕様が用いられてもよい。図2の実施形態では、APIC32A~32Bは、プロセッサのホスト割込みすなわち、ホストによって処理されるべき割込みのためのローカルAPICであってもよい。他方では、ゲスト割込みのためのローカル割込みコントローラは、ハードウェアAPICとしてインスタンス化されない場合がある。代わりに、ゲストAPIC又はより簡潔に、gAPICがハードウェアサポート及びVMM18を介してエミュレートされてもよい。具体的には、各gAPICは、gAPIC状態データ構造58に格納されるその状態を有してもよい。gAPICデータ構造58は、コンピュータシステム5においてアクティブな各ゲストの各vCPUに対するgAPIC状態エントリを含んでもよい。一実施形態では、gAPIC状態エントリは、対応するgAPIC状態のためのデータのページであってもよい。こうした実施形態では、gAPIC状態データ構造58は、簡単にページのコレクションであってもよい。ページは、メモリシステムにおいて互いに近くに位置している必要はなく、すなわち、種々のgAPICのgAPIC状態データを格納することに加えて、互いとの任意の他の関係性を有する。他の実施形態は、より大きい又は小さいgAPIC状態エントリ及び/又は他のデータ構造を用いてもよい。ゲストは、ゲストがプロセッサ上で現在実行中である例えば、ゲストに対するプロセッサ上でVMRUN命令が実行されており、ゲスト終了が発生していない場合、又はゲストが終了し、VMM18が実行中であるが、ゲストがプロセッサ上で再び実行されることを期待される場合に、そのプロセッサ上でアクティブであってもよい。VMM18がプロセッサ30A~30B上でゲスト/vCPUをスケジュール設定するときに、VMM18は、vCPUのVMCB22からプロセッサ30A~30Bに及びより詳細にはプロセッサのゲスト割込み制御ユニット34A~34Bにポインタをロードしてもよい。ポインタは、対応するgAPIC状態エントリをgAPIC状態データ構造58の中で位置付けてもよい。したがって、ゲスト割込み制御ユニット34A~34Bは、vCPUに対するgAPIC状態を位置付けてもよく、デバイス割込みマネージャ38によって記録されている割込みを検出してもよい。一実施形態では、プロセッサ30A~30Bは、ゲスト割込み送達機構を実装してもよい。例えば、プロセッサ30A~30Bは、ゲスト割込み例えば、割込み要求、割込みベクトルなどと共にプログラムされてもよい1つ又は複数のレジスタを含んでもよい。仮想割込みは、プロセッサ30A~30B上で実行するソフトウェアに割り込むために、真の割込みソース例えばプロセッサ30A~30Bへの入力ピンと論理的に組み合わされてもよい。プロセッサ30A~30Bは、割込みをサービスするために割込みベクトルによって指定される割込みハンドラを実行してもよい。他の実施形態は、他のゲスト割込み送達機構を実装してもよい。一実施形態では、デバイス割込みマネージャ38は、ゲストを対象とするデバイス割込みに対するゲスト割込み状態を更新し、対応するAPIC32A~32Bにホスト割込みを送達するように構成されてもよい。特に、一実施形態では、デバイス割込みマネージャ38は、ブリッジ36で受信される各ゲスト割込みをgAPIC状態データ構造58に記録するように構成されてもよい。ゲスト割込みの受信に応答して、デバイス割込みマネージャ38は、割込みの対象にされたゲスト/vCPUに対するgAPIC状態データ構造58におけるgAPIC状態を更新するように構成されてもよい。デバイス割込みマネージャ38は、一実施形態ではゲストがアクティブであるか否かから独立してgAPIC状態を更新するように構成されてもよい。1つ以上の対象を有するマルチキャスト及びブロードキャスト割込みでは、デバイス割込みマネージャ38は、各割込み宛先に対するgAPIC状態データ構造58におけるgAPIC状態を更新するように構成されてもよい。代替的に、デバイス割込みマネージャ38は、これらの複数の宛先割込みに関してVMM18に頼るように構成されてもよい。デバイス割込みマネージャ38は、こうした実施形態ではVMM18にアクセス可能な記憶域に割込みをログ記録するように構成されてもよく、メッセージを処理するのにVMM18に信号送信するように構成されてもよい。デバイス割込みマネージャ38は、図2にはメモリに格納された状態で示されるデバイステーブル62、割込み再マッピングテーブル64、及びAPICIDテーブル60を用いて、周辺デバイスからのデバイス割込みのための対象にされたプロセッサ又はvCPUを判定してもよい。具体的には、デバイス割込みマネージャ38は、IOAPIC50及び54からのデバイス割込み要求に含まれる情報に応答してデバイステーブル62及び割込み再マッピングテーブル64にアクセスするように構成されてもよい。デバイステーブル62は、各周辺デバイス52A~52Bのためのエントリを含んでもよい及び、周辺デバイスが結合される周辺インターフェースに対する1つよりも多い識別子を含む、周辺デバイスのための複数のエントリを含んでもよい。所与の周辺デバイスのためのデバイステーブルエントリは、割込み再マッピングテーブル64へのポインタを含んでもよく、且つまた、APICIDテーブル60のうちの1つへの少なくとも1つのAPICIDテーブルポインタを含んでもよい。APICIDテーブル60は、ゲストにおける各APICIDのためのエントリを含んでもよく、該APICIDを有するvCPU/gAPICに対応するgAPIC状態エントリへのポインタを格納してもよい。割込みを、そのオリジナルの宛先及び/又は割込みベクトルから新しい宛先及び/又は割込みベクトルにリダイレクトするために、割込み再マッピングテーブル64が用いられてもよい。したがって、割込み再マッピングテーブル64は、割込みに対する宛先IDを含んでもよい。宛先IDは、APICIDであり、ゲスト割込みに対する更新されるべきgAPIC状態エントリを位置付けるために、デバイステーブル62からのAPICIDテーブルポインタによって示されるAPICIDテーブル60へのインデックスとして用いられてもよい。割込み再マッピングテーブル64からの割込みベクトルに基づいて、デバイス割込みマネージャは、識別されたgAPIC状態エントリに割込みを記録してもよい。割込み再マッピングテーブル64はまた、デバイスがゲスト又はホストのどちらに割り当てられるかの指示を含んでもよい。デバイスがホストに割り当てられる場合、割込みは、APIC32A~32Bに送達されるべきホスト割込みであり、gAPIC状態データ構造58は更新されなくてもよい。テーブル60、62、及び64の一実施形態の付加的な詳細がさらに後述される。gAPIC状態データ構造58は、例証された実施形態ではメモリ56に格納されるように示されるが、その一部は、幾つかの実施形態ではデバイス割込みマネージャ38及び/又はブリッジ36にアクセス可能なキャッシュによってキャッシュされてもよい。加えて又は代替的に、1つ又は複数のgAPIC状態エントリに対する専用メモリがブリッジ36に実装されてもよい。APIC割込み機構では、各プロセッサそのローカルAPICを通じては、物理APICID及び論理APICIDを有してもよい。物理APICIDは、APICIDレジスタに格納される。物理APICIDは、物理送達モードの割込みによって示される物理APICIDと1対1ベースでマッチングされる。論理APICIDは、ローカルAPICの論理宛先レジスタに格納される。論理APICIDは、クラスタID及びローカルAPICIDを有し、この場合、ローカルAPICIDは、典型的にワンホットビットベクトルである。論理送達モードの割込みは、割込みを1つ又は複数のローカルAPICにクラスタで送達するために、APICIDのベクトル部分に任意のセットビットを含んでもよい。したがって、論理APICIDのマッチングは、クラスタIDを比較すること、及びローカルAPICにおけるワンホットビットベクトルのセットビットと同じ位置でローカルAPICIDベクトルにおけるセットビットを検出することを含んでもよい。別の観点では、論理送達モードの割込みにおけるローカルAPICIDベクトルは、ローカルAPICのローカルAPICIDベクトルと論理的にANDでつながれてもよく、結果がゼロではなく且つクラスタIDとマッチする場合は、ローカルAPICは論理割込みの対象である。論理APICIDは、本明細書ではより簡潔に論理IDと呼ばれる場合があり、同様に、物理APICIDは、本明細書ではより簡潔に物理IDと呼ばれる場合がある。割込みに関連付けられた所与のID論理又は物理は、割込みの宛先IDと呼ばれる場合がある。割込みのための対応する送達モードは、割込みの宛先IDを論理又は物理のいずれかとして識別してもよい。APICIDテーブル60は、所与のゲストにおける論理APICIDに対する論理APICIDテーブルと、所与のゲストにおける物理APICIDに対する物理APICIDテーブルとを含んでもよい。APICIDテーブルは、既述のようにAPICIDをgAPIC状態ポインタにマッピングしてもよい。一実施形態では、論理APICIDテーブルは、論理IDを物理IDにマッピングしてもよく、これは、物理IDテーブルを通じてgAPIC状態ポインタにマッピングされてもよい。他の実施形態は、同様に論理IDからgAPIC状態ポインタに直接マッピングしてもよい。一実施形態では、APICIDテーブル60は、vCPUが走っているか否かの指示を含んでもよい。vCPUが現在走っている場合、割込みは、vCPUを実行しているプロセッサ30A~30Bによって例えば、新しい割込みの記録の更新に関するgAPIC状態エントリの監視を通じて、又はデバイス割込みマネージャ38からのメッセージを介して検出されてもよい。したがって、割込みは、走っているゲストに送達されてもよい。しかしながら、ゲストが走っていない又はアクティブではない場合、割込みは、送達を遅延されてもよい。一実施形態では、IOMMUは、割込みをログ記録してもよい。VMM18は、ログの中の割込みを検出してもよく、スケジューリングのために対象にされたvCPUに優先順位をつけてもよい。vCPUは、現在ハードウェアプロセッサ上で実行される状態にある場合に走ってもよい。所与のプロセッサ30A~30Bに対するAPIC32A~32Bは、プロセッサへの任意のインターフェースを有してもよい。例えば、ローカルAPICとそれらのそれぞれのプロセッサとの間で用いられる任意のインターフェースが用いられてもよい。各APICは、サービスのために割込みが送達されているプロセッサに独立して信号送信するように構成されてもよい。プロセッサがゲストを実行しており且つAPICが割込みを信号送信する場合、プロセッサは、ホスト割込みを処理するためにゲストを終了してVMM18に出るように構成されてもよい。プロセッサがゲストを実行していない場合、プロセッサは、ホスト実行に割り込み、APICによって信号送信された割込みに応答してホスト割込みハンドラに分岐するように構成されてもよい。APIC32A~32Bは、割込みを受信するためにブリッジ36に結合される。APIC32A~32Bに割込みを輸送するのに任意のインターフェースが用いられてもよい。例えば、APIC割込みの輸送のために実装される任意のインターフェースが用いられてもよい。一実施形態では、割込みメッセージを輸送するために、プロセッサ30A~30Bとの間で他の動作を通信するのに用いられるのと同じ通信機構例えば、プロセッサ30A~30Bによって開始されるメモリ読出し/書込み動作、キャッシュコヒーレンシーメンテナンスのためのプローブなどが用いられてもよい。別の観点では、APIC32A~32Bの結合は、ブリッジ36へのプロセッサ30A~30Bの結合と共有されてもよい。代替的に、プロセッサ30A~30Bは、APIC32A~32DがAPIC3ワイヤインターフェースを用いるような場合にブリッジ36への別個のパスを有してもよい。割込みメッセージは、送信されている割込みと割込みの宛先とを識別する任意のインターフェース上の任意の通信であってもよい。例えば、割込みは、関連付けられた割込みベクトルを有してもよく、割込みベクトルは、割込みメッセージの一部であってもよい。割込みメッセージはまた、宛先ID例えば、論理又は物理APICIDを含んでもよい。ゲスト割込み制御ユニット34A~34Bは、対応するgAPIC状態エントリに記録されているゲスト割込みを検出するように構成されてもよく、且つ前述のように割込みを送達してもよい。加えて、ゲスト割込み制御ユニット34A~34Bは、ゲスト/vCPU実行中にそれら自身のgAPICへのプロセッサ30A~30Bのアクセスを検出してもよく、且つAPIC32A~32Bにアクセスする代わりにアクセスをgAPIC状態エントリにおけるメモリ読出し/書込みに変換してもよい。ゲスト割込み制御ユニット34A~34Bはまた、幾つかの実施形態では、同様にgAPICの幾らかのエミュレーションを実装してもよい。例えば、性能への多大な影響を有する動作が実装されてもよい。ゲスト割込み制御ユニット34A~34Bによって実装されないエミュレーションでは、ゲスト割込み制御ユニット34A~34Bは、VMM18におけるエミュレーションのためにゲストを終了してもよい。幾つかのアクセスはエミュレーションを要求しない場合がある例えば、ほとんどの読出しは、データを読み出すこと以外の影響を有さず、そのためgAPIC状態エントリからのデータの読出しを超えるエミュレーションは必要とされない。gAPIC状態エントリにおける対応するロケーションを更新することによって、APICにおける如何なる副作用も生じない書込みもまた完了される可能性がある。一実施形態では、ゲスト割込み制御ユニット34A~34Bにおいてエミュレートされる動作は、ゲスト内のIPIの開始、タスク優先度レジスタtaskpriorityregisterTPRへのアクセス、及び割込みの終わりendofinterruptEOIレジスタへのアクセスを含んでもよい。他の実施形態は、ゲスト割込み制御ユニット34A~34Bにおける動作の異なるサブセットを実装してもよい。先述のように、幾つかの実施形態では、ゲスト割込み制御ユニット34A~34Bは、主としてマイクロコードに実装されてもよい。したがって、ゲスト実行中にgAPICへのアクセスがマイクロコード実行を引き起こしてもよい。加えて、デバイス割込みマネージャ38によるgAPIC状態エントリへの更新プロセッサ上で実行されているvCPUに対するは、マイクロコード実行を引き起こしてもよい。VMM18に出る命令では、終了は、命令をリタイアしたすなわち、書き込みのためにgAPIC状態エントリへの更新が完了した又はgAPIC状態エントリからのデータ読出しが読出しのために対象レジスタに書き込まれた後で又は命令をリタイアする前に行われてもよい。命令をリタイアした後でVMExitを開始することは、トラッピングと呼ばれてもよい。幾つかの場合には、対応する命令は、リタイアが認められる場合に取り返しのつかない変化を引き起こす可能性がある。したがって、こうした命令は、命令のフォールトと呼ばれる、VMExitの前にリタイアすることを許されない場合がある。IOMMU40は、前述のようにデバイス割込みマネージャ38を含む。加えて、IOMMU40は、I/Oにより開始されるメモリ動作例えば、周辺デバイス52A~52Bから生じる又は周辺デバイス52A~52Bに代わってDMAコントローラによるメモリ読出し/書込み動作のための仮想対物理アドレスマッピングを行うように構成されてもよい。翻訳動作の一部として、IOMMU40は、デバイステーブル62及び随意的に割込みリダイレクトテーブル64にアクセスするように構成されてもよい。各周辺デバイス52A~52Bに対するデバイステーブルエントリは、メモリ読出し/書込み動作のメモリアドレスを翻訳するためのI/Oページテーブルへのページテーブルポインタを含んでもよい図示せず。メモリコントローラ42は、プロセッサ30A~30Bによって発行されるメモリ動作例えば、命令フェッチ、ロード/格納データアクセス、翻訳のためのプロセッサページテーブルアクセスなど、デバイス割込みマネージャ38からのメモリ動作例えば、gAPIC状態データ構造58を読み出す/更新すること、及び/又はテーブル60、62、及び64にアクセスすること、IOMMU40例えば、I/Oページテーブル、デバイステーブル62、及び割込み再マッピングテーブル64にアクセスすること、及び幾つかの実施形態においてインターフェース回路44A~44Cから受信されたメモリ動作を受信するために結合されてもよい。メモリコントローラ42は、メモリ動作を順序付ける、及びメモリ動作を行うためにメモリ56と通信するように構成されてもよい。メモリインターフェース回路46は、メモリ56への物理レベルアクセスを行ってもよい。メモリ56は、あらゆるタイプのメモリを備えてもよい。例えば、メモリ56は、動的ランダムアクセスメモリDRAM、例えばシンクロナスDRAMSDRAM、DDRSDRAMのモバイルバージョンmDDR3など及び/又は低出力バージョンLPDDR2などを含む倍データレートdoubledatarateDDR、DDR2、DDR3などSDRAM、RAMBUSDRAM、静的RAMなどを備えてもよい。メモリ56は、シングルインラインメモリモジュールSIMM、デュアルインラインメモリモジュールDIMMなどのような複数のメモリチップを備える1つ又は複数のメモリモジュールを含んでもよい。この実施形態ではデバイス割込みマネージャ38、IOMMU40、及びメモリコントローラ42を含むことに加えて、ブリッジ36はまた、プロセッサ30A~30Bと、APIC32A~32Bと、インターフェース回路44A~44Dに結合されたデバイスとの間で通信するために他の通信機能を含んでもよい。例えば、例証された実施形態では、別のブリッジ48がインターフェース回路44Aに結合されてもよく、インターフェース回路44Aによって用いられるプロトコルと周辺デバイス52A~52Bによって用いられるプロトコルとの間の通信を橋渡しするように構成されてもよい。一実施形態では、インターフェース回路44A~44Cは、例えば前述のHTインターフェースを実装してもよく、ブリッジ48は、HTからPCIExpressPCIeインターフェースのような別のインターフェースに橋渡しをしてもよい。周辺デバイス52A~52Bは、こうした実施形態ではPCIeデバイスであってもよい。ブリッジ48はまた、他のインターフェースと橋渡しをするように構成されてもよく、又は他のインターフェースと橋渡しをするために別のブリッジがブリッジ48に結合されてもよい。任意の1つ又は複数の周辺インターフェースが用いられてもよい。加えて、周辺デバイス52A~52Bは、HTインターフェースと直接結合するように構成されるHT周辺デバイスを備えてもよい。こうした周辺デバイスは、ブリッジ48を必要としない場合がある。一実施形態では、ブリッジ48及び/又は周辺デバイス52A~52Bのうちの1つ又は複数は、IOAPIC図2の50及び54を含んでもよい。IOAPICは、周辺デバイスから割込み要求を受信することを担当してもよく、メモリのgAPIC状態データ構造58に記録するためにAPIC32A~32B及びデバイス割込みマネージャ38に割込み要求を送信するのに割込みメッセージを生成する。前述のように、一実施形態では、インターフェース回路44A~44Cは、HTインターフェース上で通信するように構成されてもよい。インターフェース回路44A~44Cは、HTを用いて周辺デバイス/ブリッジと通信するように構成されてもよい。加えて、幾つかの実施形態では、インターフェース回路44A~44Cは、プロセッサ、APICなどと共に他のノードに結合されるように構成されてもよい。こうした実施形態では、ブリッジ36は、前述の回路に加えてコヒーレンス管理回路を含んでもよい。プロセッサ30A~30Bは、任意の命令セットアーキテクチャを実装してもよく、且つ命令セットアーキテクチャで定義される命令を実行するように構成されてもよい。プロセッサ30A~30Bは、スーパーパイプライン式、スーパースケーラ、及び/又はこれらの組合せ、インオーダー又はアウトオブオーダー実行、投機的実行などのような任意のマイクロアーキテクチャを含んでもよい。プロセッサ30A~30Bは、必要に応じてマイクロコーディング技術を実装してもよいし又は実装しなくてもよい。周辺デバイス52A~52Bは、任意のタイプの周辺デバイスを備えてもよい。周辺デバイス52A~52Bは、磁気ドライブ、ソリッドステートドライブ、又は光ディスクドライブのような記憶装置、フラッシュメモリのような不揮発性メモリデバイスなどを含んでもよい。周辺デバイス52A~52Bは、ユーザI/Oデバイスキーボード、マウス、ディスプレイ、音声入力などのようなI/Oデバイス、ネットワーキングデバイス、ユニバーサルシリアルバスUSB又はFirewireのような外部インターフェースデバイスなどを含んでもよい。例証された実施形態では、プロセッサ30A~30B、ブリッジ36、APIC32A~32B、インターフェース回路44A~44C、及びメモリインターフェース回路46は、単一の半導体基板上に集積回路66として集積されてもよい。他の実施形態は、必要に応じて異なる量の集積回路及びディスクリート回路を実装してもよい。プロセッサ、APIC、インターフェース回路、周辺デバイス、ブリッジなどのような様々な数のコンポーネントが図2で例証されるが、他の実施形態は、必要に応じて任意の数の1つ又は複数の各コンポーネントを実装してもよいことに留意されたい。他の実施形態では、IOMMU40及びデバイス割込みマネージャ38の場所は変化してもよい。例えば、この一方又は両方が、ブリッジ48に、周辺デバイス52A~52Bに、ブリッジに結合される別のブリッジなどにあってもよい。例証された実施形態では、各APIC32A~32Bは、図2に例証されるように特定のプロセッサ30A~30Bに関連付けられる。したがって、所与の割込みコントローラは、この実施形態では対応するプロセッサ30A~30Bに専用にされる。より詳細には、図2では、APIC32Aはプロセッサ30Aに専用にされ、APIC32Bはプロセッサ30Bに専用にされる。割込みコントローラは、その対応するプロセッサに任意の方法で割込みを信号送信してもよい。一般に、信号送信は、割込みが必要とされることを示してもよい。信号送信は、割込みベクトルを含んでもよく、又は割込みベクトルは、割込みが送達された後で実行されるソフトウェアによって読み出されてもよい。割込みの送達は、一実施形態では、プロセッサ及び割込みを受け付けるプロセッサへの信号送信を指す場合がある。割込みのサービスは、デバイスの割込みに必要な動作を行うために割込みベクトルに関連付けられた割込みサービスルーチンを実行することを指す場合がある。ここで図3に移ると、一実施形態での周辺デバイスからgAPICへの割込みの進行を例証し且つまたゲスト内のIPIを例証するブロック図が示される。例証された実施形態では、周辺デバイス52Aは、割込みが望まれることを判定する。周辺デバイス52A内のIOAPIC54図2参照は、周辺デバイス52Aに対する割込みメッセージを発生させてもよい。具体的には、IOAPIC54は、所望の割込み例えば、周辺デバイス52Aに必要とされるサービスに基づいて、周辺デバイス52Aが複数の機能を実装する場合に割込みを信号送信する特定の機能などに対応する割込みベクトルを発生させてもよい。同様に、IOAPIC50は、それら自身のIOAPICを実装しない周辺デバイス52Bのような周辺デバイスに対する割込みメッセージを発生させてもよい。割込みベクトルは、割込み通信の一部であり、割込みソースを識別すること、割込みに優先順位をつけることなどのために用いられてもよい。幾つかの場合には、割込みベクトルは、IOMMU40によって再マッピングされてもよく、そのため割込みベクトルは図3ではオリジナルベクトルとして例証される。周辺デバイス52Aは、IOMMU40に割込みメッセージを送信してもよい矢印A。この実施形態では、割込みは、例えばPCIe仕様で定義される場合の、メッセージにより信号送信される割込みmessage-signalledinterruptMSIの形態で送信されてもよい。他の実施形態は、任意の所望の方法で割込みを送信してもよい。一般に、送信は、割込み、その送達モード例えば論理又は物理、及び割込みの宛先IDDestIDを識別してもよい。IOMMU40はMSIを受信してもよい。MSIは、周辺デバイスの識別子を含む。例えば、PCIプログラミングモデルを実装するインターフェースは、バスナンバー及び該バス上のデバイスナンバーをもつ各デバイスを識別してもよい複数のPCIインターフェースが階層的な形態及び/又は並列な形態でシステムに存在することを可能にする。デバイスは、物理デバイス上の別個の仮想デバイス又はデバイス上の動作のパーティション分割であってもよい複数の機能を有してもよい。識別子は、機能ナンバーも含んでもよい。したがって、この実施形態では、識別子は、バス-デバイス-機能Bus-Device-Function、すなわちBDF登録商標と呼ばれる場合がある。IOMMU40及びより詳細には、この実施形態ではデバイス割込みマネージャ38は、BDF登録商標矢印Bを用いてデバイステーブル62へのインデックスを作成してもよく、且つ周辺デバイス52Aに対応するデバイステーブルエントリを識別してもよい。エントリは、APICIDテーブルポインタ矢印Cを含んでもよい。この実施形態では、デバイステーブルエントリはまた、割込み再マッピングテーブルポインタIRTPを含んでもよく、これは、デバイスに対応する割込み再マッピングテーブル64を識別してもよい矢印C1。割込み再マッピングテーブル64は、オリジナルの割込みベクトルによってインデックスを作成されてもよく、且つ出力ベクトル及び割込みに対する宛先IDDestID、例えば、論理又は物理APICIDを提供してもよい矢印C2。加えて、ゲスト/ホスト指示が出力されてもよいG/H。一実施形態では、G/H指示は、設定されたときに割込みがゲストによってサービスされるべきであることを示し、且つクリアされたときに割込みがホストによってサービスされるべきであることを示すビットであってもよい。他の実施形態は、状態の設定及びクリアと反対の意味を用いてもよく、又は指示のための他のエンコーディングを用いてもよい。G/H指示がホストを示す場合、デバイス割込みマネージャ38は、APIC32A~32Bに割込みメッセージを送信してもよく、割込みは、APIC仕様に従って処理されてもよい矢印F。他方では、G/H指示がゲストを示す場合、デバイス割込みマネージャ38は、物理APICIDテーブル60Aデバイステーブル62によって提供されるAPICIDテーブルポインタによって指し示されるテーブルへのインデックス矢印Dとして宛先IDを用いてもよい。物理APICIDテーブル60Aは、更新されるべきgAPIC状態エントリを識別するgAPIC状態ポインタを出力してもよい。デバイス割込みマネージャ38は、gAPIC状態に割込みを書き込んでもよいgAPIC状態の更新、図3の矢印E。物理APICIDテーブル60Aはまた、vCPUに対する指示をIs_RunningIRとして供給してもよい。vCPUが走っている場合、割込みは、かなり迅速に送達されてもよい。vCPUが走っていない場合、デバイス割込みマネージャ38は、VMM18に対する割込みをログ記録してもよく、これは割込みを処理するためにvCPUをスケジュール設定してもよい。例証された実施形態は、宛先IDをもつ物理APICIDテーブル60Aにのみアクセスする。したがって、例証された実施形態では、ゲスト割込みに対する宛先IDは物理APICIDであってもよい。論理APICIDは、デバイステーブル62、割込みマッピングテーブル64などをプログラミングするときに、VMM18によって物理APICIDに翻訳されてもよい。他の実施形態では、論理APICIDと物理APICIDとの両方がサポートされてもよく、所与のゲストに対する論理APICIDテーブルと物理APICIDテーブルとの両方が、必要な場合にgAPIC状態ポインタを位置付けるために用いられてもよい。一実施形態では、gAPIC状態は、各割込みベクトルのためのビットを含む割込み要求レジスタinterruptrequestregisterIRRを含む。割込みを記録するために、割込みベクトルに対応するビットがIRRに設定されてもよい。gAPIC状態におけるIRRは、1つよりも多いソースから更新されることが可能である。したがって、更新は、状態を失うのを防ぐためにアトミックにされてもよい。特に、更新は、セットビットをメモリのIRRにORするアトミックORであってもよい。アトミック動作は、動作が複数のステップとして実装される場合であっても、ユニットとして効果的に行われる動作であってもよい。アトミックに更新される場所へのアクセスを試みるオブザーバは、アトミック更新の前又はアトミック更新の後のいずれかで値を受信するが、中間値は受信しない可能性がある。アトミックに更新される場所を更新することを試みるオブザーバは、アトミック動作中にではなく、アトミック動作が完了する前又はアトミック動作が完了した後のいずれかでその更新を行う。この実施形態はアトミックORを実装してもよいが、他の実施形態は、より一般的なアトミック更新動作を実装してもよい。例えば、アトミック更新は、修正されないであろう対象のビットを識別するANDマスクと、どのビットがORされるべきかを識別するORマスクとを含んでもよい。同様に他の実装が可能である。例えば、比較及びスワップ実装が用いられてもよく、この実装では、記憶域からオリジナル値が読み出され、オリジナル値に対して新しいORされた値との比較及びスワップ動作が行われる。比較に失敗した場合、プロセスは繰り返されてもよい新しいオリジナル値を読み出し、比較及びスワップを行う。必要であればループを抜け出すためにバックオフ機構及び/又はタイムアウト機構が用いられてもよい。一実施形態では、プロセッサ30A~30B及びより詳細にはゲスト割込み制御ユニット34A~34Bは、プロセッサ上で実行するvCPUに対応するgAPIC状態エントリへの更新を監視してもよいもしあるとしたら。具体的には、プロセッサは、それぞれ、IRRビットを含むgAPIC状態エントリの領域を監視してもよく、gAPIC状態エントリはプロセッサが実行しているvCPUに対応する。この領域は、本明細書ではウォッチ領域と呼ばれる。ウォッチ領域は、種々の方法で確立されてもよい。例えば、プロセッサ30A~30Bは、キャッシュを含んでもよく、キャッシュとメモリとの間でコヒーレンシーを維持するように構成されてもよい。コヒーレンシー機構の一部として、プロセッサ30A~30Bは、キャッシュに格納されるデータの更新を知らせてもよい。プロセッサ30A~30Bは、したがって、領域をキャッシュに読み込むことによってウォッチ領域を確立してもよい。例えば、一実施形態では2つのキャッシュブロックが領域をカバーしてもよい。幾つかの実施形態では、これはキャッシュブロックがキャッシュに残ることを保証するのに必要な場合がある。例えば、幾つかの実施形態は、プロセッサのキャッシュにおいて見失われることが知られているコヒーレンシープローブをフィルタしてもよい。ウォッチ領域ブロックがキャッシュに残ることを保証することで、こうした実施形態ではウォッチ領域の更新に対応するプローブがフィルタされないことを保証してもよい。ウォッチ領域ブロックがプロセッサのキャッシュに残ることを保証するために種々の機構が用いられてもよい。例えば、プロセッサは、ブロックをキャッシュにロックするためにキャッシュロッキングを実装してもよい。代替的に、プロセッサは、キャッシュによって実装されるキャッシュ置換えアルゴリズムにおいてブロックを最近使用した状態のまま残してもよい。他方では、これは、例えばコヒーレンシープローブがフィルタされない場合に、ウォッチ領域ブロックがプロセッサのキャッシュに残ることを保証するのに必要ではない場合がある。こうした実施形態では、プロセッサは、領域のアドレスをレジスタに単純に格納し、アドレスをプローブと比較してもよい。プロセッサ30A~30B上で走っているvCPUに対するgAPIC状態エントリへのgAPIC状態の更新が起こる場合、対応するプロセッサがウォッチ領域への更新を検出してもよい矢印G2。対応するプロセッサにおけるゲスト割込み制御ユニット34A~34Bは、更新されるIRRを読み出してもよく、且つ保留中の割込みに優先順位をつけ、これがより高い優先度である場合に新しい割込みを取り込んでもよい。別の実施形態では、ウォッチ領域は用いられなくてもよく、代わりにデバイス割込みマネージャ38がゲスト割込み制御メッセージをAPIC32A~32Bに又は直接にプロセッサ30A~30Bに送信してもよい矢印G1。ゲスト割込み制御メッセージは、ホスト割込みメッセージ及びIPIから区別可能であってもよく、したがって、ゲスト割込みが要求されていることを知らせるためにゲスト割込み制御ユニット34A~34Bに転送されてもよい。例えば、ゲスト割込み制御メッセージは、既存の割込みメッセージコーディングを用いるホスト割込みメッセージ及びIPIからこれを区別する、未定義の割込みメッセージコーディングを用いてもよい。他の実施形態は、ウォッチ領域とゲスト割込み制御メッセージとの両方を実装してもよい。一実施形態では、ゲスト割込み制御メッセージは、モデル固有レジスタMSRインターフェースを通じてゲスト割込み制御ユニット34A~34Bに送達されてもよい。MSRは、ゲスト割込み制御ユニット34A~34Bにアクセス可能例えば、ゲスト割込み制御ユニット34A~34Bがマイクロコードに部分的に又は完全に実装される場合に、マイクロコードにアクセス可能であってもよい。MSRはまた、プロセッサ30A~30B上で実行する特権付きコードにアクセス可能であってもよい。しかしながら、MSRは、ゲストアクセスを含む非特権アクセスから保護されてもよい。APIC32A~32Bは、割込みソフトウェアにIPIを送達する代わりにMSRが書き込まれること以外は、MSRへの割込みを送達するためにIPIに対して用いられるインターフェースに類似したインターフェースを用いてもよい。MSRの更新は、ゲスト割込み制御ユニット34A~34Bにゲスト割込み送達をアクティブ化させてもよい。例えば、ゲスト割込み制御ユニット34A~34Bをマイクロコードに実装する実施形態では、MSRの更新は、ゲストへの送達のために割込みを処理するマイクロコードルーチンの実行を引き起こす可能性がある。一実施形態ではMSRインターフェースが用いられてもよいが、他の実施形態は、ゲスト割込み制御メッセージがゲスト割込み制御ユニット34A~34Bに送達されることを可能にする任意の機構を用いてもよい。こうした機構は、ドアベル機構と呼ばれる場合がある。デバイス割込みに加えて、プロセッサ上で実行するゲストvCPUは、同じ仮想マシンにおける他のvCPUにIPIを発行してもよい。本発明の実施形態では、IPIは、vCPU上で実行するソフトウェアが割込みコマンドレジスタinterruptcommandregisterICRを更新するときに発行される。割込みコマンドレジスタは、高い及び低いICRH及びICRL部分を含んでもよく、IPIは、ICRLレジスタへの書込みに応答して開始されてもよい。この機構は、x1APICエンコーディングとx2APICエンコーディングとの両方と互換性があってもよい。IPIのソースvCPUを実行するプロセッサのゲスト割込み制御ユニット34A~34Bは、ICRLレジスタへの書込みを検出してもよく、APICIDテーブル60におけるgAPIC状態ポインタを識別するためにIPIの宛先IDを用いてもよい矢印a。IPIの宛先IDは、論理又は物理のいずれであってもよく、ゲスト割込み制御ユニット34A~34Bは、宛先IDに適するように論理及び/又は物理APICIDテーブル60を用いてもよい。gAPIC状態ポインタを用いることで、ゲスト割込み制御ユニット34A~34Bは、gAPIC状態データ構造58における対象vCPUのgAPIC状態エントリを更新してもよい矢印b。ゲスト割込み制御ユニット34A~34Bはまた、対象vCPUを実行しているプロセッサ30A~30Bのゲスト割込み制御ユニット34A~34Bにゲスト割込み制御メッセージを通信するように構成されてもよい矢印c。より詳細には、IPIを送達するためのゲスト割込み制御メッセージは、一実施形態ではAPIC32A~32Bを通じてルーティングされてもよい。代替的に、ウォッチ領域を実装する実施形態は、更新を検出するためにウォッチ領域検出を用いてもよい。他の実施形態は、IPIを開始するために他の機構を実装してもよい。ゲスト割込み制御ユニット34A~34Bは、機構を検出してもよく、対象vCPUに対するgAPIC状態を適宜更新してもよい。加えて、対象vCPUが走っていないことをAPICIDテーブル60が示す場合、ソースプロセッサからのゲスト割込み制御ユニットは、VMExitを発生させて、VMM18が対象vCPUをスケジュール設定することを可能にしてもよい。一実施形態では、正しいプロセッサ30A~30Bへの割込みのためのゲスト割込み制御メッセージを送信するために、APICIDテーブル60におけるIRビットは、どのプロセッサが対応するvCPUを実行しているかを識別するフィールドであってもよい又はvCPUが走っているか否かを示すビット及びプロセッサを識別するフィールドが存在してもよい。ゲスト割込み制御メッセージの対象を識別するためにフィールドが用いられてもよい。ここで図4に移ると、VMCB22の一実施形態のブロック図が示される。例証された実施形態では、VMCB22は、gAPIC状態ポインタフィールド70、物理APICIDテーブルポインタフィールド72、論理APICIDテーブルポインタフィールド74、及び他の仮想マシンデータ76を含む。gAPIC状態ポインタ70は、ゲスト/vCPUに対応するgAPIC状態エントリをメモリ56の中に位置付けてもよい。gAPIC状態ポインタ70は、VMRUN命令の一部としてプロセッサ30A~30Bにロードされてもよく、且つvCPUに対するgAPIC状態を位置付けるためにゲスト割込み制御ユニット34A~34Bによって用いられてもよい。物理APICIDポインタフィールド72及び論理APICIDテーブルポインタフィールド74は、それぞれゲストに対する物理APICIDテーブルポインタ及び論理APICIDテーブルポインタを格納してもよい。他のVMデータ76は、VMRUN及びVMExit上にロードされる/格納される種々の他のプロセッサ状態を含んでもよい。ここで図5に移ると、gAPIC状態エントリ90の一実施形態のブロック図が示される。図5の例証は状態の論理図であってもよい。メモリにおける状態の実際の配置は変化してもよい。一実施形態では、状態の配置は、状態がAPICにおいてアドレス指定される順序にであってもよい。すなわち、各レジスタは、APICのベースアドレスからのオフセットを有してもよく、各レジスタに対するgAPIC状態エントリ90における状態の対応するコピーは、gAPIC状態エントリ90のベースアドレスから同じオフセットであってもよい。gAPIC状態エントリ90は、APIC状態の完全なコピーを含んでもよい。すべての状態が図5で例証されるわけではない。しかしながら、IRR、インサービスレジスタISR、トリガモードレジスタTMR、並びにICRHレジスタ及びICRLレジスタ、タスク優先度レジスタTPR、及び割込みの終わりEOIレジスタが、他のAPIC状態と共に示される。他のAPIC状態は、例えば、APICアドレスマップにおける各レジスタに対するオフセットに従って例証された状態内でインターリーブされてもよい。さらに、図5に示すような状態の順序は、メモリに格納される場合の状態の順序ではなくてもよい。IRRレジスタは、gAPICに送信されている割込み要求を記録する。IRRにおける割込み要求の位置は割込みベクトルに対応する。IRRは、固定のfixed割込みを追跡してもよい。他の割込みタイプは、マスク可能ではない割込みnon-maskableinterruptNMI、システム管理割込みsystemmanagementinterruptSMI、レガシー外部割込みlegacyexternalinterruptextINTなどを含んでもよい。これらの割込みは、他のAPIC状態の一部として処理されてもよい。一実施形態では、割込みメッセージはまた、各割込みに対するトリガモードレベル又はエッジを含んでもよい。TMRは、どのトリガモードを割込みに適用するかの指示を格納してもよい。例えば、エッジによりトリガされる割込みは、TMRにおけるバイナリ0によって表されてもよく、レベルによりトリガされる割込みは、バイナリ1によって表されてもよい。他の実施形態では、エッジによりトリガされる割込みだけがgAPICにおいてサポートされてもよく、TMRは排除されてもよい。固定の割込みでは、ゲスト割込み制御ユニット34Aは、割込み要求がプロセッサに送達されるべきであるかどうかを判定するために割込み要求及びインサービス割込みに優先順位をつけるように構成されてもよい。一般に、最高優先度の割込み要求が最高優先度のインサービス割込みよりも高い優先度である割込みに対応する割込みハンドラを実行するためにプロセッサがそのソフトウェア実行を割込みされた場合に割込みがインサービスである場合、ゲスト割込み制御ユニット34Aは、要求された割込みを送達するように構成されてもよい。加えて、TPRは、vCPUによって受付けられる最低優先度レベルの割込みを確立するためにソフトウェアによってプログラムされてもよい。ゲスト割込み制御ユニット34Aは、それが最高優先度のインサービス割込みよりも高い優先度であり且つTPRにおいて示された優先度よりも高い優先度である場合に、最高優先度の割込み要求を送達するように構成されてもよい。vCPUが割込みを取り入れるとき、プロセッサは、gAPICへの割込み通知コマンドで応答してもよい。ゲスト割込み制御ユニット34Aは、IRR70からの最高優先度の割込み要求を除去し、割込みをインサービスとしてISRにログ記録するように構成されてもよい。ISRにおける割込みに対応するインサービス指示の位置は、割込みの割込みベクトルに対応してもよい。プロセッサ30Aは、割込みをサービスするために割込みサービスルーチン又は複数のルーチンを実行してもよい。割込みサービスルーチンは、割込みサービスが完了することを信号送信するためにgAPICへの割込みの終わりEOIコマンドで終わってもよい。ゲスト割込み制御ユニット34Aは、EOIコマンドに応答してISRからの最高優先度のインサービス割込みを除去するように構成されてもよい。EOIコマンドを行うときに、マイクロコードは、ISRビットNこの場合、Nは最高優先度のインサービス割込みであるをクリアしてもよい。TMRのビットNが設定される場合、マイクロコードは、VMM18がレベルに敏感な割込み挙動をエミュレートすることを可能にするためにVMExitであってもよい。他の実施形態では、ISRの更新はVMM18によって管理されてもよい。前述のように、IRR、ISR、及びTMRのそれぞれは、gAPICによってサポートされる各割込みベクトルに対応する場所を含む。例証された実施形態では、ベクトル0~255がサポートされる。割込みベクトルナンバーはまた、他の割込みとのその相対的な優先度を示してもよい例えば、より高いベクトルナンバーはより低いベクトルナンバーよりも高い優先度であり、又は他の実施形態ではこの逆である。各割込みベクトルに対して、IRRは、該割込みベクトルでの割込みが要求されるか否かを示す割込み要求ビットを格納する。例えば、指示は、設定されたときに要求を示し且つクリアされたときに要求なしを示すビットであってもよい。同様に、各割込みベクトルに対して、ISRは、該割込みベクトルに対する割込みがインサービスであるか否かを示すインサービスビット例えば、設定されたときにインサービス割込みを示し、クリアされたときにインサービス割込みなしを示すを格納する。各割込みベクトルに対して、TMRはトリガモードを格納する。IRR、ISR、及びTMRのそれぞれに対して、レジスタにおけるビット位置は、割込みに対応する割込みベクトルナンバーに等しい。例証された実施形態では256個の割込みベクトルがサポートされるが、他の実施形態ではより多い又は少ない割込みベクトル及び/又はより多い又は少ない優先度レベルグループがサポートされてもよいことに留意されたい。他のAPIC状態は、内部的に生成される割込み、タイマ、ローカルベクトルテーブルなどを含んでもよい。一実施形態では、gAPIC状態エントリ90におけるIRR、ISR、及び/又はTMRのビットは、1バイトにつき8ビットとして配置されなくてもよい。特定のIRR、ISR、又はTMRビットへの容易なアドレス指定を促進するために、ビットは、より分散された状態で格納されてもよい例えば、1バイトにつき2ビット、1バイトにつき1ビットなど。次に図6に移ると、デバイステーブル62、割込み再マッピングテーブル64、及びAPICIDテーブル60A~60Bの一実施形態のブロック図と、テーブルを用いるgAPIC状態エントリ90の位置付けが示される。デバイス割込みでは、割込みから生じる周辺デバイスのバス/デバイス/機能BDF登録商標は、デバイステーブル62へのインデックスとして用いられてもよい。デバイステーブル62のベースアドレスは、IOMMU40に格納されてもよく、1つのコンピュータシステム5につき1つのデバイステーブル62又はシステムに複数のIOMMUが含まれる場合に1つのIOMMU40につき1つのデバイステーブル52が存在してもよい。BDF登録商標に応答して選択されたデバイステーブルエントリは、割込み再マッピングテーブル64のベースアドレスである割込み再マッピングテーブルポインタIRTPを含む。一実施形態では、システム5における1つのゲストにつき1つの割込み再マッピングテーブル64が存在してもよい。加えて、デバイステーブルエントリは、APICIDテーブルポインタAIDTPを含んでもよく、これは物理APICIDテーブル60Aのベースアドレスであってもよい。他の実施形態では、デバイス割込みに対して論理APICIDがサポートされてもよく、デバイステーブル62に2つのAIDTPフィールドが存在してもよい一方は論理APICIDテーブル60Bに対するものであり、他方は物理APICIDテーブル60Aに対するものである。一実施形態では、コンピュータシステム5における1つのゲストにつき1つの論理APICIDテーブル60Bと1つの物理APICIDテーブル60Aが存在してもよい。割込みリダイレクトテーブル64へのインデックスは、割込みのための割込み識別子である。割込み識別子は、割込みベクトルを含んでもよく、且つまた、物理又は論理のいずれかの送達モードdeliverymodeDelmodeを含んでもよい。選択されたエントリは、新しいベクトル及び宛先IDDestIDを含んでもよい。加えて、選択されたエントリは、前述のゲスト/ホストG/Hフィールドを含んでもよい。宛先IDは、物理APICIDテーブル60Aへのインデックスであってもよく、選択されたエントリは、gAPIC状態エントリ90へのgAPIC状態ポインタを含んでもよい。加えて、選択されたエントリは、vCPUに対するIR指示を含んでもよい。IPIでは、対象vCPUは、論理APICID又は物理APICIDによって識別されてもよい。物理APICIDでは、IDは、そのアドレスがVMCBからゲスト割込み制御ユニット34A~34Bにロードされる物理APICIDテーブル60Aへのインデックスとして用いられてもよい。gAPIC状態ポインタ及びIRフィールドは、したがって、物理IPIのためにアクセスされてもよい。IPIが論理APICIDを有する場合、論理APICIDは、論理APICIDテーブル60Bへのインデックスとして用いられてもよい。論理APICIDの最上位部分はクラスタを識別してもよい。したがって、テーブルはクラスタに再分割され、そのそれぞれは、クラスタの各論理メンバに対する1つ又は複数のエントリを含んでもよい。クラスタにおけるメンバの数は、モードに応じて変化してもよい例えば、x1APICフラットモードは、1クラスタにつき8個までのメンバを含んでもよく、x1APICクラスタモードは、1クラスタにつき4個までのメンバを含んでもよく、x2APICモードは、16個までのクラスタメンバを含んでもよい。論理APICIDテーブル60Bは、任意のモードを取り扱うようにサイズ設定されてもよく、そのため、この実施形態での各再分割クラスタは16個のメンバを含んでもよい。図6で例証されるように、論理APICIDテーブル60Bにおける各エントリは、対応するクラスタメンバを該クラスタメンバの物理APICIDにマッピングしてもよい。論理APICIDテーブル60Bからの物理APICID出力は、物理APICIDテーブル60Aへのインデックスとして用いられてもよく、これは、vCPUに対するgAPIC状態ポインタ及びIRフィールドを供給してもよい。次に図7に移ると、周辺デバイスからの割込みメッセージの受信に応答したデバイス割込みマネージャ38の一実施形態の動作を例証するフローチャートが示される。ブロックは理解を容易にするために特定の順序で示されるが、他の順序が用いられてもよい。ブロックは、デバイス割込みマネージャ38において組合せ論理で並列に行われてもよい。ブロック、ブロックの組合せ、及び/又はフローチャートは、複数のクロックサイクルにわたってパイプラインされてもよい。一般に、デバイス割込みマネージャ38は、図7で例証される動作を実装するように構成されてもよい。デバイス割込みマネージャ38は、BDF登録商標及び周辺デバイスから受信される割込み情報に応答してデバイステーブル62及び割込み再マッピングテーブル64にアクセスしてもよい。デバイス割込みマネージャ38は、割込み再マッピングテーブル64からG/H指示を受信してもよく、割込みがホストに対するものである場合決定ブロック100、yes分岐、デバイス割込みマネージャ38は、再マッピングされる可能性がある宛先ID及びベクトルを伴う割込みメッセージをAPIC32A~32Bに送信してもよいブロック108。デバイス割込みがG/H指示に従ってゲストに対するものである場合決定ブロック100、no分岐、デバイス割込みマネージャ38は、ゲスト/vCPUに対するgAPIC状態エントリに割込みを記録してもよい。デバイス割込みに対する論理APICIDをサポートする幾つかの実施形態では、デバイス割込みマネージャ38は、論理APICIDテーブル60Bを通じて論理APICIDを物理APICIDに変換してもよいブロック102。デバイス割込みマネージャ38は、デバイステーブル62からのAIDTP及びデバイス割込みに対する物理APICIDを用いて物理APICIDテーブル60AからgAPIC状態エントリポインタを判定するように構成されてもよいブロック110。デバイス割込みマネージャ38は、gAPIC状態エントリ90において表されるIRRにおける割込みベクトルに対応するビットを設定するように構成されてもよいブロック112。加えて、デバイス割込みマネージャ38は、物理APICIDテーブル60AからのIR指示を用いて、割込みの対象にされたvCPUが走っているかどうかを判定してもよい決定ブロック104。vCPUが走っていない場合決定ブロック104、no分岐、デバイス割込みマネージャ38は、VMM18に対するログメッセージを、例えばイベントキューに記録してもよいブロック106。VMM18は、その後、ログメッセージを処理してvCPUをスケジュール設定してもよい。他の実施形態は、走っていないvCPUに対する割込みの受取りを他の方法で通信してもよい。vCPUが走っている場合決定ブロック104、yes分岐、vCPUを走らせているプロセッサ30A~30Bにおけるゲスト割込み制御ユニット34A~34Bは、ウォッチ領域機構を用いてIRRビットの更新を検出してもよいブロック112。別の実施形態では、デバイス割込みマネージャ38は、ゲスト割込みの受取りを示すためにプロセッサ30A~30Bにゲスト割込み制御メッセージを送信してもよいブロック116。物理的割込みは、ブロードキャストであってもよく、又は単一の宛先であってもよい。物理的割込みがブロードキャストである場合決定ブロック114、yes分岐、デバイス割込みマネージャ38は、ゲストの仮想マシンにおける各宛先例えば各vCPUに対してブロック110、112、104、106、及び116を繰り返すように構成されてもよい。代替的に、ブロードキャストである物理的割込みは、VMM18にアクセス可能なデータ構造例えばイベントキューに割込みをログ記録することでデバイス割込みマネージャ38によって処理されてもよい。デバイス割込みマネージャ38はまた、VMM18にイベントを知らせるためにVMM18に信号送信するように構成されてもよい例えば、プロセッサ30A~30Bのうちの1つの上の仮想マシンからの終了を引き起こす。代替的に、デバイス割込みマネージャ38は、VMM18に周期的にのみ例えば、Nミリ秒おきに、及び/又はイベントキューにおける高いウォーターマークで信号送信してもよく、VMM18は、信号送信がサポートする可能性があるよりも迅速に任意のイベントをサービスするために同様に周期的にイベントキューをチェックしてもよい。一実施形態では、イベントキューは、デバイス割込みマネージャ38の代わりにIOMMU40によって管理されてもよい。論理割込みをマルチキャストして、割込みの論理APICIDのベクトル部分における各宛先に対してブロック102、110、112、104、106、及び116を繰り返すために、類似した機構が実装されてもよい。図8~図11は、コンピュータシステム5における種々の命令及び/又は他のイベントに応答したプロセッサ30A~30B及びより詳細にはゲスト割込み制御ユニット34A~34Bの一実施形態の動作を例証するフローチャートである。ゲスト割込み制御ユニット34A~34Bは、各フローチャートで例証される動作を実装するように構成されてもよい。既述のように、ゲスト割込み制御ユニット34A~34Bのうちの幾つか又はすべては、マイクロコードに実装されてもよい。こうした実施形態では、ゲスト割込み制御ユニット34A~34Bは、プロセッサにおける実行のためにマイクロコードをディスパッチすることによって動作を実装するように構成されてもよい。ブロックは、理解を容易にするためにフローチャートに特定の順序で示されるが、他の順序が用いられてもよい。ブロックは、ゲスト割込み制御ユニット34A~34Bにおいて組合せ論理で並列に行われてもよい。ブロック、ブロックの組合せ、及び/又はフローチャートは、概して複数のクロックサイクルにわたってパイプラインされてもよい。図8は、一実施形態に関するVMRUN命令を実行するプロセッサに応答したプロセッサ30A~30Bにおけるゲスト割込み制御ユニット34A~34Bの動作を例証する。ゲスト割込み制御ユニットは、プロセッサにおけるAPICアクセスに対するトラップ/フォールト動作をイネーブルにしてもよいブロック120。プロセッサハードウェアは、APICアクセスをこの実施形態ではvCPUに対するgAPIC状態エントリ90へのメモリアクセスに変換するように構成されてもよく、又はAPICアクセスは、マイクロコードに実装されてもよい。gAPICアクセスのうちの多くは、必要であればVMMが任意の副作用をエミュレートすることを可能にするためにリタイア時にトラップされてもよい。しかしながら、或る動作はgAPIC状態への回復不能な変化をもたらす可能性があり、こうしたアクセスは、フォールトされVMMで行われてもよい。一実施形態では、ゲスト割込み状態は、例えば、vCPUが走っていなかった時間中の割込みの送達を検出するために再評価されてもよい。図10の動作は、例えば、VMRUN命令の一部として実装されてもよい。ウォッチ領域動作が実装される場合、ゲスト割込み制御ユニットは、gAPIC状態エントリ90におけるIRRビットにわたるウォッチ領域をイネーブルにしてもよいブロック122。例えば、ゲスト割込み制御ユニットは、VMCB22からのgAPIC状態エントリポインタを用いて、IRRビットをキャッシュにカバーするgAPIC状態エントリ90における1つ又は複数のキャッシュブロックを読み出してもよく、且つキャッシュブロックへの更新の監視を始めてもよい。他の実施形態は、vCPUに対するゲスト割込みが受信されていることを信号送信するためにゲスト割込み制御メッセージを実装してもよく、ウォッチ領域は実装されなくてもよい。プロセッサは、VMRUN命令に応答して行われる種々の他の処理を行ってもよいブロック124。例えば、VMCB22からロードされる種々のプロセッサ状態がロードされてもよく、プロセッサ状態がVMM状態セーブ領域などに保存されてもよい。ブロック124の動作は、幾つかの実施形態ではブロック120及び122の前に、後に、及び/又はインターリーブして行われてもよい。図9は、一実施形態に関するゲストからのVMExitに応答した動作を例証する。ゲスト割込み制御ユニットは、APICアクセスに対するトラップ/フォールト挙動をディスエーブルにしてもよいブロック126。加えて、vCPUに対して受信されている割込みを検出するのにウォッチ領域動作が用いられる場合、ウォッチ領域はディスエーブルにされてもよくブロック128、プロセッサは、他のVMExit処理例えば、VMCB22に状態を保存すること、VMM18状態を復元することなどを続けてもよいブロック130。ブロック130の動作は、幾つかの実施形態ではブロック126及び128の前に、後に、及び/又はインターリーブして行われてもよい。ここで図10に移ると、プロセッサ上で実行するvCPUに対するゲスト割込みを検出するプロセッサに応答したゲスト割込み制御ユニットの一実施形態の動作を例証するフローチャートが示される。ゲスト割込みは、ウォッチ領域における更新を検出すること、ゲスト割込み制御メッセージを受信することなどの種々の方法で検出されてもよい。ゲスト割込み制御ユニットは、vCPUに対するgAPIC状態エントリ90からIRR及びISRデータコンテンツを読み出してもよいブロック132。ゲストTPRがプロセッサに実装されない場合、TPRは同様に読み出されてもよい。ゲスト割込み制御ユニットは、インサービスではないIRRに記録される最高優先度の割込みを、vCPUにおける現在送達される割込み及び現在のTPRと比較してもよいブロック134。最高優先度の割込みがTPR及び最高優先度のインサービス割込みよりも高い優先度である場合決定ブロック136、yes分岐、ゲスト割込み制御ユニットは、新しいより高い優先度の割込みをvCPUに送達してもよいブロック138。割込みをゲストに投入するための機構は、種々の実施形態において変化してもよい。既述のように、プロセッサは、実行中にゲストに割り込むために、ゲスト割込みをキューに入れるためのハードウェアを含んでもよい。ゲスト割込み制御ユニットは、こうした実施形態では、より高い優先度の割込みに関する情報をハードウェアにロードしてもよい。図10の動作をマイクロコードに実装するゲスト割込み制御ユニットの実施形態では、ゲスト割込みの検出は、マイクロコードへのトラップを引き起こす可能性がある。トラップは、この場合、トラップされる命令に直接関係していなくてもよい。しかしながら、トラップは、マイクロコードが実行し且つ割込みを取り込むことを可能にしてもよい。マイクロコードは、トラップに応答して図10で例証される動作を実装するために実行されてもよい。図11は、ゲスト割込み制御ユニットを含むプロセッサ上のvCPUにおける命令実行のためのゲスト割込み制御ユニットの一実施形態の動作を例証するフローチャートである。命令がAPICアクセスではない場合決定ブロック140、no分岐又はAPICアクセスであって決定ブロック140、yes分岐プロセッサがゲストを実行しない場合すなわちプロセッサがホストを実行している-決定ブロック142、no分岐、ゲスト割込み制御ユニットは、アクションを起こさなくてもよく、命令は普通に実行されてもよいブロック144。これに関連して、普通に実行することは、ゲスト割込み制御ユニットからの干渉なしに実行することを指してもよい。命令は、ゲストにおける横取り構成を介して依然として横取りされてもよく、例外などを経験してもよい。命令がAPICアクセスであり決定ブロック140、yes分岐且つゲストで実行される状態にある場合決定ブロック142、yes分岐、ゲスト割込み制御ユニットは、アクセスが加速されたアクセスであるかどうかを判定してもよい決定ブロック146。加速されたアクセスは、アクセスによって引き起こされる場合がある任意の副作用を含む、ゲスト割込み制御ユニットによって実装されるアクセスであってもよい。一実施形態では、アクセスは、任意の副作用を含むマイクロコードに実装されてもよい。アクセスが加速されたアクセスではない場合、ゲスト割込み制御ユニットは、命令がトラップされるフォールトされない場合にgAPIC状態エントリへのアクセスを行ってもよいブロック148。前述のように、ほとんどの命令はトラップされてもよい。フォールトされる命令は、リタイアが許される場合に回復不能な状態変化を引き起こす命令であってもよい。例えば、割込み状態がこれらの命令によって上書きされる可能性があるので、IRR、ISR、及び随意的にTMRへの書込みがフォールトされてもよい。加えて、一実施形態では、現在のカウントレジスタは集積回路66に供給されるクロックに従って動作する自由に走るカウンタであるため、現在のカウントレジスタへのアクセスは、エミュレーションのためにフォールトされてもよい。仮想化のオーバーヘッドは、エミュレートされない場合にカウンタにおいて検出可能であってもよい。他のアクセスがトラップされてもよい。他の実施形態は、トラップされる命令及びフォールトされる命令とは異なる描写をする可能性がある。VMM18が動作の1つ又は複数の副作用をエミュレートする場合決定ブロック150、yes分岐、ゲスト割込み制御ユニットは、VMM18にVMExitしてもよいブロック152。幾つかのアクセスは、副作用例えば、ほとんどの読出し動作を有さない可能性がある。書込み動作及び幾つかの読出し動作は、副作用を有する可能性があり例えば、書込みに応答して期待されるAPICの動作、これらの副作用はVMM18にエミュレートされてもよい。これに関連して、副作用は、状態書込みに関して又は対象レジスタ読出しに関してを更新する動作以外の任意の動作であってもよい。VMM18によってエミュレートされる副作用が存在しない場合決定ブロック150、no分岐、命令に対する動作が完了してもよい。アクセスが加速される場合決定ブロック146、yes分岐、ゲスト割込み制御ユニットは、命令によってアクセスされるレジスタに対応するgAPIC状態エントリにおける場所を読み出してもよい又は書き込んでもよいブロック154。加速されるアクセスの組は、実施形態から実施形態へと変化してもよい。一般に、頻繁に起こる可能性がある及び/又は他の方法ではパフォーマンスが決定的に影響するperformancecritical可能性があるアクセスが、加速に対する候補であってもよい。一実施形態では、ICRLIPIを引き起こす可能性がある、TPR、及びEOIレジスタへのアクセスが加速されてもよい。アクセスがTPR又はEOIへのものである又はアクセスがICRLへのものであるがIPIを引き起こさない場合決定ブロック156、no分岐、ゲスト割込み制御ユニットは、任意の他の副作用もしあるとしたらを実装してもよく、命令が完了してもよいブロック158。命令がIPIを引き起こす場合決定ブロック156、yes分岐、ゲスト割込み制御ユニットは、IPIの宛先IDを対象vCPUに対するgAPIC状態ポインタに翻訳するためにAPICIDテーブル60を用いてもよいブロック160。論理APICIDテーブル60B及び物理APICIDテーブル60Aのベースアドレスは、VMCB22から利用可能であってもよく、プロセッサ上で実行するvCPUが呼び出されたときにプロセッサにロードされていてもよい。ゲスト割込み制御ユニットは、IPIを記録するためにgAPIC状態におけるIRRに書き込んでもよいブロック162。割込みが記録されていること及び対象vCPUが走っていることを通信するためにゲスト割込み制御メッセージが用いられる場合、ゲスト割込み制御ユニットは、対象プロセッサにゲスト割込み制御メッセージを送信してもよいブロック164。対象vCPUが走っていない場合決定ブロック166、no分岐、プロセッサは、VMM18が対象vCPUをスケジュール設定することを可能にするためにVMExitしてもよいブロック168。図7に関する物理的割込みのブロードキャストの上記の説明と類似して、IPIがブロードキャストされる物理又は複数の対象を有する論理場合、ゲスト割込み制御ユニットは、複数のgAPIC状態エントリを更新することによって複数の対象をサポートしてもよく、又は複数の対象IPIに対するVMM18に出てもよい。図16は、プロセッサ30Aにおけるゲスト割込み制御ユニット38Aにゲスト割込み制御メッセージ及びゲストIPIを送達するのに用いられてもよいMSRインターフェースの一実施形態を例証するブロック図である。図16で例証されるのは、ゲスト割込み制御ユニット38A及びMSRユニット212その両方ともプロセッサ30Aの一部であってもよい、特権付きコード210、及びAPIC32Aである。ゲスト割込み制御ユニット38Aは、MSRユニット212に結合され、これは、MSR214を含む。MSR214は、ゲスト割込み有効guestinterruptvalidGIVビットを格納してもよい。他の割込みに関係するデータがMSR214に同様に格納されてもよい。MSRユニット212はAPIC32Aに結合される。したがって、APIC32Aは、ゲスト割込み制御メッセージを受信してもよく、且つ、MSR214に対する更新を送信するように構成されてもよい。更新は、GIVビットを設定してもよい。GIVビットの設定に応答して、ゲスト割込み制御ユニット38Aは、受信したゲスト割込みを処理してもよい例えば図10に示すように。GIVビットの設定は、ゲスト割込み制御ユニット38Aにおける回路にゲスト割込みの処理を開始させてもよい。代替的に、GIVビットの設定は、ゲスト割込みの処理を開始するためにゲスト割込み制御ユニット38Aからのマイクロコードの発行を引き起こしてもよい。前述のように、特権付きコード210は、MSRユニット212MSR214を含むにアクセスしてもよい。特権付きコード210は、プロセッサ30A上で実行してもよいVMM18並びに他の特権付きコード例えばホストOSコードなどを含んでもよい。しかしながら、非特権付きコード及びゲストコードはMSR214にアクセスしなくてもよい。図12~図14は、前述のハードウェアを用いてゲスト割込み仮想化をサポートするためのVMM18の一実施形態の高レベル動作を例証するフローチャートである。VMM18によって実装される多くの他の動作は、これらのフローチャートでは例証されず、これらの種々の他の動作の一部は、例証された動作とインターリーブされてもよく、及び/又は例証された動作の前及び/又は後に行われてもよい。ブロックは、理解を容易にするためにフローチャートに特定の順序で示されるが、他の順序が用いられてもよい。VMM18は、実行されるときにフローチャートで例証される動作を実施する命令を含んでもよい。図12は、コンピュータシステム5上での実行のためのゲストの初期化中のVMM18の動作の一実施形態を例証するフローチャートである。すなわち、初期化は、コンピュータシステム5上でゲストを実行する前に、ゲストに対する仮想マシンを記述するデータ構造をもたらすことを含んでもよい。VMM18は、ゲストにおける各vCPUに対するgAPIC状態を確立してもよいブロック170。gAPIC状態を確立することは、例えば、状態に対するページを割り当てること及び状態に対する最初の値を挿入することを含んでもよい。最初の値は、例えば、APICのリセット状態に対応してもよい。VMM18は、ゲストに対するAPICIDテーブル60を確立し、各vCPUのAPICIDに基づいてゲストに対する割り当てられたページへのgAPIC状態エントリポインタをマッピングしてもよいブロック172。VMM18はまた、走っていないことを示すためにIR指示を初期化してもよい。ゲストに割り当てられてもよい任意の周辺デバイスに対して、VMM18は、割込み再マッピングテーブル64及び物理APICIDテーブル60Bへのポインタと共にデバイステーブル62をプログラムしてもよい。VMM18は、ゲストに対する割込み再マッピングテーブル64をプログラムし、且つゲストを示すためにG/Hビットを設定してもよいブロック174。図13は、初期化が完了した後の割込みの仮想化のためにゲストをサポートするVMM18の動作の一実施形態を例証するフローチャートである。VMM18が実行のためにゲストをスケジュール設定する又はゲストのvCPUをスケジュール解除するdeschedules場合決定ブロック176、yes分岐、VMM18は、走っているゲストスケジュール設定される又は走っていないゲストスケジュール解除されることを示すために該vCPUに対応する物理APICIDテーブル60AのエントリにおけるIRフィールドを更新してもよいブロック178。APICアクセスに対するVMExitが検出される場合決定ブロック180、yes分岐、VMM18は、gAPIC状態に基づいてAPICアクセスをエミュレートしてもよいブロック182。走っていないvCPUを対象にした割込みが受信されていることを示すIOMMU40からのログエントリをVMM18が検出する場合決定ブロック184、yes分岐、VMM18は、割込みを処理するべくスケジューリングするために、対象vCPUに優先順位をつけてもよいブロック186。図14は、システムからゲストを削除するVMM18の一実施形態の動作を例証するフローチャートである。VMM18は、任意の周辺デバイスのゲスト割り当てを除去するためにデバイステーブル62及び割込み再マッピングテーブル64を更新してもよいブロック188。VMM18はまた、ゲストのgAPIC状態エントリ90及びAPICIDテーブル60を削除してもよいブロック190。次に図15に移ると、コンピュータ可読記憶媒体200のブロック図が示される。一般的に言えば、コンピュータ可読記憶媒体は、コンピュータに命令及び/又はデータを提供するために、使用中にコンピュータがアクセス可能な任意の記憶媒体を含んでもよい。例えば、コンピュータ可読記憶媒体は、磁気媒体又は光学媒体、例えば、ディスク固定又はリムーバブル、テープ、CD-ROM、又はDVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW、HDDVD、及び/又はブルーレイディスクのような記憶媒体を含んでもよい。記憶媒体は、RAM例えば、シンクロナス動的RAMSDRAM、RambusDRAMRDRAM、静的RAMSRAMなど、ROM、ユニバーサルシリアルバスUSBインターフェース又はあらゆる他のインターフェースのような周辺インターフェースを介してアクセス可能なフラッシュメモリ、不揮発性メモリ例えばフラッシュメモリなどのような揮発性又は不揮発性メモリ媒体をさらに含んでもよい。記憶媒体は、微小電気機械システムMEMS、並びにネットワーク及び/又は無線リンクのような通信媒体を介してアクセス可能な記憶媒体を含んでもよい。図15のコンピュータ可読記憶媒体200は、VMM18を格納してもよく、これは、図12~図14のフローチャートで例証される動作及び/又はこの説明におけるVMM18に割り当てられる任意の他の機能のすべて又は一部を実装してもよい。コンピュータ可読記憶媒体200は、マイクロコード202又は他の命令及び/又はデータ例えば、Verilog又は幾つかの他のハードウェア記述言語を格納してもよく、これは、マイクロコードに実装されるゲスト割込み制御ユニット34Aの部分に関する図8~図13のフローチャートで例証される動作及び/又はこの説明におけるマイクロコードに割り当てられる任意の他の機能のすべて又は一部を実装してもよい。一般に、コンピュータ可読記憶媒体200は、実行されるときに、図8~図13に示されたフローチャートの一部又はすべてを実施する命令の任意のセットを格納してもよい。幾つかの実施形態では、プロセッサ30Aに関して本明細書で説明される動作の一部又はすべて及びより詳細にはゲスト割込み制御ユニット34Aは、ハードウェアに実装されてもよく、同様にIOMMU40及びより詳細にはデバイス割込みマネージャ38はハードウェアに実装されてもよい。コンピュータ可読記憶媒体200は、こうしたハードウェアの任意の所望の表現を格納してもよい。例えば、表現は、Verilog又はVHDLのような高水準設計言語HDLにおけるハードウェア機能の動作レベル記述又はレジスタ伝送レベルregister-transferlevelRTL記述であってもよい。記述は、合成ライブラリからのゲートのリストを含むネットリストをもたらすために、記述を合成してもよい合成ツールによって読み出されてもよい。ネットリストは、ゲートのセットを備え、これはまた、システム10を備えるハードウェアの機能を表す。ネットリストは、次いで、マスクに適用されるべき幾何学的形状を記述するデータセットをもたらすために配置されルーティングされてもよい。マスクは、次いで、システム10に対応する1つ又は複数の半導体回路をもたらすために、種々の半導体製作ステップで用いられてもよい。代替的に、コンピュータによりアクセス可能な記憶媒体300上の表現は、必要に応じてネットリスト合成ライブラリ有り又は無しであってもよいし又はデータセットであってもよい。命令は、例えば、そのように構成されるときに、製作設備が図8~図13のフローチャートで説明される動作の一部又はすべて及び/又はプロセッサ30A、ゲスト割込み制御ユニット34A、IOMMU40、及び/又はデバイス割込みマネージャ38に関して本明細書で説明される動作の一部又はすべてを実装する集積回路をもたらすように適合されるマスクワークの発生を通じて回路製作設備を構成するのに用いられてもよい。搬送媒体は、コンピュータによりアクセス可能な記憶媒体並びに配線又は無線伝送のような伝送媒体を含んでもよい。上記の開示が十分に認識されれば、当業者には多くの変形及び修正が明らかとなるであろう。以下の請求項は、すべてのこうした変形及び修正を包含するように解釈されることを意図される。"