(57)【要約】【解決手段】多層メカニズムを用いて仮想化が達成できる階層的な仮想化を開示する。階層的な仮想化は、第１のパーティションを維持するハイパーバイザを使用することと、第２のパーティション作成し制御するための第１のパーティション内の仮想化スタックを使用すること、を含む。複数の仮想化スタックは、第１のパーティション内に存在可能であって、そのような仮想化スタックそれぞれが、複数のパーティションを作成し制御可能である。特定の一実装においては、子パーティションは、親パーティション関連のリソースの一部又はすべての排他制御を有し得る。そのように仮想化された環境における最終的な調停者としてのハイパーバイザが、そのような設定を実施し、仮想化された階層構造における任意のパーティション内で直接に通信できる。【選択図】図４Ｂ
2009506462.tif 000002
【特許請求の範囲】
【請求項１】
階層的な仮想化を提供するための方法であって、
ハイパーバイザ（６００）を用いて第１のパーティション（６０８）を維持するステップと、
前記第１のパーティション（６０８）内の第１の仮想化スタック（６０２）を使用し、第２のパーティション（６０６）と対話するステップであって、前記ハイパーバイザ（６００）が、前記第１のパーティション（６０８）及び前記第２のパーティション（６０６）を認識しているもの、を含む方法。
【請求項２】
前記ハイパーバイザ（４００）が更に、前記第１のパーティション（４０６）及び前記第２のパーティション（４１４）内の少なくとも１つのリソース（４１６）を認識していて、リクエストされたとき、前記ハイパーバイザ（４００）が、前記少なくとも１つのリソース（４１６）を列挙するように構成されること、を特徴とする請求項１記載の方法。
【請求項３】
前記第２のパーティション（６０６）が、前記ハイパーバイザ（６００）と直接に通信すること、を特徴とする請求項１記載の方法。
【請求項４】
前記第１の仮想化スタック（６０２）が、前記第２のパーティション（６０６）を生成すること、を特徴とする請求項１記載の方法。
【請求項５】
前記第２のパーティション（６０６）が、第３のパーティション（６０５）を作成し対話するように構成される第２の仮想化スタック（６１０）を含むこと、を特徴とする請求項４記載の方法。
【請求項６】
前記第１のパーティション（５０８）が、前記第１の仮想化スタック（５０２）を含んでいて、第２の仮想化スタック（５０３）もまた含んでいて、少なくとも任意の期間、前記第１の仮想化スタック（５０２）及び前記第２の仮想化スタック（５０３）が、前記第１のパーティション（５０８）内に同時に含まれること、を特徴とする請求項１記載の方法。
【請求項７】
前記第１の仮想化スタック（５０８）が、前記第２のパーティション（５０４）及び第３パーティション（５０６）を生成すること、を特徴とする請求項１記載の方法。
【請求項８】
セキュアで階層的な仮想化を提供するための方法であって、
親パーティション（４０４）を提供するステップであって、前記親パーティション（４０４）が、仮想化スタック（４０２）を有するものと、
子パーティション（４０６）を提供するステップであって、前記子パーティション（４０６）が、前記親パーティション（４０４）内の前記仮想化スタック（４０２）によって生成され、前記子パーティション（４０６）が、少なくとも前記子パーティション（４０６）によって排他的に制御されるリソース（４１４）を有するものと、を含む方法。
【請求項９】
前記リソース（４１４）が、少なくとも１つのメモリページを含むこと、を特徴とする請求項８記載の方法。
【請求項１０】
前記子パーティション（４０６）が、前記親パーティション（４０４）へのリクエスト（４１０）を作成することによって前記リソース（４１４）の排他制御を取得すること、を特徴とする請求項８記載の方法。
【請求項１１】
ハイパーバイザ（４００）が、前記子パーティション（４０６）によって作成された前記リクエスト（４１０）に前記親パーティション（４０４）が応じたことを検証する（４１２）こと、を特徴とする請求項１０記載の方法。
【請求項１２】
前記子パーティション（４０６）によって作成される前記リクエスト（４１０）が、前記子パーティション（４０６）内のオペレーティングシステムカーネルによって作成されること、を特徴とする請求項１０記載の方法。
【請求項１３】
前記子パーティション（４０６）によって作成される前記リクエスト（４１０）が、前記子パーティション（４０６）内のドライバによって作成されること、を特徴とする請求項１０記載の方法。
【請求項１４】
前記子パーティション（４０６）によって作成される前記リクエスト（４１０）が、前記親パーティション（４０４）内のブートローダに対して作成されること、を特徴とする請求項１０記載の方法。
【請求項１５】
計算機が実行可能であって、階層的な仮想化を提供する命令を担持する計算機可読メディアであって、
第２のパーティション（６０４）を生成するために第１パーティション（６０８）を使用することであって、前記第２のパーティション（６０４）が、前記第１のパーティション（６０８）内の仮想化スタック（６０２）によって生成されるものと、
前記第１のパーティション（６０８）及び前記第２のパーティション（６０４）と直接に対話するように構成されるマイクロカーネルハイパーバイザ（６００）を提供すること、を含む計算機可読メディア。
【請求項１６】
前記第１のパーティション（６０８）内の前記仮想化スタック（６０２）が更に、第３のパーティション（６０６）を生成すること、を特徴とする請求項１５記載の計算機可読メディア。
【請求項１７】
更に、前記第１のパーティション（５０８）内に配置される第２の仮想化スタック（５０３）を含んでいて、前記第２の仮想化スタック（５０３）が、第３のパーティション（５０５）を生成するもの、を特徴とする請求項１５記載の計算機可読メディア。
【請求項１８】
前記第２のパーティション（６０６）が、それ自身の仮想化スタック（６１０）を有すること、を特徴とする請求項１５記載の計算機可読メディア。
【請求項１９】
前記第２のパーティション（６０６）内の前記仮想化スタック（６１０）が、第３のパーティション（６０５）を作成すること、を特徴とする請求項１８記載の計算機可読メディア。
【請求項２０】
前記第１のパーティション（６０８）内の前記仮想化スタック（６０２）及び前記第２のパーティション（６０６）内の仮想化スタック（６１０）が、実質上少なくとも任意の期間共存すること、を特徴とする請求項１８記載計算機可読メディア。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般に、計算分野に関連する。より具体的には、それは計算機の仮想化に関連する。
【背景技術】
【０００２】
仮想化の概念は、それぞれ個別のパーティション内に含まれ得る複数のオペレーティングシステムそれぞれが、単一ハードウェア上で動作できるように、コンピュータハードウェアの仮想化を必要とする。様々なオペレーティングシステムがソフトウェアと対話し、ソフトウェアもハードウェアと対話するように、仮想化ソフトウェアが多様な方法でハードウェアを抽象化する。
【０００３】
仮想化システムのほとんどは、単一の仮想マシンモニタ（ＶＭＭ）ソフトウェアを含む。構成の中には、このＶＭＭが「ハイパーバイザ」と呼ばれるものもある。ハイパーバイザは、ハードウェア上で直接に動作するように設計される。それ自体は、ハードウェアをどのように使用するかに関する最終的な仲裁者（アービタ）である。この理由のために、一般的な場合、（一組のハードウェア上で）１つのハイパーバイザだけがマシン上に存在し得る。ハイパーバイザによって、複数の「ゲスト」オペレーティングシステム（ＯＳ）又は略して「ゲスト」が、システム上で同時に動作できる。
【０００４】
ＶＭＭ又はハイパーバイザは、特定の目標を念頭に設計され得る。技術者は、セキュリティ、複雑性、柔軟性、性能などの間で得失を評価する必要がある。ＶＭＭ（複数）又はハイパーバイザの中には、プログラムに従ったインタフェースを介し、ゲストと対話可能なものもある。いくつかのインタフェース同様に複数のバージョンの扱いが重要になる。１つのバージョンのハイパーバイザのために記述されるゲストは、異なるバージョンのハイパーバイザと非互換であり得る。
【０００５】
このように、単一のマシン上において、ハイパーバイザの複製を動作することが有用とされる状況がある。例えば１つのバージョンは非常に単純であって、高いセキュリティ保証を提供し得、別のバージョンは、もっと複雑で複雑な特徴を提供できる。そのような複数のバージョンは並列に実行できると良い。
【特許文献１】第名：「SYSTEMS AND METHODS FOR MULTI-LEVEL INTERCEPT PROCESSING IN A VIRTUAL MACHINE ENVIRONMENT」シリアル番号  11/078,141，出願日２００５年３月１１日
【発明の開示】
【発明が解決しようとする課題】
【０００６】
残念ながら、マシン上に１つのハイパーバイザしか存在できないので、これは今日の設計を持ってしても可能でない。この問題に対する従来の一アプローチは、再帰的な仮想化の使用によるハイパーバイザの「ネスト化」である。単一の「本物」のハイパーバイザが基本に位置し、１つ以上の第２のレベルのハイパーバイザがその上で動作する。この構成は、不十分な性能という不都合を有する。第２のレベルのハイパーバイザは、ハードウェアへの直接のアクセスを有すると仮定して記述されるので、それらも同様にうまく動作しない。要約すると、更なるレベルのネストされたハイパーバイザそれぞれを用いると、仮想化されたシステム全体の性能は、幾何級数的に悪化する。
【０００７】
また多くのプロセッサは、１つのレベルの仮想化のためのハードウェアの支援を提供するが、それらは２つ以上のための支援をほとんど提供しない。このようにハードウェアの観点から、単一の物理的なマシン上で複数のハイパーバイザを実装するのは困難になる。従って、ソフトウェアの複数バージョンがハードウェア上で同時に直接に動作しているように、ハードウェア上で直接にソフトウェアを仮想化することを実行するためのメカニズムを提供することが好都合である。
【課題を解決するための手段】
【０００８】
本願において開示される課題は、多層の仮想化メカニズムを用いた階層的な仮想化に関する。一例において、そのような仮想化を提供するための方法が使用され、そこでは第１のパーティションが、ハイパーバイザを用いて維持される。第１のパーティション内の第１の仮想化スタックは、例えば、第１の場所において第２のパーティションを作成し、そのリソースを割り当てることによって、第２のパーティションと対話する。１つのパーティションにおける仮想化スタックが別のパーティションを制御するところの、そのような階層的な構成のパーティション内のハイパーバイザは、実際にはパーティションそれぞれを認識していて、パーティションそれぞれと直接に通信できる。ハイパーバイザは、パーティションそれぞれと通信できるので、それは任意のパーティション内の任意のリソースもまた列挙できる。
【０００９】
更に、第２のパーティションは、それ自身の第２の仮想化スタックを使用し、第３のパーティションを生成することによって、パーティションの階層関係を追加できる。更に、第１のパーティション内の第３の仮想化スタックは、第１の仮想化スタックと並列に共存でき、そこではこの後者の第３の仮想化スタックは、前述の第１、第２及び第３のパーティションから独立している第４のパーティションを作成できる。あるいはまた、任意の時間に仮想化スタックが２つ以上のパーティションを作成でき、制御できるので、第１の仮想化スタックは、第４のパーティションを作成できる。
【００１０】
本開示の別の例においては、階層的な仮想化のセキュリティを論述する。このように、親パーティションが提供され、この親パーティションは、仮想化スタックを有する。子パーティションは、親パーティション内に仮想化スタックによって作成されるが、しかし、子パーティションは、それ自身の制御下で少なくとも１つのリソース（又はその一部）を排他的に有するので、それは完全に親の管理下にはない。セキュリティの理由から子パーティションは、その親パーティションを信頼できず、そのような場合、親は子のいくつかのリソースに到達できない。親パーティションからこの子の解放を実施するために、子パーティションは、親パーティションに対してリソース及び別のオブジェクトの排他制御を依頼し、この仮想化された環境における最終的なアービタとしてのハイパーバイザは、親パーティションが子パーティションのリクエストに応じるのを確かめる。
【００１１】
「発明を実施するための最良の形態」において、更に後述されるいくつかの概念を紹介するために簡易化された形式でこの概要を提供する。
この概要が、請求項記載対象の重要な特色又は本質的な特徴を特定することを意図せず、また援助として請求項記載対象の範囲を決定するときに使用されることも意図しない。
【発明を実施するための最良の形態】
【００１２】
添付の図面と併せて読まれるとき、上記の概要及び以下「発明を実施するための最良の形態」が更に理解されよう。本開示を例示するための本開示の多様な特徴が示される。しかし、本開示は論述される特定の特徴に限定されない。以下の図面が含まれる。
概要
以下に提供される説明は最初に、仮想マシンの一般的で簡潔な論述と共に始める。次に多層仮想化メカニズムを用いた階層的な仮想化の論述に焦点を移す。階層的な仮想化に関連する特徴について論述し、そこでは１つのパーティションのハイパーバイザによって維持され、パーティションに含まれる仮想化スタックが、別のパーティションを生成及び制御できる。あるいはまた、パーティションは更なるパーティションを作成及び制御可能な２つ以上の仮想化スタックを有し得る。いずれの場合でも、ハイパーバイザは、第１の場所においてパーティションそれぞれを認識しているので、ハイパーバイザは、階層構造内のパーティションそれぞれと直接に通信できる。最後に階層的な仮想化を可能にするメカニズムをまず、それをハイパーバイザマイクロカーネルと仮想化スタックに分けて１つづつ論述する。これらの２つの要素とコンポーネントそれぞれを順に更に詳細に論述する。
仮想マシン
図１は、計算機システムの仮想化された環境のためのハードウェア及びソフトウェアアーキテクチャの論理的なレイヤを表す図である。本図においては、仮想化プログラム（１１０）は、物理的なハードウェアアーキテクチャ（１１２）上で直接又は間接に動作する。仮想化プログラム（１１０）は、ハイパーバイザコンポーネントを有するホストオペレーティングシステム又はホストオペレーティングシステムと並列に動作する（１つの）仮想マシンモニタであり得、ハイパーバイザコンポーネントが仮想化を実行する。仮想化プログラム（１１０）は、（このコンポーネントがパーティション又は「仮想マシン」という事実を例示するために破線として表示される）ゲストハードウェアアーキテクチャ（１０８）を仮想化し、これはすなわち実際に存在しないが、代わりに仮想化プログラム（１１０）によって仮想化されたハードウェアである。ゲストオペレーティングシステム（１０６）は、ゲストハードウェアアーキテクチャ（１０８）上で動作し、ソフトウェアアプリケーション（１０４）は、ゲストオペレーティングシステム（１０６）上で動作する。図１の仮想化された動作環境においては、通常、ホストオペレーティングシステム及びハードウェアアーキテクチャ（１１２）と互換性のないオペレーティングシステム上でソフトウェアアプリケーション（１０４）が動くように設計されていても、ソフトウェアアプリケーション（１０４）は、計算機システム（１０２）において動作できる。
【００１３】
図２Ａは、物理的なコンピュータハードウェア（２０２）上で直接に動作するホストオペレーティングシステム（ホストＯＳ）のソフトウェアレイヤ（２０４）を含む仮想化された計算システムを例示し、ホストＯＳ（２０４）が、オペレーティングシステム（２１２）及び（２１４）それぞれによる使用のために、パーティションＡ（２０８）及びＢ（２１０）にインタフェースを公開することによって、物理的なコンピュータハードウェア（２０２）のリソースへのアクセスを提供する。これによって、ホストＯＳ（２０４）を、その上で動作するオペレーティングシステムレイヤ（２１２）及び（２１４）が意識せずに動作することを可能にする。更に、仮想化を実行するために、ホストＯＳ（２０４）は、もともと仮想化機能を有する特定用途に設計されたオペレーティングシステムであり得るか、またあるいはそれは、仮想化を実行するために組込まれた（表示されない）ハイパーバイザコンポーネントを有する標準のオペレーティングシステムであり得る。
【００１４】
再び図２Ａを参照すると、ホストＯＳ（２０４）上には、２つのパーティションがあり、パーティションＡ（２０８）は例えば、仮想化インテル３８６プロセッサであって、パーティションＢ（２１０）は、例えば仮想化されたモトローラ６８０Ｘ０ファミリープロセッサのうち１つのバージョンであり得る。パーティション（２０８）及び（２１０）内にゲストオペレーティングシステム（ゲストＯＳ（複数））Ａ（２１２）及びＢ（２１４）それぞれがある。ゲストＯＳ  Ａ（２１２）の上位で動作する２つのアプリケーションとして、アプリケーションＡ１（２１６）及びアプリケーションＡ２（２１８）があり、ゲストＯＳ  Ｂ（２１４）の上位で動作するアプリケーションＢ１（２２０）がある。
【００１５】
図２Ａに関して重要なことは、（破線で表示される）パーティションＡ（２０８）及びパーティションＢ（２１４）は、ソフトウェア構造としてのみ存在する仮想化されたコンピュータハードウェア表現であることに留意することである。特定用途の仮想化ソフトウェア（単数又は複数）の実行によって可能とされることは、パーティションＡ（２０８）及びパーティションＢ（２１０）をゲストＯＳ  Ａ（２１２）及びゲストＯＳ  Ｂ（２１４）それぞれに与えるだけではなく、また実際の物理的なコンピュータハードウェア（２０２）と間接的に対話するために、ゲストＯＳ  Ａ（２１２）及びゲストＯＳ  Ｂ（２１４）に対して必要なソフトウェアステップすべてを実行することである。
【００１６】
図２Ｂは、ホストオペレーティングシステム（２０４”）と並列に動作する仮想マシンモニタ（ＶＭＭ）（２０４’）によって仮想化が実行される、代替の仮想化された計算システムを例示する。特定の場合、ＶＭＭ（２０４’）は、ホストオペレーティングシステム（２０４”）上で動作し、ホストオペレーティングシステム（２０４”）だけを介し、コンピュータハードウェア（２０２）と対話するアプリケーションであり得る。別の場合では、図２Ｂに表示されるようにＶＭＭ（２０４’）は、代わりにホストオペレーティングシステム（２０４”）を介し、コンピュータハードウェア（２０２）といくつかのレベルにおいて間接的に対話する部分的に独立したソフトウェアシステムを含み得るが、ＶＭＭ（２０４’）は、別のレベルにおいて（ホストオペレーティングシステムが直接にコンピュータハードウェアと対話する方法と同様に）コンピュータハードウェア（２０２）と直接に対話する。しかし更に他の場合、ＶＭＭ（２０４’）は、（コンピュータハードウェア（２０２）の使用を調整し、競合その他を避けるために、ずっとホストオペレーティングシステム（２０４”）と対話しているが）、ホストオペレーティングシステム（２０４”）を利用せずに（ホストオペレーティングシステムがコンピュータハードウェアと直接に対話する方法と同様に）すべてのレベルおいてコンピュータハードウェア（２０２）と直接に対話する、完全に独立しているソフトウェアシステムを含むことができる。
【００１７】
前述のパーティションを実装するための、これら多様性のすべては単に例示的な実装であって、本明細書が任意の特定の仮想化の特徴に本開示を制限するとして解釈するべきでない。
多層仮想マシンモニタを用いた階層的な仮想化
階層的な仮想化は、仮想マシンモニタ（ＶＭＭ）又はハイパーバイザ形式における多層仮想化メカニズムで達成され得る。例えば、モノリシックなハイパーバイザの使用を介する伝統的に提供される機能性は、ハードウェア上で直接に動作するマイクロカーネル及びパーティション内で動作する仮想化スタックに分けられる。この種類の多層アーキテクチャは、パーティション内の仮想化スタックが、別のパーティションを生成し、制御（又は簡単に言うと「維持」）し、そしてこれらのパーティションもまた別のパーティションを更に維持できる別の仮想化スタックを含み得るという点において、階層的な仮想化を可能にする。重要なことに、この種類の構造は典型的な「ネストされた」再帰的な仮想化と異なり、その性能を改善する。
【００１８】
図３は、多層仮想化メカニズムを用いた階層的な仮想化と対照的な方法による再帰的仮想化を例示する。再帰的な仮想化においては、ハイパーバイザは「ネスト」される。単一の「本物」のハイパーバイザが基盤に位置し、１つ以上の第２のレベルのハイパーバイザがその上位で動作する。例えば、図３において、「本物」のハイパーバイザＡ（３０１）がマシンのハードウェア（３００）の上位に位置する。ハイパーバイザＢ（３０２）及びＣ（３０８）が、ゲストパーティションＢ（３１４）及びＣ（３１６）内でネストされ、ゲストパーティションＢ（３１４）及びＣ（３１６）は、「本物」のハイパーバイザＡ（３０１）によって維持される。
【００１９】
ネストされたハイパーバイザＢ（３０２）及びＣ（３０８）それぞれは、それ自身のゲストパーティションを維持できる。例えばハイパーバイザＢ（３０２）は、ゲストパーティションＢ．１（３０４）及びゲストパーティションＢ．２（３０６）を維持する。同様にハイパーバイザＣ（３０８）は、ゲストパーティションＣ．１（３１０）及びゲストパーティションＣ．２（３１２）を維持する。図３には例示されないが、ゲストパーティションＢ．１  （３０４）、Ｂ．２（３０６）、Ｃ．１（３１０）及びＣ．２（３１２）が、ゲストパーティションＢ（３１４）及びＢ（３１６）内で更にネストされたハイパーバイザをホストできることを当業者は理解されよう。そしてこれらの更なるネストされたハイパーバイザは、更なるネストされたパーティションなどを維持できる。
【００２０】
しかし、この再帰的構成は、不十分な性能という不都合を有する。第２のレベル（及び、より上位すべて）のハイパーバイザが、ハードウェアへの直接のアクセスを有すると仮定し、記述されるのでそれらも同様にうまく動作しない。また、多くのプロセッサは１つのレベルの仮想化のためのハードウェア支援を提供するが、それらは２つ以上の支援をほとんど提供しない。結局、そのようにネストされた設定においては、いかなるハイパーバイザもすべてのパーティションを意識せずに、それはすべてのパーティションと（例えばハイパーコールを介し）直接に通信もできない。例えば、ハイパーバイザＡ（３０１）が、ゲストＢ．１（３０４）と通信を所望する場合、ハイパーバイザＢ（３０２）を介し動作する必要があり、それは非常に効率が悪い。
【００２１】
図３と対照的に、図４Ａ及び４Ｂは、ネストされたハイパーバイザを使用する必要性を取り除いた多層仮想化メカニズムを用いる階層的な仮想化を例示する。このように図４Ａでは、従来のハイパーバイザに対して分割された（複数のレベルにおいて動作する）機能性を有するハイパーバイザを示す。図４Ａの左は、従来のハイパーバイザ（４０１）の設定であり、右は、本明細書に開示の設定であって、ハイパーバイザは、仮想化スタック（４０２）及びハイパーバイザマイクロカーネル（４００）に分けられる。
【００２２】
マイクロカーネル（４００）は、非常に小さく、単純で、それはハードウェア（４０３）と対話する。それはマシンのリソースを区切るために必要とされる最も基本的なサービスを提供するだけである。ハイパーバイザ（４０１）のもっと複雑な部分は、仮想化スタック（４０２）の形式で任意に選択されるゲストパーティション（４０５）に対して「プッシュアウト」される。仮想化スタック（４０２）は、装置の仮想化、ページング、パーティションの生成、構成などのような振舞いに対応する。
【００２３】
図４Ｂは、マイクロカーネル化されたハイパーバイザ及び仮想化スタックの、典型的な仮想化環境における適合方法についての鳥瞰図を提供する。ここで、本開示の一特徴において、ハイパーバイザマイクロカーネル（４００）が、物理的なマシンハードウェア（４０３）の上位に直接に位置し、ハイパーバイザマイクロカーネル（４００）の関連する仮想化スタック（４０２）が、親パーティション（４０４）にプッシュアウトされる。仮想化スタック（４０２）もやはりそれ自身のパーティションを維持できる。図４Ｂにおいては、仮想化スタック（４０２）は、子パーティションＡ（４０６）及び子パーティションＢ（４０８）を維持する。
【００２４】
興味深いことに、セキュリティの観点からは、親パーティションが、典型的に子パーティションを制御しても、子パーティションは、実際にはその親パーティションを信頼できない。親パーティションは、子パーティションの制御をデフォルトで有するので、それは子パーティション内のリソースを管理できる。悪意あるソフトウェアがこれまでに親パーティションに浸透していた場合、子パーティションは、悪意あるソフトウェアに影響される。この理由のために本開示の別の特徴においては、子パーティションは、親パーティションの制御から解放されるか、又は親パーティションから自由になるように依頼できる。そのような解放は、子パーティションの（メモリページなどの）リソース制御を放棄することと、親パーティションが（子パーティション内のコンテンツに関連する情報を親パーティションに提供できる）インターセプトのうちいくつかをアンインストールさせることを、親パーティションに課す。
【００２５】
このように図４Ｃでは、子パーティションＡ（４０６）が親パーティション（４０４）に解放を依頼する（４１０）シナリオを例示する。指定された仮想化スタック内のコンポーネントが、このリクエストを処理する。一般に発生することは、そのリクエストが、子パーティションＡ（４０６）内のオペレーティングシステム（すなわちＯＳのカーネル）又は子パーティション（４０６）内のいくつかの種類のドライバによって作成されていて、このリクエストが親パーティション（４０４）内のブートローダに対して作成され得るということである。そのブートローダは、進歩したブートローダ（すなわち仮想化を意識しているブートローダ）であり得る。このようにして、親パーティション（４０４）は、任意の不正変更から子パーティションＡ（４０６）が有する門戸を閉ざすことができ、子パーティションＡ（４０６）は、解放されたとき、それ以降、親パーティション（４０４）を介し、不正侵入できないようになる。
【００２６】
ハイパーバイザ（４００）は、任意の仮想化されたシステムにおける最終的なアービタであるので、それがこのリクエストを実際に実行する（４１２）。図４Ｃにおいては、例として子パーティションＡ（４０６）のメモリの一部は、親パーティション（４０４）によってアクセスできない（４１４）。このように親パーティション（４０４）は、子パーティションＡ（４０６）のリソースにアクセスできない。しかし、親パーティション（４０４）は、子パーティションＡ（４０６）の別の一部のアクセスを有し得る（４１６）。
【００２７】
同じ流れで、子パーティションＢ（４０８）全体が、親パーティション（４０４）によってアクセス不可になり（４１４）、したがって親パーティション（４０４）は、完全に信頼されず、それによって子パーティションＢ（４０８）を非常に安全な状態にする。これは、親パーティション（４０４）が、子パーティションＢ（４０８）について何も知り得ないことを意味する。大変興味深いことに本開示の特徴の中には、子パーティションが不適当又は予期されない態度を振る舞う場合、完全に開放されたパーティションＢ（４０８）のようなパーティション上の制限される（又は存在しない）制御にもかかわらず、親パーティション（４０４）は、子パーティションＢ（４０８）を終了するための親パーティション（４０４）としての機能をずっと有するものもある。
【００２８】
更に別の本開示の特徴において、図５は、仮想化スタックが１つのパーティション内に複数存在出来る概念を例示する。例えば第１の仮想化スタック１（５０２）は、第２の仮想化スタック２（５０３）と並列に親パーティション（５０８）内に存在できる。第１の仮想化スタック１（５０２）は、（それが存在している親パーティションに関して）複数の子パーティションを維持できる。こうして仮想化スタック１（５０２）は、子パーティション１Ａ（５０４）及び子パーティション１Ｂ（５０６）を維持する。同様に仮想化スタック２（５０３）は、子パーティション２Ａ（５０５）及び子パーティション２Ｂを維持する。２つの仮想化スタックだけが例示されているが、任意の数の仮想化スタックが、所与のパーティション内に存在でき、これらの仮想化スタックそれぞれは、任意の数の子パーティションを維持できる。
【００２９】
１つのパーティション内に複数の仮想化スタックを相互に並列に有する１つの理由は、例えば１つの仮想化スタック（５０２）は、必要最低限のものだけを装備するセキュアなパーティションを支援する特定用途化可能であって、一方、別の仮想化スタック（５０３）は、リソースすべての種類の支援を完全に提供する特定用途化可能だからである。必然的に前者の仮想化スタック（５０２）は、後者の仮想化スタック（５０３）に比べて複雑でないので、前者の仮想化スタック（５０２）は、十分に安全であり（したがってそのパーティションも安全である）。このコンテキストにおいて、セキュリティ及び複雑性は、トレードオフの関係である。このように例えば、後者の仮想化スタック（５０３）は、ＩＤＥ（集積デバイスエレクトロニクス）及びＳＣＳＩ（スモール・コンピュータ・システム・インタフェース）の支援を提供可能であって他方、前者の必要最低限のものだけを装備した版（５０２）は、提供しない。
【００３０】
更に別の本開示の特徴においては、図６に例示されるように、前述の仮想化スタック及びそれらに対応するパーティションは、階層的な方法で配置され得る。このように、ハイパーバイザマイクロカーネル（６００）は、親パーティション（６０８）を維持し、ハイパーバイザマイクロカーネル（６００）に対応する仮想化スタック１（６０２）が親パーティション（６０８）内に配置され得る。この仮想化スタック１（６０２）は、第１の子パーティションｌＡ（６０４）及び第２の子パーティション１Ｂ（６０６）を維持する。第２の仮想化スタック２（６１０）は、第２の子パーティション１Ｂ（６０６）内に存在し、この仮想化スタック２（６１０）が別の２つの子パーティション（又は元のパーティション（６０８）に対する孫パーティション）である子パーティション２Ａ（６０５）及び子パーティション２Ｂ（６０７）を維持する。
【００３１】
図６にそのように例示されないが、第２の仮想化スタック２（６１０）によって維持される子パーティション（６０５）及び（６０７）それぞれもやはり１つ以上の第３の仮想化スタックを維持でき、これらのスタックもやはり更なる子パーティションを維持し得るのが理解されよう。要約すると、図６は、ハイパーバイザマイクロカーネル兼仮想化スタックアーキテクチャが、階層的な仮想化を可能にする概念を例示する試みである。パーティションは、複数の仮想化スタックを保持でき、そのような仮想化スタックは、複数のパーティションを維持でき、そのような複数のパーティションは、更なる仮想化スタックなどを維持できる。
【００３２】
このタイプの階層的な構成の１つの恩恵は、大型マシンの多層管理を支援することである。例えば、「マシン管理者」は「ルートパーティション」（すなわち、上位の最も親であるパーティション）内の仮想化スタックを制御できる。次にこの管理者は、それ自身の仮想化スタックを有し、これらのマシンリソース（メモリ、プロセッサ、ＮＩＣ（複数）、ディスクドライブなど）の１組それぞれを割り当てるサブパーティションを生成できる。次にこの管理者は、別の管理者（例えばチームレベルの管理者）が、それらが割り当てられたリソースを更に区切ることを許す。このようなシナリオにおいては、第２のレベルの仮想化スタックが第１のレベルの（すなわちルートレベルの）仮想化スタックによって提供されるリソースを使用することを抑制されるが、適合する任意の方法によってその割り当てられたリソースを使用できる。階層構造について理解している仮想マシン管理システムは、レベルそれぞれにおいて管理者が制御するパーティションの間にリソースの再割り当てできるように提示できる。
【００３３】
この種類の階層的シナリオは、図３を参照し論述された、ネストされたシナリオと区別される必要がある。ハイパーバイザそれぞれが、（その下の）ベースパーティション又は（その上の）派生パーティションを認識していないネストされたパーティション内で動作する複数のハイパーバイザを有する、ネストされた場合と異なり、階層的なシナリオにおいてはパーティションすべてを認識している単一のハイパーバイザがある。この場合、複数の仮想化スタックが、パーティションの間の多様な階層的関係の生成を可能にする。興味深いことに、そのようなパーティションが階層関係において、対応する多様な仮想化スタックによって維持されるとき、既出のいかなるものとも異なり（すなわち、他のいかなるハイパーバイザ又は仮想化ソフトウェアを介する必要なく）、本ハイパーバイザは任意のパーティションと直接に通信できる。そのような直接的な通信は、直接のハイパーコールを介し、ハイパーバイザから任意のパーティションに達し得る。
マイクロカーネルハイパーバイザ及び仮想化サービス
前述のように、階層的な仮想化がマイクロカーネル化ハイパーバイザ兼仮想化スタックアーキテクチャによって支援される。図７は、ハイパーバイザマイクロカーネル（７０２）を含むハイパーバイザコンポーネント及びハイパーバイザ内の仮想化サービス（７０４）に焦点を結ぶ（以下の図８は仮想化スタックアーキテクチャを焦点を結ぶ）。
【００３４】
特に図７を参照すると、マイクロカーネル（７０２）においては、最下部レイヤは、ハードウェア抽象化レイヤ（７０６）であって、それはマイクロカーネル（７０２）のプラットフォーム特有の特徴を抽象化する。当業者が容易に正しく理解するように、このレイヤ及び後述のレイヤ内の別のモジュールが使用され得る。そこでは、これらのレイヤ及びモジュールは単に例示的であって、論述のために本明細書に提示されていて、それらはいかなる方法においても、制限も解決する手掛かりももたらさない。
【００３５】
このレイヤの上位には、メモリ管理レイヤ（７１０）がある。このレイヤは、ハイパーバイザ（７００）のためのプリミティブな内部メモリ管理を提供するメモリ管理モジュール及び任意のＣＰＵ及びメモリ使用に関するリソースポリシーをストアするリソース管理モジュールを有する。より高位のコンポーネントは、これらのポリシーを実施する。
【００３６】
最終的に、第３のカーネルレイヤ（７１２）は、少なくとも４つの例示的なモジュールを含む：第１のセキュリティアクセスマネージャモジュールは、パーティション間で共有又は移動され得るパーティション及びリソースのためのアクセスを管理する。第２のスレッドマネージャは、ハイパーバイザ（７００）に対する内部スレッドを管理する。第３に、タイママネージャは、タイマ待ち行列とタイマ割込みを管理する。第４のスケジューラはハイパーバイザ（７００）のスケジューラを実施する。
【００３７】
同様に、仮想化サービス（７０４）において、４つのレイヤがまた使用され得る。第１のレイヤは、仮想化抽象レイヤ（７１４）であって、それはプロセッサによって提供される仮想化の拡張を抽象化する仮想化抽象化レイヤのモジュールを含む。
【００３８】
次にパーティションレイヤ（７１６）は、以下の少なくとも３つのモジュールを含む：パーティションオブジェクト及び関連するデータ構造を管理するパーティションマネージャモジュール。この設定における―パーティションそれぞれに関連付けられる１つ以上の仮想プロセッサを管理する仮想マネージャプロセッサモジュールであって、仮想プロセッサそれぞれは、それ自身のプロセッサ状態を有し、それ自身のハイパーバイザスタック上で動作する。及び、ｘ８６の高度プログラマブル割り込みコントローラ同等の割り込みコントローラを実施する合成割り込みコントローラ。
【００３９】
次のレイヤは、アドレス空間に関係する。このレイヤは、ゲストの物理アドレス空間及び基本的な物理メモリリソースに対するそのマッピングの定義を管理するアドレスマネージャモジュールを有し得る。当然、別のモジュールが、アドレス空間メカニズムを操作するためにその支援を使用できて、これは単に例示的なモジュールである。
【００４０】
最後に、仮想化サービス（７０４）は４つのモジュールを含む：第１のディスパッチマネージャは、入力イベントを処理し、それに応じてそれらをディスパッチする。第２にのハイパーコールマネージャモジュールは、ゲストからのハイパーバイザコールをディスパッチする。第３のインターセプトマネージャモジュールは、インターセプトのディスパッチ及びルーティング（例えばモデル特定レジスタへのアクセス、特定命令の実行など）を処理する。第４の命令完了モジュールは、仮想化の間、特定の命令完了を処理する。
仮想化スタックコンポーネント
本開示の別の特徴においては、図８は仮想化スタック及びお互いにそれらの相互関係を作り出す多様なコンポーネントを表示する。本明細書に開示されない、いくつかの関連コンポーネントは、２００５年３月１１日に出願された関連出願シリアル番号11/078,141題名：「SYSTEMS AND METHODS FOR MULTI-LEVEL INTERCEPT PROCESSING IN A VIRTUAL MACHINE ENVIRONMENT」において調べられ得る。この出願において開示された「外部モニタ」は、本願において論述された仮想化スタックのサブコンポーネントである。
【００４１】
任意の仮想化スタック（８００）は、ユーザモード（８０２）及びカーネルモード（８０４）において実施され得る。更に、カーネルモード（８０４）は、ハイパーバイザＡＰＩ、ハイパーバイザメッセージハンドラライブラリ（８０６）及び仮想化インフラストラクチャドライバ（８１０）などのコンポーネントを有し得る。ユーザモード（８０２）は、仮想マシンサービス（８１２）及び仮想マシンワーカプロセス（８１４）などのコンポーネントを有し得る。
【００４２】
これらのコンポーネントそれぞれは、具体的に定義されたタスクを有し得る。例えば、ハイパーバイザＡＰＩライブラリ（８０６）は、通常のオペレーティングシステム呼び出し規則を使用し、それらがハイパーバイザをコールできるように、ハイパーバイザＡＰＩをより高位のコンポーネントに公開する。このライブラリは、それらが仮想化スタックをホストするか否かに関係なく―進歩したコード（すなわち仮想化を意識しているコード）を含むすべてのパーティション内で見出され得る。更に、ハイパーバイザメッセージハンドラライブラリ（８０６）によって、呼び出し側は、ハイパーバイザ又は別のパーティションから受信されるメッセージに対するカーネルレベルのコールバックを登録できる。そのようなメッセージは、パーティション間のメッセージペイロードを有する割り込みとして送信される。このインタフェースによって、単一のパーティションが複数の並列の仮想化スタックをホストできる。例えば第三者メンバは、元のメンバの仮想化スタックと同様の親パーティション内に存在する仮想化スタックを実施できる。あるいは元のメンバの仮想化スタックの複数のバージョンが並列に動作できる。
【００４３】
次に、仮想化インフラストラクチャドライバ（ＶＩＤ）（８１０）は、仮想化スタックのカーネルモードの機能性の大半をカプセル化する。それはいくつかのサブコンポーネントを含む。それは、例えば仮想化スタックメモリマネージャを含む。このサブコンポーネントは、仮想化スタックによって「所有」されるシステムの物理的なページの予備を管理し、その仮想化スタックによって管理される子パーティションのゲストの物理的なメモリに戻すために使用される。このサブコンポーネントは、（同一のコンテンツを有するページのために）メモリオーバコミット及びクロスパーティションページ共有を支援する。それはまた、ユーザモードコンポーネントが、仮想マシンのゲストの物理アドレス（ＧＰＡ）空間の割付けを定義可能にし、（例えば、スナップショット又はライブマイグレーションのための）ページ範囲において、読み込み及び書き出しのインターセプトを配置可能にする、１組のインタフェースを公開する。
【００４４】
更に、ＶＩＤ（８１０）はまた複合命令完了を含む。このサブコンポーネントは、メモリに触れる複合命令のインタプリタで実行でき、ハイパーバイザによって直接に処理されない。この支援は、特定の装置のエミュレーションシナリオ（例えば、平面ＶＧＡメモリへのアクセス、ＲＯＭへの書き込み、又はエミュレートされた装置のメモリマッピングされたレジスタへのアクセス）に対して必要とされる。
【００４５】
ＶＩＤ（８１０）はまたプロセッサインターセプトも含む。このサブコンポーネントによって、ユーザモードコンポーネントが仮想プロセッサインターセプトを指定できる。例えば、特定のＩ／ＯポートレンジがＩＮ又はＯＵＴ命令を介しアクセスされたとき、エミュレートされる装置モジュールは、インターセプト通知の受信を所望できる。プロセッサインターセプトの別の例は、ＭＳＲアクセス、ＣＰＵＩＤ、例外、及びＨＬＴを含む。このコンポーネントは、インストールされたインターセプトを追跡し適切としてインターセプト通知を送る。
【００４６】
最後に、ＶＩＤ（８１０）は、パーティション生成及び制御サブコンポーネントを含み得る。このサブコンポーネントによって、ユーザレベルコンポーネントが、パーティションの作成、削除、管理と、スケジューリング及びアクセス制御のポリシーを定義する、パーティション全体のリソース及び割当ての指定を可能にする。例えば、新規のパーティションの生成は、ハイパーバイザ内のモジュールへのハイパーコール（例えばHvCreatePartition）を先ず作成することによって実施され得る。次に１つ以上の仮想プロセッサが、ハイパーコールHvCreateVpを呼び出すことによって生成される。メモリは、別のハイパーコール、例えばHvMapGpaPagesを呼び出すことによって新たに生成されるパーティションのゲストの物理アドレス空間に割り当てられる。インターセプトは、ハイパーコールHvinstalllnterceptを呼び出すことによって、特定のプロセッサ動作のためにリクエストされる。ハイパーコールHvSetPartitionPropertyを呼び出すことによって、多様なスケジューリング及びセキュリティポリシーが設定される。初期化コード（例えばＯＳローダ又はシステムＢＩＯＳ）は、新たに作成される仮想マシンのメモリにコピーされる。ハイパーコールHvResumePartitionが呼び出されたとき、仮想マシン内において動作開始する。これらのハイパーコールは、単に例示的であって、別の同等な方法がパーティションの創造を達成するために実施できるのを当業者は理解するだろう。同様にパーティションリソースを管理するための方法として、（仮想プロセッサ、ゲストの物理アドレスなどを削除する）パーティション削除に関する方法が、当業者によって容易に正しく理解されよう。
【００４７】
前述のようにＶＩＤ（８１０）及びＨＶＡＰＩ（８０６）は、カーネルモード（８０４）に存在する。しかし、仮想化スタック（８００）の他のコンポーネントは、ユーザモード（８０２）に存在する。例えば仮想マシン管理サービス（８１２）は、ＶＭ（複数）を管理し制御するために、１組のＶＭ構成を管理し、１組のＷＭＩベースのＡＰＩを公開する。仮想マシンが開始されるとき、新しいＶＭワーカプロセスを発生させる。このサービスは、（サービスがクラッシュした場合、システムをより強靭にするようにする）ＶＭワーカプロセスのいずれにも影響せずに、再開可能であり得る。
【００４８】
別のユーザモード（８０２）のコンポーネントは、仮想マシンワーカプロセス（８１４）である。仮想マシンそれぞれは、関連するワーカプロセスを有する。ワーカプロセス内のコンポーネントがクラッシュした場合、被害は単一の仮想マシンに含まれ得る。ワーカプロセス（８１４）において、仮想化装置フレームワークがある。仮想マシンは、１組の仮想装置から構成される。装置それぞれが、それ自体の設定及びパラメタを有していて、ユーザはその多くを調整できる。装置のフレームワークは、機能的な仮想マシンを形成するための仮想装置モジュールをインスタンス生成し、これらの装置を「配線」する。仮想マシンを作る装置は、デバイスマニフェスト、ＶＭの構成ファイルの一部において定義される。
【００４９】
前述のフレームワークにおいて、仮想装置モジュール（ＶＤＥＶ）（複数）は、以下である：これらのプラグインモジュールは、仮想装置のインスタンスの生成、初期化、保存、リストア、リセット、破壊のために必要なロジックを含む。仮想装置の中には、従来のハードウェア装置の完全なエミュレーションを実施するものもある。これらの仮想装置は、エミュレートされる装置のモジュールとして参照され、ゲストのアクセスに応答するためにＩ／Ｏ及びメモリインターセプトを利用する。
【００５０】
ワーカプロセス（８１４）内では、仮想マシンクリエータもまた存在し得る。このコンポーネントは、実行する仮想マシンを生成し、管理する。それは、ＶＭ全体のポリシーを処理し、動的なリソース変更リクエストに応答し、ＶＭの中止及び再開、保存、リストア、スナップショット及びライブマイグレーションする。
【００５１】
図面に様々例示したような望ましい特徴に関連し、本開示を説明したが、別の同様な特徴を使用し、又はそれから逸脱せずに本開示と同一機能を実行するための修正及び追加が、記載の特徴として実施できることを理解されよう。本開示の一特徴においては、例えば多層仮想化メカニズムを使用することによって可能とされる階層的な仮想化について論述した。しかし、これら記載の特徴と別の同等なメカニズムもまた本明細書に教示され、意図される。したがって本開示は、任意の単一の特徴に制限されるのではなく、むしろ添付の請求に従った広さと範囲で解釈されるべきである。
【図面の簡単な説明】
【００５２】
【図１】計算機システムにおいて仮想化された動作環境のためのハードウェア及びソフトウェアアーキテクチャの論理的なレイヤを表すブロック図である。
【図２Ａ】仮想化された計算システムを表すブロック図であって、（直接的又はハイパーバイザを介し、）ホストのオペレーティングシステムによって仮想化が実行される。
【図２Ｂ】代替の仮想化された計算システムを示すブロック図であって、ホストオペレーティングシステムと並列に動作する仮想マシンモニタによって仮想化が実行される。
【図３】ネストされたハイパーバイザ及びパーティションを用いた仮想化の一タイプを例示する。
【図４Ａ】ネストされたハイパーバイザを使用するための必要性を取り除いた多層仮想化メカニズムを用いる階層的な仮想化を例示する。
【図４Ｂ】例示的な実装におけるマイクロカーネルハイパーバイザ及び仮想化スタックの適合方法についての鳥瞰図を提供する。
【図４Ｃ】子パーティションが、それ自身のリソースの排他制御を親パーティションに依頼するシナリオを例示する。
【図５】複数の仮想化スタックが、１つのパーティション内に存在し得る概念を例示する。
【図６】階層的な方法で仮想化スタック及びそれらのパーティションに対応する配置を例示する。
【図７】階層的な仮想化のための仮想化サービスを提供するハイパーバイザのマイクロカーネルと仮想化スタックとの間の関係を例示する。
【図８】仮想化スタック及びそれらの相互関係を作成する多様なコンポーネントを示す。
【図１】
2009506462.tif 000003
【図２Ａ】
2009506462.tif 000004
【図２Ｂ】
2009506462.tif 000005
【図３】
2009506462.tif 000006
【図４Ａ】
2009506462.tif 000007
【図４Ｂ】
2009506462.tif 000008
【図４Ｃ】
2009506462.tif 000009
【図５】
2009506462.tif 000010
【図６】
2009506462.tif 000011
【図７】
2009506462.tif 000012
【図８】
2009506462.tif 000013
【国際調査報告】
2009506462.tif 000014
2009506462.tif 000015