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