(57)【要約】  一実施形態では、方法は、仮想マシン（ＶＭ）に制御を移行させる要求を仮想マシンモニタ（ＶＭＭ）から受信することと、シングルステップ・インジケータがシングルステップ値に設定されていることを判定することと、ＶＭに制御を移行することを引き起こす。更に、ＶＭの最初の命令の実行が正常終了した場合、制御は、最初の命令の実行の正常終了後に、ＶＭＭに移行される。【特許請求の範囲】
【請求項１】
仮想マシン（ＶＭ）に制御を移行させる要求を仮想マシンモニタ（ＶＭＭ）から受信することと、
シングルステップ・インジケータがシングルステップ値に設定されていることを判定することと、
前記ＶＭに制御を移行することと、
前記ＶＭの最初の命令の実行が正常終了した場合に、前記最初の命令の前記実行の前記正常終了後に、前記ＶＭＭに制御を移行することと
を備える方法。
【請求項２】
前記ＶＭＭへの制御の移行は、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを、前記ＶＭＭに通知することを備える請求項１に記載の方法。
【請求項３】
前記ＶＭの前記最初の命令の前記実行が現在のフォルトにより正常終了しなかった場合に、前記現在のフォルトは、前記ＶＭＭへの制御の移行に関連する前記最初の命令の前記実行によって引き起こされたものであるかどうかを判定することを更に備える請求項１に記載の方法。
【請求項４】
前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連する場合、前記ＶＭＭに制御を移行し、前記現在のフォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することを更に備える請求項３に記載の方法。
【請求項５】
前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連しない場合、前記ＶＭに前記現在のフォルトを送付することと、
前記現在のフォルトの前記送付が正常終了した場合、対応するフォルト・ハンドラの命令を実行する前に、前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により制御が前記ＶＭＭに移行されたことを前記ＶＭＭに通知することと
を更に備える請求項３に記載の方法。
【請求項６】
前記現在のフォルトの前記送付が失敗したことを判定することと、
新規フォルトが前記ＶＭＭへの制御の移行に関連するかどうかを判定することと、
前記新規フォルトが前記ＶＭＭへの制御の移行に関連する場合、前記ＶＭＭに制御を移行し、前記新規フォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと
を更に備える請求項５に記載の方法。
【請求項７】
前記新規フォルトが前記ＶＭＭへの制御の前記移行に関連しないことを判定することと、
前記ＶＭに前記新規フォルトを送付することと、
前記新規フォルトの前記送付が正常終了した場合、対応するフォルト・ハンドラの命令を実行する前に、前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと
を更に備える請求項６に記載の方法。
【請求項８】
前記ＶＭに制御を移行する前に、前記ＶＭに制御を移行させる前記要求が、前記ＶＭに送付されるベクタ化されたフォルトに関連することを判定することと、
前記ＶＭに制御を移行するときに、前記ＶＭに前記ベクタ化されたフォルトを送付することと、
前記ベクタ化されたフォルトの前記送付が正常終了した場合、
対応するフォルト・ハンドラの命令を実行するようにベクタ化された前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと
を更に備える請求項１に記載の方法。
【請求項９】
前記ベクタ化されたフォルトの前記送付が失敗であったことを判定することと、
新規フォルトが前記ＶＭＭへの制御の移行に関連するかどうかを判定することと、
前記新規フォルトが前記ＶＭＭへの制御の前記移行に関連する場合、前記ＶＭＭに制御を移行し、前記新規フォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと、
前記新規フォルトが前記ＶＭＭへの制御の前記移行に関連しない場合、前記ＶＭに前記新規フォルトを送付し、対応するフォルト・ハンドラの命令を実行する前に前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと
を更に備える請求項８に記載の方法。
【請求項１０】
前記ＶＭに制御を移行する前に、前記ＶＭに制御を移行させる前記要求がプロセッサの非活性活動状態に関連するかどうかを判定することと、
前記ＶＭに制御を移行することと、
ブレークイベントの発生の後まで前記ＶＭＭへの制御の移行を自制することと
を更に備える請求項１に記載の方法。
【請求項１１】
前記ブレークイベントが前記ＶＭＭへの制御の移行に関連する場合、前記ＶＭＭに制御を移行し、前記ブレークイベントにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することを更に備える請求項１０に記載の方法。
【請求項１２】
前記ブレークイベントが前記ＶＭＭへの制御の移行に関連しないことを判定することと、
前記ＶＭに前記ブレークイベントを送付することと、
前記ブレークイベントの前記送付が正常終了した場合、対応するハンドラの命令を実行する前に、前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと、
前記ブレークイベントの前記送付が失敗した場合、新規フォルトが前記ＶＭＭへの制御の移行に関連するかどうかを判定することと、
前記新規フォルトが前記ＶＭＭへの制御の前記移行に関連する場合、前記ＶＭＭに制御を移行し、前記新規フォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと、
前記新規フォルトが前記ＶＭＭへの制御の前記移行に関連しない場合、対応するフォルト・ハンドラの命令を実行する前に、前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと
を更に備える請求項１０に記載の方法。
【請求項１３】
前記シングルステップ・インジケータは、仮想マシン制御構造（ＶＭＣＳ）に含まれる請求項１に記載の方法。
【請求項１４】
前記ＶＭＭに制御を移行する前に、保存動作状態インジケータにアクセスし、前記保存動作状態インジケータが保存値に設定されている場合、前記ＶＭの動作状態の指示子を保存することを更に備える請求項１に記載の方法。
【請求項１５】
最初の命令の前記実行後にシングルステップより高い優先度を有するイベントを検出することと、
前記優先度が高いイベントは前記ＶＭＭによって処理されるのかどうかを判定することと、
前記優先度が高いイベントが前記ＶＭＭによって処理される場合、前記ＶＭＭに制御を移行し、前記優先度が高いイベントにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと、
前記高い優先度のイベントが前記ＶＭＭによって処理されない場合、待機ＶＭ  ｅｘｉｔインジケータをシングルステップ値に設定し、高い優先度のイベントを処理するように指定されたソフトウェアに制御を移行することと
を更に備える請求項１に記載の方法。
【請求項１６】
前記指定されたソフトウェアは、前記シングルステップ・インジケータの現在値により前記ＶＭＭに待機ＶＭ  ｅｘｉｔを送付する請求項１５に記載の方法。
【請求項１７】
前記指定されたソフトウェアは、前記待機ＶＭ  ｅｘｉｔインジケータの現在値により前記プロセッサに待機ＶＭ  ｅｘｉｔを前記ＶＭＭに送付させる要求をする請求項１５に記載の方法。
【請求項１８】
前記指定されたソフトウェアが動作を完了した後、前記シングルステップ・インジケータの現在値によりＶＭ  ｅｘｉｔが待機中であることを検出することと、
前記ＶＭＭに制御を移行することと、
前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することと
を更に備える請求項１５に記載の方法。
【請求項１９】
仮想マシンモニタ（ＶＭＭ）と、
シングルステップ・インジケータを格納する、前記ＶＭＭによって制御されるデータ構造と、
制御を仮想マシン（ＶＭ）に移行させる要求を前記ＶＭＭから受信し、前記シングルステップ・インジケータがシングルステップ値に設定されていることを判定し、前記ＶＭの最初の命令の実行が正常終了した場合、前記最初の命令の前記正常終了の後に制御を前記ＶＭＭに移行するシングルステップ・ロジックと
を備える装置。
【請求項２０】
前記シングルステップ・ロジックは、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知する請求項１９に記載の装置。
【請求項２１】
前記シングルステップ・ロジックは、更に、前記最初の命令の前記実行によって生じた現在のフォルトが前記ＶＭＭへの制御の移行に関連するかどうかを判定し、前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連する場合、制御を前記ＶＭＭに移行して、前記現在のフォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知する請求項１９に記載の装置。
【請求項２２】
前記シングルステップ・ロジックは、更に、前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連せず、かつ、前記現在のフォルトの前記送付が正常終了した場合に、前記現在のフォルトを前記ＶＭに送付し、対応するフォルト・ハンドラの命令を実行する前に前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知する請求項２１に記載の装置。
【請求項２３】
１つ以上のインジケータを格納するメモリと、
仮想マシン（ＶＭ）のシングルステップが示されているかどうかを判定することを目的として前記１つ以上のインジケータを使用し、前記ＶＭの最初の命令を実行し、前記最初の命令の前記実行が正常終了した場合は、前記最初の命令の前記実行の前記正常終了後に制御を仮想マシンモニタ（ＶＭＭ）に移行する、前記メモリに接続されたプロセッサと
を備えるシステム。
【請求項２４】
前記プロセッサは、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを、前記ＶＭＭに通知する請求項２３に記載のシステム。
【請求項２５】
前記プロセッサは、更に、前記最初の命令の前記実行によって生じた現在のフォルトが前記ＶＭＭへの制御の移行に関連するかどうかを判定し、前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連する場合、前記ＶＭＭに制御を移行し、前記現在のフォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知する請求項２３に記載のシステム。
【請求項２６】
前記プロセッサは、更に、前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連せず、かつ、前記現在のフォルトの前記送付が正常終了した場合、前記ＶＭに前記現在のフォルトを送付し、対応するフォルト・ハンドラの命令を実行する前に前記ＶＭＭに制御を移行し、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知する請求項２５に記載のシステム。
【請求項２７】
命令群を記録したマシン読み取り可能な媒体であって、
前記命令群が処理システムによって実行されることにより、前記処理システムは、
仮想マシン（ＶＭ）に制御を移行させる要求を仮想マシンモニタ（ＶＭＭ）から受信し、
シングルステップ・インジケータがシングルステップ値に設定されていることを判定し、
前記ＶＭに制御を移行し、
前記ＶＭの最初の命令の実行が正常終了した場合、前記最初の命令の前記実行の前記正常終了の後に前記ＶＭＭに制御を移行する
媒体。
【請求項２８】
前記ＶＭＭへの制御の移行は、前記シングルステップ・インジケータの現在値により前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知することを備える請求項２７に記載のマシン読み取り可能な媒体。
【請求項２９】
前記命令群が前記処理システムによって実行されることにより、前記処理システムは、更に、
前記ＶＭの前記最初の命令の前記実行が現在のフォルトにより正常終了しなかった場合、前記最初の命令の前記実行によって生じた前記現在のフォルトが前記ＶＭＭへの制御の移行に関連するかどうかを判定する
請求項２７に記載のマシン読み取り可能な媒体。
【請求項３０】
前記命令群が前記処理システムによって実行されることにより、前記処理システムは、更に、
前記現在のフォルトが前記ＶＭＭへの制御の前記移行に関連する場合、前記ＶＭＭに制御を移行し、前記現在のフォルトにより前記ＶＭＭに制御が移行されたことを前記ＶＭＭに通知する
請求項２９に記載のマシン読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概して、仮想マシンに関する。本発明の実施形態は、特に、仮想マシン環境における仮想マシンのシングルステップ機能のサポートを提供することに関する。
【背景技術】
【０００２】
シングルステップ技術は、従来のオペレーティングシステム（ＯＳ）環境において、デバッガによって広く使用されている。特に、シングルステップ技術は、アプリケーションを一度に1命令ずつ進めることを目的として使用され、これによって、デバッガがアプリケーションをソースコード内の特定のポイントに置くことを可能にしている。シングルステップを可能にすることを目的として、種々の技法が使用されてきた。例えば、Ｉｎｔｅｌ（登録商標）  Ｐｅｎｔｉｕｍ（登録商標）４の命令セット・アーキテクチャ（ＩＳＡ）（本明細書ではＩＡ−３２  ＩＳＡと呼ぶ）では、ＥＦＬＡＧＳレジスタ内のトラップフラッグ（ＴＦ）は、デバッガがアプリケーションをシングルステップすることを可能にすることを目的として指定されている。ＴＦビットが１に設定された場合、次の命令の完了後に、デバッグ例外が生成される。デバッガは、デバッグ例外の所有権を得た後に、（例：例外用のハンドラを作成し、デバッグ例外のイベントの際にハンドラが呼び出されるようにすることによって）ＴＦビットを設定する。しかし、デバッグ例外は、次の命令が正常終了した場合にのみ生成される。次の命令の実行がフォルト（例：ページフォルト）を引き起こした場合は、デバッグ例外は生成されない。むしろ、例外は、ベクタ化され、ＥＦＬＡＧＳレジスタビットの値を格納し、ＴＦビットをクリアする。ハンドラが完了すると、ＴＦビットの格納された値がリストアされ、命令が再実行される。再実行時にフォルトが生じない場合、デバッグ例外が生成される。
【０００３】
本発明は、参照番号が同様の要素を指す添付図面を本発明の実施例として使用することにより説明され、添付図面は、本発明を限定するものではない。
【図面の簡単な説明】
【０００４】
【図１】本発明が動作しうる仮想マシン環境の一実施形態を示す図である。
【０００５】
【図２】仮想マシン環境における仮想マシンのシングルステップ機能のサポートを提供する処理の一実施形態を示すフロー図である。
【０００６】
【図３】シングルステップ・インジケータがシングルステップ値に設定されたＶＭ  ｅｎｔｒｙ要求に応答する処理の一実施形態を示すフロー図である。
【０００７】
【図４】シングルステップより高い優先度を有するイベントを処理する処理の一実施形態を示すフロー図である。
【０００８】
【図５】一実施形態による、デバイスの仮想化を促進することを目的としてＶＭのシングルステップを使用する典型的な処理を示すフロー図である。
【発明を実施するための最良の形態】
【０００９】
仮想マシン環境において仮想マシンのシングルステップ機能のサポートを提供する方法および装置が説明される。以下の説明において、本発明を説明することを目的に、本発明の理解を提供するために多くの特定の詳細が提示される。しかし、当業者にとっては、これらの詳細を必要とすることなく本発明が実施可能であることは明白である。
【００１０】
以下の詳細な説明のいくつかの部分は、コンピュータシステムのレジスタまたはメモリ内のデータビットの操作に関するアルゴリズムおよび記号表現の形で説明される。これらのアルゴリズムの説明および表現は、データ処理分野の当業者によって、技術の内容の本質を他の当業者に最も効率的に伝えるために使用される方法である。アルゴリズムは、本明細書では、また一般的に、期待される結果に至る動作の自己矛盾無き順序であると考えられる。操作は、物理的な数量に対する物理的な操作を必要とするものである。通常、必ずしも必要ではないが、これらの数量は、格納、転送、結合、比較、および他の操作がされうる電気または磁気の信号の形態をとる。これらの信号を、ビット、値、要素、記号、文字、言葉、数字、またはそのような形で参照することは、主に広く使われていることを理由として、便利であることがたびたび証明されている。
【００１１】
しかし、上述および同様の用語は、適切な物理的な数量に関連付けられたものであって、これらの数量に適用される単に便利なラベルであると理解されるべきである。特に記述が無い限り、下記の説明から明白であるように、本発明に関する説明で使用される「処理」、「コンピューティング」、「計算」、「判定」、またはこれらに類似の言葉は、コンピュータシステムのレジスタおよびメモリ内の物理的な（電子的な）数量として表現されるデータを操作して、コンピュータシステムメモリまたはレジスタ、または、その他の情報を格納、転送、または表示するデバイス内の物理的な数量として同様に表現されるその他のデータに変換する、コンピュータシステムまたは同様の電子コンピューティングデバイスの動作および処理を指す。
【００１２】
実施形態に関する以下の詳細な説明では、本発明を説明する手段として、本発明が実施されうる特定の実施形態を示す添付図面への参照がなされる。添付図面では、数字などは、いくつかの図において一貫して実質的に同様のコンポーネントを説明する。これらの実施形態は、当業者による本発明の実施を可能にするために十分な詳細まで説明される。本発明の範囲から逸脱することなく、他の実施形態が使用されてもよく、また、構造的、論理的、および電気的な変更が加えられてもよい。更に、本発明の種々の実施形態は、それぞれ異なっているが、必ずしも相互排他的ではないと理解されるべきである。例えば、一実施形態において説明される特定の機能、構造、または性質は、他の実施形態に含まれうる。このため、下記の詳細な説明は、本発明を限定するものとして理解されるものではなく、本発明の範囲は、添付の特許請求の範囲および特許請求の範囲の均等物の全ての範囲のみによって定義される。
【００１３】
下記の例は、実行ユニットおよび論理回路と関連して、仮想マシンのシングルステップを説明するが、本発明の他の実施形態は、ソフトウェアによって実施されることができる。例えば、いくつかの実施形態では、本発明は、本発明による処理を実行することを目的としてコンピュータ（またはその他の電子デバイス）をプログラムするために使用されうる命令群が格納された、マシンまたはコンピュータ読み取り可能な媒体を含むコンピュータプログラム製品またはソフトウェアとして提供されてもよい。他の実施形態では、本発明の方法は、本発明の方法を実行することを目的とした、ハードウェアに制御された論理を含む特定のハードウェアコンポーネントによって、または、プログラムされたコンピュータコンポーネントおよびカスタム・ハードウェアコンポーネントの組み合わせによって実行されてもよい。
【００１４】
このように、マシン読み取り可能な媒体は、マシン（例：コンピュータ）によって読み取り可能な形態で情報を格納または送信する全ての機構を含んでもよい。これらの機構は、フロッピーディスク、光ディスク、コンパクト・ディスク・リード・オンリー・メモリ（ＣＤ−ＲＯＭ）、および、磁気光ディスク、リード・オンリー・メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、消去可能プログラマブル・リード・オンリー・メモリ（ＥＰＲＯＭ）、電気的消去可能リード・オンリー・メモリ（ＥＥＰＲＯＭ）、磁気または光カード、フラッシュメモリ、インターネットによる転送、電気、光、音波、またはその他の形態の伝播信号（例：搬送波、赤外線信号、デジタル信号、など）などを含み、しかし、これらに限定されない。
【００１５】
更に、デザインは、創造からシミュレーション、そして製造に至る種々の段階を経てもよい。デザインを表すデータは、多くの方法によってデザインを表しうる。最初に、シミュレーションにおいて便利であるように、ハードウェアは、ハードウェア記述言語または他の機能記述言語を使用して表現されてもよい。更に、ロジックおよび／またはトランジスタゲートを有する回路レベルモデルは、デザインプロセスのいくつかの段階において作成されてもよい。また、多くのデザインは、いくつかの段階において、ハードウェアモデル内の種々のデバイスの物理的な配置を表すデータのレベルに到達する。従来の半導体製造技術が使用される場合、ハードウェアモデルをあらわすデータは、集積回路の製造に使用されるマスクの異なるマスクレイヤにおける種々の特徴の存在または不在を指定するデータであってもよい。全てのデザインの表現において、データは、いかなる形式のマシン読み取り可能な媒体に格納されてもよい。これらの情報を送信するために調節または生成される光波または電波、メモリ、または、ディスクのような磁気または光ストレージは、マシン読み取り可能な媒体であってもよい。これらの媒体の全ては、デザインまたはソフトウェア情報を「伝送」または「表現」してもよい。コードまたはデザインを表現または伝送する電気搬送波が送信されると、電気信号のコピー、バッファリング、または再送信が実行される形で、新規のコピーが作成される。このように、通信プロバイダまたはネットワークプロバイダは、本発明の技法を具体化する物（搬送波）のコピーを生成してもよい。
【００１６】
図１は、本発明が動作しうる仮想マシン環境１００の一実施形態を示す図である。本実施形態では、最小限のプラットフォーム・ハードウェア１１６は、例えば、標準的なオペレーティングシステム（ＯＳ）またはＶＭＭ１１２のような仮想マシンモニタ（ＶＭＭ）を実行することができるコンピュータプラットフォームを備える。
【００１７】
ＶＭＭ１１２は、概してソフトウェアによって実装されるが、上位ソフトウェアに対して最小限のマシンインタフェースをエミュレートおよびエクスポートしてもよい。そのような上位ソフトウェアは、通常のまたはリアルタイムＯＳを含んでもよく、限定されたオペレーティングシステムの機能を有する大きく機能を取り除かれたオペレーティングシステムであってもよく、また、従来のＯＳの機能を有しなくてもよい。あるいは、例えば、ＶＭＭ１１２は、他のＶＭＭの中または上において実行されてもよい。ＶＭＭは、例えば、ハードウェア、ソフトウェア、ファームウェア、または種々の技法の組み合わせによって実装されてもよい。
【００１８】
プラットフォーム・ハードウェア１１６は、パーソナル・コンピュータ（ＰＣ）、メインフレーム、ハンドヘルド・デバイス、ポータブル・コンピュータ、セットアップ・ボックス、または他のいかなるコンピュータシステムであってもよい。プラットフォーム・ハードウェア１１６は、プロセッサ１１８およびメモリ１２０を有する。
【００１９】
プロセッサ１１８は、マイクロプロセッサ、デジタル信号プロセッサ、マイクロコントローラなどのような、ソフトウェアを実行することができるいかなるタイプのプロセッサであってもよい。プロセッサ１１８は、本発明の実施形態の方法を実行することを目的として、マイクロコード、プログラマブル・ロジック、またはハードウェアによって制御されたロジックを含んでもよい。図１は、プロセッサ１１８を１つだけ示しているが、システム内には１つ以上のプロセッサが存在してもよい。
【００２０】
メモリ１２０は、ハードディスク、フロッピーディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリー・メモリ（ＲＯＭ）、フラッシュメモリ、上記のデバイスの組み合わせ、またはプロセッサ１１８によって読み取り可能ないかなる他のタイプのマシン媒体であってもよい。メモリ１２０は、本発明の実施形態の方法を実行する命令群および／またはデータを格納してもよい。
【００２１】
ＶＭＭ１１２は、１つ以上の仮想マシン（ＶＭ）のアブストラクションを他のソフトウェア（すなわち、「ゲスト」ソフトウェア）に対して提供する。１つ以上のＶＭは、種々のゲストに対して同一または異なるアブストラクションを提供しうる。図１は、２つのＶＭ１０２および１１４を示す。各ＶＭで実行されるゲストソフトウェアは、ゲストＯＳ１０４または１０６のようなゲストＯＳ、および、種々のゲストソフトウェア・アプリケーション１０８および１１０を含んでもよい。ゲストＯＳ１０４および１０６のそれぞれは、ゲストＯＳ１０４または１０６が実行される、ＶＭ１０２および１１４内の物理リソース（例：プロセッサ・レジスタ、メモリ、およびＩ／Ｏデバイス）にアクセスすること、および、他の機能を実行することを想定する。例えば、ゲストＯＳは、プロセッサのアーキテクチャおよびＶＭにおいて提供されるプラットフォームによって、全てのレジスタ、キャッシュ、ストラクチャ、Ｉ／Ｏデバイス、メモリなどへのアクセスを有すると想定する。ゲストソフトウェアによってアクセスされるこれらのリソースは、「特権的」または「非特権的」として分類されうる。特権的リソースついては、ＶＭＭ１１２は、これらの特権的リソースの完全な制御を保持しつつ、ゲストソフトウェアによって要求される機能を容易にする。非特権的リソースは、ＶＭＭ１１２によって制御される必要はなく、ゲストソフトウェアによってアクセスされることができる。
【００２２】
更に、各ゲストＯＳは、例外（例：ページフォルト、一般保護違反、など）、割り込み（例：ハードウェア割り込み、ソフトウェア割り込み）、およびプラットフォームイベント（例：初期化（ＩＮＩＴ）およびシステムマネージメント割り込み（ＳＭＩ））のような種々のイベントを処理することを想定する。これらのフォルトイベントのうちのいくつかは、ＶＭ１０２および１１４の正常な動作を保証すること、および、ゲストソフトウェアから保護することを目的として、ＶＭＭ１１２によって処理される必要があるので、「特権的」である。
【００２３】
特権的フォルトイベントが発生したとき、または、ゲストソフトウェアが特権的リソースにアクセスしたとき、制御は、ＶＭＭ１１２に移行されうる。ゲストソフトウェアからＶＭＭ１２２への制御の移行は、本明細書ではＶＭ  ｅｘｉｔと呼ぶ。リソースアクセスを容易にした後、または、イベントを適切に処理した後、ＶＭＭ１１２は、制御をゲストソフトウェアに戻してもよい。ＶＭＭ１１２からゲストソフトウェアへの制御の移行は、本明細書ではＶＭ  ｅｎｔｒｙと呼ぶ。
【００２４】
一実施形態では、プロセッサ１１８は、仮想マシン制御構造（ＶＭＣＳ）１２４に格納されたデータに従って、ＶＭ１０２および１１４の動作を制御する。ＶＭＣＳ１２４は、ゲストソフトウェアの状態、ＶＭＭ１１２の状態、ＶＭＭ１１２がゲストソフトウェアの動作をどのように制御したいのかを示す実行制御情報、ＶＭＭ１１２とＶＭの間の移行を制御する情報などを含んでもよい。プロセッサ１１８は、ＶＭの実行環境を判定すること、および、その動作を抑制することを目的として、ＶＭＣＳ１２４から情報を読み取る。一実施形態では、ＶＭＣＳは、メモリ１２０に格納される。いくつかの実施形態では、複数のＶＭをサポートすることを目的として、複数のＶＭＣＳ構造が使用される。
【００２５】
一実施形態では、プロセッサ１１８は、制御をＶＭ１０２または１１４に移行（ＶＭ  ｅｎｔｒｙの要求）させるＶＭＭ１１２の要求を受信し、ＶＭＭ１２２が関連するＶＭのシングルステップを要求したかどうかを判定する、シングルステップ・ロジック１２２を有する。シングルステップ機能は、仮想マシン環境１００において種々の用途を有してもよい。例えば、ＶＭＭ１１２は、ＶＭ１０２または１１４で実行されるシステム（すなわち、特権的）またはアプリケーションコードをデバッグすることを目的として、シングルステップ機能を要求してもよい。他の例では、ＶＭＭ１１２は、ＶＭ１０２または１１４の動作中に特定のデバイスまたはプラットフォームの仮想化を実現することを目的として、シングルステップ機能を要求してもよい（例：ＶＭＭ１１２がＶＭに読み取り処理を許可し書き込み処理を許可したくないメモリ・マップドＩ／Ｏデバイス）。更に他の例では、ＶＭＭ１１２は、ＶＭ１０２または１１４の実行をトレースすることを目的として、シングルステップ機能を要求してもよい（新規システムの設計をテストする場合に、ＶＭの動作の経過を維持するため）。
【００２６】
シングルステップ・ロジック１２２は、シングルステップ・インジケータの現在値に基づいて、ＶＭＭ１２２がシングルステップ機能を要求したかどうかを判定する。一実施形態では、シングルステップ・インジケータは、ＶＭＣＳ１２４に格納される。あるいは、シングルステップ・インジケータは、プロセッサ１１８、メモリ１２０およびプロセッサ１１８の組み合わせ、またはいかなる他のストレージ・ロケーションに存在してもよい。
【００２７】
一実施形態では、ＶＭＭ１１２は、ＶＭ１０２または１１４に制御を移行させる要求をする前に、シングルステップ・インジケータの値を設定する。あるいは、ＶＭ１０２および１１４のそれぞれは、定義済みの値に設定された、または、ＶＭの動作中に変更された、異なるシングルステップ・インジケータに関連付けられる。
【００２８】
ＶＭＭ１１２によるＶＭ  ｅｎｔｒｙの要求を受信した際に、シングルステップ・ロジック１２２がシングルステップ・インジケータはシングルステップ値（例：１）に設定されていることを判定した場合、シングルステップ・ロジック１２２は、制御をＶＭに移行し、最初のＶＭ命令を実行し、最初のＶＭ命令の実行が正常終了した場合、制御をＶＭＭ１１２に移行する（すなわち、ＶＭ  ｅｘｉｔが生成される）。一実施形態では、シングルステップ・ロジック１２２は、シングルステップ・インジケータの現在値によってＶＭ  ｅｘｉｔが引き起こされたことを、（例：指定されたリーズン・コードを使用して）ＶＭＭ１１２に通知する。
【００２９】
最初のＶＭ命令の実行が失敗した場合（すなわち、フォルトを引き起こした場合）、シングルステップ・ロジック１２２は、（例：ＶＭＣＳ１２４内の関連する実行制御情報を調査して、その情報が、フォルトはＶＭ  ｅｘｉｔを必要とすることを示しているかどうかを判定することによって）結果として生じたフォルトがＶＭ  ｅｘｉｔに関連するものであるかどうかを判定する。フォルトがＶＭ  ｅｘｉｔに関連する場合は、シングルステップ・ロジック１２２は、ＶＭＭ１１２に制御を移行し、一実施形態では、フォルトによってＶＭ  ｅｘｉｔが引き起こされたことを、ＶＭＭ１１２に通知する。フォルトがＶＭ  ｅｘｉｔを必要としない場合、シングルステップ・ロジック１２２は、ＶＭにフォルトを送付する。一実施形態では、フォルトの送付は、送付されるフォルトに関連するエントリのリダイレクト構造を検索することと、フォルトを処理するように指定されたルーチンの場所の記述子をこのエントリから抽出することと、記述子を使用してルーチンの先頭に移動することを含む。対応する割り込み、例外、またはその他のフォルトを処理するように指定されたルーチンは、本明細書では、フォルト・ハンドラと呼ばれる。
【００３０】
フォルトの送付中、プロセッサ１１８は、仮想アドレスから物理アドレスにアドレスを変換するアドレス変換を１回以上行ってもよい。例えば、割り込みテーブルのアドレスまたは関連するハンドラのアドレスは、仮想アドレスであってもよい。プロセッサは、フォルトの送付中に、種々の確認を実行する必要があってもよい。例えば、プロセッサは、（制限違反フォルト、不在セグメントフォルト、スタックフォルト、などを結果として生じる）セグメンテーション・レジスタおよびアクセス・アドレスの確認、結果として保護違反（例：一般保護違反）を生じうるパーミッション・レベル確認などのような、整合性確認を実行してもよい。
【００３１】
フォルトのベクタ化処理中の、アドレス変換および確認は、ページフォルト、一般保護違反などのような種々のフォルトを結果として生じうる。現在のフォルトの送付中に引き起こされるいくつかのフォルトは、ＶＭ  ｅｘｉｔを引き起こしてもよい。例えば、物理メモリを保護および仮想化することを目的として、ＶＭＭ１１２がページフォルトの際にＶＭ  ｅｘｉｔを必要とする場合、現在のフォルトのＶＭへの送付中に生じるページフォルトは、結果としてＶＭ  ｅｘｉｔを生じる。
【００３２】
一実施形態では、シングルステップ・ロジック１２２は、現在のフォルトの送付が正常終了したかどうかを確認することによって、上述の追加のフォルトが発生する可能性に対応する。現在のフォルトの送付が正常終了した場合、シングルステップ・ロジック１２２は、フォルト・ハンドラの命令を実行する前にＶＭ  ｅｘｉｔを生成し、シングルステップ・インジケータの現在値によりＶＭ  ｅｘｉｔが生成されたことを、ＶＭＭ１１２に通知する。シングルステップ・ロジック１２２が送付は失敗したことを判定した場合、シングルステップ・ロジック１２２は、新規のフォルトに対して上述の処理を繰り返す。
【００３３】
一定の命令に対しては、命令の正常終了は、フォルト、例外、または割り込みのベクタ化を含む。例えば、ＩＡ−３２  ＩＳＡでは、ソフトウェア割り込み命令（すなわち、ＩＮＴｎ、ＩＮＴＯ、ＩＮＴ３）は、割り込みまたは例外ハンドラへの呼び出しを生成することによって、ソフトウェア割り込みをベクタ化する。このような割り込みが発生した場合、ＶＭにおける割り込みまたは例外ハンドラの最初の命令が実行される前に、シングルステップ機構によりＶＭ  ｅｘｉｔが発生する（ソフトウェア割り込みの送付中にネストされた例外が発生せず、また、フォルトまたは例外によってＶＭ  ｅｘｉｔが生じないと仮定する）。
【００３４】
ＶＭは、本明細書で説明されるシングルステップ機構に依存しない、デバッグまたはシングルステップ機構を使用してもよいことを留意すべきである。例えば、ＩＡ−３２  ＩＳＡでは、ＶＭは、シングルステップ・トラップを生成することを目的としてＥＦＬＡＧＳレジスタ内のＴＦビットを１に設定してもよく、または、デバッグ・ブレークポイントを生成することを目的としてデバッグ・レジスタを使用してもよい。最初のＶＭ命令がこのようなブレークポイントまたはトラップを引き起こした場合、ブレークポイントまたはトラップのベクタ化を行う前に、シングルステップ機構によりＶＭ  ｅｘｉｔが発生する。待機ブレークポイントまたはトラップに関する情報は、一実施形態では、ＶＭが使用する機構を正しくエミュレートすることを目的としてＶＭＭによって使用されるように、ＶＭＣＳに格納される。
【００３５】
図２は、ＶＭ環境においてＶＭのシングルステップ機能のサポートを提供する処理２００の一実施形態を示すフロー図である。この処理は、ハードウェア（例：回路、専用ロジック、プログラマブル・ロジック、マイクロコード、など）、ソフトウェア（汎用コンピュータシステムまたは専用マシン上で実行するソフトウェア）、またはハードウェアおよびソフトウェアの組み合わせを有する処理ロジックによって実行されてもよい。一実施形態では、処理２００は、図１のシングルステップ・ロジック１２２によって実行される。
【００３６】
図２を参照すると、処理２００は、処理ロジックがＶＭに制御を移行させる要求をＶＭＭから受信する、処理ブロック２０２から開始する。一実施形態では、制御を移行させる要求は、ＶＭＭによって実行されるＶＭ  ｅｎｔｒｙ命令によって受信される。
【００３７】
判定ボックス２０４において、処理ロジックは、ＶＭＭが呼び出されるＶＭのシングルステップを要求したかどうかを判定する。一実施形態では、処理ロジックは、ＶＭＭによって維持されるシングルステップ・インジケータの現在値を読み取ることによって、ＶＭＭがＶＭのシングルステップを要求したかどうかを判定する。シングルステップ・インジケータは、ＶＭＣＳ内またはＶＭＭおよび処理ロジック２００によってアクセス可能なその他のいかなるデータ構造内に存在してもよい。一実施形態では、ＶＭＭがＶＭのシングルステップを行いたい場合は、ＶＭＭは、シングルステップ・インジケータをシングルステップ値（例：１）に設定し、制御をこのＶＭに移行させる要求を生成する。一実施形態では、ＶＭＭがシングルステップ・インジケータをシングルステップ値に設定した場合、ＶＭＭは、ＶＭの実行中に発生しうる各フォルトの際にＶＭ  ｅｘｉｔが発生するように、実行制御インジケータも設定する。あるいは、シングルステップ・インジケータの設定は、いくつかのまたは全ての実行制御インジケータに依存しない。
【００３８】
一実施形態では、シングルステップ・インジケータは、各ＶＭ  ｅｘｉｔにおいて、非シングルステップ値（例：０）に再設定される。他の実施形態では、ＶＭＭは、ＶＭのシングルステップが必要とされない場合は、制御をＶＭに移行させる要求をする前に、シングルステップ・インジケータを非シングルステップ値に再設定する。
【００３９】
上述のように、例えば、ＶＭで実行されるシステムまたはアプリケーションコードをデバッグする場合、ＶＭの動作中にデバイスまたはプラットフォームを仮想化する場合、ＶＭの実行をトレースする場合などに、ＶＭＭは、ＶＭのシングルステップを要求してもよい。
【００４０】
処理ロジックが、ＶＭのシングルステップが必要とされていると判定した場合、処理ロジックは、処理ブロック２０８において、ＶＭの最初の命令を実行し、判定ボックス２１０において、最初のＶＭ命令の実行が正常終了したかどうかを判定する。最初のＶＭ命令の実行が正常終了した場合、処理ロジックは、処理ブロック２１２において、ＶＭ  ｅｘｉｔを生成し、処理ブロック２１４において、ＶＭ  ｅｘｉｔの原因がシングルステップであることをＶＭＭに通知する。一実施形態では、処理ロジックは、指定されたリーズン・コードを生成することによって、ＶＭ  ｅｘｉｔの原因をＶＭＭに通知する。一実施形態では、リーズン・コードはＶＭＣＳに格納される。
【００４１】
最初のＶＭ命令の実行が失敗した場合、処理ロジックは、判定ボックス２１６において、結果として生じたフォルトがＶＭ  ｅｘｉｔを引き起こすどうかを判定する。この判定は、（例：ＶＭＣＳ１２４内に格納された）関連する実行制御情報を調査することによって下される。結果として生じたフォルトがＶＭ  ｅｘｉｔを発生させる場合、処理ロジックは、処理ブロック２２２において、ＶＭ  ｅｘｉｔを生成し、処理ブロック２２４において、ＶＭ  ｅｘｉｔの原因がフォルトであることをＶＭＭに通知する。結果として生じたフォルトがＶＭ  ｅｘｉｔを引き起こさない場合、処理ロジックは、処理ブロック２１８において、ＶＭにフォルトを送付し、判定ボックス２２０において、フォルトの送付が正常終了したかどうかを判定する。フォルトの送付が正常終了した場合、処理ロジックは、処理ブロック２１２において、対応するフォルト・ハンドラの命令を実行する前にＶＭ  ｅｘｉｔを生成し、処理ブロック２１４において、ＶＭ  ｅｘｉｔの原因がシングルステップであることをＶＭＭに通知する。
【００４２】
フォルトの送付が失敗した場合、処理ロジックは、結果として生じた新規フォルトを処理することを目的として、判定ボックス２１６に戻る。
【００４３】
判定ボックス２０４において、処理ロジックが、ＶＭのシングルステップが要求されていないと判定した場合、処理ロジックは、処理ブロック２２６において、ＶＭの最初の命令を実行し、判定ボックス２２８において、最初のＶＭ命令の実行が正常終了したかどうかを判定する。最初のＶＭ命令の実行が正常終了した場合、処理ロジックは、処理ブロック２３０において、ＶＭの次の命令を実行し、判定ボックス２２８に戻る。そうではなく、最初のＶＭ命令の実行が失敗した場合、処理ロジックは、判定ボックス２３２において、結果として生じたフォルトがＶＭ  ｅｘｉｔを引き起こすかどうかを判定する。フォルトがＶＭ  ｅｘｉｔを引き起こす場合は、処理ロジックは、処理ブロック２２２において、ＶＭ  ｅｘｉｔを生成し、処理ブロック２２４において、ＶＭ  ｅｘｉｔの原因がフォルトであることをＶＭＭに通知する。フォルトがＶＭ  ｅｘｉｔを引き起こさない場合は、処理ロジックは、処理ブロック２３４において、ＶＭにフォルトを送付し、判定ボックス２３６において、フォルトの送付が正常終了したかどうかを判定する。フォルトの送付が正常終了した場合、処理ロジックは、フォルト・ハンドラの最初の命令を実行し、判定ボックス２２８に戻る。フォルトの送付が失敗した場合、処理ロジックは、結果として生じた新規フォルトを処理することを目的として、処理ブロック２３４に戻る。
【００４４】
いくつかの実施形態では、シングルステップ値に設定されたシングルステップ・インジケータに関連するＶＭ  ｅｎｔｒｙの要求に応じて呼び出されたＶＭの動作中に、一定のイベントが発生してもよい。例えば、ＶＭＭは、ＶＭ  ｅｎｔｒｙの一部としてＶＭにフォルトが送付されること、ＶＭ  ｅｎｔｒｙがプロセッサを非活性活動状態に置くこと、ＶＭ  ｅｎｔｒｙ後の最初の命令がＶＭ  ｅｘｉｔを引き起こすこと、などを必要としてもよい。Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ４の命令セット・アーキテクチャ（ＩＳＡ）（本明細書では、ＩＡ−３２  ＩＳＡと呼ぶ）では、非活性活動状態の例は、Ｈａｌｔ、Ｗａｉｔ−ｆｏｒ−ＳＩＰＩ、シャットダウン、およびＭＷＡＩＴ状態を含む。これらの非活性活動状態の間は、プロセッサは、いかなる命令も完了せず、プロセッサを非活性活動状態から通常活動状態に移行させうる１つ以上のブレークイベントの発生を待つ。例えば、Ｈａｌｔ活動状態の間は、プロセッサは、ブロックされないハードウェア割り込み、システム管理割り込み（ＳＭＩ）、システム初期化メッセージ（ＩＮＩＴ）、非マスク可能割り込み（ＮＭＩ）、デバッグ例外、マシン確認例外、などの発生を待つ。ＶＭのシングルステップ機能をサポートしながらこのようなイベントを処理する典型的な処理は、図３および図４と併せて以下に説明される。
【００４５】
図３は、シングルステップ・インジケータがシングルステップ値に設定されたＶＭ  ｅｎｔｒｙの要求に応答する処理３００の一実施形態を示すフロー図である。この処理は、ハードウェア（例：回路、専用ロジック、プログラマブル・ロジック、マイクロコード、など）、ソフトウェア（汎用コンピュータシステムまたは専用マシン上で実行するソフトウェア）、またはハードウェアおよびソフトウェアの組み合わせを有する、処理ロジックによって実行されてもよい。一実施形態では、処理３００は、図１のシングルステップ・ロジック１２２によって実行される。
【００４６】
図３を参照すると、処理３００は、処理ロジックが、シングルステップ・インジケータがシングルステップ値に設定されたＶＭ  ｅｎｔｒｙを検出する、処理ブロック３０２から開始する。次に、判定ボックス３０４において、処理ロジックは、ＶＭＭがＶＭ  ｅｎｔｒｙの一部として待機フォルトのＶＭへの送付を要求したかどうかを判定する（すなわち、ベクタ化されたフォルトがＶＭに送付されるかどうか）。そうである場合は、処理ロジックは、処理ブロック３０６において、待機フォルトをＶＭに送付する。フォルトの送付は、送付されるフォルトに関連するエントリのリダイレクト構造を検索することと、対応するフォルト・ハンドラの場所の記述子をこのエントリから抽出することと、この記述子を使用してフォルト・ハンドラの先頭に移動することを含んでもよい。フォルトの送付中に、新規フォルト（例：ページフォルト、一般保護違反、など）を結果として生じうるいくつかの処理（例：アドレス変換、セグメンテーション・レジスタおよびアクセス・アドレスの確認、パーミッション・レベル確認、など）が実行される必要があってもよい。判定ボックス３０８において、処理ロジックは、待機フォルトの送付が正常終了したかどうかを判定する。もしそうであれば（すなわち、新規フォルトが発生しなかったら）、処理ロジックは、処理ブロック３１０において、対応するハンドラの命令を実行する前に、シングルステップ・インジケータを指定するリーズン・コードと共にＶＭ  ｅｘｉｔを生成する。
【００４７】
待機フォルトの送付が失敗した場合、処理ロジックは、判定ボックス３１２において、結果として生じた新規フォルトがＶＭ  ｅｘｉｔを引き起こすかどうかを判定する。もしそうであれば、処理ロジックは、処理ブロック３１４において、新規フォルトを指定するリーズン・コードと共にＶＭ  ｅｘｉｔを生成する。そうではなく、新規フォルトがＶＭ  ｅｘｉｔを生じない場合は、処理ロジックは、新規フォルトを処理することを目的として処理ブロック３０６に戻る。
【００４８】
判定ボックス３０４において、処理ロジックが、ＶＭＭがＶＭ  ｅｎｔｒｙの一部として待機フォルトの送付を要求していないと判定した場合、処理ロジックは、更に、判定ボックス３１６において、ＶＭ  ｅｎｔｒｙがプロセッサを非活性活動状態に移行させるかどうかを判定する。もしそうである場合、処理ロジックは、処理ブロック３１７において、非活性活動状態（例：Ｈａｌｔ状態）に移行し、処理ブロック３１８において、プロセッサを非活性活動状態から通常（すなわち活性）活動状態に移行させることができるブレークイベントを待ち、判定ボックス３２０において、（例：ＶＭＣＳ１２４内の関連する実行制御情報を調査することによって）ブレークイベントがＶＭ  ｅｘｉｔを引き起こすかどうかを判定する。この判定が正である場合、処理ロジックは、処理ブロック３２２において、ブレークイベントを指定するリーズン・コードと共にＶＭ  ｅｘｉｔを生成する。ある実施形態では、ＶＭ  ｅｘｉｔの一部としてＶＭの動作状態の指示子が保存される必要がある場合（例えばＶＭＣＳ内の実行制御情報内の保存動作状態インジケータを調査することによって判断される）、ブレークイベントの発生前の動作状態（すなわち、非活性活動状態）の指示子は保存される。そうではなく、ブレークイベントがＶＭ  ｅｘｉｔを生じない場合、処理ロジックは、処理ブロック３０６に進み、ＶＭへのブレークイベントの送付を試みる。一実施形態では、ＶＭにブレークイベントを送付する試みは、ＶＭを非活性活動状態から通常（すなわち、活性）活動状態に移行させ、ＶＭの動作状態の指示子が保存された場合、指示子は通常（すなわち、活性）活動状態を示すという効果を有する。
【００４９】
判定ボックス３１６において、処理ロジックが、ＶＭ  ｅｎｔｒｙはプロセッサを非活性活動状態に移行させないと判定した場合、処理ロジックは、処理ブロック３２４において、ＶＭの最初の命令を実行し、判定ボックス３２６において、最初の命令の実行がＶＭ  ｅｘｉｔを引き起こすかどうかを判定する。もしそうである場合、処理ロジックは、処理ブロック３２８において、命令を識別するリーズン・コードと共にＶＭ  ｅｘｉｔを生成する。そうでない場合、処理ロジックは、判定ボックス３３０において、最初の命令が正常終了したかどうかを判定する。
【００５０】
最初の命令の実行が失敗した場合、処理ロジックは、結果として生じた新規フォルトを処理することを目的として判定ボックス３１２に進む。最初の命令の実行が正常終了した場合、処理ロジックは、更に、判定ボックス３３２において、命令がプロセッサを非活性活動状態に移行させるかどうかを判定する。例えば、ＩＡ−３２  ＩＳＡでは、ＨＬＴ命令は、プロセッサを非活性活動状態であるＨａｌｔ状態に移行させる。実行された命令が実際に非活性活動状態に移行した場合、処理ロジックは、更に、判定ボックス３３４において、活動状態の指示子が保存される必要があるかどうかを（例：ＶＭＣＳ内の実行制御情報の保存活動状態インジケータを調査することによって）判定する。活動状態の指示子が保存される必要がある場合、処理ロジックは、処理ブロック３３６において、活動状態の指示子を（例：ＶＭＣＳ内に）保存し、処理ブロック３３８において、シングルステップ・インジケータを指定するリーズン・コードと共にＶＭ  ｅｘｉｔを生成する。命令がプロセッサを非活性活動状態に移行させなかった場合、または、命令がプロセッサを非活性活動状態に移行させたが活動状態の指示子が保存される必要がない場合、処理ロジックは、処理ブロック３３８に直接進む。
【００５１】
いくつかの実施形態では、シングルステップは、いくつかの他のイベント（例えば、ＩＮＩＴおよびＳＭＩのような、プラットフォームイベント）の優先度よりも低い優先度を有してもよい。図４は、シングルステップより高い優先度を有するイベントを処理する処理４００の一実施形態を示すフロー図である。この処理は、ハードウェア（例：回路、専用ロジック、プログラマブル・ロジック、マイクロコード、など）、ソフトウェア（汎用コンピュータシステムまたは専用マシン上で実行するソフトウェア）、またはハードウェアおよびソフトウェアの組み合わせを有する、処理ロジックによって実行されてもよい。一実施形態では、処理４００は、図１のシングルステップ・ロジック１２２によって実行される。
【００５２】
図４を参照すると、処理４００は、処理ロジックが、シングルステップ・インジケータがシングルステップ値に設定されたＶＭ  ｅｎｔｒｙを検出する、処理ブロック４０２から開始し、処理ブロック４０４において、ＶＭの最初の命令を実行する。
【００５３】
次に、ＶＭの最初の命令の実行後に、処理ロジックは、処理ブロック４０６において、シングルステップより高い優先度を有するイベント（例：ＮＭＩ、ＳＭＩ、など）を検出し、判定ボックス４０８において、優先度が高いイベントがＶＭＭまたはいくつかの指定されたソフトウェアによって処理されるかどうかを判定する。一実施形態では、シングルステップ機構を使用するＶＭＭが、関連するＶＭ  ｅｎｔｒｙより前に、優先度が高いイベントの実行制御インジケータをＶＭ  ｅｘｉｔが発生するように設定することができる場合、優先度が高いイベントは、ＶＭＭによって処理される。シングルステップ機構を使用するＶＭＭが対応する実行制御インジケータを上述のように設定することができない場合、（例：使用可能なそのような実行制御インジケータが存在しない場合）、優先度が高いイベントは、指定されたソフトウェアによって処理される。例えば、シングルステップ機構を使用するＶＭＭは、関連するＶＭ  ｅｎｔｒｙより前に、ＮＭＩがＶＭ  ｅｘｉｔを引き起こすように対応する実行制御ビットを設定してもよい。他の例では、シングルステップ機構を使用するＶＭＭは、関連するＶＭ  ｅｎｔｒｙの前に、ＳＭＩに関連する実行制御インジケータを更新する機能を有しなくてもよい。そして、ＳＭＩは、優先度が高いイベントを管理するように指定されたソフトウェアによって処理されてもよい。
【００５４】
優先度が高いイベントがシングルステップ機構を使用するＶＭＭによって処理される場合、処理ロジックは、処理ブロック４１０において、優先度が高いイベントを指定するリーズン・コードと共にＶＭ  ｅｘｉｔを生成する。あるいは、優先度が高いイベントが、優先度が高いイベントを管理するように指定されたソフトウェアによって処理される場合、処理ロジックは、処理ブロック４１２において、（例：ＶＭＣＳ内の）待機ＶＭ  ｅｘｉｔインジケータをシングルステップ値に設定し、処理ブロック４１４において、指定されたソフトウェアに制御を移行する。そして、指定されたソフトウェアは、ブロック４１６において、優先度が高いイベントを処理し、シングルステップ機構により待機ＶＭ  ｅｘｉｔのＶＭＭへの送付を容易にする。待機ＶＭ  ｅｘｉｔインジケータは、優先度が高いイベントの処理が完了した際に、指定されたソフトウェアによって、または、プロセッサによってＶＭＭに送付されてもよい。例えば、ＳＭＩ処理は、ＶＭＭから独立した管理ソフトウェアによって処理されてもよい。ＳＭＩの処理が完了すると、管理ソフトウェアは、ＲＳＭ（システム管理モードからの復帰）命令を実行してもよく、その後、この命令の実行時に、プロセッサは、シングルステップ機構により待機ＶＭ  ｅｘｉｔの存在を認識し、それに従って待機ＶＭ  ｅｘｉｔを送付してもよい。
【００５５】
上述のように、ＶＭＭによるＶＭのシングルステップは、例えば、ＶＭにおいて実行されるシステムまたはアプリケーションコードのデバッグ、ＶＭの動作中におけるデバイスまたはプラットフォームの仮想化、ＶＭの実行のトレース、などを含む種々の用途を有してもよい。デバイスの仮想化を容易にすることを目的としてシングルステップを使用する典型的な処理について、以下において詳細に説明する。
【００５６】
図５は、一実施形態による、デバイスの仮想化を容易にすることを目的としたＶＭのシングルステップを使用する典型的な処理５００を示すフロー図である。デバイスは、メモリ・マップド・プログラミング・モデル（例：高度プログラマブル割り込みコントローラ（ＡＰＩＣ））を使用する入力／出力（Ｉ／Ｏ）デバイスであってもよく、ＶＭＭは、ＶＭによるメモリ・マップドＩ／Ｏデバイスへのデータ書き込みを防ぎつつ、ＶＭによるメモリ・マップドＩ／Ｏデバイスからのデータ読み取りを許可することを要求してもよい。処理５００は、ハードウェア（例：回路、専用ロジック、プログラマブル・ロジック、マイクロコード、など）、ソフトウェア（汎用コンピュータシステムまたは専用マシン上で実行するソフトウェア）、またはハードウェアおよびソフトウェアの組み合わせを含む、処理ロジックによって実行されてもよい。
【００５７】
図５を参照すると、処理５００は、ＶＭＭ内の処理ロジックがデバイスのメモリ・マップド空間を書き込み禁止にするためにＶＭのページテーブルを設定し、（例：対応する実行制御情報を使用して）ＶＭの実行中に発生するページフォルトがＶＭ  ｅｘｉｔを引き起こすようにページフォルトを設定する、処理ブロック５０２から開始する。一実施形態では、ＶＭページテーブルの設定は、ＶＭＭの制御によって各ＶＭに対して独立したアクティブなゲスト・ページテーブルを維持する、仮想トランスレーション・ルックアサイド・バッファ（ＶＴＬＢ）データ構造を使用することによって、有効にされる。
【００５８】
処理ブロック５０４において、プロセッサ内の処理ロジックは、ＶＭがデバイスのメモリ・マップド空間にアクセスしたとき、ページフォルトＶＭ  ｅｘｉｔを生成する。
【００５９】
処理ブロック５０６において、ＶＭＭ内の処理ロジックは、（例：フォルト・アドレス値がメモリ・マップドＩ／Ｏページ内に収まることを調査することによって）ＶＭのアクセスは保護されたメモリ・マップド空間へのものであったことを判定する。
【００６０】
処理ブロック５０８において、ＶＭＭ内の処理ロジックは、フォルト・アドレスを通常の物理メモリに存在する異なる物理メモリページ（すなわち、メモリ・マップドＩ／Ｏ空間ではない）にマップすることを目的として、ＶＭページテーブルを変更する。
【００６１】
処理ブロック５１０において、ＶＭＭ内の処理ロジックは、シングルステップ・インジケータを設定して、ＶＭ  ｅｎｔｒｙを要求する。
【００６２】
処理ブロック５１２において、プロセッサ内の処理ロジックは、ＶＭＭによって選択された上記ページにアクセスすることを目的として、ＶＭの命令を実行する。
【００６３】
処理ブロック５１４において、プロセッサ内の処理ロジックは、命令の正常終了の後に、シングルステップ・インジケータによりＶＭ  ｅｘｉｔを発生させる。
【００６４】
次に、ＶＭＭ内の処理ロジックは、処理ブロック５１６において、処理ブロック５０８で設定された物理メモリのページに書かれたデータを調査し、判定ボックス５１８において、データがデバイスに書き込まれるべきかどうかを判定する。この判定は、セキュリティ（例：デバイスへのいくつかのデータの書き込みは許可され、他のデータの書き込みは許可されない）または正確性（例：仮想化によって必要とされる場合は、デバイスに書き込まれるまえにデータが変更される必要がある）に基づいてもよい。
【００６５】
判定ボックス５１８において下された判断が正である場合、ＶＭＭ内の処理ロジックは、処理ブロック５２０において、データをデバイスに書き込む。あるいは、ＶＭＭは、例えばセキュリティ、性能、またはデバイスの仮想化に関する一定の性質が適切であることを保証することを目的として、デバイスに書き込む前に、データを修正してもよい。
【００６６】
このように、仮想マシン環境における仮想マシンのシングルステップ機能のサポートを提供する方法および装置が説明された。上述の説明は、本発明を説明することを意図したものであって、本発明を限定することは意図していない。上記の説明を読解することにより、当業者には多くの他の実施形態が明白となる。このため、本発明の範囲は、添付の特許請求の範囲および特許請求の範囲の均等物の全ての範囲によって決定される。
【図１】
2007525776.tif 000002
【図２】
2007525776.tif 000003
【図３】
2007525776.tif 000004
【図４】
2007525776.tif 000005
【図５】
2007525776.tif 000006
【国際調査報告】
2007525776.tif 000007
2007525776.tif 000008
2007525776.tif 000009