(57)【要約】一実施形態では、アドレス空間の競合を解決するための方法には、ゲスト・オペレーティング・システムが仮想マシン・モニタの第１の部分によって占有されている領域にアクセスしようと試みたことを検出すること、ゲスト・オペレーティング・システムが、仮想マシン・モニタの第１の部分によって以前に占有されていた領域にアクセスできるようにするために、第１のアドレス空間内に仮想マシン・モニタの第１の部分を再配置することが含まれる。
2004526229.tif 000002
【特許請求の範囲】
【請求項１】
ゲスト・オペレーティング・システムが、第１のアドレス空間内で仮想マシン・モニタ（ＶＭＭ）の第１の部分によって占有されている領域にアクセスしようと試みたことを検出すること、および、
ＶＭＭの第１の部分によって以前に占有されていた領域にゲスト・オペレーティング・システムがアクセスできるようにするために、第１のアドレス空間内でＶＭＭの第１の部分を再配置することを含む方法。
【請求項２】
ＶＭＭの第１の部分が、第１のアドレス空間内に常駐することがアーキテクチャ上必要な１組のＶＭＭコードおよびデータ構造を有する請求項１に記載の方法。
【請求項３】
ＶＭＭの第１の部分が、１組のトラップ・ハンドラおよび割込みデスクリプタ・テーブル（ＩＤＴ）を有する請求項１に記載の方法。
【請求項４】
ＶＭＭを第１の部分および第２の部分に分割すること、
ゲスト・オペレーティング・システムに関連付けられた第１のアドレス空間を作成すること、
ＶＭＭに関連付けられた第２のアドレス空間を作成すること、
ＶＭＭに関連付けられた第２のアドレス空間内にＶＭＭの第２の部分を配置すること、および、
ＶＭＭの第１の部分を第１のアドレス空間および第２のアドレス空間にマップすることをさらに含む請求項１に記載の方法。
【請求項５】
イベントによりゲスト・オペレーティング・システムとＶＭＭの間でアドレス空間の競合が起きる可能性があるとき、ゲスト・オペレーティング・システムによって開始されたイベントに対する制御権を受け取ることをさらに含む請求項１に記載の方法。
【請求項６】
制御権を受け取ることが、
ＶＭＭの第１の部分によって占有されているセクションのアクセス権を、ゲスト・オペレーティング・システムに関連付けられた特権レベルより上の特権レベルに設定すること、および、
ゲスト・オペレーティング・システムに関連付けられた特権レベルより高い特権レベルを有するハードウェア・リソースにアクセスしようとするゲスト・オペレーティング・システムの試みによって引き起こされたトラップを受け取ることをさらに含む請求項５に記載の方法。
【請求項７】
トラップをＶＭＭの第１の部分によって扱うことができると判断すること、
トラップに関連付けられたコードを実行すること、および
イベントに対する制御権をゲスト・オペレーティング・システムに返すことをさらに含む請求項６に記載の方法。
【請求項８】
トラップをＶＭＭの第２の部分によって扱うべきであると判断すること、
トラップをＶＭＭの第２の部分に配信すること、
トラップに関連付けられたコードがＶＭＭの第２の部分によって実行された後、イベントに対する制御権をゲスト・オペレーティング・システムに渡すことをさらに含む請求項６に記載の方法。
【請求項９】
ＶＭＭの第１の部分を再配置することが、
第１のアドレス空間内の未使用の領域を見つけること、および、
ＶＭＭの第１の部分を未使用の領域に再マップすることをさらに含む請求項１に記載の方法。
【請求項１０】
ＶＭＭの第１の部分を再配置することが、
第１のアドレス空間内に未使用の領域が存在しないと判断すること、
第１のアドレス空間内のランダム領域を選択すること、
ランダム領域に配置されたメモリの内容を第２のアドレス空間にコピーすること、および
ＶＭＭの第１の部分をランダム領域に再マップすることをさらに含む請求項１に記載の方法。
【請求項１１】
ゲスト・オペレーティング・システムによって開始されたイベントに対する制御権を受け取ることを含み、イベントが、ランダム領域に以前に置かれていたメモリの内容にアクセスしようとするゲスト・オペレーティング・システムの試みに対応し、
さらに、第２のアドレス空間内のメモリのコピーされた内容にアクセスすることをさらに含む請求項１０に記載の方法。
【請求項１２】
頻繁にアクセスされない領域を見つけるまで、ＶＭＭの第１の部分を第１のアドレス空間内のランダム領域に周期的に再配置することをさらに含む請求項１１に記載の方法。
【請求項１３】
ゲスト・オペレーティング・システムに関連付けられた第１のアドレス空間と、
仮想マシン・モニタ（ＶＭＭ）に関連付けられた第２のアドレス空間と、
ゲスト・オペレーティング・システムが第１のアドレス空間内のＶＭＭの第１の部分によって占有されている領域にアクセスしようと試みたことを検出し、ゲスト・オペレーティング・システムがＶＭＭの第１の部分によって以前に占有されていた領域にアクセスできるようにするために、第１のアドレス空間内のＶＭＭの第１の部分を再配置するための仮想マシン・カーネルと
を有する装置。
【請求項１４】
ＶＭＭの第１の部分が、第１のアドレス空間内に常駐することがアーキテクチャ上必要な１組のＶＭＭコードおよびデータ構造を有する請求項１３に記載の装置。
【請求項１５】
ＶＭＭの第１の部分が、１組のトラップ・ハンドラおよび割込みデスクリプタ・テーブル（ＩＤＴ）を有する請求項１３に記載の装置。
【請求項１６】
仮想マシン・カーネルが、ＶＭＭを第１の部分および第２の部分に分割し、ＶＭＭに関連付けられた第２のアドレス空間内にＶＭＭの第２の部分を置き、ＶＭＭの第１の部分を第１のアドレス空間および第２のアドレス空間内にマップする請求項１３に記載の装置。
【請求項１７】
イベントによりゲスト・オペレーティング・システムとＶＭＭの間でアドレス空間の競合が起きる可能性がある場合に、仮想マシン・カーネルが、ゲスト・オペレーティング・システムによって開始されたイベントに対する制御権を受け取る請求項１３に記載の装置。
【請求項１８】
仮想マシン・カーネルが、ＶＭＭの第１の部分によって占有されているセクションのアクセス権を、ゲスト・オペレーティング・システムに関連付けられた特権レベルより上の特権レベルに設定することにより、およびゲスト・オペレーティング・システムに関連付けられた特権レベルより高い特権レベルを有するハードウェア・リソースにアクセスしようとするゲスト・オペレーティング・システムの試みによって引き起こされたトラップを受け取ることにより制御権を受け取る請求項１３に記載の装置。
【請求項１９】
仮想マシン・カーネルが、トラップをＶＭＭの第１の部分によって扱うことができると判断し、トラップに関連付けられたコードを実行し、イベントに対する制御権をゲスト・オペレーティング・システムに返す請求項１８に記載の装置。
【請求項２０】
仮想マシン・カーネルが、トラップをＶＭＭの第２の部分によって扱うべきであると判断し、トラップをＶＭＭの第２の部分に配信し、トラップに関連付けられたコードがＶＭＭの第２の部分によって実行された後、イベントに対する制御権をゲスト・オペレーティング・システムに渡す請求項１８に記載の装置。
【請求項２１】
仮想マシン・カーネルが、第１のアドレス空間内の未使用の領域を見つけ、ＶＭＭの第１の部分を未使用の領域に再マップすることにより、ＶＭＭの第１の部分を再配置する請求項１３に記載の装置。
【請求項２２】
仮想マシン・カーネルが、第１のアドレス空間内に未使用の領域が存在しないと判断し、第１のアドレス空間内のランダム領域を選択し、ランダム領域に配置されたメモリの内容を第２のアドレス空間にコピーし、ＶＭＭの第１の部分をランダム領域に再マップすることにより、ＶＭＭの第１の部分を再配置する請求項１３に記載の装置。
【請求項２３】
仮想マシン・カーネルがゲスト・オペレーティング・システムによって開始されたイベントに対する制御権を受信し、イベントがランダム領域に以前に置かれていたメモリの内容にアクセスしようとするゲスト・オペレーティング・システムの試みに対応し、さらに、前記仮想マシン・カーネルが第２のアドレス空間内のメモリのコピーされた内容にアクセスする請求項１３に記載の装置。
【請求項２４】
仮想マシン・カーネルが、頻繁にアクセスされない領域を見つけるまで、ＶＭＭの第１の部分を第１のアドレス空間内のランダム領域に周期的に再配置する請求項１３に記載の装置。
【請求項２５】
ゲスト・オペレーティング・システムに関連付けられた第１のアドレス空間および仮想マシン・モニタ（ＶＭＭ）に関連付けられた第２のアドレス空間を有するメモリと、
メモリに結合され、ゲスト・オペレーティング・システムがＶＭＭの第１の部分によって以前に占有されていた領域にアクセスできるように、第１のアドレス空間内のＶＭＭの第１の部分によって占有されている領域にアクセスし、第１のアドレス空間内のＶＭＭの第１の部分を再配置することをゲスト・オペレーティング・システムが試みたことを検出するプロセッサと
を備えたシステム。
【請求項２６】
ＶＭＭの第１の部分が、第１のアドレス空間内に常駐することがアーキテクチャ上必要な１組のＶＭＭコードおよびデータ構造を有する請求項２５に記載のシステム。
【請求項２７】
ＶＭＭの第１の部分が、１組のトラップ・ハンドラおよび割込みデスクリプタ・テーブル（ＩＤＴ）を有する請求項２５に記載のシステム。
【請求項２８】
プロセッサで実行される場合に、前記プロセッサにオペレーションを実施させる命令を与えるコンピュータ可読媒体であって、前記プロセッサが、
ゲスト・オペレーティング・システムが、第１のアドレス空間内の仮想マシン・モニタ（ＶＭＭ）の第１の部分によって占有されている領域にアクセスしようと試みたことを検出すること、および、
ゲスト・オペレーティング・システムが、ＶＭＭの第１の部分によって以前に占有されていた領域にアクセスできるようにするために、第１のアドレス空間内のＶＭＭの第１の部分を再配置することを含むコンピュータ可読媒体。
【請求項２９】
プロセッサにオペレーションを実施させる命令をさらに有するコンピュータ可読媒体であって、前記プロセッサが、
第１のアドレス空間内の未使用の領域を見つけること、および、
ＶＭＭの第１の部分を未使用の領域に再マップすること含む請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
プロセッサにオペレーションを実施させる命令をさらに有するコンピュータ可読媒体であって、前記プロセッサが、
第１のアドレス空間内に未使用の領域が存在しないと判断すること、
第１のアドレス空間内のランダム領域を選択すること、
ランダム領域に配置されたメモリの内容を第２のアドレス空間にコピーすること、および、
ＶＭＭの第１の部分をランダム領域に再マップすることを含む請求項２８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【０００１】
発明の分野
本発明は、一般に仮想マシンに関し、より詳細には、仮想マシン・モニタとゲスト・オペレーティング・システムとの間のアドレス空間の競合を解決することに関する。
【０００２】
発明の背景
従来の仮想マシン・モニタ（ＶＭＭ）は、一般に、コンピュータ上で動作し、他のソフトウェアに１つまたは複数の仮想マシンのアブストラクションを提供する。それぞれの仮想マシンは、それ自体の「ゲスト・オペレーティング・システム」（すなわち、ＶＭＭによってホストされるオペレーティング・システム）を実行する自己完結型プラットフォームとして機能できる。ゲスト・オペレーティング・システムは、仮想マシンではなく、あたかも専用コンピュータとして動作するようになっている。つまり、ゲスト・オペレーティング・システムは、さまざまなコンピュータ・オペレーションを制御するようになっており、動作中、コンピュータの物理メモリおよびメモリマップされたＩ／Ｏデバイスへの無制限のアクセス権を有している。しかし、仮想マシン環境においては、ＶＭＭは、仮想マシンを、また仮想マシン相互間を保護するためにコンピュータのリソースに対して最大の制御権を持つべきである。このことを達成するために、ＶＭＭは一般に、ゲスト・オペレーティング・システムによって行われるコンピュータ・リソースへのすべてのアクセスを傍受し、仲裁する。
【０００３】
既存のプロセッサ（たとえば、ＩＡ−３２マイクロプロセッサ）を用いた場合、ＶＭＭは、ＶＭＭコードおよび／またはデータ構造の一部分がゲスト・オペレーティング・システムと同じ仮想アドレス空間内に置かれていなければ、ハードウェア・リソースへのゲスト・オペレーティング・システムのアクセスを傍受できないことがある。しかし、ゲスト・オペレーティング・システムは、ＶＭＭコードおよび／またはデータ構造がゲスト・オペレーティング・システムのアドレス空間内に常駐していることを予期していず、このアドレス空間内のＶＭＭに占有されている領域にアクセスすることを試みる場合があり、そのため、ゲスト・オペレーティング・システムとＶＭＭの間でアドレス空間の競合が起きる。この競合は、ＶＭＭまたはゲスト・オペレーティング・システムによって実施されたオペレーションの異常終了を引き起こすことがある。
【０００４】
したがって、ＶＭＭとゲスト・オペレーティング・システムの間のアドレス空間の競合を検出し解決するメカニズムが必要である。
【０００５】
添付図面内の図においては、本発明は例示として示したものであり、本発明を限定するものではない。ここで、同様の参照番号は同様の要素を示す。
【０００６】
実施形態の説明
アドレス空間の競合を解決するための方法および装置について記述する。以下の記述においては、構成要素間の距離、モールディングのタイプなどの数々の詳細事項について記載する。しかし、本発明がこれらの特定の詳細事項がなくても実施できることは、当業者には自明であろう。他の例では、本発明が曖昧になることを避けるために、周知の構造およびデバイスが詳細事項ではなくブロック図形式で示してある。
【０００７】
以下の記述では、説明のために、本発明の完全な理解を提供するための数々の特定の詳細事項について記載する。しかし、本発明がこれらの特定の詳細事項がなくても実践できることは、当業者には自明であろう。
【０００８】
以下の詳細な記述のいくつかの部分は、コンピュータ・メモリ内のデータ・ビットのオペレーションのアルゴリズムおよびシンボル表示で提示してある。これらのアルゴリズムによる記述および表示は、データ処理技術分野の当業者が、当技術分野の他の者に自身の仕事の内容を最も効果的に伝えるために使用する手段である。アルゴリズムとは、ここでおよび一般に、所望の結果に導くための筋の通ったシーケンスのステップであると考えられる。ステップは、物理量の物理操作を伴うステップである。必ずしも必要とされるものではないが、通常、これらの量は、格納され、移転され、合成され、比較され、それ以外の操作がなされることが可能な電気または磁気信号の形をとる。主に共通に使用するためであるが、時にはこれらの信号をビット、値、要素、記号、文字、項、数などと呼ぶことが好都合であることが証明されている。
【０００９】
しかし、これらのおよび同様の用語のすべてが適切な物理量に関連付けられており、単にこれらの量に適用される好都合なレッテルであることに留意されたい。以下の説明から明らかなように別段の具体的な記載がない限り、本発明全体を通じて、「処理」または「コンピューティング」または「計算」または「判断」または「表示」などの用語を使用した説明は、コンピュータ・システムのレジスタおよびメモリ内に物理（電子）量として表されたデータを操作し、コンピュータ・システム・メモリまたはレジスタあるいは他のこのような情報記憶装置、伝送デバイスまたは表示デバイス内に物理量として同様に表わされる他のデータに変換するコンピュータ・システムまたは同様の電子コンピューティング・デバイスのアクションおよびプロセスを指すことがあることを理解されたい。
【００１０】
また、本発明は記載されたオペレーションを実施するための装置に関する。この装置は、必要な目的のために特別に構築でき、またはコンピュータ内に格納されたコンピュータ・プログラムによって選択的に起動されるかまたは再構成される汎用コンピュータを備えることができる。このようなコンピュータ・プログラムは、フロッピ・ディスク、光学ディスク、ＣＤ−ＲＯＭ、磁気光学ディスク、読取専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気または光学カードを含む任意のタイプのディスク、またはそれぞれがコンピュータ・システム・バスに結合された、電子命令を格納するのに適切な任意のタイプの媒体などのコンピュータ可読記憶媒体内に格納できるが、それらに限定されるものではない。命令は、１つまたは複数の処理デバイス（たとえば、プロセッサ、中央処理ユニットなど）を使用して実行可能である。
【００１１】
本明細書に提示されたアルゴリズムおよび表示は、どのような特定のコンピュータまたは他の装置にも本質的に関係するものではない。さまざまな汎用マシンが、本明細書の教示によるプログラムとともに使用することができ、または必要な方法ステップを実施するためにより専用の装置を構築することが好都合であることもある。これらのさまざまなマシンのための必要な構造は、以下の記述に示してある。さらに、本発明は、特定のプログラミング言語を参照して記述していない。さまざまなプログラミング言語を使用して本明細書に記述した本発明の教示を実施できることを理解されたい。
【００１２】
実施形態についての以下の詳細な記述では、本発明を実践できる具体的な実施形態を例示した添付図面を参照する。図面では、いくつかの図を通して、同様の番号は実質的に同様の構成要素を記述する。これらの実施形態は、当業者が本発明を実践できるように十分詳細に記述してある。他の実施形態も利用でき、構造上、論理的、電気的な変更も、本発明の範囲から逸脱することなく行うことができる。その上、本発明のさまざまな実施形態は、それぞれ異なっているものの、必ずしも互いに相容れないものではないことを理解されたい。たとえば、一実施形態において記述した特定の特徴、構造、または特性を、他の実施形態内に含むことができる。したがって、以下の詳細な記述は限定的なものと解釈すべきではなく、本発明の範囲は、頭記の特許請求の範囲およびこの特許請求の範囲の権利を有する均等物の全範囲によってのみ定義されるものである。
【００１３】
本発明の方法および装置は、ゲスト・オペレーティング・システムと仮想マシン・モニタ（ＶＭＭ）の間のアドレス空間の競合を解決するためのメカニズムを提供する。図１は、本発明により動作させることができる仮想マシン環境１００の一実施形態を示す図である。この実施形態では、ベア・プラットフォーム・ハードウェア１１６には、コンピューティング・プラットフォームが備えられ、これは、たとえば、標準オペレーティング・システム（ＯＳ）またはＶＭＭ１１２などの仮想マシン・モニタ（ＶＭＭ）を実行することが可能である。ＶＭＭは、一般にソフトウェア内に実装されるが、エミュレーションなどのベア・マシン・インターフェースをより高レベルのソフトウェアにエクスポートできる。このようなより高レベルのソフトウェアは、標準またはリアルタイムＯＳを備えることができるが、本発明はこの点にその範囲が限定されるものではなく、あるいは、たとえば、ＶＭＭを別のＶＭＭ内でまたはそれとともに実行できる。ＶＭＭおよびそれらの代表的な特徴および機能は、当業者には周知であり、たとえば、ソフトウェア、ファームウェアまたはさまざまな技術の組合せの中に実装できる。
【００１４】
上述したように、ＶＭＭは、他のソフトウェア（すなわち、「ゲスト」ソフトウェア）に１つまたは複数の仮想マシン（ＶＭ）のアブストラクションを提供する。図１は、２つのＶＭ、１０２および１１４を示す図である。それぞれのＶＭが、ゲストＯＳ１０４または１０６などのゲストＯＳおよびさまざまなゲスト・ソフトウェア・アプリケーション１０８〜１１０を備える。ゲストＯＳ１０４および１０６のそれぞれは、ゲストＯＳ１０４または１０６が動作しているハードウェア・プラットフォーム内の物理リソース（たとえば、メモリやメモリマップされたＩ／Ｏデバイス）へのアクセスを制御し、他の機能を実施するようになっている。しかし、仮想マシン環境においては、ＶＭＭ１１２は、ＶＭ１０２および１１４を、およびそれらの間を保護するために、物理リソースに対して最大の制御を有することができなければならない。ＶＭＭ１１２は、コンピュータの物理リソースへのゲストＯＳ１０４、１０６のすべてのアクセスを傍受することにより、この目標を達成する。たとえば、ゲストの特権を奪う技術を使用して、ＶＭＭ１１２が上記のアクセスを傍受できるようにすることができる。ゲストの特権を奪うことにより、すべてのゲスト・ソフトウェアが、特定のハードウェア・リソースへのアクセスが認められないハードウェア特権レベルで動作するようになる。その結果、ゲストＯＳ１０４または１０６が、それらのハードウェア・リソースのいずれかにアクセスを試みる場合はいつでも、ゲストＯＳはＶＭＭ１１２へ「トラップする」。すなわちＶＭＭ１１２は、このオペレーションがこのようなハードウェア・リソースにアクセスすることを伴う場合には、ゲスト・オペレーティング・システムによって開始されたオペレーションに対する制御権を受け取る。当技術分野で周知の任意の他の技術を使用して、同様のオペレーションに対する制御をゲストＯＳ１０４または１０６からＶＭＭ１１２へ移転できることに留意されたい。
【００１５】
ゲストの特権を奪うまたは、ＶＭＭ１１２がコンピュータの物理リソースへのゲストＯＳ１０４および１０６のアクセスを傍受できるようにする他の技術を使用する場合、ＶＭＭコードおよび／またはデータ構造の一部分が、ゲストＯＳ１０４および１０６のそれぞれとして同じ仮想アドレス空間内に常駐することがアーキテクチャ上必要であることがある。しかし、ゲストＯＳ１０４および１０６はＶＭＭの存在を認識していないので、それらは、ゲストＯＳ１０４または１０６に関連付けられた仮想アドレス空間内にＶＭＭコードおよび／またはデータ構造によって占有されている領域にアクセスすることを試みることがある。このような試みの結果、ゲストＯＳのコードおよびデータ構造と仮想アドレス空間内のＶＭＭコードおよびデータ構造の間に衝突が生じることがあり、それにより、ゲストＯＳ１０４または１０６あるいはＶＭＭ１１２によって実施されるオペレーションの異常終了が生じる。本発明は、このようなアドレス空間の競合を解決するためのメカニズムを提供する。
【００１６】
図２は、本発明の一実施形態に従って、ＶＭＭとゲストＯＳの間のアドレス空間の競合を解決するためのシステム２００を示すブロック図である。システム２００には、ゲストＯＳ（たとえば、ゲストＯＳ１０４または１０６）、ＶＭＭ（たとえば、ＶＭＭ１１２）などを実行することが可能なコンピューティング・プラットフォームを含むベア・プラットフォーム・ハードウェア２１４が備えられる。２つの別個のアドレス空間２０４および２０２が、ゲスト・ソフトウェアおよびＶＭＭのために割り当てられている。ＶＭアドレス空間２０４は、ゲストＯＳおよび他のゲスト・ソフトウェアのコードおよびデータ構造を保持するために割り当てられ、ＶＭＭアドレス空間２０２は、ＶＭＭコードおよびデータ構造のために割り当てられる。
【００１７】
上述したように、ＶＭＭコードおよび／またはデータ構造のある構成要素が、ＶＭＭがハードウェア・リソースへのゲストＯＳのアクセスを傍受できるようにするためにゲストＯＳと同じアドレス空間内に常駐することがアーキテクチャ上必要であることがある。たとえば、ＩＡ−３２命令セット・アーキテクチャ（ＩＳＡ）については、ゲストの特権を奪うことを使用して、ゲストＯＳがハードウェア・リソースへ確実にアクセスできるようにＶＭＭを制御する場合、ハンドリング・ルーチンをトラップするためのポインタを含む割込みデスクリプタ・テーブル（ＩＤＴ）が、ゲストＯＳと同じアドレス空間内に常駐することがアーキテクチャ上必要である。ゲストの特権を奪うことをサポートする本発明の一実施形態を、図５および６と合わせて以下により詳細に記述する。他のＩＳＡについては、ＶＭＭコードおよび／またはデータ構造のさまざまな他の部分が、ハードウェア・リソースへのゲストＯＳによってなされたアクセスをＶＭＭが制御できるようにするためにゲストＯＳと同じアドレス空間内に常駐することがアーキテクチャ上必要であることがある。
【００１８】
一実施形態では、ＶＭＭコードおよび構造は２つの部分に分割される。ＶＭＭの第１の部分は、ゲストＯＳのアドレス空間内、すなわちＶＭアドレス空間２０４内に常駐することが必要な１組のコードおよび／またはデータ構造を有する。ＶＭＭの第２の部分は、ＶＭＭコードおよびデータ構造の残りの部分を有する。一実施形態では、ソフトウェア・プログラム（仮想マシン・カーネル２１０と呼ぶ）が、ゲストＯＳと同じアドレス空間内に配置することが必要な最小の組のＶＭＭコードおよび／またはデータ構造を収集する。ＶＭＭコードおよびデータ構造の残りの部分は、別個のプログラムとしてコンパイルされ、ＶＭＭアドレス空間２０２内に置かれる。次いで、仮想マシン・カーネル（ＶＭＫ）２１０は、ＶＭアドレス空間２０４とＶＭＭアドレス空間２０２の両方内にそれ自体をマップする。
【００１９】
その後、ゲストＯＳがＶＭアドレス空間２０４内のＶＭＭコードおよび／またはデータ構造によって占有されている領域にアクセスすることを試みた場合、ＶＭＫ２１０は、ゲストＯＳのこの試みを検出する。一実施形態では、もしこのイベントにより、ゲストＯＳとＶＭＭの間でアドレス空間の競合が起きる可能性がある場合には、ＶＭＫ２１０は、ゲストＯＳによって開始されるイベントに対する制御権を受け取る。ゲストの特権を奪うこと、あるいは当技術分野で周知の任意の他のハードウェアまたはソフトウェア・メカニズムを、このようなイベントに対する制御権をゲストＯＳからＶＭアドレス空間２０４に常駐するＶＭＭコードおよび／またはデータ構造へ移転するために使用することができる。
【００２０】
次いでＶＭＫ２１０は、このイベントを評価して、その原因を判断する。そのイベントが、ＶＭＭコードおよび／またはデータ構造によって占有されている領域にアクセスしようとするゲストＯＳの試みによるものであることが検出されると、ＶＭＫ２１０は、ＶＭＫ２１０によって以前に使用されていた領域にゲストＯＳがアクセスするように、ＶＭアドレス空間２０４内の異なる領域へそれ自体を再マップする。ＶＭアドレス空間２０４内にＶＭＫ２１０を再配置するための方法の一実施形態を、図４と合わせて以下により詳細に記述する。
【００２１】
図３は、本発明の一実施形態に従って、ＶＭＭとゲストＯＳの間のアドレス空間の競合を解決するための方法３００の一実施形態を示す流れ図である。方法３００は、ＶＭＭを第１の部分および第２の部分に分割することから開始する（処理ブロック３０４）。上述したように、第１の部分は、ゲストＯＳとしてアーキテクチャ上同じアドレス空間内に常駐することが必要な１組のＶＭＭコードおよび／またはデータ構造を有する。ＶＭＭの第２の部分は、ＶＭＭコードおよびデータ構造の残りの部分を有する。（以下により詳細に記述する）一実施形態では、ＶＭＭの第１の部分は、１組のトラップ・ハンドラおよび割込みデスクリプタ・テーブル（ＩＤＴ）を含む。代替実施形態では、第１の部分は、ゲストＯＳと同じアドレス空間内に常駐しなければならないＶＭＭのさまざまな他のデータ構造およびコードを有する。
【００２２】
次に、第１のアドレス空間（すなわち、ＶＭアドレス空間２０４）は、ゲストＯＳおよび他のゲスト・ソフトウェアのコードおよびデータ構造を保持するために作成され（処理ブロック３０６）、第２のアドレス空間（すなわち、ＶＭＭアドレス空間２０２）は、ＶＭＭコードおよびデータ構造のために作成される（処理ブロック３０８）。一実施形態では、これらのアドレス空間は、ブート・プロセス中に作成される。
【００２３】
さらに、ＶＭＭの第１の部分はＶＭアドレス空間とＶＭＭアドレス空間の両方にマップされ（処理ブロック３１０）、ＶＭＭの第２の部分はＶＭＭアドレス空間内にロードされる（処理ブロック３１２）。
【００２４】
処理ブロック３１４で、ＶＭＭの第１の部分によって占有されている領域にアクセスしようとするゲストＯＳの試みが検出される。一実施形態では、そのイベントによりゲスト・オペレーティング・システムとＶＭＭの間でアドレス空間の競合が起きる可能性がある場合には、ＶＭＭの第１の部分へゲストＯＳによって開始されたイベントに対する制御権を移転することにより、このような試みが検出される。アドレス空間の競合の可能性を検出する一実施形態を、図５および６と合わせて以下により詳細に記述する。
【００２５】
その後、処理ブロック３１６で、ＶＭＭの第１の部分が、ＶＭＭの第１の部分によって以前に占有されていた領域へゲストＯＳがアクセスするように、ＶＭアドレス空間内の別の領域に再配置される。後にＶＭＭの第１の部分によって占有されている新しい領域にアクセスしようとする試みがあった場合、その結果、再びＶＭアドレス空間内の再配置が生じる。ＶＭＭの第１の部分を含む、ＶＭＫを再配置するための方法の一実施形態が図４に示されている。
【００２６】
図４を参照すると、ゲストＯＳとＶＭＭの間のアドレス空間の競合が検出された（処理ブロック４０４）後、未使用の領域を探してＶＭアドレス空間がサーチされる（処理ブロック４０６）。判断記号４０８で、ＶＭアドレス空間内に未使用の領域が存在するかどうかの判断がなされる。存在すると判断されると、ＶＭＭコードおよびデータ構造の第１の部分を有するＶＭＫが、この未使用の領域内に再マップされ、制御権がゲストＯＳに移転し戻され、ＶＭＫによって以前に使用されていた領域にアクセスできるようになる。
【００２７】
あるいは、ＶＭアドレス空間内に未使用の領域が存在しない場合、すなわち、ゲストＯＳが全ＶＭアドレス空間を使用してしまっている場合は、ランダム領域が、ＶＭアドレス空間内で選択され（処理ブロック４１２）、選択された領域に置かれているメモリの内容がＶＭＭアドレス空間内のバッファにコピーされ（処理ブロック４１４）、ＶＭＫは、ＶＭアドレス空間内の選択された領域内に再マップされる（処理ブロック４１６）。この選択された領域（すなわち、新しいＶＭＫ領域）への後続のメモリ・アクセスが、新しいＶＭＫ領域の元の内容を有するＶＭＭアドレス空間内のバッファからエミュレートされたメモリ・アクセスを通じてサービスされる。一実施形態では、頻繁に使用されない領域が見つかるまで、ＶＭアドレス空間内のランダム領域に周期的にＶＭＫを再配置することにより、このようなエミュレートされたメモリ参照の頻度を減少できる。
【００２８】
図５は、本発明の一実施形態に従って、ゲストの特権を奪うことをサポートするＶＭＫの動作を示す図である。上述したように、ゲストの特権を奪うことにより、ゲストＯＳがより低い特権レベルで動作し、その結果、ゲストＯＳは、それがプロセッサ・システム状態で動作する特権命令を発行することを試みる場合はいつでも、ＶＭＭに「トラップ」する。一実施形態では、ゲストの特権を奪うことをサポートするＶＭＭは、ポインタをインストールして、割込みデスクリプタ・テーブル（ＩＤＴ）５１４内のハンドリング・ルーチン（すなわち、トラップ・ハンドラ５５２）をトラップする。ＩＳＡ（たとえば、ＩＡ−３２ＩＳＡ）の中には、ＩＤＴ５１４が現在アクティブの仮想アドレス空間（すなわち、ＶＭアドレス空間５０４）内に常駐することをを必要とするものがある。一実施形態では、ＩＤＴ５１４内のエントリはタスク・ゲートであり、アドレス空間スイッチを提供する。つまり、トラップが生成された場合は、トラップ・ハンドリング・ルーチンへのポインタを求めてＩＤＴ５１４がサーチされる。このポインタがタスク・ゲートであれば、それにより、生成されたトラップのためのトラップ・ハンドリング・ルーチンを有するＶＭＭアドレス空間への直接スイッチが可能となる。したがって、タスク・ゲートに対応するトラップ・ハンドラは、ＶＭアドレス空間内に常駐する必要はないが、タスク・ゲート自体は、ＶＭアドレス空間内に常駐しなければならない。別の実施形態では、ＩＤＴ５１４内のエントリがトラップ・ゲートまたは割込みゲートであり、これはアドレス空間スイッチを提供しない。その結果、このようなＩＤＴエントリに関連付けられたトラップ・ハンドラがＶＭアドレス空間内に常駐しなければならない。さらに、ＶＭＭは、ＶＭアドレス空間内に他のデータ構造（たとえば、グローバル・デスクリプタ・テーブル）のシャドウ・バージョンを入れることができる。
【００２９】
一実施形態では、ＶＭＫ５１０は、ＶＭアドレス空間内に置かれていなければならない最小の組のトラップ・ハンドラおよび／またはデータ構造（たとえば、ＩＤＴ５１４）をまとめて収集し、それらをＶＭアドレス空間５０４とＶＭＭアドレス空間５０２の両方の中にマップし、最特権レベル（たとえば、ＩＡ−３２マイクロプロセッサについてはリング＝０を有する「スーパバイザ」特権レベル）に、ＶＭＫ５１０を保持するページのアクセス権を設定する。上述したように、ゲストＯＳは、特権を奪われたモード（たとえば、ＩＡ−３２マイクロプロセッサについてはリング＝３を有する「ユーザ」モード）内で動作する。その結果、一実施形態では、ゲストＯＳは、それが最特権アクセス権で保護されているＶＭＫ５１０を保持するページを含む特権マシン・リソースにアクセスすることを試みる場合はいつでも、仮想化トラップを生成する。
【００３０】
一実施形態では、仮想化トラップが生成された場合は、トラップ・ハンドラへの対応するポインタのためにＩＤＴ５１４がサーチされる。一実施形態では、トラップを、ＶＭＭに常駐するトラップ・ハンドラによって扱う必要があることがある。この実施形態では、ＶＭＫは、２つのアドレス空間スイッチ、すなわち、トラップをＶＭＭアドレス空間５０２内のトラップ・ハンドラに配信するための１つのスイッチと、ＶＭＭに常駐するトラップ・ハンドラによってトラップがサービスされた後に、ＶＭアドレス空間５０４に戻すための第２のスイッチとを実施する。
【００３１】
あるいは、トラップをＶＭＫに常駐するハンドラ内で扱うことができる。たとえば、トラップが、プロセッサのレジスタ内のフラグをリセットするためのゲストＯＳの命令により起きることがある。このようなトラップは、ＶＭＭアドレス空間５０２内のＶＭＭに制御権を移転せずに、全面的にトラップ・ハンドラ５５２内で扱うことができ、このように実施することにより、より良い性能が得られる。
【００３２】
１つのタイプの仮想化トラップは、ゲストＯＳが、ＶＭＫ５１０によって現在使用されているＶＭアドレス空間５０４の領域にアクセスすることを試みた場合に生成される競合障害である。ＶＭＫ５１０は、図４と合わせて上記により詳細に記述したように、ＶＭアドレス空間５０４内の新しい領域内にそれ自体を再マップすることにより、これらの競合障害を扱う。
【００３３】
図６は、本発明の一実施形態に従って、ゲストＯＳによって生成された仮想化トラップを扱うための方法６００を示す流れ図である。方法６００は、ＶＭＫによって占有されている領域へのアクセス権を、ゲストＯＳに関連付けられた特権レベルより上の特権レベルに設定することから開始する（処理ブロック６０４）。たとえば、すべてのＶＭＫページをスーパバイザのみの特権（リング＝０）でマップでき、ゲストＯＳを特権を奪われたユーザ・モード（リング＝３）内で動作するよう設定できる。
【００３４】
処理ブロック６０６で、ゲストＯＳによって生成されたトラップが受信される。トラップは、特権ハードウェア・リソースにアクセスしようとするゲストＯＳの試みによって起きる。判断記号６０８で、トラップをＶＭＫによって内部的に（たとえば、ＶＭＫに常駐するトラップ・ハンドラ内で）扱うことができるかどうかの判断がなされる。トラップが複雑すぎてＶＭＫによって扱うことができない場合は、それは、ＶＭＭアドレス空間（たとえば、ＶＭＭに常駐するトラップ・ハンドラ）に配信され（処理ブロック６１０）、次いで、トラップがＶＭＭによってサービスされた後、ＶＭアドレス空間に戻って再開される（処理ブロック６１２）。その後、トラップを起こしたイベントに対する制御権が、ゲストＯＳに戻る（処理ブロック６２０）。
【００３５】
あるいは、トラップがＶＭＫによって内部的に扱うことができる場合は、トラップが、ＶＭＫコードおよびデータ構造とゲストＯＳのコードおよびデータ構造の間のアドレス空間の競合によって引き起こされたものかどうかの判断がなされる（判断記号６１４）。トラップが実際にアドレス空間の競合によって引き起こされた場合は、ＶＭＫコードおよびデータ構造は、ＶＭアドレス空間内の新しい領域に再配置される（処理ブロック６１８）。あるいは、トラップは、対応するトラップ・ハンドラによって扱われる（処理ブロック６１６）。その後、トラップを起こしたイベントに対する制御権が、ゲストＯＳに戻る（処理ブロック６２０）。
【００３６】
図７は、処理システムの一実施形態を示すブロック図である。処理システム７００には、プロセッサ７２０とメモリ７３０とが備えられる。プロセッサ７２０は、マイクロプロセッサ、ディジタル信号プロセッサ、マイクロコントローラなどのソフトウェアを実行することができるあらゆるタイプのプロセッサでよい。処理システム７００は、パーソナル・コンピュータ（ＰＣ）、メインフレーム、ハンドヘルド・デバイス、ポータブル・コンピュータ、セットトップ・ボックス、またはソフトウェアを含む他のどのようなシステムでもよい。
【００３７】
メモリ７３０は、ハード・ディスク、フロッピ・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、フラッシュ・メモリ、またはプロセッサ７２０によって読取可能な他のどのようなタイプのマシン媒体でもよい。メモリ７３０は、方法３００、４００、６００などの本発明のさまざまな方法実施形態を実行するための命令を格納できる（図３、４、６）。
【００３８】
上記の記述は例示目的であり、限定的なものではないことを理解されたい。上記の記述を読み、理解されたならば、当業者には他の多くの実施形態が自明となろう。したがって、本発明の範囲は、頭記の特許請求の範囲およびこの特許請求の範囲の権利を有する均等物の全範囲を参照して判断すべきである。
【図面の簡単な説明】
【図１】
仮想マシン環境の一実施形態を示す図である。
【図２】
本発明の一実施形態に従って、仮想マシン・モニタとゲスト・オペレーティング・システムの間のアドレス空間の競合を解決するためのシステムを示すブロック図である。
【図３】
本発明の一実施形態に従って、仮想マシン・モニタとゲスト・オペレーティング・システムの間のアドレス空間の競合を解決するための方法を示す流れ図である。
【図４】
本発明の一実施形態に従って、仮想マシン・アドレス空間内の仮想マシン・カーネルを再配置するための方法を示す流れ図である。
【図５】
本発明の一実施形態に従って、ゲスト特権を奪うことをサポートする仮想マシン・カーネルのオペレーションを示す図である。
【図６】
本発明の一実施形態に従って、ゲスト・オペレーティング・システムによって生成された仮想化トラップを扱うための方法を示す流れ図である。
【図７】
処理システムの一実施形態を示すブロック図である。
【図１】
2004526229.tif 000003
【図２】
2004526229.tif 000004
【図３】
2004526229.tif 000005
【図４】
2004526229.tif 000006
【図５】
2004526229.tif 000007
【図６】
2004526229.tif 000008
【図７】
2004526229.tif 000009
【国際公開パンフレット】
2004526229.tif 000010
2004526229.tif 000011
2004526229.tif 000012
2004526229.tif 000013
2004526229.tif 000014
2004526229.tif 000015
2004526229.tif 000016
2004526229.tif 000017
2004526229.tif 000018
2004526229.tif 000019
2004526229.tif 000020
2004526229.tif 000021
2004526229.tif 000022
2004526229.tif 000023
2004526229.tif 000024
2004526229.tif 000025
2004526229.tif 000026
2004526229.tif 000027
2004526229.tif 000028
2004526229.tif 000029
2004526229.tif 000030
2004526229.tif 000031
2004526229.tif 000032
2004526229.tif 000033
2004526229.tif 000034
2004526229.tif 000035
2004526229.tif 000036
2004526229.tif 000037
2004526229.tif 000038
2004526229.tif 000039
2004526229.tif 000040
2004526229.tif 000041
2004526229.tif 000042
【国際調査報告】
2004526229.tif 000043
2004526229.tif 000044
2004526229.tif 000045