(57)【要約】  プロセッサに基づくシステム上で実行されるプログラムにおいて、システムのプロセッサが実行されている周波数の一つ以上のサンプルを取得し、各サンプルを、所定セットの複数の周波数の少なくとも一つと比較し、前記比較の結果の少なくとも一部に基づいて、前記プログラムが仮想マシン上で実行されているか否かを決定する。【選択図】図１
2008542928.tif 000002
【特許請求の範囲】
【請求項１】
一のプロセッサに基づくシステム上で実行される一のプログラムにおける方法であって、
前記システムの一のプロセッサが実行されている周波数の一つ以上のサンプルを取得することと、
各サンプルを、一の所定セットの複数の周波数の少なくとも一つと比較することと、
前記比較の結果の少なくとも一部に基づいて、前記プログラムが一の仮想マシン上で実行されているか否かを決定することと
を含む方法。
【請求項２】
各サンプルを、前記所定セットの複数の周波数の前記少なくとも一つと比較することは、前記サンプルが、前記所定セットの複数の周波数の前記少なくとも一つの一の特定範囲内にあるか否かを決定することをさらに含む、請求項１に記載の方法。
【請求項３】
前記プログラムが一の仮想マシンで実行されているか否かを決定することは、
前記所定セットの複数の周波数の前記少なくとも一つが各サンプルに対して、前記サンプルの一の特定範囲内にある場合に前記プログラムが一の仮想マシンで実行されていないと決定することと、
そうでない場合に前記プログラムが一の仮想マシンで実行されていると決定することと
をさらに含む、請求項２に記載の方法。
【請求項４】
前記所定セットの複数の周波数は、一の識別命令の実行に応答して前記プロセッサによって報告される一の識別子の少なくとも一部に基づいて選択される、請求項３に記載の方法。
【請求項５】
一のティックカウントを取得する一のインターバルの間に前記プロセッサの全ての複数のクロックサイクルをカウントすることによって前記プロセッサが実行されている周波数の一のサンプルを取得することと、前記プロセッサの一のリアルタイムクロック上のインターバルのデュレーションを測定することと、前記デュレーションで前記ティックカウントを割ることによって前記周波数を計算することとをさらに含む、請求項３に記載の方法。
【請求項６】
一のインターバルの間に全ての複数のクロックサイクルをカウントすることは、前記インターバルの開始において前記プロセッサの一の第１サイクルカウントを取得するべく一の命令を実行することと、前記インターバルの終了において前記プロセッサの一の第２サイクルカウントを取得するべく一の命令を実行することと、前記第１サイクルカウントと第２サイクルカウントとの差を取得することとをさらに含み、前記リアルタイムクロック上の前記インターバルの前記デュレーションを測定することは、前記プロセッサの前記リアルタイムクロックによって決定された一の所定時間前記プログラムに待機させるべく一の命令を実行することをさらに含む、請求項５に記載の方法。
【請求項７】
一のマシンによってアクセスされてそのマシンに一の方法を行わせるデータがストアされたマシン可読媒体であって、
前記方法は、
前記システムの一のプロセッサが実行されている周波数の一つ以上のサンプルを取得することと、
各サンプルを、一の所定セットの複数の周波数の少なくとも一つと比較することと、
前記比較の結果の少なくとも一部に基づいて、前記プログラムが一の仮想マシン上で実行されているか否かを決定することと
を含むマシン可読媒体。
【請求項８】
各サンプルを、前記所定セットの複数の周波数の前記少なくとも一つと比較することは、前記サンプルが、前記所定セットの複数の周波数の前記少なくとも一つの一の特定範囲内にあるか否かを決定することをさらに含む、請求項７に記載のマシン可読媒体。
【請求項９】
前記プログラムが一の仮想マシンで実行されているか否かを決定することは、前記所定セットの複数の周波数の前記少なくとも一つが各サンプルに対して、前記サンプルの一の特定範囲内にある場合に前記プログラムが一の仮想マシンで実行されていないと決定することと、そうでない場合に前記プログラムが一の仮想マシンで実行されていると決定することとをさらに含む、請求項８に記載のマシン可読媒体。
【請求項１０】
前記所定セットの複数の周波数は、一の識別命令の実行に応答して前記プロセッサによって報告される一の識別子に少なくとも部分的に基づいて選択される、請求項９に記載のマシン可読媒体。
【請求項１１】
前記方法は、
一のティックカウントを取得する一のインターバルの間に前記プロセッサの全ての複数のクロックサイクルをカウントすることによって前記プロセッサが実行されている周波数の一のサンプルを取得することと、
前記プロセッサの一のリアルタイムクロック上のインターバルのデュレーションを測定することと、
前記デュレーションで前記ティックカウントを割ることによって前記周波数を計算することと
をさらに含む、請求項９に記載のマシン可読媒体。
一のプロセッサに基づくシステム上で実行される一のプログラムにおける方法であって、
前記システムの一のプロセッサが実行されている一の周波数を検出することと、
前記周波数を、一の所定セットの複数の周波数の少なくとも一つと比較することと、
前記比較の結果の少なくとも一部に基づいて、前記プログラムが一の仮想マシン上で実行されているか否かを決定することと
を含む方法。
【請求項１２】
一のインターバルの間に全ての複数のクロックサイクルをカウントすることは、前記インターバルの開始において前記プロセッサの一の第１サイクルカウントを取得するべく一の命令を実行することと、前記インターバルの終了において前記プロセッサの一の第２サイクルカウントを取得するべく一の命令を実行することと、前記第１サイクルカウントと第２サイクルカウントとの差を取得することとをさらに含み、前記リアルタイムクロック上の前記インターバルの前記デュレーションを測定することは、前記プロセッサの前記リアルタイムクロックによって決定された一の所定時間前記プログラムに待機させるべく一の命令を実行することをさらに含む、請求項１１に記載のマシン可読媒体。
【請求項１３】
システムであって、
一のプロセッサと、
前記システム上で実行できる一のプログラムがストアされた一のストレージと
を含み、
前記プログラムは、
前記システムの一のプロセッサが実行されている周波数の一つ以上のサンプルを取得し、
各サンプルを、一の所定セットの複数の周波数の少なくとも一つと比較し、
前記比較の結果の少なくとも一部に基づいて、前記プログラムが一の仮想マシン上で実行されているか否かを決定するシステム。
【請求項１４】
各サンプルを、前記所定セットの複数の周波数の前記少なくとも一つと比較する前記プログラムは、前記サンプルが、前記所定セットの複数の周波数の前記少なくとも一つの一の特定範囲内にあるか否かを決定する命令をさらに含む、請求項１３に記載のシステム。
【請求項１５】
前記プログラムが一の仮想マシンで実行されているか否かを決定する前記プログラムは、
前記所定セットの複数の周波数の前記少なくとも一つが各サンプルに対して、前記サンプルの一の特定範囲内にある場合に前記プログラムが一の仮想マシンで実行されていないと決定する命令と、
そうでない場合に前記プログラムが一の仮想マシンで実行されていると決定する命令と
をさらに含む、請求項１４に記載のシステム。
【請求項１６】
前記所定セットの複数の周波数は、一の識別命令の実行に応答して前記プロセッサによって報告される一の識別子の少なくとも一部に基づいて選択される、請求項１５に記載のシステム。
【請求項１７】
前記プログラムは、
一のティックカウントを取得する一のインターバルの間に前記プロセッサの全ての複数のクロックサイクルをカウントすることによって前記プロセッサが実行されている周波数の一のサンプルを取得する命令と、
前記プロセッサの一のリアルタイムクロック上のインターバルのデュレーションを測定する命令と、
前記デュレーションで前記ティックカウントを割ることによって前記周波数を計算する命令と
をさらに含む、請求項１５に記載のシステム。
【請求項１８】
一のインターバルの間に全ての複数のクロックサイクルをカウントすることは、前記インターバルの開始において前記プロセッサの一の第１サイクルカウントを取得するべく一の命令を実行することと、前記インターバルの終了において前記プロセッサの一の第２サイクルカウントを取得するべく一の命令を実行することと、前記第１サイクルカウントと第２サイクルカウントとの差を取得することとをさらに含み、前記リアルタイムクロック上の前記インターバルの前記デュレーションを測定する命令は、前記プロセッサの前記リアルタイムクロックによって決定された一の所定時間前記プログラムに待機させる複数の命令をさらに含む、請求項１７に記載のシステム。
【請求項１９】
一のマシン上で実行される一のプログラムにおける方法であって、
前記マシンの一のプロセッサの一の第１サイクルカウントを記録することと、
前記第１サイクルカウントの前記記録の直後に前記プロセッサの一のリアルタイムクロックの一の所定数の複数のティックの間待機することと、
前記待機の直後に一の第２サイクルカウントを記録することと、
前記第２サイクルカウントと前記第１サイクルカウントとの差を、前記所定数の複数のティックと同等な時間で割ることによって前記プロセッサの一の測定周波数を取得することと、
前記プロセッサの一の識別子を取得することと、
前記プロセッサの一の特定周波数を決定するべく前記識別子に基づいて一のテーブルエントリを調べることと、
前記プロセッサの前記特定周波数を前記プロセッサの前記測定周波数と比較することと、
前記特定周波数と前記測定周波数の差が一の特定しきい値を越える場合に前記マシンは一の仮想マシンであると決定することと
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
デスクトップ、サーバ、ワークステーション、もしくはノートブックコンピュータを含むコンピュータのようなプロセッサに基づくシステムにおいて、パーソナルデジタルアシスタントすなわちＰＤＡ、「スマート」携帯電話、もしくはポータブルゲームシステムのようなハンドヘルドデバイスにおいて、または、ゲームコンソールもしくはステーション、セットトップボックスその他のホームエンターテイメントデバイス等においてはプロセッサが使用される。それぞれの場合において、プロセッサは基本的な実行サイクルに基づいて作動し、一つのプロセッサパラメータはそのプロセッササイクルが発生する周波数である。この周波数は、１秒当たりのサイクル数で測定される。すなわち、ヘルツ（Ｈｚ）、またはメガヘルツ（ＭＨｚ）およびギガヘルツ（ＧＨｚ）のようなその倍数である。
【０００２】
いくつかの場合においては、プロセッサは多数の周波数で動作可能である。例えば、電力節約モード時には、プロセッサは、高性能モードの場合に使用される周波数よりも低い周波数の動作モードに切り替えられる。プロセッサが異なるモードで動作する異なる周波数のセットは通常、プロセッサの製造者によって特定される別個の値のセットである。
【０００３】
いくつかの場合においては、プロセッサ製造者は、プロセッサ上で実行されるプログラムが、プロセッサが動作するように特定された単数または複数の周波数を決定する方法を提供する。例えば、プログラムは、プロセッサをモデル番号に戻す命令を実行し、そのプログラムはそれに基づいて、ストアされたテーブルにアクセスすることで、プロセッサが動作する単数または複数の対応周波数を決定する。
【０００４】
プロセッサに基づくシステムはまた、リアルタイムクロックを与える。かかるシステム上で実行されるプログラムはリアルタイムクロックへアクセスし、それを使用して、例えばリアルタイムクロックによって測定された所定時間の間プログラムをサスペンドすることにより、プログラム実行中のリアルタイム期間をプログラム上で決定する。
【０００５】
仮想化は、ハードウェアおよびソフトウェア、または場合によってはソフトウェアのみの仮想化をサポートするプロセッサに基づくホストマシンが、ホストのアブストラクションを表すことを可能にする技術である。その結果、ホストマシンの基礎をなすハードウェアが一つ以上の独立して動作する仮想マシンとして見える。したがって、各仮想マシンは内蔵プラットフォームとして機能する。よくあることだが、仮想化技術が使用されて、複数のゲストオペレーティングシステムおよび／または他のゲストソフトウェアは、現実には物理的に同じハードウェアプラットフォーム上での実行であっても、見かけ上同時にかつ見かけ上独立して複数の仮想マシン上で共存かつ実行することができる。仮想マシンは、ホストマシンのハードウェアを擬態し、または、異なるハードウェアアブストラクション全体を代替的に表す。
【０００６】
仮想化システムは、仮想マシンで動作するゲストソフトウェアに、一セットのリソース（例えば、プロセッサ、メモリ、ＩＯデバイス）を与え、物理ホストマシンのコンポーネントのいくつかまたは全てを仮想マシンにマッピングし、または、完全な仮想コンポーネントを生成することができる。このため、仮想化システムは「仮想ベアマシン」インターフェイスをゲストソフトウェアに与えるともいえる。
【発明の開示】
【０００７】
いくつかの実施例においては、仮想化システムは、ホストマシンを制御する仮想マシンモニタ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍｏｎｉｔｏｒ（ＶＭＭ））を含む。ＶＭＭは、仮想マシン（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ（ＶＭ））で動作するゲストソフトウェアに、プロセッサ、メモリおよびＩＯデバイスのような一セットのリソースを与える。ＶＭＭは、物理ホストマシンのコンポーネントのいくつかまたは全てを仮想マシンにマッピングして、ＶＭＭ内のソフトウェアでエミュレートされる完全仮想化コンポーネントを生成する。完全仮想化コンポーネントは仮想マシン（例えば仮想ＩＯデバイス）に含まれる。ＶＭＭは、ハードウェア仮想化アーキテクチャ内のファシリティ（ｆａｃｉｌｉｔｉｅｓ）を使用して仮想マシンへサービスを与え、ホストマシン上で実行される複数の仮想マシンからのおよびそれらの間の保護を与える。
【発明を実施するための最良の形態】
【０００８】
図１は、仮想マシン環境１００の一実施例を示す。本実施例においては、プロセッサに基づくプラットフォーム１１６がＶＭＭ１１２を実行する。ＶＭＭは、典型的にはソフトウェアに実装されるが、仮想ベアマシンインターフェイスをより高レベルのソフトウェアに対してエミュレートおよびエクスポートする。かかる高レベルソフトウェアは、標準ＯＳ、リアルタイムＯＳを含むか、または、限られたオペレーティングシステム機能性を備えた必要最低限の環境でもよく、いくつかの実施例において標準ＯＳで典型的に利用可能なＯＳファシリティを含まなくてもよい。その代わりに、例えば、ＶＭＭ１１２は他のＶＭＭ内で実行されるか、または、そのサービスを使用して実行されてもよい。ＶＭＭは、例えば、ハードウェア、ソフトウェア、ファームウェアに実装されてもよく、またはいくつかの実施例においては、様々な技術の組み合わせによって実装されてもよい。
【０００９】
プラットフォームハードウェア１１６は、パーソナルコンピュータ（ＰＣ）、メインフレーム、パーソナルデジタルアシスタント（ＰＤＡ）または「スマート」携帯電話のようなハンドヘルドデバイス、ポータブルコンピュータ、セットトップボックス、または他のプロセッサに基づくシステムであってよい。プラットフォームハードウェア１１６は、少なくともプロセッサ１１８およびメモリ１２０を含む。プロセッサ１１８は、マイクロプロセッサ、デジタル信号プロセッサ、マイクロコントローラ等のようなプログラム実行可能な任意のタイプのプロセッサである。プロセッサは、複数の実施例での実行のための、マイクロコード、プログラマブルロジックまたはハードコード化ロジックを含む。図１は、かかるプロセッサ１１８を一つのみ示すが、一実施例におけるシステムにおいては一つ以上のプロセッサが存在してもよい。また、プロセッサ１１８は、マルチコアを含み、マルチスレッド用サポートする等であってよい。メモリ１２０は、ハードディスク、フロッピディスク（登録商標）、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、フラッシュメモリ、前記デバイスの任意の組み合わせ、または、様々な実施例においてプロセッサ１１８によって読み出し可能な任意の他のタイプのマシン媒体を含んでよい。メモリ１２０は、プログラム実行および他の方法実施例を実行するための命令および／またはデータをストアする。
【００１０】
ＶＭＭ１１２は、ゲストソフトウェアに対して一つ以上の仮想マシンのアブストラクションを与える。そのアブストラクションは、様々なゲストに対して同じまたは異なるアブストラクションを与える。図１は、２つの仮想マシン１０２および１１４を示す。各仮想マシン上で実行されるゲストソフトウェア１０３および１１３のようなゲストソフトウェアは、ゲストＯＳ１０４または１０６のようなゲストＯＳ、および様々なゲストソフトウェアアプリケーション１０８および１１０を含む。ゲストソフトウェア１０３および１１３は、ゲストソフトウェア１０３および１１３が実行されて他の機能が実行される仮想マシン内の物理リソース（例えばプロセッサレジスタ、メモリ、およびＩ／Ｏデバイス）にアクセスする。例えば、ゲストソフトウェア１０３および１１３は、仮想マシン１０２および１１４において与えられるプロセッサのアーキテクチャおよびプラットフォームに応じて、全てのレジスタ、キャッシュ、ストラクチャ、Ｉ／Ｏデバイス、メモリ等に対してアクセスすることが予測される。
【００１１】
他の実施例においては、プロセッサ１１８は、仮想マシン制御ストラクチャ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｃｏｎｔｒｏｌ  ｓｔｒｕｃｔｕｒｅ（ＶＭＣＳ））１２４にストアされたデータに応じて仮想マシン１０２および１１４の動作を制御する。ＶＭＣＳ１２４は、ゲストソフトウェア１０３および１１３の状態、ＶＭＭ１１２の状態、ＶＭＭ１１２がゲストソフトウェア１０３および１１３の動作をどのように制御したいのかを示す実行制御情報、ＶＭＭ１１２と仮想マシンとの間の制御移行等を含むストラクチャである。プロセッサ１１８は、ＶＭＣＳ１２４から情報を読み出して仮想マシンの実行環境を決定し、その振る舞い（ｂｅｈａｖｉｏｒ）を制約する。一実施例において、ＶＭＣＳ１２４はメモリ１２０にストアされる。いくつかの実施例において、複数のＶＭＣＳストラクチャが使用されて複数の仮想マシンがサポートされる。
【００１２】
ゲストソフトウェア（例えば、１０３、ゲストＯＳ１０４およびアプリケーション１０８を含む）がアクセス可能なリソースは、「特権」または「非特権」のいずれかに分類される。特権リソースに対しては、ＶＭＭ１１２は、ゲストソフトウェアが望む機能性を容易にする一方で、こうした特権リソースへの究極的な制御を維持する。さらに、各ゲストソフトウェア１０３および１１３は、例外（例えばページフォールト、一般保護例外等）、割り込み（例えばハードウェア割り込み、ソフトウェア割り込み）、およびプラットフォームイベント（例えば初期化（ＩＮＩＴ）およびシステム管理割り込み（ＳＭＩ））のような様々なプラットフォームを取り扱うことを予測する。これらのプラットフォームイベントのいくつかは、「特権」となっている。というのは、それらはＶＭＭ１１２によって取り扱われて仮想マシン１０２および１１４の適正な動作を確保し、かつ、ゲストソフトウェアからおよびゲストソフトウェア間を保護する必要があるからである。ゲストオペレーティングシステムおよびゲストアプリケーションはいずれも特権リソースへのアクセスを試行し、いずれも特権イベントを引き起こすかまたは経験する。ここでは、特権プラットフォームイベントおよび特権リソースへのアクセス試行は集合的に、「特権イベント」または「仮想化イベント」と称する。
【００１３】
前述のおよび図１に図示するような実施例における仮想マシン環境の動作は、図２に示す処理によって表される。図２は、ゲストソフトウェアで発生する特権イベントを処理する実施例でのＶＭ環境の動作、および、ゲストソフトウェアにより非特権イベントを処理する実施例の動作を示す。図２は、図１で示したような環境で発生する全てのコンポーネントまたは全ての動作を示すわけではない。これは単に提示の明確化を目的とする。小さなセットのコンポーネントおよび少数の所定動作を図２に示す一方で、一実施例でのＶＭ環境は、多くの他のコンポーネントを含み、多くの他の動作がかかる実施例において生じる。
【００１４】
図２は、図１において前述した、仮想マシンアブストラクション１０２、およびプラットフォームハードウェア１１６上で実行されるゲストソフトウェア１０３の動作の一つのセットの例を示す。動作は、システム内（例えば、ＶＭＭ１１２内、ゲストソフトウェア１０３内等のような）のどこでそれが発生するのかを示すブロック内に示す。前述したＶＭ環境における他のコンポーネントに加えて、ＶＭアブストラクション１０２は、ゲストソフトウェア１０３のための仮想マシン状態および他の状態情報を２１２においてストアする。また、多くの例のうちの２つを挙げるとすれば、仮想ネットワーク接続、または一般的なレジスタのセットのような他のリソースをゲストに与える。もちろん現実には、ＶＭ状態、ゲスト状態、または他のＶＭリソースを実装する物理リソースは、ＶＭが実行されるプラットフォームハードウェア１１６によって与えられる。プラットフォームハードウェアは、メモリ１２０、ＶＭＣＳ１２４、およびプロセッサ１１８を含む。
【００１５】
２４０において、ゲストソフトウェア１０３は、非特権リソース２４２にアクセスする。非特権リソースは、ＶＭＭ１１２による制御を必要とせず、ゲストソフトウェアによって直接アクセスすることができる。ゲストソフトウェアはＶＭＭ１１２を呼び出すことなく継続するので、ゲストは、非特権リソース２４２にアクセスした後２４５において動作を継続することができる。同様に、非特権プラットフォームイベントはＶＭＭ１１２の介在なしで取り扱われる（これは図２には示されていない）。
【００１６】
２０５において、ゲストソフトウェア１０３は、特権リソースへのアクセスを試行し、および／または特権プラットフォームイベントを経験する。２０５においてのようにかかる特権イベントが発生すると、制御はＶＭＭ１１２へ転送される（２０７）。ゲストソフトウェアからＶＭＭ１１２への制御の転送（２０７）は、ここでは仮想マシンエグジット（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｅｘｉｔ）と称する。リソースアクセスを容易にするかまたは特権イベントを適切に取り扱うかした後、ＶＭＭ１１２は、２３２において制御をゲストソフトウェアに戻し、その後動作をレジュームする（２３５）。ＶＭＭ１１２からゲストソフトウェアへの制御の転送（２３２）は、仮想マシンエントリ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｅｎｔｒｙ）と称する。一実施例において、ＶＭＭ１１２は、その移行をトリガする（２３０）ように特別に設計された命令、ここでは仮想マシンエントリ命令と称する、を実行することにより、仮想マシンエントリを開始する。
【００１７】
一実施例において、仮想マシンエグジットが発生すると、ゲストソフトウェアが使用するプロセッサ状態のコンポーネントがセーブされ（２１０）、ＶＭＭ１１２が要求するプロセッサ状態のコンポーネントがロードされ、そして、２２０において実行がＶＭＭ１１２でレジュームする。一実施例において、ゲストソフトウェアが使用するプロセッサ状態のコンポーネントはＶＭＣＳ１２４のゲスト状態領域にストアされ、ＶＭＭ１１２が要求するプロセッサ状態のコンポーネントはＶＭＣＳ１２４のモニタ状態領域にストアされる。一実施例において、ＶＭＭ１１２からゲストソフトウェアへの移行が発生すると、仮想マシンエグジットでセーブされた（および、仮想マシンエグジット処理中にＶＭＭ１１２が変更したかもしれない）プロセッサ状態のコンポーネントは、レストアされ（２２５）、２３０において仮想マシン１０２または１１４に制御が戻される。
【００１８】
一実施例において、ＶＭのストラクチャおよびゲストソフトウェアに対するサポートの編成は異なる。仮想化をサポートするべくホストマシン上で実行されるソフトウェアは、ＶＭＭという用語であってもそうでなくてもよい。いくつかの例では、仮想マシンサポートシステムは、ハードウェアコンポーネントすなわちサポート有しなくてもよい。さらに他の実施例では、ＶＭＭおよびゲスト全体は、図１に示すストラクチャとは異なり、実行オペレーティングシステム内で実行される。業界で知られているように、仮想マシンの他の多くの実装が可能である。
【００１９】
ハードウェアによってサポートされたＶＭＭは、図１および図２を参照して示す実施例において上述したようにＶＭを実装するが、ＶＭ内で実行されるプログラムは、物理マシン環境とは多くの点で区別不能な仮想化ゲストマシン環境内で与えられる。ハードウェアサポートにより、ＶＭＭは、仮想プロセッサのモデル特有レジスタといった特権リソースへのアクセスのような特別な命令をトラップして正確に取り扱い、物理プロセッサが戻すであろう値を戻すことができる。さらに、ハードウェアへの特権アクセス、例えばＩ／Ｏデバイスへの副作用を有するメモリアクセスは、実施例のハードウェアにおける仮想化サポートとともに、記載のＶＭＭおよびＶＭＣＳの動作によって、実施例において適切にシミュレーションされる。一例では、具体的には所定プラットフォームが、基礎をなすハードウェアと多くの点で類似または同一の仮想ハードウェアを表すＶＭを与える。これは、例えば、基礎を成す物理プロセッサと同じプロセッサタイプおよびモデルの仮想プロセッサ、物理マシンのバスに接続されたものと同じＩ／Ｏデバイス等を与えることによる。ゲストがプロセッサまたは他のハードウェアに対して、プラットフォームまたはプロセッサ特有の参照を行うことは次に、所定の応答に対する中間ＶＭＭおよびＶＭＣＳを経由して物理プラットフォームおよびＶＭへ渡される。よって、基礎をなす物理ハードウェアの酷似レプリカである環境がゲストに与えられる。これにより、ゲストにとって、介在する仮想化の存在を検知することは非常に困難となる。
【００２０】
または、ＶＭＭおよび仮想化サポートシステムは、基礎をなす物理システムとは異なるプロセッサまたはプラットフォームに基づいた環境を与えてもよい。この場合であっても、仮想化サブシステムおよびＶＭＭの入念な実装によって、仮想マシン上で実行されるプログラムが任意の直接的な方法で環境の仮想化された性質を検知することは回避される。
【００２１】
いくつかの場合において、プログラムが、その実行環境の仮想化された性質に気付くことは重要である。例えば、性能に左右されるプログラム（ｐｅｒｆｏｒｍａｎｃｅ  ｃｒｉｔｉｃａｌ  ｐｒｏｇｒａｍ）に所定動作を行わせたいと望むプログラム製造供給者にとっては、そのプログラムが単に、最小メモリサイズまたはプロセッサ周波数のような所定の最小能力によって物理ハードウェアにインストールされていることを確証することが必要である。仮想化環境においては、ＶＭは、基礎をなすハードウェアの現実の能力を正確には反映しないかもしれないメモリサイズもしくはプロセッサ周波数、または仮想化ハードウェアの他のパラメータを報告する。さらに、ＶＭ内でのプログラム実行は一般に、ＶＭ自体の動作のみを理由にオーバヘッドを招く。このオーバヘッドは、性能に左右される所定のプログラム処理にとって望ましくない。保護されたデータを操作または表示するプログラムのような他のプログラムは、ハードウェアデバイスを認証すること、または承認されたハードウェアプラットフォーム上でのみ実行することを望む。かかるプログラムが実行されるプラットフォームが、現実には未承認プラットフォーム上で実行され、かつ、承認された物理ハードウェアプラットフォームをシミュレーションするように悪意に設計されたＶＭであった場合、プログラムが、実行されたプラットフォームが仮想化されていることを検知できなければ、かかるプログラムのセキュリティは、危険にさらされかねない。
【００２２】
仮想化された実施例上で実行されていることを検知するプログラムの処理を図３に示す。図３では、プロセッサの測定された動作周波数とその特定されたセットの有効動作周波数との比較処理が、一実施例において一回以上繰り返される。処理の開始（３０５）において、プロセッサが動作する有効な特定周波数のセットが取得される（３１０）。繰り返しにおいて、フローチャート中ｉはループ変数を表すが、３１５において１で開始し、３２０におけるエグジットまで所定数ｎに限定される。測定周波数と特定周波数とがｎ回比較される。わかることだが、示された基本ループと等価な、繰り返しの任意の態様が使用されてよい。いくつかの例では、ループは省略される。すなわち、ｎが１の場合である。
【００２３】
プロセッサ周波数の決定は、プロセッサが動作する特定周波数の決定と同様、当業界で周知である。各繰り返しにおいて、プロセッサの現実の周波数が測定され（３２５）、次に、測定値が特定された有効周波数のセットと比較される（３３０）。比較結果が評価される（３３５）。複数の比較のうちいずれかが、特定された周波数のための通常許容範囲から外れる場合、マシンは仮想マシンであり、３４０において処理は完了する。そうでない場合、ループカウンタに対して増やした値でループを繰り返す（３４５）。全てのｎテストが範囲外測定なしで完了、すなわちループが３２０においてエグジットすれば、これは３５０において、処理が物理マシン上で実行されていて仮想マシン上ではないことを示す結果を意味する。
【００２４】
一実施例において、仮想化は、ＩＡ−３２インテル（登録商標）アーキテクチャプラットフォーム（ＩＡ−３２）のようなインテル（登録商標）アーキテクチャプロセッサ上の内部アーキテクチャサポートおよびＶＭＭを使用して実装される。これは、ＩＡ−３２インテル（登録商標）アーキテクチャソフトウェア開発者マニュアル（ＩＡ−３２ドキュメンテーション）に記載されている。一実施例において、仮想化プロセッサと基礎をなす物理プロセッサとは両者ともＩＡ−３２プロセッサであり、プロセッサにより実行されるサイクル数、リアルタイムクロック値、およびプロセッサ判別方法の決定のような具体的な命令をサポートする。例えば、ＩＡ−３２アーキテクチャにおいては、ＲＤＴＳＣ（タイムスタンプカウンタ読み出し）命令が使用されて基本プロセッササイクルがカウントされる。ＩＡ−３２ＲＤＭＳＲ（モデル特有レジスタ（Ｍｏｄｅｌ−Ｓｐｅｃｉｆｉｃ  Ｒｅｇｉｓｔｅｒ）すなわちＭＳＲからの読み出し）およびＣＰＵＩＤ命令が使用されて、プロセッサのモデル、タイプおよび識別に関する様々なパラメータが決定される。これらはＣＰＵタイプを含む。ＣＰＵタイプによってさらに、ＩＡ−３２ドキュメンテーションで特定されるテーブルから具体的なバス速度において特定される動作周波数を決定することができる。その上、プロセッサ周波数設定フィールドおよびスケーラブルバス速度フィールドのような、ＩＡ−３２ＭＳＲにおける他のフィールドがその後テーブルとともに使用されて予測プロセッサ周波数が見出される。
【００２５】
これらの命令、または異なるアーキテクチャにおける同等のセットが使用されて仮想化環境が検出される。かかるＩＡ−３２の一実施例において、図３の高レベルプログラムは、図４に示すＩＡ−３２アーキテクチャの特有な命令を使用するプログラムとして実装される。仮想化を検出するプログラム処理は、第一にプロセッサからの値を要求するプログラムによって開始される（４８０）。そのプロセッサ上では、４１０において、ＲＤＴＳＣのような命令を使用して実行される全基本クロックサイクルＴｃ１に対してプログラムが実行される。次に、システムのリアルタイムクロック（ＲＴＣ）がアクセスされ（４２０）、処理は、リアルタイムクロックの既知の周期（ここではｎティックと称する）の間待機またはループを行う（４２５）。次に、プログラムは、実行されるプロセッサクロックサイクルＴｃ２のための新たな現在値を読み出す（４３０）。２つの値の差を時間で割ることによって、すなわち（Ｔｃ２−Ｔｃ１）／ｎによって、測定周波数Ｆｍが得られる（４６０）。次に４９５において、ＣＰＵＩＤまたは類似の命令を使用してプロセッサの識別情報がアクセスされる。この情報は、処理４８０によって読み出し可能な、プロセッサ内のモデル特有レジスタ（ＭＳＲ）の複数のレジスタ値のセットとして与えられる。次に、取得された値の少なくとも一つまたはそれ以上が使用されて、プロセッサの仕様の一部として公開される所定のテーブル内にインデクスがつけられ（４５０）、可能な複数の所定周波数およびそれら周波数に対する許容範囲のセットが得られる。プログラムは４５０において、測定周波数Ｆｍに近似する特定周波数Ｆｓ、および、プロセッサに許容されるドリフトまたはバリエーションという点で関連する特定の範囲すなわち許容範囲を選択する。デルタ値は、テーブルから読み出されるか、またはプロセッサに特有の他のデータから既知である。次に、ＦｓとＦｍとの差の絶対値が計算されてデルタと比較される（４８０）。その絶対値がデルタを越える場合、プログラムは仮想マシンまたは仮想化プラットフォームで実行されている（４７０）。そうでない場合、プラットフォームは非仮想化の物理プラットフォームである（４９０）。
【００２６】
この処理の正確さは、使用される仮想化の現実の方法にかかわらず、仮想化リアルタイムクロックが物理リアルタイムクロックと同一となるべき蓋然性に依存する。このため、４２０および４２５においてのようなリアルタイムクロックにアクセスするプログラムが仮想化環境で実行されていても、仮想化環境は、仮想化環境が所定タイプのタイムクリティカルな機能を適切に果たすべき場合には、基礎をなすシステムのリアルタイムクロックへの直接アクセスを与える必要がある。一般に、生産品質の仮想化システムは、ゲストから見えるようにリアルタイムクロックを仮想化せずに、基礎をなすシステムのリアルタイムクロックに直接的なアクセスを与えると仮定される。これによって、仮想化を検出するべく図示のように使用される、ゲスト用のリアル物理マシンへのアクセスウィンドウが与えられる。仮想マシンにおいてゲストとして実行されるプログラムが物理リアルタイムクロックにアクセスすると、上述のように、そのプログラムは、仮想マシンによって与えられる仮想プロセッサの見かけの周波数を、仮想プロセッサと同一の物理プロセッサが動作するべく特定される周波数と比較する。仮想化に伴うオーバヘッドに起因して、および、仮想環境のコンポーネントがソフトウェアでエミュレーションされることに起因して、仮想プロセッサの測定周波数は、時間にわたって変化する可能性が非常に高く、対応する物理プロセッサの動作周波数変動の通常の予測範囲外にあるのが一般的である。このため、プラットフォームの仮想化された性質が検出されるのは、通常の周波数変動外にある可動域（ｅｘｃｕｒｓｉｏｎ）を検出することによってである。一般的には、仮想化プロセッサが、基礎をなす物理プロセッサとモデルおよび仕様が同一である場合、仮想化周波数は、特定バス速度にある物理プロセッサの現実の周波数よりも低くなる。仮想化プロセッサが、基礎をなす物理プロセッサよりも低い動作周波数を備えるプロセッサとして、例えばより遅いプロセッサのプロセッサモデル情報を与えることによって、ゲストに与えられたとしても、仮想化の基本的性質に起因する仮想化周波数の不可避なバリエーションのほとんどはそれでもなお、上述の処理によって高い確率で検出されるだろう。より高い精度を目的として処理は数回繰り返され、通常範囲外の測定周波数が見出される。
【００２７】
上記実施例は、ＩＡ−３２プロセッサで利用可能なタイプの高レベルアーキテクチャフィーチャ、すなわちクロックサイクルカウンタおよびリアルタイムクロックの利用可能性に基づく。しかし、図１に示す処理の一般的なフローは、特定のアーキテクチャに依存するわけではない。現在のプロセッサに基づくシステムのほとんどは、具体的詳細は図１に示すものと異なり、上記参照のＩＡ−３２命令と異なるかもしれないが、プロセッサの現実の動作周波数を測定する方法、および、プロセッサの動作の特定周波数を決定する方法を与える。したがって、当業者であれば、プロセッサの測定周波数がプロセッサの特定周波数に近似するか否かを決定する多くの代替方法が他の実施例において用いられることがわかるであろう。
【００２８】
いくつかの実施例は、マシンによってアクセスされるときに実施例の処理を行う命令をストアしたマシンまたはマシン読み取り可能媒体を含むソフトウェアプログラム製品またはソフトウェアとして与えられる。他の実施例においては、処理を行うためのハードウェア組み込みロジック（ｈａｒｄｗｉｒｅｄ  ｌｏｇｉｃ）を含む特定ハードウェアコンポーネントによって、またはプログラムされたコンポーネントとカスタムハードウェアコンポーネントとの任意の組み合わせによって、処理が行われる。
【００２９】
上記説明においては、説明を目的として、多数の具体的詳細を記載実施例の完全な理解を与えるべく記述するが、当業者であれば、これらの具体的詳細がなくとも他の多くの実施例が行えることがわかるだろう。
【００３０】
上記詳細な説明のいくつかの部分は、プロセッサに基づくシステム内のデータビットに対するアルゴリズムおよび動作のシンボル表現に関して与えられる。こうしたアルゴリズムの記述および表現は、当業者が当業界において自分の仕事の内容を他者へ最も有効に伝える手段である。動作とは、複数の物理量の物理的な操作を要求する動作のことである。これらの量は、ストア、転送、結合、比較、および他の操作が可能な電気的信号、磁気的信号、光学的信号、または他の物理的信号の形態をとる。これらの信号をビット、値、要素、シンボル、文字、数等としてみなすことは、原則的に共通使用ゆえに、便利な場合があることがわかっている。
【００３１】
しかし、留意すべきなのは、これらおよび同様な用語の全てが所定の物理量に関連するべきであり、これらの量に適用される便宜上のラベルに過ぎないということである。記載から明らかであるとして具体的に述べない限りは、「実行」、「処理」、「計算」、「算出」、「決定」等の用語は、プロセッサに基づくシステム、または同様の電子計算デバイスのアクションおよび処理を称する。プロセッサに基づくシステム、または同様の電子計算デバイスは、プロセッサに基づくシステムのストレージ内の物理量として表されるデータを操作して、同様に表される他のデータ、または他の情報ストレージ、伝送もしくは表示デバイスに変換する。
【００３２】
実施例の記載において、添付の図面が参照される。図面において、同じ番号は、いくつかの図を通じて実質的に類似するコンポーネントを記載する。他の実施例が利用されて、ストラクチャの、ロジックの、および電気的な変更がなされる。さらに、様々な実施例は異なるが、必ずしも相互排他的というわけではないことを理解すべきである。例えば、一実施例に記載される具体的なフィーチャ、ストラクチャ、または特徴は、他の実施例に含まれてもよい。
【００３３】
さらに、プロセッサに実装される実施例の設計は、創作から製造シミュレーションまでの様々なステージにわたる。設計を表すデータは、いくつかの方法で設計を表す。まず、シミュレーションに有用であるが、ハードウェアは、ハードウェア記述源とまたは他の機能記述言語を使用して表される。また、ロジックおよび／またはトランジスタゲートを備える回路レベルモデルが、設計プロセスのいくつかのステージにおいて製造される。さらに、いくつかのステージにおいては、ほとんどの設計は、ハードウェアモ出るの様々なデバイスの物理配置を表すデータのレベルにまで達する。従来の半導体製造技術が使用される場合においては、ハードウェアモデルを表すデータは、集積回路を製造するべく使用される異なるマスク層上の様々なフィーチャの存在または不在を特定するデータであってよい。設計の任意の表現において、データは任意の形態のマシン可読媒体にストアされる。かかる情報を伝送するべく変調または生成される光波または電波、メモリ、またはディスクのような磁気もしくは光学ストレージが、マシン可読媒体であってよい。これら媒体のいずれも、設計またはソフトウェア情報を「搬送」または「指示」する。コードまたは設計を指示または搬送する電気的搬送波が、電気信号のコピー、バッファ、または再伝送が行われる程度まで伝送されると、新たなコピーが作られる。よって、通信プロバイダまたはネットワークプロバイダは、実施例をなすまたは表す物品（搬送波）のコピーを作る。
【００３４】
実施例は、マシンによってアクセスされてそのマシンに請求項に記載の主題に係る処理を行わせるデータがストアされたマシン可読媒体を含むプログラム製品として与えられる。マシン可読媒体は、フロッピディスク（登録商標）、光学ディスク、ＤＶＤ−ＲＯＭディスク、ＤＶＤ−ＲＡＭディスク、ＤＶＤ−ＲＷディスク、ＤＶＤ＋ＲＷディスク、ＣＤ−Ｒディスク、ＣＤ−ＲＷディスク、ＣＤ−ＲＯＭディスク、および光磁気ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気または光学カード、フラッシュメモリ、または電子的命令をストアするのに適した他のタイプの媒体／マシン可読媒体を含むが、これらに限られない。さらに、実施例はまた、プログラム製品としてダウンロードできる。このプログラムは、遠隔にあるデータ源から、要求するデバイスへ、通信リンク（例えばモデムまたはネットワーク接続）を介して搬送波または他の伝達媒体で具体化されるデータ信号によって転送される。
【００３５】
多くの方法が、その最も基本的な形態で記載されるが、複数の方法のいずれかに対してステップを追加または削除することができる。請求項に記載の主題の基本的範囲から逸脱せずに、記載のメッセージのいずれかに対して情報を加算また減算することができる。多くのさらなる修正および適用ができることは、当業者にとって明らかである。具体的な実施例は、請求項に記載の主題を限定するべく与えられるのではなく、それを説明するべく与えられる。請求項に記載された主題の範囲は、以下の請求項によってのみ限定され、上述の具体的な実施例によっては限定されない。
【図面の簡単な説明】
【００３６】
【図１】一実施例における仮想化環境の高レベルブロック図である。
【図２】一実施例における仮想化環境動作の高レベルフローチャートである。
【図３】一実施例における処理の高レベルフローチャートである。
【図４】一実施例における処理の高レベルフローチャートである。
【図１】
2008542928.tif 000003
【図２】
2008542928.tif 000004
【図３】
2008542928.tif 000005
【図４】
2008542928.tif 000006
【国際調査報告】
2008542928.tif 000007
2008542928.tif 000008
2008542928.tif 000009