(57)【特許請求の範囲】
【請求項１】
セキュアなバーチャルマシン間の共有メモリ通信のためのコンピューティング装置であって、
当該コンピューティング装置のバーチャルマシンモニタによって、当該コンピューティング装置の対象バーチャルマシンのビュースイッチコンポーネントを、該対象バーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証する認証モジュールと、
前記バーチャルマシンモニタによって、前記ビュースイッチコンポーネントの認証に応答して、当該コンピューティング装置の物理メモリマップを定義するセキュアメモリビューを、前記対象バーチャルマシンから受け取った当該コンピューティング装置の共有メモリセグメントにアクセスするためのリクエストに応答して、前記共有メモリセグメントにアクセスするよう設定するセキュアビューモジュールと、
前記対象バーチャルマシンによって、前記ビュースイッチコンポーネントを用いて、前記共有メモリセグメントにアクセスするための前記リクエストに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替えるビュースイッチモジュールと、
前記対象バーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスするデータアクセスモジュールと
を有するコンピューティング装置。
【請求項２】
前記ビュースイッチコンポーネントは、オペレーティングシステムカーネル、カーネルモードドライバ、又はユーザレベルアプリケーションを有する、
請求項１に記載のコンピューティング装置。
【請求項３】
前記共有メモリセグメントは、当該コンピューティング装置の１以上の物理メモリページを有し、
前記セキュアメモリビューを設定することは、当該コンピューティング装置の拡張ページテーブルを設定することを有する、
請求項１に記載のコンピューティング装置。
【請求項４】
前記セキュアメモリビューへ切り替えることは、前記拡張ページテーブルを参照するよう当該コンピューティング装置の拡張ページテーブルポインタをセットすることを有する、
請求項３に記載のコンピューティング装置。
【請求項５】
前記拡張ページテーブルポインタをセットすることは、該拡張ページテーブルポインタを変更するプロセッサ命令を実行することを有する、
請求項４に記載のコンピューティング装置。
【請求項６】
前記共有メモリセグメントは、当該コンピューティング装置のソースバーチャルマシンのゲスト物理メモリページを有する、
請求項１乃至５のうちいずれか一項に記載のコンピューティング装置。
【請求項７】
前記共有メモリセグメントは、入出力バッファを有する、
請求項６に記載のコンピューティング装置。
【請求項８】
前記共有メモリセグメントは、送信キュー又は受信キューを有する、
請求項７に記載のコンピューティング装置。
【請求項９】
前記ソースバーチャルマシンによって、前記共有メモリセグメントを前記バーチャルマシンモニタに登録するアクセス制御モジュールを更に有し、
前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する、
請求項６に記載のコンピューティング装置。
【請求項１０】
前記共有メモリセグメントを登録することは、
前記ソースバーチャルマシンの許可テーブルにおいて前記共有メモリセグメントのゲスト物理ページを特定し、
前記許可テーブルを前記バーチャルマシンモニタに提示する
ことを有する、
請求項９に記載のコンピューティング装置。
【請求項１１】
前記バーチャルマシンモニタによって、前記共有メモリセグメントを確立する共有メモリモジュールを更に有し、
前記認証モジュールは更に、前記バーチャルマシンモニタによって、当該コンピューティング装置のソースバーチャルマシンのビュースイッチコンポーネントを、該ソースバーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証し、
前記ビュースイッチモジュールは更に、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのビュースイッチコンポーネントを用いて、該ビュースイッチコンポーネントの認証に応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替え、
前記データアクセスモジュールは更に、前記ソースバーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスし、
前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記バーチャルマシンモニタによって確立された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する、
請求項１乃至５のうちいずれか一項に記載のコンピューティング装置。
【請求項１２】
前記ソースバーチャルマシンによって、第２の共有メモリセグメントを前記バーチャルマシンモニタに登録するアクセス制御モジュールを更に有し、
前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記第２の共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを更に有し、
前記対象バーチャルマシンによって前記共有メモリセグメントにアクセスすることは、前記対象バーチャルマシンによって前記第２の共有メモリセグメントにアクセスすることを更に有する、
請求項１１に記載のコンピューティング装置。
【請求項１３】
前記ソースバーチャルマシンによって、前記第２の共有メモリセグメントに含まれる、前記対象バーチャルマシンによって処理されるべき共有バッファを生成し、
前記対象バーチャルマシンによって、前記共有メモリセグメントのアクセスに応答して前記共有バッファを処理し、
前記対象バーチャルマシン及び前記ソースバーチャルマシンによって、前記バーチャルマシンモニタに確立された前記共有メモリセグメントに格納されているセキュアビュー制御構造を用いて前記共有バッファの所有権を協調させる
バッファ所有権モジュールを更に有する
請求項１２に記載のコンピューティング装置。
【請求項１４】
前記第２の共有メモリセグメントを登録することは、前記セキュアビュー制御構造の次のポインタにおいて前記共有バッファを登録することを有し、
前記共有バッファを処理することは、該共有バッファの距離に応答して前記セキュアビュー制御構造の被処理ポインタをインクリメントすることを有し、
前記共有バッファを生成することは、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのセキュアビューの容量が超過したかどうかを判断し、該セキュアビューの容量が超過したとの判定に応答して、
前記ソースバーチャルマシンによって、前記対象バーチャルマシンが前記共有バッファを処理するのを終えるのを待ち、
前記ソースバーチャルマシンによって、前記対象バーチャルマシンによる前記共有バッファの処理の完了に応答して許可テーブルから前記共有バッファを除去し、
前記ソースバーチャルマシンによって、前記許可テーブルからの前記共有バッファの除去に応答して前記共有バッファを再要求し、
前記バーチャルマシンモニタによって、前記共有バッファの再要求に応答して当該コンピューティング装置の拡張ページテーブルを無効にする
ことを有する、
請求項１３に記載のコンピューティング装置。
【請求項１５】
前記セキュアビューの容量が超過したかどうかを判断することは、該セキュアビューの次のポインタが前記セキュアビュー制御構造の参照ポインタを超えるかどうかを判断することを有する、
請求項１４に記載のコンピューティング装置。
【請求項１６】
セキュアなバーチャルマシン間の共有メモリ通信のための方法であって、
コンピューティング装置のバーチャルマシンモニタによって、前記コンピューティング装置の対象バーチャルマシンのビュースイッチコンポーネントを、該対象バーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証し、
前記バーチャルマシンモニタによって、前記ビュースイッチコンポーネントを認証することに応答して、前記コンピューティング装置の物理メモリマップを定義するセキュアメモリビューを、前記対象バーチャルマシンから受け取った前記コンピューティング装置の共有メモリセグメントにアクセスするためのリクエストに応答して、前記共有メモリセグメントにアクセスするよう設定し、
前記対象バーチャルマシンによって、前記ビュースイッチコンポーネントを用いて、前記共有メモリセグメントにアクセスするための前記リクエストに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替え、
前記対象バーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスする
ことを有する方法。
【請求項１７】
前記共有メモリセグメントは、前記コンピューティング装置の１以上の物理メモリページを有し、
前記セキュアメモリビューを設定することは、前記コンピューティング装置の拡張ページテーブルを設定することを有する、
請求項１６に記載の方法。
【請求項１８】
前記セキュアメモリビューへ切り替えることは、前記拡張ページテーブルを参照するよう前記コンピューティング装置の拡張ページテーブルポインタをセットすることを有する、
請求項１７に記載の方法。
【請求項１９】
前記共有メモリセグメントは、前記コンピューティング装置のソースバーチャルマシンのゲスト物理メモリページを有し、当該方法は、
前記ソースバーチャルマシンによって、前記共有メモリセグメントを前記バーチャルマシンモニタに登録することを更に有し、
前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する、
請求項１６に記載の方法。
【請求項２０】
前記バーチャルマシンモニタによって、前記共有メモリセグメントを確立し、
前記バーチャルマシンモニタによって、前記コンピューティング装置のソースバーチャルマシンのビュースイッチコンポーネントを、該ソースバーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証し、
前記ソースバーチャルマシンによって、該ソースバーチャルマシンのビュースイッチコンポーネントを用いて、該ビュースイッチコンポーネントを認証することに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替え、
前記ソースバーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスする
ことを更に有し、
前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記バーチャルマシンモニタによって確立された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する、
請求項１６に記載の方法。
【請求項２１】
前記ソースバーチャルマシンによって、第２の共有メモリセグメントを前記バーチャルマシンモニタに登録することを更に有し、
前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記第２の共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを更に有し、
前記対象バーチャルマシンによって前記共有メモリセグメントにアクセスすることは、前記対象バーチャルマシンによって前記第２の共有メモリセグメントにアクセスすることを更に有する、
請求項２０に記載の方法。
【請求項２２】
前記ソースバーチャルマシンによって、前記第２の共有メモリセグメントに含まれる、前記対象バーチャルマシンによって処理されるべき共有バッファを生成し、
前記対象バーチャルマシンによって、前記共有メモリセグメントにアクセスすることに応答して前記共有バッファを処理し、
前記対象バーチャルマシン及び前記ソースバーチャルマシンによって、前記バーチャルマシンモニタに確立された前記共有メモリセグメントに格納されているセキュアビュー制御構造を用いて前記共有バッファの所有権を協調させる
ことを更に有する
請求項２１に記載の方法。
【請求項２３】
コンピューティング装置であって、
プロセッサと、
前記プロセッサによって実行される場合に、当該コンピューティング装置に請求項１６乃至２２のうちいずれか一項に記載の方法を実行させる複数の命令を記憶しているメモリと
を有するコンピューティング装置。
【請求項２４】
実行されることに応答して、コンピューティング装置が請求項１６乃至２２のうちいずれか一項に記載の方法を実行することを生じさせる複数の命令を記憶している１以上の機械可読記憶媒体。
【請求項２５】
請求項１６乃至２２のうちいずれか一項に記載の方法を実行する手段を有するコンピューティング装置。
【発明の詳細な説明】
【背景技術】
【０００１】
電気通信及び他のデータネットワーク機能は、ますますネットワークデータセンタに整理統合されつつある。例えば、多くのセルタワーの間でこれまで分配されてきたセルラー基地局機能は、現在、仮想ネットワークデータセンタに整理統合されてよい。例えばパケットスイッチング及びパケットフィルタリングなどのネットワーク機能は、通常は、大量のスモールデータパケットを処理することを必要とする。しかし、そのようなネットワーク機能を１以上のバーチャルマシンにおいて実行することは、バーチャルマシンの分離境界（例えば、メモリ又はＩ／Ｏ分離）に関連するオーバヘッドを導入することがある。オーバヘッドは、特に、スモールデータパケットのバーチャルマシン間通信について、ネットワーク機能仮想化のスループット及びスケーラビリティを制限することがある。
【０００２】
典型的なコンピュータプロセッサは、仮想化動作のためのハードウェアサポートを含む。ソフトウェア仮想化は、ホストオペレーティングシステム又はバーチャルマシンモニタ（ＶＭＭ；virtual  machine  monitor）内から１以上のゲストオペレーティングシステムをトランスペアレントに実行することを含む。ハードウェア仮想化機能は、拡張特権モデル、バーチャルメモリアドレッシングのためのハードウェア支援サポート、拡張メモリ許可のためのサポート、及び他の仮想化機能を含んでよい。
【図面の簡単な説明】
【０００３】
ここで記載される概念は、添付の図面において、限定ではなく一例として、表されている。説明の簡単さ及び明りょうさのために、図に表されている要素は必ずしも実寸通りではない。必要に応じて、参照符号は、対応する又は同じ要素を示すために、複数の図において繰り返されている。
【図１】セキュアなバーチャルマシン間の共有メモリ通信のためのコンピューティング装置の少なくとも一実施形態の略ブロック図である。
【図２】図１のコンピューティング装置の環境の少なくとも一実施形態の略ブロック図である。
【図３】図１及び２のコンピューティング装置によって実行され得るセキュアなバーチャルマシン間の共有メモリ通信管理のための方法の少なくとも一実施形態の略フロー図である。
【図４】図１及び２のコンピューティング装置によって確立され得るバーチャルメモリページテーブル構造を表す概略図である。
【図５】図１及び２のコンピューティング装置によって実行され得る共有メモリのアクセス方法の少なくとも一実施形態の略フロー図である。
【図６】図１及び２のコンピューティング装置によって実行され得る共有メモリのアクセス許可方法の少なくとも一実施形態の略フロー図である。
【図７】図１及び２のコンピューティング装置によって確立され得るセキュアビュー制御構造を表す概略図である。
【図８】図１及び２のコンピューティング装置によって実行され得る共有メモリバッファの所有権獲得方法の少なくとも一実施形態の略フロー図である。
【図９】図１及び２のコンピューティング装置によって実行され得る共有メモリバッファの所有権の移譲及び再要求の方法の少なくとも一実施形態の略フロー図である。
【発明を実施するための形態】
【０００４】
本開示の概念は、様々な変更及び代替の形態の余地があり、一方、それらの具体的な実施形態は、図面において一例として示されており、ここで詳細に記載される。なお、本開示の概念を、開示されている特定の形態に制限する意図はなく、それどころか、その意図は、本開示及び添付の特許請求の範囲と整合する全ての変更、同等物、及び代替を対象とすることである点が理解されるべきである。
【０００５】
「一実施形態」、「実施形態」、「実例となる実施形態」等との明細書中の言及は、記載されている実施形態が特定の機能、構造、又は特徴を含んでよいが、あらゆる実施形態が必ずしもその特定の機能、構造、又は特徴を含んでも含まなくてもよいことを示す。加えて、そのような言い回しは、必ずしも同じ実施形態に言及しているわけではない。更に、特定の機能、構造、又は特徴がある実施形態に関連して記載される場合に、そのような機能、構造、又は特徴を他の実施形態に関連して達成することは、明示的に記載されていようがなかろうが、当業者の通常の知識範囲内にあると考えられる。加えて、当然ながら、「Ａ、Ｂ、及びＣのうちの少なくとも１つ」の形で列挙されている項目は、（Ａ）；（Ｂ）；（Ｃ）；（Ａ及びＢ）；（Ａ及びＣ）；（Ｂ及びＣ）；又は（Ａ、Ｂ及びＣ）を意味することができる。同様に、「Ａ、Ｂ、又はＣのうちの少なくとも１つ」の形で列挙されている項目は、（Ａ）；（Ｂ）；（Ｃ）；（Ａ及びＢ）；（Ａ及びＣ）；（Ｂ及びＣ）；又は（Ａ、Ｂ及びＣ）を意味することができる。
【０００６】
開示されている実施形態は、幾つかの場合に、ハードウェア、ファームウェア、ソフトウェア、又はそれらのいずれかの組み合わせにおいて実装されてよい。開示されている実施形態は、１以上のプロセッサによって読み出されて実行され得る一時的又は非一時的な機械可読（例えば、コンピュータ可読）記憶媒体によって搬送されるか又はそれに記憶される命令としても実装されてよい。機械可読記憶媒体は、機械によって読み出し可能な形で情報を記憶又は送信するための何らかの記憶デバイス、メカニズム、又は他の物理構造として具現されてよい（例えば、揮発性若しくは不揮発性メモリ、メディアディスク、又は他のメディアデバイス）。
【０００７】
図面において、幾つかの構造又は方法機能は、具体的な配置及び／又は順序において示されてよい。しかし、当然ながら、そのような具体的な配置及び／順序は必要とされなくてよい。むしろ、幾つかの実施形態では、そのような機能は、説明図において示されているのとは異なった様態及び／又は順番において配置されてよい。加えて、特定の図における構造又は方法機能の包含は、そのような機能が全ての実施形態において必要とされることを暗示するよう意図されず、幾つかの実施形態では、含まれなくてよく、あるいは、他の機能と組み合わされてよい。
【０００８】
これより図１を参照すると、セキュアなバーチャルマシン間の共有メモリ通信のための実例となるコンピューティング装置１００は、プロセッサ１２０、Ｉ／Ｏサブシステム１２８、メモリ１３０、及びデータ記憶装置１３８を含む。使用において、後述されるように、コンピューティング装置１００は、２以上のバーチャルマシン間のセキュアな共有メモリ通信をサポートするよう構成される。特に、対象バーチャルマシン、すなわち、他のソースバーチャルマシンの共有メモリデータにアクセスするバーチャルマシンは、バーチャルマシンモニタ（ＶＭＭ）によりビュースイッチコンポーネントを認証する。認証は、ＶＭＭが共有メモリデータへのアクセスを制御及び制限することを可能にする。対象バーチャルマシンは、共有メモリセグメントへのアクセスを要求する。共有メモリセグメントは、ＶＭＭ自身によって確立された共有メモリ又はソースバーチャルマシンのメモリページを含んでよい。ＶＭＭは、要求された共有メモリセグメントを、コンピューティング装置１００のセキュアビュー拡張ページテーブル（ＥＰＴ；extended  page  table）に加える。対象バーチャルマシンは、プロセッサ１２０の仮想化サポートを用いてセキュアビューＥＰＴへ切り替え、次いで、共有メモリセグメントへの通常のメモリアクセスを実行することによって、共有メモリにアクセスしてよい。対象バーチャルマシンは、ソースバーチャルマシンの全てのメモリへのアクセスを有してよく、あるいは、幾つかの実施形態では、ソースバーチャルマシンは、特定の共有メモリセグメントをＶＭＭに登録してよい。
【０００９】
セキュアビューを介して通信することによって、コンピューティング装置１００は、夫々のアクセスについてバーチャルマシン終了、ハイパーコール、又はＶＭＭの他の起動を必要とせずに共有メモリへのセキュアアクセスを可能にすることができる。よって、コンピューティング装置１００は、例えば、ＶＭＭへの不必要なコンテキストスイッチを取り除くことによって、又は引き起こされるＥＰＴ無効の回数を減らすことによって、共有メモリ性能を改善することができる。改善された共有メモリ性能は、スモールデータパケット（例えば、６３バイトのパケット）のために、又は多数のプロセッサコアのために、バーチャルマシン間の共有メモリ通信を実現可能にすることができる。このことは、つまり、ネットワーク機能仮想化の性能を改善することができる。加えて、対象バーチャルマシン及びソースバーチャルマシンは、共有メモリセグメントを用いて共有メモリバッファの所有権を協調させてよい。メモリバッファ所有権の協調は、不必要なＥＰＴ無効を回避することによって、性能を改善することができる。
【００１０】
コンピューティング装置１００は、バーチャルマシン間の共有メモリ通信を実行すること及びここで記載される機能を別なふうに実行することが可能な如何なるタイプのデバイスとしても具現されてよい。例えば、コンピューティング装置１００は、制限なしに、ワークステーション、サーバコンピュータ、分散型コンピューティングシステム、マルチプロセッサシステム、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、スマートフォン、モバイル型コンピューティング装置、ウェラブル型コンピューティング装置、コンピュータ、デスクトップコンピュータ、消費者電子装置、スマート電気製品、及び／又はバーチャルマシン間の共有メモリ通信が可能な如何なる他のコンピューティング装置としても具現されてよい。図１に示されるように、実例となるコンピューティング装置１００は、プロセッサ１２０、Ｉ／Ｏサブシステム１２８、メモリ１３０、及びデータ記憶装置１３８を含む。当然に、コンピューティング装置１００は、他の実施形態では、例えば、タブレットコンピュータにおいて一般的に見られるようなもの（例えば、様々な入出力装置）などの、他の又は更なるコンポーネントを含んでよい。加えて、幾つかの実施形態では、実例となるコンポーネントのうちの１以上は、他のコンポーネントにおいて組み込まれるか、あるいは、その部分を別なふうに形成してよい。例えば、メモリ１３０、又はその部分は、幾つかの実施形態では、プロセッサ１２０に組み込まれてよい。
【００１１】
プロセッサ１２０は、ここで記載される機能を実行することが可能な如何なるタイプのプロセッサとしても具現されてよい。例えば、プロセッサ１２０は、シングル若しくはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラ、又は他のプロセッサ若しくはプロセッシング／制御回路として具現されてよい。加えて、単一のプロセッサ１２０を含むものとして表されているが、幾つかの実施形態では、コンピューティング装置１００は複数のプロセッサ１２０を含んでよいことが理解されるべきである。プロセッサ１２０は、仮想化のためのハードウェアベースの、ハードウェア支援の、又はハードウェアにより促進されたサポートを含む。特に、プロセッサ１２０は、バーチャルマシン拡張（ＶＭＸ；virtual  machine  extensions）サポート１２２、拡張ページテーブル（ＥＰＴ）サポート１２４、及びファストビュースイッチ（ＦＶＳ；fast  view  switch）サポート１２６を含む。ＶＭＸサポート１２２は、２つの実行モード、すなわち、ＶＭＸルートモード及びＶＭＸ非ルートモードを提供することによって、オペレーティングシステムの仮想実行をサポートする。ＶＭＸルートモードは、ソフトウェアがコンピューティング装置１００及びそのハードウェアリソースの幅広い制御を持つことを可能にする。然るに、バーチャルマシンモニタ（ＶＭＭ）又はハイパーバイザはＶＭＸルートモードにおいて実行してよい。ＶＭＸ非ルートモードは、プロセッサ１２０の通常のリング／特権システムを依然として実装しながら、特定のハードウェア命令へのアクセスを制限する。よって、１以上のゲストバーチャルマシン（ＶＭ；virtual  machine）及び／又はオペレーティングシステム（ＯＳ；operating  system）は、ＶＭＸ非ルートモードを実行してよい。そのようなゲストＯＳは、仮想化によらない実行と同様に、リング０において実行してよい。特定のハードウェア命令の実行及び特定の他のシステムイベントは、ＶＭＸルートモードへのハードウェア支援の移行をトリガしてよい。そのようなハードウェア支援の移行は、バーチャルマシン終了（ＶＭＥｘｉｔ）又はハイパーコールとして一般に知られている。ＶＭＥｘｉｔに直面すると、プロセッサ１２０は、ＶＭＥｘｉｔを扱うために、ゲストＶＭからＶＭＭへコンテキストを切り替えてよい。よって、ＶＭＥｘｉｔは、性能に不利な条件を仮想コードに課すことがある。ＶＭＸサポート１２２は、例えば、Ｉｎｔｅｌ（登録商標）のＶＴ−ｘテクノロジとして具現されてよい。
【００１２】
ＥＰＴサポート１２４は、ハードウェア支援のセカンドレベル・ページアドレス変換をサポートする。仮想化されていないワークロードについて（すなわち、ＶＭＸルートモードにおいて動作する場合に）、プロセッサ１２０は、バーチャルメモリアドレス（線形アドレスとしても知られる。）と物理メモリアドレスの間のハードウェア支援の変換を提供してよい。プロセッサ１２０は、メモリ１３０に格納されており、ホストオペレーティングシステム、ハイパーバイザ、又はＶＭＭによって管理される１以上のページテーブル構造を用いて、メモリアドレスを変換してよい。仮想化されたワークロードについて（すなわち、ＶＭＸ非ルートモードにおいて動作する場合に）、プロセッサ１２０は、バーチャルメモリアドレス（例えば、ゲストＶＭ内で実行するアプリケーションによって使用される。）とゲスト物理メモリアドレスとの間のハードウェア支援の変換をサポートする。ゲストＯＳは、ゲスト物理メモリアドレスへの変換を管理するために、メモリ１３０において１以上のページテーブル構造を保持してよい。しかし、ゲスト物理メモリアドレスは、メモリ１３０内の実際の物理メモリアドレスに対応しないことがある。ＥＰＴサポート１２４は、ゲスト物理メモリアドレスと物理メモリアドレス（ホスト物理メモリアドレスとしても知られる。）との間のハードウェア支援の変換を提供する。ＥＰＴサポート１２４は、メモリ１３０に格納されており、ＶＭＭ又はハイパーバイザによって管理される１以上の拡張ページテーブル構造を用いて、メモリアドレスを変換してよい。ＥＰＴサポート１２４によらないと、ゲスト物理メモリアドレスと物理メモリアドレスとの間の変換は１以上のＶＭＥｘｉｔを必要とすることがある。ＥＰＴサポート１２４はまた、アクセス許可を夫々のゲスト物理ページ及び／又は物理ページと関連付けることをサポートしてよい（例えば、読み出し、書き込み、及び／又は実行の許可）。許可違反は、ＥＰＴ違反として知られてよく、ＶＭＭ又はハイパーバイザがＥＰＴ違反を扱うことを可能にするＶＭＥｘｉｔを生成してよい。加えて、又は代替的に、幾つかの実施形態では、許可違反は、ゲストＯＳによって扱われ得る仮想化例外を生成してよい。ＥＰＴサポート１２４は、例えば、Ｉｎｔｅｌ（登録商標）のＶＴ−ｘテクノロジとして具現されてよい。
【００１３】
ＦＶＳサポート１２６は、プロセッサ１２０が、ＶＭＸルートモードへのＶＭＥｘｉｔを必要とせずに、２以上のメモリビューの間で高速に且つ原子的に切り替わることを可能にする。メモリビューは、ＥＰＴによって定義されたゲスト物理ページマッピング及び関連する許可を含み、よって、ＥＰＴと一対一で対応してよい。ＦＶＳサポート１２６は、異なるＥＰＴ構造を指し示すようメモリ内のバーチャルマシン制御構造（ＶＭＣＳ；virtual  machine  control  structure）内でポインタを変更することによって、メモリビューを切り替えることをサポートしてよい。幾つかの実施形態では、ＦＶＳサポート１２６は、ＶＭＸ非ルートモードにあるソフトウェアが、ＶＭＸルートモード内で実行するソフトウェアによって予め定義されている幾つかのメモリビューの中から１つを選択することを可能にしてよい。然るに、ＦＶＳサポート１２６は、ゲストＶＭ（例えば、ゲストＶＭにおいて実行されるゲストＯＳ又はアプリケーションソフトウェア）が、ＶＭＭ又はハイパーバイザへの潜在的に高価なコンテキストスイッチを必要とせずに、メモリビュー間を切り替えることを可能にしてよい。ＦＶＳサポート１２６は、例えば、特定のＩｎｔｅｌ（登録商標）プロセッサによってサポートされるＶＭＦＵＮＣ命令などの、特殊化したプロセッサ命令として具現されてよい。
【００１４】
メモリ１３０は、ここで記載される機能を実行することが可能な如何なるタイプの揮発性又は不揮発性のメモリ又はデータストレージとしても具現されてよい。動作において、メモリ１３０は、例えばオペレーティングシステム、アプリケーション、プログラム、ライブラリ、及びドライバなどの、コンピューティング装置１００の動作中に使用される様々なデータ及びソフトウェアを記憶してよい。メモリ１３０は、ページとして知られる固定サイズのセグメントに細分されてよい。夫々のページは、例えば、４０９６バイトのデータを含んでよい。メモリ１３０は、ゲストページテーブル１３２、１以上の拡張ページテーブル（ＥＰＴ）１３４、及び１以上の拡張ページテーブルポインタ（ＥＰＴＰ）１３６を更に含む。ゲストページテーブル１３２は、バーチャルメモリページとゲスト物理メモリページとの間のマッピングを記憶する。上述されたように、ゲストページテーブル１３２は、バーチャルメモリアドレスとゲスト物理メモリアドレスとの間を変換するためにプロセッサ１２０によって使用されてよい。夫々のＥＰＴ１３４は、ゲスト物理メモリページと物理メモリページとの間のマッピングを記憶する。上述されたように、夫々のＥＰＴ１３４は、ゲスト物理メモリアドレスと物理メモリアドレスとの間を変換するためにプロセッサ１２０のＥＰＴサポート１２４によって使用されてよい。夫々のＥＰＴ１３４は、夫々のゲスト物理ページのためのアクセス許可（例えば、読み出し、書き込み、及び／又は実行）を更に含んでよい。ゲストページテーブル１３２及びＥＰＴ１３４はいずれも、例えばアレイ、リスト、連想アレイ、ネスト化した若しくは階層的なアレイ、又は他のデータ構造などの、１以上のメモリ内データ構造として具現されてよい。ＥＰＴＰ１３６は、現在アクティブなＥＰＴ１３４を特定するためにプロセッサ１２０によって使用されてよい。よって、ゲストＶＭと関連付けられるＥＰＴＰ１３６を変更することは、コンピューティング装置１００が、ゲストＶＭのための物理メモリマッピングを即座に変更することを可能にしてよい。上述されたように、ＥＰＴＰ１３６は、ＦＶＳサポート１２６によって管理されてよい。
【００１５】
メモリ１３０は、Ｉ／Ｏサブシステム１２８を介してプロセッサ１２０へ通信上結合されている。Ｉ／Ｏサブシステム１２８は、プロセッサ１２０、メモリ１３０、及びコンピューティング装置１００の他のコンポーネントによる入出力動作を助ける回路及び／又はコンポーネントとして具現されてよい。例えば、Ｉ／Ｏサブシステム１２８は、メモリコントローラハブ、入出力制御ハブ、ファームウェア装置、通信リンク（すなわち、ポイント・ツー・ポイントリンク、バスリンク、ワイヤ、ケーブル、光導波路、印刷回路基板トレース、等）、並びに／又は入出力動作を助ける他のコンポーネント及びサブシステムとして具現されるか、あるいは、別なふうにそれらを含んでよい。幾つかの実施形態では、Ｉ／Ｏサブシステム１２８は、システム・オン・チップ（ＳｏＣ）の部分を形成し、プロセッサ１２０、メモリ１３０、及びコンピューティング装置１００の他のコンポーネントとともに、単一の集積回路チップにおいて組み込まれてよい。
【００１６】
データ記憶装置１３８は、例えば、メモリ装置及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、又は他のデータ記憶装置などの、データの短期又は長期記憶のために構成される如何なるタイプの装置又は複数の装置としても具現されてよい。コンピューティング装置１００は、通信サブシステム１４０を更に含んでよい。通信サブシステム１４０は、ネットワーク上でのコンピューティング装置１００と他の遠隔装置との間の通信を可能にすることができる如何なる通信回路、装置、ネットワークインタフェースコントローラ、又はそれらの集合としても具現されてよい。通信サブシステム１４０は、そのような通信を達成するために、如何なる１以上の通信技術（例えば、優先又は無線通信）及び関連するプロトコル（例えば、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸ、等）も使用するよう構成されてよい。
【００１７】
幾つかの実施形態において、コンピューティング装置１００は、１以上の周辺装置１４２を更に含んでよい。周辺装置１４２は、如何なる数の付加的な入出力装置、インタフェース装置、及び／又は他の周辺装置も含んでよい。例えば、幾つかの実施形態において、周辺装置１４２は、ディスプレイ、タッチスクリーン、グラフィクス回路、キーボード、マウス、スピーカシステム、及び／又は他の入出力装置、インタフェース装置、及び／又は周辺装置を含んでよい。
【００１８】
これより図２を参照すると、実例となる実施形態において、コンピューティング装置１００は、動作中に環境２００を確立する。実例となる実施形態２００は、バーチャルマシンモニタ（ＶＭＭ）２０２、対象バーチャルマシン２０４、及びソースバーチャルマシン２０６を含む。２つのバーチャルマシン（ＶＭ）を含むものとして表されているが、他の実施形態は、更なるＶＭを含んでよい点が理解されるべきである。ＶＭＭ２０２は、認証モジュール２０８、セキュアビューモジュール２１０、及び共有メモリモジュール２１２を含む。対象バーチャルマシン２０４は、データアクセスモジュール２１８、バッファ所有権モジュール２２２、ビュースイッチモジュール２２４、及びセキュアビュー２２８を含む。ソースバーチャルマシン２０６は、データアクセスモジュール２１８、アクセス制御モジュール２３０、バッファ所有権モジュール２２２、ビュースイッチモジュール２２４、及びセキュアビュー２２８を含む。環境２００の様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、又はそれらの組み合わせとして具現されてよい。例えば、環境２００のモジュール、ロジック、及び他のコンポーネントの夫々は、プロセッサ１２０又はコンピューティング装置１００の他のハードウェアコンポーネントの部分を形成するか、あるいは、それらによって別なふうに確立されてよい。
【００１９】
ＶＭＭ２０２の認証モジュール２０８は、対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６のビュースイッチコンポーネント２２６を認証するよう構成される。認証モジュール２０８は、例えば、ビュースイッチコンポーネント２２６に関連する１以上のデジタルシグニチャ又はクレデンシャルを照合することなどの、ビュースイッチコンポーネント２２６が信頼できるかどうかを判断することが可能な如何なる適切な認証プロセスも実行してよい。ビュースイッチコンポーネント２２６は、メモリビューを切り替えてセキュアビュー２２８にアクセスするために使用され得る如何なるゲストオペレーティングシステムカーネル、カーネルモジュール、ドライバ、インタフェース、ユーザ空間アプリケーション、又は他のコンポーネントとしても具現されてよい。認証後、ビュースイッチコンポーネント２２６は、ＶＭＭとの更なるインタラクションなしでセキュアビュー２２８へ切り替えることが可能であってよい。よって、ビュースイッチコンポーネント２２６の認証は、セキュアビュー２２８のセキュリティ、プライバシ、及び／又はインテグリティを保護することができる。
【００２０】
ＶＭＭ２０２のセキュアビューモジュール２１０は、ビュースイッチコンポーネント２２６の認証が成功した場合に共有メモリセグメントへのアクセスを可能にするようにセキュアビュー２２８を設定するよう構成される。セキュアビュー２２８は、対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６によって使用されるコンピューティング装置１００の物理メモリマップを定義する。例えば、セキュアビュー２２８は、コンピューティング装置１００の１以上のＥＰＴ１３４を変更することによって設定されてよい。よって、セキュアビュー２２８は、対象バーチャルマシン２０４が、通常のメモリアクセス命令により、ソースバーチャルマシン２０６及び／又はＶＭＭ２０２に関連する物理メモリページに直接アクセスすることを可能にしてよい。
【００２１】
ＶＭＭ２０２の共有メモリモジュール２１２は、対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６によってソースビュー２２８を介してアクセスされ得る共有メモリセグメント２１４を確立するよう構成される。共有メモリセグメント２１４は、例えば、ＶＭＭ２０２のヒープにおいて、確立されてよい。共有メモリセグメント２１４は、バーチャルマシン２０４，２０６及び／又はＶＭＭ２０２の間のセキュアなバーチャルメモリ間通信のために使用されてよい。幾つかの実施形態において、共有メモリモジュール２１２は、１以上のセキュアビュー制御構造（ＳＶＣＳ；secure  view  control  structure）２１６を確立してよい。特に、共有メモリモジュール２１２は、夫々のセキュアビュー２２８についてＳＶＣＳ２１６を確立してよい。夫々のＳＶＣＳ２１６は、共有メモリセグメント２１４内に含まれるか、あるいは、別個に確立されてよい。更に後述されるように、ＳＶＣＳ２１６は、メモリバッファの所有権の移譲を協調させるためにバーチャルマシン２０４，２０６によって使用されてよい。
【００２２】
対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６のビュースイッチモジュール２２４は、バーチャルマシン終了（ＶＭＥｘｉｔ）イベントを発生させずにデフォルトのメモリビューからセキュアビュー２２８へ切り替えるよう構成される。ビュースイッチモジュール２２４は、ＶＭＥｘｉｔイベントを発生させずにビューを切り替えるために、プロセッサ１２０のファストビュースイッチサポート１２６を使用してよい。上述されたように、ビュースイッチモジュール２２４は、ビュースイッチを実行するビュースイッチコンポーネント２２６を含んでよい。ビュースイッチコンポーネント２２６は、セキュアビュー２２８への切り替えより前に、ＶＭＭ２０２によって認証されてよい。
【００２３】
対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６のバッファ所有権モジュール２２２は、ＶＭＭ２０２によって確立されたＳＶＣＳ２１６を用いて、ソースバーチャルマシン２０６から対象バーチャルマシン２０４へのメモリバッファの所有権の移譲を協調させるよう構成される。特に、セキュアビュー２２８内のメモリバッファの所有権は、ソースバーチャルマシン２０６から対象バーチャルマシン２０４へ移されてよく、バッファは、対象バーチャルマシン２０４がそれらのバッファの所有権を受けた後に、対象バーチャルマシン２０４によって処理されてよい。ソースビュー２２８が予め定義された容量を超えて満たされている場合に、ソースバーチャルマシン２０６は、対象バーチャルマシン２０４によって既に処理されているバッファを再要求してよく、ＶＭＭ２０２は、セキュアビュー２２８をクリアし、ＥＰＴ１３４を無効にしてよい。
【００２４】
対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６のデータアクセスモジュール２１８は、共有メモリセグメントにおけるデータにアクセスするよう構成される。データアクセスモジュール２１８は、１以上の共有メモリバッファに含まれているデータを読み出し、データを１以上の共有メモリバッファに書き込み、あるいは、ＶＭＭ２０２によって確立された共有メモリセグメント２１４におけるデータにアクセスしてよい。データアクセスモジュール２１８は、データアクセスを実行する１以上のアプリケーション２２０を含んでよい。アプリケーション２２０は、例えばルータ、ファイアウォール、バーチャルスイッチ、ミドルボックス、又は他のバーチャルネットワークアプライアンスなどのネットワーク機能アプリケーションを含んでよい。よって、アクセスされる共有メモリバッファは、受信キュー、送信キュー、ネットワークパケットバッファ、又は他のネットワークＩ／Ｏデータを含んでよい。
【００２５】
ソースバーチャルマシン２０６のアクセス制御モジュール２３０は、共有メモリセグメントをＶＭＭ２０２に登録するよう構成される。共有メモリセグメントを登録することは、ソースバーチャルマシン２０６がそれ自身のメモリ空間の特定のセグメントへのアクセスを制御することを可能にする。アクセス制御モジュール２３０は許可テーブル２３２を保持してよい。許可テーブル２３２は、対象バーチャルマシン２０４と共有されるべきソースバーチャルマシン２０６のゲスト物理ページへの参照を含む。
【００２６】
これより図３を参照すると、使用において、コンピューティング装置１００は、セキュアなバーチャルマシン間の共有メモリ通信を管理する方法３００を実行してよい。方法３００は、ＶＭＭ２０２によって実行されてよく、よって、ＥＰＴ１３４を管理する能力を含め、コンピューティング装置１００へのフルアクセスを持つＶＭＸルートモードにおいて実行してよい。方法３００は、ブロック３０２から開始する。ブロック３０２で、コンピューティング装置１００は、バーチャルマシン２０４，２０６のビュースイッチコンポーネント２２６を認証するためのリクエストを受け取る。バーチャルマシン２０４，２０６は、セキュアビュー２２８へのアクセスを許可されるより前に、ビュースイッチコンポーネント２２６の認証を要求する。バーチャルマシン２０４，２０６は、ＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことによって、認証を要求してよい。
【００２７】
ブロック３０４で、コンピューティング装置１００は、要求されたビュースイッチコンポーネント２２６を認証する。ビュースイッチコンポーネント２２６は、メモリビューを切り替えてセキュアビュー２２８にアクセスするために使用され得る如何なるゲストオペレーティングシステムカーネル、カーネルモジュール、ドライバ、インタフェース、ユーザ空間アプリケーション、又は他のコンポーネントとしても具現されてよい。コンピューティング装置１００は、ビュースイッチコンポーネント２２６が認証されること及び／又は改ざんされていないことを確認し、照合し、証明し、又は別なふうに判断するための如何なる技術も用いて、ビュースイッチコンポーネント２２６を認証してよい。例えば、コンピューティング装置１００は、ビュースイッチコンポーネント２２６に関連する１以上のデジタルシグニチャ又はクレデンシャルを照合してよい。ビュースイッチコンポーネント２２６が証明されない場合は、コンピューティング装置１００は、エラーメッセージを生成するか、あるいは、未証明のビュースイッチコンポーネント２２６がセキュアビュー２２８へのアクセスを有効にすることを可能にするのを別なふうに拒んでよい。
【００２８】
ブロック３０６で、コンピューティング装置１００は、更なるバーチャルマシン２０４，２０６が、認証されたビュースイッチコンポーネント２２６を有するべきかどうかを判断する。例えば、複数の対象バーチャルマシン２０４が、共有メモリにアクセスするために認証を求めることがある。他の例として、対象バーチャルマシン２０４及びソースバーチャルマシン２０６の両方が、ＶＭＭ２０２によって確立された共有メモリセグメント２１４を用いてセキュアチャネルにわたって通信するために認証を求めることがある。更なるＶＭが認証されるべき場合は、方法３００はブロック３０２に折り返す。更なるＶＭが認証されるべきでない場合は、方法３００はブロック３０８へ進む。
【００２９】
ブロック３０８で、コンピューティング装置１００は、ソースバーチャルマシン２０６が共有メモリページへのアクセスを選択的に許可することを可能にすべきかどうかを判断する。そうでない場合は、方法３００は、後述されるブロック３１６の前へと分岐する。選択的なアクセスが許可されるべき場合は、方法３００はブロック３１０へ進む。
【００３０】
ブロック３１０で、コンピューティング装置１００は、ソースバーチャルマシン２０６から共有メモリセグメントの登録を受け取る。登録は、ソースバーチャルマシン２０６から対象バーチャルマシン２０４へ共有されるべきゲスト物理メモリページ、セグメント、又は他の範囲を記述する。ソースバーチャルマシン２０６は、ＶＭＥｘｉｔ若しくはハイパーコールを実行すること、ソースバーチャルマシン２０６のゲスト物理メモリへ書き込むこと、又は別なふうにＶＭＭ２０２を呼び出すことを含む如何なる適切な技術も用いて、共有メモリセグメントをＶＭＭ２０２に登録してよい。幾つかの実施形態において、ブロック３１２で、コンピューティング装置１００は、ソースバーチャルマシン２０６から許可テーブル２３２を受け取ってよい。許可テーブル２３２は、対象バーチャルマシン２０４と共有されるべきゲスト物理ページを特定する。許可テーブル２３２はソースバーチャルマシン２０６に位置し、そのゲスト物理ページを参照するので、ソースバーチャルマシン２０６は、ＶＭＭ２０２を呼び出すことなしに許可テーブル２３２を生成してよい。加えて、ＶＭＭ２０２は、メモリ１３０内の適当な位置で、すなわち、許可テーブル２３２の更なるコピーを生成せずに、許可テーブル２３２を処理してよい。
【００３１】
幾つかの実施形態において、ブロック３１４で、コンピューティング装置１００は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４を共有するためのソースバーチャルマシン２０６からのリクエストを受け取ってよい。ソースバーチャルマシン２０６は、如何なる適切なフォーマットも用いてリクエストを生成してよい。例えば、ソースバーチャルマシン２０６は、セキュアビュー２２８内に格納されているページを特定するよう許可テーブル２３２を更新することによって、共有メモリセグメント２１４へのアクセスを要求してよい。よって、そのような実施形態では、コンピューティング装置１００は、ソースバーチャルマシン２０６のビュースイッチコンポーネント２２６を前もって認証していてよい。
【００３２】
ブロック３１６で、コンピューティング装置１００は、共有メモリセグメントにアクセスするための対象バーチャルマシン２０４からのリクエストを受け取る。対象バーチャルマシン２０４は、ソースバーチャルマシン２０６の共有メモリページへの及び／又はＶＭＭ２０２によって確立された共有メモリセグメント２１４へのアクセスを要求してよい。対象バーチャルマシン２０４は、ＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことによって、アクセスを要求してよい。
【００３３】
ブロック３１８で、コンピューティング装置１００は、適切なＥＰＴ１３４を変更することによって、要求された共有メモリセグメントを対象バーチャルマシン２０４のセキュアビュー２２８に加える。ＥＰＴ１３４を変更した後、対象バーチャルマシン２０４のゲスト物理ページは、要求された共有メモリセグメントに対応する物理メモリページにマッピングされる。よって、対象バーチャルマシン２０４によって実行されるカーネル及び／又はユーザモードのソフトウェアは、対象バーチャルマシン２０４のバーチャルメモリ空間を通じてそれらのページにアクセスしてよい。幾つかの実施形態において、ブロック３２０で、コンピューティング装置１００は、ソースバーチャルマシン２０６の全てのゲスト物理ページをセキュアビューＥＰＴ１３４に加えてよい。よって、そのような実施形態では、対象バーチャルマシン２０４は、例えば送信キュー、受信キュー、及びパケットデータなどのアプリケーションデータ、カーネルデータ、及びＩ／Ｏデータを含むソースバーチャルマシン２０６の全てのデータへのフルアクセスを許可され得る。加えて、又は代替的に、幾つかの実施形態において、ソースバーチャルマシン２０６の共有データの一部又は全ては、コンピューティング装置１００のハードウェアへ、例えば通信サブシステム１４０へ直接マッピングされてよい。例えば、ソースバーチャルマシン２０６の１以上のバッファは、例えば、Ｉｎｔｅｌ（登録商標）のＶＴ−ｄテクノロジ又はシングルルートＩ／Ｏ仮想化（ＳＲ−ＩＯＶ；single  root  I/O  virtualization）などの仮想化技術を用いて、ＮＩＣ、ポート、バーチャル機能、又は通信サブシステム１４０の他のコンポーネントへ直接マッピングされてよい。
【００３４】
幾つかの実施形態において、ブロック３２２で、コンピューティング装置１００は、ソースバーチャルマシン２０６によって前もって登録されているソースバーチャルマシン２０６のゲスト物理ページを加えてよい。例えば、コンピューティング装置１００は、ソースバーチャルマシン２０６の許可テーブル２３２を調べ、許可テーブル２３２において特定されるゲスト物理ページの全てを加えてよい。よって、ソースバーチャルマシン２０６は、自身のゲスト物理メモリページへのアクセスを制限してよい。幾つかの実施形態において、ブロック３２４で、コンピューティング装置１００は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４をセキュアビューＥＰＴ１３４に加えてよい。
【００３５】
セキュアビューＥＰＴ１３４を変更した後、方法３００は、更なるバーチャルマシンを認証するようブロック３０２に折り返す。図５及び６に関連して更に後述されるように、セキュアビューＥＰＴ１３４を変更した後、対象バーチャルマシン２０４及び／又はソースバーチャルマシン２０６は、更なるＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことなしで、共有メモリページにアクセスしてよい。
【００３６】
これより図４を参照すると、概略図４００は、バーチャルマシン間の共有メモリ通信を提供するよう確立され得るページテーブル構造の起こり得る実施形態を表す。ブロック４０２は、ソースバーチャルマシン２０６のバーチャルメモリレイアウトを表す。例示のために、ソースバーチャルマシン２０６は単一バッファ４０４を含む。バッファ４０４は、如何なる共有メモリデータ構造としても具現されてよい。例えば、バッファ４０４は、送信キュー、受信キュー、又は他のネットワークＩ／Ｏデータ構造を含むか、あるいは、それらとして別なふうに具現されてよい。図示されるように、バッファ４０４はバーチャルページ４０６に位置する。ブロック４０８は、ソースバーチャルマシン２０６のゲスト物理レイアウトを表す。図示されるように、バッファ４０４はゲスト物理ページ４１０に位置する。ゲストページテーブル１３２ａは、ソースバーチャルマシン２０６のゲストＯＳによって保持されてよく、バーチャルメモリ４０２のバーチャルページとゲスト物理メモリ４０８のゲスト物理ページとの間をマッピングする。図示されるように、ゲストページテーブル１３２ａは、バーチャルページ４０６をゲスト物理ページ４１０にマッピングする。
【００３７】
図４００は、物理メモリ１３０のレイアウトを更に表す。図示されるように、バッファ４０４は、物理メモリ１３０内の物理ページ４１２に位置する。拡張ページテーブル（ＥＰＴ）１３４は、ＶＭＭ２０２によって保持され、ゲスト物理メモリ４０８のゲスト物理ページと物理メモリ１３０の物理ページとの間をマッピングする。図示されるように、ＥＰＴ１３４は、ゲスト物理ページ４１０を物理ページ４１２にマッピングする。
【００３８】
ブロック４１４は、対象バーチャルマシン２０４のバーチャルメモリレイアウトを表す。図示されるように、対象バーチャルマシン２０４は、バーチャルメモリの連続ブロックとして表されているセキュアビュー２２８を含む。他の実施形態では、セキュアビュー２２８は、不連続、まばら、あるいは、バーチャルメモリ４１４内で別なふうに分散されてよい。後述されるように、対象バーチャルマシン２０４は、そのビュースイッチコンポーネント２２６をＶＭＭ２０２により認証した後にのみ、セキュアビュー２２８内のデータにアクセスしてよい。図示されるように、ソースバーチャルマシン２０６からのバッファ４０４は、セキュアビュー２２８内のバーチャルページ４１６にマッピングされる。ブロック４１８は、対象バーチャルマシン２０４のゲスト物理レイアウトを表す。図示されるように、バッファ４０４は、セキュアビュー２２８内のゲスト物理ページ４２０に位置する。ゲストページテーブル１３２ｂは、対象バーチャルマシン２０４のゲストＯＳによって保持されてよく、バーチャルメモリ４１４のバーチャルページとゲスト物理メモリ４１８のゲスト物理ページとの間をマッピングする。図示されるように、ゲストページテーブル１３２ｂは、バーチャルページ４１６をゲスト物理ページ４１０にマッピングする。
【００３９】
ＶＭＭ２０２は、デフォルトビューＥＰＴ１３４ａ及びセキュアビューＥＰＴ１３４ｂを管理する。図示されるように、デフォルトビューＥＰＴ１３４ａは、ゲスト物理ページ４２０を物理ページ４２２にマッピングする。物理ページ４２２は如何なる使用可能なデータも含まない。例えば、物理ページ４２２は、ゼロにされるか、あるいは、別なふうにデータをクリアされてよい。幾つかの実施形態において、デフォルトビューＥＰＴ１３４ａは、物理ページ４２２へのアクセスを制限するための許可セットを含んでよい。よって、デフォルトビューからのバッファ４０４に関連したゲスト物理ページ４２０（又はバーチャルページ４１６）への如何なるアクセスも、バッファ４０４を含む物理ページ４１２へ分離しない。対照的に、セキュアビューＥＰＴ１３４ｂは、ゲスト物理ページ４２０を物理ページ４１２にマッピングする。よって、セキュアビュー２２８からのバッファ４０４に関連したゲスト物理ページ４２０（又はバーチャルページ４１６）へのアクセスは、バッファ４０４を含む物理ページ４１２にアクセスする。
【００４０】
図示されるように、ＥＰＴポインタ１３６は、デフォルトビューＥＰＴ１３４ａ又はセキュアビューＥＰＴ１３４ｂのいずれか一方を指し示してよい。プロセッサ１２０は、ゲスト物理ページを物理ページへ分離するときにＥＰＴポインタ１３６を参照する。上述されたように、ＥＰＴポインタ１３６は、ＦＶＳサポート１２６を用いて、例えば、ＶＭＦＵＮＣプロセッサ命令を実行することによって、例えばビュースイッチコンポーネント１２６などのゲストソフトウェアによって切り替えられるか、あるいは、別なふうに変更されてよい。よって、対象バーチャルマシン２０４は、ＶＭＭ２０２を呼び出すことなしにＥＰＴポインタ１３６を変更することによってバッファ４０４へのアクセスを制御してよい。
【００４１】
上述されたように、幾つかの実施形態において、ソースバーチャルマシン２０６は、共有されるべきページを許可テーブル２３２において特定することによって、ゲスト物理メモリページへのアクセスを制御してよい。実例となる実施形態において、許可テーブル２３２は、バーチャルメモリ４０２のバーチャルページ４２４に、及びゲスト物理メモリ４０８のゲスト物理ページ４２６に位置する。図示されるように、許可テーブル２３２は、例えば、バッファ４０４のゲスト物理ページ番号（例えば、ゲスト物理ページ４１０）を記憶することによって、バッファ４０４を参照する。許可テーブル２３２は更に、物理メモリ１３０内の物理ページ４２８に位置する。上述されたように、ＶＭＭ２０２は、バッファ４０４が許可テーブル２３２によって参照される場合に、バッファ４０４への参照をセキュアビューＥＰＴ１３４ｂに加えてよい。表されるように、許可テーブル２３２自体は、対象バーチャルマシン２０４へアクセス可能でなくてよい。
【００４２】
これより図５を参照すると、使用において、コンピューティング装置１００は、バーチャルマシン間で共有されるメモリセグメントにアクセスする方法５００を実行してよい。方法５００は、対象バーチャルマシン２０４によって実行されてよく、よって、コンピューティング装置１００へのアクセスを制限されたＶＭＸ非ルートモードにおいて実行してよい。方法５００はブロック５０２から開始する。ブロック５０２で、コンピューティング装置１００は、ＶＭＭ２０２によるビュースイッチコンポーネント２２６の認証を要求する。図３のブロック３０２乃至３０４に関連して上述されたように、対象バーチャルマシン２０４は、セキュアビュー２２８へのアクセスを許可されるより前に、ビュースイッチコンポーネント２２６の認証を要求する。対象バーチャルマシン２０４は、ＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことによって、認証を要求してよい。上述されたように、ビュースイッチコンポーネント２２６が証明されない場合は、コンピューティング装置１００は、エラーメッセージを生成するか、未証明のビュースイッチコンポーネント２２６がセキュアビュー２２８へのアクセスを有効にすることを可能にするのを別なふうに拒んでよい。
【００４３】
ブロック５０４で、コンピューティング装置１００は、共有メモリセグメントへのアクセスをＶＭＭ２０２に要求する。図３のブロック３１６に関連して上述されたように、対象バーチャルマシン２０４は、ＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことによって、アクセスを要求してよい。幾つかの実施形態において、ブロック５０６で、対象バーチャルマシン２０４は、ソースバーチャルマシン２０６のバッファ又は他の共有メモリページへのアクセスを要求してよい。幾つかの実施形態において、ブロック５０８で、対象バーチャルマシン２０４は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４へのアクセスを要求してよい。
【００４４】
ブロック５１０で、コンピューティング装置１００は、セキュアビュー２２８へ切り替える。セキュアビュー２２８への切り替え後、共有メモリセグメントは、対象バーチャルマシン２０４において実行する１以上のゲストアプリケーション２２０又はオペレーティングシステムのバーチャルアドレス空間においてアクセス可能であってよい。幾つかの実施形態において、ブロック５１２で、コンピューティング装置１００は、セキュアビュー２２８に関連するＥＰＴ１３４を指し示すようＥＰＴポインタ１３６をセットしてよい。例えば、図４で示されるように、ＥＰＴポインタ１３６は、デフォルトビューＥＰＴ１３４ａを指し示すことから、セキュアビューＥＰＴ１３４ｂを指し示すことへ切り替えられてよい。コンピューティング装置１００は、例えばＶＭＦＵＮＣ命令などの特殊化したプロセッサ命令を用いてＥＰＴポインタ１３６を切り替えてよい。幾つかの実施形態において、ＥＰＴポインタ１３６を切り替えることは、リング０、カーネルモード、あるいは、対象バーチャルマシン２０４及び／又はプロセッサ１２０の何らかの他の監督モードに制限されてよい。従って、ＥＰＴポインタ１３６は、例えばオペレーティングシステムドライバなどのカーネルモードコードによって切り替えられてよい。幾つかの実施形態において、例えばアプリケーション２２０などのユーザモードコードは、カーネルモードドライバを呼び出すことによってＥＰＴポインタ１３６を切り替えさせてよい。幾つかの実施形態において、例えばアプリケーション２２０などのユーザモードコードは、例えばＶＭＦＵＮＣ命令などの特殊化したプロセッサ命令を直接実行することを可能にされてよい。
【００４５】
ブロック５１４で、コンピューティング装置１００は、共有メモリセグメントにアクセスする。例えば、対象バーチャルマシン２０４のアプリケーション２２０及び／又はオペレーティングシステムは、共有メモリセグメントからデータを読み出すか、あるいは、共有メモリセグメントにデータを書き込んでよい。幾つかの実施形態において、対象バーチャルマシン２０４は、データ又は他のＩ／Ｏデータをソースバーチャルマシン２０６のメモリページから読み出すか又はそれに書き込んでよい。特に、対象バーチャルマシン２０４は、ソースバーチャルマシン２０６のメモリページに対して１以上の直接メモリアクセス（ＤＭＡ；direct  memory  access）動作を実行してよく、これは、Ｉ／Ｏ装置及び／又はデータへの直接的なアクセスを可能にすることができる。加えて、又は代替的に、対象バーチャルマシン２０４は、データを、ＶＭＭ２０２によって確立された共有メモリセグメント２１４から読み出すか又はそれに書き込んでよい。共有メモリセグメント２１４は、ソースバーチャルマシン２０６のメモリページにアクセスすることを引き起こさないバーチャルマシン間のメッセージの受け渡し、シグナリング、又は他の通信のために使用されてよい。共有メモリセグメントにアクセスした後、方法５００はブロック５１４に折り返し、共有メモリセグメントにアクセスし続けてよい。
【００４６】
これより図６を参照すると、使用において、コンピューティング装置１００は、バーチャルマシン間で共有されるメモリセグメントへのアクセスを許可する方法６００を実行してよい。方法６００は、ソースバーチャルマシン２０６によって実行されてよく、よって、コンピューティング装置１００へのアクセスが制限されたＶＭＸ非ルートモードにおいて実行してよい。方法６００はブロック６０２から開始する。ブロック６０２で、コンピューティング装置１００は、ソースバーチャルマシン２０６のメモリページへのアクセスを選択的に許可すべきかどうかを判断する。そうでない場合は、方法６００は、後述されるブロック６０６の前へと分岐する。アクセスを選択的に許可する場合は、方法６００はブロック６０４へ進む。
【００４７】
ブロック６０４で、コンピューティング装置１００は、共有メモリセグメントをソースバーチャルマシン２０６に登録する。図３のブロック３０８に関連して上述されたように、登録は、ソースバーチャルマシン２０６から対象バーチャルマシン２０４へ共有されるべきゲスト物理メモリページ、セグメント、又は他の範囲を記述する。上述されたように、コンピューティング装置１００は、共有されるべきゲスト物理ページを許可テーブル２３２において特定してよい。ソースバーチャルマシン２０６は、ＶＭＥｘｉｔ若しくはハイパーコールを実行すること、又は別なふうにＶＭＭ２０２を呼び出すことを含む如何なる適切な技術も用いて、共有メモリセグメントをＶＭＭ２０２に登録してよい。
【００４８】
ブロック６０６で、コンピューティング装置１００は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４にアクセスすべきかどうかを判断する。そうでない場合は、方法６００はブロック６０２に折り返す。よって、選択的なアクセスを提供せず且つ共有メモリセグメント２１４にアクセスしない場合に、対象バーチャルマシン２０４は、ソースバーチャルマシン２０６によるＶＭＭ２０２への如何なるリクエスト又は他の積極的な動作もなしで、ソースバーチャルマシン２０６のメモリにアクセスしてよい。コンピューティング装置１００が、共有メモリセグメント２１４にアクセスすると判断する場合は、方法６００はブロック６０８へ進む。
【００４９】
ブロック６０８で、コンピューティング装置１００は、ＶＭＭ２０２によるソースバーチャルマシン２０６のビュースイッチコンポーネント２２６の認証を要求する。図３のブロック３０２乃至３０４に関連して上述されたように、ソースバーチャルマシン２０６は、セキュアビュー２２８へのアクセスを許可されるより前に、ビュースイッチコンポーネント２２６の認証を要求する。ソースバーチャルマシン２０６は、ＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことによって、認証を要求してよい。上述されたように、ビュースイッチコンポーネント２２６が証明されない場合は、コンピューティング装置１００は、エラーメッセージを生成するか、あるいは、未証明のスイッチコンポーネント２２６がソースビュー２２８へのアクセスを有効にすることを可能にするのを別なふうに拒んでよい。
【００５０】
ブロック６１０で、コンピューティング装置１００は、セキュアビュー２２８へ切り替える。セキュアビュー２２８への切り替え後、共有メモリセグメントは、ソースバーチャルマシン２０６において実行する１以上のゲストアプリケーション２２０又はオペレーティングシステムのバーチャルアドレス空間においてアクセス可能であってよい。幾つかの実施形態において、コンピューティング装置１００は、セキュアビュー２２８に関連するＥＰＴ１３４を指し示すようＥＰＴポインタ１３６をセットしてよい。例えば、図４で示されるように、ＥＰＴポインタ１３６は、デフォルトビューＥＰＴ１３４ａを指し示すことから、セキュアビューＥＰＴ１３４ｂを指し示すことへ切り替えられてよい。コンピューティング装置１００は、例えばＶＭＦＵＮＣ命令などの特殊化したプロセッサ命令を用いてＥＰＴポインタ１３６を切り替えてよい。幾つかの実施形態において、ＥＰＴポインタ１３６を切り替えることは、リング０、カーネルモード、あるいは、ソースバーチャルマシン２０６及び／又はプロセッサ１２０の何らかの他の監督モードに制限されてよい。従って、ＥＰＴポインタ１３６は、例えばオペレーティングシステムドライバなどのカーネルモードコードによって切り替えられてよい。幾つかの実施形態において、例えばアプリケーション２２０などのユーザモードコードは、カーネルモードドライバを呼び出すことによってＥＰＴポインタ１３６を切り替えさせてよい。幾つかの実施形態において、例えばアプリケーション２２０などのユーザモードコードは、例えばＶＭＦＵＮＣ命令などの特殊化したプロセッサ命令を直接実行することを可能にされてよい。
【００５１】
ブロック６１２で、コンピューティング装置１００は、共有メモリセグメント２１４へのアクセスをＶＭＭに要求する。図３のブロック３１６に関連して上述されたように、ソースバーチャルマシン２０６は、ＶＭＥｘｉｔを生成すること、ハイパーコール、又は別なふうにＶＭＭ２０２を呼び出すことによって、アクセスを要求してよい。コンピューティング装置１００は、セキュアビュー２２８内のページを許可テーブル２３２において特定することによって、共有メモリセグメントへのアクセスを要求してよい。
【００５２】
ブロック６１４で、コンピューティング装置１００は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４にアクセスする。ソースバーチャルマシン２０６は、共有メモリセグメント内に記憶されるデータを読み出し又は書き込んでよい。例えば、ソースバーチャルマシン２０６は、図７乃至９に関して以下で更に記載されるように、対象バーチャルマシン２０４によりメモリページの所有権を移すか又は別なふうに管理するために、共有メモリセグメント２１４を使用してよい。方法６００は、共有メモリセグメント２１４にアクセスし続けるようブロック６１４に折り返す。
【００５３】
これより図７を参照すると、図７００は、ソースバーチャルマシン２０６と対象バーチャルマシン２０４との間でメモリバッファの所有権を移すために使用されるセキュアビュー制御構造（ＳＶＣＳ）２１６の１つの起こり得る実施形態を表す。図示されるように、ＳＶＣＳ２１６は、幾つかのバッファ４０４ａ乃至４０４ｅを含む実例となるセキュアビュー２２８に関連付けられる。それらのバッファ４０４は、ソースバーチャルマシン２０６によって生成された共有メモリセグメントであってよい。例えば、夫々のバッファ４０４は、受信キュー、送信キュー、又はソースバーチャルマシン２０６の如何なる他のＩ／Ｏバッファも含んでよい。
【００５４】
図示されるように、ＳＶＣＳ２１６は、対象バーチャルマシン２０４のゲスト物理メモリ４１８におけるセキュアビュー２２８内の位置に対する多数のポインタを含む。実例となる実施形態において、ポインタは、ゲストページフレーム番号として記憶される。当然に、他の実施形態では、それらのポインタは、他のフォーマットにおいて、又は異なったアドレス空間に基づき、記憶されてよい。例えば、ＳＶＣＳ２１６は、対象バーチャルマシン２０４のバーチャルメモリ４１４内のポインタ、及び／又はセキュアビュー２２８に対するオフセットを含んでよい。
【００５５】
特に、実例となるＳＶＣＳ２１６は、セキュアビュー２２８の開始及び終了を夫々参照するセキュアビュー開始ポインタ７０２及びセキュアビュー終了ポインタ７１２を含む。ＳＶＣＳ２１６は、被処理ポインタ７０４、現在ポインタ７０６、次ポインタ７０８、及び最高水位線ポインタ７１０を更に含む。それらのポインタは、図８及び９に関連して以下で更に記載されるように、ソースバーチャルマシン２０６と対象バーチャルマシン２０４との間でメモリバッファの所有権を協調させるために使用される。実例となる実施形態において、ＳＶＣＳ２１６は、ミューテックス７１４及びステータスフラグの組７１６を更に含む。ミューテックス７１４及びステータスフラグ７１６は、ソースバーチャルマシン２０６と対象バーチャルマシン２０４との間でＳＶＣＳ２１６への同時のアクセスを協調させるために使用されてよい。
【００５６】
図示されるように、ＳＶＣＳ２１６は、セキュアビュー２２８を多数の領域７１８，７２０，７２２に分割する。使用済み領域７１８は、セキュアビュー開始ポインタ７０２から被処理ポインタ７０４まで包括的に定義され、実例となる実施形態ではバッファ４０４ａを含む。使用済み領域７１８は、対象バーチャルマシン２０４によって既に処理されているバッファ４０４に相当し、よって、ソースバーチャルマシン２０６によって再要求されてよい。使用中領域７２０は、被処理ポインタ７０４から次ポインタ７０８まで非包括的に定義され、よって、バッファ４０４ｂ乃至４０４ｅを含む。使用中領域７２０は、ソースバーチャルマシン２０６によって新たに共有されたバッファ４０４に相当する。非包括的に被処理ポインタ７０４から現在ポインタ７０４の間にあるバッファ（例えば、バッファ４０４ｂ）は、対象バーチャルマシン２０４によって積極的に処理中であるバッファ４０４に相当する。包括的に次ポインタ７０８から非包括的にセキュアビュー終了ポインタ７１２までの未使用領域７２２は、ソースバーチャルマシン２０６から共有される更なるバッファ４０４によって投入され得るセキュアビュー２２８における空き領域に相当する。最高水位線ポインタ７１０は、セキュアビュー２２８における閾アドレスを指す。セキュアビュー２２８が最高水位線ポインタ７１０以上に満たされる場合に、使用済み領域７１８におけるバッファは再要求されてよい。
【００５７】
これより図８を参照すると、使用において、コンピューティング装置１００は、共有メモリバッファの所有権を得る方法８００を実行してよい。方法８００は、対象バーチャルマシン２０４によって実行されてよく、よって、コンピューティング装置１００へのアクセスが制限されたＶＭＸ非ルートモードにおいて実行してよい。方法８００はブロック８０２から開始する。ブロック８０２で、コンピューティング装置１００は、セキュアビュー２２８へ切り替える。コンピューティング装置１００は、セキュアビュースイッチコンポーネント２２６を認証し、次いで、図５に関連して上述されたように、ＥＰＴポインタ１３６を更新することによってセキュアビュー２２８へ切り替えてよい。特に、コンピューティング装置１００は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４へのアクセスを要求してよい。共有メモリセグメント２１４は、セキュアビュー制御構造（ＳＶＣＳ）２１６を含む。
【００５８】
再び図４を参照すると、図４００は、ＳＶＣＳ２１６への対象バーチャルマシン２０４によるアクセスを表す。図示されるように、ＳＶＣＳ２１６は、セキュアビュー２２８内のバーチャルページ４３０に位置する。ゲストページテーブル１３２ｂは、バーチャルページ４３０をゲスト物理ページ４３２にマッピングする。デフォルトビューＥＰＴ１３４ａは、ゲスト物理ページ４３２を物理ページ４３４にマッピングする。物理ページ４３４は、ＳＶＣＳ２１６へのアクセスを提供しない。例えば、物理ページ４３４はゼロにされてよく、あるいは、許可は、物理ページ４３４へのアクセスを制限するようセットされてよい。対照的に、セキュアビューＥＰＴ１３４ｂは、ゲスト物理ページ４３２を、ＳＶＣＳ２１６を含む物理ページ４３６にマッピングする。物理ページ４３６は、ＶＭＭ２０２によって割り当てられ、確立され、あるいは、別なふうに保持されてよい。例えば、物理ページ４３６は、ＶＭＭ２０２のヒープにおいて割り当てられてよい。よって、対象バーチャルマシン２０４において実行するアプリケーション２２０及び／又はオペレーティングシステムは、セキュアビュー２２８を介してＳＶＣＳ２１６にアクセスしてよい。
【００５９】
再び図８を参照すると、ブロック８０４で、コンピューティング装置１００は、いずれかの使用中の共有バッファが処理される準備ができているかどうかを判断するために、ＳＶＣＳ２１６を読み出す。コンピューティング装置１００は、ＳＶＣＳ２１６の被処理ポインタ７０４、現在ポインタ７０６、及び／又は次ポインタ７０８を調べることによって、いずれかの使用中の共有バッファが処理される準備ができているかどうかを判断してよい。例えば、コンピューティング装置１００は、更なるバッファ４０４がソースバーチャルマシン２０６によって共有されていることを示す、被処理ポインタ７０４が次ポインタ７０８よりも小さいかどうかを判断してよい。ブロック８０６で、コンピューティング装置１００は、共有バッファが準備ができているかどうかを判断する。そうでない場合は、方法８００は、ＳＶＣＳ２１６をモニタし続けるようブロック８０４に折り返す。共有バッファが準備ができている場合は、方法８００はブロック８０８へ進む。
【００６０】
ブロック８０８で、コンピューティング装置１００は、ＳＶＣＳ２１６の現在ポインタ７０６に基づき、使用中領域７２０における１以上の共有バッファを処理する。対象バーチャルマシン２０４は、共有バッファを処理するよう如何なる動作も実行してよい。例えば、対象バーチャルマシン２０４は、例えば、パケットルーチング、パケットフィルタリング、又は別なふうにネットワークパケットデータを処理することなどの１以上のバーチャルネットワーク機能を実行してよい。ブロック８１０で、共有バッファを処理した後、コンピューティング装置１００は、ＳＶＣＳ２１６の被処理ポインタ７０４をインクリメントする。上述されたように、被処理ポインタ７０４をインクリメントすることは、それらの共有バッファが対象バーチャルマシン２０４によって処理されており、ソースバーチャルマシン２０６によって再要求され得ることを示す。
【００６１】
ブロック８１２で、コンピューティング装置１００は、セキュアビュー２２８が予め定義された容量レベルを超えているかどうかを判断する。コンピューティング装置１００は、例えば、ＳＶＣＳ２１６の次ポインタ７０８がＳＶＣＳ２１６の最高水位線ポインタ７１０以上であるかどうかを判断することによって、そのような判断をしてよい。幾つかの実施形態において、コンピューティング装置１００は、被処理ポインタ７０４を最高水位線ポインタ７１０と比較して、全ての共有バッファが処理されたかどうかを判断してよい。ブロック８１４で、コンピューティング装置１００は、セキュアビュー２２８があふれているかどうかに基づき分岐する。あふれていない場合（すなわち、次ポインタ７０８及び／又は被処理ポインタ７０４が最高水位線ポインタ７１０を超えていない場合）は、方法８００は、共有バッファを処理し続けるようブロック８０４に折り返す。セキュアビュー２２８があふれている場合は、方法８００はブロック８１６へ進む。
【００６２】
ブロック８１６で、コンピューティング装置１００は、ＶＭＭ２０２によって生成されたＥＰＴ１３４の無効を扱ってよい。以下で更に記載されるように、ソースバーチャルマシン２０６は、セキュアビュー２２８があふれている場合に、使用済みの共有バッファを再要求してよい。そのメモリが再要求された後、ＶＭＭ２０２は、例えば、セキュアビュー２２８に関連する現在のＥＰＴ１３４を無効にし、如何なる関連するＳＶＣＳ２１６も再初期化することによって、セキュアビュー２２８をリセットしてよい。ＥＰＴ１３４を無効にすることは、使用中のバッファに関してプロセッサ１２０によってキャッシュされた変換エントリを除去してよい。セキュアビュー２２８がクリアされた後、対象バーチャルマシン２０４は、例えば、新しいＥＰＴ１３４へ切り替えることによって、セキュアビュー２２８を再初期化するよう求められてよい。如何なるＥＰＴ無効も扱った後、方法８００は、共有バッファを処理し続けるようブロック８０４に折り返す。
【００６３】
これより図９を参照すると、使用において、コンピューティング装置１００は、共有メモリバッファの所有権を移す方法９００を実行してよい。方法９００は、ソースバーチャルマシン２０６によって実行されてよく、よって、コンピューティング装置１００へのアクセスが制限されたＶＭＸ非ルートモードにおいて実行してよい。方法９００はブロック９０２から開始する。ブロック９０２で、コンピューティング装置１００は、セキュアビュー２２８へ切り替える。コンピューティング装置１００は、セキュアビュースイッチコンポーネント２２６を認証し、次いで、図６に関連して上述されたように、ＥＰＴポインタ１３６を更新することによってセキュアビュー２２８へ切り替えてよい。特に、コンピューティング装置１００は、ＶＭＭ２０２によって確立された共有メモリセグメント２１４へのアクセスを要求してよい。上述されたように、共有メモリセグメント２１４はＳＶＣＳ２１６を含む。
【００６４】
ブロック９０４で、コンピューティング装置１００は、対象バーチャルマシン２０４により共有されるべき新しい共有バッファを生成する。共有バッファは、例えば、ソースバーチャルマシン２０６の１以上のゲスト物理ページとして具現されてよい。幾つかの実施形態において、共有バッファは、対象バーチャルマシン２０４によって処理されるべき、ソースバーチャルマシン２０６によって生成された受信キュー、送信キュー、又は如何なる他のネットワークＩ／Ｏデータも含んでよい。
【００６５】
ブロック９０６で、コンピューティング装置１００は、新たに生成された共有バッファを許可テーブル２３２に加える。上述されたように、バッファを許可テーブル２３２に加えることは、バッファが対象バーチャルマシン２０４により共有されるべきことを示す。ブロック９０８で、コンピューティング装置１００は、新しいバッファを対象バーチャルマシン２０４により共有するためのＶＭＭ２０２へのリクエストを送る。図６において上述されたように、ソースバーチャルマシン２０６は、ＶＭＥｘｉｔ若しくはハイパーコールを実行すること、又は別なふうにＶＭＭ２０２を呼び出すことを含む如何なる適切な技術も用いて、新たに生成された共有バッファをＶＭＭ２０２に登録してよい。ＶＭＭ２０２は、新たに生成された共有バッファをセキュアビュー２２８内でＳＶＣＳ２１６の次ポインタ７０８の位置でマッピングしてよい。そのバッファを共有するのに成功した後、次ポインタ７０８はインクリメントされてよい。
【００６６】
ブロック９１０で、コンピューティング装置１００は、ＳＶＣＳ２１６を読み出して、セキュアビュー２２８があふれているかどうかを判断する。例えば、コンピューティング装置１００は、次ポインタ７０８が最高水位線ポインタ７１０以上であるかどうかを判断してよい。ブロック９１２で、コンピューティング装置１００は、セキュアビュー２２８があふれているかどうかに基づき分岐する。セキュアビュー２２８があふれていない場合は、方法９００は、共有メモリバッファを生成し続けるよう分岐してブロック９０４に折り返す。セキュアビュー２２８があふれている場合は、方法９００はブロック９１４へ進む。
【００６７】
ブロック９１４で、コンピューティング装置１００は、対象バーチャルマシン２０４が全ての使用中の共有メモリバッファ４０４を処理するのを待つ。ソースバーチャルマシン２０６は、ソースバーチャルマシン２０６が完了を待っていることを示すよう、ＳＶＣＳ２１６のステータスフラグ７１６における１以上のフラグをセットしてよい。上述されたように、対象バーチャルマシン２０４は、バッファ４０４が使用中領域７２０からなくなるまで、使用中バッファ４０４を処理し続けてよい。ソースバーチャルマシン２０６は、ＳＶＣＳ２１６をモニタして、対象バーチャルマシン２０４が使用中バッファ４０４を処理し終えた場合を判断してよい。加えて、又は代替的に、対象バーチャルマシン２０４を待つことよりむしろ、幾つかの実施形態では、ソースバーチャルマシン２０６は、対象バーチャルマシン２０４の異なるスレッドによって保持されている他のセキュアビュー２２８へ新たに生成されたバッファを提示してよい。
【００６８】
全ての使用中バッファ４０４が処理された後、ブロック９１６で、コンピューティング装置１００は、夫々の使用済みバッファ４０４を許可テーブル２３２から除去する。上述されたように、それらのバッファ４０４を許可テーブル２３２から除去することによって、ソースバーチャルマシン２０６は、それらのバッファがもはや対象バーチャルマシン２０４と共有されるべきでないことを示す。ブロック９１８で、コンピューティング装置１００は、夫々の使用済みバッファ４０４を再要求する。例えば、ソースバーチャルマシン２０６は、使用済み領域７１８内の夫々のバッファ４０４に関連するメモリを解放し、削除し、又は別なふうに割り当てを解除してよい。再要求後、使用済みバッファ４０４に関連するメモリは、ソースバーチャルマシン２０６によって再利用されてよい。ブロック９２０で、コンピューティング装置１００は、ＶＭＭ２０２によって生成されたＥＰＴ無効を扱ってよい。使用済みバッファ４０４に関連するメモリが再要求された後、ＶＭＭ２０２は、例えば、セキュアビュー２２８に関連する現在のＥＰＴ１３４を無効にし、如何なる関連するＳＶＣＳ２１６も再初期化することによって、セキュアビュー２２８をリセットしてよい。ＥＰＴ１３４を無効にすることは、使用済みバッファを参照するプロセッサ１２０によってキャッシュされた変換エントリを除去してよく、よって、メモリの再利用を可能にすることができる。セキュアビュー２２８がクリアされた後、ソースバーチャルマシン２０６は、例えば、新しいＥＰＴ１３４へ切り替えることによって、セキュアビュー２２８を再初期化するよう求められてよい。セキュアビュー２２８があふれている場合にのみメモリを再要求することによって、コンピューティング装置１００は、例えば、提案されているように夫々のバッファを再要求することに比べて、ＥＰＴ無効の数を減らすことができる。如何なるＥＰＴ無効も実行した後、方法９００は、共有バッファを生成し続けるようブロック９０４へ折り返す。
【００６９】
［例］
ここで開示されている技術の説明に役立つ実例が以下で与えられる。技術の実施形態は、以下で記載される例の１以上及び如何なる組み合わせも含んでよい。
【００７０】
例１は、セキュアなバーチャルマシン間の共有メモリ通信のためのコンピューティング装置であって、
当該コンピューティング装置のバーチャルマシンモニタによって、当該コンピューティング装置の対象バーチャルマシンのビュースイッチコンポーネントを、該対象バーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証する認証モジュールと、
前記バーチャルマシンモニタによって、前記ビュースイッチコンポーネントの認証に応答して、当該コンピューティング装置の物理メモリマップを定義するセキュアメモリビューを、前記対象バーチャルマシンから受け取った当該コンピューティング装置の共有メモリセグメントにアクセスするためのリクエストに応答して、前記共有メモリセグメントにアクセスするよう設定するセキュアビューモジュールと、
前記対象バーチャルマシンによって、前記ビュースイッチコンポーネントを用いて、前記共有メモリセグメントにアクセスするための前記リクエストに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替えるビュースイッチモジュールと、
前記対象バーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスするデータアクセスモジュールと
を有するコンピューティング装置を含む。
【００７１】
例２は、例１の対象を含み、前記ビュースイッチコンポーネントは、オペレーティングシステムカーネル、カーネルモードドライバ、又はユーザレベルアプリケーションを有する。
【００７２】
例３は、例１及び２のいずれかの対象を含み、前記共有メモリセグメントは、当該コンピューティング装置の１以上の物理メモリページを有する。
【００７３】
例４は、例１乃至３のいずれかの対象を含み、前記セキュアメモリビューを設定することは、当該コンピューティング装置の拡張ページテーブルを設定することを有する。
【００７４】
例５は、例１乃至４のいずれかの対象を含み、前記セキュアメモリビューへ切り替えることは、前記拡張ページテーブルを参照するよう当該コンピューティング装置の拡張ページテーブルポインタをセットすることを有する。
【００７５】
例６は、例１乃至５のいずれかの対象を含み、前記拡張ページテーブルポインタをセットすることは、該拡張ページテーブルポインタを変更するプロセッサ命令を実行することを有する。
【００７６】
例７は、例１乃至６のいずれかの対象を含み、前記共有メモリセグメントは、当該コンピューティング装置のソースバーチャルマシンのゲスト物理メモリページを有する。
【００７７】
例８は、例１乃至７のいずれかの対象を含み、前記共有メモリセグメントは、入出力バッファを有する。
【００７８】
例９は、例１乃至８のいずれかの対象を含み、前記共有メモリセグメントは、送信キュー又は受信キューを有する。
【００７９】
例１０は、例１乃至９のいずれかの対象を含み、前記ソースバーチャルマシンによって、前記共有メモリセグメントを前記バーチャルマシンモニタに登録するアクセス制御モジュールを更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する。
【００８０】
例１１は、例１乃至１０のいずれかの対象を含み、前記共有メモリセグメントを登録することは、前記ソースバーチャルマシンの許可テーブルにおいて前記共有メモリセグメントのゲスト物理ページを特定し、前記許可テーブルを前記バーチャルマシンモニタに提示することを有する。
【００８１】
例１２は、例１乃至１１のいずれかの対象を含み、前記バーチャルマシンモニタによって、前記共有メモリセグメントを確立する共有メモリモジュールを更に有し、前記認証モジュールは更に、前記バーチャルマシンモニタによって、当該コンピューティング装置のソースバーチャルマシンのビュースイッチコンポーネントを、該ソースバーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証し、前記ビュースイッチモジュールは更に、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのビュースイッチコンポーネントを用いて、該ビュースイッチコンポーネントの認証に応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替え、前記データアクセスモジュールは更に、前記ソースバーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスし、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記バーチャルマシンモニタによって確立された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する。
【００８２】
例１３は、例１乃至１２のいずれかの対象を含み、前記ソースバーチャルマシンによって、第２の共有メモリセグメントを前記バーチャルマシンモニタに登録するアクセス制御モジュールを更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記第２の共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを更に有し、前記対象バーチャルマシンによって前記共有メモリセグメントにアクセスすることは、前記対象バーチャルマシンによって前記第２の共有メモリセグメントにアクセスすることを更に有する。
【００８３】
例１４は、例１乃至１３のいずれかの対象を含み、前記ソースバーチャルマシンによって、前記第２の共有メモリセグメントに含まれる、前記対象バーチャルマシンによって処理されるべき共有バッファを生成し、前記対象バーチャルマシンによって、前記共有メモリセグメントのアクセスに応答して前記共有バッファを処理し、前記対象バーチャルマシン及び前記ソースバーチャルマシンによって、前記バーチャルマシンモニタに確立された前記共有メモリセグメントに格納されているセキュアビュー制御構造を用いて前記共有バッファの所有権を協調させるバッファ所有権モジュールを更に有する。
【００８４】
例１５は、例１乃至１４のいずれかの対象を含み、前記第２の共有メモリセグメントを登録することは、前記セキュアビュー制御構造の次のポインタにおいて前記共有バッファを登録することを有し、前記共有バッファを処理することは、該共有バッファの距離に応答して前記セキュアビュー制御構造の被処理ポインタをインクリメントすることを有し、前記共有バッファを生成することは、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのセキュアビューの容量が超過したかどうかを判断し、該セキュアビューの容量が超過したとの判定に応答して、前記ソースバーチャルマシンによって、前記対象バーチャルマシンが前記共有バッファを処理するのを終えるのを待ち、前記ソースバーチャルマシンによって、前記対象バーチャルマシンによる前記共有バッファの処理の完了に応答して許可テーブルから前記共有バッファを除去し、前記ソースバーチャルマシンによって、前記許可テーブルからの前記共有バッファの除去に応答して前記共有バッファを再要求し、前記バーチャルマシンモニタによって、前記共有バッファの再要求に応答して当該コンピューティング装置の拡張ページテーブルを無効にすることを有する。
【００８５】
例１６は、例１乃至１５のいずれかの対象を含み、前記セキュアビューの容量が超過したかどうかを判断することは、該セキュアビューの次のポインタが前記セキュアビュー制御構造の参照ポインタを超えるかどうかを判断することを有する。
【００８６】
例１７は、セキュアなバーチャルマシン間の共有メモリ通信のための方法であって、
コンピューティング装置のバーチャルマシンモニタによって、前記コンピューティング装置の対象バーチャルマシンのビュースイッチコンポーネントを、該対象バーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証し、
前記バーチャルマシンモニタによって、前記ビュースイッチコンポーネントを認証することに応答して、前記コンピューティング装置の物理メモリマップを定義するセキュアメモリビューを、前記対象バーチャルマシンから受け取った前記コンピューティング装置の共有メモリセグメントにアクセスするためのリクエストに応答して、前記共有メモリセグメントにアクセスするよう設定し、
前記対象バーチャルマシンによって、前記ビュースイッチコンポーネントを用いて、前記共有メモリセグメントにアクセスするための前記リクエストに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替え、
前記対象バーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスする
ことを有する方法を含む。
【００８７】
例１８は、例１７の対象を含み、前記ビュースイッチコンポーネントは、オペレーティングシステムカーネル、カーネルモードドライバ、又はユーザレベルアプリケーションを有する。
【００８８】
例１９は、例１７及び１８のいずれかの対象を含み、前記共有メモリセグメントは、前記コンピューティング装置の１以上の物理メモリページを有する。
【００８９】
例２０は、例１７乃至１９のいずれかの対象を含み、前記セキュアメモリビューを設定することは、前記コンピューティング装置の拡張ページテーブルを設定することを有する。
【００９０】
例２１は、例１７乃至２０のいずれかの対象を含み、前記セキュアメモリビューへ切り替えることは、前記拡張ページテーブルを参照するよう前記コンピューティング装置の拡張ページテーブルポインタをセットすることを有する。
【００９１】
例２２は、例１７乃至２１のいずれかの対象を含み、前記拡張ページテーブルポインタをセットすることは、該拡張ページテーブルポインタを変更するプロセッサ命令を実行することを有する。
【００９２】
例２３は、例１７乃至２２のいずれかの対象を含み、前記共有メモリセグメントは、前記コンピューティング装置のソースバーチャルマシンのゲスト物理メモリページを有する。
【００９３】
例２４は、例１７乃至２３のいずれかの対象を含み、前記共有メモリセグメントは、入出力バッファを有する。
【００９４】
例２５は、例１７乃至２４のいずれかの対象を含み、前記共有メモリセグメントは、送信キュー又は受信キューを有する。
【００９５】
例２６は、例１７乃至２５のいずれかの対象を含み、前記ソースバーチャルマシンによって、前記共有メモリセグメントを前記バーチャルマシンモニタに登録することを更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する。
【００９６】
例２７は、例１７乃至２６のいずれかの対象を含み、前記共有メモリセグメントを登録することは、前記ソースバーチャルマシンの許可テーブルにおいて前記共有メモリセグメントのゲスト物理ページを特定し、前記許可テーブルを前記バーチャルマシンモニタに提示することを有する。
【００９７】
例２８は、例１７乃至２７のいずれかの対象を含み、前記バーチャルマシンモニタによって、前記共有メモリセグメントを確立し、前記バーチャルマシンモニタによって、前記コンピューティング装置のソースバーチャルマシンのビュースイッチコンポーネントを、該ソースバーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証し、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのビュースイッチコンポーネントを用いて、該ビュースイッチコンポーネントを認証することに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替え、前記ソースバーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスすることを更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記バーチャルマシンモニタによって確立された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを有する。
【００９８】
例２９は、例１７乃至２８のいずれかの対象を含み、前記ソースバーチャルマシンによって、第２の共有メモリセグメントを前記バーチャルマシンモニタに登録することを更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することは、前記ソースバーチャルマシンによって登録された前記第２の共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定することを更に有し、前記対象バーチャルマシンによって前記共有メモリセグメントにアクセスすることは、前記対象バーチャルマシンによって前記第２の共有メモリセグメントにアクセスすることを更に有する。
【００９９】
例３０は、例１７乃至２９のいずれかの対象を含み、前記ソースバーチャルマシンによって、前記第２の共有メモリセグメントに含まれる、前記対象バーチャルマシンによって処理されるべき共有バッファを生成し、前記対象バーチャルマシンによって、前記共有メモリセグメントにアクセスすることに応答して前記共有バッファを処理し、前記対象バーチャルマシン及び前記ソースバーチャルマシンによって、前記バーチャルマシンモニタに確立された前記共有メモリセグメントに格納されているセキュアビュー制御構造を用いて前記共有バッファの所有権を協調させることを更に有する。
【０１００】
例３１は、例１７乃至３０のいずれかの対象を含み、前記第２の共有メモリセグメントを登録することは、前記セキュアビュー制御構造の次のポインタにおいて前記共有バッファを登録することを有し、前記共有バッファを処理することは、該共有バッファの距離に応答して前記セキュアビュー制御構造の被処理ポインタをインクリメントすることを有し、前記共有バッファを生成することは、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのセキュアビューの容量が超過したかどうかを判断し、該セキュアビューの容量が超過したとの判定に応答して、前記ソースバーチャルマシンによって、前記対象バーチャルマシンが前記共有バッファを処理するのを終えるのを待ち、前記ソースバーチャルマシンによって、前記対象バーチャルマシンによる前記共有バッファの処理の完了に応答して許可テーブルから前記共有バッファを除去し、前記ソースバーチャルマシンによって、前記許可テーブルからの前記共有バッファの除去に応答して前記共有バッファを再要求し、前記バーチャルマシンモニタによって、前記共有バッファの再要求に応答して当該コンピューティング装置の拡張ページテーブルを無効にすることを有する。
【０１０１】
例３２は、例１７乃至３１のいずれかの対象を含み、前記セキュアビューの容量が超過したかどうかを判断することは、該セキュアビューの次のポインタが前記セキュアビュー制御構造の参照ポインタを超えるかどうかを判断することを有する。
【０１０２】
例３３は、コンピューティング装置であって、プロセッサと、前記プロセッサによって実行される場合に、当該コンピューティング装置に例１７乃至３２のいずれかの方法を実行させる複数の命令を記憶しているメモリとを有するコンピューティング装置を含む。
【０１０３】
例３４は、実行されることに応答して、コンピューティング装置が例１７乃至３２のいずれかの方法を実行することを生じさせる複数の命令を記憶している１以上の機械可読記憶媒体を含む。
【０１０４】
例３５は、例１７乃至３２のいずれかの方法を実行する手段を有するコンピューティング装置を含む。
【０１０５】
例３６は、セキュアなバーチャルマシン間の共有メモリ通信のためのコンピューティング装置であって、
当該コンピューティング装置のバーチャルマシンモニタによって、当該コンピューティング装置の対象バーチャルマシンのビュースイッチコンポーネントを、該対象バーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証する手段と、
前記バーチャルマシンモニタによって、前記ビュースイッチコンポーネントの認証に応答して、当該コンピューティング装置の物理メモリマップを定義するセキュアメモリビューを、前記対象バーチャルマシンから受け取った当該コンピューティング装置の共有メモリセグメントにアクセスするためのリクエストに応答して、前記共有メモリセグメントにアクセスするよう設定する手段と、
前記対象バーチャルマシンによって、前記ビュースイッチコンポーネントを用いて、前記共有メモリセグメントにアクセスするための前記リクエストに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替える手段と、
前記対象バーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスする手段と
を有するコンピューティング装置を含む。
【０１０６】
例３７は、例３６の対象を含み、前記ビュースイッチコンポーネントは、オペレーティングシステムカーネル、カーネルモードドライバ、又はユーザレベルアプリケーションを有する。
【０１０７】
例３８は、例３６及び３７のいずれかの対象を含み、前記共有メモリセグメントは、当該コンピューティング装置の１以上の物理メモリページを有する。
【０１０８】
例３９は、例３６乃至３８のいずれかの対象を含み、前記セキュアメモリビューを設定する手段は、当該コンピューティング装置の拡張ページテーブルを設定する手段を有する。
【０１０９】
例４０は、例３６乃至３９のいずれかの対象を含み、前記セキュアメモリビューへ切り替える手段は、前記拡張ページテーブルを参照するよう前記コンピューティング装置の拡張ページテーブルポインタをセットする手段を有する。
【０１１０】
例４１は、例３６乃至４０のいずれかの対象を含み、前記拡張ページテーブルポインタをセットする手段は、該拡張ページテーブルポインタを変更するプロセッサ命令を実行する手段を有する。
【０１１１】
例４２は、例３６乃至４１のいずれかの対象を含み、前記共有メモリセグメントは、当該コンピューティング装置のソースバーチャルマシンのゲスト物理メモリページを有する。
【０１１２】
例４３は、例３６乃至４２のいずれかの対象を含み、前記共有メモリセグメントは、入出力バッファを有する。
【０１１３】
例４４は、例３６乃至４３のいずれかの対象を含み、前記共有メモリセグメントは、送信キュー又は受信キューを有する。
【０１１４】
例４５は、例３６乃至４４のいずれかの対象を含み、前記ソースバーチャルマシンによって、前記共有メモリセグメントを前記バーチャルマシンモニタに登録する手段を更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定する手段は、前記ソースバーチャルマシンによって登録された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定する手段を有する。
【０１１５】
例４６は、例３６乃至４５のいずれかの対象を含み、前記共有メモリセグメントを登録する手段は、前記ソースバーチャルマシンの許可テーブルにおいて前記共有メモリセグメントのゲスト物理ページを特定する手段と、前記許可テーブルを前記バーチャルマシンモニタに提示する手段とを有する。
【０１１６】
例４７は、例３６乃至４６のいずれかの対象を含み、前記バーチャルマシンモニタによって、前記共有メモリセグメントを確立する手段と、前記バーチャルマシンモニタによって、前記コンピューティング装置のソースバーチャルマシンのビュースイッチコンポーネントを、該ソースバーチャルマシンから受け取った前記ビュースイッチコンポーネントを認証するためのリクエストに応答して認証する手段と、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのビュースイッチコンポーネントを用いて、該ビュースイッチコンポーネントを認証することに応答してバーチャルマシン終了イベントを伴わずに前記セキュアメモリビューへ切り替える手段と、前記ソースバーチャルマシンによって、前記セキュアメモリビューへの切り替えに応答して前記共有メモリセグメントにアクセスする手段とを更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定する手段は、前記バーチャルマシンモニタによって確立された前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定する手段を有する。
【０１１７】
例４８は、例３６乃至４７のいずれかの対象を含み、前記ソースバーチャルマシンによって、第２の共有メモリセグメントを前記バーチャルマシンモニタに登録する手段を更に有し、前記共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定する手段は、前記ソースバーチャルマシンによって登録された前記第２の共有メモリセグメントにアクセスするよう前記セキュアメモリビューを設定する手段を更に有し、前記対象バーチャルマシンによって前記共有メモリセグメントにアクセスする手段は、前記対象バーチャルマシンによって前記第２の共有メモリセグメントにアクセスする手段を更に有する。
【０１１８】
例４９は、例３６乃至４８のいずれかの対象を含み、前記ソースバーチャルマシンによって、前記第２の共有メモリセグメントに含まれる、前記対象バーチャルマシンによって処理されるべき共有バッファを生成する手段と、前記対象バーチャルマシンによって、前記共有メモリセグメントにアクセスすることに応答して前記共有バッファを処理する手段と、前記対象バーチャルマシン及び前記ソースバーチャルマシンによって、前記バーチャルマシンモニタに確立された前記共有メモリセグメントに格納されているセキュアビュー制御構造を用いて前記共有バッファの所有権を協調させる手段とを更に有する。
【０１１９】
例５０は、例３６乃至４９のいずれかの対象を含み、前記第２の共有メモリセグメントを登録する手段は、前記セキュアビュー制御構造の次のポインタにおいて前記共有バッファを登録する手段を有し、前記共有バッファを処理する手段は、該共有バッファの距離に応答して前記セキュアビュー制御構造の被処理ポインタをインクリメントする手段を有し、前記共有バッファを生成する手段は、前記ソースバーチャルマシンによって、該ソースバーチャルマシンのセキュアビューの容量が超過したかどうかを判断する手段と、該セキュアビューの容量が超過したとの判定に応答して、前記ソースバーチャルマシンによって、前記対象バーチャルマシンが前記共有バッファを処理するのを終えるのを待つ手段と、前記ソースバーチャルマシンによって、前記対象バーチャルマシンによる前記共有バッファの処理の完了に応答して許可テーブルから前記共有バッファを除去する手段と、前記ソースバーチャルマシンによって、前記許可テーブルからの前記共有バッファの除去に応答して前記共有バッファを再要求する手段と、前記バーチャルマシンモニタによって、前記共有バッファの再要求に応答して当該コンピューティング装置の拡張ページテーブルを無効にする手段とを有する。
【０１２０】
例５１は、例３６乃至５０のいずれかの対象を含み、前記セキュアビューの容量が超過したかどうかを判断する手段は、該セキュアビューの次のポインタが前記セキュアビュー制御構造の参照ポインタを超えるかどうかを判断する手段を有する。
【符号の説明】
【０１２１】
１００  コンピューティング装置
１２０  プロセッサ
１２８  Ｉ／Ｏサブシステム
１３０  メモリ
１３４  拡張ページテーブル（ＥＰＴ）
１３６  拡張ページテーブルポインタ（ＥＰＴＰ）
１３８  データ記憶装置
１４０  通信サブシステム
２０２  バーチャルマシンモニタ（ＶＭＭ）
２０４  対象バーチャルマシン
２０６  ソースバーチャルマシン
２０８  認証モジュール
２１０  セキュアビューモジュール
２１２  共有メモリモジュール
２１４  共有メモリセグメント
２１６  セキュアビュー制御構造（ＳＶＣＳ）
２１８  データアクセスモジュール
２２２  バッファ所有権モジュール
２２４  ビュースイッチモジュール
２２６  ビュースイッチコンポーネント
２２８  セキュアビュー
２３０  アクセス制御モジュール
２３２  許可テーブル
【図１】
0005989862.tif 000002
【図２】
0005989862.tif 000003
【図３】
0005989862.tif 000004
【図４】
0005989862.tif 000005
【図５】
0005989862.tif 000006
【図６】
0005989862.tif 000007
【図７】
0005989862.tif 000008
【図８】
0005989862.tif 000009
【図９】
0005989862.tif 000010