(57)【特許請求の範囲】
【請求項１】
透明で安全なインターセプション処理のためのコンピュータ実装方法であって、
仮想マシンＶＭを、ハイパーバイザおよびファームウェアを含む環境において展開するステップであって、前記ハイパーバイザはハードウェア上で動作し、前記ファームウェアは前記ハードウェアと前記仮想マシンの状態とを管理し、前記仮想マシンは前記環境の対応するＶＭメモリにアクセスするように構成されている、前記展開するステップと、
前記仮想マシンを展開する際には、前記ハイパーバイザによって、前記ファームウェアにバッファを提供するステップと、
前記仮想マシンのＶＭ命令を実行するステップと、
前記ＶＭ命令のうちの、命令データへのアクセスを要求するＶＭ命令を、前記ファームウェアによってインターセプトするステップであって、前記命令データは、前記ＶＭメモリに記憶されているＶＭデータと前記仮想マシンの前記状態であるＶＭ状態の少なくとも一部との少なくとも一方を含む、前記インターセプトするステップと、
前記ＶＭ命令が前記インターセプトされる際には、前記ファームウェアによって、前記ＶＭ状態を、前記ファームウェアが有するシャドウＶＭ状態バッファにコピーするステップと、
前記ファームウェアにより、前記命令データを前記バッファにコピーするステップと、
前記バッファを用いて、前記インターセプトされたＶＭ命令を前記ハイパーバイザによって実行するステップと、
前記インターセプトされたＶＭ命令の前記実行が結果的に結果データを生じさせる場合には、前記インターセプトされたＶＭ命令に続いて前記ＶＭ命令の実行を再開する前に、前記シャドウＶＭ状態バッファと前記ＶＭメモリにおける前記ＶＭデータとの少なくとも一方を、前記バッファにおける前記結果データを用いて、更新するステップと、
前記シャドウＶＭ状態バッファに記憶されている前記状態に基づき、前記インターセプトされたＶＭ命令に続いて、前記ＶＭ命令の実行を再開するステップと、
を含む方法。
【請求項２】
前記バッファはＶＭ状態バッファとメモリ・プールとを含んでおり、前記命令データを前記バッファにコピーするステップは、
前記ファームウェアによって、前記ＶＭ状態の少なくとも一部を、前記シャドウＶＭ状態バッファから前記ＶＭ状態バッファにコピーするステップと、
前記命令データが、前記ＶＭメモリに記憶されているＶＭデータを含む場合には、前記ファームウェアによって、前記ＶＭデータを、前記ＶＭメモリから前記メモリ・プールにコピーするステップと、
前記ファームウェアによって、前記ＶＭ状態バッファにおいて、前記ＶＭメモリにおけるデータへの第１のアドレスを、前記メモリ・プールにおける対応する第２のアドレスによって置換するステップと、
を含む、請求項１に記載の方法。
【請求項３】
前記シャドウＶＭ状態バッファと前記ＶＭメモリにおける前記ＶＭデータとの少なくとも一方を更新するステップは、
前記メモリ・プールにおける処理されたＶＭデータを前記結果データが含むという判断に応答して、前記処理されたＶＭデータの少なくとも一部を、前記メモリ・プールから前記第１のアドレスの関連するアドレスへ、前記ファームウェアによって、コピーするステップと、
前記ＶＭ状態バッファに記憶されている前記結果データの少なくとも一部を、前記ファームウェアによって、前記シャドウＶＭ状態バッファにコピーするステップと、
前記シャドウＶＭ状態バッファにおいて、前記第２のアドレスのアドレスを、前記ＶＭメモリにおけるデータへの対応するアドレスに、前記ファームウェアによって、置換する
ステップと、
を含む、請求項２に記載の方法。
【請求項４】
前記処理されたＶＭデータの前記少なくとも一部は、前記インターセプトされたＶＭ命令を用いて前記ファームウェアによって決定された予測データと、前記インターセプトされたＶＭ命令の引数とを含む、請求項３に記載の方法。
【請求項５】
前記命令データは、前記インターセプトされたＶＭ命令と前記インターセプトされたＶＭ命令の引数とを用いて、前記ファームウェアによって決定される、請求項１に記載の方法。
【請求項６】
前記仮想マシンを展開する際には、前記ハイパーバイザが前記ＶＭメモリにアクセスすることを防止するステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記メモリ・プールと前記ＶＭ状態のための前記バッファとにおける未使用のデータ位置を、前記ファームウェアによって、フェイク・データを用いて満たすステップをさらに含む、請求項２に記載の方法。
【請求項８】
前記フェイク・データは、ランダム・データとゼロとの少なくとも一方を含む、請求項７に記載の方法。
【請求項９】
前記インターセプトされたＶＭ命令を前記ハイパーバイザによって実行するステップは、前記インターセプトされたＶＭ命令に続く前記ＶＭ命令の前記実行を再開することを前記ハイパーバイザによって要求するステップをさらに含む、請求項１に記載の方法。
【請求項１０】
前記ファームウェアによって、前記仮想マシンの前記状態を、前記ファームウェアが有する前記シャドウＶＭ状態バッファにコピーするステップは、前記仮想マシンのために仮想ＣＰＵであるｖＣＰＵをセットアップする際に、または、前記ｖＣＰＵ上で前記ＶＭ命令を実行する際に、実行される、請求項１に記載の方法。
【請求項１１】
請求項１〜１０の何れか１項に記載の方法の各ステップを、コンピュータ・ハードウェアによる手段として構成した、コンピュータ・システム。
【請求項１２】
請求項１〜１０の何れか１項に記載の方法の各ステップを、コンピュータに実行させる、コンピュータ・プログラム。
【請求項１３】
請求項１２に記載の前記コンピュータ・プログラムを、コンピュータ可読記録媒体に記録した、記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル・コンピュータ・システムの分野に関し、詳細には、透明で安全なインターセプション処理のための方法に関する。
【背景技術】
【０００２】
パブリック・クラウド環境に関する主な問題の１つは、たとえばクラウド・プロバイダによる、データおよびアルゴリズムへの安全でないアクセスである。クラウド・プロバイダは、自らのサービスを提供する目的でデータにそのようにアクセスすることを必要とはしないので、そのようなデータにアクセスすることを阻止されることがあり得る。しかし、クラウド・プロバイダは、自分たちのハードウェア・リソースを仮想化して効率性のためにそれらを複数のカスタマに提供することが依然として可能であり、同時に、カスタマの側では、クラウド・プロバイダからのデータまたはアルゴリズムへのアクセスが不可能であることが保証されているように、アクセス阻止が実行されなければならない。典型的には、クラウド・オペレータは、自分たちのハイパーバイザ環境への特権的なアクセスを有しているので、ソフトウェアだけによるソリューションは、除外され得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明の課題は、透明で安全なインターセプション処理のための方法、コンピュータ・システム、ファームウェア、ハイパーバイザおよびコンピュータ・プログラムを提供することである。
【０００４】
様々な実施形態が、独立請求項の主題によって記載されているように、透明で安全なインターセプション処理のための方法、ファームウェア、ハイパーバイザ、コンピュータ・プログラム製品およびコンピュータ・システムを提供する。有利な実施形態が、従属請求項に記載されている。本発明の実施形態は、相互に排他的でない限り、相互に自由に組み合わせることが可能である。
【課題を解決するための手段】
【０００５】
ある態様では、本発明は、透明で安全なインターセプション処理のためのコンピュータ実装方法に関する。この方法は、
仮想マシンＶＭを、ハイパーバイザおよびファームウェアを含む環境において展開するステップであって、ハイパーバイザはハードウェア上で動作し、ファームウェアはハードウェアと仮想マシンの状態とを管理し、仮想マシンは環境の対応するＶＭメモリにアクセスするように構成されている、展開するステップと、
仮想マシンを展開する際には、ハイパーバイザによって、ファームウェアにバッファを提供するステップと、
仮想マシンのＶＭ命令を実行するステップと、
ＶＭ命令のうちの、命令データへのアクセスを要求するＶＭ命令を、ファームウェアによってインターセプトするステップであって、命令データは、ＶＭメモリに記憶されているＶＭデータと仮想マシンの状態であるＶＭ状態の少なくとも一部との少なくとも一方を含む、インターセプトするステップと、
ＶＭ命令がインターセプトされる際には、ファームウェアによって、ＶＭ状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーするステップと、
ファームウェアにより、命令データをバッファにコピーするステップと、
バッファを用いて、インターセプトされたＶＭ命令をハイパーバイザによって実行するステップと、
インターセプトされたＶＭ命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する前に、シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を、バッファにおける結果データを用いて、更新するステップと、
シャドウＶＭ状態バッファに記憶されている状態に基づき、インターセプトされたＶＭ命令に続いて、ＶＭ命令の実行を再開するステップと、
を含む。
【０００６】
別の態様では、本発明は、ハードウェア上で動作するハイパーバイザを含む、透明で安全なインターセプション処理のためのコンピュータ・システムに関する。このハイパーバイザは、
コンピュータ・システムにおいて、コンピュータ・システムの対応するＶＭメモリにアクセスするように構成されている仮想マシンＶＭを展開し、
仮想マシンを展開する際には、バッファをファームウェアに提供し、
仮想マシンのＶＭ命令を実行する、
ように構成される。
【０００７】
コンピュータ・システムは、さらに、ハードウェアと仮想マシンの状態とを管理するファームウェアを含む。
【０００８】
ファームウェアは、ＶＭ命令のうちの、ＶＭメモリに記憶されているＶＭデータと仮想マシンの状態であるＶＭ状態の少なくとも一部との少なくとも一方を含む命令データへのアクセスを要求するＶＭ命令をインターセプトし、ＶＭ状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーし、命令データをバッファにコピーする、ように構成される。
【０００９】
ハイパーバイザは、バッファを用いて、インターセプトされたＶＭ命令を実行する、ように構成されており、
ファームウェアは、インターセプトされたＶＭ命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する前に、シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を、バッファにおける結果データを用いて、更新する、ように構成される。
【００１０】
ファームウェアは、シャドウＶＭ状態バッファに記憶されている状態に基づいて、インターセプトされたＶＭ命令に続いて、ＶＭ命令の実行を再開する、ように構成される。
【００１１】
別の態様では、本発明は、ハードウェアと仮想マシンの状態とを管理する、透明で安全なインターセプション処理のためのファームウェアに関する。このファームウェアは、
仮想マシンのＶＭ命令のうちの、ＶＭメモリに記憶されているＶＭデータと仮想マシンの状態であるＶＭ状態の少なくとも一部との少なくとも一方を含む命令データへのアクセスを要求するＶＭ命令をインターセプトし、
ＶＭ状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーし、
命令データをバッファにコピーし、
インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する前に、シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を、インターセプトされたＶＭ命令の実行の結果を用いて、更新し、
シャドウＶＭ状態バッファに記憶されている状態に基づいて、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する、ように構成される。
【００１２】
別の態様では、本発明は、透明で安全なインターセプション処理のためのハイパーバイザに関する。このハイパーバイザは、
コンピュータ・システムにおいて、仮想マシンＶＭを展開し、
コンピュータ・システムの対応するＶＭメモリにアクセスするように仮想マシンを構成し、
仮想マシンを展開する際には、バッファをコンピュータ・システムのファームウェアに提供し、
仮想マシンのＶＭ命令を実行し、
バッファを用いて、ＶＭ命令のうちの、インターセプトされたＶＭ命令を実行し、
シャドウＶＭ状態バッファに記憶されている状態に基づいて、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する、ように構成される。
【００１３】
別の態様では、本発明は、プログラム命令が具現化されているコンピュータ可読記憶媒体を含む、透明で安全なインターセプション処理のためのコンピュータ・プログラム製品であって、プログラム命令が、プロセッサによって、
仮想マシンＶＭを、ハイパーバイザおよびファームウェアを含む環境において展開することであって、ハイパーバイザはハードウェア上で動作し、ファームウェアはハードウェアと仮想マシンの状態とを管理し、仮想マシンは環境の対応するＶＭメモリにアクセスするように構成されている、展開することと、
仮想マシンを展開する際には、ファームウェアにバッファを提供することと、
仮想マシンのＶＭ命令を実行することと、
ＶＭ命令のうちの、命令データへのアクセスを要求するＶＭ命令をインターセプトすることであって、命令データは、ＶＭメモリに記憶されているＶＭデータと仮想マシンの状態であるＶＭ状態の少なくとも一部との少なくとも一方を含む、インターセプトすることと、
ＶＭ命令がインターセプトされる際には、ＶＭ状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーすることと、
命令データをバッファにコピーすることと、
バッファを用いて、インターセプトされたＶＭ命令を実行することと、
インターセプトされたＶＭ命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する前に、シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を、バッファにおける結果データを用いて、更新することと、
シャドウＶＭ状態バッファに記憶されている状態に基づき、インターセプトされたＶＭ命令に続いて、ＶＭ命令の実行を再開することと、
を行うように実行可能である、コンピュータ・プログラム製品に関する。
【００１４】
上記の特徴は、仮想マシン環境において、データに安全にアクセスするという利点を有し得る。これは、仮想マシンを集中的に管理し、仮想マシンのユーザが集中的管理に関する制御を有していない場合があり得る分散型システムに対し、特に有利であり得る。たとえば、本発明による方法を用いると、クラウド・プロバイダは、ハードウェア・リソースを仮想化して効率性のためにそれらを複数のユーザに提供することが依然として可能であり得るのであって、同時に、ユーザの側では、クラウド・プロバイダからのデータまたはアルゴリズムへのアクセスが不可能であることが保証され得る。これは、（たとえば、インテルのＳＧＸ、マイクロソフトのＨａｖｅｎ、ＩＢＭのＳｅｃｕｒｅＢｌｕｅ＋＋などの）ハイパーバイザによるＶＭ状態（ＣＰＵだけでなくメモリも）へのアクセスを阻止することによって、機能し得る。
【００１５】
以下では、本発明の実施形態が、単なる例示により、次の図面を参照して、さらに詳細に、説明される。
【図面の簡単な説明】
【００１６】
【図１】コンピュータ・システムのブロック図である。
【図２】透明で安全なインターセプション処理のための方法のフローチャートである。
【図３】命令データをバッファにコピーするための方法のフローチャートである。
【図４】シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を更新するための方法のフローチャートである。
【図５】本開示の例示的な方法によるメモリ構造の図解である。
【図６】本開示の例示的な方法によるメモリ構造の図解である。
【図７】本発明による方法が実装され得る一般的なコンピュータ・システムのブロック図である。
【図８】本発明による方法が実装され得る一般的なネットワーク環境の図解である。
【図９】本発明による方法が実装され得るハードウェアおよびソフトウェアと、仮想化と、管理と、ワークロードとの関係の図解である。
【発明を実施するための形態】
【００１７】
本発明の様々な実施形態に関する説明が例証の目的で提示されてきたが、網羅的であることや開示されている実施形態に限定されることは、意図されていない。説明された実施形態の範囲および主旨から逸脱することなく、当業者には、多くの変更および変形が明らかとなろう。本明細書において用いられている用語は、実施形態の原理、実際的な応用、もしくは市場において見出される技術に対する技術的改善を最もよく説明するように、または、他の当業者が本明細書において開示されている実施形態を理解することを可能にするように、選択された。
【００１８】
本発明による方法は、既存のハイパーバイザが、ファームウェアの上で動作しているときに、ＶＭインターセプトおよび割り込み処理を実行することを、可能にし得る。特に、仮想マシンのインターセプトおよび割り込み処理を管理するハイパーバイザのレイヤは、変更を受けないままであり得るのである。この要件を満たすことにより、ハイパーバイザの側におけるそのようなソリューションを求める開発の努力が単純化され得るし、よって、ファームウェア技術がより広範な開発者に利用可能になり得る。ファームウェアは、ＶＭすなわち仮想マシンの機密性が維持され得るように、現行の仮想化インターフェースによって用いられるハイパーバイザ・メモリを管理する責任を有し得る。
【００１９】
本明細書で用いられる「ＶＭ状態」という用語は、特定のＶＭにおいて特定の時点で生じる情報およびリソースの、構成もしくは集合またはその両方を指す。
【００２０】
本明細書で用いられる「仮想マシン（ＶＭ）」という用語は、物理マシン（コンピューティング・デバイス、プロセッサなど）の論理表現とその処理環境（オペレーティング・システム（ＯＳ）、ソフトウェア・リソースなど）とを指す。ＶＭは、基礎となるホスト・マシン（物理プロセッサまたはプロセッサの組）上で実行するソフトウェアとして維持される。ユーザまたはソフトウェア・リソースの視点からは、ＶＭは、それ自体の独立の物理マシンであるように見える。
【００２１】
本明細書で用いられる「ハイパーバイザまたはＶＭモニタ（ＶＭＭ）」という用語は、複数のＶＭを管理しそれらのＶＭが同一のホスト・マシン上で複数の（そして、時には異なる）ＯＳを用いて実行するすることを可能にする、処理環境またはプラットフォーム・サービスを指す。
【００２２】
本明細書で用いられる「ハードウェア」という用語は、電子的、電磁気的、光学的、電子光学的、機械的、電子機械的部品などの物理的構造を有する要素を指す。
【００２３】
本明細書で用いられる「ファームウェア」という用語は、ハードウェア構造（たとえば、フラッシュ・メモリまたはリード・オンリ・メモリ）において実装または具現化されている論理構造、方法、手順、プログラム、ルーチン、プロセス、アルゴリズム、公式、または表現を指す。ファームウェアの例には、マイクロコード、書き換え可能型制御記憶、およびマイクロプログラムされた構造がある。
【００２４】
本明細書で用いられる「バッファ」またはプールという用語は、データをある場所から別の場所に移動させるときに、そのデータを一時的に記憶するのに用いられる物理メモリ・ストレージのある領域を指す。
【００２５】
仮想マシンの展開には、その仮想マシンのインストール・プロセスおよび作動（または始動）プロセスが含まれる、と理解される。別の例では、仮想マシンの展開には、たとえば、その仮想マシンが先にインストールされているまたは既に存在している場合には、その仮想マシンの作動（または始動）プロセスが含まれる。
【００２６】
ＶＭ命令のインターセプションは、本明細書において説明されるように、ＶＭ命令が実行されている間に、その実行が割り込みを受けて、そして、再開されるように、実行され得る。割り込みでは、ＶＭ命令の「通常の」実行が、割り込まれたＶＭ命令が実行されるまで中断されるという意味が、意図されている。たとえば、ＶＭ命令が、一連の命令ｉｎｓｔ１、ｉｎｓｔ２、ｉｎｓｔ３、．．．、ｉｎｓｔＮを含み、ｉｎｓｔ４がインターセプトされた命令である場合を考える。この場合には、ｉｎｓｔ１〜ｉｎｓｔ３が実行され（たとえば、第１の技術を用いて）、次に、ｉｎｓｔ４が本明細書で説明されるように別の方法で実行されるときに、この実行が割り込まれ、そして、ｉｎｓｔ４の実行の後で、第１の技術を用いたｉｎｓｔ１〜ｉｎｓｔ３の実行に対してｉｎｓｔ５〜ｉｎｓｔＮの実行がなされるように、ｉｎｓｔ５〜ｉｎｓｔＮの実行が再開され得る。
【００２７】
上記の特徴は、仮想マシン環境において、データに安全にアクセスするという利点を有し得る。これは、仮想マシンを集中的に管理し、仮想マシンのユーザが集中的管理に関する制御を有していない場合があり得る分散型システムに対し、特に有利であり得る。たとえば、本発明による方法を用いると、クラウド・プロバイダは、ハードウェア・リソースを仮想化して効率性のためにそれらを複数のユーザに提供することが依然として可能であり得るのであって、同時に、ユーザの側では、クラウド・プロバイダからのデータまたはアルゴリズムへのアクセスが不可能であることが保証され得る。これは、（たとえば、インテルのＳＧＸ、マイクロソフトのＨａｖｅｎ、ＩＢＭのＳｅｃｕｒｅＢｌｕｅ＋＋などの）ハイパーバイザによるＶＭ状態（ＣＰＵだけでなくメモリも）へのアクセスを阻止することによって、機能し得る。
【００２８】
ある実施形態によると、バッファは、ＶＭ状態バッファとメモリ・プールとを含んでおり、命令データをバッファにコピーするステップは、ファームウェアによって、ＶＭ状態の少なくとも一部を、シャドウＶＭ状態バッファからＶＭ状態バッファにコピーするステップと、命令データが、ＶＭメモリに記憶されているＶＭデータを含む場合には、ファームウェアによって、ＶＭデータを、ＶＭメモリからメモリ・プールにコピーするステップと、ファームウェアによって、ＶＭ状態バッファにおいて、ＶＭメモリにおけるデータへの第１のアドレスを、メモリ・プールにおける対応する第２のアドレスによって置換するステップと、を含む。この実施形態は、ＶＭメモリにおけるデータへのアクセスをメモリにおける他の位置にリダイレクトすることによって、既存のシステムに、透明な態様で、シームレスに組み込まれ得る。これは、既存の環境のハイパーバイザの変更または構成を阻止し得る。この実施形態は、ハイパーバイザによるＶＭメモリへのアクセスを阻止し得る。
【００２９】
ある実施形態によると、シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を更新するステップは、メモリ・プールにおける処理されたＶＭデータを結果データが含むという判断に応答して、処理されたＶＭデータの少なくとも一部を、メモリ・プールから第１のアドレスの関連するアドレスへ、ファームウェアによって、コピーするステップと、ＶＭ状態バッファに記憶されている結果データの少なくとも一部を、ファームウェアによって、シャドウＶＭ状態バッファにコピーするステップと、シャドウＶＭ状態バッファにおいて、第２のアドレスのアドレスを、ＶＭメモリ・プールにおけるデータへの対応するアドレスに、ファームウェアによって、置換するステップと、を含む。この実施形態は、仮想マシンを実行するための信頼できる方法を提供し得る。ＶＭメモリにおける処理されたデータをコピーすることによって、仮想マシン命令の以後の実行は、たとえばインターセプトされたＶＭ命令である先の命令によって生じた正しい／正確なデータを用い得る。
【００３０】
ある実施形態によると、処理されたＶＭデータの少なくとも一部は、インターセプトされたＶＭ命令を用いてファームウェアによって決定された予測データと、インターセプトされたＶＭ命令の引数とを含む。この実施形態は、不要なデータをＶＭメモリにコピーすることを、阻止し得る。たとえば、ハイパーバイザは、インターセプトされたＶＭ命令と関係のない余分なデータを生じさせ得る。この余分なデータは、ＶＭメモリにおいては、コピーされ得ない。
【００３１】
ある実施形態によると、命令データは、インターセプトされたＶＭ命令とインターセプトされたＶＭ命令の引数とを用いて、ファームウェアによって決定される。
【００３２】
ある実施形態によると、方法は、さらに、仮想マシンを展開する際には、ハイパーバイザがＶＭメモリにアクセスすることを防止するステップを含む。これは、ＶＭメモリへの悪意のあるアクセスを防止することによって、本発明による方法の安全な態様をさらに強化するという利点を有し得る。たとえば、ハイパーバイザはバッファからデータを読み出すようにリダイレクトされるが、ＶＭメモリへの悪意あるアクセスがそこで実施されるということが起こり得る。
【００３３】
ある実施形態によると、方法は、さらに、メモリ・プールとＶＭ状態のためのバッファとにおける未使用のデータ位置を、ファームウェアによって、フェイク・データを用いて満たすステップを含む。これは、ハイパーバイザが、展開されたＶＭのメモリ・プールにおいてＶＭメモリのコピーにアクセスすることだけを許されているという点で、本発明による方法の安全な態様をさらに強化するという利点を有し得る。未使用のデータにアクセスしようと試みると、結果的に、フェイク・データを読み出すことがあり得る。これが、ハイパーバイザのクラッシュを防止し得る。
【００３４】
ある実施形態によると、フェイク・データは、ランダム・データとゼロとの少なくとも一方を含む。
【００３５】
ある実施形態によると、インターセプトされたＶＭ命令をハイパーバイザによって実行するステップは、インターセプトされたＶＭ命令に続くＶＭ命令の実行を再開することをハイパーバイザによって要求するステップをさらに含む。インターセプトされたＶＭ命令の実行が完了すると、ファームウェアが、ＶＭ命令の実行を完了するために要求され得るバッファにおける結果的なデータへのアクセスを有し得る。
【００３６】
ある実施形態によると、ファームウェアによって、仮想マシンの状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーするステップは、仮想マシンのために仮想ＣＰＵであるｖＣＰＵをセットアップする際に、または、ｖＣＰＵ上でＶＭ命令を実行する際に、実行される。この実施形態は、既存のシステムに本発明による方法をシームレスに組み入れるという利点を有し得る。
【００３７】
図１は、コンピュータ・システム１０１のブロック図を示している。コンピュータ・システム１０１は、クラウド・コンピューティング環境の一部であり得る。しかし、当業者であれば、前記コンピュータ・システム１０１が、グリッド・コンピューティング・システムおよびクラスタ・コンピューティング・システムなど他の分散コンピューティング・システムと、仮想化ソフトウェアをサポートするコンピューティング・システムとに組み入れられ得ることを、そして、そのようなシステムで機能し得ることを、認識するはずである。
【００３８】
図によって示されているように、コンピュータ・システム１０１は、ハイパーバイザ１１２（これは、仮想マシン・モニタとも称され得る）によって管理され得る。ハイパーバイザ１１２は、１つまたは複数の仮想マシン１２８．１〜１２８．Ｎを作成し得る。ハイパーバイザ１２８によって、その仮想マシン１２８．１〜１２８．Ｎが、コンピュータ・システム１０１の物理リソース１１４を共用することが可能になり得る。物理リソース１１４は、データまたは命令の処理を実行し得るのであって、命令を実行する１つまたは複数のプロセッサ１１６と、たとえば処理のための情報を記憶するランダム・アクセス・メモリ（ＲＡＭ）１１８などのメモリと、ハード・ディスク・ドライブ（ＨＤＤ）、電子機械的なハード・ドライブおよびソリッド・ステート・ハード・ドライブなどのストレージ・デバイス１２０と、物理処理リソースの間の相互作用を調整するファームウェア１２４を含むチップセット１２２とを含み得る。ファームウェア１２４の一例は、ハイパーバイザ１１２を、プロセッサ１１６による実行のために、ハード・ディスク・ドライブ１２０であるストレージにおけるオフ状態からＲＡＭ１１８におけるオン状態にブートする、基本入力／出力システム（ＢＩＯＳ）である。動作状態では、ハイパーバイザ１１２は、物理リソース１１４を用いて、仮想マシン１２８の動作をサポートするように、実行する。いくつかのプログラムが、ストレージ・デバイス１２０もしくはＲＡＭ１１８またはその両方に含まれ得るのであって、オペレーティング・システムもしくはアプリケーション・プログラムまたはその両方を含むプロセッサ１１６によって実行され得る。
【００３９】
物理リソース１１６のコンポーネントは、様々なシステム・コンポーネントをプロセッサ１１６に結合する１つまたは複数のシステム・バスによって、相互に接続され得る。システム・バスは、メモリ・バスまたはメモリ・コントローラと、周辺バスと、多様なバス・アーキテクチャのいずれかを用いたローカル・バスとを含む、いくつかのタイプのバス構造のいずれかであり得る。
【００４０】
各ＶＭ１２８は、少なくとも１つの仮想ＣＰＵ１３１と、仮想システム・メモリすなわちＶＭメモリ１３５と、ゲスト・オペレーティング・システムと、ゲスト・オペレーティング・システム上で動作する１つまたは複数のアプリケーションと、オプションであるが、少なくとも１つの仮想ディスク１３３とを含む。ＶＭ１２８．１のコンポーネントは、物理コンピュータの対応するコンポーネントをエミュレートするソフトウェアとして、実装され得る。たとえば、仮想マシン１２８．１は、ＲＡＭ１１８の対応する物理メモリ２３５．１をエミュレートするソフトウェアとして実装され得る仮想システム・メモリ１３５．１を含む。仮想マシン１２８．１の仮想ＣＰＵ１３１．１は、プロセッサ１１６の対応する物理ＣＰＵ２３１．１をエミュレートしている。仮想マシン１２８．１の仮想ディスク１３３．１は、ストレージ・デバイス１２０の対応する物理ディスク２３３．１をエミュレートしており、ここで、１は仮想マシンを指し、１〜Ｎの値を有する。
【００４１】
ＲＡＭ１１８は、さらに、ファームウェア１２４が有するシャドウＶＭ状態バッファ１４０を含み得るのであるが、たとえば、ファームウェア１２４だけが、シャドウＶＭ状態バッファ１４０へのアクセスを有し得るか、または、ファームウェア１２４が、そのシャドウＶＭ状態バッファ１４０にアクセスするために他のコンポーネントを制御することがあり得る。ＲＡＭ１１８は、さらに、後述されるように提供されるバッファ１４２〜１４４を含み得る。
【００４２】
図２は、１つまたは複数のＶＭ命令処理の透明で安全なインターセプトのための方法のフローチャートである。ステップ２０１では、たとえばＶＭ１  １２８．１などの仮想マシンが展開され得る。たとえば、ハイパーバイザ１１２が、仮想マシン１２８．１を展開し得る。ＶＭ１２８．１の展開は、たとえば周期的（毎日）に、自動的に実行され得る。別の例では、ＶＭ１２８．１の展開は、ＶＭ１２８．１の展開を求めるリクエストがハイパーバイザによって受け取られることに応答して、実行され得る。
【００４３】
ＶＭ１２８．１の展開は、たとえば、ＶＭ１２８．１をインストールするステップと、ＶＭ１２８．１を始動させるステップとを含み得る。別の例では、ＶＭ１２８．１の展開は、ＶＭ１２８．１がコンピュータ・システム１０１上に既にインストールされている場合には、ＶＭ１２８．１を始動させるステップを含み得る。
【００４４】
ステップ２０３では、仮想マシン１２８．１を展開する際に、ハイパーバイザ１１２が、ファームウェア１２４に、バッファ１４２〜１４４を提供し得る。たとえば、バッファ１４２〜１４４は、メモリまたはＲＡＭ１１８の１つまたは複数の領域を含み得る。バッファ１４２〜１４４は、データを、ある場所から別の場所に移動させつつある間に、そのデータを一時的に記憶するのに用いられ得る。たとえば、バッファ１４２〜１４４は、ＶＭ１２８．１が閉じられるか、または、ＶＭ１２８．１の実行が終了すると直ちに、削除され得る。
【００４５】
そのために、ハイパーバイザ１１２は、バッファ１４２〜１４４のための空間をＲＡＭ１１８において配分するために、命令をＣＰＵ１１６に送り得る。バッファ１４２〜１４４のサイズは、たとえば、ランダムに選択され得る。別の例では、バッファ１４２〜１４４のサイズは、たとえば、ＶＭ１２８．１の先行する実行から集められた履歴データを用いて、予め定義され得る。
【００４６】
バッファ１４２〜１４４は、たとえば、ＶＭ状態バッファ１４２とメモリ・プール（または、メモリ・バッファ）１４４とを含み得る。
【００４７】
ステップ２０５では、ＶＭ１２８．１のＶＭ命令が、実行され得る。ＶＭ１２８．１は、たとえば、ＶＭ命令を形成する一連の命令を含み得る。ＶＭ命令は、プロセッサ１１６によって、実行され得る。ＶＭ命令は、実行されるために、メモリ１１８からフェッチされ得る。
【００４８】
ステップ２０７では、ファームウェア１２４が、ＶＭ命令のうちで、命令データへのアクセスを要求するＶＭ命令をインターセプトし得る。命令データは、ＶＭメモリ２３５．１に記憶されているＶＭデータもしくはＶＭ１２８．１の状態（ＶＭ状態）の少なくとも一部またはこれら両方を含み得る。ＶＭ状態の少なくとも一部は、実行されるためにインターセプトされたＶＭ命令によって要求される状態であり得る。たとえば、インターセプトされたＶＭ命令は、ＶＭ１２８．１のＶＭ状態全体へのアクセスは要求しないことがあり得る。インターセプトされたＶＭ命令は、ＶＭ１２８．１のＶＭメモリ２３５．１に記憶されているＶＭデータへのアクセスを要求することがあり得るし、要求しないこともあり得る。
【００４９】
たとえば、インターセプトされたＶＭ命令は、特権的な命令を含み得る。特権的な命令とは、たとえば、Ｉ／Ｏコマンド、クロック・コマンドの設定、ストレージ保護のディレクティブを作成するためのメモリ・コマンドのクリアなど、ＣＰＵ命令を指し得る。
【００５０】
たとえば、プロセッサ制御レジスタおよびテーブルにアクセスしようとする試みを含むＶＭ命令は、ファームウェア１２４によってインターセプトされ得る。ＶＭ１２８．１は、ユーザ・モードで動作している可能性があり、これらのテーブルにアクセスすることを許されない場合があり得るが、その理由は、アクセスがアイソレーション制約条件に違反し得るからである。たとえば、ＶＭ１２８．１が特権的な命令（ハイパーバイザ・モードにあることを真に要求する命令）へのコールを行うときには、ファームウェア１２４が、ハイパーバイザに代わって、このコールまたはＶＭ命令をインターセプトする。
【００５１】
ステップ２０９では、ＶＭ命令をインターセプトするときに、ファームウェア１２４が、ＶＭ状態を、シャドウＶＭ状態バッファ１４０にコピーし得る。ＶＭ状態は、メモリ状態、仮想プロセッサ状態、仮想デバイス状態もしくはネットワーク接続状態またはそれらの組合せを含み得るＶＭ実行状態を、含み得る。
【００５２】
ステップ２１１では、ファームウェア１２４が、命令データを、バッファ１４２〜１４４にコピーし得る。バッファ１４２〜１４４は、たとえば、インターセプトされたＶＭ命令によって要求されるＶＭ状態の一部だけを含み得る。シャドウＶＭ状態バッファ１４０は、たとえば、ステップ２０９でコピーされたＶＭ状態全体を含み得る。
【００５３】
ステップ２１３では、ハイパーバイザ１１２は、インターセプトされたＶＭ命令を、バッファ１４２〜１４４を用いて、実行し得る。インターセプトされたＶＭ命令の実行は、結果的に、バッファ１４２〜１４４において、結果データを生じさせる場合または生じさせない場合があり得る。ハイパーバイザ１１２は、ＶＭメモリ２３５．１へのアクセスを阻止されることがあり得るし、インターセプトされたＶＭ命令を実行するために、バッファ１４２〜１４４へのアクセスだけを有する場合があり得る。これは、ハイパーバイザ１１２が、相対的なＬＯＡＤ、ＳＴＯＲＥもしくはＡＤＤなどの命令、または、ＶＭメモリ２３５．１へのアクセスを安全ではない態様で試みることがあり得る他の命令を含むことがあり得るし、あるいは、実行することがあり得る。
【００５４】
インターセプトされたＶＭ命令の実行は、命令データの少なくとも一部に変化を生じさせる、もしくは、バッファ１４２〜１４４において新たなデータを生じさせ得る、または、これらの両方を生じさせ得る。
【００５５】
たとえば、インターセプトされたＶＭ命令を実行する際には、ハイパーバイザ１１２は、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開させるために、ファームウェア１２４に命令を送り得る。
【００５６】
ステップ２１５では、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開させる前に、シャドウＶＭ状態バッファ１４０とＶＭメモリ２３５．１におけるＶＭデータとの少なくとも一方が、結果データを用いて、更新され得る。たとえば、ステップ２１５は、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開させる前に、結果データを用いて、シャドウＶＭ状態バッファ１４０を更新するステップを含む。別の例では、ステップ２１５は、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開させる前に、結果データを用いて、ＶＭ状態バッファ１４０とＶＭメモリ２３５．１におけるＶＭデータとを更新するステップを含む。バッファ１４２〜１４４はインターセプトされたＶＭ命令を実行するためにハイパーバイザ１１２によって用いられてきているので、バッファ１４２〜１４４のコンテンツ（結果データ）は、インターセプトされたＶＭ命令がＶＭデータへのアクセスを要求する場合には、シャドウＶＭ状態バッファ１４０とＶＭメモリ２３５．１におけるＶＭデータとを更新するために、ファームウェア１２４によって、用いられ得る。ステップ２１５は、インターセプトされたＶＭ命令の実行が結果データを結果的に生じさせる場合に、実行され得る。
【００５７】
ステップ２１７では、インターセプトされたＶＭ命令に続く（一連の命令における）ＶＭ命令の実行が、シャドウＶＭ状態バッファ１４０に記憶されている状態に基づいて、実行され得る。
【００５８】
図３は、命令データをバッファ１４２〜１４４にコピーするための方法のフローチャートである。
【００５９】
ステップ３０１では、ファームウェア１２４が、ＶＭ状態の少なくとも一部を、（上述した命令データの）シャドウＶＭ状態バッファ１４０からＶＭ状態バッファ１４２にコピーし得る。別の例では、実行ステップ２０９の（すなわち、ＶＭ状態をシャドウＶＭ状態バッファ１４０の中にコピーする）時点で、ＶＭ状態の少なくとも一部のＶＭ状態バッファへのコピーも同様に、実行され得る。
【００６０】
ファームウェア１２４は、命令データがＶＭメモリ２３５．１に記憶されているＶＭデータを含むかどうか（質問３０３）を判断する。含む場合には、ファームウェア１２４は、ステップ３０５において、ＶＭデータを、ＶＭメモリ２３５．１からメモリ・プール１４４にコピーし得るのであり、ステップ３０７では、ＶＭ状態バッファ１４２において、ＶＭメモリ２３５．１におけるデータへの第１のアドレスを、メモリ・プール１４４における対応する第２のアドレスによって置換し得る。第１のアドレスは、ＶＭデータを含むＶＭメモリ２３５．１における位置を指す。第２のアドレスは、ＶＭデータを含むメモリ・プール１４４における位置を指す。
【００６１】
図４は、シャドウＶＭ状態バッファとＶＭメモリ２３５．１におけるＶＭデータとの少なくとも一方を更新するための方法のフローチャートである。
【００６２】
ステップ４０１では、ファームウェア１２４が、ＶＭ状態バッファ１４２に記憶されている結果データの少なくとも一部を、シャドウＶＭ状態バッファ１４０にコピーし得る。たとえば、結果データは、状態結果データを含み得る。ステップ３０１でバッファにコピーされるＶＭ状態の少なくとも一部は、インターセプトされたＶＭ命令の実行の後で、変更され得る。この変更の結果の形式は、ファームウェア１２４によって、たとえば、インターセプトされたＶＭ命令とインターセプトされたＶＭ命令の引数とを読み出すことによって、計算され得る。ファームウェアは、たとえば、各命令と各命令引数とに対して入力および出力データのフォーマットもしくはサイズまたはこれら両方を指示するインターセプト可能な命令のテーブルを有し得る。この計算を実行することによって、ファームウェア１２４は、この計算に一致する状態結果データの一部だけをコピーし得るのであり、たとえば、ＶＭにおけるデータ・オーバライドを回避するために時刻の値が８バイトに過ぎないことを保証する、または、時刻が合理的なタイムフレームの範囲内にあることを保証することにより、２０３８年問題に対抗して、ＶＭにおけるアプリケーションへの攻撃を回避する。たとえば、状態結果データは、第１の部分と第２の部分とを含み得る。第１の部分は、結果データのうちの、ファームウェア１２４によって計算された部分であることが予測される。この場合、第１の部分が、シャドウＶＭ状態バッファ１４０の中にコピーされ得る。
【００６３】
ファームウェア１２４は、結果データが処理されたＶＭデータをメモリ・プール１４４に含むかどうかを判断し得る（質問４０３）。含む場合には、ファームウェア１２４は、ステップ４０５において、処理されたＶＭデータの少なくとも一部を、メモリ・プール１４４から、第１のアドレスの関連するアドレスにコピーし得る。状態結果データの場合と同様に、処理されたＶＭデータの少なくとも一部は、ファームウェア１２４によって予測されたまたは計算された、インターセプトされたＶＭ命令を実行する際に生成されるデータ領域を含み得る。ファームウェア１２４によってメモリ・プールからＶＭメモリにコピーされた処理済のＶＭデータの少なくとも一部は、メモリ・プール１４４における位置のアドレスを含み得る。メモリ・プールにおける位置の任意のそのようなアドレスは、ＶＭメモリにおいて、あるアドレスにより、ＶＭメモリにおける関連する位置に置換され得る。
【００６４】
ステップ４０７では、ファームウェア１２４が、シャドウＶＭ状態バッファ１４０において、第２のアドレスのアドレスを、対応するアドレスによって、ＶＭメモリ２３５．１におけるデータに置換し得る。
【００６５】
図５は、例示的な方法による、たとえばコンピュータ・システム１０１の、メモリ（たとえば１１８の）構造を図解している。
【００６６】
この例では、コンピュータ・システムは、ｚシステム・プラットフォームを含み得る。特定の仮想化構成に加えて汎用レジスタを含むデータ・ブロック（ＳＩＥ−ブロック）を記述するＶＭ状態５４２を取る１つの命令（解釈実行開始）が存在する。たとえばハイパーバイザ１１２がＳＩＥ命令を発行すると、ファームウェア１２４は、ＶＭの仮想ＣＰＵを設定するのに必要なステップを行い、実行を開始／継続する。これは、仮想化が停止するまで行われるのであるが、その理由は、限定されたリソースをエミュレート／仮想化するために、または、何らかのリソースへのアクセスを支配するために、ハイパーバイザ１１２が必要とされ得るからである。そのような場合に、ファームウェア１２４は、そのインターセプトのための理由コードに加えてＶＭ状態もセーブすることがあり得る。この実装は、現在／直前の理由コードが許容するように、ファームウェア１２４だけがアクセス可能なメモリにおける（シャドウＶＭ状態バッファ１４０などの）シャドウＳＩＥ−ブロック５４０と、（ＶＭ状態バッファ１４２などの）ハイパーバイザＳＩＥ−ブロック５４２との間でのコピー・データだけとから、構成され得る。
【００６７】
一例として、たとえばゲストまたはＶＭ１２８．１は、タイマをセットするために、汎用レジスタにおいて特定された値を用いて、命令を発行し得る。ファームウェア１２４は、その汎用レジスタと理由コードだけを、ハイパーバイザＳＩＥ−ブロック５４２にコピーし得るのであるが、それにより、ハイパーバイザ１１２は、そのＶＭ１２８．１のためのタイマを設定し得る。ハイパーバイザＳＩＥ−ブロック５４２の内部のすべての他のフィールドは、ランダム・データで満たすことが可能である。ハイパーバイザ１１２がＶＭリクエストを満たし、別のＳＩＥ命令を発行することによって継続した後で、ファームウェア１２４は、ハイパーバイザＳＩＥ−ブロック５４２からのデータ（たとえば、タイマを設定するための条件コードの成功）をファームウェアＳＩＥ−ブロック５４０に戻すようにコピーして、実際のＳＩＥ命令を発行する。
【００６８】
以上で説明された方法は、（仮想システム・メモリ１３５などの）ＶＭメモリ５３１への参照を要求しないすべてのＶＭインターセプションに対して機能し得る。あるインターセプトにおいて、ＶＭメモリ位置が汎用レジスタにおいて参照される場合（たとえば、ｚシステムにおける「システム情報を記憶」という命令）には、コンテンツだけではなくてＶＭメモリ位置も、ハイパーバイザ１１２がアクセス可能な（メモリ・プール１４４などの）プロキシ・ページ５４４のプールにリダイレクトされる。
【００６９】
ＶＭ定義の間、ハイパーバイザ１１２は、ＶＭ１２８．１と関連するプロキシ・ページのために用いられるメモリ領域５４４を予約し、これらのページをファームウェア１２４へのプロキシ・ページとして公表し得る。インターセプトの場合には、ファームウェア１２４は、要求されたデータ・アイテムを、ＶＭメモリ５３１から、ＶＭ１２８．１と関連するプロキシ・ページ５４４にコピーし、汎用レジスタまたはハイパーバイザＳＩＥ−ブロック５４０における参照を、そのプロキシ・ページにおける位置に変更し、ファームウェア１２４は、次に、インターセプトの理由コードを用いて、ハイパーバイザ１１２への制御を与える。ハイパーバイザ１１２は、ＶＭ１２８．１によって予測された情報を、プロキシ・ページ５４４における参照されたアドレスに書き込み得るのであり、ＳＩＥ命令を発行することによって、ＶＭ１２８．１を継続する。ファームウェア１２４は、次に、必要な場合には、ハイパーバイザ１１２によって書き込まれたデータを、プロキシ・ページ５４４から、ＶＭメモリ５３１にコピーして戻す。
【００７０】
本明細書では、本発明の諸態様が、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照して説明されている。フローチャート図もしくはブロック図またはその両方の各ブロックと、フローチャート図もしくはブロック図またはその両方の複数のブロックの組合せとは、コンピュータ可読プログラム命令によって実装され得る、ということが理解されるであろう。
【００７１】
本発明は、システム、方法もしくはコンピュータ・プログラム製品またはこれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の諸態様を実行させるコンピュータ可読プログラム命令が記憶された（１つまたは複数の）コンピュータ可読記憶媒体を含み得る。
【００７２】
コンピュータ可読記憶媒体は、命令実行デバイスが用いるための命令を保持し記憶することが可能な有形のデバイスであり得る。コンピュータ可読記憶媒体は、たとえば、以下に限定されることはないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能でプログラマブルなリード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、デジタル・バーサタイル・ディスク（ＤＶＤ）、メモリ・スティック、フレキシブル・ディスク、パンチカードまたは記録された命令を有する溝中における凸状構造体など機械的にエンコードされたデバイス、および前述の任意の適切な組合せが含まれる。本明細書で用いられるコンピュータ可読記憶媒体は、無線波もしくは他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を介して伝搬する電磁波（たとえば、光ファイバ・ケーブルを介して通過する光パルス）、またはワイヤを通って伝送される電気信号などの、一時的な信号自体としては、解釈されるべきでない。
【００７３】
本明細書で説明されているコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、または、たとえばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくはワイヤレス・ネットワークまたはこれらの組合せなどのネットワークを介して外部のコンピュータまたは外部のストレージ・デバイスに、ダウンロードすることができる。このネットワークは、銅の伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイヤウォール、スイッチ、ゲートウエイ・コンピュータ、もしくはエッジ・サーバまたはこれらの組合せを含み得る。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイスにおけるコンピュータ可読記憶媒体に記憶するために、転送する。
【００７４】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データであり得るし、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または類似のプログラミング言語などの従来の手続き型プログラミング言語を含めて、１つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードもしくはオブジェクト・コードであり得る。このコンピュータ可読プログラム命令は、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータで全体を実行することも、一部をユーザのコンピュータで実行することも、一部をユーザのコンピュータで一部をリモート・コンピュータで実行することも、または、リモート・コンピュータもしくはサーバで全体を実行することもできる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して、リモート・コンピュータをユーザのコンピュータに接続することができ、または、（たとえばインターネット・サービス・プロバイダを使いインターネットを介して）外部のコンピュータへの接続を行うことも可能である。いくつかの実施形態では、本発明の態様を実行するために、たとえば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路が、コンピュータ可読プログラム命令の状態情報を用いてその電子回路を個別化することにより、コンピュータ可読プログラム命令を実行し得る。
【００７５】
本発明の態様は、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本明細書で説明されている。フローチャート図もしくはブロック図またはその両方の各ブロックと、フローチャート図もしくはブロック図またはその両方における複数のブロックの組合せとを、コンピュータ可読プログラム命令によって実装できることが、理解されるであろう。
【００７６】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方の１つもしくは複数のブロックにおいて指定されている機能／動作を実装するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されているコンピュータ可読記憶媒体が、フローチャートもしくはブロック図またはその両方の１つまたは複数のブロックにおいて指定されている機能／動作の態様を実装する命令を含む製品を含むように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイスまたはこれらの組合せに対し、特定の態様で機能するように命令するものであってもよい。
【００７７】
さらに、コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方の１つもしくは複数のブロックにおいて指定される機能群／動作群を実装するように、コンピュータ実装プロセスを生成させるべく、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【００７８】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装例のアーキテクチャ、機能、および動作を図解している。この点で、フローチャートまたはブロック図における各ブロックは、特定の論理機能を実装するための１つもしくは複数の実行可能な命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの別の実装例では、ブロックに記載された機能が、図面に記載された順序とは異なる順序で生じることがあり得る。たとえば、連続して示されている２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることがあり得るし、時には、これらのブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方における複数のブロックの組合せが、特定の機能もしくは動作を実行するまたは専用のハードウェアとコンピュータ命令との組合せを実行する、専用のハードウェア・ベースのシステムによって実装され得ることにも留意すべきである。
【００７９】
本発明は、以下の特徴の組合せによって記載され得る。
【００８０】
１．透明で安全なインターセプション処理のためのコンピュータ実装方法であって、
仮想マシンＶＭを、ハイパーバイザおよびファームウェアを含む環境において展開するステップであって、ハイパーバイザはハードウェア上で動作し、ファームウェアはハードウェアと仮想マシンの状態とを管理し、仮想マシンは環境の対応するＶＭメモリにアクセスするように構成されている、展開するステップと、
仮想マシンを展開する際には、ハイパーバイザによって、ファームウェアにバッファを提供するステップと、
仮想マシンのＶＭ命令を実行するステップと、
ＶＭ命令のうちの、命令データへのアクセスを要求するＶＭ命令を、ファームウェアによってインターセプトするステップであって、命令データは、ＶＭメモリに記憶されているＶＭデータと仮想マシンの状態であるＶＭ状態の少なくとも一部との少なくとも一方を含む、インターセプトするステップと、
ＶＭ命令がインターセプトされる際には、ファームウェアによって、ＶＭ状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーするステップと、
ファームウェアにより、命令データをバッファにコピーするステップと、
バッファを用いて、インターセプトされたＶＭ命令をハイパーバイザによって実行するステップと、
インターセプトされたＶＭ命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたＶＭ命令に続いてＶＭ命令の実行を再開する前に、シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を、バッファにおける結果データを用いて、更新するステップと、
シャドウＶＭ状態バッファに記憶されている状態に基づき、インターセプトされたＶＭ命令に続いて、ＶＭ命令の実行を再開するステップと、
を含む方法。
【００８１】
２．バッファはＶＭ状態バッファとメモリ・プールとを含んでおり、命令データをバッファにコピーするステップは、
ファームウェアによって、ＶＭ状態の少なくとも一部を、シャドウＶＭ状態バッファからＶＭ状態バッファにコピーするステップと、
命令データが、ＶＭメモリに記憶されているＶＭデータを含む場合には、ファームウェアによって、ＶＭデータを、ＶＭメモリからメモリ・プールにコピーするステップと、
ファームウェアによって、ＶＭ状態バッファにおいて、ＶＭメモリにおけるデータへの第１のアドレスを、メモリ・プールにおける対応する第２のアドレスによって置換するステップと、
を含む、特徴の組合せ１に記載の方法。
【００８２】
３．シャドウＶＭ状態バッファとＶＭメモリにおけるＶＭデータとの少なくとも一方を更新するステップは、
メモリ・プールにおける処理されたＶＭデータを結果データが含むという判断に応答して、処理されたＶＭデータの少なくとも一部を、メモリ・プールから第１のアドレスの関連するアドレスへ、ファームウェアによって、コピーするステップと、
ＶＭ状態バッファに記憶されている結果データの少なくとも一部を、ファームウェアによって、シャドウＶＭ状態バッファにコピーするステップと、
シャドウＶＭ状態バッファにおいて、第２のアドレスのアドレスを、ＶＭメモリにおけるデータへの対応するアドレスに、ファームウェアによって、置換するステップと、
を含む、特徴の組合せ２に記載の方法。
【００８３】
４．処理されたＶＭデータの少なくとも一部は、インターセプトされたＶＭ命令を用いてファームウェアによって決定された予測データと、インターセプトされたＶＭ命令の引数とを含む、特徴の組合せ３に記載の方法。
【００８４】
５．命令データは、インターセプトされたＶＭ命令とインターセプトされたＶＭ命令の引数とを用いて、ファームウェアによって決定される、特徴の組合せ１ないし４のいずれかに記載の方法。
【００８５】
６．仮想マシンを展開する際には、ハイパーバイザがＶＭメモリにアクセスすることを防止するステップをさらに含む、特徴の組合せ１ないし５のいずれかに記載の方法。
【００８６】
７．メモリ・プールとＶＭ状態のためのバッファとにおける未使用のデータ位置を、ファームウェアによって、フェイク・データを用いて満たすステップをさらに含む、特徴の組合せ２ないし６のいずれかに記載の方法。
【００８７】
８．フェイク・データは、ランダム・データとゼロとの少なくとも一方を含む、特徴の組合せ７に記載の方法。
【００８８】
９．インターセプトされたＶＭ命令をハイパーバイザによって実行するステップは、インターセプトされたＶＭ命令に続くＶＭ命令の実行を再開することをハイパーバイザによって要求するステップをさらに含む、特徴の組合せ１ないし８のいずれかに記載の方法。
【００８９】
１０．ファームウェアによって、仮想マシンの状態を、ファームウェアが有するシャドウＶＭ状態バッファにコピーするステップは、仮想マシンのために仮想ＣＰＵであるｖＣＰＵをセットアップする際に、または、ｖＣＰＵ上でＶＭ命令を実行する際に、実行される、特徴の組合せ１ないし９のいずれかに記載の方法。
【符号の説明】
【００９０】
１２０  ストレージ・デバイス
１２２  チップセット
６０２  プロセッサ
６０８  コンピュータ可読記憶媒体
６１０  オペレーティング・システム
６１１  アプリケーション・プログラム
６１２  デバイス・ドライバ
６１４  Ｒ／Ｗドライブまたはインターフェース
６１６  ネットワーク・アダプタまたはインターフェース
６１７  ネットワーク・アダプタまたはインターフェース
６２６  ポータブル・コンピュータ可読記憶媒体
８００  ハードウェアおよびソフトウェア
８７０  仮想化
８８０  管理
８９０  ワークロード
【図１】
0006802052.tif 000002
【図２】
0006802052.tif 000003
【図３】
0006802052.tif 000004
【図４】
0006802052.tif 000005
【図５】
0006802052.tif 000006
【図６】
0006802052.tif 000007
【図７】
0006802052.tif 000008
【図８】
0006802052.tif 000009
【図９】
0006802052.tif 000010