(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムにおける入れ子式仮想化の性能を改善するために、メモリに作動可能に接続された中央処理ユニット（ＣＰＵ）において仮想化命令を実行する方法であって、
前記メモリから仮想化命令をフェッチすることであって、前記仮想化命令は、仮想マシン・モニタ（ＶＭＭ）により用いられる制御構造内のデータを読み取り又は書き込みし、仮想マシン（ＶＭ）上の状態を維持して、前記ＶＭＭが実行する前記ＣＰＵの動作のルート・モードと、前記ＶＭが実行する前記ＣＰＵの動作の非ルート・モードとの間の遷移をサポートするための制御構造読み取り又は書き込み命令である、フェッチすることと、
前記ＣＰＵが前記ルート・モードにある場合、前記仮想化命令に従って、一次制御構造への特権データ・アクセスを実行することと、
前記ＣＰＵが前記非ルート・モードにあり、かつ、前記一次制御構造内の二次制御構造フィールドがイネーブルにされる場合、前記仮想化命令に従って、二次制御構造への非特権データ・アクセスを実行することと、
を含む方法。
【請求項２】
前記二次制御構造フィールド内に維持されるアクセス情報を用いて、前記二次制御構造にアクセスする、請求項１に記載の方法。
【請求項３】
前記二次制御構造フィールドがイネーブルにされるかどうかは、前記二次制御構造フィールドをイネーブルにする、前記一次制御構造内の二次制御構造イネーブルメント・フィールドから判断される、請求項２に記載の方法。
【請求項４】
前記二次制御構造への前記非特権データ・アクセスが書き込み動作である場合、前記二次制御構造になされたデータ更新をマッピングするマッピング構造内に、前記書き込み動作についての情報を記録する、請求項１に記載の方法。
【請求項５】
前記一次制御構造内のマッピング・フィールドを用いて、前記マッピング構造にアクセスする、請求項４に記載の方法。
【請求項６】
前記マッピング構造は、前記二次制御構造フィールドに対応するビットを含むビット・マップであり、前記マッピング構造内に情報を記録することは、適切なビットを前記ビット・マップ内に設定することを含む、請求項５に記載の方法。
【請求項７】
仮想化命令実行論理（仮想化論理）を含む中央処理ユニット（ＣＰＵ）装置であって、前記仮想化論理は、コンピュータ・システムにおける入れ子式仮想化の性能を改善するために、命令実行動作を実行するように構成され、前記動作は、
メモリから仮想化命令をフェッチすることであって、前記仮想化命令は、仮想マシン・モニタ（ＶＭＭ）により用いられる制御構造内のデータを読み取り又は書き込みし、仮想マシン（ＶＭ）上の状態を維持して、前記ＶＭＭが実行する前記ＣＰＵの動作のルート・モードと、前記ＶＭが実行する前記ＣＰＵの動作の非ルート・モードとの間の遷移をサポートするための制御構造読み取り又は書き込み命令である、フェッチすることと、
前記ＣＰＵが前記ルート・モードにある場合、前記仮想化命令に従って、一次制御構造への特権データ・アクセスを実行することと、
前記ＣＰＵが前記非ルート・モードにあり、かつ、前記一次制御構造内の二次制御構造フィールドがイネーブルにされる場合、前記仮想化命令に従って、二次制御構造への非特権データ・アクセスを実行することと、
を含む装置。
【請求項８】
前記二次制御構造フィールド内に維持されるアクセス情報を用いて、前記二次制御構造にアクセスする、請求項７に記載の装置。
【請求項９】
前記二次制御構造フィールドがイネーブルにされるかどうかは、前記二次制御構造フィールドをイネーブルにする、前記一次制御構造内の二次制御構造イネーブルメント・フィールドから判断される、請求項８に記載の装置。
【請求項１０】
前記二次制御構造への前記非特権データ・アクセスが書き込み動作である場合、前記二次制御構造になされたデータ更新をマッピングするマッピング構造内に、前記書き込み動作についての情報を記録する、請求項７に記載の装置。
【請求項１１】
前記一次制御構造内のマッピング・フィールドを用いて、前記マッピング構造にアクセスする、請求項１０に記載の装置。
【請求項１２】
前記マッピング構造は、前記二次制御構造フィールドに対応するビットを含むビット・マップであり、前記マッピング構造内に情報を記録することは、適切なビットを前記ビット・マップ内に設定することを含む、請求項１１に記載の装置。
【請求項１３】
中央処理ユニット（ＣＰＵ）と、前記ＣＰＵに作動可能に接続されたメモリと、前記ＣＰＵ内の仮想化命令実行論理（仮想化論理）とを含むシステムであって、前記仮想化論理は、前記システムにおける入れ子式仮想化の性能を改善するために命令実行動作を実行するように構成され、前記動作は、
前記メモリから仮想化命令をフェッチすることであって、前記仮想化命令は、仮想マシン・モニタ（ＶＭＭ）により用いられる制御構造内のデータを読み取り又は書き込みし、仮想マシン（ＶＭ）上の状態を維持して、前記ＶＭＭが実行する前記ＣＰＵの動作のルート・モードと、前記ＶＭが実行する前記ＣＰＵの動作の非ルート・モードとの間の遷移をサポートするための制御構造読み取り又は書き込み命令である、フェッチすることと、
前記ＣＰＵが前記ルート・モードにある場合、前記仮想化命令に従って、一次制御構造への特権データ・アクセスを実行することと、
前記ＣＰＵが前記非ルート・モードにあり、かつ、前記一次制御構造内の二次制御構造フィールドがイネーブルにされる場合、前記仮想化命令に従って、二次制御構造への非特権データ・アクセスを実行することと、
を含む、システム。
【請求項１４】
前記二次制御構造フィールド内に維持されるアクセス情報を用いて、前記二次制御構造にアクセスする、請求項１３に記載のシステム。
【請求項１５】
前記二次制御構造フィールドがイネーブルにされるかどうかは、前記二次制御構造フィールドをイネーブルにする、前記一次制御構造内の二次制御構造イネーブルメント・フィールドから判断される、請求項１４に記載のシステム。
【請求項１６】
前記二次制御構造への前記非特権データ・アクセスが書き込み動作である場合、前記二次制御構造になされたデータ更新をマッピングするマッピング構造内に、前記書き込み動作についての情報を記録する、請求項１３に記載のシステム。
【請求項１７】
前記一次制御構造内のマッピング・フィールドを用いて、前記マッピング構造にアクセスする、請求項１６に記載のシステム。
【請求項１８】
前記マッピング構造は、前記二次制御構造フィールドに対応するビットを含むビット・マップであり、前記マッピング構造内に情報を記録することは、適切なビットを前記ビット・マップ内に設定することを含む、請求項１７に記載のシステム。
【請求項１９】
中央処理ユニット（ＣＰＵ）と、前記ＣＰＵに作動可能に接続されたメモリと、前記ＣＰＵ内の仮想化命令実行論理（仮想化論理）と、前記メモリ内のプログラム命令とを含むシステムであって、前記仮想化論理及び前記プログラム命令は、物理マシンと、前記物理マシン上で実行される一次仮想マシン（一次ＶＭ）と、前記一次ＶＭ上で実行される二次仮想マシン（二次ＶＭ）とを含む仮想化環境、並びに、入れ子式仮想化の性能を改善するための動作をサポートし、前記動作は、
前記物理マシン上で一次仮想マシン・モニタ（一次ＶＭＭ）を実行して、前記一次ＶＭを提供することと、
前記一次ＶＭ上でゲストとして二次仮想マシン・モニタ（二次ＶＭＭ）を実行して、前記二次ＶＭを提供することと、
前記物理マシンが、前記一次ＶＭＭが前記一次ＶＭを制御するように作動する動作のリアル・ルート・モードと、前記二次ＶＭを含む前記一次ＶＭのゲストが作動する動作のリアル非ルート・モードとを有することと、
前記一次ＶＭが、前記二次ＶＭＭが前記二次ＶＭを制御するように作動する動作の仮想ルート・モードと、前記二次ＶＭのゲストが作動する動作の仮想非ルート・モードとを有することと、
前記一次ＶＭＭにより用いるための一次制御構造を提供して、前記一次ＶＭ上の状態を維持し、前記リアル・ルート・モードと前記実・非ルート・モードとの間の遷移をサポートすることと、
前記二次ＶＭＭにより用いるための二次制御構造を提供して、前記二次ＶＭ上の状態を維持し、前記仮想ルート・モードと前記仮想非ルート・モードとの間の遷移をサポートすることと、
前記一次ＶＭを提供するために前記一次ＶＭＭによって用いられ、かつ、前記二次ＶＭを提供するために前記二次ＶＭＭによって用いられる命令セットを実装することと、
前記命令セットが、前記一次制御構造内のデータを読み取り及び書き込みするとき、前記リアル・ルート・モードにある前記一次ＶＭＭのみによって実行可能であるが、前記一次ＶＭＭからのサポートなしに前記一次制御構造からの間接アクセスを介して前記二次制御構造を読み取り及び書き込むとき、前記仮想ルート・モードにある前記二次ＶＭＭによって実行可能な、制御構造読み取り及び書き込み命令を含むことと、
を含むシステム。
【請求項２０】
前記一次制御構造が、前記二次制御構造のフィールドにマッピングするマッピング構造についての情報を維持するためのフィールドを含むことと、
前記制御構造書き込み命令に応答して書き込まれる前記二次制御構造のフィールドに対応するフィールドを前記マッピング構造内に設定することと、
前記一次ＶＭＭが、新しいデータで書き込まれた前記二次制御構造のフィールドを識別するために、前記マッピング構造を用いて、前記二次制御構造のフィールドを二次制御構造のコピーにコピーすることと、
をさらに含む、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理リソースのハードウェア仮想化支援機能（hardware-assistedvirtualization）に関する。より具体的には、本発明は、多層のハードウェア仮想化支援機能の提供における改善に関する。
【背景技術】
【０００２】
背景として、ｘ８６アーキテクチャに基づくもののような今日のマイクロプロセッサには、ハードウェア支援による仮想化のサポートが含まれる。仮想化命令のセットは、ゲスト・オペレーティング・システム及びアプリケーション・ソフトウェアを通常の特権レベルにおける非ルート・モード（non-root mode）で実行させながら、ハイパーバイザが、超特権ルート・モード（rootmode）で動作することを可能にする。現在のところ、ｘ８６ハードウェア仮想化機能それ自体は、仮想化されていない。このことは、ｘ８６ルート・モードのハイパーバイザが、非ルート・モードのハイパーバイザをゲストとして効率的に実行すること、すなわち、入れ子式仮想化又は階層化された仮想化として知られる概念、を妨げることがある。この欠点に対処するための２つの主な技術は、トラップ・アンド・エミュレート（trap-and-emulate）及び動的変換である。トラップ・アンド・エミュレートとは、ハードウェアが、ゲスト・ハイパーバイザにより出された個々の仮想化命令をトラップし、ルート・モードのハイパーバイザにその行動をエミュレートさせることを必要とする。クリティカル・コードパスにおける高頻度の仮想化命令は、この機構を法外に遅くする可能性がある。動的変換は、ゲスト・ハイパーバイザの特権コード・シーケンスをゲスト仮想マシン内に安全に閉じ込められる命令に変換することを必要とする。これは、複雑であり、特定のワークロードに対して容認できないほど大きい性能上の影響を与えることがある。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｉｎｔｅｌ  ６４（登録商標）及びＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ、Ｖｏｌｕｍｅ  ２Ｂ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ、Ｎ−Ｚ（２００９年３月）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この発明の目的は、コンピュータ・システムにおける入れ子式仮想化の性能を改善するための仮想化アーキテクチャを提供することにある。
【課題を解決するための手段】
【０００５】
本発明によって提供されるのは、コンピュータ・システムにおける入れ子式仮想化の性能を改善するための仮想化アーキテクチャである。仮想化命令は、仮想マシン・モニタ（ＶＭＭ）により用いられる制御構造内のデータを読み書きし、仮想マシン（ＶＭ）上の状態を維持して、ＶＭＭが実行するＣＰＵの動作のルート・モードとＶＭが実行するＣＰＵの動作の非ルート・モードとの間の遷移をサポートする。ＣＰＵがルート・モードにある場合、仮想化命令に従って、一次制御構造への特権データ・アクセスが行なわれる。ＣＰＵが非ルート・モードにあり、かつ、一次制御構造内の二次制御構造フィールドがイネーブルにされる場合、非特権データ・アクセスを行なう。
【０００６】
本発明の上記の及び他の特徴及び利点は、添付図面に示されるような、開示された実施形態の上記のより具体的な説明から明らかであろう。
【図面の簡単な説明】
【０００７】
【図１】開示された実施形態による、入れ子式仮想化を実装するコンピュータ・システムを示す機能ブロック図である。
【図２】図１のシステム内に含ませることができる例示的なコンポーネントを示す機能ブロック図である。
【図３】図１のシステムの例示的な動作モードを示す機能ブロック図である。
【図４】開示された実施形態による例示的な制御構造の概略図である。
【図５】図１のシステムにおいて実行できる動作を処理する例示的な仮想化命令を示すフロー図である。
【図６】図１のシステムにおいて実行できる例示的な制御構造の処理動作を示すフロー図である。
【図７】別の開示された実施形態による別の例示的な制御構造の概略図である。
【図８】図１のシステムにおいて実行できる付加的な例示的な制御構造の処理動作を示すフロー図である。
【発明を実施するための形態】
【０００８】
ここで、幾つかの図の全てにおいて同じ参照符号が同じ要素を表す図面を参照すると、図１は、入れ子式仮想化をサポートするように構成された例示的なコンピュータ・システム２を示す。システム２は、少なくとも１つのＣＰＵ（Central Processing Unit、中央処理ユニット）１０と、ＣＰＵ１０に作動的に結合されたメモリ１２とを組み込む物理マシン４を含む。ＣＰＵは、単一コア又はマルチコア・マイクロプロセッサの実行コアとして、或いは汎用プロセッサ、マイクロ・コントローラ、信号プロセッサ等のようないずれかの他のタイプの命令処理デバイス内に実装することができる集積回路である。ＣＰＵ１０は、ｘ８６アーキテクチャを実装することができるが、このことは、ここで開示される入れ子式仮想化技術を実施するための要件ではない。メモリ１２は、プログラム命令及びデータを格納できるいずれかのタイプのコンピュータ可読ストレージ媒体を用いて実装することができる。例示的なメモリ・タイプとして、これらに限定されるものではないが、静的ランダム・アクセス・メモリ又は動的ランダム・アクセス・メモリ、半導体読み出し専用メモリ又はフラッシュ・メモリ、磁気ディスク・メモリ又は光ディスク・メモリ、或いはこれらの組み合わせが挙げられる。
【０００９】
単なる例として制限なく、物理マシン４は、ほんの数例を挙げると、汎用コンピュータ、特殊用途のコンピュータ、ポータブル・コンピュータ・デバイス、通信デバイス、マルチメディア又は音声提示デバイス、セットトップ・デバイス、内蔵されたシステム、専用論理又は制御システムのいずれかの中で具体化することができる。１つの例示的な構成が、図２に示され、物理マシン４は、メモリ・コントローラ１４を介してメモリ１２に相互接続された複数のＣＰＵ１０を含む。メモリ・コントローラ１４は、統合されたバス・インフラストラクチャ１８を提供するチップセット内に、Ｉ／Ｏ（Input/Output、入力／出力）コントローラ１６と共に実装することができる。メモリ・コントローラの機能を各ＣＰＵ１０と統合させることもできる。物理マシン４に加えることができる付加的なコンポーネントが、メモリ・コントローラ・ハブ１４に接続して随意的なディスプレイ・モニタ（図示せず）への視覚出力情報を生成できる、随意的なグラフィックス・カード２０を含む。磁気ディスク・ドライブ又は光ディスク・ドライブのような周辺ストレージ・デバイス２２を、Ｉ／Ｏコントローラ１６に接続することもできる。種々の周辺機器２４は、さらにＩ／Ｏコントローラ１６に接続することができる。周辺機器２４は、他のタイプのデバイスの中でも、ＵＳＢバス・コントローラ、ＳＣＳＩディスク・コントローラ及びＮＩＣを含むことができる。
【００１０】
当業者であれば、物理マシン４は、上述の付加的なコンポーネントの幾つか又は全てを用いて又は用いずに、他の多くの方法で実装できることを認識するであろう。物理マシン４は、図２に示されるもの以外の他の周知のコンポーネントを含み得ることがさらに認識されるであろう。簡略にするため、かつ、開示された主題を分かりにくくしないように、このようなコンポーネントについては説明しない。
【００１１】
ここで図１に戻ると、物理マシン４のＣＰＵ１０は、仮想マシン環境をサポートするための、仮想マシン・モニタ（ハイパーバイザとしても知られる）等の仮想化ソフトウェア（又は、ファームウェア）により用いることができるルート・モードとして知られる超特権モードの動作をサポートする。仮想マシン環境内の通常の特権レベルにおいて標準的なオペレーティング・システム及びアプリケーション・ソフトウェアを実行するために、非ルート・モードの動作も与えられる。ＣＰＵ１０はまた、ハードウェアの仮想化をサポートする仮想化命令実行論理２６も含む。仮想化論理２６は、マイクロコード、又は物理マシン４上で実行される仮想マシン・モニタが出す仮想化命令を実行する他の論理として実装することができる。仮想化論理２６によってサポートされる仮想化命令セットは、ルート・モードから非ルート・モードに切り換えて仮想マシン・モニタから仮想マシン環境に入るための命令、及び、非ルート・モードからルート・モードに切り換えて仮想マシン環境を出て制御を仮想マシン・モニタに戻すための命令を含むことができる。Ｉｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャによって提供されるＶＭＸ（Virtual Machine eXtensions）命令セットは、仮想化論理２６を実装するための始点として用い得る１つの例示的な技術を表す。本開示に従って入れ子式仮想化を実装するために、従来のＩｎｔｅｌ（登録商標）ＶＭＸ命令セットになすことができる修正を含む、仮想化論理２６のさらに別の態様が、以下により詳細に説明される。
【００１２】
さらに図１を参照すると、一次仮想マシン・モニタ（一次ＶＭＭ）３０が、物理マシン４上で実行され、一次仮想マシン（一次ＶＭ）３２を提供する。これは、図１に示される入り子式仮想化環境の第１の仮想化層を表す。二次仮想マシン・モニタ（二次ＶＭＭ）３４が、一次ＶＭ３２上でゲストとして実行されて、二次仮想マシン（二次ＶＭ）３６を提供する。これは、図１に示される入れ子式仮想化環境の第２の仮想化層を表す。ゲスト・プログラム３８が、二次ＶＭ３６上でゲストとして実行される。図１には示されないが、一次ＶＭＭ３０により、複数の一次ＶＭ３２のインスタンスを提供することができる。各々の一次ＶＭのインスタンス内では、二次ＶＭＭ３４のインスタンスそれ自体が、複数の二次ＶＭ３６のインスタンスを実行することができる。同様に、各々の二次ＶＭのインスタンスは、複数のゲスト・プログラム３８のインスタンス、又は付加的なレベルの入れ子式ＶＭＭ／ＶＭ論理を含むことができる他のプログラムを実行することができる。
【００１３】
一次ＶＭＭ３０は、物理マシン４と互換性があり、かつ、仮想化論理２６を利用してその仮想化動作をサポートする、いずれの従来の仮想マシン・モニタ又はハイパーバイザを用いて実装することもできる。ソフトウェア内に実装される場合、このようなプログラムをメモリ１２内にロードすることができ、ＣＰＵ１０によって実行されるときに、一次ＶＭＭ３０の機能を実行する。ファームウェア・ベース又はハードウェア・ベースの仮想マシン・モニタ・プログラムを用いることもできる。場合によっては、一次ＶＭＭ３０は、カーネル・モジュール又はドライバのような、オペレーティング・システム・カーネルの一部とすることができる。別の場合では、一次ＶＭＭ３０は、独立型の仮想マシン・モニタとすることができる。一次ＶＭＭ３０の機能は、物理マシン４のハードウェア・リソースの一部が割り当てられる第１のレベルの仮想化環境（例えば、ＣＰＵタイム・スライス及びメモリ・アドレス）を提供する、一次ＶＭ３２を確立することを含む。割り当てられたハードウェア・リソースは、一般に、仮想リソースと呼ぶことができ、それらは一次ＶＭ３２に割り当てられるので、図１に参照符号３２Ａで示されるように、具体的には一次仮想リソースと呼ぶことができる。一次ＶＭ３２上で実行されるゲスト、この場合は、二次ＶＭＭ３４は、それらがあたかも専用の物理マシンを表すかのように一次仮想リソース３２Ａを認識し、それに応じて動作する。上述したように、一次ＶＭＭ３０は、１つより多い一次ＶＭ３２をサポートすることができる。各々の付加的な一次ＶＭ３２は、付加的な二次ＶＭＭ３４のインスタンスを含む、いずれかのタイプのソフトウェアを実行することができる。
【００１４】
二次ＶＭＭ３４はまた、一次ＶＭ３２と互換性がある、いずれの従来の仮想マシン・モニタ又はハイパーバイザを用いて実装することもできる。さらに、二次ＶＭＭ３４は、ＣＰＵ１０の仮想化論理２６を利用して、その仮想化動作をサポートすることができる。ソフトウェア内に実装される場合、このようなプログラムは、メモリ１２内にロードすることができ、ＣＰＵ１０によって実行されるとき、二次ＶＭＭ３４の機能を実行する。ファームウェア・ベース又はハードウェア・ベースの仮想マシン・モニタ・プログラムを用いることもできる。場合によっては、二次ＶＭＭ３４は、カーネル・モジュール又はドライバのような、オペレーティング・システム・カーネルの一部とすることができる。別の場合では、二次ＶＭＭ３４は、独立型の仮想マシン・モニタとすることができる。二次ＶＭＭ３４の機能は、一次ＶＭ３２の一次仮想リソース３２Ａの一部が割り当てられる第２のレベルの仮想化環境（例えば、ＣＰＵタイム・スライス及びメモリ・アドレス）を提供する、二次ＶＭ３６を確立することを含む。割り当てられたハードウェア・リソースは、一般に、仮想リソースと呼ぶことができ、それらは、二次ＶＭ３６に割り当てられるので、図１に参照符号３６Ａで示されるように、具体的には二次仮想リソースと呼ぶことができる。二次ＶＭ３６上で実行されるゲスト、この場合は、ゲスト・プログラム３８は、それらがあたかも専用の物理マシンを表すかのように二次仮想リソース３６Ａを認識し、それに応じて動作する。上述したように、二次ＶＭＭ３４は、１つより多い二次ＶＭ３６をサポートすることができる。同じく上述したように、各々の付加的な二次ＶＭ３６は、付加的なゲスト・プログラム３８のインスタンス、又は付加的なレベルの入れ子式ＶＭＭ／ＶＭ論理を含むことができる他のプログラムを含む、いずれかのタイプのソフトウェアを実行することができる。
【００１５】
ゲスト・プログラム３８それ自体は、二次ＶＭ３６上で実行することができるいずれのプログラムとすることもできる。このゲスト・プログラム３８は、オペレーティング・システム、アプリケーション・プログラム、又は上述のように、別の仮想マシン・モニタを含むことができる。ゲスト・プログラム３８がオペレーティング・システムである場合、これは、１つ又は複数のアプリケーション・プログラムを従来の方法で実行することができる。ゲスト・プログラム３８が別の仮想マシン・モニタである場合、これは、図１に示される入り子式仮想化環境の第３の仮想化層を表す三次仮想マシン（図示せず）を作製することができる。システム要件に応じて、付加的な入れ子式仮想化層を設けることができることが認識されるであろう。
【００１６】
前述のように、物理マシン４のＣＰＵ１０は、仮想マシン・モニタによって用いるためのルート・モードの動作と、仮想マシン内で実行される他のソフトウェアのための非ルート・モードの動作とをサポートする。一次ＶＭＭ３０は、ＣＰＵのルート・モードで動作する。図３に示すように、これは、一次ＶＭＭ３０が用いて、一次ＶＭ３２を確立し、これを制御するリアル・ルート・モード（real root mode）の動作と考えることができる。二次ＶＭＭ３４を含む、一次ＶＭ３２内で実行されているゲストは、ＣＰＵの非ルート・モードで動作する。これは、リアル非ルート・モード（real non-root mode）の動作と考えることができる。さらに図３に示すように、一次ＶＭ３２はまた、二次ＶＭＭ３４が二次ＶＭ３６を制御するように実行する、仮想ルート・モード（virtual root mode）の動作を有すると考えることもできる。一次ＶＭ３２は、同様に、仮想非ルート・モード（virtual non-root mode）の動作を有すると考えることもできる。ゲスト・プログラム３８のような、二次ＶＭ３６のゲストは、一次ＶＭの仮想非ルート・モードで動作する。
【００１７】
物理マシン４の動作中、実行状態は、リアル・ルート・モードとリアル非ルート・モードとの間で周期的にシフトする。最初に、ＣＰＵ１０は、一次ＶＭＭ３０がその仮想マシン・モニタ機能を実行するリアル・ルート・モードで実行することができる。その後、一次ＶＭＭ３０は、一次ＶＭ３２を実行するために、物理マシン４が、リアル・ルート・モードを出て、リアル非ルート・モードに入るようにすることができる。このことは、ＶＭ−ｅｎｔｒｙと呼ぶことができる。その後、イベントにより、物理マシン４が実非ルート・モードを出て、一次ＶＭＭ３０によるイベント処理のためにリアル・ルート・モードに戻るようにすることができる。このことは、ＶＭ−ｅｘｉｔと呼ぶことができる。図１に示すように、一次ＶＭＭ３０により一次制御構造４０を用いて、一次ＶＭ３２上の状態を維持し、リアル・ルート・モードとリアル非ルート・モードとの間のＶＭ−ｅｎｔｒｙ及びＶＭ−ｅｘｉｔの遷移をサポートすることができる。一次制御構造４０は、メモリ１２内（又は、ＣＰＵ１０の内部メモリ内）に格納されたデータ構造として実装することができ、Ｉｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャによって用いられるＶＭＣＳ（仮想マシン制御構造、Virtual Machine Control Structure）の後にパターン化することができる。当業者であれば認識するように、図４に示されるように、一次制御構造４０は、このように、一次ＶＭ３２が実行されている間、一次ＶＭＭのＣＰＵ状態のコピーを格納するホスト・ステータス領域と、一次ＶＭＭ３０が実行されている間、一次ＶＭのＣＰＵ状態のコピーを格納するゲスト・ステータス領域とを含むことができる。一次制御構造４０はまた、とりわけ、（特権命令を出す非ルート・モード・プログラムのような）ＶＭ−ｅｘｉｔをトリガする条件及びこのようなイベントをどのように処理すべきかを指し示す制御フィールドを含むこともできる。
【００１８】
物理マシン４において起こったのと同じように、一次ＶＭ３２の動作中、実行状態は、仮想ルート・モードと仮想非ルート・モードとの間で周期的にシフトする。最初に、一次ＶＭ３２は、二次ＶＭＭ３４がその仮想マシン・モニタ機能を実行する仮想ルート・モードで実行することができる。その後、二次ＶＭＭ３４は、二次ＶＭ３６を実行するために、一次ＶＭ３２が、仮想ルート・モードを出て仮想非ルート・モードに入るようにすることができる（ＶＭ−ｅｎｔｒｙ）。その後、イベントにより、一次ＶＭ３２が、仮想非ルート・モードを出て、二次ＶＭＭ３４によるイベント処理のために仮想ルート・モードに戻るようにすることができる（ＶＭ−ｅｘｉｔ）。図１に示すように、二次ＶＭＭ３４により二次制御構造４２を用いて、二次ＶＭ３６上の状態を維持し、仮想ルート・モードと仮想非ルート・モードとの間でＶＭ−ｅｎｔｒｙ及びＶＭ−ｅｘｉｔの遷移をサポートすることができる。二次制御構造４２は、メモリ１２内に格納されたデータ構造として実装することができる。一次制御構造４０と同様に、二次制御構造４２は、Ｉｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャにより用いられるＶＭＣＳ（仮想マシン制御構造、Virtual Machine Control Structure）の後にパターン化することができる。当業者であれば容易に認識するように、二次制御構造４２は、このように、二次ＶＭ３６が実行されている間、二次ＶＭＭのＣＰＵ状態のコピーを格納するホスト・ステータス領域と、二次ＶＭＭ３４が実行されている間、二次ＶＭのＣＰＵ状態のコピーを格納するゲスト・ステータス領域とを含むことができる。二次制御構造４２はまた、とりわけ、（特権命令を出す非ルート・モード・プログラムのような）ＶＭ−ｅｘｉｔをトリガする条件及びこのようなイベントをどのように処理すべきかを指し示す制御フィールドを含むこともできる。
【００１９】
ＣＰＵ１０の仮想化論理２６は、一次制御構造４０及び二次制御構造４２においてデータを読み書きするために用いることができる制御構造読み取り／書き込み命令を含む。Ｉｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャにおいて、これらの命令は、それぞれＶＭＲＥＡＤ及びＶＭＷＲＩＴＥと呼ばれる。しかしながら、既存のＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令には特権が与えられており、リアル・ルート・モードの物理マシン４においてのみ実行することができる。このことは、Ｉｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャの従来の実装において、一次ＶＭＭ３０はこのような命令を直接実行することができるが、二次ＶＭＭ３４は直接実行できないことを意味する。二次ＶＭＭ３４により出されたＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令は、一次ＶＭＭ３０によってトラップ及びエミュレートする必要があり、又は動的変換を用いる必要がある。いずれの場合にも、それぞれの一次制御構造４０においてデータを読み書きするだけではなく、二次制御構造４２及びシステム２において実行することができるいずれかの他の二次（又は、より高レベルの）仮想マシン・モニタの制御構造においてもデータを読み書きするために一次ＶＭＭ３０を繰り返し呼び出すことから、入り子式仮想化をサポートするために相当なオーバーヘッドを被ることになる。ゲスト・ステータス領域、ホスト・ステータス領域及び制御フィールドの各フィールド内にデータを読み書きするために、別個のＶＭＲＥＡＤ又はＶＭＷＲＩＴＥ命令を必要とするという事実により、この状況はさらに悪化し、一般的には、各々のＶＭ−ｅｎｔｒｙ遷移及びＶＭ−ｅｘｉｔ遷移において、数十ものこうしたフィールドの読み書きを行なわなければならない。
【００２０】
ＣＰＵ１０内の仮想化論理２６を修正することによって、この問題に対する解決法がここに提供されるので、仮想ルート・モードにおける二次ＶＭＭ３４によりＶＭＲＥＡＤ及びＶＭＷＲＩＴＥを実行して、一次ＶＭＭ３０からのサポートなしに二次制御構造４２を読み書きすることができる。二次制御構造４２の存在を指し示すように、新しいフィールドも一次制御構造４０に付加される。このフィールドは、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４と呼ぶことができ、図４に示される。このフィールドは、二次制御構造４２のベース・アドレスを表す、メモリ１２内のアドレスへのポインタとして実装することができる。ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４は、一次ＶＭＭ３０によって管理される。特に、一次ＶＭＭ３０は、初めて二次ＶＭＭ３４を起動する前に、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４を設定する。必要に応じて、一次ＶＭＭ３０は、一次制御構造４０の制御フィールド内にビットを設定すること等によって、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４を適切な方法で選択的にイネーブルにすることができる。このビットは、図４の参照符号４５で示され、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅ＿ｅｎａｂｌｅｍｅｎｔフィールドと呼ぶことができる。ほんの一例として、一次制御構造４０がＩｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャに用いられるＶＭＣＳに基づいている場合、二次プロセッサ・ベースのＶＭ実行制御ベクトル（Secondary Processor-Based Execution Controls vector）内にビットを設定することができる。随意的に、設計要件に応じて、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅ＿ｅｎａｂｌｅｍｅｎｔフィールド４５をなくすことができる。ＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令を実行する仮想化論理２６は、これがイネーブルにされ、命令呼出元（instruction caller）が非ルート・モードで動作している場合、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４を参照するように構成することができる。この場合、仮想化論理２６は、ＶＭＲＥＡＤ又はＶＭＷＲＩＴＥを、ポインタによって特定されるメモリ領域内で、それぞれ非特権メモリ・ロード又はストアとして処理する。この非特権操作は、一次ＶＭＭ３０からの支援なしに二次ＶＭＭ３４によって実行することができ、これにより、トラップ・アンド・エミュレート操作又は動的変換操作に関連したオーバーヘッドが減少される。従って、図１に示すように、二次ＶＭＭ３４がＶＭＲＥＡＤ／ＶＭＷＲＩＴＥ命令４８Ａを出し、非ルート・モードにおいて一次制御構造４０にアクセスしようと努めるとき、仮想化論理２６は、アクセスを効率的に再指向し、ロード／ストア操作４８Ｂを実施してメモリ１２内の二次制御構造４２にアクセスする。他方、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４がイネーブルにされない場合、非ルートのＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令がトラップされ、エミュレーションのために一次ＶＭＭ３０に渡される。ルート・モードにおいて、一次ＶＭＭ３０によりＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令が出された場合、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４は無視され、一次制御構造４０内でデータ・アクセスが行なわれる。
【００２１】
仮想化論理２６によって実行される従来のＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令処理になし得る変更を示す例示的な擬似コード操作が、それぞれ下記のコード１及びコード２に示される。コード１及びコード２についての始点である擬似コード・リストは、刊行物非特許文献１において見出すことができる。ＶＭＲＥＡＤ操作の擬似コードは、この文書の５−２４ページに記載され、ＶＭＷＲＩＴＥ操作の擬似コードは、５−２７ページ及び５−２８ページに記載されている。コード１及びコード２において、太字のイタリック体で示される操作を付加するように、両方のリストが修正された。特に、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４がイネーブルにされる場合、命令呼出元が非ルート・モードで動作しているとき、二次制御構造４２内で、ＶＭＲＥＡＤ又はＶＭＷＲＩＴＥデータ・アクセスが行なわれる。さもなければ、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４がイネーブルにされない場合、呼出元が非ルート・モードにあれば、ＶＭ−ｅｘｉｔが行なわれる。同様に、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４がイネーブルにされたとき、非ルート・モードの読み取り又は書き込み動作中、そのポインタ値を用いて、メモリ内の二次制御構造４２を見つける。コード１及びコード２の修正されたＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ擬似コード操作の残りのものは、従来より当業者には周知であり、説明されない。代替的な擬似コードを用いて、同じ効果を達成できること、及び、コード１及びコード２は、所望の機能をどのように実装できるかについての一例にすぎないことが認識されるであろう。
コード１−修正されたＶＭＲＥＡＤ命令のための擬似コード
IF (not in VMX operation) or (RFLAGS.VM = 1) or(IA32_EFER.LMA = 1 and CS.L = 0)
THEN #UD;
ELSIF in VMX non-root operation and VMCSsecondary_control_structure field not enabled
THEN VMexit;
ELSIF CPL > 0
THEN #GP(0);
ELSIF current-VMCS pointer is not valid
THEN VMfailInvalid;
ELSIF register source operand does not correspond to anyVMCS field
THEN VMfailValid(VMREAD/VMWRITE from/to unsupported VMCScomponent); 
ELSIF if in VMX non-root operation and VMCS secondary_control_structurefield enabled
THEN DEST ← contents of VMCS fieldindexed by register source operand using 
VMCS secondary_control_structure pointer as base address instead ofcurrent-
VMCS pointer;
ELSE
DEST ← contents of VMCS field indexed by register source operand;
VMsucceed;
FI;
コード２−修正されたＶＭＷＲＩＴＥ命令のための擬似コード
IF (not in VMX operation) or (RFLAGS.VM = 1) or(IA32_EFER.LMA = 1 and CS.L = 0)
THEN #UD;
ELSIF in VMX non-root operation and VMCS secondary_control_structurefield not enabled
THEN VMexit;
ELSIF CPL > 0
THEN #GP(0);
ELSIF current-VMCS pointer is not valid
THEN VMfailInvalid;
ELSIF register destination operand does not correspondto any VMCS field
THEN VMfailValid(VMREAD/VMWRITE from/to unsupported VMCS component);
ELSIF VMCS field indexed by register destination operandis read-only)
THEN VMfailValid(VMWRITE to read-only VMCS component);
ELSIF if in VMX non-root operation and VMCS secondary_control_structurefield enabled
THEN VMCS field indexed by registerdestination operand using VMCS 
secondary_control_structure pointer as base address instead ofcurrent-VMCS 
pointer ← SRC;
ELSE
VMCS field indexed by register destination operand ← SRC;
VMsucceed;
FI;
【００２２】
図５は、コード１及びコード２におけるＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ擬似コードの修正に従って、仮想化論理２６により実施することができる例示的な命令実行動作を示す高レベルのフロー図を示す。従って、メモリ１２からのＶＭＲＥＡＤ又はＶＭＷＲＩＴＥ命令のフェッチに続いて、ブロック５０において、一次制御構造４０にアクセスする。ブロック５２において、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４がイネーブルにされるかどうか、及び、命令呼出元が非ルート・モードにあるかどうかを判断するために、チェックがなされる。そうである場合、ブロック５４において、二次制御構造４２に対して、ＶＭＲＥＡＤ又はＶＭＷＲＩＴＥ命令が実行される。そうでない場合、ブロック５６において、従来の方法で（例えば、上記の擬似コードの未修正の部分ごとに）ＶＭＲＥＡＤ又はＶＭＷＲＩＴＥ命令が処理される。
【００２３】
ここで、図６を参照すると、二次ＶＭＭ３４が二次ＶＭ３６内へのＶＭ−ｅｎｔｒｙを実行するとき、修正されたＶＭＲＥＡＤ及びＶＭＷＲＩＴＥ命令を用いるための方法が示される。仮想化論理２６は、制御を仮想マシンに移すＶＭ−ｅｎｔｒｙを実行するために仮想マシン・モニタにより用いることができる２つの命令を与えることができる。一方の命令は、仮想マシンの初期呼び出しのためのものとすることができ、他方の命令は、制御操作を実行するために、ルート・モードへの遷移に続いて仮想マシン操作を再開するためのものとすることができる。従って、これらの仮想マシンの開始命令及び再開命令は、それぞれＩｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャにより与えられるＶＭＬＡＵＮＣＨ及びＶＭＲＥＳＵＭＥ命令に基づくものとすることができる。両方の命令には特権が与えられ、このことは、これらの命令がリアル・ルート・モードでのみ実行できることを意味する。図６の方法は、図１に示される第３の制御構造４６の使用に基づいている。制御構造４６は、一次ＶＭＭ３０によって管理され、これが二次制御構造４２内に格納されるデータのシャドウ・コピーを含むことから、二次制御構造のコピーと呼ばれる。二次制御構造コピー４６を用いて二次制御構造４２をシャドウイングする理由は、本開示には関係がない。二次制御構造４２は、二次ＶＭＭ３４により出された特権命令をエミュレートする際に一次ＶＭＭ３０を支援すると言えば十分であろう。
【００２４】
図６の開始時に、二次ＶＭＭ３４は、二次ＶＭ３６へのＶＭ−ｅｎｔｒｙを実行する準備ができた状態にある。ブロック６０において、二次ＶＭＭ３４は、二次制御構造４２を更新して、この遷移を反映させる。特に、二次ＶＭＭ３４は、ホスト領域を更新して、二次ＶＭＭ３４の現在のＣＰＵ状態を保存し、また、ゲスト領域も更新して、新しいＣＰＵの状態を、ＶＭ−ｅｎｔｒｙの後に実行される二次ＶＭ３６のものに設定する。二次ＶＭＭ３４は、必要とされる二次制御構造４２のフィールドを埋めるために多数のＶＭＷＲＩＴＥ動作を行なうことによって、これを行なう。これらの動作は、二次ＶＭＭ３４が、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４が指し示すメモリ領域への非特権メモリ・ストア・アクセスを行なうことを可能にする、仮想化論理２６への上述の修正により容易にされる。ブロック６２において、二次ＶＭＭ３４は、ＶＭＬＡＵＮＣＨ又はＶＭＲＥＳＵＭＥ命令を出す。ＣＰＵ１０は、この命令をトラップし、エミュレーションのためにこの命令を一次ＶＭＭ３０に渡す。ブロック６４において、一次ＶＭＭ３０は、ブロック６０の結果として変更された二次制御構造４２のフィールドに従って、二次制御構造のコピー４６を更新する。ブロック６６において、一次ＶＭＭ３０は、一次制御構造４０のゲスト・ステータス領域を、二次制御構造のコピー４６のゲスト・ステータス領域内に反映されたＣＰＵの状態（すなわち、ＶＭ−ｅｎｔｒｙの後に存在する二次ＶＭＭ３４の状態）に設定する。ブロック６８において、一次ＶＭＭ３０は、現在のＣＰＵの状態を一次制御構造４０のホスト領域に保存し、二次ＶＭ３６を起動する。
【００２５】
図５に示される操作を効率化する更なる修正を仮想化論理２６になすこともできる。この修正は、図７に示されるｂｉｔ＿ｍａｐフィールド７０である、一次制御構造４０内の別の新しいフィールドを利用する。ｂｉｔ＿ｍａｐフィールド７０は、メモリ１２内に格納することができるビット・マップ７２（又は、他のマッピング構造）のベース・アドレスへのポインタとして実装することができる。このポインタは、初めて二次ＶＭＭ３４を起動する前に、一次ＶＭＭ３０により設定することができる。ビット・マップ７２の各ビットは、二次制御構造４２のフィールドに対応する。二次ＶＭＭ３４がＶＭＷＲＩＴＥ命令を出して、図６のブロック６０における二次制御構造４２のフィールドに書き込むと、仮想化論理２６は、ビット・マップ７２内に適切なビットを設定し、二次制御構造４２の対応するフィールドが更新されたことを指し示す。一次ＶＭＭ３０は、変更を識別するのに、もはや二次制御構造４２の各フィールドを二次制御構造のコピー４６の対応するフィールドと比較する必要がないので、このことにより、図６のブロック６４の操作が効率化される。代わりに、一次ＶＭＭ３０は、二次制御構造４２と関連したビット・マップ７２を迅速に走査し、二次制御構造のコピー４６のどのフィールドを更新する必要があるかを判断することができる。
【００２６】
上記の機能を実装するために仮想化論理２６が実行する従来のＶＭＷＲＩＴＥ命令処理になし得る変更を示す例示的な擬似コードが、コード３に後述される。コード３は、仮想化論理２６により付加的な操作（イタリック体の太字テキストで示される）を行なって、ビット・マップ７２内にビットを設定し（ｂｉｔ＿ｍａｐフィールド７０がイネーブルにされると仮定して）、二次制御構造４２のフィールドへの書き込み操作を反映させる点を除いて、コード２と同一である。一次ＶＭＭ３０は、一次制御構造４０の制御フィールド内にビットを設定することによってなど、いずれかの適切な方法で、ｂｉｔ＿ｍａｐフィールド７０をイネーブルにすることができる。このビットは、図７に参照符号７１で示されており、ｂｉｔ＿ｍａｐ＿ｅｎａｂｌｅｍｅｎｔフィールドと呼ぶことができる。一例として、一次制御構造４０がＩｎｔｅｌ（登録商標）ＶＴ−ｘ仮想化アーキテクチャに用いられるＶＭＣＳに基づいている場合、二次プロセッサ・ベースのＶＭ実行制御ベクトルベクトル内にビットを設定することができる。随意的に、設計要件に応じて、ｂｉｔ＿ｍａｐ＿ｅｎａｂｌｅｍｅｎｔフィールド７１をなくすことができる。代替的な擬似コードを用いて同じ効果を達成できること、及び、コード３は、所望の機能をどのように実装できるかについての一例にすぎないことが認識されるであろう。
コード３−さらに修正されたＶＭＷＲＩＴＥ命令のための擬似コード
IF (not in VMX operation) or (RFLAGS.VM = 1) or(IA32_EFER.LMA = 1 and CS.L = 0)
THEN #UD;
ELSIF in VMX non-root operation and VMCSsecondary_control_structure field not enabled
THEN VMexit;
ELSIF CPL > 0
THEN #GP(0);
ELSIF current-VMCS pointer is not valid
THEN VMfailInvalid;
ELSIF register destination operand does not correspondto any VMCS field
THEN VMfailValid(VMREAD/VMWRITE from/to unsupported VMCS component);
ELSIF VMCS field indexed by register destination operandis read-only)
THEN VMfailValid(VMWRITE to read-only VMCS component);
ELSIF if in VMX non-root operation and VMCS secondary_control_structurefield enabled
THEN VMCS field indexed by registerdestination operand using VMCS 
secondary_control_structure pointer as base address instead ofcurrent-VMCS 
pointer ← SRC
IF bit_mapfield enabled
THEN set bit in bit map pointed to by VMCS bit_mapfield that corresponds to VMCS 
fieldindexed by register destination operation;
ELSE
VMCS field indexed by register destination operand ← SRC;
VMsucceed;
FI;
【００２７】
図８は、コード２及びコード３におけるＶＭＷＲＩＴＥ擬似コードの修正に従って、仮想化論理２６により実施することができる例示的な命令実行操作を示す高レベル・フロー図を示す。このように、メモリ１２からのＶＭＷＲＩＴＥ命令のフェッチに続いて、ブロック８０において、一次制御構造４０にアクセスする。ブロック８２において、ｓｅｃｏｎｄａｒｙ＿ｃｏｎｔｒｏｌ＿ｓｔｒｕｃｔｕｒｅフィールド４４がイネーブルにされるかどうか、及び、命令呼出元が非ルート・モードにあるかどうかを判断するために、チェックがなされる。そうである場合、ブロック８４において、二次制御構造４２に対して、ＶＭＷＲＩＴＥ命令が実行される。そうでない場合、ブロック８６において、従来の方法で（例えば、上記のコード２の擬似コードの未修正の部分ごとに）ＶＭＲＥＡＤ又はＶＭＷＲＩＴＥ命令が処理される。ブロック８４に続いて、ｂｉｔ＿ｍａｐフィールド７０のイネーブルメント（enablement）をチェックする。ｂｉｔ＿ｍａｐフィールド７０がイネーブルにされる場合、ブロック９０において、ＶＭＷＲＩＴＥターゲット・フィールドに対応するビットが設定される。ブロック９０に続いて、又は、ブロック８８においてｂｉｔ＿ｍａｐフィールド７０がイネーブルにされない場合、処理は終了する。
【００２８】
従って、コンピュータ・システムにおける入れ子式仮想化の性能を改善するための技術が開示された。上記の概念は、マシン実装方法（これに限定されるものではないが、ＣＰＵマイクロコード操作を含む）、処理回路によって実行されたとき、回路に操作を実行させる、ストレージ媒体（コード）内に格納される回路論理、命令を含むことができるＣＰＵ又は他の命令処理装置、回路論理、或いは回路論理及びコードの組み合わせ、並びにコンピュータ又は他のデータ処理マシン若しくはデバイス等のシステムのいずれかにおいて様々な形で具体化できることを認識するであろう。開示された主題の態様は、コンピュータ・プログラムによって実施することもでき、そこで、デジタルコード化したプログラム命令（これに限定されるものではないが、ＣＰＵマイクロコード・プログラムを含む）が、操作を行なうためにＣＰＵ又は他の命令処理装置を制御するのに用いるために、１つ又は複数のコンピュータ可読データ・ストレージ媒体上に格納される。プログラム命令は、マシンによるロード及び実行の準備ができているマシン言語コードを含むことができ、或いは、プログラム命令は、組み立て、コンパイルし、又はマシン言語に解釈することができるより高レベルの言語を含むことができる。ＣＰＵ又は他の命令処理装置を含むマシン上に実装されたとき、プログラム命令は、ＣＰＵを制御して、それ自体を本発明のために用いることができる特定の論理回路と同様に動作する特定のマシンを提供する。
【００２９】
コンピュータ・プログラムのプログラム命令を格納するための例示的なデータ・ストレージ媒体が、プログラム命令を格納することができるいずれかのストレージ媒体を含む。この媒体は、読み出し専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、又はＣＰＵにおいて、さもなければコンピュータ内及びデータ処理マシン内で用いられるタイプの他の半導体メモリ若しくはソリッド・ステート・メモリによって提供することができる。媒体は、携帯用の磁気、光又は光磁気媒体（フロッピー・ディスク、フラッシュ・メモリ・スティック等の）、或いはドライブ・システム（例えば、ディスク・ドライブ）と組み合わされた磁気媒体によって提供することもできる。さらに広い意味では、媒体は、いずれかの電子、磁気、光学、電磁、赤外線、半導体システム又は装置若しくはデバイス、伝送又は伝搬媒体、或いは信号媒体、或いは命令実行システム、コンピュータ等の装置若しくはデバイスによって又はそれらと共に用いるためにプログラム命令を収容し、格納し、通信し、伝搬し、又は搬送することが可能な他のいずれかのエンティティを含むことができる。上記の形の媒体の全てについて、プログラム命令が、命令実行システム、装置、デバイス又は回路にロードされ、それらにより実行されるとき、結果として得られるプログラムされたシステム、装置、デバイス又は回路は、ここで説明されたような方法及びシステムの実施形態を実施するための特定のマシンになる。
【００３０】
本開示に従って実装された、ＣＰＵ１０、その仮想化論理２６及びいずれかのサブコンポーネントは、作成からシミュレーション、テスト、レイアウト、製造までの種々の段階で設計することができる。この設計フロー中に処理及び／又は作成される設計構造を機械可読伝送又はストレージ媒体上でコード化して、データ処理システム上で実行又は他の方法で処理されたときに、ハードウェア・コンポーネント、回路、デバイス又はシステムの、論理的、構造的、機械的又はその他機能的に等価な表現を生成するデータ及び／又は命令を含むようにすることができる。設計構造は、電子コンポーネント、回路、電子又は論理モジュール、装置、デバイス又はシステムをシミュレートするか又は他の方法で機能的に表現するためにハードウェア記述言語（ＨＤＬ）又は別の機能的な記述言語を用いることを含む、種々の方法で表現することができる。この設計構造は、コンピュータ支援設計システムにおいて処理されるときに、電子コンポーネント、回路、電子又は論理モジュール、装置、デバイス又はシステムのマシン実行可能表現を生成する要素を含む。このような要素は、これらに限定されるものではないが、記号データ、マップ・ファイル、テスト・データ・ファイル、設計コンテンツ・ファイル、製造データ、レイアウト・パラメータ、ワイヤ、金属レベル、ビア、形状、製造ラインを通じてのルーティング・データ、及び電子コンポーネント、回路、電子又は論理モジュール、装置、デバイス又はシステムを製造するために製造業者又は他の設計者／開発者によって必要とされる他のあらゆるデータを含むことができる。
【００３１】
本発明の種々の実施形態を説明してきたが、本発明に従って、多くの変形及び代替的な実施形態を実施できることが明らかである。従って、本発明は、添付の特許請求及びその均等物の精神に従うことを除けば、如何なる方法においても限定されるべきではないことが理解される。
【符号の説明】
【００３２】
２：コンピュータ・システム
４：物理マシン
１０：ＣＰＵ
１２：メモリ
１４：メモリ・コントローラ
２２：ストレージ・デバイス
２４：周辺機器
２６：仮想化命令実行論理
３０：一次仮想マシン・モニタ（一次ＶＭＭ）
３２：一次仮想マシン（一次ＶＭ）
３４：二次仮想マシン・モニタ（一次ＶＭＭ）
３６：一次仮想マシン（一次ＶＭ）
３８：ゲスト・プログラム
４０：一次制御構造
４２：二次制御構造
４６：二次制御構造のコピー
【図１】
0005607474.tif 000002
【図２】
0005607474.tif 000003
【図３】
0005607474.tif 000004
【図４】
0005607474.tif 000005
【図５】
0005607474.tif 000006
【図６】
0005607474.tif 000007
【図７】
0005607474.tif 000008
【図８】
0005607474.tif 000009