(58)【調査した分野】(Int.Cl.,DB名)
前記処理されたVMデータの前記少なくとも一部は、前記インターセプトされたVM命令を用いて前記ファームウェアによって決定された予測データと、前記インターセプトされたVM命令の引数とを含む、請求項3に記載の方法。
前記命令データは、前記インターセプトされたVM命令と前記インターセプトされたVM命令の引数とを用いて、前記ファームウェアによって決定される、請求項1に記載の方法。
前記メモリ・プールと前記VM状態のための前記バッファとにおける未使用のデータ位置を、前記ファームウェアによって、フェイク・データを用いて満たすステップをさらに含む、請求項2に記載の方法。
前記インターセプトされたVM命令を前記ハイパーバイザによって実行するステップは、前記インターセプトされたVM命令に続く前記VM命令の前記実行を再開することを前記ハイパーバイザによって要求するステップをさらに含む、請求項1に記載の方法。
前記ファームウェアによって、前記仮想マシンの前記状態を、前記ファームウェアが有する前記シャドウVM状態バッファにコピーするステップは、前記仮想マシンのために仮想CPUであるvCPUをセットアップする際に、または、前記vCPU上で前記VM命令を実行する際に、実行される、請求項1に記載の方法。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本発明の課題は、透明で安全なインターセプション処理のための方法、コンピュータ・システム、ファームウェア、ハイパーバイザおよびコンピュータ・プログラムを提供することである。
【0004】
様々な実施形態が、独立請求項の主題によって記載されているように、透明で安全なインターセプション処理のための方法、ファームウェア、ハイパーバイザ、コンピュータ・プログラム製品およびコンピュータ・システムを提供する。有利な実施形態が、従属請求項に記載されている。本発明の実施形態は、相互に排他的でない限り、相互に自由に組み合わせることが可能である。
【課題を解決するための手段】
【0005】
ある態様では、本発明は、透明で安全なインターセプション処理のためのコンピュータ実装方法に関する。この方法は、
仮想マシンVMを、ハイパーバイザおよびファームウェアを含む環境において展開するステップであって、ハイパーバイザはハードウェア上で動作し、ファームウェアはハードウェアと仮想マシンの状態とを管理し、仮想マシンは環境の対応するVMメモリにアクセスするように構成されている、展開するステップと、
仮想マシンを展開する際には、ハイパーバイザによって、ファームウェアにバッファを提供するステップと、
仮想マシンのVM命令を実行するステップと、
VM命令のうちの、命令データへのアクセスを要求するVM命令を、ファームウェアによってインターセプトするステップであって、命令データは、VMメモリに記憶されているVMデータと仮想マシンの状態であるVM状態の少なくとも一部との少なくとも一方を含む、インターセプトするステップと、
VM命令がインターセプトされる際には、ファームウェアによって、VM状態を、ファームウェアが有するシャドウVM状態バッファにコピーするステップと、
ファームウェアにより、命令データをバッファにコピーするステップと、
バッファを用いて、インターセプトされたVM命令をハイパーバイザによって実行するステップと、
インターセプトされたVM命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたVM命令に続いてVM命令の実行を再開する前に、シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を、バッファにおける結果データを用いて、更新するステップと、
シャドウVM状態バッファに記憶されている状態に基づき、インターセプトされたVM命令に続いて、VM命令の実行を再開するステップと、
を含む。
【0006】
別の態様では、本発明は、ハードウェア上で動作するハイパーバイザを含む、透明で安全なインターセプション処理のためのコンピュータ・システムに関する。このハイパーバイザは、
コンピュータ・システムにおいて、コンピュータ・システムの対応するVMメモリにアクセスするように構成されている仮想マシンVMを展開し、
仮想マシンを展開する際には、バッファをファームウェアに提供し、
仮想マシンのVM命令を実行する、
ように構成される。
【0007】
コンピュータ・システムは、さらに、ハードウェアと仮想マシンの状態とを管理するファームウェアを含む。
【0008】
ファームウェアは、VM命令のうちの、VMメモリに記憶されているVMデータと仮想マシンの状態であるVM状態の少なくとも一部との少なくとも一方を含む命令データへのアクセスを要求するVM命令をインターセプトし、VM状態を、ファームウェアが有するシャドウVM状態バッファにコピーし、命令データをバッファにコピーする、ように構成される。
【0009】
ハイパーバイザは、バッファを用いて、インターセプトされたVM命令を実行する、ように構成されており、
ファームウェアは、インターセプトされたVM命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたVM命令に続いてVM命令の実行を再開する前に、シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を、バッファにおける結果データを用いて、更新する、ように構成される。
【0010】
ファームウェアは、シャドウVM状態バッファに記憶されている状態に基づいて、インターセプトされたVM命令に続いて、VM命令の実行を再開する、ように構成される。
【0011】
別の態様では、本発明は、ハードウェアと仮想マシンの状態とを管理する、透明で安全なインターセプション処理のためのファームウェアに関する。このファームウェアは、
仮想マシンのVM命令のうちの、VMメモリに記憶されているVMデータと仮想マシンの状態であるVM状態の少なくとも一部との少なくとも一方を含む命令データへのアクセスを要求するVM命令をインターセプトし、
VM状態を、ファームウェアが有するシャドウVM状態バッファにコピーし、
命令データをバッファにコピーし、
インターセプトされたVM命令に続いてVM命令の実行を再開する前に、シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を、インターセプトされたVM命令の実行の結果を用いて、更新し、
シャドウVM状態バッファに記憶されている状態に基づいて、インターセプトされたVM命令に続いてVM命令の実行を再開する、ように構成される。
【0012】
別の態様では、本発明は、透明で安全なインターセプション処理のためのハイパーバイザに関する。このハイパーバイザは、
コンピュータ・システムにおいて、仮想マシンVMを展開し、
コンピュータ・システムの対応するVMメモリにアクセスするように仮想マシンを構成し、
仮想マシンを展開する際には、バッファをコンピュータ・システムのファームウェアに提供し、
仮想マシンのVM命令を実行し、
バッファを用いて、VM命令のうちの、インターセプトされたVM命令を実行し、
シャドウVM状態バッファに記憶されている状態に基づいて、インターセプトされたVM命令に続いてVM命令の実行を再開する、ように構成される。
【0013】
別の態様では、本発明は、プログラム命令が具現化されているコンピュータ可読記憶媒体を含む、透明で安全なインターセプション処理のためのコンピュータ・プログラム製品であって、プログラム命令が、プロセッサによって、
仮想マシンVMを、ハイパーバイザおよびファームウェアを含む環境において展開することであって、ハイパーバイザはハードウェア上で動作し、ファームウェアはハードウェアと仮想マシンの状態とを管理し、仮想マシンは環境の対応するVMメモリにアクセスするように構成されている、展開することと、
仮想マシンを展開する際には、ファームウェアにバッファを提供することと、
仮想マシンのVM命令を実行することと、
VM命令のうちの、命令データへのアクセスを要求するVM命令をインターセプトすることであって、命令データは、VMメモリに記憶されているVMデータと仮想マシンの状態であるVM状態の少なくとも一部との少なくとも一方を含む、インターセプトすることと、
VM命令がインターセプトされる際には、VM状態を、ファームウェアが有するシャドウVM状態バッファにコピーすることと、
命令データをバッファにコピーすることと、
バッファを用いて、インターセプトされたVM命令を実行することと、
インターセプトされたVM命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたVM命令に続いてVM命令の実行を再開する前に、シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を、バッファにおける結果データを用いて、更新することと、
シャドウVM状態バッファに記憶されている状態に基づき、インターセプトされたVM命令に続いて、VM命令の実行を再開することと、
を行うように実行可能である、コンピュータ・プログラム製品に関する。
【0014】
上記の特徴は、仮想マシン環境において、データに安全にアクセスするという利点を有し得る。これは、仮想マシンを集中的に管理し、仮想マシンのユーザが集中的管理に関する制御を有していない場合があり得る分散型システムに対し、特に有利であり得る。たとえば、本発明による方法を用いると、クラウド・プロバイダは、ハードウェア・リソースを仮想化して効率性のためにそれらを複数のユーザに提供することが依然として可能であり得るのであって、同時に、ユーザの側では、クラウド・プロバイダからのデータまたはアルゴリズムへのアクセスが不可能であることが保証され得る。これは、(たとえば、インテルのSGX、マイクロソフトのHaven、IBMのSecureBlue++などの)ハイパーバイザによるVM状態(CPUだけでなくメモリも)へのアクセスを阻止することによって、機能し得る。
【0015】
以下では、本発明の実施形態が、単なる例示により、次の図面を参照して、さらに詳細に、説明される。
【発明を実施するための形態】
【0017】
本発明の様々な実施形態に関する説明が例証の目的で提示されてきたが、網羅的であることや開示されている実施形態に限定されることは、意図されていない。説明された実施形態の範囲および主旨から逸脱することなく、当業者には、多くの変更および変形が明らかとなろう。本明細書において用いられている用語は、実施形態の原理、実際的な応用、もしくは市場において見出される技術に対する技術的改善を最もよく説明するように、または、他の当業者が本明細書において開示されている実施形態を理解することを可能にするように、選択された。
【0018】
本発明による方法は、既存のハイパーバイザが、ファームウェアの上で動作しているときに、VMインターセプトおよび割り込み処理を実行することを、可能にし得る。特に、仮想マシンのインターセプトおよび割り込み処理を管理するハイパーバイザのレイヤは、変更を受けないままであり得るのである。この要件を満たすことにより、ハイパーバイザの側におけるそのようなソリューションを求める開発の努力が単純化され得るし、よって、ファームウェア技術がより広範な開発者に利用可能になり得る。ファームウェアは、VMすなわち仮想マシンの機密性が維持され得るように、現行の仮想化インターフェースによって用いられるハイパーバイザ・メモリを管理する責任を有し得る。
【0019】
本明細書で用いられる「VM状態」という用語は、特定のVMにおいて特定の時点で生じる情報およびリソースの、構成もしくは集合またはその両方を指す。
【0020】
本明細書で用いられる「仮想マシン(VM)」という用語は、物理マシン(コンピューティング・デバイス、プロセッサなど)の論理表現とその処理環境(オペレーティング・システム(OS)、ソフトウェア・リソースなど)とを指す。VMは、基礎となるホスト・マシン(物理プロセッサまたはプロセッサの組)上で実行するソフトウェアとして維持される。ユーザまたはソフトウェア・リソースの視点からは、VMは、それ自体の独立の物理マシンであるように見える。
【0021】
本明細書で用いられる「ハイパーバイザまたはVMモニタ(VMM)」という用語は、複数のVMを管理しそれらのVMが同一のホスト・マシン上で複数の(そして、時には異なる)OSを用いて実行するすることを可能にする、処理環境またはプラットフォーム・サービスを指す。
【0022】
本明細書で用いられる「ハードウェア」という用語は、電子的、電磁気的、光学的、電子光学的、機械的、電子機械的部品などの物理的構造を有する要素を指す。
【0023】
本明細書で用いられる「ファームウェア」という用語は、ハードウェア構造(たとえば、フラッシュ・メモリまたはリード・オンリ・メモリ)において実装または具現化されている論理構造、方法、手順、プログラム、ルーチン、プロセス、アルゴリズム、公式、または表現を指す。ファームウェアの例には、マイクロコード、書き換え可能型制御記憶、およびマイクロプログラムされた構造がある。
【0024】
本明細書で用いられる「バッファ」またはプールという用語は、データをある場所から別の場所に移動させるときに、そのデータを一時的に記憶するのに用いられる物理メモリ・ストレージのある領域を指す。
【0025】
仮想マシンの展開には、その仮想マシンのインストール・プロセスおよび作動(または始動)プロセスが含まれる、と理解される。別の例では、仮想マシンの展開には、たとえば、その仮想マシンが先にインストールされているまたは既に存在している場合には、その仮想マシンの作動(または始動)プロセスが含まれる。
【0026】
VM命令のインターセプションは、本明細書において説明されるように、VM命令が実行されている間に、その実行が割り込みを受けて、そして、再開されるように、実行され得る。割り込みでは、VM命令の「通常の」実行が、割り込まれたVM命令が実行されるまで中断されるという意味が、意図されている。たとえば、VM命令が、一連の命令inst1、inst2、inst3、...、instNを含み、inst4がインターセプトされた命令である場合を考える。この場合には、inst1〜inst3が実行され(たとえば、第1の技術を用いて)、次に、inst4が本明細書で説明されるように別の方法で実行されるときに、この実行が割り込まれ、そして、inst4の実行の後で、第1の技術を用いたinst1〜inst3の実行に対してinst5〜instNの実行がなされるように、inst5〜instNの実行が再開され得る。
【0027】
上記の特徴は、仮想マシン環境において、データに安全にアクセスするという利点を有し得る。これは、仮想マシンを集中的に管理し、仮想マシンのユーザが集中的管理に関する制御を有していない場合があり得る分散型システムに対し、特に有利であり得る。たとえば、本発明による方法を用いると、クラウド・プロバイダは、ハードウェア・リソースを仮想化して効率性のためにそれらを複数のユーザに提供することが依然として可能であり得るのであって、同時に、ユーザの側では、クラウド・プロバイダからのデータまたはアルゴリズムへのアクセスが不可能であることが保証され得る。これは、(たとえば、インテルのSGX、マイクロソフトのHaven、IBMのSecureBlue++などの)ハイパーバイザによるVM状態(CPUだけでなくメモリも)へのアクセスを阻止することによって、機能し得る。
【0028】
ある実施形態によると、バッファは、VM状態バッファとメモリ・プールとを含んでおり、命令データをバッファにコピーするステップは、ファームウェアによって、VM状態の少なくとも一部を、シャドウVM状態バッファからVM状態バッファにコピーするステップと、命令データが、VMメモリに記憶されているVMデータを含む場合には、ファームウェアによって、VMデータを、VMメモリからメモリ・プールにコピーするステップと、ファームウェアによって、VM状態バッファにおいて、VMメモリにおけるデータへの第1のアドレスを、メモリ・プールにおける対応する第2のアドレスによって置換するステップと、を含む。この実施形態は、VMメモリにおけるデータへのアクセスをメモリにおける他の位置にリダイレクトすることによって、既存のシステムに、透明な態様で、シームレスに組み込まれ得る。これは、既存の環境のハイパーバイザの変更または構成を阻止し得る。この実施形態は、ハイパーバイザによるVMメモリへのアクセスを阻止し得る。
【0029】
ある実施形態によると、シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を更新するステップは、メモリ・プールにおける処理されたVMデータを結果データが含むという判断に応答して、処理されたVMデータの少なくとも一部を、メモリ・プールから第1のアドレスの関連するアドレスへ、ファームウェアによって、コピーするステップと、VM状態バッファに記憶されている結果データの少なくとも一部を、ファームウェアによって、シャドウVM状態バッファにコピーするステップと、シャドウVM状態バッファにおいて、第2のアドレスのアドレスを、VMメモリ・プールにおけるデータへの対応するアドレスに、ファームウェアによって、置換するステップと、を含む。この実施形態は、仮想マシンを実行するための信頼できる方法を提供し得る。VMメモリにおける処理されたデータをコピーすることによって、仮想マシン命令の以後の実行は、たとえばインターセプトされたVM命令である先の命令によって生じた正しい/正確なデータを用い得る。
【0030】
ある実施形態によると、処理されたVMデータの少なくとも一部は、インターセプトされたVM命令を用いてファームウェアによって決定された予測データと、インターセプトされたVM命令の引数とを含む。この実施形態は、不要なデータをVMメモリにコピーすることを、阻止し得る。たとえば、ハイパーバイザは、インターセプトされたVM命令と関係のない余分なデータを生じさせ得る。この余分なデータは、VMメモリにおいては、コピーされ得ない。
【0031】
ある実施形態によると、命令データは、インターセプトされたVM命令とインターセプトされたVM命令の引数とを用いて、ファームウェアによって決定される。
【0032】
ある実施形態によると、方法は、さらに、仮想マシンを展開する際には、ハイパーバイザがVMメモリにアクセスすることを防止するステップを含む。これは、VMメモリへの悪意のあるアクセスを防止することによって、本発明による方法の安全な態様をさらに強化するという利点を有し得る。たとえば、ハイパーバイザはバッファからデータを読み出すようにリダイレクトされるが、VMメモリへの悪意あるアクセスがそこで実施されるということが起こり得る。
【0033】
ある実施形態によると、方法は、さらに、メモリ・プールとVM状態のためのバッファとにおける未使用のデータ位置を、ファームウェアによって、フェイク・データを用いて満たすステップを含む。これは、ハイパーバイザが、展開されたVMのメモリ・プールにおいてVMメモリのコピーにアクセスすることだけを許されているという点で、本発明による方法の安全な態様をさらに強化するという利点を有し得る。未使用のデータにアクセスしようと試みると、結果的に、フェイク・データを読み出すことがあり得る。これが、ハイパーバイザのクラッシュを防止し得る。
【0034】
ある実施形態によると、フェイク・データは、ランダム・データとゼロとの少なくとも一方を含む。
【0035】
ある実施形態によると、インターセプトされたVM命令をハイパーバイザによって実行するステップは、インターセプトされたVM命令に続くVM命令の実行を再開することをハイパーバイザによって要求するステップをさらに含む。インターセプトされたVM命令の実行が完了すると、ファームウェアが、VM命令の実行を完了するために要求され得るバッファにおける結果的なデータへのアクセスを有し得る。
【0036】
ある実施形態によると、ファームウェアによって、仮想マシンの状態を、ファームウェアが有するシャドウVM状態バッファにコピーするステップは、仮想マシンのために仮想CPUであるvCPUをセットアップする際に、または、vCPU上でVM命令を実行する際に、実行される。この実施形態は、既存のシステムに本発明による方法をシームレスに組み入れるという利点を有し得る。
【0037】
図1は、コンピュータ・システム101のブロック図を示している。コンピュータ・システム101は、クラウド・コンピューティング環境の一部であり得る。しかし、当業者であれば、前記コンピュータ・システム101が、グリッド・コンピューティング・システムおよびクラスタ・コンピューティング・システムなど他の分散コンピューティング・システムと、仮想化ソフトウェアをサポートするコンピューティング・システムとに組み入れられ得ることを、そして、そのようなシステムで機能し得ることを、認識するはずである。
【0038】
図によって示されているように、コンピュータ・システム101は、ハイパーバイザ112(これは、仮想マシン・モニタとも称され得る)によって管理され得る。ハイパーバイザ112は、1つまたは複数の仮想マシン128.1〜128.Nを作成し得る。ハイパーバイザ128によって、その仮想マシン128.1〜128.Nが、コンピュータ・システム101の物理リソース114を共用することが可能になり得る。物理リソース114は、データまたは命令の処理を実行し得るのであって、命令を実行する1つまたは複数のプロセッサ116と、たとえば処理のための情報を記憶するランダム・アクセス・メモリ(RAM)118などのメモリと、ハード・ディスク・ドライブ(HDD)、電子機械的なハード・ドライブおよびソリッド・ステート・ハード・ドライブなどのストレージ・デバイス120と、物理処理リソースの間の相互作用を調整するファームウェア124を含むチップセット122とを含み得る。ファームウェア124の一例は、ハイパーバイザ112を、プロセッサ116による実行のために、ハード・ディスク・ドライブ120であるストレージにおけるオフ状態からRAM118におけるオン状態にブートする、基本入力/出力システム(BIOS)である。動作状態では、ハイパーバイザ112は、物理リソース114を用いて、仮想マシン128の動作をサポートするように、実行する。いくつかのプログラムが、ストレージ・デバイス120もしくはRAM118またはその両方に含まれ得るのであって、オペレーティング・システムもしくはアプリケーション・プログラムまたはその両方を含むプロセッサ116によって実行され得る。
【0039】
物理リソース116のコンポーネントは、様々なシステム・コンポーネントをプロセッサ116に結合する1つまたは複数のシステム・バスによって、相互に接続され得る。システム・バスは、メモリ・バスまたはメモリ・コントローラと、周辺バスと、多様なバス・アーキテクチャのいずれかを用いたローカル・バスとを含む、いくつかのタイプのバス構造のいずれかであり得る。
【0040】
各VM128は、少なくとも1つの仮想CPU131と、仮想システム・メモリすなわちVMメモリ135と、ゲスト・オペレーティング・システムと、ゲスト・オペレーティング・システム上で動作する1つまたは複数のアプリケーションと、オプションであるが、少なくとも1つの仮想ディスク133とを含む。VM128.1のコンポーネントは、物理コンピュータの対応するコンポーネントをエミュレートするソフトウェアとして、実装され得る。たとえば、仮想マシン128.1は、RAM118の対応する物理メモリ235.1をエミュレートするソフトウェアとして実装され得る仮想システム・メモリ135.1を含む。仮想マシン128.1の仮想CPU131.1は、プロセッサ116の対応する物理CPU231.1をエミュレートしている。仮想マシン128.1の仮想ディスク133.1は、ストレージ・デバイス120の対応する物理ディスク233.1をエミュレートしており、ここで、1は仮想マシンを指し、1〜Nの値を有する。
【0041】
RAM118は、さらに、ファームウェア124が有するシャドウVM状態バッファ140を含み得るのであるが、たとえば、ファームウェア124だけが、シャドウVM状態バッファ140へのアクセスを有し得るか、または、ファームウェア124が、そのシャドウVM状態バッファ140にアクセスするために他のコンポーネントを制御することがあり得る。RAM118は、さらに、後述されるように提供されるバッファ142〜144を含み得る。
【0042】
図2は、1つまたは複数のVM命令処理の透明で安全なインターセプトのための方法のフローチャートである。ステップ201では、たとえばVM1 128.1などの仮想マシンが展開され得る。たとえば、ハイパーバイザ112が、仮想マシン128.1を展開し得る。VM128.1の展開は、たとえば周期的(毎日)に、自動的に実行され得る。別の例では、VM128.1の展開は、VM128.1の展開を求めるリクエストがハイパーバイザによって受け取られることに応答して、実行され得る。
【0043】
VM128.1の展開は、たとえば、VM128.1をインストールするステップと、VM128.1を始動させるステップとを含み得る。別の例では、VM128.1の展開は、VM128.1がコンピュータ・システム101上に既にインストールされている場合には、VM128.1を始動させるステップを含み得る。
【0044】
ステップ203では、仮想マシン128.1を展開する際に、ハイパーバイザ112が、ファームウェア124に、バッファ142〜144を提供し得る。たとえば、バッファ142〜144は、メモリまたはRAM118の1つまたは複数の領域を含み得る。バッファ142〜144は、データを、ある場所から別の場所に移動させつつある間に、そのデータを一時的に記憶するのに用いられ得る。たとえば、バッファ142〜144は、VM128.1が閉じられるか、または、VM128.1の実行が終了すると直ちに、削除され得る。
【0045】
そのために、ハイパーバイザ112は、バッファ142〜144のための空間をRAM118において配分するために、命令をCPU116に送り得る。バッファ142〜144のサイズは、たとえば、ランダムに選択され得る。別の例では、バッファ142〜144のサイズは、たとえば、VM128.1の先行する実行から集められた履歴データを用いて、予め定義され得る。
【0046】
バッファ142〜144は、たとえば、VM状態バッファ142とメモリ・プール(または、メモリ・バッファ)144とを含み得る。
【0047】
ステップ205では、VM128.1のVM命令が、実行され得る。VM128.1は、たとえば、VM命令を形成する一連の命令を含み得る。VM命令は、プロセッサ116によって、実行され得る。VM命令は、実行されるために、メモリ118からフェッチされ得る。
【0048】
ステップ207では、ファームウェア124が、VM命令のうちで、命令データへのアクセスを要求するVM命令をインターセプトし得る。命令データは、VMメモリ235.1に記憶されているVMデータもしくはVM128.1の状態(VM状態)の少なくとも一部またはこれら両方を含み得る。VM状態の少なくとも一部は、実行されるためにインターセプトされたVM命令によって要求される状態であり得る。たとえば、インターセプトされたVM命令は、VM128.1のVM状態全体へのアクセスは要求しないことがあり得る。インターセプトされたVM命令は、VM128.1のVMメモリ235.1に記憶されているVMデータへのアクセスを要求することがあり得るし、要求しないこともあり得る。
【0049】
たとえば、インターセプトされたVM命令は、特権的な命令を含み得る。特権的な命令とは、たとえば、I/Oコマンド、クロック・コマンドの設定、ストレージ保護のディレクティブを作成するためのメモリ・コマンドのクリアなど、CPU命令を指し得る。
【0050】
たとえば、プロセッサ制御レジスタおよびテーブルにアクセスしようとする試みを含むVM命令は、ファームウェア124によってインターセプトされ得る。VM128.1は、ユーザ・モードで動作している可能性があり、これらのテーブルにアクセスすることを許されない場合があり得るが、その理由は、アクセスがアイソレーション制約条件に違反し得るからである。たとえば、VM128.1が特権的な命令(ハイパーバイザ・モードにあることを真に要求する命令)へのコールを行うときには、ファームウェア124が、ハイパーバイザに代わって、このコールまたはVM命令をインターセプトする。
【0051】
ステップ209では、VM命令をインターセプトするときに、ファームウェア124が、VM状態を、シャドウVM状態バッファ140にコピーし得る。VM状態は、メモリ状態、仮想プロセッサ状態、仮想デバイス状態もしくはネットワーク接続状態またはそれらの組合せを含み得るVM実行状態を、含み得る。
【0052】
ステップ211では、ファームウェア124が、命令データを、バッファ142〜144にコピーし得る。バッファ142〜144は、たとえば、インターセプトされたVM命令によって要求されるVM状態の一部だけを含み得る。シャドウVM状態バッファ140は、たとえば、ステップ209でコピーされたVM状態全体を含み得る。
【0053】
ステップ213では、ハイパーバイザ112は、インターセプトされたVM命令を、バッファ142〜144を用いて、実行し得る。インターセプトされたVM命令の実行は、結果的に、バッファ142〜144において、結果データを生じさせる場合または生じさせない場合があり得る。ハイパーバイザ112は、VMメモリ235.1へのアクセスを阻止されることがあり得るし、インターセプトされたVM命令を実行するために、バッファ142〜144へのアクセスだけを有する場合があり得る。これは、ハイパーバイザ112が、相対的なLOAD、STOREもしくはADDなどの命令、または、VMメモリ235.1へのアクセスを安全ではない態様で試みることがあり得る他の命令を含むことがあり得るし、あるいは、実行することがあり得る。
【0054】
インターセプトされたVM命令の実行は、命令データの少なくとも一部に変化を生じさせる、もしくは、バッファ142〜144において新たなデータを生じさせ得る、または、これらの両方を生じさせ得る。
【0055】
たとえば、インターセプトされたVM命令を実行する際には、ハイパーバイザ112は、インターセプトされたVM命令に続いてVM命令の実行を再開させるために、ファームウェア124に命令を送り得る。
【0056】
ステップ215では、インターセプトされたVM命令に続いてVM命令の実行を再開させる前に、シャドウVM状態バッファ140とVMメモリ235.1におけるVMデータとの少なくとも一方が、結果データを用いて、更新され得る。たとえば、ステップ215は、インターセプトされたVM命令に続いてVM命令の実行を再開させる前に、結果データを用いて、シャドウVM状態バッファ140を更新するステップを含む。別の例では、ステップ215は、インターセプトされたVM命令に続いてVM命令の実行を再開させる前に、結果データを用いて、VM状態バッファ140とVMメモリ235.1におけるVMデータとを更新するステップを含む。バッファ142〜144はインターセプトされたVM命令を実行するためにハイパーバイザ112によって用いられてきているので、バッファ142〜144のコンテンツ(結果データ)は、インターセプトされたVM命令がVMデータへのアクセスを要求する場合には、シャドウVM状態バッファ140とVMメモリ235.1におけるVMデータとを更新するために、ファームウェア124によって、用いられ得る。ステップ215は、インターセプトされたVM命令の実行が結果データを結果的に生じさせる場合に、実行され得る。
【0057】
ステップ217では、インターセプトされたVM命令に続く(一連の命令における)VM命令の実行が、シャドウVM状態バッファ140に記憶されている状態に基づいて、実行され得る。
【0058】
図3は、命令データをバッファ142〜144にコピーするための方法のフローチャートである。
【0059】
ステップ301では、ファームウェア124が、VM状態の少なくとも一部を、(上述した命令データの)シャドウVM状態バッファ140からVM状態バッファ142にコピーし得る。別の例では、実行ステップ209の(すなわち、VM状態をシャドウVM状態バッファ140の中にコピーする)時点で、VM状態の少なくとも一部のVM状態バッファへのコピーも同様に、実行され得る。
【0060】
ファームウェア124は、命令データがVMメモリ235.1に記憶されているVMデータを含むかどうか(質問303)を判断する。含む場合には、ファームウェア124は、ステップ305において、VMデータを、VMメモリ235.1からメモリ・プール144にコピーし得るのであり、ステップ307では、VM状態バッファ142において、VMメモリ235.1におけるデータへの第1のアドレスを、メモリ・プール144における対応する第2のアドレスによって置換し得る。第1のアドレスは、VMデータを含むVMメモリ235.1における位置を指す。第2のアドレスは、VMデータを含むメモリ・プール144における位置を指す。
【0061】
図4は、シャドウVM状態バッファとVMメモリ235.1におけるVMデータとの少なくとも一方を更新するための方法のフローチャートである。
【0062】
ステップ401では、ファームウェア124が、VM状態バッファ142に記憶されている結果データの少なくとも一部を、シャドウVM状態バッファ140にコピーし得る。たとえば、結果データは、状態結果データを含み得る。ステップ301でバッファにコピーされるVM状態の少なくとも一部は、インターセプトされたVM命令の実行の後で、変更され得る。この変更の結果の形式は、ファームウェア124によって、たとえば、インターセプトされたVM命令とインターセプトされたVM命令の引数とを読み出すことによって、計算され得る。ファームウェアは、たとえば、各命令と各命令引数とに対して入力および出力データのフォーマットもしくはサイズまたはこれら両方を指示するインターセプト可能な命令のテーブルを有し得る。この計算を実行することによって、ファームウェア124は、この計算に一致する状態結果データの一部だけをコピーし得るのであり、たとえば、VMにおけるデータ・オーバライドを回避するために時刻の値が8バイトに過ぎないことを保証する、または、時刻が合理的なタイムフレームの範囲内にあることを保証することにより、2038年問題に対抗して、VMにおけるアプリケーションへの攻撃を回避する。たとえば、状態結果データは、第1の部分と第2の部分とを含み得る。第1の部分は、結果データのうちの、ファームウェア124によって計算された部分であることが予測される。この場合、第1の部分が、シャドウVM状態バッファ140の中にコピーされ得る。
【0063】
ファームウェア124は、結果データが処理されたVMデータをメモリ・プール144に含むかどうかを判断し得る(質問403)。含む場合には、ファームウェア124は、ステップ405において、処理されたVMデータの少なくとも一部を、メモリ・プール144から、第1のアドレスの関連するアドレスにコピーし得る。状態結果データの場合と同様に、処理されたVMデータの少なくとも一部は、ファームウェア124によって予測されたまたは計算された、インターセプトされたVM命令を実行する際に生成されるデータ領域を含み得る。ファームウェア124によってメモリ・プールからVMメモリにコピーされた処理済のVMデータの少なくとも一部は、メモリ・プール144における位置のアドレスを含み得る。メモリ・プールにおける位置の任意のそのようなアドレスは、VMメモリにおいて、あるアドレスにより、VMメモリにおける関連する位置に置換され得る。
【0064】
ステップ407では、ファームウェア124が、シャドウVM状態バッファ140において、第2のアドレスのアドレスを、対応するアドレスによって、VMメモリ235.1におけるデータに置換し得る。
【0065】
図5は、例示的な方法による、たとえばコンピュータ・システム101の、メモリ(たとえば118の)構造を図解している。
【0066】
この例では、コンピュータ・システムは、zシステム・プラットフォームを含み得る。特定の仮想化構成に加えて汎用レジスタを含むデータ・ブロック(SIE−ブロック)を記述するVM状態542を取る1つの命令(解釈実行開始)が存在する。たとえばハイパーバイザ112がSIE命令を発行すると、ファームウェア124は、VMの仮想CPUを設定するのに必要なステップを行い、実行を開始/継続する。これは、仮想化が停止するまで行われるのであるが、その理由は、限定されたリソースをエミュレート/仮想化するために、または、何らかのリソースへのアクセスを支配するために、ハイパーバイザ112が必要とされ得るからである。そのような場合に、ファームウェア124は、そのインターセプトのための理由コードに加えてVM状態もセーブすることがあり得る。この実装は、現在/直前の理由コードが許容するように、ファームウェア124だけがアクセス可能なメモリにおける(シャドウVM状態バッファ140などの)シャドウSIE−ブロック540と、(VM状態バッファ142などの)ハイパーバイザSIE−ブロック542との間でのコピー・データだけとから、構成され得る。
【0067】
一例として、たとえばゲストまたはVM128.1は、タイマをセットするために、汎用レジスタにおいて特定された値を用いて、命令を発行し得る。ファームウェア124は、その汎用レジスタと理由コードだけを、ハイパーバイザSIE−ブロック542にコピーし得るのであるが、それにより、ハイパーバイザ112は、そのVM128.1のためのタイマを設定し得る。ハイパーバイザSIE−ブロック542の内部のすべての他のフィールドは、ランダム・データで満たすことが可能である。ハイパーバイザ112がVMリクエストを満たし、別のSIE命令を発行することによって継続した後で、ファームウェア124は、ハイパーバイザSIE−ブロック542からのデータ(たとえば、タイマを設定するための条件コードの成功)をファームウェアSIE−ブロック540に戻すようにコピーして、実際のSIE命令を発行する。
【0068】
以上で説明された方法は、(仮想システム・メモリ135などの)VMメモリ531への参照を要求しないすべてのVMインターセプションに対して機能し得る。あるインターセプトにおいて、VMメモリ位置が汎用レジスタにおいて参照される場合(たとえば、zシステムにおける「システム情報を記憶」という命令)には、コンテンツだけではなくてVMメモリ位置も、ハイパーバイザ112がアクセス可能な(メモリ・プール144などの)プロキシ・ページ544のプールにリダイレクトされる。
【0069】
VM定義の間、ハイパーバイザ112は、VM128.1と関連するプロキシ・ページのために用いられるメモリ領域544を予約し、これらのページをファームウェア124へのプロキシ・ページとして公表し得る。インターセプトの場合には、ファームウェア124は、要求されたデータ・アイテムを、VMメモリ531から、VM128.1と関連するプロキシ・ページ544にコピーし、汎用レジスタまたはハイパーバイザSIE−ブロック540における参照を、そのプロキシ・ページにおける位置に変更し、ファームウェア124は、次に、インターセプトの理由コードを用いて、ハイパーバイザ112への制御を与える。ハイパーバイザ112は、VM128.1によって予測された情報を、プロキシ・ページ544における参照されたアドレスに書き込み得るのであり、SIE命令を発行することによって、VM128.1を継続する。ファームウェア124は、次に、必要な場合には、ハイパーバイザ112によって書き込まれたデータを、プロキシ・ページ544から、VMメモリ531にコピーして戻す。
【0070】
本明細書では、本発明の諸態様が、本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照して説明されている。フローチャート図もしくはブロック図またはその両方の各ブロックと、フローチャート図もしくはブロック図またはその両方の複数のブロックの組合せとは、コンピュータ可読プログラム命令によって実装され得る、ということが理解されるであろう。
【0071】
本発明は、システム、方法もしくはコンピュータ・プログラム製品またはこれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の諸態様を実行させるコンピュータ可読プログラム命令が記憶された(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。
【0072】
コンピュータ可読記憶媒体は、命令実行デバイスが用いるための命令を保持し記憶することが可能な有形のデバイスであり得る。コンピュータ可読記憶媒体は、たとえば、以下に限定されることはないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能でプログラマブルなリード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD−ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フレキシブル・ディスク、パンチカードまたは記録された命令を有する溝中における凸状構造体など機械的にエンコードされたデバイス、および前述の任意の適切な組合せが含まれる。本明細書で用いられるコンピュータ可読記憶媒体は、無線波もしくは他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を介して伝搬する電磁波(たとえば、光ファイバ・ケーブルを介して通過する光パルス)、またはワイヤを通って伝送される電気信号などの、一時的な信号自体としては、解釈されるべきでない。
【0073】
本明細書で説明されているコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、または、たとえばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくはワイヤレス・ネットワークまたはこれらの組合せなどのネットワークを介して外部のコンピュータまたは外部のストレージ・デバイスに、ダウンロードすることができる。このネットワークは、銅の伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイヤウォール、スイッチ、ゲートウエイ・コンピュータ、もしくはエッジ・サーバまたはこれらの組合せを含み得る。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイスにおけるコンピュータ可読記憶媒体に記憶するために、転送する。
【0074】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データであり得るし、または、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または類似のプログラミング言語などの従来の手続き型プログラミング言語を含めて、1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードもしくはオブジェクト・コードであり得る。このコンピュータ可読プログラム命令は、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータで全体を実行することも、一部をユーザのコンピュータで実行することも、一部をユーザのコンピュータで一部をリモート・コンピュータで実行することも、または、リモート・コンピュータもしくはサーバで全体を実行することもできる。後者のシナリオでは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを介して、リモート・コンピュータをユーザのコンピュータに接続することができ、または、(たとえばインターネット・サービス・プロバイダを使いインターネットを介して)外部のコンピュータへの接続を行うことも可能である。いくつかの実施形態では、本発明の態様を実行するために、たとえば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路が、コンピュータ可読プログラム命令の状態情報を用いてその電子回路を個別化することにより、コンピュータ可読プログラム命令を実行し得る。
【0075】
本発明の態様は、本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本明細書で説明されている。フローチャート図もしくはブロック図またはその両方の各ブロックと、フローチャート図もしくはブロック図またはその両方における複数のブロックの組合せとを、コンピュータ可読プログラム命令によって実装できることが、理解されるであろう。
【0076】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方の1つもしくは複数のブロックにおいて指定されている機能/動作を実装するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されているコンピュータ可読記憶媒体が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックにおいて指定されている機能/動作の態様を実装する命令を含む製品を含むように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイスまたはこれらの組合せに対し、特定の態様で機能するように命令するものであってもよい。
【0077】
さらに、コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方の1つもしくは複数のブロックにおいて指定される機能群/動作群を実装するように、コンピュータ実装プロセスを生成させるべく、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0078】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装例のアーキテクチャ、機能、および動作を図解している。この点で、フローチャートまたはブロック図における各ブロックは、特定の論理機能を実装するための1つもしくは複数の実行可能な命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの別の実装例では、ブロックに記載された機能が、図面に記載された順序とは異なる順序で生じることがあり得る。たとえば、連続して示されている2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることがあり得るし、時には、これらのブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方における複数のブロックの組合せが、特定の機能もしくは動作を実行するまたは専用のハードウェアとコンピュータ命令との組合せを実行する、専用のハードウェア・ベースのシステムによって実装され得ることにも留意すべきである。
【0079】
本発明は、以下の特徴の組合せによって記載され得る。
【0080】
1.透明で安全なインターセプション処理のためのコンピュータ実装方法であって、
仮想マシンVMを、ハイパーバイザおよびファームウェアを含む環境において展開するステップであって、ハイパーバイザはハードウェア上で動作し、ファームウェアはハードウェアと仮想マシンの状態とを管理し、仮想マシンは環境の対応するVMメモリにアクセスするように構成されている、展開するステップと、
仮想マシンを展開する際には、ハイパーバイザによって、ファームウェアにバッファを提供するステップと、
仮想マシンのVM命令を実行するステップと、
VM命令のうちの、命令データへのアクセスを要求するVM命令を、ファームウェアによってインターセプトするステップであって、命令データは、VMメモリに記憶されているVMデータと仮想マシンの状態であるVM状態の少なくとも一部との少なくとも一方を含む、インターセプトするステップと、
VM命令がインターセプトされる際には、ファームウェアによって、VM状態を、ファームウェアが有するシャドウVM状態バッファにコピーするステップと、
ファームウェアにより、命令データをバッファにコピーするステップと、
バッファを用いて、インターセプトされたVM命令をハイパーバイザによって実行するステップと、
インターセプトされたVM命令の実行が結果的に結果データを生じさせる場合には、インターセプトされたVM命令に続いてVM命令の実行を再開する前に、シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を、バッファにおける結果データを用いて、更新するステップと、
シャドウVM状態バッファに記憶されている状態に基づき、インターセプトされたVM命令に続いて、VM命令の実行を再開するステップと、
を含む方法。
【0081】
2.バッファはVM状態バッファとメモリ・プールとを含んでおり、命令データをバッファにコピーするステップは、
ファームウェアによって、VM状態の少なくとも一部を、シャドウVM状態バッファからVM状態バッファにコピーするステップと、
命令データが、VMメモリに記憶されているVMデータを含む場合には、ファームウェアによって、VMデータを、VMメモリからメモリ・プールにコピーするステップと、
ファームウェアによって、VM状態バッファにおいて、VMメモリにおけるデータへの第1のアドレスを、メモリ・プールにおける対応する第2のアドレスによって置換するステップと、
を含む、特徴の組合せ1に記載の方法。
【0082】
3.シャドウVM状態バッファとVMメモリにおけるVMデータとの少なくとも一方を更新するステップは、
メモリ・プールにおける処理されたVMデータを結果データが含むという判断に応答して、処理されたVMデータの少なくとも一部を、メモリ・プールから第1のアドレスの関連するアドレスへ、ファームウェアによって、コピーするステップと、
VM状態バッファに記憶されている結果データの少なくとも一部を、ファームウェアによって、シャドウVM状態バッファにコピーするステップと、
シャドウVM状態バッファにおいて、第2のアドレスのアドレスを、VMメモリにおけるデータへの対応するアドレスに、ファームウェアによって、置換するステップと、
を含む、特徴の組合せ2に記載の方法。
【0083】
4.処理されたVMデータの少なくとも一部は、インターセプトされたVM命令を用いてファームウェアによって決定された予測データと、インターセプトされたVM命令の引数とを含む、特徴の組合せ3に記載の方法。
【0084】
5.命令データは、インターセプトされたVM命令とインターセプトされたVM命令の引数とを用いて、ファームウェアによって決定される、特徴の組合せ1ないし4のいずれかに記載の方法。
【0085】
6.仮想マシンを展開する際には、ハイパーバイザがVMメモリにアクセスすることを防止するステップをさらに含む、特徴の組合せ1ないし5のいずれかに記載の方法。
【0086】
7.メモリ・プールとVM状態のためのバッファとにおける未使用のデータ位置を、ファームウェアによって、フェイク・データを用いて満たすステップをさらに含む、特徴の組合せ2ないし6のいずれかに記載の方法。
【0087】
8.フェイク・データは、ランダム・データとゼロとの少なくとも一方を含む、特徴の組合せ7に記載の方法。
【0088】
9.インターセプトされたVM命令をハイパーバイザによって実行するステップは、インターセプトされたVM命令に続くVM命令の実行を再開することをハイパーバイザによって要求するステップをさらに含む、特徴の組合せ1ないし8のいずれかに記載の方法。
【0089】
10.ファームウェアによって、仮想マシンの状態を、ファームウェアが有するシャドウVM状態バッファにコピーするステップは、仮想マシンのために仮想CPUであるvCPUをセットアップする際に、または、vCPU上でVM命令を実行する際に、実行される、特徴の組合せ1ないし9のいずれかに記載の方法。