(57)【要約】【課題】仮想マシン環境におけるネストフォールトの支持を提供する。【解決手段】一実施形態によると、仮想マシン（ＶＭ）の動作中に発生した第１フォールトに関連する情報を第１フィールドに格納する。第１フォールトをＶＭに引渡している間に第２フォールトが検出され、第２フォールトが仮想マシンモニタ（ＶＭＭ）への制御の移行に対応しているかどうか判定する。対応している場合は、第２フォールトに関連する情報を第２フィールドに格納し、ＶＭＭに制御を移行する。【選択図】図２【特許請求の範囲】
【請求項１】
方法であって、
仮想マシン（ＶＭ）に引渡される第１フォールトを検出することと、
前記第１フォールトを前記ＶＭに引渡している間に第２フォールトを検出することと、
前記第２フォールトが仮想マシンモニタ（ＶＭＭ）への制御の移行と対応しているかどうかを判定することと、
前記第２フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第１フォールトに関連する情報を第１フィールドに格納し、前記第２フォールトに関連する情報を第２フィールドに格納し、前記ＶＭＭに制御を移行することと
を含む方法。
【請求項２】
前記第１フォールトに関連する前記情報は、前記第２フォールトを検出する前に、一時記憶場所または一時記憶メモリに格納される
請求項１に記載の方法。
【請求項３】
前記第１フィールドと前記第２フィールドは、仮想マシン制御構造（ＶＭＣＳ）に含まれる
請求項１に記載の方法。
【請求項４】
前記第１フォールトに関連する前記情報は前記第１フォールトの識別子を含み、
前記第２フォールトに関連する前記情報は前記第２フォールトの識別子を含む
請求項１に記載の方法。
【請求項５】
前記第１フォールトに関連する前記情報はさらに、前記第１フォールトに対応付けられたエラーコードを含み、
前記第２フォールトに関連する前記情報はさらに、前記第２フォールトに対応付けられたエラーコードを含む
請求項４に記載の方法。
【請求項６】
前記第２フォールトが前記ＶＭＭへの制御の移行と対応していない場合、現在のネストレベルが最大許容ネストレベルを超えていないかどうか判定することと、
前記現在のネストレベルが前記最大許容ネストレベルを超えている場合、シャットダウン状態への移行が前記ＶＭＭへの制御の移行と対応していると判定されれば、前記ＶＭＭへ制御を移行することと
をさらに含む請求項１に記載の方法。
【請求項７】
前記第１フォールトが前記ＶＭＭへの制御の移行と対応しているかどうかを判定することと、
前記第１フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第１フォールトを前記ＶＭに引渡さず、前記第１フォールトに関連する情報を前記第１フィールドに格納し、前記ＶＭＭに制御を移行することと
をさらに含む請求項１に記載の方法。
【請求項８】
前記第１フォールトの前記引渡しが前記ＶＭへの制御の移行の一環でないと判定された時に、前記第１フォールトが前記ＶＭＭへの制御の移行と対応しているかどうか判定する
請求項１に記載の方法。
【請求項９】
前記第２フォールトは前記ＶＭＭへの制御の移行と対応していないと判定することと、
前記第２フォールトを前記ＶＭに引渡すことと、
前記ＶＭに前記第２フォールトを引渡している間に第３フォールトを検出することと、
前記第３フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第１フォールトに関連する情報を前記第１フィールドに格納し、前記第２フォールトに関連する情報を前記第２フィールドに格納し、前記第３フォールトに関連する情報を第３フィールドに格納し、前記ＶＭＭに制御を移行することと
をさらに含む請求項１に記載の方法。
【請求項１０】
前記第２フォールトは前記ＶＭＭへの制御の移行と対応していないと判定することと、
前記第２フォールトを前記ＶＭに引渡すことと、
前記ＶＭに前記第２フォールトを引渡している間に第３フォールトを検出することと、
前記第３フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第２フォールトに関連する情報を前記第１フィールドに格納し、前記第３フォールトに関連する情報を前記第２フィールドに格納し、前記ＶＭＭに制御を移行することと
をさらに含む請求項１に記載の方法。
【請求項１１】
前記第２フォールトを前記ＶＭに引渡す前に、現在のネストレベルが最大許容ネストレベルを超えていないと判定すること
をさらに含む請求項９に記載の方法。
【請求項１２】
前記現在のネストレベルが前記最大許容ネストレベルを超えている場合、前記ＶＭをシャットダウン状態にすること
をさらに含む請求項１１に記載の方法。
【請求項１３】
装置であって、
仮想マシンモニタ（ＶＭＭ）と、
前記ＶＭＭが制御するデータ構造であって、第１フィールドおよび第２フィールドを持つデータ構造と、
仮想マシン（ＶＭ）の動作中に起こる第１フォールトに関連する情報を前記第１フィールドに格納し、前記第１フォールトを前記ＶＭに引渡している間に検出された第２フォールトに関連する情報を前記第２フィールドに格納し、前記第２フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記ＶＭＭに制御を移行するフォールト引渡しロジックと
を備える装置。
【請求項１４】
前記データ構造は仮想マシン制御構造（ＶＭＣＳ）である
請求項１３に記載の装置。
【請求項１５】
前記第１フォールトに関連する前記情報は前記第１フォールトの識別子を含み、
前記第２フォールトに関連する前記情報は前記第２フォールトの識別子を含む
請求項１３に記載の装置。
【請求項１６】
前記第１フォールトに関連する前記情報はさらに、前記第１フォールトに対応付けられたエラーコードを含み、
前記第２フォールトに関連する前記情報はさらに、前記第２フォールトに対応付けられたエラーコードを含む
請求項１５に記載の装置。
【請求項１７】
前記フォールト引渡しロジックはさらに、前記第１フォールトが前記ＶＭＭへの制御の移行に対応しているかどうか判定し、前記第１フォールトが前記ＶＭＭへの制御の移行と対応している場合は、前記第１フォールトを前記ＶＭに引渡さず、前記第１フォールトに関連する情報を前記第１フィールドに格納し、前記ＶＭＭに制御を移行する
請求項１３に記載の装置。
【請求項１８】
前記フォールト引渡しロジックは、前記第１フォールトの前記引渡しが前記ＶＭへの制御の移行の一環でないと判定した時に、前記第１フォールトが前記ＶＭＭへの制御の移行と対応しているかどうか判定する
請求項１３に記載の装置。
【請求項１９】
前記フォールト引渡しロジックはさらに、前記第２フォールトは前記ＶＭＭへの制御の移行と対応していないと判定し、前記第２フォールトを前記ＶＭに引渡し、前記ＶＭに前記第２フォールトを引渡している間に第３フォールトを検出し、前記第３フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第１フォールトに関連する情報を前記第１フィールドに格納し、前記第２フォールトに関連する情報を前記第２フィールドに格納し、前記第３フォールトに関連する情報を前記データ構造の第３フィールドに格納し、前記ＶＭＭに制御を移行する
請求項１３に記載の装置。
【請求項２０】
前記フォールト引渡しロジックはさらに、前記第２フォールトは前記ＶＭＭへの制御の移行と対応していないと判定し、前記第２フォールトを前記ＶＭに引渡し、前記ＶＭに前記第２フォールトを引渡している間に第３フォールトを検出し、前記第３フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第２フォールトに関連する情報を前記第１フィールドに格納し、前記第３フォールトに関連する情報を前記第２フィールドに格納し、前記ＶＭＭに制御を移行する
請求項１３に記載の装置。
【請求項２１】
前記フォールト引渡しロジックは、前記第２フォールトを前記ＶＭに引渡す前に、現在のネストレベルが最大許容ネストレベルを超えていないか判定する
請求項１９に記載の装置。
【請求項２２】
前記フォールト引渡しロジックはさらに、前記現在のネストレベルが前記最大許容ネストレベルを超えている場合、前記ＶＭをシャットダウン状態にする
請求項２１に記載の装置。
【請求項２３】
システムであって、
ゲストソフトウェアを格納するメモリと、
前記メモリに接合されたプロセッサであって、仮想マシン（ＶＭ）の動作中に起こる第１フォールトに関連する情報を第１フィールドに格納し、前記第１フォールトを前記ＶＭに引き渡している間に第２フォールトを検出し、前記第２フォールトが仮想マシンモニタ（ＶＭＭ）への制御の移行と対応しているかどうか判定し、前記第２フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第２フォールトに関連する情報を第２フィールドに格納し、前記ＶＭＭに制御を移行するプロセッサと
を備えるシステム。
【請求項２４】
前記第１フォールトに関連する前記情報は前記第１フォールトの識別子を含み、
前記第２フォールトに関連する前記情報は前記第２フォールトの識別子を含む
請求項２３に記載のシステム。
【請求項２５】
前記第１フォールトに関連する前記情報はさらに、前記第１フォールトに対応付けられたエラーコードを含み、
前記第２フォールトに関連する前記情報はさらに、前記第２フォールトに対応付けられたエラーコードを含む
請求項２３に記載のシステム。
【請求項２６】
複数の命令を有する機械可読媒体であって、該命令をプロセッシングシステムで実行すると該プロセッシングシステムが方法を実施し、該方法は、
仮想マシン（ＶＭ）の動作中に発生する第１フォールトに関連する情報を第１フィールドに格納することと、
前記第１フォールトを前記ＶＭに引き渡している間に第２フォールトを検出することと、
前記第２フォールトが仮想マシンモニタ（ＶＭＭ）への制御の移行と対応しているかどうか判定することと、
前記第２フォールトが前記ＶＭＭへの制御の移行と対応している場合、前記第２フォールトに関連する情報を第２フィールドに格納し、前記ＶＭＭに制御を移行すること
を含む、機械可読媒体。
【請求項２７】
前記第１フォールトに関連する前記情報は前記第１フォールトの識別子を含み、
前記第２フォールトに関連する前記情報は前記第２フォールトの識別子を含む
請求項２６に記載の機械可読媒体。
【請求項２８】
前記第１フォールトに関連する前記情報はさらに、前記第１フォールトに対応付けられたエラーコードを含み、
前記第２フォールトに関連する前記情報はさらに、前記第２フォールトに対応付けられたエラーコードを含む
請求項２６に記載の機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は広く仮想マシンに関する。より具体的には、仮想マシン環境においてネストされたフォールトに対する支持を提供することに関する。
【背景技術】
【０００２】
割り込みもしくは例外が発生すると、特別な内部状態または外部状態に対して処理が必要なことがプロセッサに伝えられる。そのような信号を受信すると、プロセッサは現在行っている処理を一時停止して、特別状態に対応するためのルーチンの実行を開始する。このルーチンをハンドラと呼ぶ。ハンドラのタスクには通常、特別状態の発生源と原因を特定すること、状態に対して処理を行うこと、および一時停止された処理を再開すること（処理が中止されていない場合）などがある。
【０００３】
ソフトウェアが短時間で割り込みまたは例外の原因を特定できるように、各特別状態にベクトルまたはベクトル数と呼ばれる識別可能な数を割り当てるとしてもよい。このような割り当てはプロセッサの命令セットアーキテクチャ（ＩＳＡ）の一部である。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４のＩＳＡ（本明細書ではＩＡ−３２  ＩＳＡと呼ぶ）では、例外についてはそれぞれにベクトル数（例えば、ベクトル０は分割エラーに対応し、ベクトル１４はページフォールトに対応）を割り当てるが、割り込み（例えばネットワークインターフェースハードウェアによる割り込み）に対するベクトルについては割り当てを行わない。
【０００４】
割り込みおよび例外の処理を迅速に進めるべく、アーキテクチャでは割り込み記述子テーブル（ＩＤＴ）と呼ばれる構造を定義するとしてもよい。ＩＤＴはベクトル毎に１つのエントリを持つ。各エントリには、対応するハンドラの位置を規定した記述子（例えば、ＩＡ−３２  ＩＳＡにおける割り込みゲート、トラップゲートまたはタスクゲート）を含む。このように設計されているので、ソフトウェアはベクトルが割り当てられた割り込みや例外に対して対応するハンドラをインストールすることができる。ＩＳＡによっては、すべての例外および／または割り込みについて１つの同じベクトルを使用するものもある。
【０００５】
プロセッサは特別状態を検出すると、その現在の状態に対応するＩＤＴのエントリを取り出し、対応するハンドラの最初を示すポインタを特定する。すべての例外および／または割り込みに対して１つの同じベクトルを用いるＩＳＡの場合は、ＩＤＴの索引を作成する必要はない。対応するハンドラの最初を示すポインタは、この１つのベクトルに基づいて特定される。続いてプロセッサは、現在実行中の処理の状態（例えば該処理の命令ポインタ）を保存し、抽出したポインタを用いてハンドラの最初に飛ぶ。この処理をフォールトの引渡しと呼ぶ。
【０００６】
ＩＳＡによっては、一部の例外について、ハンドラの最初まで飛ぶ前にエラーコードがスタックにプッシュされるものもある。または、ハードウェアレジスタ、１以上の記憶場所などの手段にエラーコードを保持するとしてもよい。このようなエラーコードにより、ハンドラに対して、この例外的な状況に関連する情報がさらに提供される（例えばフォールト部分用レジスタの識別子）。
【０００７】
またＩＳＡによっては、割り込みまたは例外を引き渡している間に例外が発生することもある。ＩＡ−３２  ＩＳＡを例に挙げて説明すると、プロセッサがハンドラに割り込みもしくは例外を引渡している間に、複数の例外が発生することがある。このような例外の例を挙げると、ＩＤＴが存在するマークされたページがページテーブルに存在しない場合に発生するページフォールトがある。この場合、プロセッサは引渡し途中の割り込みではなく、ページフォールト例外を引渡す。
【図面の簡単な説明】
【０００８】
以下の部分では、実施形態を図示した添付図面を参照しつつ本発明を説明する。添付図面の内容を説明する。
【０００９】
【図１】本発明の実施形態が動作する、一実施形態に係る仮想マシン環境を示す。
【００１０】
【図２】一実施形態に係る、仮想マシン環境においてネストフォールトに対する支持を提供するための処理を示すフローチャートである。
【図３】一実施形態に係る、仮想マシン環境においてネストフォールトに対する支持を提供するための処理を示すフローチャートである。
【００１１】
【図４】一実施形態に係る、仮想マシン環境においてネストフォールトを処理するためのプロセスを示すフローチャートである。
【発明を実施するための最良の形態】
【００１２】
仮想マシン環境においてネストされたフォールトに対する支持を提供する方法および装置を説明する。以下の説明では、説明の便宜上、具体的且つ詳細な内容を記載する。しかし、当業者には明らかであるが、本発明の実施形態は以下の具体的且つ詳細な記載内容を用いずに実施することが可能である。
【００１３】
以下の説明では一部、コンピュータシステムのレジスタまたはメモリ内でデータビットに対して行われる処理のアルゴリズムやそのような処理を表す符号を用いている。データ処理の分野においては、当業者同士間で作業の内容を伝える場合に、最も効率的な手段として、このようなアルゴリズムによる説明を用いる。本明細書内および一般的にアルゴリズムとは、所望の結果を得るために一貫した順序で実施される一連の処理と考えられている。このような一連の処理では、物理量を物理的に操作する必要がある。必ずしもそうではないが多くの場合、そのような物理量とは電気または磁気信号で、記憶、移動、合成、比較といった操作を行うことができる。こういった信号は、利便性を考慮し一般的な用語を使うべく、ビット、値、成分、符号、文字、項、数字などと呼ばれる。
【００１４】
しかし、こういった用語はすべて物理量に対応するものであって、対応する物理量に用いられる便利な名称にすぎない。本明細書において明らかであるように、特に明示されていない限り、「処理」「演算」「計算」「決定」等の用語を用いている部分は、コンピュータシステム、または同様の演算電子デバイスによる処理や動作に関する。こういったコンピュータシステムや演算電子デバイスは、システム内のレジスタおよびメモリ内の物理（電子）量として表されたデータを操作および変換して、同システム内のメモリ、レジスタまたは同様の情報記憶／送信／表示装置内に同様に物理量として表される別のデータを得る。
【００１５】
以下の実施形態の詳細な説明においては、本発明の具体的な実施形態を図示した添付図面に言及する。添付図面においては、ほぼ同じ構成要素については異なる図面にわたって同様の参照番号を用いている。図示した実施形態は当業者が本発明を実施できるよう、十分詳細に説明してある。本発明の範囲を離れることなく、説明した以外の実施形態を実施するとしてもよいし、説明した実施形態の構造、論理的構成および電気的構成を変更するとしてもよい。また、本発明の実施形態はそれぞれ異なるものの、必ずしも互いに共通点がまったくないわけではない。例えば、一実施形態に関連して説明した特徴や構造が、ほかの実施形態にも含まれるとしてもよい。
【００１６】
以下に述べる実施形態の例においては、実行ユニットや論理回路に基づいて、仮想マシン環境におけるネストされたフォールトに対する支持を説明しているが、本発明の別の実施形態はソフトウェアに基づいて実施されるとしてもよい。例えば本発明は、コンピュータ（またはほかの電子デバイス）をプログラムして本発明に係る処理を行わせる命令を格納した機械・コンピュータ可読媒体を備えるコンピュータプログラム製品またはコンピュータプログラムソフトウェアを提供する実施形態を含むとしてもよい。本発明の別の実施形態に係る処理は、該処理を行う論理が組み込まれた特別なハードウェア素子、またはプログラムされたコンピュータ素子およびカスタムハードウェア素子の組み合わせに基づき行われるとしてもよい。
【００１７】
このように、機械可読媒体は、機械（例えばコンピュータ）が読める形態で情報を格納または送信する機構を備えるとしてもよい。例を挙げると、これらに限定されないが、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、光磁気ディスク、ＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、磁気／光カード、フラッシュメモリ、インターネット通信、電気的形態、光学的形態または音響的形態を初めとする形態の伝達信号（例えば搬送波、赤外線信号、デジタル信号など）などがある。
【００１８】
設計は作成からシミュレーションや製造までさまざまな段階を経て行われるとしてもよい。設計内容を表すデータはさまざまな形態を取るとしてもよい。まず、シミュレーション段階での便宜を考慮して、ハードウェア記述言語またはその他の機能記述言語を用いてハードウェアを表現するとしてもよい。また、ロジックおよび／またはトランジスタゲートを有する回路レベルモデルを設計プロセス中に製造するとしてもよい。さらに、設計のある段階において通常、ハードウェアモデル内でのデバイスの物理的配置を表すデータが必要とされる。従来の半導体製造技術を利用する場合は、ハードウェアモデルを示すデータとは集積回路の製造に用いられるマスク用のさまざまなマスク層がどのような特徴を有するかまたは有さないかを示すデータであるとしてもよい。どのように設計内容を表現するとしても、データは機械可読媒体に記憶されるとしてよい。このような機械可読媒体の例は、格納された情報を送信するべく変調または生成された光波または電波、メモリ、ディスクなどの磁気ストレージもしくは光ストレージである。例示したこれら媒体は、設計内容またはソフトウェア情報を「運ぶ」または「示す」ものであってよい。そのようなコードもしくは設計内容を示すまたは運ぶ電気搬送波を送信して、電気信号のコピー、バッファもしくは再送を行う場合、新たにコピーが作成される。このため、通信プロバイダまたはネットワークプロバイダは本発明を実施するもの（搬送波）のコピーを作成できる。
【００１９】
図１は、本発明を実施する、一実施形態に係る仮想マシン環境１００を示す。この実施形態に係るベアプラットフォームハードウェア１１６は、例えば標準オペレーティングシステム（ＯＳ）またはＶＭＭ１１２のような仮想マシンモニタ（ＶＭＭ）を実行することが出来るコンピューティングプラットフォームから成るとしてもよい。
【００２０】
ＶＭＭ１１２は通常ソフトウェアで実施されるが、ベアマシンインターフェースをより高いレベルのソフトウェアに、エミュレートおよびエクスポートするとしてもよい。このようなより高いレベルのソフトウェアは、標準またはリアルタイムのＯＳを有するとしてもよいし、ＯＳ機能が限定された低機能簡易版の動作環境であってもよいし、従来のＯＳ機能を含まないものとしてもよい。または、ＶＭＭ１１２は例えば、別のＶＭＭ内もしくは上で実行されるとしてもよい。ＶＭＭは例えばハードウェア、ソフトウェア、ファームウェアもしくはさまざまな技術の組み合わせに基づき実施されるとしてもよい。
【００２１】
プラットフォームハードウェア１１６は、パーソナルコンピュータ（ＰＣ）、メインフレーム、携帯デバイス、携帯コンピュータ、セットトップボックスなどのコンピューティングシステム用のものであってよい。プラットフォームハードウェア１１６はプロセッサ１１８およびメモリ１２０を有する。
【００２２】
プロセッサ１１８は、ソフトウェアを実行することが出来るプロセッサであればどのようなものであってもよく、例を挙げるとマイクロプロセッサ、デジタル信号プロセッサ、マイクロコントローラなどがある。プロセッサ１１８は、本発明の実施形態に係る方法を実行するためのマイクロコード、プログラム可能なロジックまたはハードコードされたロジックを含む。図１に示したプロセッサはプロセッサ１１８の１つのみであるが、システム中にはプロセッサが１以上含まれるとしてもよい。
【００２３】
メモリ１２０は、ハードディスク、フロッピーディスク、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、または上述のデバイスの組み合わせであってよい。または、プロセッサ１１８が読み取ることができる機械可読媒体であればどのようなものであってもよい。メモリ１２０は本発明の実施形態に係る方法を実行するための命令および／またはデータを格納するとしてもよい。
【００２４】
ＶＭＭ１１２は、ほかのソフトウェア（例えば「ゲスト」ソフトウェア）に対して、１以上の仮想マシン（ＶＭ）のアブストラクションを提示する。ここで、それぞれのゲストソフトウェアに対して同一もしくは異なるアブストラクションを提供するとしてもよい。図１には２つのＶＭ（１０２および１１４）を示している。各ＶＭで実行中のゲストソフトウェアには、ゲストＯＳ１０４または１０６のようなゲストＯＳおよびさまざまなゲストソフトウェアアプリケーション１０８および１１０がある。ゲストＯＳ１０４および１０６はそれぞれ、ゲストＯＳ１０４または１０６を実行中でほかの機能も持つＶＭ１０２および１１４内の物理リソース（例えばプロセッサレジスタ、メモリおよびＩ／Ｏデバイス）にアクセスすると考えられる。例えば、ＶＭに示されたプロセッサおよびプラットフォームのアーキテクチャによると、ゲストＯＳはすべてのレジスタ、キャッシュ、構造、Ｉ／Ｏデバイス、メモリなどに対するアクセスを持つと考えられる。
【００２５】
ゲストソフトウェアがアクセス可能なリソースは、「特権状態」もしくは「非特権状態」にあるものに分類できるとしてもよい。特権状態のリソースに関しては、ＶＭＭ１１２はゲストソフトウェアが所望する機能へのアクセスを円滑化する一方、該特権状態リソースに対する最終的な制御は維持する。非特権状態のリソースについては、ＶＭＭ１１２が制御する必要はなく、ゲストソフトウェアがアクセスすることができる。
【００２６】
また、ゲストＯＳはそれぞれフォールトイベントを処理すると考えられる。フォールトイベントの例を挙げると、例外（例えばページフォールト、一般保護違反、トラップ、異常終了など）、割り込み（例えばハードウェア割り込み、ソフトウェア割り込みなど）、プラットフォームイベント（例えば初期化（ＩＮＩＴ）やシステム管理割り込み（ＳＭＩ））などがある。上述のフォールトイベントの中には、ゲストソフトウェアから保護する目的で、ＶＭ１０２および１１４が適切に動作するようにＶＭＭ１１２が処理しなければならないので、「特権状態」となっているものもある。
【００２７】
特権フォールトイベントが発生した場合、もしくはゲストソフトウェアが特権リソースへのアクセスを試みた場合、制御がＶＭＭ１１２に移行することがある。ゲストソフトウェアからＶＭＭ１１２への制御の移行を本明細書ではＶＭ終了と定義する。リソースへのアクセスを円滑化した後、もしくはイベントを適切な方法で処理した後、ＶＭＭ１１２は制御をゲストソフトウェアに戻すとしてもよい。ＶＭＭ１１２からゲストソフトウェアへ制御を移行することをＶＭ開始と呼ぶ。
【００２８】
一実施形態によると、プロセッサ１１８は仮想マシン制御構造（ＶＭＣＳ）１２４に格納されたデータに従ってＶＭ１０２および１１４の動作を制御する。ＶＭＣＳ１２４は、ゲストソフトウェアの状態、ＶＭＭ１１２の状態、ＶＭＭ１１２がどのようにゲストソフトウェアの動作を制御したいかを示す実行制御情報、ＶＭＭ１１２とＶＭ間での移行を制御するための情報などを有するとしてもよい。プロセッサ１１８はＶＭＣＳ１２４から情報を読み出し、ＶＭの実行環境を決定したり、ＶＭの動作を制限したりする。一実施形態によると、ＶＭＣＳ１２４はメモリ１２０に格納されるとしてもよい。実施形態によっては、複数のＶＭを支持するべく複数のＶＭＣＳを用いるとしてもよい。
【００２９】
ＶＭの動作中にフォールトイベントが発生すると、プロセッサ１１８は、このフォールトイベントがＶＭ終了に対応するものかどうか（つまり、このフォールトイベントに対応付けられた実行制御指標が、このフォールトに対してＶＭ終了を生じさせるように、ＶＭ終了値に設定されているかどうか）を判定する。フォールトイベントがＶＭ終了に対応付けられている場合、プロセッサ１１８はＶＭＭ１１２に対してＶＭ終了を発生し、フォールトイベントによってＶＭ終了が発生したことを指し示す。ＶＭＭ１１２は続いて、自分でフォールトを処理するのか、それともこのフォールトを適切なＶＭに引渡すようプロセッサ１１８に要求するのかを決定する。
【００３０】
一実施形態によると、フォールトを引渡す場合は、転送構造を検索して引渡されるフォールトに対応付けられたエントリを見つけて、このフォールトを処理するように指定されたルーチンの位置を示す記述子をこのエントリから抽出し、抽出された記述子を用いてルーチンの最初まで飛ぶ。割り込みや例外などのフォールトを処理するべく指定されたルーチンはフォールトハンドラと呼ばれる。別の実施形態によると、フォールトを引渡す場合に転送構造を検索する必要はない。このような場合は、フォールトを処理するルーチンの位置を示す記述子は（例えば、ソフトウェアによって構成可能）１つのエントリに含まれるとしてもよいし、（例えば、メモリ内の所定位置に）ハードコードされているとしてもよい。
【００３１】
フォールトを引渡す場合は、アドレス変換を１回以上行い、仮想アドレスから物理アドレスへと変換する必要があるとしてもよい。例えば、割り込みテーブルのアドレスまたは対応付けられたハンドラのアドレスは仮想アドレスの場合もある。また、プロセッサはフォールトの引渡し中にさまざまなチェックを行う必要がある場合もある。例えば、プロセッサは一貫性についてチェックを行うとしてもよい。例を挙げると、分割レジスタおよびアクセスアドレスの確認（違反フォールト、セグメント不在フォールト、スタックフォールトなどが抑制される）、および保護違反（例えば一般保護違反など）となる許容レベルチェックなどがある。
【００３２】
フォールトを引渡している間にアドレス変換やさまざまなチェックを行うと、ページフォールトや一般保護違反などのフォールトが発生する可能性がある。このようなネストフォールトは適切なハンドラに引渡す必要がある。この新しいネストフォールトの引渡しを行うことによってもさらにフォールトが発生する可能性がある。ＩＳＡによっては、このようなフォールトネスティングが、プロセッサ１１８がＶＭをシャットダウン状態にするネストフォールト最大許容レベルに達するまで、続発する場合もある。例としてＩＡ−３２  ＩＳＡを挙げると、三重にフォールトが発生するとプロセッサによってＶＭがシャットダウン状態にされる。さまざまなイベントの発生を機に、ＶＭがシャットダウン状態から抜け出すとしてもよい。例としてＩＡ−３２  ＩＳＡの場合を説明すると、三重にフォールトが発生してシャットダウン状態にある場合、システム初期化メッセージ（ＩＮＩＴ）、マスク不可能割り込み（ＮＭＩ）、マシンチェック例外やシステム管理割り込み（ＳＭＩ）が発生すると、プロセッサはシャットダウン状態から抜け出す。
【００３３】
ＶＭへのフォールトの引渡しは、プロセッサ１１８によって行われるとしてもよいし、ほかの実体、例えばＶＭＭ１１２が行うとしてもよい。プロセッサ１１８は、ＶＭに対するＶＭ開始の一環として該ＶＭにフォールトを引渡すための機能をＶＭＭ１１２に提供するとしてもよい。このようにすることによって、ＶＭＭ１１２はこの動作をエミュレートする必要がなくなる。
【００３４】
一実施形態によると、プロセッサ１１８は、フォールトネスティングを記録するとともにさまざまなレベルで発生するフォールトに関連する情報を取得するネストフォールトロジック１２２を備える。このフォールトネスティング情報は、ネストフォールトによってＶＭ終了が発生すると、ＶＭＭ１１２によって使用されるとしてもよい。一実施形態によると、ＶＭＭ１１２は、このフォールトネスティング情報に基づいてネストフォールトの処理を調整するフォールトコーディネータ１２６を備えるとしてもよい。例えば、割り込みの引渡し中にＶＭＭ１１２のページフォールトが発生すると（例えば、ＶＭＭ１１２が物理メモリをＶＭ間で分割および保護するべく物理メモリ仮想化アルゴリズムを用いたが、物理メモリ内のＩＤＴが存在するページがページテーブルによってマッピングされていない場合）、ＶＭＭ１１２に対してＶＭ終了が発生する。続いて、ＶＭＭ１１２のフォールトコーディネータ１２６は、このページフォールトを解決して、ＶＭに制御を戻し、元々の割込みの引渡しを再開する（もしくは引渡しをエミュレートする）。フォールトコーディネータ１２６は、フォールトネスティング情報に含まれたこの元々の割込みについての情報に基づき、ＶＭへ制御を戻すとともに元々の割り込みの引渡しを再開する必要があると判定する。
【００３５】
一実施形態によると、ネストフォールトロジック１２２は、さまざまなネストレベルに対応する一連のフィールドに基づき、ネストされたフォールトについての情報を取得する。一実施形態によると、許容されたネストレベルそれぞれについてフォールト情報を取得する。例えば、ネストレベルが４レベル許容されているとすると、この４レベルそれぞれについてフォールト情報を取得する。一実施形態によると、このフォールト情報は、フォールト識別子およびフォールトタイプ（例えば外部割込み、内部割込み、マスク不可能割込み（ＮＭＩ）、例外など）といったフォールト識別情報を含む。別の実施形態によると、フォールトはエラーコードと対応付けられ、このエラーコードは、ハンドラの最初まで飛ぶ前にスタックにプッシュされる（または、ハードウェアレジスタまたはそれ以外の手段に提供される）必要がある。このような実施形態の場合、フォールト情報はさらにエラーコードを含む。本実施形態によると、ネストフォールト用の一連のフィールドは各許容ネストレベルに対して２以上のフィールドを含むとしてもよい。この場合、１フィールドはフォールト識別情報用で、残りのフィールドはエラーコードやフォールトに関連するそれ以外の情報用であるとしてもよい。
【００３６】
別の実施形態によると、フォールト情報を取得するのは最新の２つのフォールトについてのみである。例えば、許容されているネストレベルが４レベルあって、最初の３レベルではＶＭ終了が発生することなく各許容ネストレベルでネストフォールトが発生した場合、フォールト情報がＶＭＭに伝えられるのはレベル３とレベル４に対応付けられたフォールト（つまり、最新の２つのフォールト）のみである。繰り返しになるが、最新の２つのレベルそれぞれについてのフォールト情報は、フォールト識別子およびフォールトタイプのようなフォールト識別情報を含み、一実施形態によると、さらにフォールトに対応付けられたエラーコードも含む。最新２つより前に発生したフォールトに関するフォールト情報がないので、より多くのタイプのフォールトについてＶＭＭがＶＭの動作を構成してＶＭ終了を発生させ、ネストフォールト情報がなくならないようにする必要があるとしてもよい。これは、フォールト情報が存在しないとＶＭの再開が困難もしくは不可能になってしまうためである。
【００３７】
フォールト情報を格納するべく１以上の格納場所が利用できる。一実施形態によると、このような格納場所はＶＭＣＳ１２４内に存在する。または、プロセッサ１１８内、メモリ１２０内、メモリ１２０およびプロセッサ１１８の組み合わせ、もしくはこれ以外の格納場所にあってもよい。
【００３８】
ある１つのフォールトに関するフォールト情報を格納するために利用できる一連の格納場所を本明細書では、フォールト情報フィールドと呼ぶ。または、簡単にフィールドと呼ぶ（例えば、フォールト識別情報の格納場所とエラーコードの格納場所が別々にあるように格納場所が２以上ある場合もまとめてフィールドと呼ぶ）。
【００３９】
図２は、一実施形態に係る、仮想マシン環境においてネストされたフォールトへの支持を提供するためのプロセスを示すフローチャートである。このプロセスは、ハードウェア（例えば回路、専用ロジック、プログラム可能ロジック、マイクロコードなど）、ソフトウェア（例えば、汎用コンピュータシステムまたは専用マシンで実行されるもの）、もしくはハードウェアとソフトウェアの組み合わせから構成される処理ロジックによって行われるとしてもよい。一実施形態によると、このプロセスは図１に示したネストフォールトロジック１２２によって行われる。
【００４０】
図２に示すように、プロセス２００は処理ロジックがＶＭの動作中に最初のフォールト（フォールト１と呼ぶ）を検出することから始まる（処理ブロック２０２）。ＶＭの動作中に検出されたフォールトは、例外（例えばページフォールト、一般保護違反、トラップ、異常終了など）、割り込み（例えばハードウェア割り込み、ソフトウェア割り込みなど）もしくはプラットフォームイベント（例えばＩＮＩＴ、ＳＭＩなど）であってよい。処理ロジックは、フォールトネストレベルを記録するべく変数ｎを１に初期化する（処理ブロック２０３）。
処理ブロック２０４において処理ロジックは、最初のフォールト（つまりフォールト１、ｎ＝１）に関連するフォールト情報をフォールト情報フィールド１（つまりフィールドｎ）に格納する。この最初のフォールトもしくはそれ以外の本明細書で説明するフォールトに関連するフォールト情報は、フォールト識別子およびフォールトタイプ（例えば、外部割込み、内部割り込み、ＮＭＩ、例外など）のように、フォールトを識別する情報を含む。また一実施形態によるとさらに、エラーコードおよび／またはフォールトに対応付けられるこれ以外の情報を含む。別の実施形態によると、処理ロジックは、２番目のフォールトが検出されるまで、最初のフォールトに関連する情報をフォールト情報フィールド１に格納しない構成となっている。または逆に、２番目のフォールトを検出する前に、一時的な格納場所（例えばメモリ、プロセッサレジスタなど）に最初のフォールトに関連する情報を格納する構成となっている。
【００４１】
判定ブロック２０６において、処理ロジックはフォールトｎがＶＭ終了と対応しているかどうか（つまり、対応付けられた実行制御指標が、フォールトｎがＶＭ終了を発生させるようにＶＭ終了値に、設定されているかどうか）を判定する。フォールトｎがＶＭ終了と対応する場合、処理ロジックはＶＭ終了を発生させる（処理ブロック２１０）。この判定は、フォールト識別子（つまり、フォールトベクトル）、フォールトに対応付けられたエラーコード、１以上の指標またはＶＭＣＳ内のフィールドなどに基づいて行われるとしてもよい。
【００４２】
フォールトｎがＶＭ終了と対応していない場合、処理ロジックはフォールトｎに対応するネストレベル（つまりネストレベルｎ）が最大許容ネストレベルを超えているかどうか判定する（判定ボックス２１６）。最大許容ネストレベルを超えている場合、処理ロジックは、シャットダウン状態への移行によってＶＭ終了が発生するように構成されているかどうかを判定する（判定ボックス２１７）。もしそのように構成されていれば、処理ロジックはＶＭ終了を発生させ、ＶＭ終了は保留中のシャットダウン状態への移行によって発生したことをＶＭＭに知らせる（処理ブロック２２４）。シャットダウン状態への移行によってＶＭ終了が発生するように構成されていない場合、処理ロジックはＶＭをシャットダウン状態にする（処理ブロック２１８）。別の実施形態においては、保留中のシャットダウン状態への移行は無条件でＶＭ終了を発生させる。また別の実施形態においては、シャットダウン状態への移行がＶＭ終了を発生させることはない。このような実施形態の場合は、最大許容ネストレベルを超えている場合常にＶＭがシャットダウン状態となる。
【００４３】
（判定ボックス２１６で）最大許容ネストレベルを超えていない（と判定された）場合、処理ロジックはフォールトｎをＶＭに引渡すことを試みて（処理ブロック２１０）、フォールトｎの引渡し中に新たにフォールト（フォールトｎ+１）が発生しないかどうか判定する（判定ボックス２１２）。
【００４４】
フォールトｎの引渡し中に新たなフォールトが発生しなかった場合、処理ロジックは制御をフォールトｎに対応付けられたハンドラの第１命令へ移行する（処理ブロック２１４）。一方、フォールトｎの引渡し中にフォールトｎ+１が発生した場合、処理ロジックはフォールトｎ+１のフォールト情報をフィールドｎ+１に格納する（処理ブロック２２０）。また、処理ブロックはｎを１増やし（処理ブロック２２２）、判定ボックス２０６へと戻る。
【００４５】
以上より、プロセス２００では、すべての許容ネストレベルで発生したネストフォールトについても情報を取得し格納する。発生したフォールトすべてに関連する情報が１以上のフォールト情報フィールドに格納される。
【００４６】
図３は、一実施形態に係る、仮想マシン環境においてネストされたフォールトを支持するためのプロセス３００を示すフローチャートである。このプロセスは、ハードウェア（例えば回路、専用ロジック、プログラム可能ロジック、マイクロコードなど）、ソフトウェア（例えば、汎用コンピュータシステムまたは専用マシンで実行されるもの）、もしくはハードウェアとソフトウェアの組み合わせから構成される処理ロジックによって行われるとしてもよい。一実施形態によると、このプロセス３００は図１に示したネストフォールトロジック１２２によって行われる。
【００４７】
図３に示すように、プロセス３００は、処理ロジックがフォールトをＶＭに引き渡す必要があると判定することから始まる（処理ブロック３０１）。処理ロジックはレベルカウンタを１に初期化する（処理ブロック３０２）。続いて処理ロジックは、引渡される現行フォールトについてのフォールト情報を現行フォールト情報フィールドに格納し、先行フォールトは発生していない旨を指し示すべく先行フォールト情報フィールドを初期化する（処理ブロック３０４）。先行フォールトフィールドの初期化は、例えば、該フォールト情報フィールドが有効であることを示すビットをクリアすることによって行うとしてもよい。または、フォールト情報が該フィールドに含まれていないことを指し示すには、これ以外のエンコード方法を用いるとしてもよい。
【００４８】
続いて、処理ロジックは現行フォールトの引渡しがＶＭ開始の一環として行われているかどうか判定する（判定ボックス３０６）。ＶＭ開始の一環として行われていなければ、処理ロジックは現行フォールトがＶＭ終了を発生させるように構成されているかどうかを判定する（判定ボックス３０８）。一実施形態によると、この判定はＶＭＣＳに格納されている１以上の実行制御を参照して行われる。現行フォールトによってＶＭ終了が発生するのであれば、処理ロジックはＶＭ終了を発生させる（処理ブロック３１４）。一実施形態によると、このＶＭ終了の一環として、処理ロジックは現行フォールト情報フィールドおよび先行フォールト情報フィールドをＶＭＭに提供する。一実施形態によると、これらのフォールト情報フィールドは、ＶＭＭがアクセスできるＶＭＣＳにある。公知の機構（例えば１以上のレジスタまたは記憶場所）に基づき、ＶＭＭがこれらのフォールト情報フィールドを利用できるようにするとしてもよい。
【００４９】
現行フォールトによってＶＭ終了が発生するように構成されていなければ、処理ロジックはレベルカウンタが最大許容ネストレベルと同じ値を示しているかどうか判定する（判定ボックス３１０）。この判定は可変レベル（処理ブロック３０２で初期化され、処理ブロック３１６で増やされている）に基づいて行われる。ＩＡ−３２  ＩＳＡを例に挙げると、最大許容フォールトネストレベルは３となっている。最大許容フォールトネストレベルに達していれば、処理ロジックはフォールトシャットダウン状態へ移行するとＶＭ終了が発生するのかどうか判定する（処理ボックス３１１）。一実施形態によると、この判定は、ＶＭＣＳにある１以上の実行制御を参照することによって行われるとしてもよい。ＶＭ終了が発生するとされていれば、処理ロジックはＶＭＭに対してＶＭ終了を発生させ、保留中のフォールトシャットダウン状態への移行によってＶＭ終了が発生したことを指し示す（処理ブロック３２６）。ＶＭ終了が発生するとされていなければ、処理ロジックはＶＭをフォールトシャットダウン状態にする（処理ブロック３１２）。別の実施形態によれば、保留中のシャットダウン状態への移行は無条件でＶＭ終了を発生させる。また別の実施形態においては、シャットダウン状態への移行がＶＭ終了を発生させることはない。このような実施形態の場合は、最大許容ネストレベルを超えている場合にＶＭが常にシャットダウン状態となる。
【００５０】
（処理ボックス３１０で）最大許容フォールトネストレベルを超えていない（と判定された）場合、処理ロジックは現行フォールトをＶＭに引渡すことを試みて（処理ブロック３１８）、現行フォールトの引渡し中に新たにフォールトが発生しないかどうか判定する（判定ボックス３２０）。新たなフォールトが発生しなかった場合、処理ロジックは制御を現行フォールトに対応付けられたハンドラの第１命令へ移行する（処理ブロック３２２）。一方、新たなフォールトが発生した場合、処理ロジックはレベルカウンタを１増やし（処理ブロック３１６）、現行フォールト情報フィールドから先行フォールト情報フィールドにデータを移し（処理ブロック３２４）、判定ボックス３０８へ進む。
【００５１】
上述したように実施形態によっては、ＶＭ開始において、ＶＭＭがプロセッサに対してＶＭ開始処理の一環としてフォールトをＶＭに引渡さなければならないと指示するとしてもよい。処理ロジックが判定ボックス３０６において現行フォールトの引渡しがＶＭ開始の一環として行われていると判定した場合、現行フォールトがＶＭ終了を発生させることはないので、処理ロジックは処理ブロック３０８においてチェックを行わない。さらに、図３に示した実施形態によると、ＶＭＭは最初のフォールトを入れるのみであるとしてもよい。このため、処理ブロック３０６のチェックにより、最初のフォールトの引渡しがＶＭ開始の一環として行われていることがわかれば、処理ブロック３１０のチェックは行われない。処理ロジックは直接処理ブロック３１８に進む。
【００５２】
ＩＳＡによっては、幾つかの条件下でネストフォールト情報を保持できないことがある。また、上述した本発明の実施形態で説明した処理よりも複雑な経路でシャットダウン状態に進むＩＳＡもあるとしてよい。ＩＡ−３２  ＩＳＡを例に挙げて説明すると、ページフォールトと寄与フォールトの組み合わせによっては二重フォールトが発生する。二重フォールトが発生すると、先行するフォールトの情報がなくなってしまう。二重フォールトの後にフォールトが発生すれば三重フォールトになる可能性があり、先行するすべてのフォールトに関連する情報が失われてしまう。ＩＡ−３２  ＩＳＡでは、良性と分類される例外があり、その場合は二重フォールトや三重フォールトが発生することはない。またさらに、ＩＡ−３２  ＩＳＡでは、マシンチェック例外が連続して発生するとシャットダウン状態への移行が開始されるが、マシンチェックによって二重フォールトや三重フォールトが発生することはない。さらに、ＩＤＴを介したフォールトの引渡しによって、タスクスイッチが発生する可能性がある。ＶＭを実行している間にフォールトが発生した場合、一実施形態によると、このタスクスイッチが契機となってＶＭＭに対してＶＭ終了が発生することもある。このようなＩＳＡ固有の機能は、図２や図３では反映されていない。
【００５３】
図４は、一実施形態に係る、仮想マシン環境でネストフォールトを処理するためのプロセス４００を示すフローチャートである。このプロセスは、ハードウェア（例えば回路、専用ロジック、プログラム可能ロジック、マイクロコードなど）、ソフトウェア（例えば、汎用コンピュータシステムまたは専用マシンで実行されるもの）、もしくはハードウェアとソフトウェアの組み合わせから構成される処理ロジックによって行われるとしてもよい。一実施形態によると、このプロセス４００は図１に示したＶＭＭ１１２によって行われる。
【００５４】
図４に示すように、プロセス４００は処理ロジックがＶＭ終了の結果として制御を受信することから始まる（処理ブロック４０２）。続いて、処理ロジックは、このＶＭ終了がフォールトによって発生したと判定し（処理ブロック４０４）、このフォールトがネストフォールトであると判定する（つまりこのフォールトは、元々のフォールトを引渡している間に発生したもの）（処理ブロック４０６）。一実施形態によると、これらの判定は、プロセッサによって提供される、ＶＭＣＳの終了情報フィールドに格納されたデータを検証することによって行われるとしてもよい。
【００５５】
さらに、処理ロジックはこのＶＭ終了を発生させたフォールトを処理し（処理ブロック４０８）、元々のフォールトの引渡しを再開またはＶＭへの元々のフォールトの引渡しをエミュレートし（処理ブロック４１２）、制御をＶＭに戻す（処理ブロック４１０）。上述したように、元々のフォールトの引渡しの再開は、例えば、ＶＭＭがソフトウェアでフォールトの引渡しをエミュレートすることによって行ってもよいし、ＶＭＭがゲストに制御を戻す処理の一環としてフォールトの引渡しを行うようにプロセッサに要求することによって行うとしてもよい。
【００５６】
以上の部分では、仮想マシン環境においてネストされたフォールトに対する支持を提供するための方法および装置を説明してきた。上述した実施形態は本発明を説明するために挙げられたもので、本発明を限定するものではない。本明細書の内容に基づき、上述の実施形態以外の実施形態を数多く実現できることは当業者には明らかである。このため本発明の範囲は、本願の請求の範囲およびそれに類するものによって決まるものである。
【図１】
2008501198.tif 000002
【図２】
2008501198.tif 000003
【図３】
2008501198.tif 000004
【図４】
2008501198.tif 000005
【国際調査報告】
2008501198.tif 000006
2008501198.tif 000007
2008501198.tif 000008