(57)【特許請求の範囲】
【請求項１】
バーチャルマシン(VM)動作を管理するプロセッサであって、
VMエントリーとVMエグジットとのうち少なくとも１つであるVM移行に応じて、複数の状態アクションインジケータのそれぞれの値を決定するロジックであり、各状態アクションインジケータは、マシン状態の複数の要素の１つの値に関連し、各状態アクションインジケータは、１つ以上の制御ビットを含み、前記複数の状態アクションインジケータのそれぞれの値は、固定されたもの、計算されたもの、又はVMの実行環境を制御するためのVM制御構造（VMCS）から読み取られたものであるロジックを有し、
前記ロジックは、前記複数の状態アクションインジケータのそれぞれの値に基づいて、複数のアクションのうちどれが前記マシン状態の関連の要素で行われるかを更に決定するプロセッサ。
【請求項２】
前記複数のアクションは、メモリから前記マシン状態の１つ以上の関連の要素をロードすることと、メモリに前記マシン状態の１つ以上の関連の要素を格納することと、アクションを行わないこととのうち少なくとも１つを含む、請求項１に記載のプロセッサ。
【請求項３】
前記複数の状態アクションインジケータは、
バーチャルマシン制御構造(VMCS)の１つ以上の読み取り値と、
１つ以上の固定値と、
１つ以上の計算値と
のうち少なくとも１つにより決定される、請求項１に記載のプロセッサ。
【請求項４】
各アクションは、
バーチャルマシン制御構造(VMCS)の１つ以上のフィールドに前記マシン状態の関連の要素を格納することと、
前記VMCSの１つ以上のフィールドに１つ以上の固定値を格納することと、
前記VMCSの１つ以上のフィールドに１つ以上の計算値を格納することと
のうち少なくとも１つを実行する、請求項１に記載のプロセッサ。
【請求項５】
前記１つ以上の計算値は、
前記マシン状態の要素と、
バーチャルマシン制御構造(VMCS)の値と、
制御インジケータと
のうち少なくとも１つの値を検査し、
前記検査した値を変換して、前記１つ以上の計算値を作ることにより決定される、請求項４に記載のプロセッサ。
【請求項６】
各アクションは、
バーチャルマシン制御構造（VMCS）の１つ以上のフィールドから前記マシン状態の関連の要素をロードすることと、
前記VMCSの１つ以上のフィールドから１つ以上の計算されたマシン状態の値をロードすることと、
前記VMCSの１つ以上のフィールドから１つ以上の固定値をロードすることと
のうち少なくとも１つを実行する、請求項１に記載のプロセッサ。
【請求項７】
前記１つ以上の計算されたマシン状態の値は、
前記マシン状態の要素と、
前記バーチャルマシン制御構造(VMCS)の値と、
制御インジケータと
のうち少なくとも１つの値を検査し、
前記検査した値を変換して、前記１つ以上の計算されたマシン状態の値を作ることにより決定される、請求項６に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例は、概してコンピュータシステムに関するものであり、特に、コンピュータシステム内のバーチャルマシン動作の動作管理及び／又は制御に関するものである。
【背景技術】
【０００２】
バーチャルマシンシステムは、物理マシンが分割されることを可能にし、それによりマシンの基礎のハードウェアが１つ以上の独立に動作するバーチャルマシン(VM:Virtual  Machine)として現れる。バーチャルマシンモニタ(VMM:Virtual  Machine  Monitor)はコンピュータで動作し、１つ以上のVMの抽象化を他のソフトウェアに提示する。各VMはそのオペレーティングシステム(OS)及び／又はアプリケーションソフトウェアを動作する自己完結型プラットフォームとして機能することがある。VM内で実行するソフトウェアは併せてゲストソフトウェアと呼ばれる。
【０００３】
ゲストソフトウェアは、VMではなく専用のコンピュータで動作しているように動作することになっている。すなわち、ゲストソフトウェアは多様なイベントを制御し、コンピュータ(例えば物理マシン)のハードウェアリソースにアクセスすることになっている。物理マシンのハードウェアリソースは、１つ以上のプロセッサと、プロセッサに存在するリソース(例えば、制御レジスタ、キャッシュ等)と、メモリ(及びメモリに存在する構造、例えば記述子テーブル)と、物理マシンに存在する他のリソース(例えば入出力デバイス)とを有してもよい。イベントは、割込み、例外、プラットフォームイベント(例えば、初期化(INIT:initialization)又はシステム管理割込み(SMI:system  management  interrupt))等を有してもよい。
【０００４】
VMMは、物理マシンのプロセッサ、デバイス、メモリ及びレジスタのゲストソフトウェア状態を必要に応じてスワップイン及びスワップアウトする。プロセッサは、VMとVMMとの間の移行中にいくつかの状態をスワップイン及びスワップアウトしてもよい。VMMは、ある状態のときに基礎の物理マシンへの直接のアクセスを許可することにより、VMの性能を向上させる。ゲストソフトウェアにおいて物理マシンへのアクセスを制限する非特権モードで動作が実行されているとき、又はVMMが制御を保持しようとする物理マシンのハードウェアリソースを動作が使用しないときに、このことは特に適している。VMMはVMのホストと考えられる。
【０００５】
ゲスト動作がVMMの正確な実行又は実行していないVMの何らかに影響を及ぼす場合に常に、VMMは制御を取り戻す。通常は、VMMは基礎の物理マシンに動作を進めることを許可する前に、又はゲストの代わりに動作をエミュレートする前に、問題が存在するか否かを決定することで、そのような動作を検査する。例えば、ゲストがI/Oデバイスにアクセスするとき、(例えば制御レジスタ値を変更することにより)マシン構成を変更しようとするとき、メモリの特定の領域にアクセスしようとするとき等に、VMMは制御を取り戻す必要があることがある。
【０００６】
VM動作をサポートする既存の物理マシンは、ここでバーチャルマシン制御構造(VMCS:Virtual  Machine  Control  Structure)と呼ばれる構造を使用して、VMの実行環境を制御する。VMCSはメモリの領域に格納され、例えば、ゲストの状態や、VMMの状態や、VMMがゲストの実行中に制御を取り戻そうとする状態を示す制御情報を有する。物理マシンの１つ以上のプロセッサはVMCSから情報を読み取り、VM及びVMMの実行環境を決定し、ゲストソフトウェアの動きを適切に律則する。
【０００７】
VMへの移行(例えばエントリー(entry))又はVMからの移行(例えばエグジット(exit))が生じたときに、物理マシンのプロセッサは、マシン状態をロードして格納する。従来のアーキテクチャは、他のシステム構造と命令符号化とマシン動作と同様に、プロセッサ仕様に定められる通り、所定のセットの状態のロード及び格納を実行する。VMMはこれらの仕様に直接コード化されている。この構造は、VMMの実装の柔軟性を制限する。
【０００８】
従って、VMのエントリー及びエグジットの技術の改善した実装の必要性が存在する。これらの実装及び技術は、VM動作のより良い管理及び制御を可能にする。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施例に従ったVMアーキテクチャの図
【図２Ａ】本発明の一実施例に従ってVM移行動作を管理する方法のフローチャート
【図２Ｂ】本発明の一実施例に従ってVM移行動作中にマシン状態をロードする方法のフローチャート
【図２Ｃ】本発明の一実施例に従ってVM移行動作中にマシン状態を格納する方法のフローチャート
【図３】本発明の一実施例に従ってVM移行中にロード動作を実行する方法のフローチャート
【図４】本発明の一実施例に従ってVM移行中に格納動作を実行する方法のフローチャート
【図５】本発明の一実施例に従ってVM移行動作中に状態アクションインジケータの値を決定する方法のフローチャート
【発明を実施するための形態】
【００１０】
VM動作中の移行を管理する新規な方法、装置及びシステムについて説明する。実施例の以下の詳細な説明において、添付図面に対して参照が行われ、添付図面はこの一部を形成し、添付図面には限定ではなく例示で実行され得る本発明の特定の実施例が図示されている。これらの実施例は、当業者が理解及び実装できるように十分に詳細に説明されており、他の実施例も利用可能であり、この開示の要旨及び範囲を逸脱することなく、構造的、論理的及び電気的な変更が行われ得ることがわかる。従って、以下の詳細な説明は限定の意味で解釈されるべきではなく、ここに開示された本発明の実施例の範囲は特許請求の範囲によってのみ定められる。
【００１１】
図１は、本発明が動作し得るバーチャルマシン環境100の実施例を示している。この実施例では、物理マシン110は、例えば標準的なオペレーティングシステム(OS)又はVMM125のようなバーチャルマシンモニタ(VMM:virtual-machine  monitor)を実行可能なコンピュータプラットフォームを有する。VMM125は一般的にはソフトウェアで実装されるが、上位レベルのソフトウェアに対してマシンインタフェースをエミュレート及びエクスポートしてもよい。このような上位レベルのソフトウェアは、標準的又はリアルタイムのOSを有してもよく、限られたOS機能を備えてかなり除去された動作環境でもよく、従来のOS機能を有してなくてもよい。代替として、例えばVMM125は他のVMM内で動作してもよく、他のVMMの上位で動作してもよい。VMM125は、例えばハードウェア、ソフトウェア、ファームウェア又は多様な技術の組み合わせで実装されてもよい。VMMとその一般的な特徴及び機能は当業者に周知である。
【００１２】
物理マシン110は、パーソナルコンピュータ(PC)、メインフレーム、ハンドヘルド装置、ポータブルコンピュータ、セットトップボックス、インテリジェント装置、又はその他のコンピュータシステム若しくはデバイスでもよい。物理マシン110は、プロセッサ112とメモリ120とを有する。更に、物理マシン110は、多様な他の入出力デバイス(図示なし)を有してもよい。
【００１３】
プロセッサ112は、マイクロプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ等のように、ソフトウェアを実行可能な如何なる種類のプロセッサでもよい。プロセッサ112は、本発明の方法の実施例の実行を行うマイクロコード、マクロコード、ソフトウェア、プログラム可能ロジック又はハードコードロジックを有してもよい。唯一のこのようなプロセッサ112が図１に図示されているが、１つ以上のプロセッサがシステムに存在してもよいことがわかる。
【００１４】
メモリ120は、ハードディスク、フロッピー（登録商標）ディスク、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、フラッシュメモリ、その他の種類のプロセッサ112により読取可能な機械媒体、又はそのデバイスの何らかの組み合わせでもよい。メモリ120は、本発明の方法の実施例の実行を行う命令及び／又はデータを格納してもよい。
【００１５】
VMM125は、他のソフトウェア(すなわち、“ゲスト”ソフトウェア)に１つ以上のバーチャルマシン(VM)の抽象化を提示し、その１つ以上のバーチャルマシンは、多様なゲストに同一の又は異なる抽象化を提供してもよい。図１は３つのVM132、142、152を示している。各VMで動作するゲストソフトウェアは、ゲストOS134、144又は154のようなゲストOSと、多様なゲストソフトウェアアプリケーション136、146、156を有してもよい。ゲストOS134、144、154のそれぞれは、ゲストOS134、144又は154が動作するVM132、142、152内の物理リソース(例えば、プロセッサ112のレジスタ、メモリ120及びI/Oデバイス)にアクセスし、VM132、142、152の動作中にシステムデバイスにより生成された割込みを含む多様なイベントを処理することになっている。
【００１６】
プロセッサ112は、VMCS122に格納されたデータに従ってVM132、142、152の動作を制御する。(図１に示す通り)VMCS122はプロセッサ112内のメモリ120に格納されてもよく、他の場所又は記憶位置の如何なる組み合わせに格納されてもよい。VMCS122は、VMM125及びゲストソフトウェアのマシン状態の記憶装置を提供する。更に、VMの動作を制限又は制御し、VMとVMM125との間の移行を制御するインジケータを有してもよい。VMCS122はVMM125によりアクセス可能である。VMCSはメモリ又は記憶装置の連続的な領域である必要はない。従って、ある実施例では、VMCSは論理的に集められ、複数のメモリ又は記憶装置の位置からアクセスされてもよい。
【００１７】
VMM125からゲストソフトウェアへの移行は“VMエントリー(VM  entry)”と呼ばれる。ゲストソフトウェアからVMM120への移行は“VMエグジット(VM  exit)”と呼ばれる。VMエントリーとVMエグジットとを併せて“VM移行”と呼ばれる。一実施例では、VMM125は、VMエントリーをもたらす特定の命令を実行することにより、VMエントリーを開始してもよい。一実施例では、(例えばVMエグジットを生成する特別の命令を実行することにより)VMエグジットはVMにより明示的に要求されてもよい。ある実施例では、VMは直接的に移行を要求せずに、VMCS122の制御又はバーチャルマシンシステムのアーキテクチャにより決められた通り、何らかのイベント(例えばプロテクションの障害、割込み等)又はVM実行の命令がVMエグジットを要求する(例えば、特定の制御ビットがVMCSに設定されている場合に、INVLPG命令の実行がVMエグジットをもたらす；マスク不可能な割込みの全ての発生がVMエグジットをもたらす)。
【００１８】
VM移行中に、プロセッサ112はマシン状態の多様な要素で動作してもよい。当業者にわかるように、マシン状態は、例えば、プロセッサ、I/Oデバイス、チップセット等の多様なアーキテクチャ上の構成要素に関連してもよい。従って、本発明の多様な実施例の説明は、従来ではアーキテクチャ上としてみなされないいくつかの構成要素により補われた従来の意味で、“マシン状態”という語句を使用する。従って、マシン状態は、汎用レジスタ及び浮動小数点レジスタ(例えば、IA-32ISA、EAX、EDX、ST3等と呼ばれるIntelのPentium（登録商標）IVの命令セットアーキテクチャ(ISA:Instruction  Set  Architecture))、(例えば、IA-32ISA、CR0、CR3等の)制御レジスタ、(例えば、IA-32ISA、EFLAGS等の)処理フラグ、(例えば、IA-32ISA、DEBUGCTL、MTRR、TSC等の)モデル特有のレジスタ(MSR:model-specific  register)、(例えば、セレクタとベースとリミットとARバイトフィールドとを含むIA-32ISA、CS、SS、TR等の)セグメントレジスタ、更なる内部(アーキテクチャ上又は非アーキテクチャ上)マシン状態(例えば、スリープ状態、割込み可能情報、状態機械の状態)、メモリ管理に関する状態(例えば、PDPTR、変換索引バッファ(TLB:translation  look  aside  buffer)の内容)、チップセットのレジスタ、I/Oデバイス状態等を有してもよい。同様に、前述の情報の例示的なリストは包括的を目的としたものではなく、他の情報で補われてもよい。更に、当業者はここに提示された頭文字を容易に認識する。
【００１９】
VMシステム100は、ゲストVM(例えば、132、142、152)とホストVMM125との間での移行(例えば、エントリー及びエグジット)中にマシン状態のロード及び／又は格納を管理する際に使用される機構を実装する柔軟なアーキテクチャを提供する。
【００２０】
図２Ａは、本発明の一実施例に従ってVM移行動作を管理する方法200のフローチャートを示している。その処理は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等)、ソフトウェア(例えば、汎用コンピュータシステム又は専用マシンで実行する)、又はその双方を有してもよい処理ロジックにより実行されてもよい。
【００２１】
210において、VM移行が行われようとしていることをプロセッサが検出する。VM移行はVMエグジットでもよく、VMエントリーでもよい。それに応じて220において、VM移行がVMエグジット動作であるか否かを決定するために検査が行われる。
【００２２】
プロセッサがVMエントリーを処理している場合、プロセッサは、VMMからVMへの制御の移転に備えて、複数の動作を実行することができる。例えば、プロセッサは230でVMMマシン状態を格納し、240でVMマシン状態をロードし、最後に250でVMに制御を移転することができる。
【００２３】
プロセッサがVMエグジットを処理している場合、プロセッサは、VMMからVMへの制御の移転に備えて、複数の動作を実行することができる。例えば、プロセッサは260でVMマシン状態を格納し、270でVMMマシン状態をロードし、最後に280でVMMに制御を移転することができる。
【００２４】
VM移行中にマシンをロード(例えば図２からの240及び／又は270)及び格納(例えば図２からの230及び／又は260)する方法の実施例は、それぞれ図２Ｂと図２Ｃに示されている。
【００２５】
図２Ａ、２Ｂ及び２Ｃに示されていない他のアクションがVMエントリー又はVMエグジット中に生じていていもよいことがわかる。例えば、VMエントリー又はVMエグジットでロードされている状態の有効性及び一貫性が確保される必要があることがある。
【００２６】
図２Ｂは、VM移行中に状態をロードする方法202を示している。その方法は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等)、ソフトウェア(例えば、汎用コンピュータシステム又は専用マシンで実行する)、又はその双方を有してもよい処理ロジックにより実行されてもよい。
【００２７】
まず222において、処理の必要のあるマシン状態の何らかの要素が残っているか否かが決定される。処理されるマシン状態の要素が残っていない場合、その方法は終了する。その他の場合、232において制御ビット値が決定される。制御ビットとその決定については以下に詳細に説明する。242においてビットが設定されていない(ビットが0の値を有する)と決定された場合、制御は222に戻る。その他の場合(ビットが1の値を有するように設定されている場合)、252において、マシン状態の対応する要素の値が決定される。値の決定については以下に説明する。262において、この値はマシン状態に設定される。マシン状態の要素がまだ残っているか否かを決定するために、制御は222に戻る。
【００２８】
図２Ｃは、VM移行中にマシン状態を格納する方法204を示している。その方法は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等)、ソフトウェア(例えば、汎用コンピュータシステム又は専用マシンで実行する)、又はその双方を有してもよい処理ロジックにより実行されてもよい。
【００２９】
まず224において、処理の必要のあるマシン状態の何らかの要素が残っているか否かが決定される。処理されるマシン状態の要素が残っていない場合、その方法は終了する。その他の場合、234において制御ビット値が決定される。制御ビットとその決定については以下に詳細に説明する。244においてビットが設定されていない(ビットが0の値を有する)と決定された場合、制御は224に戻る。その他の場合(ビットが1の値を有するように設定されている場合)、254において、マシン状態の要素に対応する値が決定される。値の決定については以下に説明する。264において、この値が格納される。マシン状態の要素がまだ残っているか否かを決定するために、制御は224に戻る。
【００３０】
一実施例において、VMCSは、VMMの制御のもとにある２つのセットの制御ビットを有する。これらの制御ビットは、VMエントリー制御及びVMエグジット制御と呼ばれる。VMエントリー制御は、どのVMMマシン状態が格納されるべきか、どのVMマシン状態がVMエントリー中にロードされるべきかをプロセッサに通知する。VMエグジット制御は、どのVMマシン状態が格納されるべきか、どのVMMマシン状態がVMエグジット中にロードされるべきかをプロセッサに通知する。
【００３１】
ほんの一例として、VMエントリー制御は、ビットストリング内の各ビット位置がマシン状態の特定の要素のアクション又は非アクションを特定又は表示する6の長さを有するビットストリングとして表されてもよい。例えば、ストリング内のビット位置及びマシン状態の関連の要素は、以下のように表すことができる。
【００３２】
【表１】
0005746275.tif 000002
同様に、VMエグジット制御は、4の長さを有するVMCS内のビットストリングとして表されてもよい。同様に、ストリング内のビット位置及びマシン状態の要素の関連のアクションは、以下のように表すことができる。
【００３３】
【表２】
0005746275.tif 000003
VMエントリーにおいて、VMMがVMエントリー制御(ビット数0)に“store-VMM-DR7”ビットを設定した場合、プロセッサは、DR7レジスタの現在の値を格納する。一実施例では、DR7レジスタの値はVMCSに格納される。逆に、VMエントリー制御の“store-VMM-DR7”ビットがクリアされると、プロセッサはDR7レジスタ値を格納しない。“store-VMM-CR3”及び“store-VMM-CR4”のVMエントリー制御ビット(例えば、それぞれビット数1及び2)も同様に動作する。
【００３４】
同様に、VMMが“load-guest-DR7”のVMエントリー制御ビット(例えばビット数4)を設定した場合、プロセッサはDR7レジスタをロードする。一実施例では、ロードされる値は、VMCSのゲストVMのDR7フィールドに含まれる。“load-guest-DR7”のVMエントリー制御ビットがクリアされると、プロセッサはDR7レジスタをロードしない。この場合も同様に、“load-guest-CR3”及び“load-guest-CR4”の制御ビット(例えば、それぞれビット数4及び5)も同様に動作する。VMエグジット制御ビットは、VMエグジットでゲストVMマシン状態の格納とホストVMMマシン状態のロードとを制御するように同様に動作する。
【００３５】
この例では、VMエントリー制御はDR7を表すビットを有するが、VMエグジット制御は有さないため、VMエントリー制御及びVMエグジット制御はマシン状態の同じ要素を制御しない。しかし、当業者に容易にわかるように、VMエントリー制御及びVMエグジット制御はマシン状態の同じ要素を制御することができ、その内容も本発明の多様な実施例の範囲内にあることを意図する。更に、この例で表されたマシン状態の特定の選択は限定としてみなされるべきではない。
【００３６】
前述の例は本発明の一実施例を理解する説明を提供するが、本発明はそれに限定されることを目的としない。例えば、(前述の実施例のように)全てのシナリオにおいて、ロードされる値はVMCSの値である必要はなく、格納される値はマシン状態からの直接の値である必要はない。
【００３７】
前述の実施例では、プロセッサは、VMCSに又はVMCSからマシン状態の要素について値をロード又は格納することができる。代替として、マシン状態の要素について固定値をロード又は格納してもよい。更に、プロセッサは、動的に計算された値をロード又は格納してもよい。最後に、プロセッサは、マシン状態の要素に関して何もアクションをしなくてもよい(値がロード又は格納されない)。ロード又は格納される値を決定するこのような代替の機構について、以下に説明する。
【００３８】
プロセッサは、マシン状態の要素について固定値(例えば一定値又は所定の値)をロード又は格納してもよい。例えば、プロセッサ、VMエグジットでEFLAGSレジスタに固定値をロードしてもよい。すなわち、VMCSに表されるVMM  EFLAGSが存在しない。その代わりに、プロセッサはVMMに制御を移行する前に、プロセッサのEFLAGSレジスタが固定値又は所定の値(例えば0x2又は他の値)を有するようにさせる。このように、プロセッサは、マシン状態の要素の値を“強制”する。同様に、プロセッサは、VMエントリーでVMCSに格納される値を強制してもよく、VMエントリーでマシン状態にロードされる値を強制してもよく、及び／又はVMエグジットでVMCSに格納される値を強制してもよい。
【００３９】
このように、マシン状態の全ての要素が明示的にVMCSに表される必要はない。この技術は、大きい又は規則のないVMCSを生成することなく、マシン状態の更なる要素をカバーする柔軟な機構を提供する。更に、マシン状態のこの強制又は格納された値は、VMCSに必要なアクセス数を減少させることにより、及びVMエントリー及び／又はVMエグジットで必要な一貫性及びエラーチェックを減少させることにより、VMエグジット及びVMエントリーの実装の性能を改善し得る。
【００４０】
更に、プロセッサは、マシン状態にロードされる値又はVMCSに格納される値を計算することができる。この計算値は、マシン状態の１つ以上の要素の値、VMCS内に含まれる値等に基づいて動的に決定される。例えば、VMエグジットでEIPレジスタにロードされる値は、VMCSからVMM  EIPフィールド値をロードし、計算値がVMエグジットの要因に依存するような何らかの計算値により補われて、このEIP値をEIPレジスタにロードすることにより計算され得る。
【００４１】
マシン状態の要素の動的な計算により、VMMの更に効率的な実装が可能になることがある。例えば、前述の例では、VMエグジットでのEIPの動的な計算により、VMMが個々のVMエグジットのソースのハンドラを構成し、VMMソフトウェアのエグジット動機をデコードする必要性を除去する。
【００４２】
最終的に、プロセッサはVM移行中にマシン状態の要素に関してアクションを行わなくてもよい。例えば、VMからVMMに移行するときに、プロセッサは(例えばIA-32ISA、EAX、EDX等の)汎用レジスタの値を変更しないままにしてもよい。
【００４３】
プロセッサは、“状態アクションインジケータ”を評価することにより、VM移行中のマシン状態の要素に関して行うべき適切なアクションを決定する。状態アクションインジケータは、どのアクションが行われるべきかを決定する。状態アクションインジケータの値(“状態アクションインジケータ値”)は、VMCSから状態情報をロードし、又はVMCSに状態情報を格納するようにプロセッサに命令することができる。状態アクションインジケータ値もまた、固定値又は所定の値がロード又は格納され、検討中のマシン状態の特定の要素に関して何もアクションを行わず、又は計算値をロード若しくは格納することをプロセッサに強制することができる。
【００４４】
前述のVMエントリー制御及びVMエグジット制御は、状態アクションインジケータの例である。この例では、プロセッサは状態アクションインジケータとしてVMCSのフィールドを使用する。VMエントリー制御又はVMエグジット制御の各ビットは、マシン状態の単一の要素に対応する。ビットが設定されている場合、マシン状態がVMCSからロードされる／VMCSに格納されることをプロセッサに指示する。それがクリアされている場合、マシン状態の要素は無視される。代替実施例では、マシン状態の要素がロードされるか固定値に強制されるかを単一ビットが決定することができる。更なる実施例では、状態アクションインジケータは単一ビットより大きくてもよく、更に複雑な動作を符号化してもよい。例えば、状態アクションインジケータは4つの値を許容する2ビットでもよく、前述のロード、強制、計算及び無視の機構を区別してもよい。
【００４５】
状態アクションインジケータは、(前述のVMエントリー制御及びVMエグジット制御の実施例のような)マシン状態の特定の要素で、及び／又はマシン状態の複数の要素(例えば、VMエグジットでプロセッサの全ての汎用レジスタのロードを制御する単一の状態アクションインジケータ)で、特定のVM移行(例えば全てのVMエグジット)に関連してもよい。
【００４６】
状態アクションインジケータ値は、(前述の例のように)VMCSから得られた値から決定されてもよく、固定値(すなわち所定の値)でもよく、また、動的に計算された値でもよい。その可能性のそれぞれについて以下に説明する。
【００４７】
状態アクションインジケータはVMMの制御のもとでVMCSに格納されてもよい。VMCSに格納された状態アクションインジケータの例については前記に詳細に説明した。
【００４８】
状態アクションインジケータは予め定められてもよい。状態アクションインジケータが固定値又は所定の値である場合、VMMは、VM移行でマシン状態の対応する要素でプロセッサが行うアクションに対して、直接の制御を有さない。例えば、プロセッサはVMエントリー処理中にEIPレジスタの値を常に格納しなくてもよく、VMエントリー処理中にVMCSからEIPレジスタのゲスト値を常にロードしてもよく、及び／又はVMエグジット処理中にEIPレジスタを常にロードしてもよい。
【００４９】
状態アクションインジケータは動的に計算されてもよい。状態アクションインジケータが動的に計算された値である場合、状態アクションインジケータは、マシン状態の１つ以上の要素、VMCSの１つ以上のフィールド等に関連する１つ以上の値に依存してもよい。
【００５０】
例えばIA-32ISAでは、プロセッサがVMエントリー又はVMエグジットに続いて物理アドレス拡張を使用している場合(PAEモードである場合)、プロセッサはVMCSからページ・ディレクトリ・ポインタ・テーブル(PDPTR:page  directory  pointer  table)のエントリーをロードする。プロセッサがPAEモードでない場合、プロセッサのPDTRは0に強制される。プロセッサがPAEモードであるか否かを決定するために、プロセッサはCR4レジスタのPAEビットを検査する。このように、プロセッサは、状態アクションインジケータ値の動的な決定又は計算を行うと考えられ得る。PAEビットが設定されている場合、状態アクションインジケータは、“VMCSからロード”するようにプロセッサに命令する。PAEビットがクリアされている場合、状態アクションインジケータは“値を強制”する(例えば0の値を強制する)ようにプロセッサに命令する。プロセッサがPAEモードであるか否かを決定するためのここで説明した処理は、本発明の多様な実施例を明白に説明するために簡略化されている点に留意すべきである。この決定を行うために更なる処理が必要なことがあり、それは当業者に容易に認識され理解される。
【００５１】
その他の例では、セグメントのセレクタの値がゼロでない場合、又はプロセッサがV86モードである場合に、プロセッサはセグメントレジスタのベース及びリミットフィールドをロードすることができる。この決定を行うために、プロセッサは２つのマシン状態情報(検討中のセグメントのセレクタの値、及びEFLAGSレジスタのVMビットの値)を検査する。セレクタがゼロでない場合、又はEFLAGSのVMビットが設定されている場合、プロセッサは“VMCSからロード”するように命令される。そうでない場合、プロセッサはアクションを行わない。ベース及びリミットフィールドをロードする必要があるか否かを決定するためのここで説明した処理は、本発明の多様な実施例を明白に説明するために簡略化されている点に留意すべきである。この決定を行うために更なる処理が必要なことがあり、それは当業者に容易に認識され理解される。
【００５２】
当業者に明らかなように、ここで説明した方法は、VMMとVMとの間の移行中にマシン状態のロード及び格納を動的に制御するために使用可能である。一例として前述した柔軟な命令ロジックを有するプロセッサとVMCSとを使用することにより、移行がVMMに対して生じる。更に、マシン状態の各要素及びプロセッサにより行われるアクションは、肯定的に宣言される必要はなく、また、VMCS内に単に表される必要はない。
【００５３】
図３は、本発明の一実施例に従ってVM移行中にマシン状態の要素のロードを実行する方法300のフローチャートを示している。図３は、マシンのプロセッサの設計に実装され得る。その方法は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等)、ソフトウェア(例えば、汎用コンピュータシステム又は専用マシンで実行する)、又はその双方を有してもよい処理ロジックにより実行されてもよい。
【００５４】
310において、プロセッサは検討中のマシン状態の要素について状態アクションインジケータを決定する。320において、プロセッサは状態アクションインジケータを検査する。検討中のマシン状態の要素がVMCSからロードされるべきであることを状態アクションインジケータ値が示すと、330において、マシン状態の要素の値がロードされ、335において、検討中のマシン状態の対応する要素に設定される。しかし、検討中のマシン状態の要素が強制されるべきであることをステップ340において決定されて状態アクションインジケータ値が示すと、350において、プロセッサはマシン状態の対応する要素に所定の値又は強制値を設定する。更に、360において、状態アクションインジケータ値は、検討中のマシン状態の要素に関してプロセッサにより行われるべきアクションがないことを示してもよい。その場合、プロセッサはアクションを行わない(プロセッサは検討中のマシン状態の要素を変更しない)。
【００５５】
360での状態アクションインジケータの評価が否定的である場合(検討中のマシン状態の要素に関してアクションが必要ないことを示さない場合)、動的な計算が必要なことが推測され得る。当然のことながら、ある実施例では、その推測を全く行うことなく計算が必要であるかを決定するために、状態アクションインジケータの肯定的なチェックが行われてもよい。従って、検討中のマシン状態の要素の値は370で計算され、380でマシン状態の要素内に設定される。プロセッサは、マシン状態の１つ以上の要素を検査することにより、VMCSの値を検査することにより、及び／又は制御インジケータ値を検査すること等により、マシン状態の要素の値を動的に計算してもよい。更に、検査が行われると、プロセッサは検討中のマシン状態の要素の値を作るために、１つ以上の変換(例えば計算)を実行してもよい。このように、プロセッサは多様なデータを使用することができ、マシン状態の要素の値を生成するために多様なアクションを実行する。
【００５６】
図３に示されていないが、方法300はマシン状態の要素毎に繰り返される。更に、前述のように、各状態アクションインジケータはマシン状態の１つ以上の要素に関連してもよい。
【００５７】
図４は、本発明の一実施例に従ってVM移行中にマシン状態の要素の格納を実行する方法400のフローチャートを示している。方法400は、プロセッサアーキテクチャに実装され得る。その方法は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等)、ソフトウェア(例えば、汎用コンピュータシステム又は専用マシンで実行する)、又はその双方を有してもよい処理ロジックにより実行されてもよい。
【００５８】
410において、プロセッサは検討中のマシン状態の要素について状態アクションインジケータを決定する。420において、プロセッサは状態アクションインジケータを検査する。状態アクションインジケータが検討中のマシン状態の要素のVMCSへの格納を必要とする場合に、430において、検討中のマシン状態の要素がVMCSの１つ以上のフィールドに格納される。そうでない場合、440において、固定値がVMCSに格納されるか否かを決定するために、状態アクションインジケータ値が検査され、そうである場合、450において、固定値がVMCSの１つ以上のフィールドに格納される。ある場合には、状態アクションインジケータ値は、460に示すように、アクションを実行しないようにプロセッサに命令してもよい。
【００５９】
470において、マシン状態の要素に対応する値が動的に決定される。480において、計算された値がVMCSの１つ以上のフィールドに格納される。プロセッサは、マシン状態の１つ以上の要素を検査することにより、VMCSの値を検査することにより、及び／又は制御インジケータ値を検査すること等により、値を動的に計算してもよい。更に、検査が行われると、プロセッサはVMCSの１つ以上のフィールドに格納される計算値を作るために、１つ以上の変換(例えば計算)を実行してもよい。このように、プロセッサは多様なデータを使用することができ、計算値を生成するために多様なアクションを実行する。
【００６０】
図４に示されていないが、方法400はマシン状態の要素毎に繰り返されてもよい。更に、前述のように、各状態アクションインジケータはマシン状態の１つ以上の要素に関連してもよい。
【００６１】
図５は、本発明の一実施例に従ってVM移行動作中(例えば、図３のブロック310及び図４のブロック410)に状態アクションインジケータの値を決定する方法500のフローチャートを示している。その方法は、ハードウェア(例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等)、ソフトウェア(例えば、汎用コンピュータシステム又は専用マシンで実行する)、又はその双方を有してもよい処理ロジックにより実行されてもよい。
【００６２】
505において、プロセッサは、検討中のマシン状態の要素と、処理中のVM移行の形式と、状態のロード又は格納が処理中であるか否かとを決定する。決定した情報に基づいて、507において、マシン状態のこの要素に関連する状態アクションインジケータが固定であるか、VMCSからロードされるものであるか、計算されるものであるかをアーキテクチャが指示するか否かをプロセッサが決定する。
【００６３】
510において、状態アクションインジケータが固定である場合、520において、固定の状態アクションインジケータ値が決定される。
【００６４】
530において、状態アクションインジケータがVMCSから得られる場合、540において、状態アクションインジケータ値がVMCSからロードされる。
【００６５】
550において、状態アクションインジケータが動的に決定されるもの又は計算されるものである場合、550において、状態アクションインジケータを決定するために計算が実行される。動的な決定又は計算は、例えばVMCS内の多様なフィールド(制御ベクトルフィールド値を含む)をロードすること、マシン状態の多様な要素を検査すること、VM及び／又はVMM状態の多様な要素を検査すること、１つ以上の制御インジケータ値を検査すること、及び／又は検査した情報で変換すること(例えば計算を実行すること)を有してもよい。
【００６６】
ある実施例では、状態アクションインジケータ値の決定及び評価は明白ではない。プロセッサは、特定の状態が特定のアクションを要求すると認識するように設計されてもよい。例えば、プロセッサのロジックは、状態アクションインジケータ値を明示的に評価せずに、マシン状態の要素を特定の値に無条件に強制してもよい。従って、図５に関して説明した明示的なチェックは限定としてみなされるべきではない。
【００６７】
本発明の実施例は、VM移行の改善した処理を提供する。これは、VMCSを使用するが、VM移行を実行するためにVMCS内に備えられた情報に完全に依存する必要のないプロセッサ内の処理を柔軟に具現することにより実現される。
【００６８】
本発明の多様な実施例に従ったプロセッサの実装は、VM移行中のマシン状態のロード及び格納を管理及び制御することができることを、当業者は認識するであろう。特に、これらの実施例は、アーキテクチャにより可能になるように、VM移行中のマシン状態のロード及び格納の動作を指示するように、VMMに柔軟性を提供する。このことは、マシン状態の要素の全てのインスタンスを把握する柔軟性のないMVCSで必ずしも実現されない。また、VM移行でマシン状態の全ての格納及びロードがVMCSの制御を通じてVMMにより明示的に指示される必要はない。
【００６９】
前述の説明は例示的であり、限定的でないことを意図することがわかる。前述の説明を検討することにより、多数の他の実施例が当業者に明らかになる。従って、本発明の実施例の範囲は、特許請求の範囲を参照して、特許請求の範囲が享有する同等物の全範囲と共に決定されるべきである。
【００７０】
要約は、読者が技術的な開示の本質及び要点を即座に確認することが可能になるように、37C.F.R.§1.72(b)に従うように提供されていることを強調する。それは特許請求の範囲又は意味を解釈又は制限するために使用されないという理解で提示されている。
【００７１】
実施例の前述の説明において、開示を効率化するために多様な機能が単一の実施例にまとめられている。この開示の方法は、本発明の特許請求の範囲の実施例が各請求項に明白に記載された機能以上のものを必要とするという意図を反映するものとして解釈されるべきではない。むしろ、特許請求の範囲に示すように、本発明の対象は、単一の開示の実施例の全ての機能より少ないものにある。このように、特許請求の範囲はこれによって実施例の説明に組み込まれ、各請求項が別の例示的な実施例として独立する。
【００７２】
以上の実施例に関し、更に、以下の項目を開示する。
【００７３】
（１）バーチャルマシン(VM)動作を管理する方法であって、
処理されるVM移行動作を特定し、
１つ以上の状態アクションインジケータを特定し、
前記１つ以上の状態アクションインジケータの１つ以上の値を使用して、必要に応じてマシン状態の１つ以上の関連の要素について少なくとも１つのアクションを決定することを有する方法。
【００７４】
（２）（１）に記載の方法であって、
特定するときに、前記１つ以上の状態アクションインジケータは、前記VM移行動作と、前記マシン状態の前記１つ以上の関連の要素と、前記マシン状態の第２の要素とのうち少なくとも１つに関連する方法。
【００７５】
（３）（１）に記載の方法であって、
使用するときに、前記少なくとも１つのアクションは、前記マシン状態の前記１つ以上の関連の要素のロードと、前記マシン状態の前記１つ以上の関連の要素の格納と、アクションを行わないこととのうち少なくとも１つを有する方法。
【００７６】
（４）（１）に記載の方法であって、
特定するときに、前記１つ以上の状態アクションインジケータは、
バーチャルマシン制御構造(VMCS)の１つ以上の読み取り値と、
１つ以上の固定値と、
前記マシン状態の前記１つ以上の関連の要素と、
前記マシン状態の第２の要素と、
前記VMの状態に関連する要素と、
バーチャルマシンモニタ(VMM)の状態に関連する要素と、
制御インジケータ値と、
VMCSのフィールド値と
のうち少なくとも１つに基づいた計算値と
のうち少なくとも１つである方法。
【００７７】
（５）（１）に記載の方法であって、
特定するときに、前記１つ以上の状態アクションインジケータは、前記マシン状態の前記少なくとも１つの関連の要素を記述するデータ構造と、制御ベクトルの１つ以上のビットとのうち少なくとも１つである方法。
【００７８】
（６）（１）に記載の方法であって、
使用するときに、少なくとも１つのアクションのそれぞれは、
バーチャルマシン制御構造(VMCS)の１つ以上のフィールドに前記マシン状態の前記１つ以上の関連の要素を格納することと、
前記VMCSの１つ以上のフィールドに１つ以上の固定値を格納することと、
前記VMCSの１つ以上のフィールドに１つ以上の計算値を格納することと
のうち少なくとも１つを実行する方法。
【００７９】
（７）（６）に記載の方法であって、
前記１つ以上の計算値を格納するときに、前記１つ以上の計算値は、
前記マシン状態の要素と、
バーチャルマシン制御構造(VMCS)の値と、
制御インジケータと
のうち少なくとも１つの値を検査し、
前記検査した値を変換して、前記１つ以上の計算値を作ることにより決定される方法。
【００８０】
（８）（１）に記載の方法であって、
使用するときに、少なくとも１つのアクションのそれぞれは、
バーチャルマシン制御構造の１つ以上のフィールドから前記マシン状態の前記１つ以上の関連の要素をロードすることと、
前記マシン状態の前記１つ以上の関連の要素に、１つ以上の計算されたマシン状態の値をロードすることと、
前記マシン状態の前記１つ以上の関連の要素に、１つ以上の固定値をロードすることと
のうち少なくとも１つを実行する方法。
【００８１】
（９）（８）に記載の方法であって、
前記１つ以上の計算されたマシン状態の値をロードするときに、前記１つ以上の計算されたマシン状態の値は、
前記マシン状態の要素と、
前記バーチャルマシン制御構造(VMCS)の値と、
制御インジケータと
のうち少なくとも１つの値を検査し、
前記検査した値を変換して、前記１つ以上の計算されたマシン状態の値を作ることにより決定される方法。
【００８２】
（１０）（１）に記載の方法であって、
前記VM移行動作を特定するときに、前記VM移行動作は、VMエントリーとVMエグジットとのうち少なくとも１つである方法。
【００８３】
（１１）バーチャルマシン(VM)を管理するシステムであって、
VMと、
バーチャルマシンモニタ(VMM)と、
コンピュータ装置と
を有し、
VM移行のときに、コンピュータ装置は１つ以上の状態アクションインジケータを決定し、前記１つ以上の状態インジケータは前記コンピュータ装置により使用され、前記VM移行が終了する前に、必要に応じて、前記コンピュータ装置の状態の１つ以上の関連の要素を格納及び／又はロードするように前記コンピュータ装置にさせる少なくとも１つのアクションを決定するシステム。
【００８４】
（１２）（１１）に記載のシステムであって、
前記コンピュータ装置は、
バーチャルマシン制御構造(VMCS)から１つ以上のフィールド値を取得することと、
１つ以上の固定値を決定することと、
１つ以上の計算値を計算することと
のうち少なくとも１つにより、前記１つ以上の状態アクションインジケータの１つ以上の値を決定するシステム。
【００８５】
（１３）（１１）に記載のシステムであって、
前記コンピュータ装置は、２つのセットの制御ビットを有するバーチャルマシン制御構造(VMCS)にアクセスし、
第１のセットの制御ビットは、前記VMへのエントリーのときに、格納するコンピュータ装置の状態の要素と、ロードするコンピュータ装置の状態の要素とを特定するために、前記コンピュータ装置により使用され、
第２のセットの制御ビットは、前記VMからのエグジットのときに、格納するコンピュータ装置の状態の要素と、ロードするコンピュータ装置の状態の要素とを特定するために、前記コンピュータ装置により使用されるシステム。
【００８６】
（１４）（１１）に記載のシステムであって、
格納するときに、前記コンピュータ装置の状態の前記１つ以上の関連の要素は、
バーチャルマシン制御構造(VMCS)の１つ以上のフィールドに、前記コンピュータ装置の状態の前記１つ以上の関連の要素を格納し、
前記VMCSの前記１つ以上のフィールドに１つ以上の固定値を格納し、
前記VMCSの前記１つ以上のフィールドに１つ以上の計算値を格納することを更に有するシステム。
【００８７】
（１５）（１４）に記載のシステムであって、
前記１つ以上の計算値を格納するときに、前記１つ以上の計算値は、
前記計算装置の状態の要素と、
前記VMCSの値と、
制御インジケータと
のうち少なくとも１つの値を検査し、
前記検査した値を変換して、前記１つ以上の計算値を作ることにより決定されるシステム。
【００８８】
（１６）（１１）に記載のシステムであって、
ロードするときに、前記コンピュータ装置の状態の前記１つ以上の関連の要素は、
前記コンピュータ装置の状態の前記１つ以上の関連の要素で、バーチャルマシン制御構造の１つ以上のフィールドから前記コンピュータ装置の状態の前記１つ以上の関連の要素にロードし、
前記コンピュータ装置の状態の前記１つ以上の関連の要素に１つ以上の計算値をロードし、
前記コンピュータ装置の状態の前記１つ以上の関連の要素に１つ以上の固定値をロードすることを更に有するシステム。
【００８９】
（１７）（１６）に記載のシステムであって、
前記１つ以上の計算値をロードするときに、前記１つ以上の計算値は、
前記コンピュータ装置の状態の要素と、
前記VMCSの値と、
制御インジケータ値と
のうち少なくとも１つの値を検査し、
前記検査した値を変換し、前記少なくとも１つの計算値を作ることにより決定されるシステム。
【００９０】
（１８）関連の命令を有する機械アクセス可能な媒体を有するものであって、
前記命令が実行されると、
バーチャルマシン(VM)移行の必要性を検知し、
１つ以上の状態アクションインジケータと、１つ以上の状態アクションインジケータ値とを決定し、
前記１つ以上の決定された状態アクションインジケータ値に基づいて、マシン状態の前記１つ以上の関連の要素で少なくとも１つのアクションを実行することを実行する少なくとも１つの構成要素を有する機械を生じるもの。
【００９１】
（１９）（１８）に記載のものであって、
検知するときに、VM移行は、バーチャルマシンモニタ(VMM)からのVMエグジットと、VMへのVMエントリーとのうち少なくとも１つであるもの。
【００９２】
（２０）（１８）に記載のものであって、
前記１つ以上の状態アクションインジケータを決定するときに、前記少なくとも１つの状態アクションインジケータは、
バーチャルマシン制御構造(VMCS)から少なくとも１つのインジケータ値を読み取ることと、
１つ以上の固定値を決定することと、
１つ以上の計算値を計算することと
のうち少なくとも１つを実行することにより決定されるもの。
【００９３】
（２１）（２０）に記載のものであって、
計算するときに、前記１つ以上の計算値は、
前記マシン状態の前記１つ以上の関連の要素を使用することと、
前記マシン状態の第２の要素を使用することと、
前記VMの状態に関連する要素を使用することと、
前記VMMの状態に関連する要素を使用することと、
制御インジケータ値を使用することと、
前記VMCSのフィールド値を使用することと
のうち少なくとも１つを実行することにより決定されるもの。
【００９４】
（２２）（１８）に記載のものであって、
実行するときに、前記少なくとも１つのアクションは、
マシン状態の前記１つ以上の関連の要素を格納することと、
１つ以上の固定格納値を格納することと、
１つ以上の計算格納値を格納することと、
バーチャルマシン制御構造(VMCS)の１つ以上のフィールドからマシン状態の前記１つ以上の関連の要素に１つ以上の値をロードすることと、
マシン状態の前記１つ以上の関連の要素に１つ以上の固定値をロードすることと、
マシン状態の前記１つ以上の関連の要素に１つ以上の計算値をロードすることと
のうち少なくとも１つを実行することにより実行されるもの。
【００９５】
（２３）（１８）に記載のものであって、
前記少なくとも１つのアクションが実行された後に、前記VM移行を終了することを更に有するもの。
【図１】
0005746275.tif 000004
【図２Ａ】
0005746275.tif 000005
【図２Ｂ】
0005746275.tif 000006
【図２Ｃ】
0005746275.tif 000007
【図３】
0005746275.tif 000008
【図４】
0005746275.tif 000009
【図５】
0005746275.tif 000010