(57)【要約】  技法は、仮想ＣＰＵから仮想ＡＰＩＣ（ａｄｖａｎｃｅｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｉｎｔｅｒｒｕｐｔ  ｃｏｎｔｒｏｌｌｅｒ）に送信されるＥＯＩ（Ｅｎｄ  Ｏｆ  Ｉｎｔｅｒｒｕｐｔ）メッセージの数を減らすことにより、ハイパーバイザにより実行されるインターセプトの数を減らすことを可能にする。仮想ＣＰＵ上実行するゲストオペレーティングシステムのＥＯＩの経路が、変更されてＥＯＩが発生したことを示すマーカを残す。後に、ハイパーバイザが、マーカを調べて、仮想ＡＰＩＣの状態をレイジーに更新する。
2011526390.tif 000002
【特許請求の範囲】
【請求項１】
コンピューター実行可能命令を記憶する１つまたは複数のコンピューター可読媒体であって、前記命令が、１つまたは複数のプロセッサ上で実行されると、
ハイパーバイザから割り込みサービス要求を受け取ること、
前記割り込みサービス要求をＣＰＵに送信すること、
ＥＯＩのＡＣＫを前記ＣＰＵから受信すること、
処理の基準が満たされるかどうかを決定すること、
前記基準が満たされる場合、前記ハイパーバイザと共有されるメモリに値を書き込むこと、および、
前記基準が満たされない場合、前記ＥＯＩを前記ハイパーバイザに送信すること
を含む動作を実行することを特徴とするコンピューター可読媒体。
【請求項２】
メモリに書き込まれる値が１ビットから成ることを特徴とする請求項１に記載のコンピューター可読媒体。
【請求項３】
前記ハイパーバイザに前記ＥＯＩを送信することが、メモリ・マップ・ページに書き込むことを含み、前記ハイパーバイザ内で実行するメモリ・インターセプト・モジュールがメモリ・マップ・ページへの書き込みをトラップすることを特徴とする請求項１に記載のコンピューター可読媒体。
【請求項４】
前記ハイパーバイザと共有されるメモリが、ゲストオペレーティングシステムの仮想メモリのページおよびハイパーバイザの仮想メモリのページに同時にマッピングされる物理メモリのページを含むことを特徴とする請求項１に記載のコンピューター可読媒体。
【請求項５】
前記メモリに値を書き込むことは、前記ハイパーバイザが前記ＥＯＩの処理以外の理由で実行を開始するまで、前記ＥＯＩの処理の遅延を可能にすることを特徴とする請求項１に記載のコンピューター可読媒体。
【請求項６】
処理の基準が満たされるかどうかを決定することは、前記ＥＯＩが共有メモリからレイジー処理をされるかどうかを示す値を読み込むことを含むことを特徴とする請求項１に記載のコンピューター可読媒体。
【請求項７】
前記共有メモリは、前記ハイパーバイザと共有されて、前記ハイパーバイザは、前記受信された割り込みがレベルトリガー割り込みを含むとき、ＥＯＩをレイジーに評価することができないことを前記共有メモリにおいて示すことを特徴とする請求項６に記載のコンピューター可読媒体。
【請求項８】
前記共有メモリは、前記ハイパーバイザと共有されて、前記ハイパーバイザは、
第１の割り込みの受信の後に受信される第２の割り込みが、前記第１の割り込みのプライオリティより低いプライオリティを含み、
前記ＣＰＵが前記第１の割り込みを処理している
とき、ＥＯＩをレイジーに評価できないことを前記共有メモリにおいて示すことを特徴とする請求項６に記載のコンピューター可読媒体。
【請求項９】
前記共有メモリは前記ハイパーバイザと共有されて、前記ハイパーバイザは、
第１の割り込みの受信の後に受信される第２の割り込みが、前記第１の割り込みのプライオリティより大きいプライオリティを含み、
前記ＣＰＵが前記第１の割り込みを処理している
とき、ＥＯＩをレイジーに評価できないことを共有メモリにおいて示すことを特徴とする請求項６に記載のコンピューター可読媒体。
【請求項１０】
割り込みを受信するステップと、
仮想ＣＰＵに関連する仮想ＡＰＩＣを分析して、基準が満たされるかどうかを決定するステップと、
ゲストオペレーティングシステムと共有されるメモリの値を設定して、前記ゲストオペレーティングシステムがＥＯＩのＡＣＫにレイジー処理をすることできるとき、前記ゲストオペレーティングシステムがＥＯＩにレイジー処理をすることができることを示すステップと、
前記ゲストオペレーティングシステムがＥＯＩのＡＣＫにレイジー処理をすることできないとき、ゲストオペレーティングシステムと共有されるメモリの値を設定して、ゲストオペレーティングシステムがＥＯＩにレイジー処理をすることができないことを示すステップと
を備えた方法。
【請求項１１】
前記ゲストオペレーティングシステムは、前記割り込みがエッジトリガー割り込みを含むとき、ＥＯＩにレイジー処理をすることができることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記割り込みは、第１の割り込みを含んで、前記ゲストオペレーティングシステムは、
前記第１の割り込みの受信の後に受信される第２の割り込みが、前記第１の割り込みのプライオリティより低いプライオリティを含み、
前記仮想ＣＰＵが前記第１の割り込みを処理している
とき、ＥＯＩのＡＣＫにレイジー処理をしないよう構成されることを特徴とする請求項１０に記載の方法。
【請求項１３】
前記割り込みは、第１の割り込みを含んで、前記ゲストオペレーティングシステムは、
前記第１の割り込みの受信の後に受信される第２の割り込みが、前記第１の割り込みのプライオリティより大きいプライオリティを含み、
前記仮想ＣＰＵが前記第２の割り込みを処理している
とき、ＥＯＩのＡＣＫにレイジー処理をしないよう構成されることを特徴とする請求項１０に記載の方法。
【請求項１４】
前記ゲストオペレーティングシステムは、前記割り込みがエッジトリガー割り込みを含むとき、および前記割り込みが単に処理されているだけの割り込みであるとき、ＥＯＩのＡＣＫにレイジー処理をすることができることを特徴とする請求項１０に記載の方法。
【請求項１５】
前記ゲストオペレーティングシステムからＥＯＩを直接受信するステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１６】
前記ゲストオペレーティングシステムと共有されるメモリに記憶される、ＥＯＩが発生したかどうかを示す値を検索するステップであって、前記値はＥＯＩに応答すること以外で検索される、ステップをさらに含むことを特徴とする請求項１０に記載の方法。
【請求項１７】
メモリ・インターセプト・モジュールがメモリのページに組み込まれて、前記メモリのページは、物理ＡＰＩＣと通信する仮想ＣＰＵにより使用されるメモリマップＩ／Ｏページを含むことを特徴とする請求項１０に記載の方法。
【請求項１８】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによりアクセス可能なメモリと、
メモリ内に記憶されるハイパーバイザであって、前記１つまたは複数のプロセッサ上、
割り込みサービス要求を受信することと、
第１の処理基準が満たされるかどうかを決定することと、
前記第１の処理基準が満たされるときに前記ＥＯＩをレイジーに評価することが可能であるということを示す値を共有メモリに設定することと、
前記第１の処理基準が満たされない場合、割り込みを完了するとＥＯＩをハイパーバイザに転送しなければならないことを示す値を共有メモリに設定することと、
前記割り込みサービス要求を、ゲストオペレーティングシステムを実行する仮想ＣＰＵに送信することと
が実行可能なハイパーバイザと、
メモリに記憶される前記ゲストオペレーティングシステムのレイジーＥＯＩ処理モジュールであって、前記１つまたは複数のプロセッサ上、
前記割り込みサービス要求が実行されたことを示すＥＯＩを仮想ＣＰＵから受信することと、
第２の処理基準が満たされるかどうかを決定することと、
前記第２の処理基準が満たされる場合、前記ＥＯＩを前記ハイパーバイザに送信することと、
ＥＯＩが発生したことを示す値を共有メモリに設定して、前記第２の処理基準が満たされない場合、前記ハイパーバイザに、後にＥＯＩに応答することを可能にすることと
が実行可能な処理モジュールと
を備えたコンピューターシステム。
【請求項１９】
前記割り込みサービス要求に対するＥＯＩのＡＣＫを、
前記割り込みがレベルトリガー割り込みでなく、
前記割り込みが単にアクティブな割り込みである
とき、レイジーに評価することができることを特徴とする請求項１８に記載のコンピューターシステム。
【請求項２０】
前記割り込みは、自己割り込みであり、前記ハイパーバイザは、前記自己割り込みを仮想ＣＰＵに関連する仮想ローカルＡＰＩＣに通信することを特徴とする請求項１８に記載のコンピューターシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化環境における割り込みメッセージ終了のレイジー処理に関する。
【背景技術】
【０００２】
コンピューター産業は、ハードウェアレベルにおいて、より一層仮想化に向かう傾向にある。これらの環境において、オペレーティングシステムは、仮想マシンのモニタまたはハイパーバイザの上に実行されて、ゲストオペレーティングシステムによるコンピューターハードウェアとのインタラクションは、仮想化レイヤーにより実現する。このことにより、複数のゲストオペレーティングシステム（ＯＳ）を、同時に単一のコンピューター上実行することを可能にして、複数のワークロードを同一の物理マシン上実行させることを可能にさせる。各ワークロードは、異なるゲストＯＳ上、ゲストＯＳ間においてはっきりと分離して実行できる。このことは、情報技術（ＩＴ）部門、または複数のワークロードまたは複数のサーバーアプリケーションを実行する必要があるあらゆるオペレーションにとって特に有益である。
【０００３】
複数のゲストＯＳを単一のコンピューター上に実行することを可能にすることを、ハードウェア資源を各ゲストＯＳに安全にさらに効果的な方法において配分することにより達成できる。従来、ハイパーバイザは、ハードウェアデバイスを仮想ハードウェアデバイスとして各ゲストＯＳに明らかにすることにより、ハードウェア資源を配分している。いくつかの物理ハードウェアデバイスは、物理ハードウェアデバイスへの直接的なアクセスを実現することにより、仮想化される。他の物理ハードウェアデバイスは、原デバイスへの要求をインターセプトすること、および原ハードウェアデバイスを関連付ける方法において用いることによって要求される機能を実装することによって仮想化される。さらに他の物理ハードウェアデバイスは、完全にエミュレートされる。仮想ハードウェアデバイスを実装するのに必要な介入およびエミュレーションの量に依存して、仮想ハードウェアデバイス上に機能を実行する追加のコストは、著しく変わる。物理ハードウェアデバイスへのアクセスを実現することが、控えめな割合によりコンピューティングコストを増加させる一方、物理ハードウェアデバイスのソフトウェアエミュレーションは、極めてコストがかかる。
【０００４】
例えば、ゲストＯＳが、仮想ハードディスクにアクセスしてデータのブロックを読み込むとき、ハイパーバイザは、ファンクションコールをインターセプトできる。ハイパーバイザは、ハードディスクへの直接アクセスを可能にすることにより、または代替として仮想化ハードディスクのコンテンツを含むファイルからデータのブロックを読み込むことにより、機能を実装できる。これらの２つのレベルのハイパーバイザの介入は、ファンクションコールを完了させるのに必要なシステム資源を控えめに増加させることができる。一方、例えばＡＰＩＣ（Ａｄｖａｎｃｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ）等のハードウェアデバイスの仮想化は、物理ＡＰＩＣにアクセスするのに必要な多くの複数のシステム資源を必要とすることがある。
【発明の概要】
【０００５】
本明細書は、割り込み終了（ＥＯＩ）メッセージをゲストＯＳからハイパーバイザにおいて実行するＩ／Ｏ  ＡＰＩＣ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ａｄｖａｎｃｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ）仮想化モジュールへレイジーに（ｌａｚｉｌｙ）通信できる技法を説明する。ＥＯＩをレイジーに通信することは、ＥＯＩが発生されたことを示すメモリへの書き込みを必要として、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュールが後にメモリを読み込むことを可能にする。いくつかの実装により、ハイパーバイザとゲストＯＳとの間において共有されるメモリページを用いて、ＥＯＩがゲストＯＳを実行中の仮想化ＣＰＵ上に起こったときにレイジーに通信する。さらに、いくつかの実装により、ＥＯＩをレイジーに通信できるときにハイパーバイザに共有メモリページを用いてゲストＯＳと通信できる。いくつかの実装により、よくわかっているＥＯＩハンドラを実行中のよくわかっているゲストＯＳを用いて、ハイパーバイザにより与えられる表示に従ってＥＯＩメッセージを処理する。従って、技法により、多くのＥＯＩメッセージが、ゲストＯＳにより生成されるＥＯＩメッセージをインターセプトおよびエミュレートするハイパーバイザの不必要なコストなしにハイパーバイザにより処理できる。
【図面の簡単な説明】
【０００６】
詳細な説明を、添付の図面を参照して説明する。図面において、参照符号の（複数の）最左桁は、参照符号が最初に現れる図面を識別する。同一の参照符号を異なる図面に使用して、同様または同一の項目を示す。
【図１】仮想ＣＰＵにより生成されるＥＯＩをハイパーバイザによりエミュレートされる仮想Ｉ／Ｏ  ＡＰＩＣによりレイジーに評価できる例示的な環境を示す図である。
【図２】割り込み要求を受信して割り込み要求をＣＰＵに転送するための例示的な仮想Ｉ／Ｏ  ＡＰＩＣを示す図である。
【図３】いつインターセプトを生成してＥＯＩを処理すべきかおよびいつＥＯＩにレイジー処理をすべきかを決定するための例示的なプロセスを示す図である。
【図４】ＡＰＩＣにおいて割り込み要求を受信して要求をＣＰＵに送信してＣＰＵからの割り込みに対応するＥＯＩを受信してＥＯＩを処理するための例示的なプロセスを示す図である。
【図５】ＡＰＩＣにおいて割り込み要求を受信して要求をＣＰＵに送信してＣＰＵからの割り込みに対応するＥＯＩを受信してＥＯＩを処理するための例示的なプロセスを示す図である。
【図６】いつハイパーバイザがＥＯＩをＩ／Ｏ  ＡＰＩＣ仮想化モジュールに即時に送信しなければならないかを決定できるかを決定するための追加の例示的なプロセスを示す図である。
【図７】いつハイパーバイザがＥＯＩをＩ／Ｏ  ＡＰＩＣ仮想化モジュールに即時に送信しなければならないかを決定できるかを決定するための追加の例示的なプロセスを示す図である。
【図８】いつハイパーバイザがＥＯＩをＩ／Ｏ  ＡＰＩＣ仮想化モジュールに即時に送信しなければならないかを決定できるかを決定するための追加の例示的なプロセスを示す図である。
【図９】例示的なエッジトリガーおよびレベルトリガーの割り込みを示す図である。
【０００７】
【図１０】ＥＯＩメッセージを仮想アプリケーション・プログラミング・インターフェース（ＡＰＩ）に送信すべきかどうかを決定するための例示的なプロセスを示す図である。
【発明を実施するための形態】
【０００８】
（概要）
以下の説明は、ＥＯＩメッセージをゲストＯＳからＩ／Ｏ  ＡＰＩＣ仮想化モジュールへレイジーに通信できる技法を目標とする。上記の技法は、不必要にハイパーバイザにＥＯＩ通信をトラップおよびインターセプトさせることなく、ゲストＯＳが、割り込み要求を正確により効果的に処理することを可能にする。上記の技法は、共有メモリページを利用して、ハイパーバイザとゲストＯＳとの間の通信を容易にすることができる。共有メモリページを使用して、ハイパーバイザは、ＥＯＩを即時にハイパーバイザに伝送しなければならないときに、または代替としてＥＯＩをハイパーバイザによりレイジーに検索することができるときにゲストＯＳと通信できる。さらに、ハイパーバイザがＥＯＩにレイジー処理をすることを示したときに、およびゲストＯＳを実行している仮想化ＣＰＵがＥＯＩを発行するときに、ゲストＯＳは、共有メモリを使用してＥＯＩが発生したことを示すことができる。ハイパーバイザは、他の理由で実行している間に上記の表示をチェックすることができて、ＥＯＩの即時の送信をトラップおよびインターセプトするコストを節約する。
【０００９】
第１節表題「例示的な仮想化動作環境」は、これらおよび他の働きを可能にすることができる環境を説明する。「例示的な仮想Ｉ／Ｏ  ＡＰＩＣ環境および割り込み処理プロセス」の節が続いて、どのように仮想Ｉ／Ｏ  ＡＰＩＣにより受信される割り込みを処理できるかを説明する。第３節表題「例示的な割り込み処理」は、仮想Ｉ／Ｏ  ＡＰＩＣが割り込みを処理するときに行うことができる例示的なステップを示す。第４節表題「いつＥＯＩをハイパーバイザと即時に通信すべきかの決定」は、ハイパーバイザが、ＥＯＩメッセージをハイパーバイザに即時に送信すべきであることをゲストＯＳに示すことができる条件を説明する。第５節表題「グラフィカルな割り込み表現」は、２つの共通の割り込みタイプを示す。
【００１０】
上記の簡潔な導入部は読者の便宜のために提供されるものであり、特許請求の範囲を制限することを意図せず、後に続く節を制限することも意図しない。
【００１１】
（例示的な仮想化動作環境）
以下の説明は、例示的な仮想動作環境を説明して、読み手が、技法の種々の側面を用いることができるいくつかの方法を理解するのを支援する。以下に説明される環境は、一例を構成するだけであり、技法の応用をあらゆる１つの特定の動作環境に制限することは意図しない。他の環境を、主張される主題の精神および範囲から逸脱することなく使用できる。
【００１２】
図１は、ユーザー１０４により操作されるコンピューティングデバイス１０２を含む１つの上記仮想化環境１００を示す。サーバーコンピューターとして示すが、代替として、コンピューティングデバイス１０２は、デスクトップコンピューター、ラップトップコンピューター、または他のあらゆるコンピューティングデバイスとすることができる。一実施例において、コンピューティングデバイス１０２は、ハイパーバイザ１１２（仮想マシンマネージャとしても既知である）の上に、ルートオペレーティングシステム１０６、ゲストオペレーティングシステム１０８、およびゲストオペレーティングシステム１１０を同時に実行することができる。これらのオペレーティングシステムは、あらゆるバージョンの本願発明の特許出願人のウィンドウズ（登録商標）、リナックス（登録商標）、サンのソラリス（登録商標）、またはあらゆる他のオペレーティングシステムとすることができる。加えて、または代替えとして、ゲストオペレーティングシステムは、単独でコンピューティングデバイス１０２上で実行することができる。
【００１３】
一実施例において、ハイパーバイザ１１２は、コンピューティングデバイス１０２に連結される物理ハードウェアデバイス上で直接実行し、これらの物理ハードウェアデバイスの管理および割り付けをする。加えて、または代替えとして、ルートＯＳ１０６は、コンピューティングデバイス１０２に連結される物理ハードウェアデバイスを所有することができる。一実施例において、コンピューティングデバイス１０２は、物理メモリ１１８に連結される物理中央処理装置（ＣＰＵ）１１４を含む。物理ＣＰＵ１１４は、物理ローカルＡＰＩＣ１１６を含むことができて、物理Ｉ／Ｏ  ＡＰＩＣ１２２に連結することができる。
【００１４】
ハードウェアデバイスは、ＣＰＵ１１４がその現在の実行を中断して割り込みハードウェアデバイスにサービスを提供するよう、要求することができる。従来、２つのタイプの割り込みがある。すなわち、レベルトリガー割り込みおよびエッジトリガー割り込みである。エッジトリガー割り込みは、「ファイアアンドフォーゲット（ｆｉｒｅ  ａｎｄ  ｆｏｒｇｅｔ）割り込み」とも呼ばれ、割り込みデバイスが、そのラインに正の電圧をアサートし、続いて即時にそのラインをデアサートすることにより、エッジトリガー割り込みをＩ／Ｏ  ＡＰＩＣに送信する。この電圧の変化が、ＡＰＩＣにより割り込みと解釈され得るエッジを生成する。割り込みが送信されると、デバイスからＡＰＩＣへのラインはデアサートされたままになる。レベルトリガー割り込みもまた、割り込みデバイスをＡＰＩＣに接続するラインに正の電圧をアサートすることにより開始される。エッジトリガー割り込みとは異なり、レベルトリガー割り込みを送信するときに割り込みデバイスは、ＣＰＵから発生する、その割り込みが処理されたという表示を割り込みデバイスが受信するまで、ラインをデアサートしない。従って、ＣＰＵがＥＯＩを送信する１つの目的は、割り込みが完了したことを、割り込みデバイスに信号で伝えることであり、その結果アサートしているデバイスがそのラインをデアサートすることができる。レベルトリガー割り込みは、ＰＣＩバス等のいくつかのバス上で使用されるため、処理中に割り込みが失われることはない。第１のエッジが第２のエッジと重なり、第２のエッジが受信Ｉ／Ｏ  ＡＰＩＣにより見つけられない場合は、エッジトリガー割り込みは、失われるかもしれない。
【００１５】
物理Ｉ／Ｏ  ＡＰＩＣ１２２は、割り込み信号をハードディスクドライブ１２４またはシリアルポート１２６等のハードウェアデバイスから受信することができる。例えば、ハードディスクドライブ１２４は、割り込みを使用して、非同期ＤＭＡ転送が完了したことを物理ＣＰＵ１１４に対して示すことができる。このシナリオにおいて、ハードディスクドライブ１２４は、割り込みを物理Ｉ／Ｏ  ＡＰＩＣ１２２に送信して、物理ＣＰＵ１１４がハードディスクドライブ１２４に関連する割り込み要求ハンドラを実行することを要求する。次に物理Ｉ／Ｏ  ＡＰＩＣ１２２は物理ＣＰＵ１１４を中断することができ、物理ＣＰＵ１１４に、現在の実行コンテキストをセーブさせ、かつ、ハードディスクドライブ１２４に関連する割り込み要求ハンドラの実行を開始させる。
【００１６】
物理Ｉ／Ｏ  ＡＰＩＣ１２２は、割り込み要求信号が受信される多数のピンを有することができる。一実施例において、物理Ｉ／Ｏ  ＡＰＩＣ１２２は、２５５本のピンを有し、各ピンは０から２５５のベクタに対応するが、異なるピン数のＩ／Ｏ  ＡＰＩＣも考えられる。一実施例において、オペレーティングシステムには、ベクタを各ハードウェアデバイスに割り当てるが、ここでプライオリティのより高いデバイスは、プライオリティのより低いデバイスよりも大きな番号のベクタが割り当てられる。一実施例において、ハードウェアデバイスからの割り込み要求は、そのハードウェアデバイスに割り当てられるベクタにより識別される。Ｉ／Ｏ  ＡＰＩＣの動作を、図２において以下により詳細に説明する。
【００１７】
加えて、または代替えとして、Ｉ／Ｏ  ＡＰＩＣは、プロセッサ間割り込み（ＩＰＩ）を与える。物理Ｉ／Ｏ  ＡＰＩＣ１２２は、物理ＣＰＵ１１４がおそらくマルチプロセッサシステムの一部として、別のＣＰＵに割り込みを送信するための機構を提供することができる。ＩＰＩを実行するために、ＣＰＵは、割り込み制御レジスタ（ＩＣＲ））に書き込み、これが今度は、送り先のプロセッサに割り込みを送信する。加えて、または代替えとして、物理ＣＰＵ１１４は、IＣＲを介して自分自身に対する割り込みを要求することができる。
【００１８】
一実施例において、物理ＣＰＵ１１４は、物理ローカルＡＰＩＣ１１６を含むことができる。物理ローカルＡＰＩＣ１１６は、２５５本のピンを備えることができ、それぞれが０から２５５のベクタに対応する。他の実施形態において、異なる数のピンが考えられ、通常、物理Ｉ／Ｏ  ＡＰＩＣ１２２が含むピンの数に対応する。物理ローカルＡＰＩＣ１１６は、メッセージを物理Ｉ／Ｏ  ＡＰＩＣ１２２から受信し、またメッセージを物理Ｉ／Ｏ  ＡＰＩＣ１２２に送信することもできる。
【００１９】
一実施例において、ハイパーバイザ１１２は、コンピューティングデバイス１０２に連結される物理デバイスを仮想化し、仮想ハードウェアデバイスをハイパーバイザ１１２の上に実行する各ゲストＯＳに与えることができる。一実施例において、仮想ハードウェアデバイスは、その非仮想の同等のものと同一またはほぼ同一の機能を提供する。一実施例において、ルートＯＳ１０６は、物理ＣＰＵ１１４、物理メモリ１１８、物理Ｉ／Ｏ  ＡＰＩＣ１２２、ハードディスクドライブ１２４、およびシリアルポート１２６等のコンピューティングデバイス１０２に含まれる全ての物理ハードウェアデバイスを所有する。本実施形態において、ルートＯＳ１０６は、仮想ハードウェアデバイスを他のゲストオペレーティングシステムに提供する。加えて、または代替えとして、ハイパーバイザ１１２は、コンピューティングデバイス１０２に含まれる全ての物理ハードウェアデバイスを所有することができて、仮想ハードウェアデバイスをゲストオペレーティングシステム１０８および１１０に提供することができる。
【００２０】
一実施例において、ルートＯＳ１０６は、仮想ＣＰＵ１２８をゲストＯＳ１０８に、および仮想ＣＰＵ１３４をゲストＯＳ１１０に提供する。仮想ＣＰＵ１２８および仮想ＣＰＵ１３４は、仮想ローカルＡＰＩＣ１３０および仮想ローカルＡＰＩＣ１２３をそれぞれ含むことができる。一実施形態において、仮想ＣＰＵ１２８および仮想ＣＰＵ１３４は、ゲストＯＳが原物理ＣＰＵ１１４に直接アクセスすることを可能にする、薄くラップされた仮想デバイスである。一実施形態において、仮想ローカルＡＰＩＣ１３０および仮想ローカルＡＰＩＣ１２３を、ルートＯＳ１０６においてソフトウェアでエミュレートすることができる。エミュレーションの性質上、仮想ローカルＡＰＩＣ１３０および１２３における割り込みの受信および処理は、物理ローカルＡＰＩＣ１１６により実行される場合よりかなりコストがかかるものである。
【００２１】
加えて、または代替えとして、メモリ仮想化モジュール１３６は、ゲストＯＳ１０８に関連する仮想メモリ１３８およびゲストＯＳ１１０に関連する仮想メモリ１４０等の仮想メモリを、各ゲストＯＳに提供することができる。仮想ＣＰＵ１２８および仮想ＣＰＵ１３４は、それぞれ、仮想Ｉ／Ｏ  ＡＰＩＣ１４２および仮想Ｉ／Ｏ  ＡＰＩＣ１４４に連結することができる。仮想ローカルＡＰＩＣと同様に、仮想Ｉ／Ｏ  ＡＰＩＣを、ルートＯＳ１０６またはハイパーバイザ１１２において、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４によりエミュレートすることができる。
【００２２】
一実施例において、ハードウェアデバイスにより生成される割り込みは、仮想Ｉ／Ｏ  ＡＰＩＣ１４２により受信され、仮想ローカルＡＰＩＣ１３０に転送され、仮想ＣＰＵ１２８により処理される。割り込みを受信すると、仮想ＣＰＵ１２８は、その実行コンテキストを割り込みに関連するサービスルーチンに変更する。サービスルーチンは、一実施例においては、割り込みを送信したデバイスと通信することにより割り込みを処理することに関与する。仮想ＣＰＵ１２８がサービスルーチンの実行を終了すると、仮想ＣＰＵ１２８は、仮想Ｉ／Ｏ  ＡＰＩＣ１２８に、割り込みが処理されたことをＥＯＩの確認（ＡＣＫ）を使用して通知する。
【００２３】
従来のコンピューターでは、物理ＣＰＵ１１４等のＣＰＵが、ＥＯＩメッセージをメモリマップＩ／Ｏページ１２０を介して物理Ｉ／Ｏ  ＡＰＩＣ１２２に送信する。従来のコンピューターでは、メモリマップＩ／Ｏページ１２０は、物理ＣＰＵ１１４が、メモリのページであるようにみえるが実際は物理Ｉ／Ｏ  ＡＰＩＣ１２２と通信する手段であるものに書き込みを行うことにより、物理Ｉ／Ｏ  ＡＰＩＣ１１８と通信することを可能にする。仮想化された環境において、複数の仮想ＣＰＵが、それぞれ、異なる仮想メモリにアクセスすることができ、各仮想メモリは、単一の物理メモリ１１８により支持されている。複数の仮想ＣＰＵが、同時に物理Ｉ／Ｏ  ＡＰＩＣ１２２に単純にアクセスできた場合、物理Ｉ／Ｏ  ＡＰＩＣ１２２、さらには、コンピューティングデバイス１０２全体がクラッシュする可能性がある。これを避けるために、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、メモリ・インターセプト・モジュール１４６をメモリマップＩ／Ｏページｌ４８およびメモリマップＩ／Ｏページ１５０に組み込み、物理Ｉ／Ｏ  ＡＰＩＣ１２０と通信する仮想ＣＰＵによるあらゆる試みが、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４へトラップされるようにする。次に、ＡＰＩＣ仮想化ソフトウェア１５４は、ルートＯＳ１０６あるいはハイパーバイザ１１２のコンテキストにおいて実行して、物理ＡＰＩＣをソフトウェアでエミュレートすることができる。
【００２４】
例えば、仮想ＣＰＵ１２８は、メモリマップＩ／Ｏページ１４８に書き込みを行うことによって自己割り込みを発行することができる。このメモリのページへの書き込みが物理Ｉ／Ｏ  ＡＰＩＣ１２２へ通信されることを見込んで、仮想ＣＰＵ１２８をプログラミングすることができる。代わりに、物理Ｉ／Ｏ  ＡＰＩＣ１２２により受信されることが意図されるメモリ動作が、ルートＯＳ１０６において実行するＩ／Ｏ  ＡＰＩＣ仮想化モジュール１５４によりトラップされる。そしてＩ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、物理Ｉ／Ｏ  ＡＰＩＣ１２２をエミュレートすることができる。自己割り込みの場合、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、即時に、ハイパーバイザ１１２に仮想ローカルＡＰＩＣ１３０への割り込みを発行させることができ、これもソフトウェアでエミュレートされる。このシナリオにおいて、仮想ＣＰＵ１２８により発行された自己割り込みは、物理Ｉ／Ｏ割り込み１２２または物理ローカル割り込み１１６を使用せずに処理することができる。
【００２５】
別の実施形態において、仮想ＣＰＵ１２８は、仮想ＣＰＵ１３４等のマルチプロセッサ（ＭＰ）システム内の１つまたは全てのプロセッサに、プロセッサ間割り込み（ＩＰＩ）を発行することができる。この場合、ルートＯＳ１０６内のメモリ・インターセプト・モジュール１４６は、物理Ｉ／Ｏ  ＡＰＩＣ１２２対して意図される命令をトラップする。上述の自己割り込みの処理と同様に、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、ハイパーバイザに仮想ローカルＡＰＩＣ１２３への割り込みを発行させることができる。
【００２６】
一実施例において、仮想Ｉ／Ｏ  ＡＰＩＣ１４２により受信される割り込みは、メモリ・インターセプト・モジュール１４６におけるインターセプトをトリガーすることができる。そして、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、受信した割り込みを処理して、仮想Ｉ／Ｏ  ＡＰＩＣ１４２をエミュレートする。これらのインターセプトは、頻繁に起こり得、１秒に数万回であることもある。仮想Ｉ／Ｏ  ＡＰＩＣ１４２により受信され処理されるどの割り込みも、仮想ＣＰＵ１２８から仮想Ｉ／Ｏ  ＡＰＩＣ１４２に送信されるＥＯＩが後に続く。在来のシステムでは、ＥＯＩは、高くつくものではなく、物理ＣＰＵ１１４から物理Ｉ／Ｏ  ＡＰＩＣ１２２に単に伝えられる。しかし、仮想化された環境においては、インターセプトを実行するのに必要とされるＣＰＵサイクルに加えて、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４においてＥＯＩをエミュレートするのに数千回の物理ＣＰＵのサイクルを要する。
【００２７】
一実施例において、ハイパーバイザ１１２は、ゲストＯＳ１０８がＥＯＩを仮想Ｉ／Ｏ  ＡＰＩＣ１４２に送信すべきかすべきでないかを示す１つの情報を共有ページ１５２に加える。ハイパーバイザ１１２が、ゲストＯＳ１０８にＥＯＩを送信するよう命じる場合、ゲストＯＳ１０８は、メモリマップＩ／Ｏページ１４８に書き込みを行うことによってインターセプトを生成し、一方で、仮想Ｉ／Ｏ  ＡＰＩＣ１４２との通信を試みる。その一方、ハイパーバイザ１１２が、ＥＯＩにレイジー処理をするよう、共有メモリ１５２を介してゲストＯＳ１０８に命じる場合、ゲストＯＳ１０８は、インターセプトを生成せず、代わりに、共有ページ１５２にＥＯＩが発生したことを示す書き込みを行うことができる。
【００２８】
ひとたびゲストＯＳ１０８が共有メモリ１５２にフラグを立てることによりＥＯＩの発生を示すと、ハイパーバイザ１１２は、後で共有メモリ１５２を読み込み、ＥＯＩが生成されたかどうかを決定することができる。ハイパーバイザ１１２は、ＥＯＩが仮想ＣＰＵ１２８により生成されたと決定する場合、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４に通知し、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、図２を参照して以下で説明するように、その状態を更新することができる。本実施形態において、ＥＯＩが発生したという事実が、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４に送信され、これにより、潜在的に時間を消費するインターセプトを不必要に生成しない、仮想Ｉ／Ｏ  ＡＰＩＣ１４２が実現される。
【００２９】
（例示的な仮想Ｉ／Ｏ  ＡＰＩＣ環境および割り込み処理プロセス）
図２は、例示的なＩ／Ｏ  ＡＰＩＣ環境２００を示す。ハイパーバイザ２０２は、物理コンピューターハードウェアの上に実行して、仮想ＣＰＵ２０６上にゲストＯＳ２０４の実行を可能にする。仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、多数のピン２１０（ａ）、２１０（ｂ）、・・・、２１０（ｎ）を表し、これらは、仮想シリアルポート２３２および仮想ネットワークカード２３４等のハードウェアデバイスに接続させることができる。ゲストＯＳ２０４は、各ハードウェアデバイスにプライオリティ、すなわちベクタ、を割り当てることができる。一実施例において、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、２５５本のピンを有することができ、ゲストＯＳは、０（最低のプライオリティ）から２５５（最高のプライオリティ）までのプライオリティをハードウェアデバイスに割り当てることができる。一実施形態において、仮想シリアルポート２３２には、プライオリティ０が割り当てられ、一方、仮想ネットワークカード２３４にはプライオリティ３が割り当てられている。
【００３０】
仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、仮想ローカルＡＰＩＣ２１４を含む仮想ＣＰＵ２０６に連結される。一実施例において、仮想ＣＰＵ２０６は、共有ページ２１８およびメモリマップＩ／Ｏページ１４８を含む仮想メモリ２１６に接続させることができる。加えて、仮想メモリ２１６は、仮想シリアルポート割り込みサービスルーチン２１８  ２２２（ａ）および仮想ネットワークカード割り込みサービスルーチン２１８  ２２２（ｂ）を備えることができる。
【００３１】
仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、２つのレジスタを備えることができ、各レジスタは、ピン２１０のそれぞれに対して１ビットを含む。一実施例において、２つのレジスタはそれぞれ、２５６ビットを含む。１つのレジスタを、割り込み要求レジスタ（Ｉｎｔｅｒｒｕｐｔ  Ｒｅｑｕｅｓｔ  Ｒｅｇｉｓｔｅｒ（ＩＲＲ））２２４とすることができ、これにはビット２２８  ２２８（ａ）・・・２２８  ２２８（ｎ）が含まれる。他方のレジスタは、割り込みサービスレジスタ（Ｉｎｔｅｒｒｕｐｔ  Ｓｅｒｖｉｃｅ  Ｒｅｇｉｓｔｅｒ（ＩＳＲ））２２６とすることができ、これにはビット２３０（ａ）・・・２３０（ｎ）が含まれる。一実施例において、割り込みは、仮想シリアルポート２３２から仮想Ｉ／Ｏ  ＡＰＩＣ２０８によりピン２１０（ａ）で受信される。一実施例において、割り込みを受信したピン２１０（ａ）に対応するビット２２８  ２２８（ａ）が、１に設定され、割り込みが受信されたことを示す。次に、割り込みは仮想ＣＰＵ２０６上に配置される仮想ローカルＡＰＩＣ２１４に転送され、仮想ローカルＡＰＩＣ２１４が、今度は、仮想ＣＰＵ２０６の実行を「中断する」ことができる。
【００３２】
仮想ローカルＡＰＩＣ２１４が仮想ＣＰＵ２０６を「中断する」と、仮想ＣＰＵ２０６は、割り込みを受信したというＡＣＫを仮想Ｉ／Ｏ  ＡＰＩＣ２０８に送り、仮想Ｉ／Ｏ  ＡＰＩＣ２０８に、ビット２２８  ２２８（ｂ）を、値を０に設定してクリアさせる。さらに、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、割り込みを受信したピンに対応するＩＳＲ２３０内のビットを設定することができる。このシナリオにおいて、ビット２３０（ａ）は１に設定される。ビット２２８  ２２８（ａ）がクリアされ、ビット２３０（ａ）が設定されると、仮想ＣＰＵ２０６は、割り込みを処理するプロセスに入る。仮想ＣＰＵ２０６が割り込みを処理している間、第２の割り込みを、仮想Ｉ／Ｏ  ＡＰＩＣ２０８によりピン２１０（ａ）において受信できる。
【００３３】
割り込みを受信すると、仮想ＣＰＵ２０６は、そのレジスタの現在の状態であるその現在の実行コンテキストをセーブして、割り込みに関連する仮想シリアルポート割り込みサービスルーチン２１８  ２２２（ａ）を呼び出すことができる。仮想ＣＰＵ２０６が、仮想シリアルポート割り込みサービスルーチン２１８  ２２２（ａ）の実行を終了すると、仮想ＣＰＵ２０６は、メモリマップＩ／Ｏページ１４８に書き込みを行うことによって仮想Ｉ／Ｏ  ＡＰＩＣ２０８に通知して、ハイパーバイザ２０２によりインターセプトさせることができる。一実施例において、この通知は、Ｅｎｄ  Ｏｆ  ＩｎｔｅｒｒｕｐｔのＡＣＫまたはＥＯＩを含む。ＥＯＩは、仮想Ｉ／Ｏ  ＡＰＩＣ２０８に、仮想ＣＰＵ２０６が、最高のプライオリティの処理を完了しており、従って、ごく最近完了したということを通知して、割り込みがペンディングされる。ＥＯＩに応答して、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、ＩＳＲ内の最高のプライオリティのビットをクリアする。上記の例においては、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、ビット２３０（ｂ）をクリアする。
【００３４】
一実施形態において、ゲストＯＳ２０４は、ハイパーバイザ２０２により立てられたフラグから、ＥＯＩを即時に送信すべきかどうか、またはＥＯＩをレイジーに評価すべきかどうかを推測することができる。ハイパーバイザ２０２は、仮想Ｉ／Ｏ  ＡＰＩＣ２０３の状態に基づき、ＥＯＩを即時に送信しなければならないかどうかを決定することができる。以下に続くものは、いつＥＯＩを即時に送信しなければならないかの例示的な３つのシナリオである。
【００３５】
一シナリオにおいて、２つのデバイスが仮想Ｉ／Ｏ  ＡＰＩＣ２０３に割り込みを送信することができる。例として、ネットワークカード２３４およびシリアルポート２３２が、同じクロックサイクル中に、それぞれ割り込みベクタＸおよび割り込みベクタＹを送信することができる。一実施例において、割り込みベクタＹのプライオリティが、割り込みベクタＸのプライオリティより大きい。一実施例において、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、ＩＲＲ２２４において割り込みＸに対応するビットを１に設定し、また、ＩＲＲ２２４において割り込みＹに対応するビットを１に設定することができる。そして、各クロックサイクルにて、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、ＩＲＲ２２４において設定される最大の番号のビットを決定することができる。次に、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は仮想ローカルＡＰＩＣ２１４を介して、最高のプライオリティの割り込みである割り込みＹで、ＣＰＵを中断させる。仮想ＣＰＵ２０６が、割り込みＹの受信にＡＣＫを返すと、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、Ｙに対応するＩＳＲのビットを１に設定し、Ｙに対応するＩＲＲのビットを０に設定して、Ｙが仮想ＣＰＵ２０３により処理されていることを示す。
【００３６】
シナリオを続けると、割り込みベクタＸは、より高いプライオリティの割り込みＹが終了するのを待ち受けているままになっており、仮想ＣＰＵ２０６が、Ｙが完了したことを仮想Ｉ／Ｏ  ＡＰＩＣ２０８に対して示すまで待ち続ける。割り込みＹが、仮想Ｉ／Ｏ  ＡＰＩＣ２０３において単にペンディングしているだけの割り込みであるならば、ゲストＯＳがＥＯＩをレイジーに評価することができることを、ハイパーバイザ２０２が共有ページ２１８を介して示す。しかし、割り込みＸは処理されることを待っているため、ＥＯＩをレイジーに更新することにより、割り込みＸが処理される時間が遅延され、システム性能を低下させる。従って、ハイパーバイザ２０２が、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４を介して、第２の、より低いプライオリティの割り込みが仮想Ｉ／Ｏ  ＡＰＩＣ２０３においてペンディング中であることを検出するとき、ハイパーバイザ２０２は、仮想ＣＰＵ２０６により生成されるあらゆるＥＯＩが、即時に送信されなければならないことを、共有ページ２１８を介して示すことができる。
【００３７】
第１の割り込みが仮想ＣＰＵ２０６により処理されており、第２のより高いプライオリティの割り込みが仮想Ｉ／Ｏ  ＡＰＩＣ２０３により受信されるときに、別の共通のシナリオが発生する。このシナリオにおいて、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、ＩＳＲ２２６を使用して、仮想ＣＰＵ２０６上で実行されているネストされた割り込みハンドラのスタックを保持する。例として、割り込みＸが仮想ＣＰＵ２０６により処理されており、かつ、仮想Ｉ／Ｏ  ＡＰＩＣ２０８が割り込みＹ（ＹはＸより高いプライオリティを有する）を受信する場合、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、割り込みＹでＣＰＵを中断させる。
【００３８】
割り込みＹは、仮想ＣＰＵ２０６がＸのサービス要求ハンドラの実行を終了する前に、Ｘのサービス要求ハンドラの実行を文字通り中断する。Ｘのサービス要求ハンドラは、サービス要求ハンドラのスタック上に置かれる。割り込み要求ＸおよびＹの両方が仮想ＣＰＵ２０６に送信されてしまうと、これらの割り込みに関連するＩＲＲのビットが０に設定され、一方、割り込みに関連するＩＳＲのビットは１に設定され、両割り込みが仮想ＣＰＵ２０６に送信されたことを示す。一実施形態において、共有ページ２０６は、ＥＯＩが発生したかどうかを示す１ビットを含むことができる。ペンディング中の２つの割り込みと、１ビットのみの情報が存在するため、ハイパーバイザ２０２は、１つまたは両方の割り込みがＥＯＩを生成したのかどうかを決定することができない。従って、ゲストＯＳ２０４が、２つの割り込みのうちの第１の割り込みが完了するときにＥＯＩを送信するよう構成される。
【００３９】
例を続けると、割り込みＹに対するサービス要求ハンドラが完了すると、少なくとも２ビットがＩＳＲ２２６に設定されるため、仮想ＣＰＵ２０６は、ＥＯＩを仮想化されたＩ／Ｏ  ＡＰＩＣ２０８に戻す。仮想化されたＩ／Ｏ  ＡＰＩＣ２０８は、割り込みＹに関連するＩＳＲのビットをクリアし、ＣＰＵは、割り込みＸに対するサービス要求ハンドラの処理を継続する。割り込みＹに対するＥＯＩを処理すると、仮想Ｉ／Ｏ  ＡＰＩＣ２０８は、プライオリティを再度設定し、仮想ＣＰＵ２０６においてペンディング中の割り込みが１つだけであることを決定する。従って、ハイパーバイザが、ゲストＯＳがＥＯＩをレイジーに評価するということを示すビットを共有ページ２１８において設定する。
【００４０】
レベルトリガー割り込みは、処理のためにＥＯＩをハイパーバイザに即時に送信するようゲストＯＳに要求する第３のシナリオを備える。割り込みをトリガーするハードウェアデバイスが、必要以上に長くそのラインのアサートを継続し、従って、後に続く割り込みを発行することが回避されるため、レベルトリガー割り込みはレイジーに評価されない。その結果、ハイパーバイザ２０２は、レベルトリガー割り込みに関連するＥＯＩが即時に送信されることを要求し、インターセプトがハイパーバイザにおいて生成され、そのため割り込みデバイスがそのラインをデアサートすることができる。
【００４１】
（例示的な割り込み処理）
図３は、いつインターセプトを生成してＥＯＩを処理すべきか、およびいつＥＯＩにレイジー処理をすべきかを決定するための例示的なプロセスを示す。プロセス３００は、動作３０２が割り込み要求を、例えば仮想ネットワークカード２３４等、仮想ハードウェアデバイスから受信するときに開始される。動作３０４にて、その間、割り込みが仮想ＣＰＵ２０６に送信され処理される。一実施形態において、受信された割り込みは、仮想Ｉ／Ｏ  ＡＰＩＣ２０３において現在単にペンディングしているだけの割り込みであり、一方、仮想ＣＰＵ２０６によって現在処理されている割り込みは無い。動作３０６にて、その間、仮想ＣＰＵ２０６が、ＥＯＩを生成して、そのＥＯＩをゲストＯＳ２０４に送信する。動作３０８にて、ゲストＯＳ２０４は、共有ページ２１８を読み込むことにより、ＮｏＥＯＩＲｅｑｕｉｒｅｄビットが１に設定されたかどうかを決定する。設定されたと決定される場合、ゲストＯＳは、共有メモリ２１８にＥＯＩＯｃｃｕｒｒｅｄビットを設定することにより応答する。その後、ハイパーバイザ２０２が何らかの他の理由で実行しているとき、ハイパーバイザ２０２は、共有ページ２１８を読み込み、ＥＯＩが発生したと決定することができる。一実施例において、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、仮想Ｉ／Ｏ  ＡＰＩＣ２０３のＩＳＲから動作３０２にて受信される割り込みに関連するビットをクリアすることにより、ＥＯＩの発生を処理する。一方、ＮｏＥＯＩＲｅｑｕｉｒｅｄビットがクリアされるか、または設定されていないと、ゲストＯＳ２０４がＥＯＩを生成し、ハイパーバイザ２０２にＥＯＩをインターセプトさせて、それを即時に処理させる。
【００４２】
図４は、従来の物理Ｉ／Ｏ  ＡＰＩＣが割り込みの受信にどのように応答するかを決定するための例示的なプロセス４００を説明する。プロセス４００は、動作４０２にて、シリアルポート１２６等の物理ハードウェアデバイスからの割り込み要求の受信と共に開始される。割り込みは、エッジトリガー割り込みまたはレベルトリガー割り込みとすることができる。動作４０４では、その間、割り込みを受信したピンに関連する割り込み要求レジスタ（ＩＲＲ）ビットを１に設定する。割り込みがエッジトリガー割り込みであった場合、シリアルポート１２６は、シリアルポート１２６が割り込みを送信したラインをデアサートする。一方、割り込みがレベルトリガー割り込みであった場合、シリアルポート１２６は、ＣＰＵが割り込みの処理を完了した、という通知をシリアルポート１２６が受けるまで、ラインのアサートを継続する。動作４０６にて、ＡＰＩＣは、１に設定される最高のプライオリティのＩＲＲビットが、１に設定される最高のプライオリティＩＳＲビットより高いプライオリティを有するかどうかを決定する。多くのシナリオにおいて、ＩＳＲのどのビットも設定されないが、これは、対象のＣＰＵが通常、割り込みを素早く処理し、１つの割り込みが、別の割り込みが処理されている間に受信される可能性を下げるからである。別のシナリオにおいて、既に処理中の割り込みは、受信されたばかりの割り込みより高いプライオリティを有する。この場合、受信された割り込みは、動作４０８に示すように、より高いプライオリティの割り込みが終了するのを待ち受けなければならない。
【００４３】
動作４１０にて、最高のプライオリティのＩＲＲビットのプライオリティは、最高のプライオリティのＩＳＲビットのプライオリティより大きく、Ｉ／Ｏ  ＡＰＩＣに、受信された割り込みをＣＰＵへ送信させる。動作４１２にて、ＡＰＩＣは、受信された割り込みに関連するＩＲＲおよびＩＳＲを更新し、ＩＲＲ内のビットを０に、ＩＳＲ内のビットを１に設定する。これらのビットは、割り込みがＡＰＩＣにおいてもはやペンディング中ではなく（ＩＲＲビット＝０）、かつ、割り込みが現在ＣＰＵにより実行されている（ＩＳＲビット＝１）ことを示す。
【００４４】
図５は、従来の物理ＡＰＩＣが物理ＣＰＵからのＥＯＩの受信にどのように応答するかを決定するための例示的なプロセス５００を説明する。プロセス５００は、動作５０２にて、ＣＰＵからのＥＯＩの受信と共に開始される。ＥＯＩは、ＣＰＵにより処理されている最高のプライオリティの割り込みが、完了したことを示すことができる。動作５０４では、その間、受信されたＥＯＩに関連するビットを０に設定することによりクリアする。一実施例において、Ｉ／Ｏ  ＡＰＩＣは、最高のプライオリティのビットをクリアするが、これはＣＰＵが、常に割り込みをそのプライオリティの順に実行するからである。そして、一実施例において、Ｉ／Ｏ  ＡＰＩＣは、あらゆるペンディング中の割り込みのプライオリティを再度設定し、次に高いプライオリティの割り込みを処理のためにＣＰＵに送信する。
【００４５】
動作５０６では、その間、ＥＯＩが受信されたばかりの割り込みがエッジトリガー割り込みまたはレベルトリガー割り込みであったかどうかを決定する。動作５０８にて、ＥＯＩが応答している割り込みがエッジトリガー割り込みであるときに、ＡＰＩＣは、ＥＯＩの処理を終了する。しかし、動作５１０は、割り込みがレベルトリガー割り込みであったときに実行されて、その時点で、Ｉ／Ｏ  ＡＰＩＣが、割り込み要求が完了したこと、およびデバイスがＩ／Ｏ  ＡＰＩＣへそのラインをデアサートできることを、割り込みをアサートしたデバイスに信号で伝える。
【００４６】
（いつＥＯＩをハイパーバイザと即時に通信すべきかの決定）
図６は、仮想ＣＰＵ１２８により生成されるＥＯＩが、ハイパーバイザ１１２に直に通信されて、レイジーに更新されない一条件を示す例示的なプロセス６００を説明する。プロセス６００は、動作６０２にて、仮想Ｉ／Ｏ  ＡＰＩＣ１４２における第１のプライオリティを有する第１の割り込みの受信と共に、開始される。仮想Ｉ／Ｏ  ＡＰＩＣ１４２は、ハイパーバイザ１１２またはルートＯＳ１０６によりソフトウェアでエミュレートでき、実行のためにゲストＯＳ１０８に対して明らかにされるだけであることに留意すべきである。動作６０４にて、第１の割り込みが、仮想化されたＣＰＵ１２８に投入される。動作６０６にて、その間、仮想Ｉ／Ｏ  ＡＰＩＣ１４２が、第１の割り込みより低いプライオリティを有する第２の割り込みを受信することができ、第２の割り込みは、第１の割り込みが仮想ＣＰＵ１２８により処理されている間に受信される。動作６０８にて、その間、ハイパーバイザ１１２が、共有ページ１５２に記憶されるＮｏＥＯＩＲｅｑｕｉｒｅｄフラグをクリアすることができる。ＮｏＥＯＩＲｅｑｕｉｒｅｄフラグをクリアすることは、ゲストＯＳ１０８に対して、ゲストＯＳ１０８がＥＯＩをハイパーバイザに送信すべきであることを示し、仮想ＣＰＵ１２８が割り込みの処理を完了するとすぐにインターセプトを生成する。ＥＯＩは、送信より低いプライオリティの割り込みがＩ／Ｏ  ＡＰＩＣ仮想化モジュール１５４においてＥＯＩを受信すると投入されるだけであるので、即時に送信されるべきである。仮想Ｉ／Ｏ  ＡＰＩＣ１４２をこのシナリオにおいてレイジーに更新することは、より低いプライオリティの割り込みの処理を不必要に遅延させる。動作６１０にて、その間、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４が、第１の割り込みが完了するときに生成されるＥＯＩを受信する。一実施例において、仮想Ｉ／Ｏ  ＡＰＩＣ１４２は、第１の割り込みに関連するＩＳＲビットをクリアすることができ、割り込みが処理を終了したことが記録される。動作６１２にて、その間、仮想Ｉ／Ｏ  ＡＰＩＣ１４２が、ＥＯＩの受信に応答して第２の割り込みを仮想化されたＣＰＵ１２８に投入することができる。動作６１４にて、その間、ハイパーバイザ１１２は、もはやペンディング中の割り込みが無いため、ＮｏＥＯＩＲｅｑｕｉｒｅｄビットを１に設定することができる。
【００４７】
図７は、仮想ＣＰＵ１２８により生成されるＥＯＩがハイパーバイザ１１２に直に通信されて、レイジーに更新されない別の条件を示す例示的なプロセス７００を説明する。プロセス７００は、動作７０２にて、仮想Ｉ／Ｏ  ＡＰＩＣ１４２における第１のプライオリティを有する第１の割り込みの受信と共に、開始される。動作７０４にて、第１の割り込みは、仮想化されたＣＰＵ１２８に投入される。動作７０６にて、その間、仮想Ｉ／Ｏ  ＡＰＩＣ１４２は、第１の割り込みより高いプライオリティを有する第２の割り込みを受信することができ、第２の割り込みは、第１の割り込みが仮想ＣＰＵ１２８により処理されている間に受信される。動作７０８にて、その間、ハイパーバイザ１１２は、共有ページ１５２に記憶されるＮｏＥＯＩＲｅｑｕｉｒｅｄフラグを０に設定することによりクリアすることができる。ＮｏＥＯＩＲｅｑｕｉｒｅｄフラグをクリアすることは、ゲストＯＳ１０８に対して、ゲストＯＳ１０８がＥＯＩをハイパーバイザに送信すべきであることを示し、仮想ＣＰＵ１２８が割り込みの処理を完了するとすぐにインターセプトを生成する。ＥＯＩは、即時に送信されるべきであるが、これは、仮想ＣＰＵ１２８が、完了がペンディング中の２つの割り込みを有するが、共有ページ１５２が、ＥＯＩが１ビットで処理されたかどうかを記憶するのみであるからである。従って、ＥＯＩが各割り込みに対して仮想Ｉ／Ｏ  ＡＰＩＣ１４２により処理されることを確実にするために、ゲストＯＳは、第１の生成されたＥＯＩをハイパーバイザ１１２に送信しなければならず、インターセプトを生成する。動作７１０にて、その間、仮想Ｉ／Ｏ  ＡＰＩＣ１４２は、第２のより高いプライオリティの割り込みを仮想ＣＰＵ１２８に投入できる。仮想ＣＰＵ１２８は、第２の割り込みを即時に処理することができ、第２の割り込みが完了するまで第１の割り込みの完了を遅延させる。動作７１２にて、その間、仮想ＣＰＵ１２８は、第２の割り込みを完了するとＥＯＩを送信することができる。このＥＯＩは、ハイパーバイザに即時に送信することができ、インターセプトをトリガーする。これでペンディング中の割り込みは１つだけになり、それをレイジーに評価することができるので、動作７１４にて、その間、Ｉ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、ＮｏＥＯＩＲｅｑｕｉｒｅｄビットを１に設定することにより、受信されたＥＯＩに応答することができる。
【００４８】
図８は、仮想ＣＰＵ１０４により生成されるＥＯＩがハイパーバイザ１１２に直に通信されて、レイジーに更新されない別の条件を示す例示的なプロセス８００を記載する。プロセス８００は、動作８０２にて、仮想Ｉ／Ｏ  ＡＰＩＣ１４２におけるレベルトリガー割り込みの受信と共に開始される。動作８０４にて、ハイパーバイザ１１２は、ＮｏＥＯＩＲｅｑｕｉｒｅｄビットを０に設定することができ、ゲストＯＳ１０８がこのレベルトリガー割り込みに対するＥＯＩを送信しなければならない、ことを示す。動作８０６にて、その間、ハイパーバイザ１１２内のＩ／Ｏ  ＡＰＩＣ仮想化モジュール１５４は、インターセプトを介してゲストＯＳ１０８からＥＯＩを受信することができる。次に、ハイパーバイザは、ＮｏＥＯＩＲｅｑｕｉｒｅｄビットを１に設定することができ、後に続くレベルトリガーのＥＯＩをレイジーに評価することができることを示す。
【００４９】
（グラフィカルな割り込み表現）
図９は、例示的なエッジトリガーおよびレベルトリガーの割り込み９００を示す。一実施例において、エッジトリガー割り込み９０２は、ハードディスクドライブ１２４等のハードウェアデバイスから仮想Ｉ／Ｏ  ＡＰＩＣ１４２等の仮想Ｉ／Ｏ  ＡＰＩＣに送信される。一実施例において、別のエッジトリガー割り込み９０４が、同じラインに送信され、エッジオーバーラップ９０６を引き起こす。仮想Ｉ／Ｏ  ＡＰＩＣ１４２に対してラインが一貫してアサートされるため、仮想Ｉ／Ｏ  ＡＰＩＣ１４２は、重なっているエッジトリガー割り込み９０２と９０４を１つのエッジトリガー割り込みとみなす。
【００５０】
レベルトリガー割り込み９０８は、割り込みが完了したという表示がハードディスクドライバ１２４により受信されるまでラインをアサートすることにより、ハードディスクドライブ１２４から仮想Ｉ／Ｏ  ＡＰＩＣ１４２へ通信される。
【００５１】
図１０は、ＥＯＩにレイジー処理をすべきかどうかを決定する例示的なプロセス１０００を記載する。プロセス１０００は、動作１００２にて、第１のプライオリティを有する第１の割り込みサービス要求の受信と共に、開始される。一実施形態において、割り込みは、仮想Ｉ／Ｏ  ＡＰＩＣ１４２において受信される。動作１００４にて、受信された割り込みは、ＣＰＵに送信される。一実施形態において、ＣＰＵは仮想ＣＰＵ１２８である。動作１００６にて、その間、Ｅｎｄ  Ｏｆ  Ｉｎｔｅｒｒｕｐｔ（ＥＯＩ）のＡＣＫがＣＰＵから受信される。ＣＰＵは、受信された割り込み処理が完了するとＥＯＩを送信することができる。動作１００８にて、その間、ゲストＯＳが、ＥＯＩをレイジーに送信すべきかどうか、または、ＥＯＩを即時に送信すべきかどうか、について決定し、ハイパーバイザにＥＯＩのＡＣＫをインターセプトさせる。一実施形態において、ＥＯＩを即時に送信することにより、ハイパーバイザにＥＯＩをインターセプトさせ、かつ、処理させる。動作１０１０にて、その間、ＥＯＩをレイジー処理すべきであると、ゲストＯＳは、共有メモリページに書き込みを行うことができる。動作１０１２にて、その間、ＥＯＩをレイジー処理すべきでないと、ゲストＯＳは、ハイパーバイザを呼び出して、ＥＯＩを直接送信することができる。
【００５２】
さらに、本明細書に記載されるあらゆる方法のあらゆる動作は、１つまたは複数のコンピューター可読媒体上に記憶される命令に基づき、プロセッサまたは他のコンピューターデバイスにより実装することができる。コンピューター可読媒体は、必要に応じてハイパーバイザ、ゲストＯＳ、および／またはＩ／Ｏ  ＡＰＩＣ仮想化モジュールによりアクセス可能なあらゆる利用可能な媒体とすることができる。コンピューター可読媒体には、コンピューター可読命令、データ構造、プログラムモジュールまたは他のデータ等の情報を記憶するためのあらゆる方法または技術で実装される、揮発性および不揮発性、着脱可能および着脱不可能、の媒体が含まれる。コンピューター可読媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、所望の情報を記憶するために使用可能であり、かつ、ハイパーバイザ、ゲストＯＳ、および／またはＩ／Ｏ  ＡＰＩＣ仮想化モジュールによりアクセス可能な、あらゆる他の媒体、が含まれるが、これに限定されない。上記の内のあらゆるものの組み合わせも、コンピューター可読媒体の範囲内に含まれるべきである。
【００５３】
（結論）
主題を、構造的特徴および／または方法的動作に特有の言語において説明したが、添付の特許請求の範囲に定義される主題が必ずしも上述の特有の特徴または動作に制限されないことを理解すべきである。むしろ、上述の特有の特徴および動作を、特許請求の範囲を実装する例示的な形として開示する。
【図１】
2011526390.tif 000003
【図２】
2011526390.tif 000004
【図３】
2011526390.tif 000005
【図４】
2011526390.tif 000006
【図５】
2011526390.tif 000007
【図６】
2011526390.tif 000008
【図７】
2011526390.tif 000009
【図８】
2011526390.tif 000010
【図９】
2011526390.tif 000011
【図１０】
2011526390.tif 000012
【国際調査報告】
2011526390.tif 000013
2011526390.tif 000014