(57)【要約】【課題】  ｘ８６−６４アーキテクチャにおいてロングスーパーモードとレガシスーパーモードの間で、リアルタイムで遷移を行うための仮想化されたコンピューティングシステムおよび方法を提供する。【解決手段】  一時的プロセッサモードコンテキスト切り替えを実行するために、仮想マシンモニタが、「仮想＝現実」ページをセットアップするステップと、そのページ上にプロセッサモードコンテキスト切り替えを実行するための遷移コードを置くステップと、そのページにジャンプするステップと、ｘ８６−６４コンピュータハードウェアのＭＭＵ（メモリ管理ユニット）を無効にするステップと、モード制御レジスタを変更して、ロングスーパーモードビットまたはレガシスーパーモードビットに設定するステップと、新たなページテーブルを読み込むステップと、ｘ８６−６４コンピュータハードウェアのＭＭＵを再アクチベートするステップとを実行する。【選択図】図５
2006018819.tif 000002
【特許請求の範囲】
【請求項１】
マルチモードアーキテクチャコンピュータシステム（「コンピュータシステム」）において第１のモードと第２のモードの間で一時的プロセッサモードコンテキスト切り替えを実行するための方法であって、
「仮想＝現実」ページ（「切り替えページ」）を確立するステップであって、前記ページに対して使用される仮想アドレスは、前記ページの現実のメモリアドレスでもあるステップと、
プロセッサモードコンテキスト切り替えを実行するための遷移コードのセットを前記切り替えページにコピーするステップと、
継続した実行のために前記切り替えページにジャンプするステップと、
前記コンピュータシステムのＭＭＵ（メモリ管理ユニット）を無効にするステップと、
モード制御レジスタを変更して、コンテキストビットを前記第１のモードから前記第２のモードに設定するステップと、
前記第２のモードに関する新たなページテーブルを読み込むステップと、
前記コンピュータシステムの前記ＭＭＵを再アクチベートするステップと
を含むことを特徴とする方法。
【請求項２】
前記方法の少なくとも１つのステップは、仮想マシンモニタによって実行されることを特徴とする請求項１に記載の方法。
【請求項３】
前記方法は仮想マシンモニタによって実行されることを特徴とする請求項１に記載の方法。
【請求項４】
前記第１のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第２のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードであることを特徴とする請求項１に記載の方法。
【請求項５】
前記第２のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第１のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードであることを特徴とする請求項１に記載の方法。
【請求項６】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットリング０コードを実行するのに使用されることを特徴とする請求項１に記載の方法。
【請求項７】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットｖ８６モードコードを実行するのに使用されることを特徴とする請求項１に記載の方法。
【請求項８】
マルチモードアーキテクチャコンピュータシステム（「コンピュータシステム」）において第１のモードと第２のモードの間で一時的プロセッサモードコンテキスト切り替えを実行するためのシステムであって、
「仮想＝現実」ページ（「切り替えページ」）を確立するためのサブシステムであって、
前記ページに対して使用される仮想アドレスは、前記ページの現実のメモリアドレスでもあるサブシステムと、
プロセッサモードコンテキスト切り替えを実行するための遷移コードのセットを前記切り替えページにコピーするためのサブシステムと、
継続した実行のために前記切り替えページにジャンプするためのサブシステムと、
前記コンピュータシステムのＭＭＵ（メモリ管理ユニット）を無効にするためのサブシステムと、
モード制御レジスタを変更して、コンテキストビットを前記第１のモードから前記第２のモードに設定するためのサブシステムと、
前記第２のモードに関する新たなページテーブルを読み込むためのサブシステムと、
前記コンピュータシステムの前記ＭＭＵを再アクチベートするためのサブシステムと
を含むことを特徴とするシステム。
【請求項９】
前記システムは仮想マシンモニタを含むことを特徴とする請求項８に記載のシステム。
【請求項１０】
仮想マシンモニタのためのサブシステムであることを特徴とする請求項８に記載のシステム。
【請求項１１】
前記第１のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第２のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードであることを特徴とする請求項８に記載のシステム。
【請求項１２】
前記第２のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第１のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードであることを特徴とする請求項８に記載のシステム。
【請求項１３】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットリング０コードを実行するのに使用されることを特徴とする請求項８に記載のシステム。
【請求項１４】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットｖ８６モードコードを実行するのに使用されることを特徴とする請求項８に記載のシステム。
【請求項１５】
マルチモードアーキテクチャコンピュータシステム（「コンピュータシステム」）において第１のモードと第２のモードの間で一時的プロセッサモードコンテキスト切り替えを実行するためのコンピュータ可読命令であって、「仮想＝現実」ページ（「切り替えページ」）を確立するための命令であって、前記ページに対して使用される仮想アドレスは、前記ページの現実のメモリアドレスでもある命令と、
プロセッサモードコンテキスト切り替えを実行するための遷移コードのセットを前記切り替えページにコピーするための命令と、
継続した実行のために前記切り替えページにジャンプするための命令と、
前記コンピュータシステムのＭＭＵ（メモリ管理ユニット）を無効にするための命令と、
モード制御レジスタを変更して、コンテキストビットを前記第１のモードから前記第２のモードに設定するための命令と、
前記第２のモードに関する新たなページテーブルを読み込むための命令と、
前記コンピュータシステムの前記ＭＭＵを再アクチベートするための命令と
を含むことを特徴とするコンピュータ可読媒体。
【請求項１６】
前記方法の少なくとも１つのステップが仮想マシンモニタによって実行される命令をさらに含むことを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記方法が仮想マシンモニタによって実行される命令をさらに含むことを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１８】
前記第１のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第２のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードである命令をさらに含むことを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項１９】
前記第２のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第１のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードである命令をさらに含むことを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項２０】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットリング０コードを実行するのに前記方法が使用される命令をさらに含むことを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項２１】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットｖ８６モードコードを実行するのに前記方法が使用される命令をさらに含むことを特徴とする請求項１５に記載のコンピュータ可読媒体。
【請求項２２】
マルチモードアーキテクチャコンピュータシステム（「コンピュータシステム」）において第１のモードと第２のモードの間で一時的プロセッサモードコンテキスト切り替えを実行するためのハードウェア制御デバイスであって、
「仮想＝現実」ページ（「切り替えページ」）を確立するための手段であって、前記ページに対して使用される仮想アドレスは、前記ページの現実のメモリアドレスでもある手段と、
プロセッサモードコンテキスト切り替えを実行するための遷移コードのセットを前記切り替えページにコピーするための手段と、
継続した実行のために前記切り替えページにジャンプするための手段と、
前記コンピュータシステムのＭＭＵ（メモリ管理ユニット）を無効にするための手段と、
モード制御レジスタを変更して、コンテキストビットを前記第１のモードから前記第２のモードに設定するための手段と、
前記第２のモードに関する新たなページテーブルを読み込むための手段と、
前記コンピュータシステムの前記ＭＭＵを再アクチベートするための手段と
を含むことを特徴とするハードウェア制御デバイス。
【請求項２３】
前記方法の少なくとも１つのステップが仮想マシンモニタによって実行される手段をさらに含むことを特徴とする請求項２２に記載のハードウェア制御デバイス。
【請求項２４】
前記方法が仮想マシンモニタによって実行される手段をさらに含むことを特徴とする請求項２２に記載のハードウェア制御デバイス。
【請求項２５】
前記第１のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第２のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードである手段をさらに含むことを特徴とする請求項２２に記載のハードウェア制御デバイス。
【請求項２６】
前記第２のモードは、ｘ８６−６４アーキテクチャプロセッサに関するロングモードであり、前記第１のモードは、前記ｘ８６−６４アーキテクチャプロセッサに関するレガシモードである手段をさらに含むことを特徴とする請求項２２に記載のハードウェア制御デバイス。
【請求項２７】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットリング０コードを実行するのに前記方法が使用される手段をさらに含むことを特徴とする請求項２２に記載のハードウェア制御デバイス。
【請求項２８】
ｘ８６−６４アーキテクチャプロセッサ上でレガシモードで３２ビットｖ８６モードコードを実行するのに前記方法が使用される手段をさらに含むことを特徴とする請求項２２に記載のハードウェア制御デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、仮想マシン（「プロセッサ仮想化」としても知られる）、および仮想マシン環境において実行されるソフトウェアの分野に関する。より具体的には、本発明は、６４ビットのホストオペレーティングシステムのプロセッサモードとは異なるプロセッサモードでレガシ３２ビット仮想マシンを実行する方法に直接に関連する。
【背景技術】
【０００２】
コンピュータは、特定のシステム命令セットを実行するように設計されたＣＰＵ群（汎用中央処理装置群）を含む。類似したアーキテクチャまたは設計仕様を有する一群のプロセッサは、同一のプロセッサファミリのメンバであると見なすことができる。現在のプロセッサファミリの例には、アリゾナ州フェニックス所在のモトローラ株式会社によって製造されるＭｏｔｏｒｏｌａ  ６８０Ｘ０、カリフォルニア州サニーベールのインテル株式会社によって製造されるＩｎｔｅｌ  ８０Ｘ８６プロセッサファミリ、およびモトローラ株式会社によって製造され、カリフォルニア州キューパーティーノ所在のアップルコンピュータ株式会社によって製造されるコンピュータにおいて使用されるＰｏｗｅｒＰＣプロセッサファミリが含まれる。一群のプロセッサは、類似したアーキテクチャおよび設計上の配慮（ｄｅｓｉｇｎ  ｃｏｎｓｉｄｅｒａｔｉｏｎｓ）のために同一ファミリに入っている可能性があるが、プロセッサは、プロセッサのクロック速度、およびその他の性能パラメータに従ってファミリ内で大きく異なる可能性がある。
【０００３】
各ファミリのマイクロプロセッサは、そのプロセッサファミリに固有である命令群を実行する。プロセッサ、またはプロセッサのファミリが実行することができる全体的な命令セットが、プロセッサの命令セットとして知られる。例として、Ｉｎｔｅｌ  ８０Ｘ８６プロセッサファミリによって使用される命令セットは、ＰｏｗｅｒＰＣプロセッサファミリによって使用される命令セットと互換性がない。Ｉｎｔｅｌ  ８０Ｘ８６命令セットは、ＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）フォーマットに基づく。Ｍｏｔｏｒｏｌａ  ＰｏｗｅｒＰＣ命令セットは、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）フォーマットに基づく。ＣＩＳＣプロセッサ群は、一部はかなり複雑な機能を実行することができるが、実行するのに多くのクロックサイクルを一般に要する、多数の命令を使用する。ＲＩＳＣプロセッサ群は、より少数の利用可能な命令を使用して、はるかに高速で実行されるより単純な機能セットを実行する。
【０００４】
コンピュータシステム間におけるプロセッサファミリの固有性は、通常、コンピュータシステムのハードウェアアーキテクチャのその他の要素間における非互換性ももたらす。Ｉｎｔｅｌ  ８０Ｘ８６プロセッサファミリからのプロセッサを使用して製造されたコンピュータシステムは、ＰｏｗｅｒＰＣプロセッサファミリからのプロセッサを使用して製造されたコンピュータシステムのハードウェアアーキテクチャとは異なるハードウェアアーキテクチャを有する。プロセッサ命令セットおよびコンピュータシステムのハードウェアアーキテクチャの固有性のため、アプリケーションソフトウェアプログラム群は、通常、特定のオペレーティングシステムを実行する特定のコンピュータシステム上で実行されるように書かれる。
【０００５】
コンピュータ製造業者は、コンピュータ製造業者の製品系列に関連するマイクロプロセッサファミリ上で、より少ないアプリケーションではなく、より多くのアプリケーションを実行させることにより、自らの市場占有率を最大化することを望む。コンピュータシステム上で実行することができるオペレーティングシステムおよびアプリケーションプログラムの数を拡張するため、ホストと呼ばれるあるタイプのＣＰＵを有する所与のコンピュータが、ゲストと呼ばれる関連のないタイプのＣＰＵの命令をホストコンピュータがエミュレートすることを可能にするエミュレータプログラムを含むようにする技術分野が開発されている。このため、ホストコンピュータは、所与のゲスト命令に応答して１つまたは複数のホスト命令が呼び出されるようにするアプリケーションを実行する。このため、ホストコンピュータは、ホストコンピュータ独自のハードウェアアーキテクチャ向けに設計されたソフトウェアと、関連のないハードウェアアーキテクチャを有するコンピュータ向けに書かれたソフトウェアをともに実行することができる。より具体的な例として、例えば、アップルコンピュータによって製造されたコンピュータシステムは、ＰＣベースのコンピュータシステム向けに書かれたオペレーティングシステム群およびプログラムを実行することができる。また、エミュレータプログラムを使用して、単一のＣＰＵ上で互換性のないオペレーティングシステム群を同時に動作させることもできる可能性がある。この構成では、各オペレーティングシステムは、他方のオペレーティングシステムと互換性がないが、エミュレータプログラムが、２つのオペレーティングシステムの１つをホストし、そうでなければ互換性のないオペレーティングシステム群が、同一コンピュータシステム上で同時に実行されることを可能にすることができる。
【０００６】
ゲストコンピュータシステムがホストコンピュータシステム上でエミュレートされる場合、ゲストコンピュータシステムは、仮想マシンであると言われる。というのは、ホストコンピュータシステムは、ゲストコンピュータシステムのハードウェアアーキテクチャの動作のソフトウェア表現としてだけ存在するからである。エミュレータ、仮想マシン、およびプロセッサエミュレーションという用語は、ときとして、互いに区別なく使用されて、コンピュータシステム全体のハードウェアアーキテクチャを模倣する、つまりエミュレートする能力を表す。例として、カリフォルニア州サンマテオ所在のコネクティクス（Ｃｏｎｎｅｃｔｉｘ）株式会社によって作成されたＶｉｒｔｕａｌ  ＰＣソフトウェアは、Ｉｎｔｅｌ  ８０Ｘ８６  Ｐｅｎｔｉｕｍ（登録商標）プロセッサ、および様々なマザーボードコンポーネントおよびカードを含むコンピュータ全体をエミュレートする。それらのコンポーネントの動作は、ホストマシン上で実行される仮想マシンにおいてエミュレートされる。ＰｏｗｅｒＰＣプロセッサを有するコンピュータシステムなどのホストコンピュータのオペレーティングシステムソフトウェア上、およびハードウェアアーキテクチャ上で実行されるエミュレータプログラムが、ゲストコンピュータシステム全体の動作を模倣する。
【０００７】
エミュレータプログラムは、ホストマシンのハードウェアアーキテクチャと、エミュレートされる環境内で実行されるソフトウェアによって伝送される命令の間のやりとりとして作用する。このエミュレータプログラムは、物理的なコンピュータハードウェア上で直接に実行されるオペレーティングシステムである、ＨＯＳ（ホストオペレーティングシステム）であることが可能である。代替として、エミュレートされる環境も、ハードウェアの上で直接に実行され、ＶＭＭ（仮想マシンモニタ）が仮想化しているハードウェアと同一であるインターフェース群を公開することにより、マシンのすべてのリソースを仮想化するソフトウェアレイヤである、ＶＭＭであることも可能である（これにより、ＶＭＭが、ＶＭＭの上で実行されているオペレーティングシステムレイヤ群に気付かれないことが可能になる）。ホストオペレーティングシステムとＶＭＭは、同一の物理的ハードウェア上で並行に実行されることが可能である。
【０００８】
インテル株式会社（カリフォルニア州サンタクララ所在）によるｘ８６アーキテクチャの開発の進化は、１６ビットプロセッサ（ｘ８６−１６）で始まり、次に３２ビットプロセッサ（ｘ８２−３２）に拡張され、現在、６４ビットプロセッサ（ｘ８６−６４）に拡張されている。ｘ８６−６４アーキテクチャの一般名で知られている６４ビットｘ８６アーキテクチャは、インテルによってだけでなく、カリフォルニア州サニーベール所在のＡＭＤ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ）社によっても開発されている。例えば、ＡＭＤ６４ビット製品は、ＡＭＤ６４という商品名で知られている。しかし、以下の説明の６４ビットｘ８６アーキテクチャと、ＩＡ６４として知られる、ヒューレットパッカード（カリフォルニア州パロアルト所在）社およびインテル社によって共同で開発された別の６４ビット製品は、区別される。ＩＡ６４は、Ｉｔａｎｉｕｍ（登録商標）プロセッサ群において実装される６４ビット命令セットアーキテクチャを有する。一般に、ＩＡ６４アーキテクチャは、下位互換性をまったく有さず、このため、ｘ８６アーキテクチャのソフトウェアは、異なる命令セットのためにＩＡ６４アーキテクチャ上で実行されない。したがって、６４ビットアーキテクチャの本明細書における説明は、ＩＡ６４アーキテクチャについてではなく、ｘ８６−６４アーキテクチャだけに限って述べる。
【０００９】
３２ビットのレガシＯＳ向けに書かれた仮想マシンが、６４ビットＯＳ上で実行されることを可能にする下位互換性を提供することは、ソフトウェア製造業者には、重要である。というのは、下位互換性により、新たな３２ビット製品群を商品化するまでの期間を短縮化することが可能になり、レガシ３２ビットアプリケーション群の使用が延長されるからである。ｘ８６−６４アーキテクチャは、以下に概説する、従来の３２ビットｘ８６アーキテクチャの動作モードを含む、いくつかの異なる動作モードをサポートする。
【００１０】
【表１】
2006018819.tif 000003
【００１１】
（注：本明細書で使用する「モード」、「サブモード」、および「スーパーモード」という用語は、異なるアーキテクチャの異なるモードレイヤをよりよく区別するために使用するが、当業者には周知であり、容易に理解されるとおり、これらのバリエーションのすべては、相対的構造にかかわらず、単に「モード」と呼ばれることが非常に多い。）
【００１２】
一般に、リアルモードは、１度に１つのプログラムだけの実行しか許さない動作モードである。リアルモードでは、プログラム群は、１０２４Ｋだけのメモリにしかアクセスすることができず、１６ビットデータパスを使用する。プロテクトモードは、仮想メモリおよびマルチタスキング（一度に複数のプログラムを実行すること）のサポートを提供する。プロテクトモードのプログラム群は、１０２４Ｋを超えるアドレスにアクセスすることができ、３２ビットデータパスを使用することができる。リアルモードは、各プログラムが、実行されるのに全メモリを必要とし、同時に別のアプリケーションの実行を許さない、プロテクトモードの原型となったモード（ｐｒｅｃｕｒｓｏｒ）である。プロテクトモードは、リング０サブモード、リング１サブモード、リング２サブモード、リング３サブモード、およびＶ８６サブモード（仮想８０８６）をさらに含む。（一般に、リング１サブモードおよびリング２サブモードは、現在のアプリケーション群によっては使用されない。）
【００１３】
リング０サブモードは、Ｉｎｔｅｌ  ８０２８６プロテクトモードアーキテクチャを参照する。リング０サブモードは、最も特権の多い（ｍｏｓｔ  ｐｒｉｖｉｌｅｇｅｄ）レベルであり、すべてのシステムリソースへのアクセスを有する。リング０サブモードは、ＯＳ、およびＯＳのドライバ群によって使用され、高い信頼レベルを有する最も特権の多いコードである。リング３サブモードも、Ｉｎｔｅｌ  ８０２８６プロテクトモードアーキテクチャを参照する。リング３サブモードは、低い信頼レベルを有し、すべてのユーザアプリケーションによって使用されるコードに関して使用される最も特権の少ない（ｌｅａｓｔ  ｐｒｉｖｉｌｅｇｅｄ）レベルである。Ｖ８６サブモードは、Ｉｎｔｅｌ  ８０３８６プロテクトモードアーキテクチャを参照し、ＣＰＵが、８０８６リアルモードアドレス指定をエミュレートするが、ページングおよび一部のアクセス制限のサポートを維持するサブモードである。
【００１４】
これに対して、ｘ８６−６４アーキテクチャは、以下に概説する２つの主要なスーパーモード、すなわち、レガシスーパーモードおよびロング（ＬＯＮＧ）スーパーモードをサポートする。
【００１５】
【表２】
2006018819.tif 000004
【００１６】
ｘ８６−６４アーキテクチャのレガシスーパーモードは、従来の３２ビットｘ８６アーキテクチャのすべてのモードおよびサブモード、すなわち、リアルモード、プロテクトモードなどを含む。さらに、ｘ８６−６４アーキテクチャのロングスーパーモードは、ネイティブロングモードおよび互換モードを含む。ネイティブロングモードは、６４ビットリング０コードを実行することを可能にする。互換モードは、３２ビットリング３アプリケーション群が、６４ビットネイティブロングモードを実行しているＯＳの上で実行されること、すなわち、混合環境を可能にする。したがって、３２ビットアプリケーションは、６４ビットアプリケーションが、ネイティブロングモードで同時に実行されながら、互換モードを実行することができる。
【００１７】
しかし、ｘ８６−６４アーキテクチャの互換モードは、リング３サブモードだけしかサポートしないという点で問題が存在する。互換モードは、Ｖ８６サブモードまたはリング０サブモードをサポートせず、これらの少なくともどちらか（場合によっては、両方）が、３２ビットハードウェア環境を完全に、シームレスにエミュレート／仮想化するのに、３２ビットＶＭ（仮想マシン）に必須である。したがって、必要とされているのは、従来の３２ビットモード群、すなわち、リアルモードおよびプロテクトモード（Ｖ８６サブモード、リング０サブモード、およびリング３サブモード）に依拠する仮想マシン群が、６４ビットプロセッサ上の他のアプリケーション群と並行に実行されるが、それでも、リング０コードを実行することができるとともに、Ｖ８６サブモードの諸機能（ｆｅａｔｕｒｅｓ）にアクセスすることができる方法である。
【発明の開示】
【発明が解決しようとする課題】
【００１８】
１つの問題解決法は、ｘ８６−６４アーキテクチャで動作している仮想マシン環境が、ロングスーパーモードとレガシスーパーモードの間で自由に行き来するように遷移し、例えば、６４ビットプロセッサ上で、３２ビットＯＳを実行しているゲストと６４ビットＯＳを実行しているホストの間で行き来するように遷移できることである。しかし、例えば、ＡＭＤ６４マシンの実施形態は、ロングスーパーモードとレガシスーパーモードの間を行き来する遷移を予期していない。代わりに、ＡＭＤ６４マシンの実施形態は、マシンが、レガシスーパーモードで始動し、ＯＳが読み込まれると、ロングスーパーモードへの単一回の遷移を行い、レガシスーパーモードに決して戻らないことを前提としている。必要とされているのは、ｘ８６−６４アーキテクチャにおいてロングスーパーモードとレガシスーパーモードの間で行き来するように切り替えを行う方法である。
【課題を解決するための手段】
【００１９】
本発明は、ｘ８６−６４アーキテクチャにおいてネイティブロングモードとレガシプロテクトモードの間においてリアルタイムで切り替えを行う、すなわち、「プロセッサモードコンテキスト切り替え」ためのシステム、および方法を提供する。この目的で、本発明の様々な実施形態は、ｘ８６−６４アーキテクチャにおいてロングスーパーモードとレガシスーパーモードの間で行き来するように遷移するための機構を介して、６４ビットｘ８６プロセッサ上で、従来の３２ビットモード群、すなわち、リアルモードおよびプロテクトモード（Ｖ８６サブモード、リング０サブモード、およびリング３サブモード）に依拠するレガシ３２ビットｘ８６仮想マシンを実行するためのシステムおよび方法を対象とする。
【００２０】
本発明の一部の実施形態は、ｘ８６−６４アーキテクチャにおいてロングスーパーモードとレガシスーパーモードの間で遷移するための仮想化されたコンピューティングシステムを対象とする。これを行うことで、仮想マシンは、ｘ８６−６４コンピュータハードウェア（すなわち、６４ビット）上で、他のアプリケーション群と並行に実行されることが可能である。一時的プロセッサモードコンテキスト切り替えを実行する方法は、（ａ）「仮想＝現実」ページ（「切り替えページ」）をセットアップするステップと、（ｂ）そのページ上にプロセッサモードコンテキスト切り替えを実行するための遷移コードを置くステップと、（ｃ）そのページにジャンプするステップと、（ｄ）ｘ８６−６４コンピュータハードウェアのＭＭＵ（メモリ管理ユニット）を無効にするステップと、（ｅ）モード制御レジスタを変更して、ロングスーパーモードビットまたはレガシスーパーモードビットに設定するステップと、（ｆ）新たなページテーブルを読み込むステップと、（ｇ）ｘ８６−６４コンピュータハードウェアのＭＭＵを再アクチベートするステップとを含み、「一時的」とは、例えば、初期化の時点からシャットダウンの時点までのコンピュータシステムの動作中に、ロングスーパーモードで実行されているシステムが、レガシスーパーモードに遷移し、その後、最終的にはロングスーパーモード（または他の何らかのモード）に遷移して戻り、説明する方法をそれぞれが利用する，少なくとも２つのモード遷移を完了することが見込まれるという意味においてである。本発明のいくつかの実施形態の場合、以上のステップの１つまたは複数は、ＶＭＭによって実行され、一部の実施形態の場合、７つすべてのステップが、ＶＭＭによって実行される。
【００２１】
以上の概要、および好ましい諸実施形態の以下の詳細な説明は、添付の図面と併せて読むことで、よりよく理解される。本発明を例示する目的で、図面には、本発明の典型的な構成が示されているが、本発明は、開示する特定の方法および手段（ｉｎｓｔｒｕｍｅｎｔａｌｉｔｉｅｓ）に限定されない。
【発明を実施するための最良の形態】
【００２２】
本発明の対象物を、法的要件を満たすように具体的に説明する。ただし、説明自体は、本特許の範囲を限定するものではない。むしろ、本発明者は、請求の対象物が他の形で実施されて、他の現在の技術、または将来の技術と連携して、本明細書で説明するステップと異なるステップ、または類似するステップの組合せを含むことも可能であることを企図している。さらに、「ステップ」という用語は、使用する方法の異なる要素を表すように本明細書で使用される可能性があるが、個々のステップの順序を明示的に説明しない限り、またそうする場合を除き、この用語が、本明細書で開示する様々なステップの間における特定の順序を暗示しているものと解釈してはならない。
【００２３】
コンピュータ環境
本発明の多数の実施形態が、コンピュータ上で実行されることが可能である。図１、および以下の説明は、本発明を実施することができる適切なコンピューティング環境の簡単な一般的説明を提供することを目的とする。必須ではないが、本発明は、クライアントワークステーションまたはサーバなどのコンピュータによって実行される、プログラムモジュールなどの、コンピュータ実行可能命令の一般的な文脈で説明する。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらに、本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電化製品またはプログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含む、他のコンピュータシステム構成を使用して実施してもよいことが当業者には認められよう。また、本発明は、通信網を介してリンクされたリモート処理装置によってタスクが実行される分散コンピューティング環境において実施してもよい。分散コンピューティング環境では、プログラムモジュール群は、ローカルメモリ記憶装置とリモートメモリ記憶装置の両方の中に配置することができる。
【００２４】
図１に示すとおり、典型的な汎用コンピューティングシステムは、処理装置２１、システムメモリ２２、ならびにシステムメモリから処理装置２１までを含む様々なシステムコンポーネントを結合するシステムバス２３を含む、慣用のパーソナルコンピュータ２０などを含む。システムバス２３は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含め、いくつかのタイプのバス構造のいずれであることも可能である。システムメモリは、ＲＯＭ（読み取り専用メモリ）２４およびＲＡＭ（ランダムアクセスメモリ）２５を含む。始動中などにパーソナルコンピュータ２０内部の要素間で情報を転送するのを助ける基本ルーチンを含むＢＩＯＳ（基本入出力システム）２６が、ＲＯＭ２４の中に格納される。パーソナルコンピュータ２０は、図示していないハードディスクに対して読み取りおよび書き込みを行うためのハードディスクドライブ２７、リムーバブルな磁気ディスク２９に対して読み取りまたは書き込みを行うための磁気ディスクドライブ２８、およびＣＤ−ＲＯＭまたは他の光媒体などのリムーバブルな光ディスク３１に対して読み取りまたは書き込みを行うための光ディスクドライブ３０をさらに含むことが可能である。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、それぞれ、ハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３、および光ドライブインターフェース３４でシステムバス２３に接続される。以上のドライブ、および関連するコンピュータ可読媒体により、コンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性ストレージがパーソナルコンピュータ２０に提供される。本明細書で説明する典型的な環境は、ハードディスク、リムーバブルな磁気ディスク２９、およびリムーバブルな光ディスク３１を使用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ＲＡＭ（ランダムアクセスメモリ）、ＲＯＭ（読み取り専用メモリ）などの、データを格納することができ、コンピュータがアクセス可能な他のタイプのコンピュータ可読媒体も、典型的な動作環境において使用できることが当業者には認められよう。
【００２５】
オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、その他のプログラムモジュール群３７、およびプログラムデータ３８を含め、いくつかのプログラムモジュールが、ハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５に格納されることが可能である。ユーザは、キーボード４０やポインティングデバイス４２などの入力デバイス群を介して、コマンドおよび情報をパーソナルコンピュータ２０に入力することができる。その他の入力デバイス群（図示せず）には、マイク、ジョイスティック、ゲームパッド、サテライトディスク、スキャナなどが含まれることが可能である。以上、およびその他の入力デバイス群は、しばしば、システムバスに結合されたシリアルポートインターフェース４６を介して処理装置２１に接続されるが、パラレルポート、ゲームポート、またはＵＳＢ（ユニバーサルシリアルバス）などの他のインターフェース群で接続してもよい。モニタ４７、またはその他のディスプレイデバイスも、ビデオアダプタ４８などのインターフェースを介してシステムバス２３に接続される。モニタ４７に加え、パーソナルコンピュータは、通常、スピーカやプリンタなどの他の周辺出力デバイス（図示せず）も含む。図１の典型的なシステムは、ホストアダプタ５５、ＳＣＳＩ（スモールコンピュータシステムインターフェース）バス５６、ならびにＳＣＳＩバス５６に接続された外部記憶装置６２も含む。
【００２６】
パーソナルコンピュータ２０は、リモートコンピュータ４９のような１つまたは複数のリモートコンピュータに対する論理接続を使用するネットワーク化された環境において動作することができる。リモートコンピュータ４９は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであることが可能であり、通常、パーソナルコンピュータ２０に関連して前述した諸要素の多く、またはすべてを含むが、メモリ記憶装置５０だけを図１に示す。図１に示す論理接続は、ＬＡＮ（ローカルエリアネットワーク）５１およびＷＡＮ（ワイドエリアネットワーク）５２を含む。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
【００２７】
ＬＡＮネットワーキング環境で使用される場合、パーソナルコンピュータ２０は、ネットワークインターフェースまたはネットワークアダプタ５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーキング環境で使用される場合、パーソナルコンピュータ２０は、通常、インターネットなどのワイドエリアネットワーク５２を介して通信を確立するためのモデム５４、または他の手段を含む。内部にあることも、外部にあることも可能なモデム５４は、シリアルポートインターフェース４６を介してシステムバス２３に接続される。ネットワーク化された環境では、パーソナルコンピュータ２０に関連して示したプログラムモジュール群、またはプログラムモジュール群の諸部分は、リモートメモリ記憶装置の中に格納することができる。図示したネットワーク接続は、典型的であり、コンピュータ間で通信リンクを確立する他の手段も使用できることが認められよう。さらに、本発明の多数の実施形態は、コンピュータ化されたシステムに特によく適していることが構想されているが、本発明をそのような諸実施形態に限定することを意図するものはまったく本明細書に存在しない。
【００２８】
仮想マシン
概念的に見ると、コンピュータシステムは、一般に、基礎的なハードウェアレイヤ上で実行される１つまたは複数のソフトウェアレイヤを含む。この階層化（ｌａｙｅｒｉｎｇ）は、抽象化のために行われる。所与のソフトウェアレイヤに関するインターフェースを定義することにより、そのレイヤより上位の他のレイヤ群とは異なる形でそのレイヤが実施されることが可能である。うまく設計されたコンピュータシステムでは、各レイヤは、そのレイヤの１つ下のレイヤについてだけ知っている（またそのようなレイヤだけに依拠する）。これにより、レイヤ、または「スタック」（複数の隣接するレイヤ）を、前記レイヤまたは前記スタックより上位のレイヤ群に悪影響を与えることなしに、置き換えることが可能になる。例えば、ソフトウェアアプリケーション群（上位レイヤ群）は、通常、オペレーティングシステムの下位レベル（下位レイヤ）に依拠して、何らかの形態の永久ストレージにファイルを書き込み、これらのアプリケーションは、フロッピー（登録商標）ディスク、ハードドライブ、またはネットワークフォルダにデータを書き込むことの間の違いを理解する必要がない。その下位レイヤが、ファイルを書き込むための新たなオペレーティングシステムコンポーネント群で置き換えられた場合、上位レイヤのソフトウェアアプリケーション群の動作は、影響を受けないままである。
【００２９】
階層化されたソフトウェアの柔軟性により、ＶＭ（仮想マシン）が、実際には別のソフトウェアレイヤである仮想ハードウェアレイヤを提示することが可能になる。このようにして、ＶＭは、ＶＭより上位のソフトウェアレイヤ群に、前記ソフトウェアレイヤ群が独自の専用コンピュータシステム上で実行されているという錯覚をもたらすことができ、このため、ＶＭは、複数の「ゲストシステム」が単一の「ホストシステム」上で同時に実行されることを可能にすることができる。
【００３０】
図２は、コンピュータシステムにおけるエミュレートされた動作環境に関するハードウェアおよびソフトウェアのアーキテクチャの論理的な階層化を示す図である。エミュレーションプログラム９４が、ホストオペレーティングシステムおよび／またはハードウェアアーキテクチャ９２上で実行される。エミュレーションプログラム９４は、ゲストハードウェアアーキテクチャ９６およびゲストオペレーティングシステム９８をエミュレートする。ソフトウェアアプリケーション１００が、ゲストオペレーティングシステム９８上で実行される。図２のエミュレートされた動作環境では、エミュレーションプログラム９４が動作しているため、ソフトウェアアプリケーション１００は、ホストオペレーティングシステムおよびハードウェアアーキテクチャ９２と全体的に互換性のないオペレーティングシステム上で実行されるように設計されているものの、コンピュータシステム９０上で実行されることが可能である。
【００３１】
図３Ａは、物理的コンピュータハードウェア１０２のすぐ上で実行されるホストオペレーティングシステムソフトウェアレイヤ１０４を含む、仮想化されたコンピューティングシステムを示し、ホストＯＳ（ホストオペレーティングシステム）１０４は、ホストＯＳが仮想化しているハードウェアと同一であるインターフェース群を公開することにより、マシンのすべてのリソースを仮想化する（これにより、ホストＯＳが、ホストＯＳ上で実行されているオペレーティングシステムレイヤ群に気付かれないことが可能になる）。
【００３２】
代替として、仮想マシンモニタソフトウェアレイヤ、つまりＶＭＭソフトウェアレイヤ１０４’が、ホストＯＳ１０４”の代わりに、または並行に実行されていることも可能であり、並行に実行されているオプションを図３Ｂに示す。簡明にするため、以降のすべての説明（具体的には、ホストオペレーティングシステム１０４に関する）は、図３Ａに示した実施形態を対象とするが、そのような説明のすべての態様は、図３ＢのＶＭＭ１０４’が、以下に説明する図３Ａのホストオペレーティングシステム１０４の役割に、機能レベルで基本的に取って代わる、図３Ｂの実施形態にも同様に適用されることになる。
【００３３】
図３Ａを再び参照すると、ホストＯＳ１０４（またはＶＭＭ１０４’）の上には、例えば、仮想化されたＩｎｔｅｌ  ３８６プロセッサであることが可能なＶＭ  Ａ１０８、および、例えば、Ｍｏｔｏｒｏｌａ  ６８０Ｘ０ファミリのプロセッサの１つの仮想化されたバージョンであることが可能なＶＭ  Ｂ１１０という２つの仮想マシン（ＶＭ）実施形態が存在する。ＶＭ  Ａ１０８およびＶＭ  Ｂ１１０のそれぞれの上には、ゲストＯＳ（ゲストオペレーティングシステム）Ａ１１２およびＢ１１４がそれぞれ存在する。ゲストＯＳ  Ａ１１２の上では、アプリケーションＡ１  １１６およびアプリケーションＡ２  １１８という２つのアプリケーションが実行されており、ゲストＯＳ  Ｂ１１４の上には、アプリケーションＢ１  １２０が存在する。
【００３４】
ｘ８６−６４プロセッサ上で実行される仮想マシン群
図４は、ｘ８６−６４ホストオペレーティングシステムと並行に実行される仮想マシンモニタを含む、仮想化されたコンピューティングシステムの別の代替の実施形態を示す。図４の仮想化されたコンピューティングシステムは、ｘ８６ベースの６４ビットプロセッサ（図示せず）を含むｘ８６−６４コンピュータハードウェア１２４の上で実行される、ｘ８６−６４ベースのＯＳであるｘ８６−６４ホストＯＳ１２２を含むこと以外は、すべての点で図３Ｂのシステムと同一である。図４の仮想化されたコンピューティングシステムのＶＭＭ１０４’、ＶＭ  Ａ１０８、ＶＭ  Ｂ１１０、ゲストＯＳ  Ａ１１２、およびゲストＯＳ  Ｂ１１４は、ｘ８６−６４コンピュータハードウェア１２４上の仮想マシン環境において、レガシＯＳ群およびレガシアプリケーション群を実行するためにｘ８６−６４ホストＯＳ１２２と並行に実行される、３２ビットｘ８６仮想マシンを代表する。
【００３５】
ＶＭＭ１０４’を使用して、本発明は、ｘ８６−６４アーキテクチャにおいてロングスーパーモードとレガシスーパーモードの間においてリアルタイムで行き来するように切り替えを行う方法を提供する。これを行うことで、例えば、従来の３２ビットモード群、すなわち、リアルモードおよびプロテクトモード（Ｖ８６サブモード、リング０サブモード、およびリング３サブモード）に依拠するＶＭ  Ａ１０８が、ｘ８６−６４コンピュータハードウェア１２４の６４ビットプロセッサ上で他のアプリケーション群と並行して実行されることが可能である。
【００３６】
一般に、「コンテキスト切り替え」は、ホストＯＳにおけるサービス群を呼び出す必要があることをＶＭＭが認識することとして説明される。したがって、ＶＭＭは、一時的に制御をホストＯＳに引き渡し、ホストＯＳが、ホストＯＳのタスクを実行し、その後、ホストＯＳは、制御をＶＭＭに再び引き渡す。今日の３２ビットＶＭにおけるコンテキスト切り替えは、単に、状態をスワップアウトすることに関わる。しかし、本発明に従ってｘ８６の６４ビットプロセッサ上でレガシ３２ビットＶＭを実行するため、本発明のシステムおよび方法には、コンテキスト切り替え操作内でプロセッサモードを切り替えることが関わる。つまり、ロングスーパーモードのネイティブロングモードで実行されているホストＯＳが、レガシスーパーモードのプロテクトモードに（ロングスーパーモードの互換モードにではなく）切り替わり、ゲストＯＳを実行することである。この「プロセッサモードコンテキスト切り替え」操作は、図５を参照して説明するとおり、ＶＭＭ１０４’およびｘ８６−６４ホストＯＳ１２２によって達せられる。
【００３７】
図５は、ｘ８６の６４ビットプロセッサ上でレガシ３２ビット仮想マシンを実行するために一時的プロセッサモードコンテキスト切り替え操作をリアルタイムで実行するための方法１３０の流れ図を示す。ロングスーパーモード（６４ビットモード）またはレガシスーパーモード（３２ビットモード）で動作するｘ８６−６４システムにおいて、方法１３０は、この２つのスーパーモード間で遷移して、ロングスーパーモード単独では存在しない機能にアクセスする仕方を提供する。
【００３８】
一般に、方法１３０のステップは、ＶＭＭ１０４’が３２ビットモードで実行され、ｘ８６−６４ホストＯＳ１２２が、６４ビットモードで実行されながら、ＶＭＭ１０４’によって実行される。（注：特定のステップが、特定のｘ８６−６４プロセッサによって要求されるが、一般的なステップを以下に説明する。）
【００３９】
ステップ１３２で、ＶＭＭ１０４’が、「仮想＝現実」ページ（つまり、そのページに対して使用される仮想アドレス指定が、メモリ内の現実のメモリアドレスと同一であるページ）をセットアップし、次に、プロセッサモードコンテキスト切り替えを実行するための遷移コードをそのページにコピーし、次に、コード実行がそのページに「ジャンプ」して、コンテキスト切り替えを実行する。ステップ１３４で、制御レジスタ０（ＣＲ０）を使用して、ＶＭＭ１０４’が、ｘ８６−６４コンピュータハードウェア１２４の６４ビットプロセッサのＭＭＵを無効にする。ＭＭＵは、メインプロセッサによって要求されたメモリアクセスを扱うことを担うハードウェアデバイスである。これには、通常、仮想アドレスの物理アドレスへの変換、キャッシュ制御、バスアービトレーション（ａｒｂｉｔｒａｔｉｏｎ）、メモリ保護、および様々な例外の発生が関わる。ＭＭＵを無効にすることが要求されるのは、コードが、ＭＭＵによって定義されたアドレス空間内で実行されており、このため、ＭＭＵがオフにされた場合、次の命令で生じることは、アドレス変換が突然に変わっているために疑問の余地があるからである。したがって、次の命令を実行しようとする際、論理アドレスが物理アドレスと同一であるページ上でコードが実行されていることが確実にされない限り、誤った命令ストリームが処理される。したがって、これは、ステップ１３２で設定されるとおり、Ｖ＝Ｒマッピング（仮想＝現実マッピング）を要する。
【００４０】
ステップ１３６で、ＶＭＭ１０４’は、レガシスーパーモードビットおよびロングスーパーモードビットを含むモード制御レジスタ（異なるプロセッサアーキテクチャの場合、異なる可能性がある）を変更する。方法１３０’が、ロングスーパーモード（６４ビットモード）からレガシスーパーモード（３２ビットモード）への遷移を提供する場合、モード制御レジスタのロングスーパーモードビットが無効にされ、レガシスーパーモードビットが設定されて、ホストコンテキストからＶＭコンテキストへの遷移が実行される。方法１３０’が、レガシスーパーモード（３２ビットモード）からロングスーパーモード（６４ビットモード）への遷移を提供する場合、モード制御レジスタのレガシスーパーモードビットが無効にされ、ロングスーパーモードビットが設定されて、ＶＭコンテキストからホストコンテキストへの遷移が実行される。
【００４１】
ステップ１３８で、ＶＭＭ１０４’は、新たなモードの新たなページテーブルを読み込み、このテーブルは、仮想メモリシステム内のデータ構造であり、このデータ構造により、仮想アドレスと物理アドレスの間のマッピングを行うことが一般的である。（注：新たなページテーブルは、「仮想＝現実」ページ（前記ページに対して使用される仮想アドレスが、前記ページの現実のメモリアドレスである）と、コードが移されようとしているＶＭＭの仮想アドレスの間におけるマッピングを作成するために読み込まれる。）新しいページテーブルはまた新しいモードのフォーマット、すなわち異なる２つのモードのページテーブルのフォーマットを反映し、したがってさもなければ適応できない。ステップ１４０で、ＶＭＭ１０４’が、ｘ８６−６４コンピュータハードウェア１２４の６４ビットプロセッサのＭＭＵを再アクチベートし、方法は、終了する。
【００４２】
本明細書で使用する「一時的」という用語は、コンピュータシステムの実行中の何らかの時点で、少なくとも２回のモード遷移が行われることを単に暗示するに過ぎず、例えば、ロングスーパーモードで実行されているシステムが、レガシスーパーモードに遷移し、次に、少し後に、ロングスーパーモードに（またはまったく別のモードに）遷移して戻り、各行程が説明した方法を利用する少なくとも２回のモード遷移を完了させる場合である。さらに、「一時的」という用語は、一時的な特質（どれぐらいの時間であるか）を暗示することも、始まりのモードが終りのモードであることを暗示することもなく、やはり、実行中に少なくとも２回のモード遷移が行われることを暗示しているに過ぎない。この関連で、特定のモードに関する「一時的モード」という用語は、システム起動時における最初のモードではなく、システムシャットダウン時における最後のモードでもなかった、動作中の任意のモードを指す。
【００４３】
結論
本明細書で説明する様々なシステム、方法、および技術は、ハードウェアで、またはソフトウェアで、あるいは、適切な場合、ハードウェアとソフトウェアの組合せで実施することができる。このため、本発明の方法および装置、または方法および装置のいくつかの態様または部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、または他の任意のマシン可読記憶媒体などの実体のある媒体で実体化されたプログラムコード（すなわち、命令群）の形態をとることができ、プログラムコードは、コンピュータなどのマシンに読み込まれ、マシンによって実行されると、そのマシンが、本発明を実施するための装置になる。プログラマブルコンピュータ上のプログラムコード実行のケースでは、コンピュータは、一般に、プロセッサ、プロセッサが読み取り可能な記憶媒体（揮発性メモリおよび不揮発性メモリ、および／または記憶要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含む。１つまたは複数のプログラムが、好ましくは、高級手続き言語、またはオブジェクト指向プログラミング言語で実装されて、コンピュータシステムと通信する。ただし、プログラムは、所望される場合、アセンブリ言語または機械語で実装することもできる。いずれにしても、言語は、コンパイルされる言語、または解釈される言語であることが可能であり、ハードウェア実施形態と組み合わせられることが可能である。
【００４４】
本発明の方法および装置は、電気配線またはケーブル配線を介して、光ファイバを介して、または他の任意の形態の伝送を介してなど、何らかの伝送媒体を介して伝送されるプログラムコードの形態で実施することもでき、プログラムコードが、ＥＰＲＯＭ、ゲートアレイ、ＰＬＤ（プログラマブル論理デバイス）、クライアントコンピュータ、ビデオレコーダなどのマシンによって受信され、読み込まれて、実行されると、そのマシンが、本発明を実施するための装置になる。汎用プロセッサ上に実装される場合、プログラムコードは、プロセッサと一緒になって、本発明のインデックス作成（ｉｎｄｅｘｉｎｇ）機能を実行するように動作する独自の装置を提供する。
【００４５】
本発明を様々な図の好ましい諸実施形態に関連して説明してきたが、本発明を逸脱することなく、本発明と同一の機能を実行するために、他の類似した諸実施形態を使用すること、または説明した実施形態に変更または追加を行うことも可能であることを理解されたい。例えば、本発明の典型的な諸実施形態を、パーソナルコンピュータの機能をエミュレートするデジタルデバイス群の文脈で説明したが、本発明は、本出願で説明したようなデジタルデバイス群に限定されず、有線であるか、無線であるかにかかわらず、ゲームコンソール、ハンドヘルドコンピュータ、ポータブルコンピュータなどのいくつもの既存の、または出現しつつあるコンピューティングデバイス、またはコンピューティング環境に適用することができ、通信網を介して接続され、そのネットワークを介して対話するいくつものそのようなコンピューティングデバイスに適用することができることが、当業者には認識されよう。さらに、特に無線ネットワーク化されたデバイスの数が増え続けているなかで、ハンドヘルドデバイスオペレーティングシステム群、およびその他の特定用途向けのハードウェア／ソフトウェアインターフェースシステム群を含む、様々なコンピュータプラットフォームが、本明細書で企図されていることを強調しておかなければならない。したがって、本発明は、いずれの単一の実施形態にも限定されず、むしろ、添付の特許請求の範囲に従う広がりと範囲で解釈されなければならない。
【００４６】
最終的に、本明細書で説明する開示した諸実施形態は、他のプロセッサアーキテクチャ、コンピュータベースのシステム、またはシステム仮想化において使用するように適合させることができ、そのような諸実施形態は、本明細書で行う開示によって明確に予期されており、したがって、本発明は、本明細書で説明する特定の諸実施形態に限定されず、もっとも広く解釈されなければならない。同様に、プロセッサ仮想化以外の諸目的で合成命令群を使用することも、本明細書で行う開示によって予期されており、プロセッサ仮想化以外の文脈における合成命令群のいずれのそのような利用も、本明細書で行う開示に最も広く読み込まれなければならない。
【図面の簡単な説明】
【００４７】
【図１】本発明の諸態様を組み込むことができるコンピュータシステムを示すブロック図である。
【図２】コンピュータシステムにおけるエミュレートされた動作環境に関するハードウェアおよびソフトウェアのアーキテクチャの論理的な階層化を示す図である。
【図３Ａ】仮想化されたコンピューティングシステムを示す図である。
【図３Ｂ】ホストオペレーティングシステムと並行に実行される仮想マシンモニタを含む仮想化されたコンピューティングシステムの代替の実施形態を示す図である。
【図４】ｘ８６−６４ホストオペレーティングシステムと並行に実行される仮想マシンモニタを含む、仮想化されたコンピューティングシステムの別の代替の実施形態を示す図である。
【図５】ｘ８６の６４ビットプロセッサ上でレガシ３２ビット仮想マシンを実行するための一時的プロセッサモードコンテキスト切り替え操作を実行する方法を示す流れ図である。
【符号の説明】
【００４８】
２０  コンピュータ
２１  処理装置
２２  システムメモリ
２３  システムバス
２７  ハードドライブ
２８  フロッピー（登録商標）ドライブ
５０  フロッピー（登録商標）ドライブ
２９  リムーバブルなストレージ
３０  光ドライブ
３２  ハードディスクドライブＩ／Ｆ
３３  磁気ディスクドライブＩ／Ｆ
３４  光ドライブＩ／Ｆ
３６  アプリケーションプログラム群
３６’  アプリケーションプログラム群
３７  他のプログラム群
３８  プログラムデータ
４０  キーボード
４２  マウス
４６  シリアルポートＩ／Ｆ
４７  モニタ
４８  ビデオアダプタ
４９  リモートコンピュータ
５３  ネットワークＩ／Ｆ
５４  モデム
５５  ホストアダプタ
５６  ＳＣＳＩバス
６２  記憶装置
【図１】
2006018819.tif 000005
【図２】
2006018819.tif 000006
【図３Ａ】
2006018819.tif 000007
【図３Ｂ】
2006018819.tif 000008
【図４】
2006018819.tif 000009
【図５】
2006018819.tif 000010