(57)【要約】  仮想マシン環境内の動作を監視するメカニズムが本明細書で開示される。第１のパーティションは第２のパーティション内のドライバオブジェクトと対応するプロキシドライバオブジェクトを有することができる。ドライバオブジェクトは物理的デバイスを制御することができるが、プロキシドライバのために、第１のパーティションは物理的デバイスの制御の一部の測定を保持することができる。ドライバオブジェクトはそれの下の第１のフィルタオブジェクト及びそれの上の第２のフィルタオブジェクトによって取り囲まれることができる。第１のフィルタオブジェクトはインターフェースをドライバオブジェクトに提供し、ドライバオブジェクトは様々なバスに関連付けられた機能性を実行することができ、及び、第２のフィルタオブジェクトは第１のパーティションからのリダイレクトされた命令を受信することができ、それらをドライバオブジェクトに提供することができ、及び、これらの命令が第１のパーティションにおいて設定されたポリシーと矛盾する場合など、第２のパーティション内から発する任意の命令をインターセプトすることができ、それらを操作することができる。
2010505198.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン環境内の動作を管理するシステムであって、
第１のパーティションに位置付けられる少なくとも一つのプロキシドライバオブジェクトであって、デバイスに関するプロキシドライバである前記少なくとも一つのプロキシドライバオブジェクトと、
第２のパーティション内のドライバのスタックに位置付けられる少なくとも一つのデバイスのドライバオブジェクトであって、前記デバイスを制御するように構成された前記少なくとも一つのデバイスのドライバオブジェクトと、
前記ドライバのスタック内の前記少なくとも一つのデバイスのドライバオブジェクトの下に位置付けられる少なくとも一つの第１のフィルタオブジェクトであって、前記デバイスを制御することを含むバスに関連付けられた機能に携わる前記少なくとも一つのデバイスのドライバオブジェクトのための前記少なくとも一つのデバイスのドライバオブジェクトへインターフェースを提供する前記少なくとも一つの第１のフィルタオブジェクトと、
前記ドライバのスタック内の前記少なくとも一つのデバイスのドライバオブジェクトの上に位置付けられる第２のフィルタオブジェクトであって、少なくとも一つの（ａ）前記少なくとも一つのプロキシドライバオブジェクトからの第１の命令を前記少なくとも一つのデバイスのドライバオブジェクトへ方向付けることと、（ｂ）前記少なくとも一つのデバイスのドライバオブジェクトのために意図され、前記第２のパーティションに由来する第２の命令をインターセプトすることとの少なくとも一方をするように構成された前記少なくとも一つの第２のフィルタオブジェクトと
を備えることを特徴とするシステム。
【請求項２】
前記少なくとも一つのプロキシデバイスオブジェクトと通信する第１のパーティションオブジェクトを更に備え、前記第１のパーティションオブジェクトは前記少なくとも一つのプロキシデバイスオブジェクトに、少なくとも一つの状態変化するイベントを実装するように指示し、前記少なくとも一つの状態変化するイベントは前記第１の命令を介して伝達されることを特徴とする請求項１に記載のシステム。
【請求項３】
前記第１のパーティションオブジェクトは（ａ）プラグアンドプレイマネージャオブジェクト及び、（ｂ）パワーマネージャオブジェクトの少なくとも一つであることを特徴とする請求項２に記載のシステム。
【請求項４】
前記少なくとも一つの状態変化するイベントはシステムワイドイベントであることを特徴とする請求項２に記載のシステム。
【請求項５】
前記第２の命令を介して前記少なくとも一つの第２のフィルタオブジェクトと通信する第２のパーティションオブジェクトを更に備え、前記第２のパーティションオブジェクトは前記少なくとも一つの第２のフィルタオブジェクトに、（ａ）プラグアンドプレイイベント、及び（ｂ）パワーイベントに関連する命令の少なくとも一つを実装するように指示することを特徴とする請求項１に記載のシステム。
【請求項６】
前記第２の命令をインターセプトすると、前記少なくとも一つの第２のフィルタオブジェクトは（ａ）前記第１のパーティション、及び（ｂ）仮想化モジュールのうちの一つによって設定された少なくとも一つのポリシーと前記第２の命令を比較し、前記第２の命令が前記少なくとも一つのポリシーと競合する場合、前記少なくとも一つの第２のフィルタオブジェクトは前記第２の命令を前記少なくとも一つのポリシーと一致する命令と置き換え、それらを前記少なくとも一つのデバイスのドライバオブジェクトに伝達することを特徴とする請求項１に記載のシステム。
【請求項７】
前記少なくとも一つのデバイスのドライバオブジェクトが前記第１のパーティションによって設定された少なくとも一つのポリシーと適合することを拒絶する場合、前記少なくとも一つのデバイスのドライバオブジェクトによる前記デバイス制御は無効にされることを特徴とする請求項１に記載のシステム。
【請求項８】
仮想マシン環境内の動作を管理する方法であって、
パーティション内に物理的デバイスに対応するデバイスのスタックを構築することと、
前記デバイスのスタック上で、インターフェースをデバイスのドライバオブジェクトに提供する第１のフィルタオブジェクトを階層化することと、
前記第１のフィルタオブジェクトを介して前記物理的デバイスを制御する前記デバイスのドライバオブジェクトを前記第１のフィルタオブジェクトの上に階層化することと、
前記パーティションから異なるパーティション内に属するプロキシドライバオブジェクトからの第１の命令のセットを前記デバイスのスタックへ方向付ける第２のフィルタオブジェクトを前記デバイスのドライバオブジェクトの上に階層化することと
を備えることを特徴とする方法。
【請求項９】
前記デバイスのドライバオブジェクトのために意図された第２の命令のセットをインターセプトすることを更に備え、前記第２の命令は前記パーティションに由来することを特徴とする請求項８に記載の方法。
【請求項１０】
前記インターセプトすることの後に、前記第２の命令が前記異なるパーティション内のモジュールによって設定されたポリシーと競合する場合、代替の命令に代えることを更に備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記物理的デバイスのためのドライバオブジェクトを前記異なるパーティションから取り除くことを特徴とする請求項８に記載の方法
【請求項１２】
前記異なるパーティションからのリクエストを管理する前記プロキシドライバをロードすることを更に備え、前記リクエストは前記プロキシドライバによって前記パーティションへ渡され、前記デバイスのドライバオブジェクトによりタスクを実行することを特徴とする請求項８に記載の方法。
【請求項１３】
前記プロキシドライバオブジェクトのためのリクエストを前記ドライバスタックにリダイレクトすることを更に備え、前記リクエストはシステムワイド効果を有することを特徴とする請求項８に記載の方法。
【請求項１４】
前記異なるパーティションによって設定されたポリシーに従った参画の拒絶を前記デバイスのドライバオブジェクトによって検出して、そのような拒絶が生じる場合、前記デバイスのドライバオブジェクトからの前記物理的デバイスの制御を無効にすることを特徴とする請求項８に記載の方法。
【請求項１５】
前記仮想マシン環境の特権のないパーティションとして前記パーティションを設計し、且つ前記仮想マシン環境の信頼されたパーティションとして前記異なるパーティションを設計することを特徴とする請求項８に記載の方法。
【請求項１６】
物理的計算デバイス上で実装されるコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
第１のパーティションに、デバイスのためのプロキシとして作動する前記プロキシドライバオブジェクトのインスタンスを作成することと、
第２のパーティションにおいて、前記デバイスを制御するように構成されたデバイスのドライバオブジェクトであって、ドライバスタック内の前記デバイスのドライバオブジェクトのインスタンスを作成することと、
前記デバイスを制御する前記デバイスのドライバオブジェクトのために前記デバイスのドライバオブジェクトにインターフェースを提供する第１のフィルタオブジェクトであって、前記ドライバスタック内の前記デバイスのドライバオブジェクトの下の前記第１のフィルタオブジェクトのインスタンスを作成することと、
（ａ）第１のパーティションベースの命令を前記デバイスのドライバオブジェクトへ方向付けることと、（ｂ）前記デバイスのドライバオブジェクトのために意図された第２のパーティションベースの命令をインターセプトすることとの少なくとも一方をするように構成された第２のフィルタオブジェクトであって、前記ドライバスタックにおいて前記デバイスのドライバオブジェクトの上の前記第２のフィルタオブジェクトのインスタンスを作成することと
を備えることを特徴とするコンピュータ可読媒体。
【請求項１７】
前記第１のパーティションから前記デバイスのための任意のドライバオブジェクトをアンロードすることを更に備えることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
前記プロキシデバイスオブジェクトのためのプラグアンドプレイマネージャ及びパワーマネージャを含むモジュールのセットを形成する管理モジュールによって、リクエストに続く前記デバイスのドライバオブジェクトへ前記第１のパーティションベースの命令を方向付けることを更に備えることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１９】
前記第１のパーティションを信頼されたパーティションとして設計し、且つ前記第２のパーティションを信頼されないパーティションとして設計することを更に備えることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２０】
前記デバイスのドライバオブジェクトのために意図された前記第２のパーティションベースの命令をインターセプトし、第１のパーティションベースのポリシーに対する適合性について前記第２のパーティションベースの命令を検査し、前記インターセプトをすると、前記第２のパーティションベースの命令と前記第１のパーティションベースのポリシーの間で一致が生じない場合、前記ポリシーと一致している命令と前記第２のパーティションベースの命令を置き換えることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン内の分配されたハードウェア状態管理に関する。
【背景技術】
【０００２】
大部分に関して、入力／出力（Ｉ／Ｏ）デバイスは、マルチプルオペレーションシステムによって共有されることを意図されていない。それらは、そのようなデバイスの全ての機能的な態様を管理する単一の集積ソフトウェアモジュールによって制御されるために設計される。物理的マシン全体を制御する所与のオペレーションシステムにおいて、一つのソフトウェアモジュールがデバイスを制御するということを確実にすることは困難でさえある。同時に実行するマルチプルオペレーションシステムを有する仮想マシン環境において、それはより困難である。
【０００３】
仮想マシン環境の設計者は、常に矛盾に直面させられる。個々のオペレーションシステムは直接個々のデバイスを制御でき、又は、それらはＩ／Ｏサービスに関して同じマシン上で起動する仮想マシン層又は他のオペレーションシステムを頼りにすることができる。前者の場合では、マシン全体の複雑な管理が含まれ、後者の場合では、遅さが関係する。したがって、ここに開示された主題の解決する一つの問題は、「デバイスの割り当て」問題であり、言い換えると、割り当てが複雑でなく、それにもかかわらず処理を迅速にするように、デバイスをモジュールにどのように割り当てるかである。
【０００４】
さらに、物理的ハードウェアデバイスを所有する仮想マシン（又はパーティション）は、信頼関係に基づいてさらに分解されることができる。一部の仮想マシン環境において、パーティションはデバイスを所有することができるが、マシン内の任意の他のパーティションを信頼することができない。その他では、パーティションは別のパーティション、特にマシン全体に関するポリシーを管理するものを信頼することができる。したがって、ここに開示された主題の解決する他の問題は、マシン全体に関するポリシーを管理する少なくとも一つの信頼されたパーティション（又は仮想マシン層自体内のコンポーネント）がある場合、特権のないパーティションに対するデバイスの割り当てである。
【発明の概要】
【課題を解決するための手段】
【０００５】
ここに開示された主題は、特に、信頼された及び特権のないパーティションを有する仮想マシン環境の状況において、デバイスの割り当てに関連する上記の問題を解決する。絵例示的で非限定的な態様において、第１のパーティションは、信頼された一次パーティションとすることができ、第２のパーティション内のデバイスのドライバオブジェクトに対応するプロキシドライバオブジェクトを有することができ、第２のパーティションは信頼されない二次パーティションとすることができる。二次パーティション内のデバイスのドライバオブジェクトは物理的デバイスを制御するが、この構成は一次パーティションに位置付けられるプロキシドライバオブジェクトを有するため、一次パーティションは物理的デバイスに対して一部の制御の測定を続けることができる。したがって、ここに開示された主題の一つの態様において、デバイス状態の制御は区分されることができる。二次パーティションは、例えば、Ｉ／Ｏ機能性のように、より局所的なデバイス状態の制御を保持する一方で、一次パーティションは、例えば、デバイスのターンオン又はオフのように、システムに渡るデバイス状態の制御を有することができる。
【０００６】
他の態様として、スタック上に備わっているドライバオブジェクトは、ドライバオブジェクトの下の第１のフィルタオブジェクト及びドライバオブジェクトの上の第２のフィルタオブジェクトによって取り囲まれることができる。第１のフィルタオブジェクトは、ドライバオブジェクトにインターフェースを提供し、ドライバオブジェクトは様々なバスに関連付けられた機能性を実行することができる。及び、更に、第２のフィルタオブジェクトは、少なくとも二つのタスクを実行することができ、（１）一次パーティションから（プロキシドライバオブジェクトによって）リダイレクトされた命令を受信する、及び（２）二次パーティション内のモジュールから発する任意の命令をインターセプトし、これらの命令が二次パーティションにおいて設定されたポリシーと矛盾する場合、それらが置換、変更、又は無視されることができる。
【０００７】
この発明の概要は簡略化された形式において概念の選択を導入するために提供され、以下の発明を実施するための手段にさらに記載されることを留意すべきである。この発明の概要は、主張された主題の重要な特徴又は決定的な特徴を特定することを意図されるものではなく、主張された主題の範囲を決定することにおける補助として用いられることを意図されるものでもない。
【図面の簡単な説明】
【０００８】
以下の発明を実施するための形態と同様に、前述の発明の概要は、添付の図面と関連して読まれるときによりよく理解される。本開示を例示するために、本開示の様々な態様が示される。しかしながら、本開示は説明された特定の特徴を限定されない。以下の図面は含まれる。
【図１】計算システムにおける仮想化されたオペレーションシステムに関するハードウェア及びソフトウェアアーキテクチャの論理層を表すブロック図である。
【図２】ホストオペレーションシステムによって（直接的に又はハイパーバイザを経由して）仮想化が実行される、仮想化された計算システムを表すブロック図である。
【図３】ホストオペレーションシステムと同時に実行する仮想マシンモニタによって仮想化が実行される、代わりの仮想化された計算システムを表すブロック図である。
【図４】仮想マシン環境内のオペレーションを管理するための例示的かつ非限定的なシステムを例示する図である。
【図５】図４の参照とともに記載されるシステムの例示的かつ非限定的なシステム実装を例示する図である。
【図６】デバイスドライバのスタックを介して、入力／出力リクエストパケット（ＩＲＰ）がどのように流れるかを詳細に例示する図である（図４のシステムの構成要素）。
【図７】プラグアンドプレイ及び電力管理オペレーションの変更状態がどのように扱われることができるかを例示する図である。
【図８】概要的な形式で、仮想マシン環境内の管理オペレーションに関するメカニズムを提供するための例示的かつ非限定的なシステム方法を例示する図である。
【発明を実施するための形態】
【０００９】
ここに開示された主題は、背景技術の区分において上記に言及された問題を解決する一方で、少なくとも以下の（ａ）例えば、デバイスホットプラグ、システムのスリープ又はシャットダウン等の、マシンワイドタスクを達成することができるための信頼されたパーティションと、（ｂ）パーティション又は仮想マシン管理層自体のどちらかにおいて達成されることができるマシンワイドタスクと、（ｃ）そのような制御がマシン上で実行中の他のソフトウェアをクラッシュさせないときに、信頼されないパーティションによって一つ又は複数の物理的デバイスを制御することと、（ｄ）マシン全体をホステージとすることを妨げること、スリープ、シャットダウン、又は新しいデバイスの挿入を妨げることが可能である。
さらに、ここに開示された主題は、物理的デバイスと関連した親のパーティション内のメッセージをインターセプトすることと、及び子のパーティションに対してそのようなメッセージをリダイレクトすることとを提供する。子のパーティション内で、デバイスドライバが物理的デバイスのためにロードされるとき、このドライバは、子のパーディションのプラグアンドプレイマネージャ又は他のマネージャからくるメッセージをインターセプトする他のドライバによって包まれることができ、親のパーティションにおいてなされたポリシーの決定に対応するものにそれらを置き換える。もちろん、これは単なる例示かつ非限定的概観であり、及び、それと関連付けられる様々な態様が本明細書に記載される。
【００１０】
一般用語における仮想マシン
図１は、計算システムにおける仮想化された環境に関するハードウェア及びソフトウェアアーキテクチャの論理層を表すブロック図である。図１において、仮想化プログラム１１０は、直接的に又は間接的に物理的ハードウェアアーキテクチャ１１２上で実行する。仮想化プログラム１１０は、（ａ）ホストオペレーションシステムを同時に実行する仮想マシンモニタ、又は（ｂ）仮想化を実行するハイパーバイザのコンポーネントを有するホストオペレーションシステムとすることができる。仮想化プログラム１１０は、ゲストハードウェアアーキテクチャ１０８を仮想化する（このコンポーネントはパーティション又は仮想マシンであるという事実を例示する破線として示される）、すなわち、実際に存在しないハードウェアが仮想化プログラム１１０によって代わりに仮想化される。ゲストオペレーションシステム１０６は、ゲストハードウェアアーキテクチャ１０８上で実行し、ソフトウェアアプリケーション１０４はゲストオペレーションシステム１０６上で実行することができる。図１の仮想化された動作環境において、たとえソフトウェアアプリケーション１０４が、ホストオペレーティングシステム及びハードウェアアーキテクチャと一般的に互換性がないオペレーティングシステム上で実行するために設計されたとしても、ソフトウェアアプリケーション１０４は、計算システム１０２において実行することができる。
【００１１】
次に、図２は、物理的コンピュータハードウェアより上で直接的に実行するホストオペレーティングシステム（ホストＯＳ）ソフトウェア層２０４を備える仮想化された計算システムを例示する。ただし、ホストＯＳ２０４は、各々、オペレーティングシステムＡ２１２及びＢ２１４による使用のためのパーティションＡ２０８及びＢ２１０に対してインターフェースを発行することによって、物理的ハードウェア２０２の資源に対するアクセスを提供する。これは、ホストＯＳが、その上で実行していることをオペレーションシステム層２１２及び２１４によって注目されずに済むことを可能にする。また、仮想化を実行するために、ホストＯＳ２０４は、仮想化本来の能力を有する特別に設計されたオペレーションシステムとすることができ、又は、仮想化を実行するための組み込まれたハイパーバイザコンポーネントを有する基本的なオペレーティングシステムとすることができる（図示せず）。
【００１２】
図２を再び参照すると、ホストＯＳ２０４の上には二つのパーティションがあり、パーティションＡ２０８は、例えば、仮想化されたＩｎｔｅｌ（登録商標）３８６プロセッサとすることができ、パーティションＢ２１０は、例えば、Ｍｏｔｏｒｏｌａ（登録商標）６８０Ｘ０  ｆａｍｉｌｙのプロセッサの一つの仮想化されたバージョンとすることができる。各々のパーティション２０８及び２１０の内部には、それぞれ、ゲストオペレーティングシステム（ゲストＯＳ）Ａ２１２及びＢ２１４がある。ゲストＯＳのＡ２１２の上で実行中のものは、二つのアプリケーション、アプリケーションＡ１  ２１６及びアプリケーションＡ２  ２１８であり、ゲストＯＳのＡ２１４の上で実行中のものは、アプリケーションＢ１  ２２０である。
【００１３】
図２に関連して、パーティションＡ２０８及びパーティションＢ２１４（破線で示される）は、ソフトウェア構成としてのみ存在する仮想化されたコンピュータハードウェア表現であることを注目することは重要である。それらは、ゲストＯＳ  Ａ２１２及びゲストＯＳ  Ｂ２１４に対してパーティションＡ２０８及びパーティションＢ２１０をそれぞれ提供するだけでなく、ゲストＯＳ  Ａ２１２及びゲストＯＳ  Ｂ２１４が実在する物理的コンピュータハードウェア２０２と非直接的に対話するために必要なソフトウェアステップの全てを実行する仮想化専用ソフトウェアの実行により、可能とされる。
【００１４】
図３は、仮想化がホストオペレーティングシステム２０４’’と同時に実行される仮想マシンモニタ（ＶＭＭ）２０４’によって実行されるときに、代わりの仮想化された計算システムを例示する。あるケースにおいて、ＶＭＭ２０４’は、ホストオペレーティングシステム２０４’’上で実行し、ホストオペレーティングシステム２０４’’だけを介してコンピュータハードウェア２０２と対話するアプリケーションとすることができる。他のケースでは、図３に示すように、ＶＭＭ２０４’は、一部の段階で、ホストオペレーティングシステム２０４’’を経由してコンピュータハードウェア２０２と間接的に対話する部分的に独立したソフトウェアシステムを備えることができるが、他の段階で、ＶＭＭ’は、コンピュータハードウェア２０２と直接的に対話する（ホストオペレーティングシステムがコンピュータハードウェアと直接的に対話する方法と同様に）。また、更に他のケースにおいて、ＶＭＭ２０４’は、ホストオペレーティングシステム２０４’’を利用せずに（それでも、コンピュータハードウェア２０２の使用を調整し競合を避ける等のためにホストオペレーティングシステム２０４’’と対話するが）、全ての段階で、コンピュータハードウェア２０２と直接的に対話する完全に独立したソフトウェアシステムを備えることができる（ホストオペレーティングシステムがコンピュータハードウェアと直接的に対話する方法と同様に）。
【００１５】
上記の言及されたパーティションを実装するための全ての変形は、単に実装例であり、本明細書はあらゆる部分的な仮想化の態様に対する開示を限定するものとして解釈すべきでない。
【００１６】
仮想マシン内のデバイス及びシステム状態の管理の態様
図２及び図３の上記のパーティションは、一次パーティション及び二次パーティション、又は、態様を限定しないものにおいて、各々、信頼されたパーティション及び信頼されない（特権のない）パーティションとして、又は、更に態様を限定しない他のものにおいて、各々、親のパーティション及び子のパーティションとしての形式において実装されることができる。どのような関係がそのようなパーティション間で達成されようとも、本開示の一つの目的は、そのような一次パーティションから二次パーティションにデバイスの割り当て（物理的又は仮想のいずれにせよ）を可能にさせることであり、二次パーティションはデバイスの制御を実行することができ、更に、一次パーティションに、そのようなデバイスがどのように機能することができるかについての入力を有することを可能にする。
【００１７】
一次パーティションは、二次パーティション内のデバイスのドライバオブジェクトに関するプロキシとしての代役をするプロキシドライバオブジェクトを有することができる。そのようなデバイスのドライバオブジェクトは、通例的にドライバのスタック上に備わっており、フィルタによって上及び下を取り囲まれ、そのようなデバイスのドライバオブジェクトが一次パーティションによって実装されるポリシーによって適当に機能していることを確実にする。そのようなポリシー及び他の命令（コード及び／又はデータを含むであろうとなかろうと）は、二次パーティション内のドライバのスタック上の任意のオブジェクトに対するプロキシドライバオブジェクトによって通信されることができる。
【００１８】
例えば、本開示の態様を限定しないものにおいて、図４は、仮想マシン環境内の動作を管理し、それによって分配されたハードウェア状態管理を可能にするシステムを例示する。換言すれば、たとえデバイスのドライバオブジェクト４０６がデバイス４１２の制御を維持したとしても、フィルタ４０８，４１０がデバイスのドライバオブジェクト４０６に対する命令を提供する方法のため、そのようなデバイス４１２がどのように制御されることができるかに関する入力をプロキシドライバオブジェクト４０４が依然として有するように、一次パーティション内のプロキシドライバオブジェクト４０４は、例えば、どのようにドライバのスタック４１６上のオブジェクト４０８，４０６，４１０と通信することができるかを例示する。
【００１９】
例えば、第２のフィルタ４０８は、プロキシドライバオブジェクト４０４からデバイスのドライバオブジェクト４０６に命令を転送することができ、それによってどのようにデバイスドライバ４０６が機能するか（及び、それによってデバイスのドライバオブジェクト４０６が制御しているデバイス４１２がどのように機能するか）についての発言権がある。又は、代わりに、第２のフィルタ４０８は、第２のパーティション４０２内の任意の場所から発行された命令をインターセプトすることができ、それらをデバイスのドライバオブジェクト４０６に渡す又はそのような命令を一次パーティションによって設定される一部のポリシーに合致することができる他の命令と置き換える（例えば、そのような命令がプロキシドライバオブジェクト４０４によって提供される場合）。
【００２０】
このように、図４によって、ここに開示された主題の一つの態様において、一次パーティション内に位置付けられるプロキシドライバオブジェクト４０４を用いることができ、ここで、プロキシドライバオブジェクト４０４がデバイス４１２のためのプロキシドライバである。換言すると、厳密に言うと、それはデバイス４１２に関するデバイスドライバではないが、それはドライバのスタック４１６上の任意のフィルタ４０８，４１０と通信することができ、及び、これらのフィルタ４０８，４１０は、実際のデバイスのドライバオブジェクト４０６が意図する命令を通す（又は通さない）ことができるため、プロキシによってではあるが、それはデバイス４１２に関するデバイスドライバである。
【００２１】
更に、図４は、二次パーティション４０２内のドライバのスタック４１６内に位置付けられるデバイスのドライバオブジェクト４０６を示し、デバイスのドライバオブジェクト４０６はデバイス４１２を制御するように設計される。ドライバのスタック４１６内のデバイスのドライバオブジェクト４０６の下に位置付けられる第１のフィルタオブジェクト４１０があることを理解されることができる。第１のフィルタオブジェクト４１０は、多くの機能を有し、その中の一つはデバイスのドライバオブジェクトにインターフェースを提供することができ、デバイスのドライバオブジェクト４０６はデバイス４１２を制御することを含むバスに関連付けられた機能に携わることができる。そのようなバスに関連付けられた機能は、もちろん、デバイス４１２を制御するだけに限定されず、例えば、第１のフィルタ４１０がデバイス４１２に関するアドレス空間情報についてプロキシドライバ４０４に問い合わせることができるように、デバイスのドライバオブジェクト４０６は要求する情報を得ることを含むことができる。
【００２２】
加えて、ドライバのスタック４１６内のデバイスのドライバオブジェクト４０６の上に位置付けられる第２のフィルタオブジェクト４０８は、（ａ）プロキシドライバオブジェクトからの第１の命令のセットをデバイスのドライバオブジェクトに向ける、及び／又は（ｂ）第２の命令が二次パーティションから発生することができる場合、デバイスのドライバオブジェクト４０６のために意図された第２の命令のセットをインターセプトする。これは、第２のフィルタ４０８が二重機能を有することができることを意味し、その二重機能は、命令をプロキシドライバ４０４からデバイスドライバ４０６に中継するメカニズムとして機能し、及びデバイスドライバ４０６に対して発行された命令をインターセプトするメカニズムとして機能し、ただし、これらの後者の命令は、通例的に二次パーティションによって発行されるが、例えば、三次の信頼されないパーティションのような他のパーティションによっても、それらは全く同様に簡単に発行される。
【００２３】
この後者のケースにおいて、第２の命令をインターセプトすると、第２のフィルタオブジェクト４０８は、一次パーティション４００及び／又は、例えば、ハイパーバイザ、仮想マシンモニタ（図２及び図３に示される）などの仮想化しているモジュールによって、設定されたポリシーと第２の命令を比較することができる。第２の命令がこれらのポリシーと相反する場合、第２のフィルタオブジェクト４０８はこれらの命令をポリシーと一致する命令に置き換えることができる。その後、第２のフィルタオブジェクト４０８は、これらの一致した命令を下のデバイスのドライバオブジェクト４０６へ渡すことができる。
【００２４】
図４による、ここに開示された主題の一つの態様において、一次パーティション４００は、プロキシデバイスドライバ４０４と通信するオブジェクト４１４（例えば、プラグアンドプレイマネージャオブジェクト及び／又はパワーマネージャオブジェクト、又は命令を発行することが可能な任意の他のオブジェクト等）を有することができ、一次パーティション４００のオブジェクト４１４は、プロキシデバイスオブジェクト４０４に状態変化のイベントを実装するように指示する。そのような状態変化のイベントは、第１の命令を経由して運搬されることができる。言うまでもなく、第１の命令は、例えば、物理的マシン全体及び各々のパーティションのためのシステムシャットダウン又はシステムスタンバイのようなシステムワイドなイベント、又は、その代わりに、例えば、デバイスのドライバオブジェクト４０６に命令してデバイス４１２をシャットダウンする等のより局所的なイベント、のどちらかを発行するために用いられる。
【００２５】
他の態様において、図４のシステムは、上記の第２の命令を経由して第２のフィルタオブジェクト４０６と通信する二次パーティションオブジェクト４１５（再び、例えば、プラグアンドプレイマネージャオブジェクト及び／又はパワーマネージャオブジェクト、又は命令を発行することが可能な任意の他のオブジェクト等）を有することができる。二次パーティションオブジェクト４１５は、第２のフィルタオブジェクトにプラグアンドプレイイベント（マスストレージデバイスのプラグイン、デジタルカメラ等）及び／又はパワーイベント（シャットダウン、ハイバネイト等）に関連する命令を実装するように指示することができる。
【００２６】
インターセプトするケース又は方向付けるケースのどちらかにおいて、デバイスのドライバオブジェクト４０６が一次パーティション４００（すなわち、例えば、マネージャ４１４のような、その中のモジュール）によって設定された少なくとも一つのポリシーに従うことを拒絶する場合、デバイスのドライバオブジェクト４０６によるデバイス４１２の制御は無効とされることができる。その無効は、例えば、厳密なルール又は一般的に注意するガイドラインの一セット、又はそれらと同様の何か等の、様々な変更要素に依存することができる。ここに開示された態様を実装することができる形態を検査する多数の様々なポリシーを当業者は直ちに理解するであろう。
【００２７】
これらは単に例示的な態様である。例えば、各々の単方向の通信関係の一つの方法は、その補完物を伴う場合があることが理解される。換言すると、プロキシドライバ４０４は、デバイススタック上のオブジェクト４０８，４０６，４１０と通信することができるため、反対の通信もまた本明細書で企図されていることが理解される。例えば、プロキシドライバ４０４は、例えば、メモリ又は二次パーティション４０２のＩ／Ｏ空間にマッピングされることのできない配置空間及び他の資源へのアクセスに関するリクエストのような、二次パーティション４０２オブジェクトからの通信を受信することもできる。
【００２８】
仮想マシン内の動作管理の実施例
今までの図２，３及び４において示される仮想マシン及びパーティション内での使用のための様々なオペレーティングシステムが、本明細書に企図されている。例えば、Ｗｉｎｄｏｗｓ（登録商標）は、通例的にデバイスの管理及び制御における役割を各々演じるデバイスのドライバオブジェクトのスタックを構築することによってＩ／Ｏを実行する。個々のＩ／Ｏリクエストパケット（Ｉ／Ｏ  ｒｅｑｕｅｓｔ  ｐａｃｋｅｔ：ＩＲＰ）４１８の各々は、スタック（例えば、ドライバのスタック４１６）内の一番上のドライバオブジェクト（例えば、第２のフィルタオブジェクト４０８）に対して送信されることができ、一番上のドライバオブジェクトはそれを処理し終わると、ＩＲＰをスタックの下方に渡す。各々のドライバオブジェクトは、順番にＩＲＰを受信し、スタックにおいて、その層に対する適当な処理を実行する。一番下の層は、一般的にセットアップ及び構成に関わる。図５において、例えば、この下の層は「ＰＣＩ．ｓｙｓ」，「ＶＭＢｕｓ．ｓｙｓ」及び「ＡＣＰＩ．ｓｙｓ」（これらの頭字語は「ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ」（ＰＣＩ）オブジェクト、「ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｂｕｓ」（ＶＭＢｕｓ）オブジェクト、及び「ａｄｖａｎｃｅｄ  ｃｏｎｆｉｇｕｒａｔｉｏｎ  ａｎｄ  ｐｏｗｅｒ  ｉｎｔｅｒｆａｃｅ」（ＡＣＰＩ）オブジェクトを言及する）のオブジェクトと対応するであろう。これら及び本明細書で用いられるいずれの他の頭文字語も当業者は直ちに理解するであろう。
【００２９】
Ｗｉｎｄｏｗｓ（登録商標）において、物理的デバイス（例えば、デバイス４１２）は、物理的コンピュータシステム内に全体的なバスの管理を所有するバスドライバ（例えば、「ＰＣＩ．ｓｙｓ」）によって発見される。デバイスはシステム内の「ＰＣＩ  Ｅｘｐｒｅｓｓ」バスに接続されることができ、Ｗｉｎｄｏｗｓ（登録商標）内の「ＰＣＩ  Ｅｘｐｒｅｓｓ」バスドライバによって発見されることができる。例えば、他のドライバ（Ｆｕｎｃｔｉｏｎａｌ  Ｄｒｉｖｅｒ，又はＦＤＯと呼ばれる）をロードさせることができるプラグアンドプレイ（ＰｎＰ）マネージャのような、マネージャとプロトコルにおいて携わることができるのは、このドライバ（「ＰＣＩ．ｓｙｓ」）である。このＦＤＯ（例えば、デバイスドライバ４０６）は、実際にデバイスを制御する。「ＰＣＩ．ｓｙｓ」は、ＰＣＩ  Ｅｘｐｒｅｓｓデバイスの構成に特有なインターフェースを発行することもでき、セットアップ及び構成中にＦＤＯがデバイスに対する操作を行うことを許容する。
【００３０】
バスドライバが新しいデバイスを発見した場合、新しいデバイスオブジェクトを創造することができ、新しいデバイススタックの一番下を創造する。ＰｎＰマネージャは、それを特定する及び一連のプロパティを集める一連のリクエストを、新しいスタックに送信することができる。この情報から、バスドライバによって創造されたデバイスオブジェクトの一番上の層に対するドライバを決定することができる。
【００３１】
このコンテキストを適切とするものとして、次に、図５は、図４において説明された主題の例示的かつ非限定的な実装を示す。図５において、一連のＰＣＩバスを有する一連のデバイススタックが、親の（又は信頼された）パーティション及び子の（又は信頼されない／特権のない）パーティション内に示される。これらは、各々、図４の一次パーティション４００及び二次パーティション４０２に対応する単なる例示的なパーティションである。様々な信頼されたパーティションと信頼されないパーティションとの関係を有する他のパーティションの組を用いることができる。ここに開示されたデバイススタックは、例えば、ビデオコントローラ５０８、ＩＤＥコントローラ５１０、第１のネットワークスタック５０４、第２のネットワークスタック５０６、ＰＣＩブリッジスタック５１２、及びＰＣＩルートスタック５１４の様々なタイプとすることができる。典型的な仮想マシン環境において用いられることができる無数の異なるデバイススタックを当業者は直ちに理解するであろう。
【００３２】
図５において、デバイススタックは長方形で表され、デバイスオブジェクトは楕円形によって表される。すでに言及したように、スタック内の一番下のデバイスオブジェクトは、ＰＣＩルートバスの場合は除いて、図５において「ＰＣＩ．ｓｙｓ」であるバスドライバとすることができる。この例では、ルートバスは、ＡＰＣＩファームウェアを調べることによって発見されることができ、従って、「ＡＰＣＩ．ｓｙｓ」は、ＰＣＩルートスタック５１４の一番下である。他のデバイスオブジェクト、例えば、ネットワーク１  ５０４スタック内の「Ｎｅｔ．ｓｙｓ」又はビデオスタック５０８内の「Ｖｉｄｅｏ」等は、ＰＣＩ．ｓｙｓオブジェクトの上であり、それらは実際の物理的デバイスを制御することができる。
【００３３】
この例において、親のパーティション５００はマシン内の全てのデバイスを制御することができる。例えば、デバイスを子のパーティション５０２のような他のパーティションに割り当てるときでさえ、デバイス全域にわたる制御の一部の測定を保持することができ、子のパーティションは、全体のバス又は全体のマシンを含む動作を妨げることができない。すでに説明されたように、そのような制御を保持するための親のパーティション５００に関する一つの方法は、子のパーティションドライバの上及び下のフィルタを用いることによる、及びそれと関連する命令の様々なセットを用い操作することによる。
【００３４】
例えば、親のパーティション５００が子のパーティション５０２に、デバイス、おそらくネットワークインターフェースを直接制御することを許可したい場合、親のパーティション５００内のデバイスを現在制御している全てのドライバを最初にアンロードすることができる（子のパーティション内のドライバとの競合を避けるために）。その後、親のパーティションにおいて異なるドライバをロードし、それは子のパーティションへ渡されるリクエストを管理するために存在するものである。図５において、この機能は、ネットワーク２のスタック５０６内の「ＶＭＲｅｄｉｒ．ｓｙｓ」オブジェクトによって実行される。このように、上で提唱されたように、親のパーティション５００内の「ＶＭＲｅｄｉｒ．ｓｙｓ」オブジェクトは、子のパーティション５０２のネットワーク２のスタック５１６内の「Ｎｅｔ．ｓｙｓ」オブジェクトに関するプロキシオブジェクトである。
【００３５】
子のパーティション５０２において、ドライバは、物理的デバイス（例えば、ネットワークインターフェースカード（ＮＩＣ））に対応するデバイススタックを構築されることができる。これは任意の仮想マシンアウェアのデバイスドライバのセットによってなされることができるが、図５において、「ＶＭＲｅｄｉｒ．ｓｙｓ」オブジェクトによってなされるように示され、クロスパーティションＩ／Ｏ（ＳＮ：１１／１２８６４７，「Ｐａｒｔｉｔｉｏｎ  Ｂｕｓ」  Ａｔｔｏｒｎｅｙ  Ｄｏｃｋｅｔ  Ｎｏ．ＭＳＦＴ−４７７１を参照）を管理するためのメカニズムとすることができる。このバスドライバオブジェクトの上では、デバイスオブジェクトが階層化され（「ＶＭＰＣＩ．ｓｙｓ」）、この上では子のパーティションに割り当てられたＰＣＩ  Ｅｘｐｒｅｓｓデバイスを管理し、このＰＣＩ  Ｅｘｐｒｅｓｓ  ＮＩＣのためのレギュラードライバ（ＦＤＯ）がロードされる（「Ｎｅｔ．ｓｙｓ」）。また、この上では、他のデバイスオブジェクトが階層化され（再び、「ＶＭＰＣＩ．ｓｙｓ」）、二次パーティション内から及び／又は親のパーティション５００からのリダイレクト命令からこのスタックに送信される一部のＩＲＰをインターセプトする。図４の第１のフィルタ４１０及び第２のフィルタ４０８の両方は、図５の「ＶＭＰＣＩ．ｓｙｓ」と対応することができる。
【００３６】
次に、図６は、図５に示されたデバイスドライバのスタック５１６を介してＩＲＰがどのように流れるかをより詳細に例示する。ＩＲＰの矢印は、ＰｎＰマネージャ及び／又はパワーマネージャ６００（それらは別個の存在とすることができる又はできない）に対する、及び、からのフローを表す。一番上のデバイスオブジェクト（「ＶＭＰＣＩ．ｓｙｓ」の部分）は、これらのＩＰＲをインターセプトし、デバイススタック５１６が二次パーティション内からくる任意のポリシーを注意したことを二次パーティション５０２に信じさせる方法においてそれらを扱う。その矢印は、ＦＤＯ、すなわち、「Ｎｅｔ．ｓｙｓ」によって観察されることができるＩＲＰ６０２のフローも示し、それらはバスドライバに対して流れ下るＩＲＰを示す。
【００３７】
図７は、どのように状態変化するＰｎＰ及びパワーマネージメント７００のＩＲＰ７０２（点線で示される）が一次パーティションにおいて送信されることができるか、及び、どのようにこれらのＩＲＰ７０４（再び、点線で示される）が二次パーティション５０２に対して転送されるかを示す。これらのＩＲＰ７０４は、本質的に、一次パーティション５００のネットワークスタック５０６内の「ＰＣＩ．ｓｙｓ」から二次パーティション５０２のネットワークスタック５１６内の「ＶＭＰＣＩ．ｓｙｓ」へリダイレクトされる。そこで、「ＶＭＰＣＩ．ｓｙｓ」オブジェクト（すなわち、フィルタ）は、それらをデバイスドライバ「Ｎｅｔ．ｓｙｓ」に伝えることができ、又は任意の第２のパーティション５０２ＩＲＰ７０６をインターセプトするルール又はガイドラインのようにそれらを用いることができる。
【００３８】
ここに開示された主題の一つの態様として、一次パーティション５００において送信されるＩＲＰ７０２は、メッセージを二次パーティション５０２に送信することができる。これらのメッセージを、ＶＭＰＣＩ．ｓｙｓによってＩＲＰに戻し、ＮＩＣドライバ（すなわち、「Ｎｅｔ．ｓｙｓ」）に送信することができる。ＮＩＣドライバは、「ＶＭＰＣＩ．ｓｙｓ」にそれらを下り進め（それがすることになっているように）、このオブジェクトは、そこでそれらをキャッチし、そのスタックの更に下に進むことを妨げる。その一方で、「Ｎｅｔ．ｓｙｓ」の上及び下の層が「ＶＭＰＣＩ．ｓｙｓ」オブジェクトであるため、二次パーティション５０２内に生じることができる任意の状態変化するＩＲＰ７０６（少なくとも部分的に破線で示されている）は、そのスタックを下のＮＩＣドライバ（すなわち、「Ｎｅｔ．ｓｙｓ」）に送信されることができ、又はその先へのシャトル７０８とすることができる。
【００３９】
さらに、「Ｎｅｔ．ｓｙｓ」に由来するバスレベルで、デバイスを管理するあらゆる試みは、そのスタックを下の「ＶＭＰＣＩ．ｓｙｓ」に送信され、それらは一次パーティションに戻され、「ＰＣＩ．ｓｙｓ」オブジェクトの前方へ送信されることができる。バスレベル管理の例は、ネットワークデバイスのＰＣＩ  Ｅｘｐｒｅｓｓ配置空間を読み出す要求を含むことができる。本開示を読むと、当業者は、上記の態様をとることができる様々な他の置換を理解するであろう。これらの態様は限定されず、単に例示的であることを意味する。
【００４０】
要点
要点において、仮想マシン環境内の動作を管理する様々なシステムが論じられた。これらのシステムは、当業者に明らかなように、方法又はコンピュータ可読媒体で存在する命令として実施されることができる。例えば、例示的かつ非限定的な方法は、以下のステップを備えることができる（ここで、これらのステップの順序は、様々な置換において実装されることができる）。ボックス８００では、パーティションにおいて、デバイススタックは物理的デバイスに対応して構築されることができる。その後、ボックス８０２では、第１のフィルタオブジェクトはデバイススタック上で階層化され、このフィルタはインターフェースをバスに関連付けられる動作に携わるオブジェクトに関するデバイスのドライバオブジェクトに提供する。次に、ボックス８０４では、デバイスのドライバオブジェクトは第１のフィルタオブジェクトの上に階層化されることができ、ドライバオブジェクトは第１のフィルタオブジェクトを経由して物理的デバイスを制御することができる。最後に、ボックス８０６では、第２のフィルタオブジェクトは、デバイスのドライバオブジェクトの上に階層化されることができ、第２のフィルタオブジェクトは、第１の命令のセットをプロキシサーバからデバイススタックに方向付けるために構成されることができ、プロキシサーバは、このパーティションから異なるパーティションに属することができる。
【００４１】
今や、第１のフィルタオブジェクト、デバイスのドライバオブジェクト、及び第２のフィルタオブジェクトが構築されたため、このデバイススタックは、他のパーティション内のプロキシドライバオブジェクトと対話することができる。このように、ボックス８０８では、デバイススタックは、命令、ＩＲＰ、メッセージ、及びそのような（コード及び／又はデータであろうとなかろうと、基本的に任意の情報）情報を処理することができる。例えば、ボックス８１０では、プロキシドライバオブジェクトからの上記第１の命令のセット（そのような命令は、システムワイド又は局所だけの効果を有する）を処理することができる。更に、ボックス８１２では、デバイスのドライバオブジェクト用に意図された第２の命令のセットを処理することができ、第２の命令はパーティションに由来し（すなわち、それらはインターパーティション、すなわち、異なるパーティションから由来するパーティションであることに対向するようなスタックのように、同じパーティションからのイントラパーティション命令である）、これらの第２の命令は、プラグアンドプレイ及びパワーイベントに関連付けられることができる。最後に、ボックス８１４では、第１のフィルタは、インターフェースをドライバオブジェクトに提供することができ、異なるパーティションからの、ドライバオブジェクトに関する必要な情報を得ることができる（例えば、バスに関連付けられた情報）。
【００４２】
今までに説明された他の態様は、２つの制御の概念を含むことができる。例えば、制御の概念は、デバイス自体の動作に関連するデバイス状態の制御として及び全体のシステムに影響するデバイス状態の制御として分けられることができる。例えば、前者のケースは個々のＩ／Ｏ動作（例えば、現在読み出されているデスク上のオフセット）と関連付けられる情報を含むことができる。及び、更に、後者のケースはデバイスの電源スイッチを含むことができ、全体のシステムも電源が入らない限り、ターンオンされることができない。このように、この態様において、一次パーティション内の全体のシステムに関連するデバイス状態の制御を保持する一方で、生じることは、Ｉ／Ｏに関するデバイス状態の分離及び第２のパーティションへの割り当てである。
【００４３】
ここに開示された主題の方法、システム、装置は、例えば、電気配線又は電気ケーブルを超えた、光ファイバを介した、又はあらゆる他の形式の送信を経由したような、一部の送信媒体を超えて送信されるプログラムコード（例えば、コンピュータ可読媒体のような）の形式において具現化されることもでき、ここで、プログラムコードが、例えば、ＥＰＲＯＭ、ゲートアレイ、ＰＬＤ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｄｅｖｉｃｅ）、例えば、以下の図に示される、ビデオレコーダ又はそのようなクライアントコンピュータのようなマシンによって受信及びロード及び実行されるとき、マシンは本主題を実施する装置となる。汎用プロセッサで実装されるとき、プログラムコードはプロセッサと結合し、本主題の機能性を確保及び修復することを実行するために動作する唯一の装置を提供する。
【００４４】
最後に、本開示は様々な図において説明されたような好ましい態様に関連して説明され、他の同様の態様が用いられることができ、又は、変更及び追加は、それらから逸脱することなく、本開示の同様の機能を実行する説明された態様でなされることができる。例えば、本開示の様々な態様において、仮想マシン環境内の動作管理が論じられた。しかしながら、これらの説明された態様に対する他の同等のメカニズムも本明細書を教えることによって検討される。それ故に、本開示は、いかなる単一の態様に限定されるべきではなく、むしろ添付の特許請求の範囲に従った広さ及び範囲において解釈される。
【図１】
2010505198.tif 000003
【図２】
2010505198.tif 000004
【図３】
2010505198.tif 000005
【図４】
2010505198.tif 000006
【図５】
2010505198.tif 000007
【図６】
2010505198.tif 000008
【図７】
2010505198.tif 000009
【図８】
2010505198.tif 000010
【国際調査報告】
2010505198.tif 000011
2010505198.tif 000012