(57)【要約】【課題】本発明の一実施例では、ネストした仮想化環境におけるイグジット及び／又はエントリ処理はより効率的に行われる。【解決手段】例えば、レイヤ０（Ｌ０）仮想マシン・マネージャ（ＶＭＭ）は、レイヤ１（Ｌ１）ＶＭＭを介して間接でなく、レイヤ２（Ｌ２）ゲスト割り込みを直接エミュレートし得る。この直接エミュレーションは、例えば、Ｌ１ＶＭＭとＬ０ＶＭＭとの間の仮想状態（例えば、仮想ＣＰＵ状態、仮想装置状態、及び／又は仮想物理メモリ状態）を共有化することにより、行われ得る。別の例として、Ｌ１  ＶＭＭ情報（例えば、Ｌ２物理対マシン・アドレス変換テーブル）はＬ１  ＶＭＭと  Ｌ０  ＶＭＭとの間で共有し得る。【選択図】図４
2011134320.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
プロセッサを使用して、第１の仮想マシン（ＶＭ）を生成し、前記第１のＶＭを、前記プロセッサに結合されたメモリに記憶する工程と、
ゲスト・アプリケーションを前記第１のＶＭで実行する工程と、
前記第１のＶＭを第１の仮想マシン・モニタ（ＶＭＭ）で実行する工程と、
前記第１のＶＭＭを第２のＶＭＭで、ネストされた仮想化環境において実行する工程と、
下にある仮想化装置をゲストに前記第２のＶＭＭで直接エミュレートする工程と
を含み、
前記第２のＶＭＭは前記第１のＶＭＭよりも低い仮想化レイヤに含まれ、前記仮想化装置は前記プロセッサに結合される方法。
【請求項２】
請求項１記載の方法であって、前記第１のＶＭＭをバイパスすることにより、前記装置を前記ゲストに前記第２のＶＭＭで直接エミュレートする工程を含む方法。
【請求項３】
請求項１記載の方法であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、前記装置に対応する仮想装置状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記装置を前記ゲストに前記第２のＶＭＭで直接エミュレートする工程を含む方法。
【請求項４】
請求項１記載の方法であって、
前記第１のＶＭＭと前記第２のＶＭＭとの間での仮想プロセッサ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記装置を前記ゲストに前記第２のＶＭＭで直接エミュレートする工程と、
前記仮想プロセッサ状態情報を前記プロセッサに結合されたメモリ部分に記憶する工程と
を含む方法。
【請求項５】
請求項１記載の方法であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、前記ゲストに関する仮想物理メモリ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記装置を前記ゲストに前記第２のＶＭＭでエミュレートする工程を含む方法。
【請求項６】
請求項１記載の方法であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、前記ゲストに関するアドレス変換情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記装置を前記ゲストに前記第２のＶＭＭで直接エミュレートする工程を含む方法。
【請求項７】
請求項１記載の方法であって、前記第１のＶＭＭ及び前記第２のＶＭＭは、同等の装置モデルを含む方法。
【請求項８】
請求項１記載の方法であって、前記ゲストに対応する準仮想化装置ドライバを直接エミュレートする工程を含む方法。
【請求項９】
請求項１記載の方法であって、前記第１のＶＭＭをバイパスして、前記第２のＶＭＭに直接、前記ゲストからネットワーク・パケット情報を送出する工程を含む方法。
【請求項１０】
プロセッサベースのシステムが、
第１の仮想マシン（ＶＭ）上でゲスト・アプリケーションを実行し、
前記第１のＶＭを第１の仮想マシン・モニタ（ＶＭＭ）上で実行し、
前記第１のＶＭＭを第２のＶＭＭ上で、ネストされた仮想化環境において実行し、
下にある仮想化エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートする
ことを可能にする命令を記憶する媒体を備えた製品。
【請求項１１】
請求項１０記載の製品であって、前記第１のＶＭＭをバイパスすることにより、前記システムが前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートすることを可能にする命令を更に記憶する製品。
【請求項１２】
請求項１０記載の製品であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、前記エンティティに対応する仮想エンティティ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記システムが前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートすることを可能にする命令を更に記憶する製品。
【請求項１３】
請求項１０記載の製品であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、仮想プロセッサ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記システムが前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートすることを可能にする命令を更に記憶する製品。
【請求項１４】
請求項１０記載の製品であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、前記ゲストに関する仮想メモリ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記システムが前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートすることを可能にする命令を更に記憶する製品。    
【請求項１５】
請求項１０記載の製品であって、前記エンティティが仮想化装置を含む製品。
【請求項１６】
装置であって、
メモリに結合され、（１）前記メモリに記憶された第１の仮想マシン（ＶＭ）上でゲスト・アプリケーションを実行し、（２）前記第１のＶＭを第１の仮想マシン・モニタ（ＶＭＭ）上で実行し、（３）前記第１のＶＭＭを第２のＶＭＭ上で、ネストした仮想化環境において実行し、（４）下にある仮想化エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートするためのプロセッサ
を備える装置。
【請求項１７】
請求項１６記載の装置であって、前記プロセッサは、前記第１のＶＭＭをバイパスすることにより、前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートする装置。
【請求項１８】
請求項１６記載の装置であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での仮想ゲスト状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートする装置。
【請求項１９】
請求項１６記載の装置であって、前記第１のＶＭＭと前記第２のＶＭＭとの間での、仮想ゲスト・プロセッサ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートする装置。
【請求項２０】
請求項１６記載の装置であって、前記プロセッサは、前記第１のＶＭＭと前記第２のＶＭＭとの間での、前記ゲストに関する仮想メモリ状態情報の共有に基づいて前記第１のＶＭＭをバイパスすることにより、前記エンティティを前記ゲストに前記第２のＶＭＭで直接エミュレートする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化に関し、特に、効率的なネストした仮想化に関する。
【背景技術】
【０００２】
仮想マシン・システムは、独立して動作する１つ又は複数の仮想マシン（ＶＭ）として、マシンの下にあるハードウェアがみえるように、物理マシンがパーティション化又は共有されることを可能にする。仮想マシン・モニタ（ＶＭＭ）は、コンピュータ上で実行し、１つ又は複数のＶＭの抽象化を他のソフトウェアに提示し得る。各ＶＭは、それ自身のオペレーティング・システム（ＯＳ）及び／又はアプリケーション・ソフトウェアを実行し、自己完結型のプラットフォームとして機能し得る。ＶＭ内で実行するソフトウェアは、併せてゲスト・ソフトウェアとして表すことができる。
【０００３】
ゲスト・ソフトウェアは、ＶＭでなく専用コンピュータ上で実行しているかのように動作することが期待され得る。すなわち、ゲスト・ソフトウェアは、種々のイベントを制御し、（物理マシンなどの）コンピュータ上のハードウェア資源に対するアクセスを有することが期待され得る。物理マシンのハードウェア・リソースは、１つ又は複数のプロセッサ、プロセッサ上に常駐するリソース（例えば、制御レジスタ、キャッシュ等）、メモリ（及び、記述子テーブルなどの、メモリに常駐する構造）、物理マシンに常駐する他のリソース（例えば、入出力（Ｉ／Ｏ）装置）を含み得る。イベントは、例えば、割り込み、例外、プラットフォーム・イベント（例えば、初期化（ＩＮＩＴ）又はシステム管理割り込み（ＳＭＩ））等を含み得る。
【０００４】
ＶＭＭは、必要に応じて、物理マシンのプロセッサ、装置、メモリ、レジスタ等との間でゲスト・ソフトウェア状態情報（状態）をスワップ又は転送し得る。プロセッサは、ＶＭとＶＭＭとの間での遷移中に一部の状態情報をスワップし得る。ＶＭＭは、特定の状況において、下にある物理マシンへの直接アクセスを可能にすることにより、ＶＭの性能を向上させることができる。これは、ゲスト・ソフトウェアにおける非特権モードにおいて動作が行われる（物理マシンへのアクセスが制限される）場合、又はＶＭＭが制御を確保したい、物理マシン内のハードウェア資源を動作が利用しない場合に特に適切であり得る。ＶＭＭは、ＶＭのホストとみなされる。
【０００５】
例えば、ＶＭＭ、又はＶＭの何れかの正しい実行にゲスト動作が影響を及ぼし得る都度、ＶＭＭは制御を取り戻す。通常、ＶＭＭは、ゲストの代わりにハードウェア及び／若しくは動作をエミュレートし、又は動作が、下にある物理マシンに進むことを可能にする前に問題が存在するかを判定して、前述の動作を検査する。例えば、ゲストがＩ／Ｏ装置にアクセスし、（例えば、制御レジスタ値を変更することにより、）マシン構成を変更するよう試行し、メモリの特定の領域にアクセスするよう試行する場合に、ＶＭＭは制御を取り戻す必要があり得る。
【０００６】
ＶＭ動作をサポートする既存の物理マシンは、仮想マシン制御構造（ＶＭＣＳ）、仮想マシン制御ブロック（ＶＭＣＢ）等などの構造を使用してＶＭの実行環境を制御し得る。ＶＭＣＳを例にとれば、ＶＭＣＳはメモリの領域に記憶し得、例えば、ゲストの状態、ＶＭＭの状態、ＶＭＭがゲスト実行中に制御を取り戻したい状態を示す制御情報を含み得る。物理マシン内の１つ又は複数のプロセッサは、ＶＭＣＳから情報を読み出してＶＭ及びＶＭＭの実行環境を判定し、ゲスト・ソフトウェアの挙動を適切に制約し得る。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
物理マシンのプロセッサは、ＶＭに入る遷移（すなわち、エントリ）又はＶＭを出る遷移（すなわち、エグジット）が行われる場合にマシン状態情報をロードし、記憶し得る。しかし、例えば、ＶＭＭが別のＶＭＭによってホスティングされる、ネストした仮想化環境では、エントリ及びエグジット手法は、例えば、状態情報及びメモリ情報を管理しようとする間に煩雑かつ非効率になり得る。
【課題を解決するための手段】
【０００８】
本発明の実施例の特徴及び利点は、特許請求の範囲、１つ又は複数の例示的な実施例の以下の詳細な説明、及び対応する図から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】従来のネストした仮想化環境を示す図である。
【図２】従来のネストした仮想化環境、及び装置をエミュレートする方法を示す図である
【図３】本発明の一実施例における効率的なネストされた仮想化の方法を示す図である。
【図４】本発明の種々の実施例を実現するためのブロック・システム図である。
【発明を実施するための形態】
【００１０】
以下の説明では、数多くの具体的な詳細を記載する。しかし、本発明の実施例は、前述の具体的な詳細なしで実施することができる。前述の説明が分かりにくくなることのないように、周知の回路、構造及び手法は詳細に示していない。「一実施例」、「実施例」、「例示的な実施例」、「種々の実施例」等への言及は、本実施例が、特定の構成、構造、又は特性を含み得るが、全ての実施例が、必ずしも、特定の構成、構造、又は特性を含む訳でないということを示す。更に、一部の実施例は、他の実施例について説明した構成の一部若しくは全部を有し得、又は、前述の構成を何ら有しないことがあり得る。更に、本明細書及び特許請求の範囲記載の「第１の」、「第２の」、「第３の」等は、共通の対象を示し、同様な対象の別々のインスタンスを表すことを示す。前述の形容詞は、そのように説明された対象が、時間上、空間上、ランキング上、又は何れかの他のやり方で特定の順序になければならないことを示唆することを意図するものでない。
【実施例】
【００１１】
図１は、従来のレイヤされたネストした仮想化環境のブロック概略図を含む。例えば、システム１００は、レイヤ０（Ｌ０）１１５、レイヤ１（Ｌ１）１１０、及びレイヤ２（Ｌ２）１０５を含む。ＶＭ１  １９０及びＶＭ２  １９５は、Ｌ０  ＶＭＭ  １３０「上」にあるか、又はＬ０  ＶＭＭ  １３０「によって」実行される。ＶＭ１  １９０は、ゲスト・オペレーティング・システムＯＳ１  １２５によってサポートされるアプリケーションＡｐｐｓｌ  １２０を含む。  よって、システム１００は、例えば、Ｌ１  ＶＭＭ  １６０がＬ０  ＶＭＭ  １３０上にあるか、又はＬ０  ＶＭＭ  １３０に「ネストされた」、ネストした仮想化環境である。Ｌ１  ＶＭＭ  １６０は、低位レイヤＬ０  ＶＭＭ１３０「によって」動作される。Ｌ１  ＶＭＭ  １６０は、それぞれがＯＳ２０  １７０／Ａｐｐｓ２０  １８０  ａｎｄ  ＯＳ２１  １７５／Ａｐｐｓ２１  １８５を実行するゲスト  ＶＭ２０  １９６及びゲストＶＭ２１  １９７を「サポート」する。
【００１２】
ＶＭＭがゲスト・オペレーティング・システム（ＯＳ）及びアプリケーションを実行することが可能であるように、Ｌ０  ＶＭＭ１３０は例えば、インテル社の仮想化手法（ＶＴ）、ＡＭＤのセキュア仮想マシン等を利用し得るカーネル仮想マシン（ＫＶＭ）であり得る。本願明細書及び特許請求の範囲記載の他のＶＭＭ及びＬ０  ＶＭＭ１３０は、コンピュータ・システム上の複数のオペレーティング・システム（又は同じオペレーティング・システムの複数のインスタンス）を管理するソフトウェア・プログラムを有し得るハイパーバイザを含み得る。ハイパーバイザは、各オペレーティング・システムが必要とするか、又は要求するものを割り当てるようシステムのプロセッサ、メモリ及び他のリソースを管理し得る。ハイパーバイザは、装置ドライバ、メモリ管理、ＯＳ等を含むファット・ハイパーバイザ（例えば、ＶＭウェアＥＳＸ）を含み得る。ハイパーバイザは、ハードウェアとホストＯＳ（例えば、リナックス）との間に結合されたシン・ハイパーバイザ（例えば、ＫＶＭ）も含み得る。（Ｘｅｎ  ｐｌｕｓ  ｄｏｍａｉｎ０などの）ゲスト・ソフトウェアにおいて装置ドライバが実行するサービスＯＳを有するハイブリッド・ハイパーバイザを更に含み得る。
【００１３】
システム１００では、仮想マシン拡張（ＶＭＸ）エンジンがゲストＬ１ＶＭＭ１６０に提示され、これは、ゲストＶＭ２０  １９６及びＶＭ２１  １９７を作成し得る。ＶＭ２０  １９６及びＶＭ２１  １９７は、仮想ＶＭＣＳ（ｖＶＭＣＳ２０  １６５及び  ｖＶＭＣＳ２１  １６６）それぞれによって管理され得る。ｖＶＭＣＳ２０  １６５及びｖＶＭＣＳ２１  １６６はそれぞれ、ｓＶＭＣＳ２０  １４５及び  ｓＶＭＣＳ２１  １５５などの真のＶＭＣＳでシャドウイングし得る。ｓＶＭＣＳ  １４５、１５５はそれぞれ、ＶＭ２０  １９６やＶＭ２１  １９７などのＬ２ゲストを実行する場合に物理ＶＭＣＳとしてロードすることができる。
【００１４】
図２は、従来のネストした仮想化環境、及び装置をエミュレートする方法を示す。図２は例えば、リナックス・ホストＯＳ及びＫＶＭ２１０に使用し得る。矢印１は、Ｌ０  ＶＭＭ  ２１０（図１のＬ０  ＶＭＭ１３０と同様）によって捕捉されるＬ２ゲスト２０５（例えば、図１のＶＭ２０  １９６、ＶＭ２１  １９７）からのＶＭイグジットを示す。矢印２は、Ｌ０  ＶＭＭ２１０がＬ１ゲスト２１５（図１のＬ１  ＶＭＭ１６０と同様）、又は、特に、Ｌ１  ＫＶＭ２３０モジュールにＶＭエグジットを強いる、又は向けることを示す。
【００１５】
矢印３は、例えば、装置モデル２２０、準仮想化ゲスト装置のフロントエンド・ドライバ等を補完するバックエンド・ドライバ等の何れかを使用してＬ２ゲスト２０５Ｉ／Ｏ挙動などのエンティティ（例えば、ゲスト、動作、イベント、装置ドライバ、装置等）をエミュレートするＬ１  ＶＭＭ２１５（Ｌ２ゲスト２０５）につながる。装置モデリングは、システムが種々の装置ドライバとインタフェースすることに寄与し得る。例えば、装置モデルは、ゲスト２０５から、下にある装置に仮想化ハードウェア・レイヤ／インタフェースを変換し得る。エミュレーションは、通常の単一レイヤ（ネストしていない）の特権リソース・アクセスのように行われるが、ネストした仮想化では、Ｉ／Ｏイベント（例えば、要求）がまず、Ｌ０  ＶＭＭ２１０によってトラップされ、次いで、イベントを受け取るようＬ１  ＶＭＭ  ２１５が構成された場合、Ｌ０  ＶＭＭ２１０はイベントをＬ１  ＬＭＭ２１５に強いる。Ｌ１  ＶＭＭ装置モデル２２０は、ゲスト毎に仮想状態（ｖＳｔａｔｅ）２２５を維持し得、単一レイヤ仮想化で行われることと同様に、Ｉ／Ｏイベント・サービスをＬ１  ＯＳに要求し得る。
【００１６】
更に、例えば、ネストした仮想化では、Ｉ／ＯはＬ２ゲスト２０５からＬ１仮想ホストＩ／Ｏ２４０に変換することができる。仮想ホストＩ／Ｏ２４０は、Ｌ０  ＶＭＭ２１０に配置された装置モデルの別のレイヤによってエミュレートされる（図２に示さず）。この処理は、単一レイヤ仮想化よりも遅いことがあり得る。よって、仮想ホストＩ／Ｏ２４０はＬ０  ＶＭＭ２１０における装置モデルによってエミュレートされた装置ドライバであり得る。仮想ホストＩ／Ｏ２４０は、Ｌ０  ＶＭＭ２１０におけるバックエンド・ドライバによってサービスされる準仮想化フロントエンド・ドライバでもあり得る。ホストＩ／Ｏ２４５は、物理Ｉ／Ｏ装置のＩ／Ｏドライバであり得る。矢印４及び５を介して、Ｌ１  ＶＭＭ２１５は、アウントバウンドＩ／Ｏ（例えば、ネットワーク・パケット）を、下にあるハードウェアにＬ０  ＶＭＭ２１０を介して転送することができる。
【００１７】
インバウンドＩ／Ｏは、次いで、ハードウェアから受け取り得、次いで、Ｌ０  ＶＭＭ２１０を介してＬ０装置モデル又はバックエンド・ドライバ等により、矢印６を介してＬ１  ＶＭＭ２１５に、かつ、矢印７を介して装置モデル２２０にルーティングし得る。装置モデルがエミュレーションを完了した後、矢印８及び９を介してＩ／Ｏのサービスの完了を示すようＬ０  ＶＭＭ２１０を介してＬ２ゲスト２０５に通知する旨をＬ１  ＶＭＭ２１５に要求することができる。Ｌ０  ＶＭＭ２１０は、Ｌ２ゲスト２０５を再開させるようＬ１  ＶＭＭ２１５からの仮想ＶＭ再開イベントをエミュレートし得る。
【００１８】
方法２００にみられるように、従来のネストした仮想化処理を使用したＩ／Ｏのサービスは、例えば、マルチレイヤ化された仮想化環境に固有の特権制限による間接ベンチャーである。例えば、ネストした仮想化により、Ｌ１  ＶＭＭ２１５は、特権解除されて動作し、よって、特権リソースにアクセスするために特権Ｌ０  ＶＭＭ２１０に依存しなければならない。これは非効率的である。
【００１９】
以下に、この非効率性を示す。例えば、単一のレイヤＶＭＭにおけるＩ／Ｏエミュレーションは、ゲスト・アクティビティを首尾良くエミュレートするために多数回（例えば、アクセス数（「ＮＡ」））だけ、システム特権リソースにアクセスし得る。特に、単一レイヤＶＭＭは、そのＩ／Ｏエミュレーション・パスにおけるＶＭＣＳレジスタ及び／又は物理Ｉ／Ｏレジスタ、制御レジスタ（ＣＲ）などの特権リソースにアクセスすることができる。しかし、ネストした仮想化では、上記処理は異なり得る。例えば、単一レイヤ仮想化においてＬ２ゲストＩ／ＯをエミュレートするＶＭＭは、ネストした仮想化構造においてＬ１  ＶＭＭになる。このＬ１  ＶＭＭは次いで、非特権モードにおいて実行される。Ｌ１  ＶＭＭにおける特権リソース・アクセスはそれぞれ、次いで、更なるエミュレーションのためにＬ０  ＶＭＭに対するＶＭエグジットをトリガする。このトリガは、Ｌ２ゲストＶＭとＬ１  ＶＭＭとの間で行われるトラップに加えて行われる。よって、「アクセス毎サイクル数」）「ＮＣ」）又は、アクセス毎の「Ｐｅｒ＿ＶＭ＿Ｅｘｉｔ＿ｃｏｓｔ」が増加する。よって、Ｌ２ゲストのＩ／Ｏエミュレーションの更なるコストは、Ｌ２ＮＣ＝ＮＣ＊ＮＡになる。これは、単一レイヤ仮想化と比較して大きな計算量オーバヘッドである。ＫＶＭを使用する場合、ＮＣはおおよそ、５０００サイクルであり得、ＮＡはおおよそ２５であり得る。よって、Ｌ２ＮＣ＝５０００サイクル／アクセス＊２５アクセス＝１２５０００オーバヘッド・サイクルになる。
【００２０】
本発明の一実施例では、ネストした仮想化環境におけるイグジット及び／又はエントリ処理は、より効率的に行われる。例えば、Ｌ０ＶＭＭは、Ｌ１ＶＭＭを介して間接でなく、直接、Ｌ２ゲストＩ／Ｏをエミュレートすることができる。この直接エミュレーションは、例えば、Ｌ１ＶＭＭとＬ０ＶＭＭとの間の仮想ゲスト状態（例えば、仮想ＣＰＵ状態、仮想装置状態、及び／又は仮想物理メモリ状態）を共有することにより、行われ得る。別の例として、Ｌ１  ＶＭＭ情報（例えば、以下のＬ２物理対マシン（「ｐ２ｍ」）アドレス変換テーブル）はＬ１  ＶＭＭと  Ｌ０  ＶＭＭとの間で共有し得る。
【００２１】
本発明の一実施例では、この効率の増加は、例えば、同じＶＭＭがＬ０レイヤ上及びＬ１レイヤ上で実行されるので実現し得る。この状態は、例えば、第２のＫＶＭの上で第１のＫＶＭを実行する場合に、レイヤ化されたＶＴ状態で生じ得る。前述のシナリオでは、Ｌ０及びＬ１のＶＭＭにおける装置モデルは同じであり、よって、装置モデルは、Ｌ０ＶＭＭ又はＬ１ＶＭＭによって使用される仮想装置状態フォーマットを理解する。
【００２２】
しかし、本発明の実施例は、Ｌ０レイヤ及びＬ１レイヤに同じＶＭＭを使用することを必要としない。本発明の一部の実施例は、Ｌ０レイヤ及びＬ１レイヤの別々のＶＭＭタイプを使用し得る。前述の場合には、Ｌ２ゲストの仮想状態情報は、Ｌ１  ＶＭＭ及びＬ１  ＶＭＭ及びＬ１ＶＭＭ装置モデルに含まれ得るが、Ｌ０ＶＭＭ及びＬ０ＶＭＭ装置モデルとなお共有され、Ｌ０ＶＭＭ及びＬ０ＶＭＭ装置モデルによって理解され得る。
【００２３】
対照的に、従来のシステムでは、Ｌ１  ＶＭＭに知られている仮想ゲスト状態は、Ｌ０  ＶＭＭに知られていないか、又はＬ０  ＶＭＭと共有されていない（又は逆である）。前述の、共有されていないことは、例えば、Ｌ１  ＶＭＭが、ネーティブ・プラットフォーム上で実行するか、又は、仮想化プラットフォーム上で実行するかを知らないので、生じ得る。更に、Ｌ１  ＶＭＭは例えば、Ｌ０  ＶＭＭが認識する共有状態のビット形式／意味論を分からないことがあり得る。更に、従来のシステムでは、Ｌ２ゲストは、Ｌ１  ＶＭＭのゲストであり、したがって、Ｌ０  ＶＭＭについて分からない。よって、単一レイヤ仮想化シナリオと同様に、Ｌ２ゲスト・イグジットは、Ｌ０ＶＭＭでなく、Ｌ１ＶＭＭに進む。図２に関して説明したように、２レイヤ仮想化の場合、Ｌ０  ＶＭＭはなお、Ｌ２ゲストＶＭイグジットがＬ１  ＶＭＭに進むことを確実にする。よって、本発明の一部の実施例は従来のシステムと異なる。例えば、仮想状態（例えば、仮想ゲスト状態）がＬ０ＶＭＭとＬ１ＶＭＭとの間で共有されるからである。よって、Ｌ０  ＶＭＭは例えば、Ｌ２ゲストＩ／Ｏをエミュレートし、ネストした仮想化に従来関連付けられたオーバヘッドの一部を避けることが可能である。
【００２４】
図３は、効率的なネストした仮想化の方法３００を含む。説明の目的で、ネットワーク・パケットの送信を処理する方法３００を示すが、上記方法は、前述のイベントの処理に制限されず、その代わりに、Ｉ／Ｏイベント（例えば、ネットワーク情報、ディスク読み出し及び書き込み、ストリーム入力及び出力等の受け取り、処理、及び送信）などの種々のイベントに適用可能である。更に、上記手法は、エミュレートされた装置などのエンティティとの協働のみに限定されない。例えば、本方法の実施例は、準仮想化装置ドライバなどのエンティティとも機能し得る。
【００２５】
しかし、図３全体に言及する前に、まず、仮想化環境及び準仮想化環境全体に言及する。仮想化環境は、完全に仮想化された環境、及び準仮想化された環境を含む。完全に仮想化された環境では、各ゲストＯＳは、その下にあるＶＭが単純に、ゲストＯＳがサポートする独立した物理処理システムであるかのように動作し得る。よって、ゲストＯＳは、サポートされた物理処理システムのアーキテクチャ仕様に応じてＶＭが挙動することを期待するか、又は望み得る。対照的に、準仮想化では、ゲストＯＳは、ＶＭＭが仮想化環境を提供することに寄与する。よって、ゲストＯＳは仮想化アウェアとして特徴付けることができる。準仮想化ゲストＯＳは特定のＶＭＭとともにのみ動作することができる一方、完全に仮想化された環境のゲストＯＳは、別々の２つ以上の種類のＶＭＭを動作し得る。準仮想化は、特定のＶＭＭ上で実行し得るように望ましい、カーネルなどのゲスト・オペレーティング・システムのソース・コードに変更を行い得る。
【００２６】
準仮想化Ｉ／Ｏ（例えば、Ｉ／Ｏイベント）は、（修正された）準仮想化ＯＳカーネルとともに、若しくは（修正された）準仮想化ＯＳカーネルにおいて、かつ、（修正されていない）完全に仮想化されたＯＳカーネルとともに、若しくは（修正されていない）完全に仮想化されたＯＳカーネルにおいて使用することが可能である。準仮想化Ｉ／Ｏは、ＶＭＭ（例えば、Ｌ０  ＶＭＭ）に配置されたバックエンド・ドライバと通信するようゲスト装置におけるフロントエンド・ドライバを使用し得る。更に、準仮想化は、トラップ・アンド・エミュレーションの労力を節減する旨のバルク・データを伝えるよう共有メモリを使用し得る一方、元のエミュレートされた装置によって提示される意味論に、完全に仮想化されたI／Oが従うことが望ましいことがあり得る。
【００２７】
図３に戻れば、方法３００は、全てを組み合わせて、例えばインテルＥｐｒｏ１０００（８２５４６ＥＢ）ＮＩＣなどのネットワーク・インタフェース・カード（ＮＩＣ）の仮想化環境を形成する、ＶＭ２０  ３９６をサポートするＬ０  ＶＭＭ３３０及びＬ１  ＶＭＭ３６０を含む。方法３００が始まる前に、Ｌ０  ＶＭＭ３３０は、Ｌ１  ＶＭＭ３６０を実行し得るＶＭ２（図示せず）ＶＭ２を作成し得る。更に、Ｌ０  ＶＭＭ３３０は、Ｌ１ゲスト擬似物理アドレス対レイヤ０マシン・アドレス変換テーブル若しくはマップ（例えば、Ｌ１＿ｔｏ＿Ｌ０＿ｐ２ｍ［］）、又はＶＭ２メモリ割り当ての知識を有し得る。行１では、Ｌ１  ＶＭＭ３６０は、ＶＭ２「に」含まれるＬ２ゲストＶＭ２０  ３９６を作成し得る。Ｌ１  ＶＭＭ３６０は、ＶＭ２０  ３９６に対する擬似Ｐ２Ｍマッピング（すなわち、ＶＭ２０  ３９６ゲスト物理アドレス対Ｌ１  ＶＭＭ３６０擬似物理アドレス（例えば、Ｌ２＿ｔｏ＿Ｌ１＿ｐ２ｍ［］））の知識を有し得る。行２では、Ｌ１  ＶＭＭ３６０は、ＶＭ２０  ３９６に対する、Ｌ２ゲスト物理アドレスからＬ０  ＶＭＭ３６０の真の物理アドレス・テーブル（例えば、Ｌ２＿ｔｏ＿Ｌ０＿ｐ２ｍ［］））へのマッピングをＬ０  ＶＭＭ  ３３０に要求する旨の要求を（例えば、ハイパーコールＨ０又は他の通信チャネルを介して）出し得る。
【００２８】
行３では、Ｌ０  ＶＭＭ３３０は、行２から要求を受け取り得る。行４では、Ｌ０  ＶＭＭ３３０は、先行して受け取ったか、又は既知の情報（すなわち、Ｌ２＿ｔｏ＿Ｌ１＿ｐ２ｍ［］）を使用してＶＭ２０ゲスト物理アドレスをＬ０マシン・アドレスに再マッピングし得る（Ｌ２＿ｔｏ＿Ｌ０＿ｐ２ｍ［］）。このことは、例えば、Ｌ１ＶＭＭ３６０又はＬ１ゲスト（ＶＭ２）のＰ２Ｍテーブルを利用することによって達成される（Ｌ１＿ｔｏ＿Ｌ０＿ｐ２ｍ［］）。これは、Ｌ２ゲスト・メモリがＬ１ゲスト（ＶＭ２）の一部であるので可能である。例えば、特定のＬ２ゲスト物理アドレスｘについて：Ｌ２＿ｔｏ＿Ｌ０＿ｐ２ｍ［ｘ］＝Ｌ１＿ｔｏ＿Ｌ０＿ｐ２ｍ［Ｌ２＿ｔｏ＿Ｌ１＿ｐ２ｍ［ｘ］］である。
【００２９】
行５では、Ｌ１  ＶＭＭ３６０は、ＶＭ２０  ３９６を起動し得、ＶＭ２０  ３９６の実行が開始し得る。行６では、ＶＭ２０ＯＳが開始し得る。行７では、ＶＭ２０  ３９６ＯＳの実行は、仮想ＮＩＣ装置などの仮想装置をイネーブル得る。
【００３０】
これは、行８における仮想ＮＩＣ装置の初期化をもたらし得る。行９では、Ｌ１  ＶＭＭ３６０は、（例えば、ハイパーコールＨ１又は他の通信チャネルを介して）Ｌ０  ＶＭＭ３３０と通信して、ＮＩＣ装置（例えば、ｖｍ２０＿ｖｅｐｒｏ１０００＿ｓｔａｔｅ）及び／又はＣＰＵの仮想ゲスト状態を共有する旨を要求し得る。ゲスト仮想ＣＰＵ又はプロセッサ状態は、例えば、ＶＭ２０  ３９６のｌ２＿ｖＣＲ３などのＬ２仮想制御レジスタ（ＣＲ）ＣＲ３に対応し得るｖｍ２０−ｖＣＰＵ−ｓｔａｔｅを含み得る。状態情報は、例えば、Ｌ１  ＶＭＭ及びＬ０  ＶＭＭが共有状態をみて、前述の状態を操作することが可能な共有メモリを介して共有し得る。
【００３１】
行１０では、Ｌ０  ＶＭＭ３３０は、要求（例えば、ハイパーコールＨ１）を受け取り得、行１１では、Ｌ０  ＶＭＭ３３０は、仮想ＮＩＣ装置状態をＬ０  ＶＭＭ４３０内部アドレス空間に再マッピングし得る。よって、Ｌ０  ＶＭＭ４３０は、仮想ＮＩＣ及びＣＰＵ状態情報にアクセスすることができる。
【００３２】
行１２では、ＶＭ２０は、送信バッファ及びその直接メモリ・アクセス（ＤＭＡ）制御データ構造（インテル８２５４６ＥＢ  ＮＩＣコントローラにおけるＤＭＡ要求記述子リング構造など）を充填することにより、パケットの送信を開始し得る。Ｌ０  ＶＭＭ３３０は、この場合、Ｌ１  ＶＭＭ３６０をバイパスし、ＶＭ  ２０  ３９６と直接インタフェースする。行１３では、ＶＭ２０は、インテル８２５４６ＥＢ  ＮＩＣコントローラにおける送信記述子テール（ＴＤＴ）レジスタなどのハードウェア特有レジスタをプログラミングすることにより、そのネーティブ環境で動作した場合にＶＭ２０が行うように、充填されたＤＭＡ記述子の完了を仮想ＮＩＣ装置に通知し得る。ＴＤＴレジスタは、メモリ・マップされたＩ／Ｏ（ＭＭＩＯ）レジスタであり得るが、例えば、ポートＩ／Ｏであってもよい。Ｌ１  ＶＭＭ３６０は、ＭＭＩＯアドレスの直接変換を有しないことがあり得、これは、Ｌ１  ＶＭＭ３６０がイグジット・イベント（例えば、ページ・フォールト（＃ＰＦ）ＶＭイグジット）を介してゲストＭＭＩＯアクセスをトラップし、エミュレートすることを可能にし得る。よって、Ｌ０  ＶＭＭ３３０は、Ｌ１  ＶＭＭ変換をエミュレートする、ＭＩＭＯアドレスの変換を有しないことがあり得る。
【００３３】
行１４では、ＴＤＴレジスタのアクセスがＶＭイグジット（＃ＰＦ）をトリガする。Ｌ０  ＶＭＭ３３０は、＃ＰＦの線形アドレス（例えば、ｌ２＿ｇｖａなどのＭＭＩＯアクセス・アドレス）をＶＭイグジット情報から得ることができる。行１５では、Ｌ０  ＶＭＭ３３０は、Ｌ２ゲスト・ページ・テーブルをウォークするか、又は横切ってｌ２＿ｇｖａをそのＬ２ゲスト物理アドレス（例えば、ｌ２＿ｇｐａ）に変換し得る。Ｌ２ゲスト・ページ・テーブルのウォーク又は横断は、Ｌ２ゲストＣＲ３が指し示すＬ２ゲスト物理アドレス（例えば、ｌ２＿ｖｃｒ３）から開始し得る。
【００３４】
行１６では、Ｌ０  ＶＭＭ３３０は、ｌ２＿ｇｐａが、アクセラレーテッドＩ／Ｏ（すなわち、Ｉ／Ｏエミュレーションは、Ｌ１  ＶＭＭ２１５をバイパスし得る）であるか否かを判定し得る。ｌ２＿ｇｐａがアクセラレーテッドＩ／Ｏである場合、行１７で、Ｌ０  ＶＭＭは、共有仮想ＮＩＣ及びＣＰＵ状態（例えば、ｖｍ２０＿ｖｅｐｒｏ１０００＿ｓｔａｔｅ及びｖｍ２０−ｖＣＰＵ−ｓｔａｔｅ）に基づいてエミュレーションを行い得る。行１８では、Ｌ０  ＶＭＭ３３０は、Ｌ２仮想ＮＩＣ装置ＤＭＡ記述子をフェッチし、Ｌ２＿ｔｏ＿Ｌ０＿ｐ２ｍテーブルによる変換を行ってｌ２のゲスト物理アドレスを実のマシン物理アドレスに変換し得る。行１９では、Ｌ０  ＶＭＭ  ３３０は、送信ペイロードを有し得、Ｌ０ホストＩ／Ｏにおいてペイロードを送信し得る。ＬＯ  ＶＭＭ  ３３０は、共有データにおけるｖｍ２０＿ｖｅｐｒｏ１０００＿ｓｔａｔｅ及びｖｍ２０−ｖＣＰＵ−ｓｔａｔｅも更新し得る。行２０では、Ｌ２ゲストは再開し得る。
【００３５】
よって、Ｌ０  ＶＭＭ３３０は、（Ｌ０  ＶＭＭ３３０及びＬ１  ＶＭＭ３６０間での）共有Ｌ２＿ｔｏ＿Ｌ０＿ｐ２ｍテーブル、ｖｍ２０＿ｖｅｐｒｏ１０００＿ｓｔａｔｅ及びｖｍ２０−ｖＣＰＵ−ｓｔａｔｅ（例えば、ｌ２  ｖＣＲ３）を使用して、仮想ＮＩＣ装置ＤＭＡ記述子リング及び送信バッファにアクセスし、よって、Ｌ１  ＶＭＭ３６０を介して外部ネットワークに間接的にパケットを送出することなく、外部ネットワークに直接、パケットを送出し得る。Ｌ０  ＶＭＭ  ３３０がＬ２ゲストＩ／ＯアクセスをＬ１  ＶＭＭ３６０に渡す必要があった場合、そうすることは、Ｌ１  ＶＭＭ  ３６０とＬ０  ＶＭＭ３３０との間での多くのＶＭイグジット／エントリ動作をトリガした場合がある。前述のイグジット／エントリ動作は劣悪な性能をもたらし得る。
【００３６】
方法３００の例では、パケット送信は、割り込み要求（ＩＲＱ）をトリガしていない。しかし、ＩＲＱが、例えば、送信完了によって生じた場合、Ｌ１  ＶＭＭ３６０は、仮想割り込みインジェクションに使用し得る。しかし、一実施例では、例えば、Ｌ０  ＶＭＭ３３０によって直接操作される仮想ＣＰＵ状態情報、メッセージ・シグナルされた割り当て（ＭＳＩ）状態、Ｉ／Ｏ  ＡＰＩＣ状態、仮想高度プログラマブル割り込みコントローラ（ＡＰＩＣ）状態などの割り込みコントローラ状態情報を共有することにより、ＩＲＱインジェクションのＬ１  ＶＭＭ介入をバイパスするよう更なる最適化を行い得る。
【００３７】
方法３００は、パケット送信の装置モデルを使用することに関する。しかし、本発明の一部の実施例は、方法３００とは実質的異なるものでないパケットを受信するための方法論を使用し得、よって、本明細書及び特許請求の範囲で特に言及しない。一般に、Ｌ０  ＶＭＭが、パケットの最終的な受領者がＬ２ゲストである旨を決定することが可能である場合、同じ方法は、（Ｌ０  ＶＭＭ３３０における）受信パケットをＬ２ゲスト・バッファに直接複製し、仮想ＮＩＣ装置状態を更新することが可能である。このために、Ｌ１  ＶＭＭ３３０はそのネットワーク構成情報（例えば、Ｌ２ゲストのＩＰアドレス、Ｌ１  ＶＭＭのフィルタリング情報）をＬ０  ＶＭＭと共有し得る。更に、別々のＬ２  ＶＭに送出されるパケットは同じ物理ＮＩＣに到着し得る。よって、Ｌ０ＶＭＭにおけるスイッチは、例えば、媒体アクセス制御（ＭＡＣ）アドレス、ＩＰアドレス等などに基づいてパケットを別々のＶＭに配信し得る。
【００３８】
方法３００と同様な方法は、準仮想化装置に使用することもできる。例えば、準仮想化ネットワーク装置は、完全にエミュレートされた装置と同様に動作し得る。しかし、準仮想化装置では、Ｌ２ゲスト又はフロントエンド・ドライバはＶＭＭアウェア・ドライバであり得る。サービスＶＭ（例えば、図２におけるＬ１  ＶＭＭ２１５）は、図２における装置モデル２２０よりもＬ２ゲストＩ／Ｏ要求をサービスするようバックエンド・ドライバを実行し得る。Ｌ０  ＶＭＭは、Ｌ１  ＶＭＭバックエンド・ドライバからの共有装置状態を理解し、Ｌ２ゲストの要求を直接サービスするための機能を有し得る。これは、本発明の一実施例におけるＬ１  ＶＭＭにおけるバックエンド・ドライバと同じバックエンド・ドライバをＬ０  ＶＭＭが実行させ得るということを意味し得る。特に、図３のパケット送信の例を使用すれば、行１２及び行１３は、準仮想化環境において機能する場合に改変され得る。行１２及び１３における実際の装置の意味論に基づいた動作は、パケット送信を開始する旨を仮想ハードウェアに通知する目的で、ＶＭ２０  ３９６からのハイパーコールなどのより効率的な方法で置き換え得る。更に、行１４乃至１８（行１２乃至１３からの要求をサービスする）は、実際の装置の意味論に基づいて転送されたパラメータとはわずかに異なり得る。例えば、Ｌ０  ＶＭＭは、準仮想化Ｉ／Ｏによって定義された方法によって渡されるバッファ・アドレスを使用してゲスト送信バッファをフェッチし得る。準仮想化Ｉ／Ｏ動作でパケットを受信することは、パケットを送出するための上記処理と同様であり、よって、方法は、本明細書及び特許請求の範囲では更に言及しない。
【００３９】
よって、本明細書及び特許請求の範囲記載の種々の実施例は、例えば、Ｌ２ゲストＩ／Ｏエミュレーション／サービスを行う場合にＬ１  ＶＭＭをＬ０  ＶＭＭがバイパスすることを可能にし得る。すなわち、種々の実施例は、Ｌ０  ＶＭＭバイパス（ある程度はＬ１  ＶＭＭ）でＬ２ゲストに対する仮想化エンティティ（例えば、完全に仮想化された装置、準仮想化装置等）を直接、エミュレート／サービスする。これは、通常、（例えば、Ｌ２ゲストとＬ１  ＶＭＭとの間などの）親ＶＭＭにしか知られていないことがあり得る、Ｌ０ＶＭＭとＬ１ＶＭＭとの間でＬ２ゲスト状態情報を共有することによって行うことができる。Ｌ１  ＶＭＭとＬ０  ＶＭＭとの間の共有は、更なる性能のためにＬ１  ＶＭＭをバイパスすることに寄与し得る。
【００４０】
本明細書及び特許請求の範囲使用のモジュールは、何れかのハードウェア。ソフトウェア、ファームウェア、又はそれらの組み合わせを表す。多くの場合、別個として示すモジュール境界は通常、変動し、潜在的には、重なる。例えば、第１のモジュール及び第２のモジュールは、独立した特定のハードウェア、ソフトウェア、又はファームウェアを維持しながら、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせを共有し得る。一実施例では、ロジックという語の使用は、トランジスタ、レジスタなどのハードウェア、又はプログラム可能なロジック装置などの他のハードウェアを含む。しかし、別の実施例では、ロジックは、ファームウェアやマイクロコードなどの、ハードウェアと一体化されたコード又はソフトウェアも含む。
【００４１】
実施例は、別々の多くのシステム・タイプで実現することができる。次に図４を参照すれば、本発明の実施例によるシステムのブロック図を示す。マルチプロセッサ・システム５００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続５５０を介して結合された第１のプロセッサ５７０及び第２のプロセッサ５８０を含む。プロセッサ５７０及び５８０はそれぞれ、第１のプロセッサ・コア及び第２のプロセッサ・コア（すなわち、プロセッサ・コア５７４ａ及び５７４ｂ、並びにプロセッサ・コア５８４ａ及び５８４ｂ）を含むマルチコア・プロセッサであり得るが、潜在的には、更に多くのコアがプロセッサに存在し得る。「プロセッサ」の語は、レジスタ及び／又はメモリに記憶し得る他の電子データに電子データを変換するようレジスタ及び／又はメモリからの電子データを処理する何れかの装置、又は装置の部分を表し得る。
【００４２】
第１のプロセッサ５７０は、メモリ・コントローラ・ハブ（ＭＣＨ）５７２、並びに、ポイントツーポイント（Ｐ−Ｐ）インタフェース５７６及び５７８を更に含む。同様に、第２のプロセッサ５８０は、ＭＣＨ５８２、並びにＰ−Ｐインタフェース５８６及び５８８を含む。ＭＣＨ５７２及び５８２は、局所にそれぞれのプロセッサに接続された主メモリ（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ））の一部分であり得るそれぞれのメモリ（すなわちメモリ５３２及びメモリ５３４）にプロセッサを結合させる。第１のプロセッサ５７０及び第２のプロセッサ５８０は、Ｐ−Ｐ相互接続５５２及び５５４それぞれを介してチップセット５９０に結合することができる。チップセット５９０はＰ−Ｐインタフェース５９４及び５９８を含む。
【００４３】
更に、チップセット５９０は、Ｐ−Ｐ相互接続５３９により、高性能グラフィックス・エンジン５３８とチップセット５９０を結合するためのインタフェース５９２を含む。同様に、チップセット５９０は、インタフェース５９６を介して第１のバス５１６に結合し得る。種々の入出力（Ｉ／Ｏ）装置５１４は、第１のバス５１６を第２のバス５２０に結合するバス・ブリッジ５１８とともに第１のバス５１６に結合し得る。一実施例では、例えば、コード５３０を含む、ディスク・ドライブや他の大容量記憶装置などのデータ記憶装置５２８、通信装置５２６、キーボード／マウス５２２を含む第２のバス５２０に種々の装置を結合し得る。更に、オーディオＩ／Ｏ５２４は、第２のバス５２０に結合し得る。
【００４４】
実施例はコードで実現することができ、命令を行うためにシステムをプログラミングするために使用することが可能な命令を記憶させた記憶媒体上に記憶することができる。記憶媒体は、限定列挙でないが、フロッピー（登録商標）・ディスク、光ディスク、ソリッド・ステート・ドライブ（ＳＳＤ）、コンパクト・ディスク・リードオンリ・メモリ（ＣＤ−ＲＯＭ）、書換可能コンパクト・ディスク（ＣＤ−ＲＷ）及び光磁気ディスクなどの何れかのタイプのディスク、リードオンリ・メモリ（ＲＯＭ）、ダイナミック・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・セクセス・メモリ（ＳＲＡＭ）などのランダム・アクセス・メモリ（ＲＡＭ）、消去可能プログラマブル・リードオンリ・メモリ（ＥＰＲＯＭ）、フラッシュ・メモリ、電気的消去可能プログラマブル・リード・オンリ・メモリ（ＥＥＰＲＯＭ）などの半導体デバイス、磁気若しくは光カード、又は電子的命令の記憶に適した何れかの他のタイプの媒体を含み得る。
【００４５】
本発明の実施例は、命令、関数、手続、データ構造、アプリケーション、アプリケーション・プログラム、構成設定、コード等などのデータを参照して説明し得る。データがマシンによってアクセスされると、マシンは、本明細書及び特許請求の範囲に記載したように、タスクを行い、抽象的なデータ・タイプを定義し、低レベル・ハードウェア・コンテキストを確立し、かつ／又は他の動作を行うことによって応答し得る。データは、揮発性及び／又は不揮発性データ記憶装置に記憶し得る。本開示の目的で、「コード」あるいは「プログラム」あるいは「アプリケーション」という語は、ドライバ、処理、ルーティン、方法、モジュール、サブプログラムを含む広い範囲の構成部分及び構成を包含する。よって、「コード」あるいは「プログラム」あるいは「アプリケーション」は、処理システムによって実行されると所望の動作を行う何れかの命令の集合を表し得る。更に、本明細書及び特許請求の範囲記載の動作（図３）全てよりも少ない動作を使用する処理、別の順序で同じ動作を使用する処理、並びに、本明細書及び特許請求の範囲記載の個々の動作が組み合わせられ、分割され、又は、別のやり方で改変される処理を含み得る。      
本発明は、限定数の実施例について説明しているが、当業者は、数多くの修正及び変形をそれらから認識するであろう。特許請求の範囲記載の請求項が、本発明の真の趣旨及び範囲の範囲内に収まる前述の修正及び変形全てを包含することが意図されている。
【符号の説明】
【００４６】
５００  システム
５３２  メモリ
５３４  メモリ
５７０  プロセッサ
５８０  プロセッサ
【図１】
2011134320.tif 000003
【図２】
2011134320.tif 000004
【図３】
2011134320.tif 000005
【図４】
2011134320.tif 000006