(57)【要約】一実施形態では、デバイス割込みマネージャは、ゲストに割り当てられたデバイスからの割込みを受信するように構成されてもよい。デバイス割込みマネージャは、ゲスト内の仮想プロセッサに対する割込みを記録するためにシステムメモリの中の記憶域を対象にした動作を送信するように構成されてもよく、割込みは対象となる仮想プロセッサに送達されることになる。一実施形態では、仮想マシン・マネージャは、現在実行中ではない仮想プロセッサに対するデバイス割込みマネージャによる割込みが記録されていることを検出するように構成されてもよい。仮想マシン・マネージャは、割込みに応答して、ハードウェア・プロセッサ上での実行のために仮想プロセッサをスケジュール設定するように構成されてもよく、又はスケジューリングのために仮想プロセッサに優先順位をつけてもよい。【選択図】図３
2013519169.tif 000002
【特許請求の範囲】
【請求項１】
ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャであって、
前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、
前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、
前記仮想プロセッサが前記割込みの対象にされる、デバイス割込みマネージャ。
【請求項２】
１つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、
前記１つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項１に記載のデバイス割込みマネージャ。
【請求項３】
前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項２に記載のデバイス割込みマネージャ。
【請求項４】
前記デバイスによって送信される割込みベクトルを前記１つ又は複数のテーブルにおける前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするようにさらに構成される、請求項２に記載のデバイス割込みマネージャ。
【請求項５】
前記エントリにおける前記指示に応答して前記仮想プロセッサがハードウェア・プロセッサ上でアクティブであるか否かを判定するようにさらに構成され、
前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブであることの検出に応答して前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するように構成される、請求項２に記載のデバイス割込みマネージャ。
【請求項６】
前記仮想プロセッサが前記ハードウェア・プロセッサ上で走っていないことの検出に応答して前記仮想プロセッサをスケジュール設定する要求を記録するために前記システムメモリに書込み動作を送信するようにさらに構成される、請求項５に記載のデバイス割込みマネージャ。
【請求項７】
方法であって、
デバイス割込みマネージャが割込みを記憶域に記録するステップを含み、
前記記憶域がゲストに関連付けられた仮想プロセッサに関連付けられ、
前記デバイスが前記ゲストに割り当てられ、
前記仮想プロセッサが前記割込みの対象にされる、方法。
【請求項８】
前記デバイス割込みマネージャが、割込みコントローラ識別子を仮想プロセッサにマッピングするようにプログラムされる１つ又は複数のテーブルにおけるエントリを選択するステップであり、割込みに関連付けられる割込みコントローラ識別子に応答した、デバイス割込みマネージャによるエントリの選択ステップと、
前記デバイス割込みマネージャが、前記エントリに格納されるアドレスを介して前記記憶域を識別するステップと、
をさらに含む、請求項７に記載の方法。
【請求項９】
前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項８に記載の方法。
【請求項１０】
前記デバイス割込みマネージャが、前記デバイスによって送信される割込みベクトルを、前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするステップをさらに含む、請求項８に記載の方法。
【請求項１１】
前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェア・プロセッサ上でアクティブであることを前記デバイス割込みマネージャが判定するステップと、
前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブであることの検出に応答して、前記デバイス割込みマネージャが前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するステップと、
をさらに含む、請求項８に記載の方法。
【請求項１２】
前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェア・プロセッサ上でアクティブではないことを前記デバイス割込みマネージャが判定するステップと、
前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブではないことの検出に応答して、前記仮想プロセッサをスケジュール設定する要求を記録するために前記デバイス割込みマネージャが前記システムメモリに書込み動作を送信するステップと、
をさらに含む、請求項８に記載の方法。
【請求項１３】
コンピュータ・システム上で実行可能なプログラムによって動作するデータ構造を備えるコンピュータ可読記憶媒体であって、
集積回路を製作するプロセスの一部を行うために前記データ構造上で動作する前記プログラムが、前記データ構造によって記述される回路を含み、
前記データ構造で記述される前記回路が、ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャを含み、
前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、
前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、
前記仮想プロセッサが前記割込みの対象にされる、コンピュータ可読記憶媒体。
【請求項１４】
前記デバイス割込みマネージャが、１つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、
前記１つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記デバイス割込みマネージャが、前記仮想プロセッサが実行のためにハードウェア・プロセッサに割り当てられるか否かを判定するようにさらに構成され、
前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェア・プロセッサに割り当てられることの検出に応答して前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するように構成される、請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１６】
コンピュータ上で実行されるときに複数の命令を格納するコンピュータ可読記憶媒体であって、
仮想マシンにおける仮想プロセッサに対応する記憶域に割込みが記録されていることを検出する命令であり、前記割込みが仮想マシンに割り当てられたデバイスによって生じる、検出する命令と、
前記割込みをサービスするために前記仮想プロセッサに対して記録されている前記割込みに応答して、前記コンピュータにおけるハードウェア・プロセッサ上での実行のために前記仮想プロセッサをスケジュール設定する命令と、
を含むコンピュータ可読記憶媒体。
【請求項１７】
実行時に割込みが記録されていることを検出する前記命令が、前記コンピュータにおいて検出されるイベントのログを格納する別の記憶域を実行時に読み出す命令を含み、
前記イベントのログが、前記コンピュータ・システムにおけるデバイス割込みマネージャによって更新され、
前記デバイス割込みマネージャが、前記割込みを受信し且つ前記割込みが前記仮想プロセッサを対象とすることを判定するように構成される、請求項１６に記載のコンピュータ可読記憶媒体。
【請求項１８】
実行時に前記仮想プロセッサをスケジュール設定する前記命令が、前記仮想プロセッサがアクティブであることを示すために仮想プロセッサへの割込みをマッピングする１つ又は複数のテーブルを実行時に更新する命令を含む、請求項１７に記載のコンピュータ可読記憶媒体。
【請求項１９】
実行時に前記仮想プロセッサをスケジュール解除し且つ前記仮想プロセッサがアクティブではないことを示すために前記１つ又は複数のテーブルを更新する命令をさらに格納する、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
デバイスがゲストに割り当てられる場合に前記１つ又は複数のテーブルにおける前記データを実行時に管理する命令をさらに格納する、請求項１９に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセッサ及び仮想化に関し、より詳細には、仮想マシンゲストに割込みを送達することに関する。
【背景技術】
【０００２】
仮想化は、種々の異なる目的のためにコンピュータ・システムで用いられている。例えば、仮想化は、仮想マシンを制御する仮想マシン・マネージャ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍａｎａｇｅｒ）（ＶＭＭ）によって最初にそうするのを許されることなしに、特権付きソフトウェアが、物理マシン状態のうちの少なくとも幾つかに対し、直接アクセス及び／又は変更を行うのを防ぐために、「コンテナ」の中の特権付きソフトウェアを実行するのに用いることができる。こうしたコンテナは、「バグだらけの（ｂｕｇｇｙ）」又は悪意のあるソフトウェアが物理マシン上で問題を引き起こすのを防ぐことができる。加えて、仮想化は、２つ以上の特権付きプログラムを同じ物理マシン上で同時に実行するために用いることができる。物理マシンへのアクセスが制御されるので、特権付きプログラムが互いに干渉し合うのを防ぐことができる。特権付きプログラムは、オペレーティング・システムを含んでもよく、且つまた、ソフトウェアを実行するハードウェアのフル制御を有することを期待する他のソフトウェアを含んでもよい。別の例では、仮想化は、特権付きプログラムによって予定されるハードウェアとは異なるハードウェア上で特権付きプログラムを実行するのに用いることができる。
【０００３】
一般に、プロセッサ又はコンピュータ・システムの仮想化は、仮想マシン（上述のコンテナ）へのアクセスを伴う１つ又は複数の特権付きプログラムを提供することを含む場合があり、特権付きプログラムは仮想マシンに対するフル制御を有するが、物理マシンの制御はＶＭＭによって保たれる。仮想マシンは、プロセッサ（単数又は複数）、メモリ、及び特権付きプログラムが実行されるマシン内で見つけ出すことを期待する種々の周辺デバイスを含む場合がある。仮想マシン要素は、ＶＭＭが仮想マシンに少なくとも一時的に割り当てるハードウェアによって実装される場合があり、及び／又は、ソフトウェアでエミュレートされる場合がある。各特権付きプログラム（及び幾つかの場合には、オペレーティング・システム上で実行するアプリケーションのような関連するソフトウェア）は、本明細書ではゲストと呼ばれる場合がある。仮想化は、ＶＭＭ及びその仮想マシンを実行する物理マシンにおける任意の特定のハードウェア仮想化支援なしに、ソフトウェア（例えば上述のＶＭＭ）で実装される場合がある。しかしながら、仮想化は、簡略化されてもよく、及び／又は、何らかのハードウェア支援が提供される場合に、より高い性能を達成する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
仮想化に付随して起こる可能性がある１つの問題は、割込み送達の待ち時間である。前述のように、周辺デバイスは、仮想マシンによる使用のために（仮想マシンの仮想周辺デバイスとして作用するように）割り当てることができる。こうした周辺デバイスは、仮想マシンのソフトウェアによって処理されるべき割込みを発生させることがある。仮想化されていない環境では、割込み処理の待ち時間は比較的短い可能性がある。仮想化された環境では、割込みは、一般に、ある種のソフトウェア機構を用いてＶＭＭによって横取りされ、ＶＭＭによって処理され、ＶＭＭによって対象となる仮想マシンに送達される。しかしながら、割込み処理の待ち時間は、仮想化されない環境よりもかなり多い（例えば約１００倍長い）可能性がある。周辺デバイスにより発生した割込み（本明細書では、より簡潔に「デバイス割込み」）に加えて、プロセッサが、プロセッサ間の割込み（ｉｎｔｅｒｐｒｏｃｅｓｓｏｒ  ｉｎｔｅｒｒｕｐｔ（ＩＰＩ）を発生させることがある。仮想マシンでは、ＩＰＩは、仮想プロセッサ（すなわちｖＣＰＵ）と仮想マシンにおける別のｖＣＰＵとの間で発生する可能性がある。ｖＣＰＵは、所与のゲストの仮想マシンに含まれるように定義されるプロセッサである。ゲストには少なくとも１つのｖＣＰＵが存在するが、多重処理ゲストのための複数のｖＣＰＵが存在する場合がある。
【課題を解決するための手段】
【０００５】
一実施形態では、デバイス割込みマネージャは、ゲストに割り当てられるデバイスからの（又はゲストに割り当てられる仮想機能をサポートするデバイスからの）割込みを受信するように構成されてもよい。デバイス割込みマネージャは、ゲスト内の仮想プロセッサに対する割込みを記録するためにシステムメモリの中の記憶域を対象にした動作を送信するように構成されてもよく、割込みは対象となる仮想プロセッサに送達されることになる。一実装では、デバイス割込みマネージャは、入力／出力（Ｉ／Ｏ）メモリ管理ユニット（ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）（ＩＯＭＭＵ）に含まれてもよい。
【０００６】
一実施形態では、仮想マシン・マネージャは、現在実行中ではない仮想プロセッサに対するデバイス割込みマネージャによって割込みが記録されていることを検出するように構成されてもよい。仮想マシン・マネージャは、割込みに応答して、ハードウェア・プロセッサ上での実行のために仮想プロセッサをスケジュール設定するように構成されてもよく、又はスケジューリングのために仮想プロセッサに優先順位をつけてもよい。
【０００７】
以下の詳細な説明は、ここで簡単に説明される付属の図面を参照するものである。
【図面の簡単な説明】
【０００８】
【図１】仮想化を実装するコンピュータ・システムの一実施形態のブロック図である。
【０００９】
【図２】図１で例証されるホストハードウェアの一実施形態のブロック図である。
【００１０】
【図３】ゲストに送達される割込みの一実施形態を例証するブロック図である。
【００１１】
【図４】仮想マシン制御ブロック（ＶＭＣＢ）の一実施形態を例証するブロック図である。
【００１２】
【図５】ゲストＡＰＩＣ状態データ構造のゲストＡＰＩＣ状態エントリの一実施形態を例証するブロック図である。
【００１３】
【図６】割込みに対するゲストＡＰＩＣ状態エントリを位置付ける一実施形態を例証するブロック図である。
【００１４】
【図７】デバイスからの割込みの受信に応答する図２に示されたデバイス割込みマネージャの一実施形態の動作を例証するフローチャートである。
【００１５】
【図８】仮想マシン実行（ＶＭＲＵＮ）命令に応答する図２に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【００１６】
【図９】仮想マシン終了（ＶＭＥｘｉｔ）に応答する図２に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【００１７】
【図１０】プロセッサ上で実行するゲストに対するゲスト割込みの検出に応答する図２に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【００１８】
【図１１】汎用命令に応答する図２に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【００１９】
【図１２】ゲストを初期化するＶＭＭの一実施形態を例証するフローチャートである。
【００２０】
【図１３】ゲストの実行中にゲスト支援を提供するＶＭＭの一実施形態を例証するフローチャートである。
【００２１】
【図１４】ゲストを削除するＶＭＭの一実施形態を例証するフローチャートである。
【００２２】
【図１５】ＶＭＭ及び／又はマイクロコードの一実施形態を格納するコンピュータ可読記憶媒体の一実施形態のブロック図である。
【００２３】
【図１６】プロセッサにおけるゲスト割込み制御ユニットにゲスト割込み制御メッセージを送達するためのモデル固有レジスタ（ＭＳＲ）インターフェースの一実施形態を例証するブロック図である。
【発明を実施するための形態】
【００２４】
本発明は種々の修正及び代替的形態の余地があるが、その具体的な実施形態が単なる例として図面に示され、本明細書で詳細に説明されるであろう。しかしながら、図面及びその詳細な説明は、本発明を開示された特定の形態に限定することを意図されないが、これに対して、本発明は、付属の請求項によって定義される場合の本発明の精神及び範囲内に入るすべての修正、均等物、及び変形を包含することを意図されることを理解されたい。本明細書で用いられる見出しは、系統立てる目的のみであって、説明の範囲を制限するために用いられるように意図されるものではない。本出願の全体を通して用いられる場合の「〜であってもよい、〜の可能性がある、〜の場合がある」という言葉は、義務付けの意味（すなわち、しなければならないという意味）ではなく、許容の意味で用いられる（すなわち、可能性を有することを意味する）。同様に、「〜を含む（ｉｎｃｌｕｄｅ、ｉｎｃｌｕｄｅｓ）」、「〜を含んでいる」という言葉は、〜を含むがこれに限定されないことを意味する。
【００２５】
種々のユニット、回路、又は他のコンポーネントが、１つ又は複数のタスクを行う「ように構成される」として説明される場合がある。このような文脈では、「ように構成される」は、動作中に１つ又は複数のタスクを行う「回路を有する」ことを概して意味する構造体の広い列挙である。したがって、ユニット／回路／コンポーネントは、ユニット／回路／コンポーネントが現在オンではないときであってもタスクを行うように構成することができる。一般に、「ように構成される」に対応する構造体を形成する回路は、動作を実装するためにハードウェア回路を含んでもよい。同様に、種々のユニット／回路／コンポーネントは、説明の便宜のために、１つ又は複数のタスクを行うとして説明される場合がある。こうした説明は、「するように構成される」というフレーズを含むとして解釈されるべきである。幾つかの場合には、１つ又は複数のタスクを行うように構成される回路は、動作を実装するために実行可能なプログラム命令を格納するメモリを含んでもよい。メモリは、静的又は動的ランダムアクセスメモリのような揮発性メモリ、及び／又は光又は磁気ディスク記憶装置、フラッシュメモリ、プログラム可能読出し専用メモリなどのような不揮発性メモリを含むことができる。１つ又は複数のタスクを行うように構成されるユニット／回路／コンポーネントの列挙は、該ユニット／回路／コンポーネントに対して３５Ｕ．Ｓ．Ｃ．§１１２、パラグラフ６の解釈を行使しないことを明確に意図される。
【００２６】
一実施形態では、コンピュータ・システムは、ＶＭＭと仮想マシン内で実行する１つ又は複数のゲストとを含む。周辺デバイスは、ゲストに（例えばゲストの仮想マシンにおける対応する仮想周辺デバイスとして動作するように）割り当てられてもよい。代替的に、周辺デバイスは、仮想機能をサポートしてもよく、仮想機能は、ゲストに割り当てられてもよい。周辺デバイスは、ゲストに送達されるべきデバイス割込みを発生させてもよい。デバイス割込みマネージャは、（もしあるとしたらＶＭＭ又はＶＭＭを実行するホストソフトウェアを対象とするホスト割込みとは対照的に）デバイス割込みがゲストを対象とすることを検出するように構成されてもよい。より詳細には、デバイス割込みマネージャは、ゲストの仮想マシン内のどのｖＣＰＵが割込みの対象にされるかを検出するように構成されてもよい。デバイス割込みマネージャは、ゲスト割込みコントローラのデータ構造に割込みを記録するように構成されてもよい。対象にされたｖＣＰＵがコンピュータ・システムにおけるハードウェア・プロセッサ上で現在実行中である場合、ハードウェア・プロセッサは、ゲスト割込みを検出してもよく、且つ割込みのサービスのためにゲスト／ｖＣＰＵをリダイレクトしてもよい。
【００２７】
例えば、デバイス割込みマネージャは、データ構造に新しいゲスト割込みが記録されていることを示すために、ハードウェア・プロセッサにメッセージを送信してもよい。メッセージに応答して、ハードウェア・プロセッサは、ゲスト割込みデータ構造を読み出し、データ構造に記録された他の保留中の割込み（もしあるとしたら）と共に割込みに優先順位をつけてもよい。優先順位付けに基づいて、ハードウェア・プロセッサは、割込みを送達するか若しくは１つ又は複数のより高い優先度の割込み及び／又はより高い優先度のプロセスの完了を待ってもよい。別の例では、ハードウェア・プロセッサは、データ構造に割込みが記録されていることを検出するために、対応するゲストｖＣＰＵの実行中にゲスト割込みデータ構造（又はゲスト割込みデータ構造内の領域）を監視するように構成されてもよい。データ構造の更新の検出に応答して、ハードウェア・プロセッサは、データ構造を読み出し、上述のように割込みを送達してもよい。
【００２８】
一実施形態では、ハードウェア・プロセッサは、ゲスト割込みに対する上記の動作のプロセッサ部分を実装するように構成されるゲスト割込み制御ユニットを含んでもよい。加えて、ゲスト割込み制御ユニットは、ｖＣＰＵの割込みコントローラへのゲストアクセスが、ハードウェア・プロセッサに結合されてもよいホスト割込みコントローラを通じてではなくゲスト割込みデータ構造を通じて処理されることを保証してもよい。すなわち、ゲストにおける割込みコントローラアクセスは、ゲスト割込みデータ構造内でメモリアクセスに変換されてもよい。したがって、ゲスト割込み制御ユニットは、ゲスト割込み制御ユニットの仮想化及びエミュレートに関与してもよい。一実装では、ゲスト割込み制御ユニットは、少なくとも部分的にマイクロコードに実装されてもよい。マイクロコードは、プロセッサ内の不揮発性メモリに格納され、或る命令又は他の動作の検出に応答してプロセッサ回路によって呼び出され、マイクロコード・ルーチンを介して実施される命令であってもよい。マイクロコードは、したがって、実施される動作を行うべくプロセッサでの実行のためにディスパッチされてもよい。幾つかの実施形態では、ゲスト割込み制御ユニットは、主としてマイクロコードに実装されてもよい。他の実施形態では、ゲスト割込み制御ユニットは、ハードウェアに実装されてもよい。
【００２９】
ｖＣＰＵ割込みコントローラへのゲストアクセスは、割込みコントローラにおけるレジスタの読出し／書込みを含んでもよい。一実施形態では、割込みコントローラにおける１つ又は複数のレジスタの書込みは、ＩＰＩをトリガしてもよい。プロセッサにおけるゲスト割込み制御ユニットは、ＩＰＩを引き起こすゲストにおける書込みに応答して、対象ｖＣＰＵへのＩＰＩを開始してもよい。ゲストＩＰＩは、ＩＰＩを記録するために対象ｖＣＰＵに関連付けられたデータ構造の更新を含んでもよい。一般に、ＩＰＩは、プロセッサによって又はより詳細にはプロセッサ上で実行するソフトウェアによって生じる割込みであってもよい。ＩＰＩは、時にはソーシング・プロセッサを含むシステムにおける１つ又は複数のプロセッサを対象にしてもよい。したがって、ＩＰＩは、別のプロセッサ上で実行するソフトウェアに割込むために１つのプロセッサ上で実行するソフトウェアの機構であってもよい。ＩＰＩは、異なるプロセッサ上で実行するスレッドの間でメッセージを渡すため、元々は１つのプロセッサを対象とする割込みを別のプロセッサに通信するためなどに用いられてもよい。
【００３０】
プロセッサ又はｖＣＰＵは、プロセッサ／ｖＣＰＵに関連付けられた割込みコントローラによって割込みが受信されることになる場合に、割込みの対象にされてもよい。プロセッサ／ｖＣＰＵは、必ずしも割込みを処理しなくてもよいが、割込みを処理するための候補であってもよく、どのプロセッサ（単数又は複数）／ｖＣＰＵ（単数又は複数）が割込みを処理することになるかを判定することに関与してもよい。割込みは、その対象（単数又は複数）（例えば物理又は論理ＩＤを伴う）を明示的に指定してもよく、又はすべてのプロセッサ／ｖＣＰＵを対象とするブロードキャスト割込みであってもよい。一般に、割込みは、対象プロセッサに関連付けられた割込みコントローラがプロセッサに送達するための割込みを記録した場合に、受付けられた（ａｃｃｅｐｔｅｄ）と呼ばれてもよい。すなわち、受付け後の或る時点で、割込みがプロセッサに送達されるであろう。割込みをサービスするためにプロセッサに割込むことは、割込みの送達と呼ばれてもよい。ｖＣＰＵ及び／又は対応する仮想割込みコントローラ及び／又はそのペアは、本明細書ではより簡潔にゲスト内の割込みの宛先と呼ばれてもよい。宛先は、最終的には割込みをサービスするｖＣＰＵであってもよいが、対応する仮想割込みコントローラはまた、それが対応するプロセッサに関連付けられ及び割込みを記録するので、宛先とみなされてもよい。
【００３１】
コンピュータ・システムは、少なくとも１つのホスト割込みコントローラを含んでもよい。ホスト割込みコントローラは、ホスト（例えば、仮想化された環境における仮想マシン・マネージャ、すなわちＶＭＭ、及び／又は、幾つかの実施形態ではＶＭＭを走らせてもよいホストＯＳのような他のソフトウェア）によってサービスされるべき割込みを管理してもよい。こうした割込みは、例えば、システム上で実行するゲストに割り当てられていないコンピュータ・システムにおけるデバイスからの割込み、ＶＭＭがゲストに露出することを望まないシステムレベルの割込みなどを含んでもよい。上記のゲスト割込み動作は、ゲストによってサービスされるべき割込み（「ゲスト割込み」）を管理するのに用いられてもよい。ゲスト割込みは、例えば、ゲストの仮想マシンに対するデバイスの機能を提供するためにゲストに割り当てられるデバイスによって発行された割込み又はゲスト内の１つのｖＣＰＵから別のｖＣＰＵに発行されるＩＰＩを含んでもよい。
【００３２】
一実施形態では、本明細書で説明されるゲスト割込み動作は、ゲスト割込みに関する減少した待ち時間につながる可能性がある。例えば、幾つかの実施形態では、ゲストデバイス割込みを送達するための待ち時間は、ホストデバイス割込みを送達するための待ち時間と類似している場合がある。ゲスト割込み待ち時間は、ホスト割込み待ち時間、同じオーダーの大きさの待ち時間などとほぼ同じであってもよい。
【００３３】
一実施形態では、ゲスト割込み管理の大部分は、ハードウェア・プロセッサに実装されてもよい。幾つかの実施形態では、動作のほとんどをシステムの一部分に位置付けることによって実装が簡略化されてもよい。したがって、幾つかの実施形態では、実装は、訂正される可能性が高い場合、より迅速に完了する場合、などがある。
【００３４】
仮想化の概要
図１は、仮想化を実装するコンピュータ・システム５の一実施形態のブロック図を例証する。図１の実施形態では、複数のゲスト１０Ａ〜１０Ｎが示される。ゲスト１０Ａは、ゲスト・オペレーティング・システム（ＯＳ）１２と、ゲストＯＳ１２上で走る１つ又は複数のアプリケーション１４Ａ〜１４Ｎとを含む。ゲスト１０Ｎは特権付きコード１６を含む。ゲスト１０Ａ〜１０Ｎは、仮想マシン・マネージャ（ＶＭＭ）１８によって管理される。ＶＭＭ１８及びゲスト１０Ａ〜１０Ｎは、コンピュータ・システム５に含まれる物理的ハードウェアを含んでもよいホストハードウェア２０上で実行する。一実施形態では、ＶＭＭ１８は、一組の仮想マシン制御ブロック（ＶＭＣＢ）２２を維持してもよい。各ゲスト１０Ａ〜１０Ｎに対して１つのＶＭＣＢ２２が存在してもよい。一実施形態では、各ゲスト１０Ａ〜１０Ｎの各ｖＣＰＵに対して１つのＶＭＣＢ２２が存在してもよい。ＶＭＣＢ２２は、図１の例証ではＶＭＭ１８の一部として示されるが、ＶＭＣＢ２２は、メモリに及び／又はホストハードウェア２０におけるディスクドライブのような不揮発性媒体上に格納されてもよい。
【００３５】
ホストハードウェア２０は、一般に、コンピュータ・システム５に含まれるハードウェアのすべてを含む。種々の実施形態では、ホストハードウェア２０は、１つ又は複数のプロセッサ、メモリ、周辺デバイス、及び上記のコンポーネントを結合するのに用いられる他の回路を含んでもよい。例えば、パーソナルコンピュータ（ＰＣ）型のシステムは、ＰＣＩエクスプレス・インターフェース（ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｉｎｔｅｒｆａｃｅ）のようなインターフェースを用いるプロセッサ、メモリ、及びグラフィックスデバイスを結合するノースブリッジを含んでもよい。加えて、ノースブリッジは、種々の周辺コンポーネントがそれに直接又は間接的に結合されてもよいペリフェラル・コンポーネント・インターフェース（ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｆａｃｅ）（ＰＣＩ）バスのようなペリフェラルバスに結合してもよい。レガシー機能を提供する及び／又はレガシーハードウェアに結合するために、サウスブリッジもまた含まれ、及びＰＣＩバスに結合されてもよい。他の実施形態では、種々のハードウェアコンポーネントをリンクするために他の回路が用いられてもよい。例えば、ノードをリンクするためにＨｙｐｅｒＴｒａｎｓｐｏｒｔ（商標）（ＨＴ）リンクが用いられてもよく、この各々は、１つ又は複数のプロセッサ、ホストブリッジ、及びメモリコントローラを含んでもよい。各ノードはまた、ノースブリッジを含んでもよい。ＨＴリンクを介して周辺デバイスにデイジーチェーンの状態で結合するために、ホストブリッジが用いられてもよい。代替的に、コンポーネントの多くは、例えば、１つ又は複数のプロセッサ、ノースブリッジ機能、及びグラフィックスデバイスを集積する単一のデバイスのような単一のデバイス上に含まれてもよい。任意の所望の回路／ホストハードウェア構造が用いられてもよい。
【００３６】
ＶＭＭ１８は、ゲスト１０Ａ〜１０Ｎの各々のための仮想化を提供するように構成されてもよく、ホストハードウェア２０へのゲスト１０Ａ〜１０Ｎのアクセスを制御してもよい。ＶＭＭ１８はまた、ホストハードウェア２０（及びより詳細には、１つ以上のｖＣＰＵが含まれる場合にゲスト内のｖＣＰＵ）上での実行のためのゲスト１０Ａ〜１０Ｎのスケジューリングを担当してもよい。ＶＭＭ１８は、仮想化のためにホストハードウェア２０において提供されるハードウェアサポートを用いるように構成されてもよい。例えば、プロセッサは、イベントを横取りし及びゲストをハンドリングのためにＶＭＭ１８に出すハードウェアを含む、仮想化のためのハードウェアサポートを提供してもよい。プロセッサにおけるデバイス割込みマネージャ及び／又はゲスト割込み制御ユニットは、同様に仮想化をサポートするために提供されたハードウェアであってもよい。
【００３７】
幾つかの実施形態では、ＶＭＭ１８は、ホストハードウェア２０上で実行し且つゲスト１０Ａ〜１０Ｎのための仮想化を提供する「薄い」独立型ソフトウェアプログラムとして実装されてもよい。こうしたＶＭＭ実装は、時には「ハイパーバイザ」と呼ばれる場合がある。他の実施形態では、ＶＭＭ１８は、ホストＯＳに集積され又はホストＯＳ上で実行してもよい。こうした実施形態では、ＶＭＭ１８は、ホストＯＳにおける任意のドライバ、システムＢＩＯＳによって提供されるプラットフォームシステム管理モード（ｓｙｓｔｅｍ  ｍａｎａｇｅｍｅｎｔ  ｍｏｄｅ）（ＳＭＭ）コードなどを含むホストＯＳに頼ってもよい。したがって、ホストＯＳコンポーネント（及びプラットフォームＳＭＭコードのような種々のより低レベルのコンポーネント）は、ホストハードウェア２０上で直接実行し、ＶＭＭ１８によって仮想化されない。ＶＭＭ１８とホストＯＳ（含まれる場合）は、一実施形態では合わせてホストと呼ばれる場合がある。一般に、ホストは、使用中にホストハードウェア２０の直接制御下にある任意のコードを含んでもよい。例えば、ホストは、ＶＭＭ１８、ホストＯＳと組み合わされたＶＭＭ１８、又はホストＯＳ単独（例えば仮想化されない環境において）であってもよい。
【００３８】
種々の実施形態では、ＶＭＭ１８は、フル仮想化、準仮想化、又はこの両方をサポートしてもよい。さらに、幾つかの実施形態では、ＶＭＭ１８は、準仮想化されるゲストとフル仮想化されるゲストとを同時に実行してもよい。
【００３９】
フル仮想化の状態では、ゲスト１０Ａ〜１０Ｎは、仮想化が起こっていることに気づかない。各ゲスト１０Ａ〜１０Ｎは、その仮想マシンに一連のゼロベースのメモリを有してもよく、ＶＭＭ１８は、ホストの物理アドレススペースへのアクセスを制御するために、シャドウページテーブル又はネストしたページテーブルを用いてもよい。シャドウページテーブルは、ゲスト仮想アドレスからホスト物理アドレスに再マッピング（ゲスト１０Ａ〜１０Ｎのメモリ管理ソフトウェアによって割り当てられたゲスト「物理アドレス」をホスト物理アドレスに効果的に再マッピング）してもよく、一方、ネストしたページテーブルは、ゲスト物理アドレスを入力として受信し、ホスト物理アドレスにマッピングしてもよい。各ゲスト１０Ａ〜１０Ｎに対するシャドウページテーブル又はネストしたページテーブルを用いることで、ＶＭＭ１８は、ゲストがホストハードウェア２０における他のゲストの物理メモリにアクセスしないことを保証してもよい。
【００４０】
準仮想化の状態では、ゲスト１０Ａ〜１０Ｎは、少なくとも部分的にＶＭ−アウェアであってもよい。こうしたゲスト１０Ａ〜１０Ｎは、メモリページに関してＶＭＭ１８と交渉してもよく、したがってゲスト物理アドレスをホスト物理アドレスに再マッピングすることは要求されない場合がある。一実施形態では、準仮想化において、ゲスト１０Ａ〜１０Ｎは、ホストハードウェア２０における周辺デバイスと直接対話することを可能にされてもよい。任意の所与の時点で、周辺デバイスは、１つ又は複数のゲスト１０Ａ〜１０Ｎによって「所有」されてもよい。一実装では、例えば、周辺デバイスは、該周辺デバイスを現在所有する１つ又は複数のゲスト１０Ａ〜１０Ｎと共に保護ドメインにマッピングされてもよい。周辺デバイスを所有するゲストだけが、これと直接対話してもよい。また、保護ドメインにおけるデバイスが別の保護ドメインにおけるゲストに割り当てられたページを読出す／書き込むのを防ぐために、保護機構が存在してもよい。代替的に、周辺デバイスは、ゲストによって所有されてもよい又はゲストがそれと対話してもよい仮想機能をサポートしてもよい。
【００４１】
既述のように、ＶＭＭ１８は、各ゲスト１０Ａ〜１０Ｎ及び／又はゲストの各ｖＣＰＵのためのＶＭＣＢ２２を維持してもよい。ＶＭＣＢ２２は、一般に、対応するゲスト１０Ａ〜１０Ｎに対するＶＭＭ１８によって割り当てられる記憶領域に格納されるデータ構造を備えてもよい。一実施形態では、ＶＭＣＢ２２は、メモリのページを備えてもよいが、他の実施形態は、より大きい又は小さいメモリ領域を使用してもよく、及び／又は不揮発性記憶装置のような他の媒体上の記憶装置を使用してもよい。一実施形態では、ＶＭＣＢ２２は、ゲストが実行するようにスケジュールされるときにホストハードウェア２０におけるプロセッサにロードされてもよく、且つゲストが終了するときに（そのスケジュールされた時間の完了に起因して又はゲストが終了するのをプロセッサが検出することの１つ又は複数の横取りに起因して）ＶＭＣＢ２２に戻して格納されてもよい、ゲストのプロセッサ状態を含んでもよい。幾つかの実施形態では、プロセッサ状態の一部のみが、ＶＭＣＢ２２に対応するゲストに制御を伝送する命令（「仮想マシン実行（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｒｕｎ）（ＶＭＲＵＮ）」命令）を介してロードされ、ＶＭＲＵＮ命令を実行する前にＶＭＭ１８によって他の所望の状態がロードされてもよい。同様に、こうした実施形態では、プロセッサ状態の一部のみが、ゲスト終了時にプロセッサによってＶＭＣＢ２２に格納されてもよく、ＶＭＭ１８は、必要な場合に任意の付加的な状態を格納することを担当してもよい。他の実施形態では、ＶＭＣＢ２２は、プロセッサ状態が格納される別のメモリ領域へのポインタを含んでもよい。さらに、一実施形態では、２つ以上の終了機構が定義されてもよい。一実施形態では、格納される状態の量と、ロードされる状態の場所は、どの終了機構が選択されるかに応じて変化してもよい。
【００４２】
一実施形態では、ＶＭＭ１８はまた、ＶＭＭ１８に対応するプロセッサ状態を格納するために割り当てられたメモリの領域を有してもよい。ＶＭＲＵＮが実行されるときに、ＶＭＭ１８に対応するプロセッサ状態が領域に保存されてもよい。ゲストを終了してＶＭＭ１８に出るときに、ＶＭＭ１８が実行を続けることができるように、領域からのプロセッサ状態が領域から再ロードされてもよい。一実装では、例えば、プロセッサは、ＶＭＭ１８のアドレスを保存領域に格納するために、レジスタ（例えば、モデル固有レジスタ（ｍｏｄｅｌ  ｓｐｅｃｉｆｉｃ  ｒｅｇｉｓｔｅｒ）、すなわちＭＳＲ）を実装してもよい。
【００４３】
加えて、ＶＭＣＢ２２は、ゲストに対してイネーブルにされる横取りイベントを識別する横取り構成と、イネーブルにされた横取りイベントが検出される場合にゲストを終了するための機構を含んでもよい。一実施形態では、横取り構成は、プロセッサがサポートする各横取りイベントに対して１つの指示である、一組の横取り指示を含んでもよい。横取り指示は、プロセッサが対応するイベントを横取りするか否か（すなわち、別の観点では、横取りがイネーブルにされるか否か）を示してもよい。本明細書で用いられる場合のイベントは、ゲストにおいてイベントが起こることになればゲストにおいて「横取り」され、プロセッサはイベントの処理のためにゲストを終了する。一実施形態では、横取り構成は、２つの終了機構のうちのどちらが用いられるかを示す指示の第２の組を含んでもよい。他の実施形態は、２つよりも多い終了機構を定義してもよい。別の実施形態では、横取り構成は、イベントに対して第１の終了機構が用いられるべきか否かを示す、１つの横取りイベントにつき１つである横取り指示の第１の組と、イベントに対して第２の終了機構が用いられるべきか否かを示す、１つの横取りイベントにつき１つである横取り指示の第２の組とを備えてもよい。
【００４４】
一般に、終了機構は、（概して再始動可能な方法で）ゲスト実行を終了するため及び他のコードの実行を始めるためにプロセッサによって行われる動作を定義してもよい。一実施形態では、１つの終了機構は、少量のプロセッサ状態の保存と、Ｍｉｎｉｖｉｓｏｒのための状態のロードを含んでもよい。Ｍｉｎｉｖｉｓｏｒは、ゲスト物理アドレススペースで実行してもよく、比較的簡単な横取り処理を行ってもよい。別の終了機構は、ＶＭＭに出て、より多量のプロセッサ状態を保存し、及びＶＭＭのプロセッサ状態をロードしてもよい。したがって、横取りイベントは、イベントに応じて異なる命令コードによって処理されてもよい。加えて、幾つかの実施形態では、実行するのにあまり時間がかからない可能性があり性能を改善する可能性がある「より軽いウエイトの」終了機構を通じて比較的簡単な横取り処理が処理されてもよい。終了するのに「より重いウエイトの」機構が用いられた後で、より複雑な処理がＶＭＭで行われてもよい。したがって、この実施形態では、ＶＭＭ１８は、ゲスト１０Ａ〜１０Ｎが内部的に処理することをＶＭＭ１８が望まないイベントを横取りするようにプロセッサを構成してもよく、且つまた、それに対して終了機構を用いるようにプロセッサを構成してもよい。イベントは、命令（すなわち、命令を実行する代わりに命令を横取りする）、割込み、例外、及び／又はゲスト実行中に起こる可能性があるあらゆる他の所望のイベントを含んでもよい。
【００４５】
一実施形態では、ＶＭＣＢ２２は、ＶＭＣＢ２２のロードによりプロセッサに或るアクションを行わせる可能性がある他の制御ビットをさらに含んでもよい。例えば、制御ビットは、プロセッサにおけるＴＬＢをフラッシュする指示を含んでもよい。他の制御ビットは、ゲストに対する実行環境（例えば割込み処理モード、ゲストに対するアドレススペース識別子など）を指定してもよい。何故ゲストが終了したかなどを記述する終了コードを通信するために、さらに他の制御ビットが用いられてもよい。
【００４６】
一般に、「ゲスト」は、コンピュータ・システム５における実行のために仮想化されるべき任意の１つ又は複数のソフトウェアプログラムを備えてもよい。ゲストは、特権付きモードで実行する少なくとも幾つかのコードを含んでもよく、したがって、ゲストを実行しているコンピュータ・システムに対するフル制御を有することを期待する。既述のように、ゲスト１０Ａは、ゲストがゲストＯＳ１２を含む例である。ゲストＯＳ１２は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．（ワシントン州レッドモンド）から入手可能なＷｉｎｄｏｗｓ（登録商標）  ＯＳ、Ｌｉｎｕｘ（登録商標）のような任意のＵＮＩＸ（登録商標）型オペレーティング・システム、ＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）からのＡＩＸ、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．（カリフォルニア州サンタクララ）からのＳｏｌａｒｉｓ、Ｈｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｃｏｍｐａｎｙ（カリフォルニア州パロアルト）からのＨＰ−ＵＸなどのうちのいずれかのような任意のＯＳであってもよい。ゲスト１０Ｎは、非ＯＳ特権付きコード１６を備えるゲストの例である。
【００４７】
本明細書で１０Ｎのような参照番号に用いられるときの文字「Ｎ」は、該参照番号をもつ任意の数の要素（例えば１つのゲストを含む任意の数のゲスト１０Ａ〜１０Ｎ）を概して示すように意図されることに留意されたい。加えて、文字「Ｎ」を使用する異なる参照番号（例えば１０Ｎ及び１４Ｎ）は、他の方法で言及されない限り、同じ数の異なる要素が提供されることを示すように意図されない（例えば、ゲスト１０Ａ〜１０Ｎの数は、アプリケーション１４Ａ〜１４Ｎの数とは異なる場合がある）。
【００４８】
ホストハードウェア及び割込み仮想化
ここで図２に移ると、ホストハードウェア２０の一実施形態を例証するブロック図が示される。例証された実施形態では、ホストハードウェア２０は、複数のプロセッサ３０Ａ〜３０Ｂ、それぞれの高度なプログラム可能割込みコントローラ（Ａｄｖａｎｃｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ）（ＡＰＩＣ）３２Ａ〜３２Ｂ、ブリッジ３６（メモリコントローラ４２及び入力／出力（Ｉ／Ｏ）メモリ管理ユニット（ＩＯＭＭＵ）４０を含み、ＩＯＭＭＵ４０はデバイス割込みマネージャ３８をさらに含む）、複数のインターフェース回路（ＩＦ）４４Ａ〜４４Ｃ、メモリインターフェース回路（ｍｅｍｏｒｙ  ｉｎｔｅｒｆａｃｅ  ｃｉｒｃｕｉｔ）（ＭＩＦ）４６、Ｉ／Ｏ  ＡＰＩＣ（以下、ＩＯＡＰＩＣ）５０を含んでもよい随意的なブリッジ４８、周辺デバイス５２Ａ〜５２Ｂ（そのうち幾つかはＩＯＡＰＩＣ５４のようなＩＯＡＰＩＣを含んでもよい）、及びメモリ５６を含む。プロセッサ３０Ａ〜３０Ｂは、図２に例証されるように、ブリッジ３６に及びそれぞれのＡＰＩＣ３２Ａ〜３２Ｂに結合される。ＡＰＩＣ３２Ａ〜３２Ｂは、ブリッジ３６に結合され、これはインターフェース回路４４Ａ〜４４Ｃ及びメモリインターフェース回路４６に結合される。メモリインターフェース回路４６はメモリ５６に結合され、インターフェース回路４４Ａはブリッジ４８に結合され、これは周辺デバイス５２Ａ〜５２Ｂに結合される。
【００４９】
例証された実施形態では、各プロセッサ３０Ａ〜３０Ｂは、関連付けられたＡＰＩＣ３２Ａ〜３２Ｂを有する。この実施形態では、割込みは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州サンタクララ）によって記述されるＡＰＩＣ仕様に従ってホストハードウェア２０において通信されてもよい。例えば、参照によりその全体が本明細書に組み込まれる、Ｉｎｔｅｌ６４及びＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル（Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ）、Ｖｏｌｕｍｅ３Ａ：システムプログラミングガイド（Ｓｙｓｔｅｍ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｇｕｉｄｅ）、Ｐａｒｔ１、Ｃｈａｐｔｅｒ１０（２００９年１２月）を参照されたい。この仕様では、各プロセッサは、（プロセッサ自体から、他のプロセッサから、内部ＡＰＩＣ割込みソースから、及び周辺デバイスに関連付けられたＩＯＡＰＩＣから）割込みを受ける関連付けられたローカルＡＰＩＣを有する。ローカルＡＰＩＣは、保留中の割込みに優先順位をつけ、プロセッサ上で進行中の別の割込みよりも高い優先度である場合に及び／又はプロセッサの現在のタスクよりも高い優先度である場合に割込みをプロセッサに送信する。本明細書では例としてＡＰＩＣ仕様が用いられることになるが、他の実施形態では任意の割込み管理仕様が用いられてもよい。
【００５０】
図２の実施形態では、ＡＰＩＣ３２Ａ〜３２Ｂは、プロセッサのホスト割込み（すなわち、ホストによって処理されるべき割込み）のためのローカルＡＰＩＣであってもよい。他方では、ゲスト割込みのためのローカル割込みコントローラは、ハードウェアＡＰＩＣとしてインスタンス化されない場合がある。代わりに、ゲストＡＰＩＣ（又はより簡潔に、ｇＡＰＩＣ）がハードウェアサポート及びＶＭＭ１８を介してエミュレートされてもよい。具体的には、各ｇＡＰＩＣは、ｇＡＰＩＣ状態データ構造５８に格納されるその状態を有してもよい。ｇＡＰＩＣデータ構造５８は、コンピュータ・システム５においてアクティブな各ゲストの各ｖＣＰＵに対するｇＡＰＩＣ状態エントリを含んでもよい。一実施形態では、ｇＡＰＩＣ状態エントリは、対応するｇＡＰＩＣ状態のためのデータのページであってもよい。こうした実施形態では、ｇＡＰＩＣ状態データ構造５８は、簡単にページのコレクションであってもよい。ページは、メモリシステムにおいて互いに近くに位置している必要はなく、すなわち、種々のｇＡＰＩＣのｇＡＰＩＣ状態データを格納することに加えて、互いとの任意の他の関係性を有する。他の実施形態は、より大きい又は小さいｇＡＰＩＣ状態エントリ及び／又は他のデータ構造を用いてもよい。ゲストは、ゲストがプロセッサ上で現在実行中である（例えば、ゲストに対するプロセッサ上でＶＭＲＵＮ命令が実行されており、ゲスト終了が発生していない）場合、又はゲストが終了し、ＶＭＭ１８が実行中であるが、ゲストがプロセッサ上で再び実行されることを期待される場合に、そのプロセッサ上でアクティブであってもよい。
【００５１】
ＶＭＭ１８がプロセッサ３０Ａ〜３０Ｂ上でゲスト／ｖＣＰＵをスケジュール設定するときに、ＶＭＭ１８は、ｖＣＰＵのＶＭＣＢ２２からプロセッサ３０Ａ〜３０Ｂに（及びより詳細にはプロセッサのゲスト割込み制御ユニット３４Ａ〜３４Ｂに）ポインタをロードしてもよい。ポインタは、対応するｇＡＰＩＣ状態エントリをｇＡＰＩＣ状態データ構造５８の中で位置付けてもよい。したがって、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、ｖＣＰＵに対するｇＡＰＩＣ状態を位置付けてもよく、デバイス割込みマネージャ３８によって記録されている割込みを検出してもよい。一実施形態では、プロセッサ３０Ａ〜３０Ｂは、ゲスト割込み送達機構を実装してもよい。例えば、プロセッサ３０Ａ〜３０Ｂは、ゲスト割込み（例えば、割込み要求、割込みベクトルなど）と共にプログラムされてもよい１つ又は複数のレジスタを含んでもよい。仮想割込みは、プロセッサ３０Ａ〜３０Ｂ上で実行するソフトウェアに割り込むために、真の割込みソース（例えばプロセッサ３０Ａ〜３０Ｂへの入力ピン）と論理的に組み合わされてもよい。プロセッサ３０Ａ〜３０Ｂは、割込みをサービスするために割込みベクトルによって指定される割込みハンドラを実行してもよい。他の実施形態は、他のゲスト割込み送達機構を実装してもよい。
【００５２】
一実施形態では、デバイス割込みマネージャ３８は、ゲストを対象とするデバイス割込みに対するゲスト割込み状態を更新し、対応するＡＰＩＣ３２Ａ〜３２Ｂにホスト割込みを送達するように構成されてもよい。特に、一実施形態では、デバイス割込みマネージャ３８は、ブリッジ３６で受信される各ゲスト割込みをｇＡＰＩＣ状態データ構造５８に記録するように構成されてもよい。ゲスト割込みの受信に応答して、デバイス割込みマネージャ３８は、割込みの対象にされたゲスト／ｖＣＰＵに対するｇＡＰＩＣ状態データ構造５８におけるｇＡＰＩＣ状態を更新するように構成されてもよい。デバイス割込みマネージャ３８は、一実施形態ではゲストがアクティブであるか否かから独立してｇＡＰＩＣ状態を更新するように構成されてもよい。１つ以上の対象を有するマルチキャスト及びブロードキャスト割込みでは、デバイス割込みマネージャ３８は、各割込み宛先に対するｇＡＰＩＣ状態データ構造５８におけるｇＡＰＩＣ状態を更新するように構成されてもよい。代替的に、デバイス割込みマネージャ３８は、これらの複数の宛先割込みに関してＶＭＭ１８に頼るように構成されてもよい。デバイス割込みマネージャ３８は、こうした実施形態ではＶＭＭ１８にアクセス可能な記憶域に割込みをログ記録するように構成されてもよく、メッセージを処理するのにＶＭＭ１８に信号送信するように構成されてもよい。
【００５３】
デバイス割込みマネージャ３８は、図２にはメモリに格納された状態で示されるデバイステーブル６２、割込み再マッピング・テーブル６４、及びＡＰＩＣ  ＩＤテーブル６０を用いて、周辺デバイスからのデバイス割込みのための対象にされたプロセッサ又はｖＣＰＵを判定してもよい。具体的には、デバイス割込みマネージャ３８は、ＩＯＡＰＩＣ５０及び５４からのデバイス割込み要求に含まれる情報に応答してデバイステーブル６２及び割込み再マッピング・テーブル６４にアクセスするように構成されてもよい。デバイステーブル６２は、各周辺デバイス５２Ａ〜５２Ｂのためのエントリを含んでもよい（及び、周辺デバイスが結合される周辺インターフェースに対する１つよりも多い識別子を含む、周辺デバイスのための複数のエントリを含んでもよい）。所与の周辺デバイスのためのデバイステーブルエントリは、割込み再マッピング・テーブル６４へのポインタを含んでもよく、且つまた、ＡＰＩＣ  ＩＤテーブル６０のうちの１つへの少なくとも１つのＡＰＩＣ  ＩＤテーブルポインタを含んでもよい。ＡＰＩＣ  ＩＤテーブル６０は、ゲストにおける各ＡＰＩＣ  ＩＤのためのエントリを含んでもよく、該ＡＰＩＣ  ＩＤを有するｖＣＰＵ／ｇＡＰＩＣに対応するｇＡＰＩＣ状態エントリへのポインタを格納してもよい。割込みを、そのオリジナルの宛先及び／又は割込みベクトルから新しい宛先及び／又は割込みベクトルにリダイレクトするために、割込み再マッピング・テーブル６４が用いられてもよい。したがって、割込み再マッピング・テーブル６４は、割込みに対する宛先ＩＤを含んでもよい。宛先ＩＤは、ＡＰＩＣ  ＩＤであり、ゲスト割込みに対する更新されるべきｇＡＰＩＣ状態エントリを位置付けるために、デバイステーブル６２からのＡＰＩＣ  ＩＤテーブルポインタによって示されるＡＰＩＣ  ＩＤテーブル６０へのインデックスとして用いられてもよい。割込み再マッピング・テーブル６４からの割込みベクトルに基づいて、デバイス割込みマネージャは、識別されたｇＡＰＩＣ状態エントリに割込みを記録してもよい。割込み再マッピング・テーブル６４はまた、デバイスがゲスト又はホストのどちらに割り当てられるかの指示を含んでもよい。デバイスがホストに割り当てられる場合、割込みは、ＡＰＩＣ３２Ａ〜３２Ｂに送達されるべきホスト割込みであり、ｇＡＰＩＣ状態データ構造５８は更新されなくてもよい。テーブル６０、６２、及び６４の一実施形態の付加的な詳細がさらに後述される。
【００５４】
ｇＡＰＩＣ状態データ構造５８は、例証された実施形態ではメモリ５６に格納されるように示されるが、その一部は、幾つかの実施形態ではデバイス割込みマネージャ３８及び／又はブリッジ３６にアクセス可能なキャッシュによってキャッシュされてもよい。加えて又は代替的に、１つ又は複数のｇＡＰＩＣ状態エントリに対する専用メモリがブリッジ３６に実装されてもよい。
【００５５】
ＡＰＩＣ割込み機構では、各プロセッサ（そのローカルＡＰＩＣを通じて）は、物理ＡＰＩＣ  ＩＤ及び論理ＡＰＩＣ  ＩＤを有してもよい。物理ＡＰＩＣ  ＩＤは、ＡＰＩＣ  ＩＤレジスタに格納される。物理ＡＰＩＣ  ＩＤは、物理送達モードの割込みによって示される物理ＡＰＩＣ  ＩＤと１対１ベースでマッチングされる。論理ＡＰＩＣ  ＩＤは、ローカルＡＰＩＣの論理宛先レジスタに格納される。論理ＡＰＩＣ  ＩＤは、クラスタＩＤ及びローカルＡＰＩＣ  ＩＤを有し、この場合、ローカルＡＰＩＣ  ＩＤは、典型的にワン・ホット・ビットベクトルである。論理送達モードの割込みは、割込みを１つ又は複数のローカルＡＰＩＣにクラスタで送達するために、ＡＰＩＣ  ＩＤのベクトル部分に任意のセットビットを含んでもよい。したがって、論理ＡＰＩＣ  ＩＤのマッチングは、クラスタＩＤを比較すること、及びローカルＡＰＩＣにおけるワン・ホット・ビットベクトルのセットビットと同じ位置でローカルＡＰＩＣ  ＩＤベクトルにおけるセットビットを検出することを含んでもよい。別の観点では、論理送達モードの割込みにおけるローカルＡＰＩＣ  ＩＤベクトルは、ローカルＡＰＩＣのローカルＡＰＩＣ  ＩＤベクトルと論理的にＡＮＤでつながれてもよく、結果がゼロではなく且つクラスタＩＤとマッチする場合は、ローカルＡＰＩＣは論理割込みの対象である。論理ＡＰＩＣ  ＩＤは、本明細書ではより簡潔に論理ＩＤと呼ばれる場合があり、同様に、物理ＡＰＩＣ  ＩＤは、本明細書ではより簡潔に物理ＩＤと呼ばれる場合がある。割込みに関連付けられた所与のＩＤ（論理又は物理）は、割込みの宛先ＩＤと呼ばれる場合がある。割込みのための対応する送達モードは、割込みの宛先ＩＤを論理又は物理のいずれかとして識別してもよい。
【００５６】
ＡＰＩＣ  ＩＤテーブル６０は、所与のゲストにおける論理ＡＰＩＣ  ＩＤに対する論理ＡＰＩＣ  ＩＤテーブルと、所与のゲストにおける物理ＡＰＩＣ  ＩＤに対する物理ＡＰＩＣ  ＩＤテーブルとを含んでもよい。ＡＰＩＣ  ＩＤテーブルは、既述のようにＡＰＩＣ  ＩＤをｇＡＰＩＣ状態ポインタにマッピングしてもよい。一実施形態では、論理ＡＰＩＣ  ＩＤテーブルは、論理ＩＤを物理ＩＤにマッピングしてもよく、これは、物理ＩＤテーブルを通じてｇＡＰＩＣ状態ポインタにマッピングされてもよい。他の実施形態は、同様に論理ＩＤからｇＡＰＩＣ状態ポインタに直接マッピングしてもよい。
【００５７】
一実施形態では、ＡＰＩＣ  ＩＤテーブル６０は、ｖＣＰＵが走っているか否かの指示を含んでもよい。ｖＣＰＵが現在走っている場合、割込みは、ｖＣＰＵを実行しているプロセッサ３０Ａ〜３０Ｂによって（例えば、新しい割込みの記録の更新に関するｇＡＰＩＣ状態エントリの監視を通じて、又はデバイス割込みマネージャ３８からのメッセージを介して）検出されてもよい。したがって、割込みは、走っているゲストに送達されてもよい。しかしながら、ゲストが走っていない（又はアクティブではない）場合、割込みは、送達を遅延されてもよい。一実施形態では、ＩＯＭＭＵは、割込みをログ記録してもよい。ＶＭＭ１８は、ログの中の割込みを検出してもよく、スケジューリングのために対象にされたｖＣＰＵに優先順位をつけてもよい。ｖＣＰＵは、現在ハードウェア・プロセッサ上で実行される状態にある場合に走ってもよい。
【００５８】
所与のプロセッサ３０Ａ〜３０Ｂに対するＡＰＩＣ３２Ａ〜３２Ｂは、プロセッサへの任意のインターフェースを有してもよい。例えば、ローカルＡＰＩＣとそれらのそれぞれのプロセッサとの間で用いられる任意のインターフェースが用いられてもよい。各ＡＰＩＣは、サービスのために割込みが送達されているプロセッサに独立して信号送信するように構成されてもよい。プロセッサがゲストを実行しており且つＡＰＩＣが割込みを信号送信する場合、プロセッサは、ホスト割込みを処理するためにゲストを終了してＶＭＭ１８に出るように構成されてもよい。プロセッサがゲストを実行していない場合、プロセッサは、ホスト実行に割り込み、ＡＰＩＣによって信号送信された割込みに応答してホスト割込みハンドラに分岐するように構成されてもよい。
【００５９】
ＡＰＩＣ３２Ａ〜３２Ｂは、割込みを受信するためにブリッジ３６に結合される。ＡＰＩＣ３２Ａ〜３２Ｂに割込みを輸送するのに任意のインターフェースが用いられてもよい。例えば、ＡＰＩＣ割込みの輸送のために実装される任意のインターフェースが用いられてもよい。一実施形態では、割込みメッセージを輸送するために、プロセッサ３０Ａ〜３０Ｂとの間で他の動作を通信するのに用いられるのと同じ通信機構（例えば、プロセッサ３０Ａ〜３０Ｂによって開始されるメモリ読出し／書込み動作、キャッシュコヒーレンシーメンテナンスのためのプローブなど）が用いられてもよい。別の観点では、ＡＰＩＣ３２Ａ〜３２Ｂの結合は、ブリッジ３６へのプロセッサ３０Ａ〜３０Ｂの結合と共有されてもよい。代替的に、プロセッサ３０Ａ〜３０Ｂは、ＡＰＩＣ３２Ａ〜３２ＤがＡＰＩＣ「３ワイヤインターフェース」を用いるような場合にブリッジ３６への別個のパスを有してもよい。割込みメッセージは、送信されている割込みと割込みの宛先とを識別する任意のインターフェース上の任意の通信であってもよい。例えば、割込みは、関連付けられた割込みベクトルを有してもよく、割込みベクトルは、割込みメッセージの一部であってもよい。割込みメッセージはまた、宛先ＩＤ（例えば、論理又は物理ＡＰＩＣ  ＩＤ）を含んでもよい。
【００６０】
ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、対応するｇＡＰＩＣ状態エントリに記録されているゲスト割込みを検出するように構成されてもよく、且つ前述のように割込みを送達してもよい。加えて、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、ゲスト／ｖＣＰＵ実行中にそれら自身のｇＡＰＩＣへのプロセッサ３０Ａ〜３０Ｂのアクセスを検出してもよく、且つＡＰＩＣ３２Ａ〜３２Ｂにアクセスする代わりにアクセスをｇＡＰＩＣ状態エントリにおけるメモリ読出し／書込みに変換してもよい。ゲスト割込み制御ユニット３４Ａ〜３４Ｂはまた、幾つかの実施形態では、同様にｇＡＰＩＣの幾らかのエミュレーションを実装してもよい。例えば、性能への多大な影響を有する動作が実装されてもよい。ゲスト割込み制御ユニット３４Ａ〜３４Ｂによって実装されないエミュレーションでは、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、ＶＭＭ１８におけるエミュレーションのためにゲストを終了してもよい。幾つかのアクセスはエミュレーションを要求しない場合がある（例えば、ほとんどの読出しは、データを読み出すこと以外の影響を有さず、そのためｇＡＰＩＣ状態エントリからのデータの読出しを超えるエミュレーションは必要とされない）。ｇＡＰＩＣ状態エントリにおける対応するロケーションを更新することによって、ＡＰＩＣにおける如何なる副作用も生じない書込みもまた完了される可能性がある。
【００６１】
一実施形態では、ゲスト割込み制御ユニット３４Ａ〜３４Ｂにおいてエミュレートされる動作は、ゲスト内のＩＰＩの開始、タスク優先度レジスタ（ｔａｓｋ  ｐｒｉｏｒｉｔｙ  ｒｅｇｉｓｔｅｒ）（ＴＰＲ）へのアクセス、及び割込みの終わり（ｅｎｄ  ｏｆ  ｉｎｔｅｒｒｕｐｔ）（ＥＯＩ）レジスタへのアクセスを含んでもよい。他の実施形態は、ゲスト割込み制御ユニット３４Ａ〜３４Ｂにおける動作の異なるサブセットを実装してもよい。先述のように、幾つかの実施形態では、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、主としてマイクロコードに実装されてもよい。したがって、ゲスト実行中にｇＡＰＩＣへのアクセスがマイクロコード実行を引き起こしてもよい。加えて、デバイス割込みマネージャ３８によるｇＡＰＩＣ状態エントリへの更新（プロセッサ上で実行されているｖＣＰＵに対する）は、マイクロコード実行を引き起こしてもよい。ＶＭＭ１８に出る命令では、終了は、命令をリタイアした（すなわち、書き込みのためにｇＡＰＩＣ状態エントリへの更新が完了した又はｇＡＰＩＣ状態エントリからのデータ読出しが読出しのために対象レジスタに書き込まれた）後で又は命令をリタイアする前に行われてもよい。命令をリタイアした後でＶＭＥｘｉｔを開始することは、トラッピングと呼ばれてもよい。幾つかの場合には、対応する命令は、リタイアが認められる場合に取り返しのつかない変化を引き起こす可能性がある。したがって、こうした命令は、命令のフォールトと呼ばれる、ＶＭＥｘｉｔの前にリタイアすることを許されない場合がある。
【００６２】
ＩＯＭＭＵ４０は、前述のようにデバイス割込みマネージャ３８を含む。加えて、ＩＯＭＭＵ４０は、Ｉ／Ｏにより開始されるメモリ動作（例えば、周辺デバイス５２Ａ〜５２Ｂから生じる又は周辺デバイス５２Ａ〜５２Ｂに代わってＤＭＡコントローラによるメモリ読出し／書込み動作）のための仮想対物理アドレスマッピングを行うように構成されてもよい。翻訳動作の一部として、ＩＯＭＭＵ４０は、デバイステーブル６２及び随意的に割込みリダイレクト・テーブル６４にアクセスするように構成されてもよい。各周辺デバイス５２Ａ〜５２Ｂに対するデバイステーブルエントリは、メモリ読出し／書込み動作のメモリアドレスを翻訳するためのＩ／Ｏページテーブルへのページテーブル・ポインタを含んでもよい（図示せず）。
【００６３】
メモリコントローラ４２は、プロセッサ３０Ａ〜３０Ｂによって発行されるメモリ動作（例えば、命令フェッチ、ロード／格納データアクセス、翻訳のためのプロセッサページテーブルアクセスなど）、デバイス割込みマネージャ３８からのメモリ動作（例えば、ｇＡＰＩＣ状態データ構造５８を読み出す／更新すること、及び／又はテーブル６０、６２、及び６４にアクセスすること）、ＩＯＭＭＵ４０（例えば、Ｉ／Ｏページテーブル、デバイステーブル６２、及び割込み再マッピング・テーブル６４にアクセスすること）、及び（幾つかの実施形態において）インターフェース回路４４Ａ〜４４Ｃから受信されたメモリ動作を受信するために結合されてもよい。メモリコントローラ４２は、メモリ動作を順序付ける、及びメモリ動作を行うためにメモリ５６と通信するように構成されてもよい。メモリインターフェース回路４６は、メモリ５６への物理レベルアクセスを行ってもよい。
【００６４】
メモリ５６は、あらゆるタイプのメモリを備えてもよい。例えば、メモリ５６は、動的ランダムアクセスメモリ（ＤＲＡＭ）、例えばシンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ＤＤＲ  ＳＤＲＡＭのモバイルバージョン（ｍＤＤＲ３など）及び／又は低出力バージョン（ＬＰＤＤＲ２など）を含む倍データレート（ｄｏｕｂｌｅ  ｄａｔａ  ｒａｔｅ）（ＤＤＲ、ＤＤＲ２、ＤＤＲ３など）ＳＤＲＡＭ、ＲＡＭＢＵＳ  ＤＲＡＭ、静的ＲＡＭなどを備えてもよい。メモリ５６は、シングル・インライン・メモリ・モジュール（ＳＩＭＭ）、デュアル・インライン・メモリ・モジュール（ＤＩＭＭ）などのような複数のメモリチップを備える１つ又は複数のメモリモジュールを含んでもよい。
【００６５】
この実施形態ではデバイス割込みマネージャ３８、ＩＯＭＭＵ４０、及びメモリコントローラ４２を含むことに加えて、ブリッジ３６はまた、プロセッサ３０Ａ〜３０Ｂと、ＡＰＩＣ３２Ａ〜３２Ｂと、インターフェース回路４４Ａ〜４４Ｄに結合されたデバイスとの間で通信するために他の通信機能を含んでもよい。例えば、例証された実施形態では、別のブリッジ４８がインターフェース回路４４Ａに結合されてもよく、インターフェース回路４４Ａによって用いられるプロトコルと周辺デバイス５２Ａ〜５２Ｂによって用いられるプロトコルとの間の通信を橋渡しするように構成されてもよい。一実施形態では、インターフェース回路４４Ａ〜４４Ｃは、例えば前述のＨＴインターフェースを実装してもよく、ブリッジ４８は、ＨＴからＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）インターフェースのような別のインターフェースに橋渡しをしてもよい。周辺デバイス５２Ａ〜５２Ｂは、こうした実施形態ではＰＣＩｅデバイスであってもよい。ブリッジ４８はまた、他のインターフェースと橋渡しをするように構成されてもよく、又は他のインターフェースと橋渡しをするために別のブリッジがブリッジ４８に結合されてもよい。任意の１つ又は複数の周辺インターフェースが用いられてもよい。加えて、周辺デバイス５２Ａ〜５２Ｂは、ＨＴインターフェースと直接結合するように構成されるＨＴ周辺デバイスを備えてもよい。こうした周辺デバイスは、ブリッジ４８を必要としない場合がある。
【００６６】
一実施形態では、ブリッジ４８及び／又は周辺デバイス５２Ａ〜５２Ｂのうちの１つ又は複数は、ＩＯＡＰＩＣ（図２の５０及び５４）を含んでもよい。ＩＯＡＰＩＣは、周辺デバイスから割込み要求を受信することを担当してもよく、（メモリのｇＡＰＩＣ状態データ構造５８に記録するために）ＡＰＩＣ３２Ａ〜３２Ｂ及びデバイス割込みマネージャ３８に割込み要求を送信するのに割込みメッセージを生成する。
【００６７】
前述のように、一実施形態では、インターフェース回路４４Ａ〜４４Ｃは、ＨＴインターフェース上で通信するように構成されてもよい。インターフェース回路４４Ａ〜４４Ｃは、ＨＴを用いて周辺デバイス／ブリッジと通信するように構成されてもよい。加えて、幾つかの実施形態では、インターフェース回路４４Ａ〜４４Ｃは、プロセッサ、ＡＰＩＣなどと共に他のノードに結合されるように構成されてもよい。こうした実施形態では、ブリッジ３６は、前述の回路に加えてコヒーレンス管理回路を含んでもよい。
【００６８】
プロセッサ３０Ａ〜３０Ｂは、任意の命令セットアーキテクチャを実装してもよく、且つ命令セットアーキテクチャで定義される命令を実行するように構成されてもよい。プロセッサ３０Ａ〜３０Ｂは、スーパーパイプライン式、スーパースケーラ、及び／又はこれらの組合せ、イン・オーダー又はアウト・オブ・オーダー実行、投機的実行などのような任意のマイクロアーキテクチャを含んでもよい。プロセッサ３０Ａ〜３０Ｂは、必要に応じてマイクロコーディング技術を実装してもよいし又は実装しなくてもよい。
【００６９】
周辺デバイス５２Ａ〜５２Ｂは、任意のタイプの周辺デバイスを備えてもよい。周辺デバイス５２Ａ〜５２Ｂは、磁気ドライブ、ソリッドステートドライブ、又は光ディスクドライブのような記憶装置、フラッシュメモリのような不揮発性メモリデバイスなどを含んでもよい。周辺デバイス５２Ａ〜５２Ｂは、ユーザＩ／Ｏデバイス（キーボード、マウス、ディスプレイ、音声入力など）のようなＩ／Ｏデバイス、ネットワーキングデバイス、ユニバーサル・シリアル・バス（ＵＳＢ）又はＦｉｒｅｗｉｒｅのような外部インターフェースデバイスなどを含んでもよい。
【００７０】
例証された実施形態では、プロセッサ３０Ａ〜３０Ｂ、ブリッジ３６、ＡＰＩＣ３２Ａ〜３２Ｂ、インターフェース回路４４Ａ〜４４Ｃ、及びメモリインターフェース回路４６は、単一の半導体基板上に集積回路６６として集積されてもよい。他の実施形態は、必要に応じて異なる量の集積回路及びディスクリート回路を実装してもよい。プロセッサ、ＡＰＩＣ、インターフェース回路、周辺デバイス、ブリッジなどのような様々な数のコンポーネントが図２で例証されるが、他の実施形態は、必要に応じて任意の数の１つ又は複数の各コンポーネントを実装してもよいことに留意されたい。
【００７１】
他の実施形態では、ＩＯＭＭＵ４０及びデバイス割込みマネージャ３８の場所は変化してもよい。例えば、この一方又は両方が、ブリッジ４８に、周辺デバイス５２Ａ〜５２Ｂに、ブリッジに結合される別のブリッジなどにあってもよい。
【００７２】
例証された実施形態では、各ＡＰＩＣ３２Ａ〜３２Ｂは、図２に例証されるように特定のプロセッサ３０Ａ〜３０Ｂに関連付けられる。したがって、所与の割込みコントローラは、この実施形態では対応するプロセッサ３０Ａ〜３０Ｂに専用にされる。より詳細には、図２では、ＡＰＩＣ３２Ａはプロセッサ３０Ａに専用にされ、ＡＰＩＣ３２Ｂはプロセッサ３０Ｂに専用にされる。割込みコントローラは、その対応するプロセッサに任意の方法で割込みを信号送信してもよい。一般に、信号送信は、割込みが必要とされることを示してもよい。信号送信は、割込みベクトルを含んでもよく、又は割込みベクトルは、割込みが送達された後で実行されるソフトウェアによって読み出されてもよい。割込みの送達は、一実施形態では、プロセッサ及び割込みを受け付けるプロセッサへの信号送信を指す場合がある。割込みのサービスは、デバイスの割込みに必要な動作を行うために割込みベクトルに関連付けられた割込みサービスルーチンを実行することを指す場合がある。
【００７３】
ここで図３に移ると、一実施形態での周辺デバイスからｇＡＰＩＣへの割込みの進行を例証し且つまたゲスト内のＩＰＩを例証するブロック図が示される。例証された実施形態では、周辺デバイス５２Ａは、割込みが望まれることを判定する。周辺デバイス５２Ａ内のＩＯＡＰＩＣ５４（図２参照）は、周辺デバイス５２Ａに対する割込みメッセージを発生させてもよい。具体的には、ＩＯＡＰＩＣ５４は、所望の割込み（例えば、周辺デバイス５２Ａに必要とされるサービスに基づいて、周辺デバイス５２Ａが複数の機能を実装する場合に割込みを信号送信する特定の機能など）に対応する割込みベクトルを発生させてもよい。同様に、ＩＯＡＰＩＣ５０は、それら自身のＩＯＡＰＩＣを実装しない周辺デバイス５２Ｂのような周辺デバイスに対する割込みメッセージを発生させてもよい。割込みベクトルは、割込み通信の一部であり、割込みソースを識別すること、割込みに優先順位をつけることなどのために用いられてもよい。幾つかの場合には、割込みベクトルは、ＩＯＭＭＵ４０によって再マッピングされてもよく、そのため割込みベクトルは図３では「オリジナルベクトル」として例証される。周辺デバイス５２Ａは、ＩＯＭＭＵ４０に割込みメッセージを送信してもよい（矢印Ａ）。この実施形態では、割込みは、例えばＰＣＩｅ仕様で定義される場合の、メッセージにより信号送信される割込み（ｍｅｓｓａｇｅ−ｓｉｇｎａｌｌｅｄ  ｉｎｔｅｒｒｕｐｔ）（ＭＳＩ）の形態で送信されてもよい。他の実施形態は、任意の所望の方法で割込みを送信してもよい。一般に、送信は、割込み、その送達モード（例えば論理又は物理）、及び割込みの宛先ＩＤ（ＤｅｓｔＩＤ）を識別してもよい。
【００７４】
ＩＯＭＭＵ４０はＭＳＩを受信してもよい。ＭＳＩは、周辺デバイスの識別子を含む。例えば、ＰＣＩプログラミングモデルを実装するインターフェースは、バスナンバー及び該バス上のデバイスナンバーをもつ各デバイスを識別してもよい（複数のＰＣＩインターフェースが階層的な形態及び／又は並列な形態でシステムに存在することを可能にする）。デバイスは、物理デバイス上の別個の仮想デバイス又はデバイス上の動作のパーティション分割であってもよい複数の「機能」を有してもよい。識別子は、機能ナンバーも含んでもよい。したがって、この実施形態では、識別子は、バス−デバイス−機能（Ｂｕｓ−Ｄｅｖｉｃｅ−Ｆｕｎｃｔｉｏｎ）、すなわちＢＤＦ（登録商標）と呼ばれる場合がある。ＩＯＭＭＵ４０（及びより詳細には、この実施形態ではデバイス割込みマネージャ３８）は、ＢＤＦ（登録商標）（矢印Ｂ）を用いてデバイステーブル６２へのインデックスを作成してもよく、且つ周辺デバイス５２Ａに対応するデバイステーブルエントリを識別してもよい。エントリは、ＡＰＩＣ  ＩＤテーブルポインタ（矢印Ｃ）を含んでもよい。この実施形態では、デバイステーブルエントリはまた、割込み再マッピング・テーブルポインタ（ＩＲＴＰ）を含んでもよく、これは、デバイスに対応する割込み再マッピング・テーブル６４を識別してもよい（矢印Ｃ１）。割込み再マッピング・テーブル６４は、オリジナルの割込みベクトルによってインデックスを作成されてもよく、且つ出力ベクトル及び割込みに対する宛先ＩＤ（ＤｅｓｔＩＤ、例えば、論理又は物理ＡＰＩＣ  ＩＤ）を提供してもよい（矢印Ｃ２）。加えて、ゲスト／ホスト指示が出力されてもよい（Ｇ／Ｈ）。一実施形態では、Ｇ／Ｈ指示は、設定されたときに割込みがゲストによってサービスされるべきであることを示し、且つクリアされたときに割込みがホストによってサービスされるべきであることを示すビットであってもよい。他の実施形態は、状態の設定及びクリアと反対の意味を用いてもよく、又は指示のための他のエンコーディングを用いてもよい。
【００７５】
Ｇ／Ｈ指示がホストを示す場合、デバイス割込みマネージャ３８は、ＡＰＩＣ３２Ａ〜３２Ｂに割込みメッセージを送信してもよく、割込みは、ＡＰＩＣ仕様に従って処理されてもよい（矢印Ｆ）。他方では、Ｇ／Ｈ指示がゲストを示す場合、デバイス割込みマネージャ３８は、物理ＡＰＩＣ  ＩＤテーブル６０Ａ（デバイステーブル６２によって提供されるＡＰＩＣ  ＩＤテーブルポインタによって指し示されるテーブル）へのインデックス（矢印Ｄ）として宛先ＩＤを用いてもよい。物理ＡＰＩＣ  ＩＤテーブル６０Ａは、更新されるべきｇＡＰＩＣ状態エントリを識別するｇＡＰＩＣ状態ポインタを出力してもよい。デバイス割込みマネージャ３８は、ｇＡＰＩＣ状態に割込みを書き込んでもよい（ｇＡＰＩＣ状態の更新、図３の矢印Ｅ）。物理ＡＰＩＣ  ＩＤテーブル６０Ａはまた、ｖＣＰＵに対する指示をＩｓ＿Ｒｕｎｎｉｎｇ（ＩＲ）として供給してもよい。ｖＣＰＵが走っている場合、割込みは、かなり迅速に送達されてもよい。ｖＣＰＵが走っていない場合、デバイス割込みマネージャ３８は、ＶＭＭ１８に対する割込みをログ記録してもよく、これは割込みを処理するためにｖＣＰＵをスケジュール設定してもよい。
【００７６】
例証された実施形態は、宛先ＩＤをもつ物理ＡＰＩＣ  ＩＤテーブル６０Ａにのみアクセスする。したがって、例証された実施形態では、ゲスト割込みに対する宛先ＩＤは物理ＡＰＩＣ  ＩＤであってもよい。論理ＡＰＩＣ  ＩＤは、デバイステーブル６２、割込みマッピング・テーブル６４などをプログラミングするときに、ＶＭＭ１８によって物理ＡＰＩＣ  ＩＤに翻訳されてもよい。他の実施形態では、論理ＡＰＩＣ  ＩＤと物理ＡＰＩＣ  ＩＤとの両方がサポートされてもよく、所与のゲストに対する論理ＡＰＩＣ  ＩＤテーブルと物理ＡＰＩＣ  ＩＤテーブルとの両方が、必要な場合にｇＡＰＩＣ状態ポインタを位置付けるために用いられてもよい。
【００７７】
一実施形態では、ｇＡＰＩＣ状態は、各割込みベクトルのためのビットを含む割込み要求レジスタ（ｉｎｔｅｒｒｕｐｔ  ｒｅｑｕｅｓｔ  ｒｅｇｉｓｔｅｒ）（ＩＲＲ）を含む。割込みを記録するために、割込みベクトルに対応するビットがＩＲＲに設定されてもよい。ｇＡＰＩＣ状態におけるＩＲＲは、１つよりも多いソースから更新されることが可能である。したがって、更新は、状態を失うのを防ぐためにアトミックにされてもよい。特に、更新は、セットビットをメモリのＩＲＲにＯＲするアトミックＯＲであってもよい。アトミック動作は、動作が複数のステップとして実装される場合であっても、ユニットとして効果的に行われる動作であってもよい。アトミックに更新される場所へのアクセスを試みるオブザーバは、アトミック更新の前又はアトミック更新の後のいずれかで値を受信するが、中間値は受信しない可能性がある。アトミックに更新される場所を更新することを試みるオブザーバは、アトミック動作中にではなく、アトミック動作が完了する前又はアトミック動作が完了した後のいずれかでその更新を行う。この実施形態はアトミックＯＲを実装してもよいが、他の実施形態は、より一般的なアトミック更新動作を実装してもよい。例えば、アトミック更新は、修正されないであろう対象のビットを識別するＡＮＤマスクと、どのビットがＯＲされるべきかを識別するＯＲマスクとを含んでもよい。同様に他の実装が可能である。例えば、比較及びスワップ実装が用いられてもよく、この実装では、記憶域からオリジナル値が読み出され、オリジナル値に対して新しいＯＲされた値との比較及びスワップ動作が行われる。比較に失敗した場合、プロセスは繰り返されてもよい（新しいオリジナル値を読み出し、比較及びスワップを行う）。必要であればループを抜け出すためにバックオフ機構及び／又はタイムアウト機構が用いられてもよい。
【００７８】
一実施形態では、プロセッサ３０Ａ〜３０Ｂ（及びより詳細にはゲスト割込み制御ユニット３４Ａ〜３４Ｂ）は、プロセッサ上で実行するｖＣＰＵに対応するｇＡＰＩＣ状態エントリへの更新を監視してもよい（もしあるとしたら）。具体的には、プロセッサは、それぞれ、ＩＲＲビットを含むｇＡＰＩＣ状態エントリの領域を監視してもよく、ｇＡＰＩＣ状態エントリはプロセッサが実行しているｖＣＰＵに対応する。この領域は、本明細書では「ウォッチ領域」と呼ばれる。ウォッチ領域は、種々の方法で確立されてもよい。例えば、プロセッサ３０Ａ〜３０Ｂは、キャッシュを含んでもよく、キャッシュとメモリとの間でコヒーレンシーを維持するように構成されてもよい。コヒーレンシー機構の一部として、プロセッサ３０Ａ〜３０Ｂは、キャッシュに格納されるデータの更新を知らせてもよい。プロセッサ３０Ａ〜３０Ｂは、したがって、領域をキャッシュに読み込むことによってウォッチ領域を確立してもよい。例えば、一実施形態では２つのキャッシュブロックが領域をカバーしてもよい。幾つかの実施形態では、これはキャッシュブロックがキャッシュに残ることを保証するのに必要な場合がある。例えば、幾つかの実施形態は、プロセッサのキャッシュにおいて見失われることが知られているコヒーレンシー・プローブをフィルタしてもよい。ウォッチ領域ブロックがキャッシュに残ることを保証することで、こうした実施形態ではウォッチ領域の更新に対応するプローブがフィルタされないことを保証してもよい。
【００７９】
ウォッチ領域ブロックがプロセッサのキャッシュに残ることを保証するために種々の機構が用いられてもよい。例えば、プロセッサは、ブロックをキャッシュにロックするためにキャッシュ・ロッキングを実装してもよい。代替的に、プロセッサは、キャッシュによって実装されるキャッシュ置換えアルゴリズムにおいてブロックを「最近使用した」状態のまま残してもよい。他方では、これは、例えばコヒーレンシー・プローブがフィルタされない場合に、ウォッチ領域ブロックがプロセッサのキャッシュに残ることを保証するのに必要ではない場合がある。こうした実施形態では、プロセッサは、領域のアドレスをレジスタに単純に格納し、アドレスをプローブと比較してもよい。
【００８０】
プロセッサ３０Ａ〜３０Ｂ上で走っているｖＣＰＵに対するｇＡＰＩＣ状態エントリへのｇＡＰＩＣ状態の更新が起こる場合、対応するプロセッサがウォッチ領域への更新を検出してもよい（矢印Ｇ２）。対応するプロセッサにおけるゲスト割込み制御ユニット３４Ａ〜３４Ｂは、更新されるＩＲＲを読み出してもよく、且つ保留中の割込みに優先順位をつけ、これがより高い優先度である場合に新しい割込みを取り込んでもよい。
【００８１】
別の実施形態では、ウォッチ領域は用いられなくてもよく、代わりにデバイス割込みマネージャ３８がゲスト割込み制御メッセージをＡＰＩＣ３２Ａ〜３２Ｂに（又は直接にプロセッサ３０Ａ〜３０Ｂに）送信してもよい（矢印Ｇ１）。ゲスト割込み制御メッセージは、ホスト割込みメッセージ及びＩＰＩから区別可能であってもよく、したがって、ゲスト割込みが要求されていることを知らせるためにゲスト割込み制御ユニット３４Ａ〜３４Ｂに転送されてもよい。例えば、ゲスト割込み制御メッセージは、既存の割込みメッセージ・コーディングを用いるホスト割込みメッセージ及びＩＰＩからこれを区別する、未定義の割込みメッセージ・コーディングを用いてもよい。他の実施形態は、ウォッチ領域とゲスト割込み制御メッセージとの両方を実装してもよい。
【００８２】
一実施形態では、ゲスト割込み制御メッセージは、モデル固有レジスタ（ＭＳＲ）インターフェースを通じてゲスト割込み制御ユニット３４Ａ〜３４Ｂに送達されてもよい。ＭＳＲは、ゲスト割込み制御ユニット３４Ａ〜３４Ｂにアクセス可能（例えば、ゲスト割込み制御ユニット３４Ａ〜３４Ｂがマイクロコードに部分的に又は完全に実装される場合に、マイクロコードにアクセス可能）であってもよい。ＭＳＲはまた、プロセッサ３０Ａ〜３０Ｂ上で実行する特権付きコードにアクセス可能であってもよい。しかしながら、ＭＳＲは、ゲストアクセスを含む非特権アクセスから保護されてもよい。ＡＰＩＣ３２Ａ〜３２Ｂは、割込みソフトウェアにＩＰＩを送達する代わりにＭＳＲが書き込まれること以外は、ＭＳＲへの割込みを送達するためにＩＰＩに対して用いられるインターフェースに類似したインターフェースを用いてもよい。ＭＳＲの更新は、ゲスト割込み制御ユニット３４Ａ〜３４Ｂにゲスト割込み送達をアクティブ化させてもよい。例えば、ゲスト割込み制御ユニット３４Ａ〜３４Ｂをマイクロコードに実装する実施形態では、ＭＳＲの更新は、ゲストへの送達のために割込みを処理するマイクロコード・ルーチンの実行を引き起こす可能性がある。一実施形態ではＭＳＲインターフェースが用いられてもよいが、他の実施形態は、ゲスト割込み制御メッセージがゲスト割込み制御ユニット３４Ａ〜３４Ｂに送達されることを可能にする任意の機構を用いてもよい。こうした機構は、「ドアベル」機構と呼ばれる場合がある。
【００８３】
デバイス割込みに加えて、プロセッサ上で実行するゲストｖＣＰＵは、同じ仮想マシンにおける他のｖＣＰＵにＩＰＩを発行してもよい。本発明の実施形態では、ＩＰＩは、ｖＣＰＵ上で実行するソフトウェアが割込みコマンドレジスタ（ｉｎｔｅｒｒｕｐｔ  ｃｏｍｍａｎｄ  ｒｅｇｉｓｔｅｒ）（ＩＣＲ）を更新するときに発行される。割込みコマンドレジスタは、高い及び低い（ＩＣＲＨ及びＩＣＲＬ）部分を含んでもよく、ＩＰＩは、ＩＣＲＬレジスタへの書込みに応答して開始されてもよい。この機構は、ｘ１  ＡＰＩＣエンコーディングとｘ２  ＡＰＩＣエンコーディングとの両方と互換性があってもよい。ＩＰＩのソースｖＣＰＵを実行するプロセッサのゲスト割込み制御ユニット３４Ａ〜３４Ｂは、ＩＣＲＬレジスタへの書込みを検出してもよく、ＡＰＩＣ  ＩＤテーブル６０におけるｇＡＰＩＣ状態ポインタを識別するためにＩＰＩの宛先ＩＤを用いてもよい（矢印ａ）。ＩＰＩの宛先ＩＤは、論理又は物理のいずれであってもよく、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、宛先ＩＤに適するように論理及び／又は物理ＡＰＩＣ  ＩＤテーブル６０を用いてもよい。ｇＡＰＩＣ状態ポインタを用いることで、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、ｇＡＰＩＣ状態データ構造５８における対象ｖＣＰＵのｇＡＰＩＣ状態エントリを更新してもよい（矢印ｂ）。ゲスト割込み制御ユニット３４Ａ〜３４Ｂはまた、対象ｖＣＰＵを実行しているプロセッサ３０Ａ〜３０Ｂのゲスト割込み制御ユニット３４Ａ〜３４Ｂにゲスト割込み制御メッセージを通信するように構成されてもよい（矢印ｃ）。より詳細には、ＩＰＩを送達するためのゲスト割込み制御メッセージは、一実施形態ではＡＰＩＣ３２Ａ〜３２Ｂを通じてルーティングされてもよい。代替的に、ウォッチ領域を実装する実施形態は、更新を検出するためにウォッチ領域検出を用いてもよい。他の実施形態は、ＩＰＩを開始するために他の機構を実装してもよい。ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、機構を検出してもよく、対象ｖＣＰＵに対するｇＡＰＩＣ状態を適宜更新してもよい。加えて、対象ｖＣＰＵが走っていないことをＡＰＩＣ  ＩＤテーブル６０が示す場合、ソースプロセッサからのゲスト割込み制御ユニットは、ＶＭＥｘｉｔを発生させて、ＶＭＭ１８が対象ｖＣＰＵをスケジュール設定することを可能にしてもよい。
【００８４】
一実施形態では、正しいプロセッサ３０Ａ〜３０Ｂへの割込みのためのゲスト割込み制御メッセージを送信するために、ＡＰＩＣ  ＩＤテーブル６０におけるＩＲビットは、どのプロセッサが対応するｖＣＰＵを実行しているかを識別するフィールドであってもよい（又はｖＣＰＵが走っているか否かを示すビット及びプロセッサを識別するフィールドが存在してもよい）。ゲスト割込み制御メッセージの対象を識別するためにフィールドが用いられてもよい。
【００８５】
ここで図４に移ると、ＶＭＣＢ２２の一実施形態のブロック図が示される。例証された実施形態では、ＶＭＣＢ２２は、ｇＡＰＩＣ状態ポインタフィールド７０、物理ＡＰＩＣ  ＩＤテーブルポインタフィールド７２、論理ＡＰＩＣ  ＩＤテーブルポインタフィールド７４、及び他の仮想マシンデータ７６を含む。ｇＡＰＩＣ状態ポインタ７０は、ゲスト／ｖＣＰＵに対応するｇＡＰＩＣ状態エントリをメモリ５６の中に位置付けてもよい。ｇＡＰＩＣ状態ポインタ７０は、ＶＭＲＵＮ命令の一部としてプロセッサ３０Ａ〜３０Ｂにロードされてもよく、且つｖＣＰＵに対するｇＡＰＩＣ状態を位置付けるためにゲスト割込み制御ユニット３４Ａ〜３４Ｂによって用いられてもよい。物理ＡＰＩＣ  ＩＤポインタフィールド７２及び論理ＡＰＩＣ  ＩＤテーブルポインタフィールド７４は、それぞれゲストに対する物理ＡＰＩＣ  ＩＤテーブルポインタ及び論理ＡＰＩＣ  ＩＤテーブルポインタを格納してもよい。他のＶＭデータ７６は、ＶＭＲＵＮ及びＶＭＥｘｉｔ上にロードされる／格納される種々の他のプロセッサ状態を含んでもよい。
【００８６】
ここで図５に移ると、ｇＡＰＩＣ状態エントリ９０の一実施形態のブロック図が示される。図５の例証は状態の論理図であってもよい。メモリにおける状態の実際の配置は変化してもよい。一実施形態では、状態の配置は、状態がＡＰＩＣにおいてアドレス指定される順序にであってもよい。すなわち、各レジスタは、ＡＰＩＣのベースアドレスからのオフセットを有してもよく、各レジスタに対するｇＡＰＩＣ状態エントリ９０における状態の対応するコピーは、ｇＡＰＩＣ状態エントリ９０のベースアドレスから同じオフセットであってもよい。
【００８７】
ｇＡＰＩＣ状態エントリ９０は、ＡＰＩＣ状態の完全なコピーを含んでもよい。すべての状態が図５で例証されるわけではない。しかしながら、ＩＲＲ、イン・サービス・レジスタ（ＩＳＲ）、トリガ・モード・レジスタ（ＴＭＲ）、並びにＩＣＲＨレジスタ及びＩＣＲＬレジスタ、タスク優先度レジスタ（ＴＰＲ）、及び割込みの終わり（ＥＯＩ）レジスタが、他のＡＰＩＣ状態と共に示される。他のＡＰＩＣ状態は、（例えば、ＡＰＩＣアドレスマップにおける各レジスタに対するオフセットに従って）例証された状態内でインターリーブされてもよい。さらに、図５に示すような状態の順序は、メモリに格納される場合の状態の順序ではなくてもよい。
【００８８】
ＩＲＲレジスタは、ｇＡＰＩＣに送信されている割込み要求を記録する。ＩＲＲにおける割込み要求の位置は割込みベクトルに対応する。ＩＲＲは、「固定の（ｆｉｘｅｄ）」割込みを追跡してもよい。他の割込みタイプは、マスク可能ではない割込み（ｎｏｎ−ｍａｓｋａｂｌｅ  ｉｎｔｅｒｒｕｐｔ）（ＮＭＩ）、システム管理割込み（ｓｙｓｔｅｍ  ｍａｎａｇｅｍｅｎｔ  ｉｎｔｅｒｒｕｐｔ）（ＳＭＩ）、レガシー外部割込み（ｌｅｇａｃｙ  ｅｘｔｅｒｎａｌ  ｉｎｔｅｒｒｕｐｔ）（ｅｘｔＩＮＴ）などを含んでもよい。これらの割込みは、他のＡＰＩＣ状態の一部として処理されてもよい。一実施形態では、割込みメッセージはまた、各割込みに対するトリガモード（レベル又はエッジ）を含んでもよい。ＴＭＲは、どのトリガモードを割込みに適用するかの指示を格納してもよい。例えば、エッジによりトリガされる割込みは、ＴＭＲにおけるバイナリ０によって表されてもよく、レベルによりトリガされる割込みは、バイナリ１によって表されてもよい。他の実施形態では、エッジによりトリガされる割込みだけがｇＡＰＩＣにおいてサポートされてもよく、ＴＭＲは排除されてもよい。
【００８９】
固定の割込みでは、ゲスト割込み制御ユニット３４Ａは、割込み要求がプロセッサに送達されるべきであるかどうかを判定するために割込み要求及びイン・サービス割込みに優先順位をつけるように構成されてもよい。一般に、最高優先度の割込み要求が最高優先度のイン・サービス割込みよりも高い優先度である（割込みに対応する割込みハンドラを実行するためにプロセッサがそのソフトウェア実行を割込みされた場合に割込みがイン・サービスである）場合、ゲスト割込み制御ユニット３４Ａは、要求された割込みを送達するように構成されてもよい。加えて、ＴＰＲは、ｖＣＰＵによって受付けられる最低優先度レベルの割込みを確立するためにソフトウェアによってプログラムされてもよい。ゲスト割込み制御ユニット３４Ａは、それが最高優先度のイン・サービス割込みよりも高い優先度であり且つＴＰＲにおいて示された優先度よりも高い優先度である場合に、最高優先度の割込み要求を送達するように構成されてもよい。
【００９０】
ｖＣＰＵが割込みを取り入れるとき、プロセッサは、ｇＡＰＩＣへの割込み通知コマンドで応答してもよい。ゲスト割込み制御ユニット３４Ａは、ＩＲＲ７０からの最高優先度の割込み要求を除去し、割込みをイン・サービスとしてＩＳＲにログ記録するように構成されてもよい。ＩＳＲにおける割込みに対応するイン・サービス指示の位置は、割込みの割込みベクトルに対応してもよい。プロセッサ３０Ａは、割込みをサービスするために割込みサービスルーチン（又は複数のルーチン）を実行してもよい。割込みサービスルーチンは、割込みサービスが完了することを信号送信するためにｇＡＰＩＣへの割込みの終わり（ＥＯＩ）コマンドで終わってもよい。ゲスト割込み制御ユニット３４Ａは、ＥＯＩコマンドに応答してＩＳＲからの最高優先度のイン・サービス割込みを除去するように構成されてもよい。ＥＯＩコマンドを行うときに、マイクロコードは、ＩＳＲビット＃Ｎ（この場合、Ｎは最高優先度のイン・サービス割込みである）をクリアしてもよい。ＴＭＲのビット＃Ｎが設定される場合、マイクロコードは、ＶＭＭ１８がレベルに敏感な割込み挙動をエミュレートすることを可能にするためにＶＭＥｘｉｔであってもよい。他の実施形態では、ＩＳＲの更新はＶＭＭ１８によって管理されてもよい。
【００９１】
前述のように、ＩＲＲ、ＩＳＲ、及びＴＭＲのそれぞれは、ｇＡＰＩＣによってサポートされる各割込みベクトルに対応する場所を含む。例証された実施形態では、ベクトル０〜２５５がサポートされる。割込みベクトルナンバーはまた、他の割込みとのその相対的な優先度を示してもよい（例えば、より高いベクトルナンバーはより低いベクトルナンバーよりも高い優先度であり、又は他の実施形態ではこの逆である）。各割込みベクトルに対して、ＩＲＲは、該割込みベクトルでの割込みが要求されるか否かを示す割込み要求ビットを格納する。例えば、指示は、設定されたときに要求を示し且つクリアされたときに要求なしを示すビットであってもよい。同様に、各割込みベクトルに対して、ＩＳＲは、該割込みベクトルに対する割込みがイン・サービスであるか否かを示すイン・サービスビット（例えば、設定されたときにイン・サービス割込みを示し、クリアされたときにイン・サービス割込みなしを示す）を格納する。各割込みベクトルに対して、ＴＭＲはトリガモードを格納する。ＩＲＲ、ＩＳＲ、及びＴＭＲのそれぞれに対して、レジスタにおけるビット位置は、割込みに対応する割込みベクトルナンバーに等しい。例証された実施形態では２５６個の割込みベクトルがサポートされるが、他の実施形態ではより多い又は少ない割込みベクトル及び／又はより多い又は少ない優先度レベルグループがサポートされてもよいことに留意されたい。他のＡＰＩＣ状態は、内部的に生成される割込み、タイマ、ローカルベクトルテーブルなどを含んでもよい。
【００９２】
一実施形態では、ｇＡＰＩＣ状態エントリ９０におけるＩＲＲ、ＩＳＲ、及び／又はＴＭＲのビットは、１バイトにつき８ビットとして配置されなくてもよい。特定のＩＲＲ、ＩＳＲ、又はＴＭＲビットへの容易なアドレス指定を促進するために、ビットは、より分散された状態で格納されてもよい（例えば、１バイトにつき２ビット、１バイトにつき１ビットなど）。
【００９３】
次に図６に移ると、デバイステーブル６２、割込み再マッピング・テーブル６４、及びＡＰＩＣ  ＩＤテーブル６０Ａ〜６０Ｂの一実施形態のブロック図と、テーブルを用いるｇＡＰＩＣ状態エントリ９０の位置付けが示される。
【００９４】
デバイス割込みでは、割込みから生じる周辺デバイスのバス／デバイス／機能（ＢＤＦ（登録商標））は、デバイステーブル６２へのインデックスとして用いられてもよい。デバイステーブル６２のベースアドレスは、ＩＯＭＭＵ４０に格納されてもよく、１つのコンピュータ・システム５につき１つのデバイステーブル６２（又はシステムに複数のＩＯＭＭＵが含まれる場合に１つのＩＯＭＭＵ４０につき１つのデバイステーブル５２）が存在してもよい。ＢＤＦ（登録商標）に応答して選択されたデバイステーブルエントリは、割込み再マッピング・テーブル６４のベースアドレスである割込み再マッピング・テーブルポインタ（ＩＲＴＰ）を含む。一実施形態では、システム５における１つのゲストにつき１つの割込み再マッピング・テーブル６４が存在してもよい。加えて、デバイステーブルエントリは、ＡＰＩＣ  ＩＤテーブルポインタ（ＡＩＤＴＰ）を含んでもよく、これは物理ＡＰＩＣ  ＩＤテーブル６０Ａのベースアドレスであってもよい。他の実施形態では、デバイス割込みに対して論理ＡＰＩＣ  ＩＤがサポートされてもよく、デバイステーブル６２に２つのＡＩＤＴＰフィールドが存在してもよい（一方は論理ＡＰＩＣ  ＩＤテーブル６０Ｂに対するものであり、他方は物理ＡＰＩＣ  ＩＤテーブル６０Ａに対するものである）。一実施形態では、コンピュータ・システム５における１つのゲストにつき１つの論理ＡＰＩＣ  ＩＤテーブル６０Ｂと１つの物理ＡＰＩＣ  ＩＤテーブル６０Ａが存在してもよい。
【００９５】
割込みリダイレクト・テーブル６４へのインデックスは、割込みのための割込み識別子である。割込み識別子は、割込みベクトルを含んでもよく、且つまた、物理又は論理のいずれかの送達モード（ｄｅｌｉｖｅｒｙ  ｍｏｄｅ）（Ｄｅｌｍｏｄｅ）を含んでもよい。選択されたエントリは、新しいベクトル及び宛先ＩＤ（ＤｅｓｔＩＤ）を含んでもよい。加えて、選択されたエントリは、前述のゲスト／ホスト（Ｇ／Ｈ）フィールドを含んでもよい。
【００９６】
宛先ＩＤは、物理ＡＰＩＣ  ＩＤテーブル６０Ａへのインデックスであってもよく、選択されたエントリは、ｇＡＰＩＣ状態エントリ９０へのｇＡＰＩＣ状態ポインタを含んでもよい。加えて、選択されたエントリは、ｖＣＰＵに対するＩＲ指示を含んでもよい。
【００９７】
ＩＰＩでは、対象ｖＣＰＵは、論理ＡＰＩＣ  ＩＤ又は物理ＡＰＩＣ  ＩＤによって識別されてもよい。物理ＡＰＩＣ  ＩＤでは、ＩＤは、（そのアドレスがＶＭＣＢからゲスト割込み制御ユニット３４Ａ〜３４Ｂにロードされる）物理ＡＰＩＣ  ＩＤテーブル６０Ａへのインデックスとして用いられてもよい。ｇＡＰＩＣ状態ポインタ及びＩＲフィールドは、したがって、物理ＩＰＩのためにアクセスされてもよい。
【００９８】
ＩＰＩが論理ＡＰＩＣ  ＩＤを有する場合、論理ＡＰＩＣ  ＩＤは、論理ＡＰＩＣ  ＩＤテーブル６０Ｂへのインデックスとして用いられてもよい。論理ＡＰＩＣ  ＩＤの最上位部分はクラスタを識別してもよい。したがって、テーブルはクラスタに再分割され、そのそれぞれは、クラスタの各論理メンバに対する１つ又は複数のエントリを含んでもよい。クラスタにおけるメンバの数は、モードに応じて変化してもよい（例えば、ｘ１  ＡＰＩＣフラットモードは、１クラスタにつき８個までのメンバを含んでもよく、ｘ１  ＡＰＩＣクラスタモードは、１クラスタにつき４個までのメンバを含んでもよく、ｘ２  ＡＰＩＣモードは、１６個までのクラスタメンバを含んでもよい。論理ＡＰＩＣ  ＩＤテーブル６０Ｂは、任意のモードを取り扱うようにサイズ設定されてもよく、そのため、この実施形態での各再分割クラスタは１６個のメンバを含んでもよい。
【００９９】
図６で例証されるように、論理ＡＰＩＣ  ＩＤテーブル６０Ｂにおける各エントリは、対応するクラスタメンバを該クラスタメンバの物理ＡＰＩＣ  ＩＤにマッピングしてもよい。論理ＡＰＩＣ  ＩＤテーブル６０Ｂからの物理ＡＰＩＣ  ＩＤ出力は、物理ＡＰＩＣ  ＩＤテーブル６０Ａへのインデックスとして用いられてもよく、これは、ｖＣＰＵに対するｇＡＰＩＣ状態ポインタ及びＩＲフィールドを供給してもよい。
【０１００】
次に図７に移ると、周辺デバイスからの割込みメッセージの受信に応答したデバイス割込みマネージャ３８の一実施形態の動作を例証するフローチャートが示される。ブロックは理解を容易にするために特定の順序で示されるが、他の順序が用いられてもよい。ブロックは、デバイス割込みマネージャ３８において組合せ論理で並列に行われてもよい。ブロック、ブロックの組合せ、及び／又はフローチャートは、複数のクロックサイクルにわたってパイプラインされてもよい。一般に、デバイス割込みマネージャ３８は、図７で例証される動作を実装するように構成されてもよい。
【０１０１】
デバイス割込みマネージャ３８は、ＢＤＦ（登録商標）及び周辺デバイスから受信される割込み情報に応答してデバイステーブル６２及び割込み再マッピング・テーブル６４にアクセスしてもよい。デバイス割込みマネージャ３８は、割込み再マッピング・テーブル６４からＧ／Ｈ指示を受信してもよく、割込みがホストに対するものである場合（決定ブロック１００、「ｙｅｓ」分岐）、デバイス割込みマネージャ３８は、（再マッピングされる可能性がある）宛先ＩＤ及びベクトルを伴う割込みメッセージをＡＰＩＣ３２Ａ〜３２Ｂに送信してもよい（ブロック１０８）。
【０１０２】
デバイス割込みがＧ／Ｈ指示に従ってゲストに対するものである場合（決定ブロック１００、「ｎｏ」分岐）、デバイス割込みマネージャ３８は、ゲスト／ｖＣＰＵに対するｇＡＰＩＣ状態エントリに割込みを記録してもよい。デバイス割込みに対する論理ＡＰＩＣ  ＩＤをサポートする幾つかの実施形態では、デバイス割込みマネージャ３８は、論理ＡＰＩＣ  ＩＤテーブル６０Ｂを通じて論理ＡＰＩＣ  ＩＤを物理ＡＰＩＣ  ＩＤに変換してもよい（ブロック１０２）。
【０１０３】
デバイス割込みマネージャ３８は、デバイステーブル６２からのＡＩＤＴＰ及びデバイス割込みに対する物理ＡＰＩＣ  ＩＤを用いて物理ＡＰＩＣ  ＩＤテーブル６０ＡからｇＡＰＩＣ状態エントリポインタを判定するように構成されてもよい（ブロック１１０）。デバイス割込みマネージャ３８は、ｇＡＰＩＣ状態エントリ９０において表されるＩＲＲにおける割込みベクトルに対応するビットを設定するように構成されてもよい（ブロック１１２）。加えて、デバイス割込みマネージャ３８は、物理ＡＰＩＣ  ＩＤテーブル６０ＡからのＩＲ指示を用いて、割込みの対象にされたｖＣＰＵが走っているかどうかを判定してもよい（決定ブロック１０４）。ｖＣＰＵが走っていない場合（決定ブロック１０４、「ｎｏ」分岐）、デバイス割込みマネージャ３８は、ＶＭＭ１８に対するログメッセージを、例えばイベントキューに記録してもよい（ブロック１０６）。ＶＭＭ１８は、その後、ログメッセージを処理してｖＣＰＵをスケジュール設定してもよい。他の実施形態は、走っていないｖＣＰＵに対する割込みの受取りを他の方法で通信してもよい。ｖＣＰＵが走っている場合（決定ブロック１０４、「ｙｅｓ」分岐）、ｖＣＰＵを走らせているプロセッサ３０Ａ〜３０Ｂにおけるゲスト割込み制御ユニット３４Ａ〜３４Ｂは、ウォッチ領域機構を用いてＩＲＲビットの更新を検出してもよい（ブロック１１２）。別の実施形態では、デバイス割込みマネージャ３８は、ゲスト割込みの受取りを示すためにプロセッサ３０Ａ〜３０Ｂにゲスト割込み制御メッセージを送信してもよい（ブロック１１６）。
【０１０４】
物理的割込みは、ブロードキャストであってもよく、又は単一の宛先であってもよい。物理的割込みがブロードキャストである場合（決定ブロック１１４、「ｙｅｓ」分岐）、デバイス割込みマネージャ３８は、ゲストの仮想マシンにおける各宛先（例えば各ｖＣＰＵ）に対してブロック１１０、１１２、１０４、１０６、及び１１６を繰り返すように構成されてもよい。代替的に、ブロードキャストである物理的割込みは、ＶＭＭ１８にアクセス可能なデータ構造（例えばイベントキュー）に割込みをログ記録することでデバイス割込みマネージャ３８によって処理されてもよい。デバイス割込みマネージャ３８はまた、ＶＭＭ１８にイベントを知らせるためにＶＭＭ１８に信号送信するように構成されてもよい（例えば、プロセッサ３０Ａ〜３０Ｂのうちの１つの上の仮想マシンからの終了を引き起こす）。代替的に、デバイス割込みマネージャ３８は、ＶＭＭ１８に周期的にのみ（例えば、Ｎミリ秒おきに、及び／又はイベントキューにおける高いウォーターマークで）信号送信してもよく、ＶＭＭ１８は、信号送信がサポートする可能性があるよりも迅速に任意のイベントをサービスするために同様に周期的にイベントキューをチェックしてもよい。一実施形態では、イベントキューは、デバイス割込みマネージャ３８の代わりにＩＯＭＭＵ４０によって管理されてもよい。論理割込みをマルチキャストして、割込みの論理ＡＰＩＣ  ＩＤのベクトル部分における各宛先に対してブロック１０２、１１０、１１２、１０４、１０６、及び１１６を繰り返すために、類似した機構が実装されてもよい。
【０１０５】
図８〜図１１は、コンピュータ・システム５における種々の命令及び／又は他のイベントに応答したプロセッサ３０Ａ〜３０Ｂ（及びより詳細にはゲスト割込み制御ユニット３４Ａ〜３４Ｂ）の一実施形態の動作を例証するフローチャートである。ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、各フローチャートで例証される動作を実装するように構成されてもよい。既述のように、ゲスト割込み制御ユニット３４Ａ〜３４Ｂのうちの幾つか又はすべては、マイクロコードに実装されてもよい。こうした実施形態では、ゲスト割込み制御ユニット３４Ａ〜３４Ｂは、プロセッサにおける実行のためにマイクロコードをディスパッチすることによって動作を実装するように構成されてもよい。ブロックは、理解を容易にするためにフローチャートに特定の順序で示されるが、他の順序が用いられてもよい。ブロックは、ゲスト割込み制御ユニット３４Ａ〜３４Ｂにおいて組合せ論理で並列に行われてもよい。ブロック、ブロックの組合せ、及び／又はフローチャートは、概して複数のクロックサイクルにわたってパイプラインされてもよい。
【０１０６】
図８は、一実施形態に関するＶＭＲＵＮ命令を実行するプロセッサに応答したプロセッサ３０Ａ〜３０Ｂにおけるゲスト割込み制御ユニット３４Ａ〜３４Ｂの動作を例証する。ゲスト割込み制御ユニットは、プロセッサにおけるＡＰＩＣアクセスに対するトラップ／フォールト動作をイネーブルにしてもよい（ブロック１２０）。プロセッサハードウェアは、ＡＰＩＣアクセスをこの実施形態ではｖＣＰＵに対するｇＡＰＩＣ状態エントリ９０へのメモリアクセスに変換するように構成されてもよく、又はＡＰＩＣアクセスは、マイクロコードに実装されてもよい。ｇＡＰＩＣアクセスのうちの多くは、必要であればＶＭＭが任意の副作用をエミュレートすることを可能にするためにリタイア時にトラップされてもよい。しかしながら、或る動作はｇＡＰＩＣ状態への回復不能な変化をもたらす可能性があり、こうしたアクセスは、フォールトされＶＭＭで行われてもよい。一実施形態では、ゲスト割込み状態は、（例えば、ｖＣＰＵが走っていなかった時間中の割込みの送達を検出するために）再評価されてもよい。図１０の動作は、例えば、ＶＭＲＵＮ命令の一部として実装されてもよい。
【０１０７】
ウォッチ領域動作が実装される場合、ゲスト割込み制御ユニットは、ｇＡＰＩＣ状態エントリ９０におけるＩＲＲビットにわたるウォッチ領域をイネーブルにしてもよい（ブロック１２２）。例えば、ゲスト割込み制御ユニットは、ＶＭＣＢ２２からのｇＡＰＩＣ状態エントリポインタを用いて、ＩＲＲビットをキャッシュにカバーするｇＡＰＩＣ状態エントリ９０における１つ又は複数のキャッシュブロックを読み出してもよく、且つキャッシュブロックへの更新の監視を始めてもよい。他の実施形態は、ｖＣＰＵに対するゲスト割込みが受信されていることを信号送信するためにゲスト割込み制御メッセージを実装してもよく、ウォッチ領域は実装されなくてもよい。
【０１０８】
プロセッサは、ＶＭＲＵＮ命令に応答して行われる種々の他の処理を行ってもよい（ブロック１２４）。例えば、ＶＭＣＢ２２からロードされる種々のプロセッサ状態がロードされてもよく、プロセッサ状態がＶＭＭ状態セーブ領域などに保存されてもよい。ブロック１２４の動作は、幾つかの実施形態ではブロック１２０及び１２２の前に、後に、及び／又はインターリーブして行われてもよい。
【０１０９】
図９は、一実施形態に関するゲストからのＶＭＥｘｉｔに応答した動作を例証する。ゲスト割込み制御ユニットは、ＡＰＩＣアクセスに対するトラップ／フォールト挙動をディスエーブルにしてもよい（ブロック１２６）。加えて、ｖＣＰＵに対して受信されている割込みを検出するのにウォッチ領域動作が用いられる場合、ウォッチ領域はディスエーブルにされてもよく（ブロック１２８）、プロセッサは、他のＶＭＥｘｉｔ処理（例えば、ＶＭＣＢ２２に状態を保存すること、ＶＭＭ１８状態を復元することなど）を続けてもよい（ブロック１３０）。ブロック１３０の動作は、幾つかの実施形態ではブロック１２６及び１２８の前に、後に、及び／又はインターリーブして行われてもよい。
【０１１０】
ここで図１０に移ると、プロセッサ上で実行するｖＣＰＵに対するゲスト割込みを検出するプロセッサに応答したゲスト割込み制御ユニットの一実施形態の動作を例証するフローチャートが示される。ゲスト割込みは、ウォッチ領域における更新を検出すること、ゲスト割込み制御メッセージを受信することなどの種々の方法で検出されてもよい。
【０１１１】
ゲスト割込み制御ユニットは、ｖＣＰＵに対するｇＡＰＩＣ状態エントリ９０からＩＲＲ及びＩＳＲデータコンテンツを読み出してもよい（ブロック１３２）。ゲストＴＰＲがプロセッサに実装されない場合、ＴＰＲは同様に読み出されてもよい。ゲスト割込み制御ユニットは、イン・サービスではないＩＲＲに記録される最高優先度の割込みを、ｖＣＰＵにおける現在送達される割込み及び現在のＴＰＲと比較してもよい（ブロック１３４）。最高優先度の割込みがＴＰＲ及び最高優先度のイン・サービス割込みよりも高い優先度である場合（決定ブロック１３６、「ｙｅｓ」分岐）、ゲスト割込み制御ユニットは、新しいより高い優先度の割込みをｖＣＰＵに送達してもよい（ブロック１３８）。割込みをゲストに投入するための機構は、種々の実施形態において変化してもよい。既述のように、プロセッサは、実行中にゲストに割り込むために、ゲスト割込みをキューに入れるためのハードウェアを含んでもよい。ゲスト割込み制御ユニットは、こうした実施形態では、より高い優先度の割込みに関する情報をハードウェアにロードしてもよい。
【０１１２】
図１０の動作をマイクロコードに実装するゲスト割込み制御ユニットの実施形態では、ゲスト割込みの検出は、マイクロコードへのトラップを引き起こす可能性がある。トラップは、この場合、トラップされる命令に直接関係していなくてもよい。しかしながら、トラップは、マイクロコードが実行し且つ割込みを取り込むことを可能にしてもよい。マイクロコードは、トラップに応答して図１０で例証される動作を実装するために実行されてもよい。
【０１１３】
図１１は、ゲスト割込み制御ユニットを含むプロセッサ上のｖＣＰＵにおける命令実行のためのゲスト割込み制御ユニットの一実施形態の動作を例証するフローチャートである。命令がＡＰＩＣアクセスではない場合（決定ブロック１４０、「ｎｏ」分岐）又はＡＰＩＣアクセスであって（決定ブロック１４０、「ｙｅｓ」分岐）プロセッサがゲストを実行しない場合（すなわちプロセッサがホストを実行している−決定ブロック１４２、「ｎｏ」分岐）、ゲスト割込み制御ユニットは、アクションを起こさなくてもよく、命令は普通に実行されてもよい（ブロック１４４）。これに関連して、普通に実行することは、ゲスト割込み制御ユニットからの干渉なしに実行することを指してもよい。命令は、ゲストにおける横取り構成を介して依然として横取りされてもよく、例外などを経験してもよい。
【０１１４】
命令がＡＰＩＣアクセスであり（決定ブロック１４０、「ｙｅｓ」分岐）且つゲストで実行される状態にある場合（決定ブロック１４２、「ｙｅｓ」分岐）、ゲスト割込み制御ユニットは、アクセスが加速されたアクセスであるかどうかを判定してもよい（決定ブロック１４６）。加速されたアクセスは、アクセスによって引き起こされる場合がある任意の副作用を含む、ゲスト割込み制御ユニットによって実装されるアクセスであってもよい。一実施形態では、アクセスは、任意の副作用を含むマイクロコードに実装されてもよい。アクセスが加速されたアクセスではない場合、ゲスト割込み制御ユニットは、命令がトラップされる（フォールトされない）場合にｇＡＰＩＣ状態エントリへのアクセスを行ってもよい（ブロック１４８）。前述のように、ほとんどの命令はトラップされてもよい。フォールトされる命令は、リタイアが許される場合に回復不能な状態変化を引き起こす命令であってもよい。例えば、割込み状態がこれらの命令によって上書きされる可能性があるので、ＩＲＲ、ＩＳＲ、及び随意的にＴＭＲへの書込みがフォールトされてもよい。加えて、一実施形態では、現在のカウントレジスタは集積回路６６に供給されるクロックに従って動作する自由に走るカウンタであるため、現在のカウントレジスタへのアクセスは、エミュレーションのためにフォールトされてもよい。仮想化のオーバーヘッドは、エミュレートされない場合にカウンタにおいて検出可能であってもよい。他のアクセスがトラップされてもよい。他の実施形態は、トラップされる命令及びフォールトされる命令とは異なる描写をする可能性がある。
【０１１５】
ＶＭＭ１８が動作の１つ又は複数の副作用をエミュレートする場合（決定ブロック１５０、「ｙｅｓ」分岐）、ゲスト割込み制御ユニットは、ＶＭＭ１８にＶＭＥｘｉｔしてもよい（ブロック１５２）。幾つかのアクセスは、副作用（例えば、ほとんどの読出し動作）を有さない可能性がある。書込み動作及び幾つかの読出し動作は、副作用を有する可能性があり（例えば、書込みに応答して期待されるＡＰＩＣの動作）、これらの副作用はＶＭＭ１８にエミュレートされてもよい。これに関連して、副作用は、状態（書込みに関して）又は対象レジスタ（読出しに関して）を更新する動作以外の任意の動作であってもよい。ＶＭＭ１８によってエミュレートされる副作用が存在しない場合（決定ブロック１５０、「ｎｏ」分岐）、命令に対する動作が完了してもよい。
【０１１６】
アクセスが加速される場合（決定ブロック１４６、「ｙｅｓ」分岐）、ゲスト割込み制御ユニットは、命令によってアクセスされるレジスタに対応するｇＡＰＩＣ状態エントリにおける場所を読み出してもよい又は書き込んでもよい（ブロック１５４）。加速されるアクセスの組は、実施形態から実施形態へと変化してもよい。一般に、頻繁に起こる可能性がある及び／又は他の方法ではパフォーマンスが決定的に影響する（ｐｅｒｆｏｒｍａｎｃｅ  ｃｒｉｔｉｃａｌ）可能性があるアクセスが、加速に対する候補であってもよい。一実施形態では、ＩＣＲＬ（ＩＰＩを引き起こす可能性がある）、ＴＰＲ、及びＥＯＩレジスタへのアクセスが加速されてもよい。アクセスがＴＰＲ又はＥＯＩへのものである又はアクセスがＩＣＲＬへのものであるがＩＰＩを引き起こさない場合（決定ブロック１５６、「ｎｏ」分岐）、ゲスト割込み制御ユニットは、任意の他の副作用（もしあるとしたら）を実装してもよく、命令が完了してもよい（ブロック１５８）。命令がＩＰＩを引き起こす場合（決定ブロック１５６、「ｙｅｓ」分岐）、ゲスト割込み制御ユニットは、ＩＰＩの宛先ＩＤを対象ｖＣＰＵに対するｇＡＰＩＣ状態ポインタに翻訳するためにＡＰＩＣ  ＩＤテーブル６０を用いてもよい（ブロック１６０）。論理ＡＰＩＣ  ＩＤテーブル６０Ｂ及び物理ＡＰＩＣ  ＩＤテーブル６０Ａのベースアドレスは、ＶＭＣＢ２２から利用可能であってもよく、プロセッサ上で実行するｖＣＰＵが呼び出されたときにプロセッサにロードされていてもよい。ゲスト割込み制御ユニットは、ＩＰＩを記録するためにｇＡＰＩＣ状態におけるＩＲＲに書き込んでもよい（ブロック１６２）。割込みが記録されていること及び対象ｖＣＰＵが走っていることを通信するためにゲスト割込み制御メッセージが用いられる場合、ゲスト割込み制御ユニットは、対象プロセッサにゲスト割込み制御メッセージを送信してもよい（ブロック１６４）。対象ｖＣＰＵが走っていない場合（決定ブロック１６６、「ｎｏ」分岐）、プロセッサは、ＶＭＭ１８が対象ｖＣＰＵをスケジュール設定することを可能にするためにＶＭＥｘｉｔしてもよい（ブロック１６８）。
【０１１７】
図７に関する物理的割込みのブロードキャストの上記の説明と類似して、ＩＰＩがブロードキャストされる（物理）又は複数の対象を有する（論理）場合、ゲスト割込み制御ユニットは、複数のｇＡＰＩＣ状態エントリを更新することによって複数の対象をサポートしてもよく、又は複数の対象ＩＰＩに対するＶＭＭ１８に出てもよい。
【０１１８】
図１６は、プロセッサ３０Ａにおけるゲスト割込み制御ユニット３８Ａにゲスト割込み制御メッセージ（及びゲストＩＰＩ）を送達するのに用いられてもよいＭＳＲインターフェースの一実施形態を例証するブロック図である。図１６で例証されるのは、ゲスト割込み制御ユニット３８Ａ及びＭＳＲユニット２１２（その両方ともプロセッサ３０Ａの一部であってもよい）、特権付きコード２１０、及びＡＰＩＣ３２Ａである。ゲスト割込み制御ユニット３８Ａは、ＭＳＲユニット２１２に結合され、これは、ＭＳＲ２１４を含む。ＭＳＲ２１４は、ゲスト割込み有効（ｇｕｅｓｔ  ｉｎｔｅｒｒｕｐｔ  ｖａｌｉｄ）（ＧＩＶ）ビットを格納してもよい。他の割込みに関係するデータがＭＳＲ２１４に同様に格納されてもよい。ＭＳＲユニット２１２はＡＰＩＣ３２Ａに結合される。
【０１１９】
したがって、ＡＰＩＣ３２Ａは、ゲスト割込み制御メッセージを受信してもよく、且つ、ＭＳＲ２１４に対する更新を送信するように構成されてもよい。更新は、ＧＩＶビットを設定してもよい。ＧＩＶビットの設定に応答して、ゲスト割込み制御ユニット３８Ａは、受信したゲスト割込みを処理してもよい（例えば図１０に示すように）。ＧＩＶビットの設定は、ゲスト割込み制御ユニット３８Ａにおける回路にゲスト割込みの処理を開始させてもよい。代替的に、ＧＩＶビットの設定は、ゲスト割込みの処理を開始するためにゲスト割込み制御ユニット３８Ａからのマイクロコードの発行を引き起こしてもよい。
【０１２０】
前述のように、特権付きコード２１０は、ＭＳＲユニット２１２（ＭＳＲ２１４を含む）にアクセスしてもよい。特権付きコード２１０は、プロセッサ３０Ａ上で実行してもよいＶＭＭ１８並びに他の特権付きコード（例えばホストＯＳコードなど）を含んでもよい。しかしながら、非特権付きコード及びゲストコードはＭＳＲ２１４にアクセスしなくてもよい。
【０１２１】
図１２〜図１４は、前述のハードウェアを用いてゲスト割込み仮想化をサポートするためのＶＭＭ１８の一実施形態の高レベル動作を例証するフローチャートである。ＶＭＭ１８によって実装される多くの他の動作は、これらのフローチャートでは例証されず、これらの種々の他の動作の一部は、例証された動作とインターリーブされてもよく、及び／又は例証された動作の前及び／又は後に行われてもよい。ブロックは、理解を容易にするためにフローチャートに特定の順序で示されるが、他の順序が用いられてもよい。ＶＭＭ１８は、実行されるときにフローチャートで例証される動作を実施する命令を含んでもよい。
【０１２２】
図１２は、コンピュータ・システム５上での実行のためのゲストの初期化中のＶＭＭ１８の動作の一実施形態を例証するフローチャートである。すなわち、初期化は、コンピュータ・システム５上でゲストを実行する前に、ゲストに対する仮想マシンを記述するデータ構造をもたらすことを含んでもよい。ＶＭＭ１８は、ゲストにおける各ｖＣＰＵに対するｇＡＰＩＣ状態を確立してもよい（ブロック１７０）。ｇＡＰＩＣ状態を確立することは、例えば、状態に対するページを割り当てること及び状態に対する最初の値を挿入することを含んでもよい。最初の値は、例えば、ＡＰＩＣのリセット状態に対応してもよい。
【０１２３】
ＶＭＭ１８は、ゲストに対するＡＰＩＣ  ＩＤテーブル６０を確立し、各ｖＣＰＵのＡＰＩＣ  ＩＤに基づいてゲストに対する割り当てられたページへのｇＡＰＩＣ状態エントリポインタをマッピングしてもよい（ブロック１７２）。ＶＭＭ１８はまた、走っていないことを示すためにＩＲ指示を初期化してもよい。ゲストに割り当てられてもよい任意の周辺デバイスに対して、ＶＭＭ１８は、割込み再マッピング・テーブル６４及び物理ＡＰＩＣ  ＩＤテーブル６０Ｂへのポインタと共にデバイステーブル６２をプログラムしてもよい。ＶＭＭ１８は、ゲストに対する割込み再マッピング・テーブル６４をプログラムし、且つゲストを示すためにＧ／Ｈビットを設定してもよい（ブロック１７４）。
【０１２４】
図１３は、初期化が完了した後の割込みの仮想化のためにゲストをサポートするＶＭＭ１８の動作の一実施形態を例証するフローチャートである。ＶＭＭ１８が実行のためにゲストをスケジュール設定する又はゲストのｖＣＰＵをスケジュール解除する（ｄｅｓｃｈｅｄｕｌｅｓ）場合（決定ブロック１７６、「ｙｅｓ」分岐）、ＶＭＭ１８は、走っている（ゲストスケジュール設定される）又は走っていない（ゲストスケジュール解除される）ことを示すために該ｖＣＰＵに対応する物理ＡＰＩＣ  ＩＤテーブル６０ＡのエントリにおけるＩＲフィールドを更新してもよい（ブロック１７８）。ＡＰＩＣアクセスに対するＶＭＥｘｉｔが検出される場合（決定ブロック１８０、「ｙｅｓ」分岐）、ＶＭＭ１８は、ｇＡＰＩＣ状態に基づいてＡＰＩＣアクセスをエミュレートしてもよい（ブロック１８２）。走っていないｖＣＰＵを対象にした割込みが受信されていることを示すＩＯＭＭＵ４０からのログエントリをＶＭＭ１８が検出する場合（決定ブロック１８４、「ｙｅｓ」分岐）、ＶＭＭ１８は、割込みを処理するべくスケジューリングするために、対象ｖＣＰＵに優先順位をつけてもよい（ブロック１８６）。
【０１２５】
図１４は、システムからゲストを削除するＶＭＭ１８の一実施形態の動作を例証するフローチャートである。ＶＭＭ１８は、任意の周辺デバイスのゲスト割り当てを除去するためにデバイステーブル６２及び割込み再マッピング・テーブル６４を更新してもよい（ブロック１８８）。ＶＭＭ１８はまた、ゲストのｇＡＰＩＣ状態エントリ９０及びＡＰＩＣ  ＩＤテーブル６０を削除してもよい（ブロック１９０）。
【０１２６】
次に図１５に移ると、コンピュータ可読記憶媒体２００のブロック図が示される。一般的に言えば、コンピュータ可読記憶媒体は、コンピュータに命令及び／又はデータを提供するために、使用中にコンピュータがアクセス可能な任意の記憶媒体を含んでもよい。例えば、コンピュータ可読記憶媒体は、磁気媒体又は光学媒体、例えば、ディスク（固定又はリムーバブル）、テープ、ＣＤ−ＲＯＭ、又はＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＨＤＤＶＤ、及び／又はブルーレイディスクのような記憶媒体を含んでもよい。記憶媒体は、ＲＡＭ（例えば、シンクロナス動的ＲＡＭ（ＳＤＲＡＭ）、Ｒａｍｂｕｓ  ＤＲＡＭ（ＲＤＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）など）、ＲＯＭ、ユニバーサル・シリアル・バス（ＵＳＢ）インターフェース又はあらゆる他のインターフェースのような周辺インターフェースを介してアクセス可能なフラッシュメモリ、不揮発性メモリ（例えばフラッシュメモリ）などのような揮発性又は不揮発性メモリ媒体をさらに含んでもよい。記憶媒体は、微小電気機械システム（ＭＥＭＳ）、並びにネットワーク及び／又は無線リンクのような通信媒体を介してアクセス可能な記憶媒体を含んでもよい。図１５のコンピュータ可読記憶媒体２００は、ＶＭＭ１８を格納してもよく、これは、図１２〜図１４のフローチャートで例証される動作及び／又はこの説明におけるＶＭＭ１８に割り当てられる任意の他の機能のすべて又は一部を実装してもよい。コンピュータ可読記憶媒体２００は、マイクロコード２０２又は他の命令及び／又はデータ（例えば、Ｖｅｒｉｌｏｇ又は幾つかの他のハードウェア記述言語）を格納してもよく、これは、マイクロコードに実装されるゲスト割込み制御ユニット３４Ａの部分に関する図８〜図１３のフローチャートで例証される動作及び／又はこの説明におけるマイクロコードに割り当てられる任意の他の機能のすべて又は一部を実装してもよい。一般に、コンピュータ可読記憶媒体２００は、実行されるときに、図８〜図１３に示されたフローチャートの一部又はすべてを実施する命令の任意のセットを格納してもよい。幾つかの実施形態では、プロセッサ３０Ａに関して本明細書で説明される動作の一部又はすべて（及びより詳細にはゲスト割込み制御ユニット３４Ａ）は、ハードウェアに実装されてもよく、同様にＩＯＭＭＵ４０（及びより詳細にはデバイス割込みマネージャ３８）はハードウェアに実装されてもよい。コンピュータ可読記憶媒体２００は、こうしたハードウェアの任意の所望の表現を格納してもよい。例えば、表現は、Ｖｅｒｉｌｏｇ又はＶＨＤＬのような高水準設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述又はレジスタ伝送レベル（ｒｅｇｉｓｔｅｒ−ｔｒａｎｓｆｅｒ  ｌｅｖｅｌ）（ＲＴＬ）記述であってもよい。記述は、合成ライブラリからのゲートのリストを含むネットリストをもたらすために、記述を合成してもよい合成ツールによって読み出されてもよい。ネットリストは、ゲートのセットを備え、これはまた、システム１０を備えるハードウェアの機能を表す。ネットリストは、次いで、マスクに適用されるべき幾何学的形状を記述するデータセットをもたらすために配置されル��ティングされてもよい。マスクは、次いで、システム１０に対応する１つ又は複数の半導体回路をもたらすために、種々の半導体製作ステップで用いられてもよい。代替的に、コンピュータによりアクセス可能な記憶媒体３００上の表現は、必要に応じてネットリスト（合成ライブラリ有り又は無し）であってもよいし又はデータセットであってもよい。命令は、例えば、そのように構成されるときに、製作設備が図８〜図１３のフローチャートで説明される動作の一部又はすべて及び／又はプロセッサ３０Ａ、ゲスト割込み制御ユニット３４Ａ、ＩＯＭＭＵ４０、及び／又はデバイス割込みマネージャ３８に関して本明細書で説明される動作の一部又はすべてを実装する集積回路をもたらすように適合されるマスクワークの発生を通じて回路製作設備を構成するのに用いられてもよい。搬送媒体は、コンピュータによりアクセス可能な記憶媒体並びに配線又は無線伝送のような伝送媒体を含んでもよい。
【０１２７】
上記の開示が十分に認識されれば、当業者には多くの変形及び修正が明らかとなるであろう。以下の請求項は、すべてのこうした変形及び修正を包含するように解釈されることを意図される。
【図１】
2013519169.tif 000003
【図２】
2013519169.tif 000004
【図３】
2013519169.tif 000005
【図４】
2013519169.tif 000006
【図５】
2013519169.tif 000007
【図６】
2013519169.tif 000008
【図７】
2013519169.tif 000009
【図８】
2013519169.tif 000010
【図９】
2013519169.tif 000011
【図１０】
2013519169.tif 000012
【図１１】
2013519169.tif 000013
【図１２】
2013519169.tif 000014
【図１３】
2013519169.tif 000015
【図１４】
2013519169.tif 000016
【図１５】
2013519169.tif 000017
【図１６】
2013519169.tif 000018
【手続補正書】
【提出日】平成24年10月4日(2012.10.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャであって、
前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、
前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、
前記仮想プロセッサが前記割込みの対象にされる、デバイス割込みマネージャ。
【請求項２】
１つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、
前記１つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項１に記載のデバイス割込みマネージャ。
【請求項３】
前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項２に記載のデバイス割込みマネージャ。
【請求項４】
前記デバイスによって送信される割込みベクトルを前記１つ又は複数のテーブルにおける前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするようにさらに構成される、請求項２に記載のデバイス割込みマネージャ。
【請求項５】
前記エントリにおける前記指示に応答して前記仮想プロセッサがハードウェア・プロセッサ上でアクティブであるか否かを判定するようにさらに構成され、
前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブであることの検出に応答して前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するように構成される、請求項２に記載のデバイス割込みマネージャ。
【請求項６】
前記仮想プロセッサが前記ハードウェア・プロセッサ上で走っていないことの検出に応答して前記仮想プロセッサをスケジュール設定する要求を記録するために前記システムメモリに書込み動作を送信するようにさらに構成される、請求項５に記載のデバイス割込みマネージャ。
【請求項７】
方法であって、
デバイス割込みマネージャが割込みを記憶域に記録するステップを含み、
前記記憶域がゲストに関連付けられた仮想プロセッサに関連付けられ、
前記デバイスが前記ゲストに割り当てられ、
前記仮想プロセッサが前記割込みの対象にされる、方法。
【請求項８】
前記デバイス割込みマネージャが、割込みコントローラ識別子を仮想プロセッサにマッピングするようにプログラムされる１つ又は複数のテーブルにおけるエントリを選択するステップであり、割込みに関連付けられる割込みコントローラ識別子に応答した、デバイス割込みマネージャによるエントリの選択ステップと、
前記デバイス割込みマネージャが、前記エントリに格納されるアドレスを介して前記記憶域を識別するステップと、
をさらに含む、請求項７に記載の方法。
【請求項９】
前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項８に記載の方法。
【請求項１０】
前記デバイス割込みマネージャが、前記デバイスによって送信される割込みベクトルを、前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするステップをさらに含む、請求項８に記載の方法。
【請求項１１】
前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェア・プロセッサ上でアクティブであることを前記デバイス割込みマネージャが判定するステップと、
前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブであることの検出に応答して、前記デバイス割込みマネージャが前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するステップと、
をさらに含む、請求項８に記載の方法。
【請求項１２】
前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェア・プロセッサ上でアクティブではないことを前記デバイス割込みマネージャが判定するステップと、
前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブではないことの検出に応答して、前記仮想プロセッサをスケジュール設定する要求を記録するために前記デバイス割込みマネージャが前記システムメモリに書込み動作を送信するステップと、
をさらに含む、請求項８に記載の方法。
【国際調査報告】
2013519169.tif 000019
2013519169.tif 000020
2013519169.tif 000021