(57)【要約】【課題】  仮想マシン環境においてパーティションを統合するための方法およびシステムを提供する。【解決手段】  パーティションバス６０２は、パーティション間でのデータ転送および装置共用を可能にするデータ転送機構としてパーティションバスが機能するような方法で、パーティションを動作可能に接続する。パーティションバス６０２は、パーティションバスを確立するため、パーティション間の通信チャネルを確立するため、また必要に応じパーティションに割り込みをかけるために、仮想化ソフトウェアに依存する。さらに、情報（リクエストおよびデータ）を転送するために、リングバッファ６１０，６１２，６１６、転送ページ６１４、メモリマップ変更などのメカニズムを利用する。さらに、いつ情報を転送すべきか、またはパーティション間でいつ装置を共用すべきかを決定するために、ポリシーエージェントを使用する。【選択図】  図６
2006318441.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン環境においてパーティション間の統合を提供するための方法であって、
第１のパーティションおよび第２のパーティションを使用するステップと、
（ａ）リングバッファ、（ｂ）転送ページおよびアドレス空間操作のどちらか一方のうち少なくとも一方を使用することによって、前記第１のパーティションと前記第２のパーティションの間で情報の転送を可能にする転送機構を使用するステップと
を含むことを特徴とする方法。
【請求項２】
前記リングバッファは、前記第１のパーティションと前記第２のパーティションの間で情報を転送するために使用され、前記情報は、リクエストおよびデータの少なくとも一方を含むことを特徴とする請求項１の方法。
【請求項３】
前記リングバッファおよび前記転送ページは共に、前記第１のパーティションと前記第２のパーティションの間で情報を転送するために使用され、前記リングバッファは、前記第１のパーティションと前記第２のパーティションの間でリクエストを転送するために使用され、前記転送ページは、前記第１のパーティションと前記第２のパーティションの間でデータを転送するために使用されることを特徴とする請求項１の方法。
【請求項４】
前記リングバッファおよび前記アドレス空間操作は共に、前記第１のパーティションと前記第２のパーティションの間で情報を転送するために使用され、前記リングバッファは、前記第１のパーティションと前記第２のパーティションの間でリクエストを転送するために使用され、前記アドレス空間操作は、前記第１のパーティションと前記第２のパーティションの間でデータを転送するために使用されることを特徴とする請求項１の方法。
【請求項５】
実ハードウェア装置を駆動するために前記第１のパーティション内に含まれるデバイスドライバと、前記第２のパーティション内に含まれる合成装置とをさらに含み、前記転送機構は、前記実ハードウェア装置の所有権を前記合成装置に割り当てることを可能にすることを特徴とする請求項１の方法。
【請求項６】
前記合成装置はさらに、抽象サービスに対応することが可能であることを特徴とする請求項５の方法。
【請求項７】
前記転送機構は、前記第１のパーティションと前記第２のパーティションが、コンテキストスイッチコストを生じさせずに情報を交換することを可能にし、前記転送機構は、前記第１のパーティションおよび前記第２のパーティションにマッピングされるリングバッファを使用し、情報を前記第１のパーティションによって前記リングバッファに書き込み、前記第２のパーティションによって前記リングバッファから読み取ることができ、情報を前記第２のパーティションによって前記リングバッファに書き込み、前記第１のパーティションによって前記リングバッファから読み取ることができることを特徴とする請求項１の方法。
【請求項８】
前記第１のパーティション内に含まれるサービスおよび装置の一方をさらに含み、前記サービスは、サービスバージョンおよびインスタンスを指定するためのグローバルユニーク識別子を、前記装置は、装置バージョンおよびインスタンスを指定するためのグローバルユニーク識別子を有することを特徴とする請求項１の方法。
【請求項９】
ポリシーエージェントをさらに含み、前記ポリシーエージェントは、前記第１のパーティションから前記第２のパーティションに対して行われる少なくとも１つのチャネルオファーの妥当性を検査し、前記ポリシーエージェントは、第３のパーティション内に存在することが可能であることを特徴とする請求項１の方法。
【請求項１０】
前記転送機構は、リングバッファ管理、チャネル管理、およびバスドライバから構成されるパーティションバスであり、前記パーティションバスは、ユーザモードでは、前記リングバッファ管理だけを利用し、前記パーティションバスは、カーネルモードでは、前記リングバッファ管理、前記チャネル管理、および前記バスドライバの３つすべてを利用することを特徴とする請求項１の方法。
【請求項１１】
エミュレートハードウェアモジュールと仮想化サービスプロバイダが、前記第１のパーティション内で同時に動作し、前記仮想化サービスプロバイダは、前記第２のパーティション内の合成装置が、前記第１のパーティションにおいて列挙されることを可能にすることを特徴とする請求項１の方法。
【請求項１２】
仮想マシン環境においてパーティション間の統合を提供するためのシステムであって、
第１のパーティションと、
第２のパーティションと、
（ａ）リングバッファ、（ｂ）転送ページおよびアドレス空間操作のどちらか一方のうち少なくとも一方を使用することによって、前記第１のパーティションと前記第２のパーティションの間で情報の転送を可能にする転送機構と
を備えることを特徴とするシステム。
【請求項１３】
前記リングバッファおよび前記転送ページは共に、前記第１のパーティションと前記第２のパーティションの間で情報を転送するために使用され、前記リングバッファは、前記第１のパーティションと前記第２のパーティションの間でリクエストを転送するために使用され、前記転送ページは、前記第１のパーティションと前記第２のパーティションの間でデータを転送するために使用されることを特徴とする請求項１２のシステム。
【請求項１４】
前記リングバッファおよび前記アドレス空間操作は共に、前記第１のパーティションと前記第２のパーティションの間で情報を転送するために使用され、前記リングバッファは、前記第１のパーティションと前記第２のパーティションの間でリクエストを転送するために使用され、前記アドレス空間操作は、前記第１のパーティションと前記第２のパーティションの間でデータを転送するために使用されることを特徴とする請求項１２のシステム。
【請求項１５】
実ハードウェア装置を駆動するために前記第１のパーティション内に含まれるデバイスドライバと、前記第２のパーティション内に含まれる合成装置とをさらに備え、前記転送機構は、前記実ハードウェア装置の所有権を前記合成装置に割り当てることを可能にし、さらに前記合成装置は、抽象サービスに対応することが可能であることを特徴とする請求項１２のシステム。
【請求項１６】
前記転送機構は、前記第１のパーティションと前記第２のパーティションが、コンテキストスイッチコストを生じさせずに情報を交換することを可能にし、前記転送機構は、前記第１のパーティションおよび前記第２のパーティションにマッピングされるリングバッファを使用し、情報を前記第１のパーティションによって前記リングバッファに書き込み、前記第２のパーティションによって前記リングバッファから読み取ることができ、情報を前記第２のパーティションによって前記リングバッファに書き込み、前記第１のパーティションによって前記リングバッファから読み取ることができることを特徴とする請求項１２のシステム。
【請求項１７】
前記第１のパーティション内に含まれるサービスおよび装置の一方をさらに備え、前記サービスは、サービスバージョンおよびインスタンスを指定するためのグローバルユニーク識別子を、前記装置は、装置バージョンおよびインスタンスを指定するためのグローバルユニーク識別子を有することを特徴とする請求項１２のシステム。
【請求項１８】
ポリシーエージェントをさらに備え、前記ポリシーエージェントは、前記第１のパーティションから前記第２のパーティションに対して行われる少なくとも１つのチャネルオファーの妥当性を検査し、前記ポリシーエージェントは、第３のパーティション内に存在することが可能であることを特徴とする請求項１２のシステム。
【請求項１９】
エミュレートハードウェアモジュールと仮想化サービスプロバイダが、前記第１のパーティション内で同時に動作し、前記仮想化サービスプロバイダは、前記第２のパーティション内の合成装置が、前記第１のパーティションにおいて列挙されることを可能にすることを特徴とする請求項１２のシステム。
【請求項２０】
第１のパーティションおよび第２のパーティションを使用するステップと、
（ａ）リングバッファ、（ｂ）転送ページおよびアドレス空間操作のどちらか一方のうち少なくとも一方を使用することによって、前記第１のパーティションと前記第２のパーティションの間で情報の転送を可能にする転送機構を提供するステップとを含む、仮想マシン環境においてパーティション間の統合を提供するためのコンピュータ実行可能命令を含むコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、仮想マシン（または「パーティション」）の分野、およびそのようなパーティション内で実行されるオペレーティングシステムに関する。より詳細には、本発明は、パーティション間でデータを移送するため、および装置を共用するためのシステムおよび方法に関する。
【背景技術】
【０００２】
著作権表示および許可
本特許文献の開示の一部には、著作権保護の対象となる記載が含まれることがある。本特許文献または特許開示は特許商標局の特許ファイルまたは記録に公開されているので、著作権者は、何人によるその複製にも異議を唱えることはないが、その他の行為についてはどのようなものであれ、すべての著作権の権利を保有する。以下の表示を本文献に適用する。Ｃｏｐｙｒｉｇｈｔ（Ｃ）２００５、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．
一般的な仮想マシン環境では、複数の仮想マシンまたは「パーティション」が、仮想化ソフトウェア（virtualizing software）上で動作する。さらに、このソフトウェアは、ハードウェア上で動作する。仮想化ソフトウェアは、それ自体のオペレーティングシステム（ＯＳ）を有する複数のパーティションが、ハードウェア上で動作可能となるような方式で、ハードウェアを提示する。したがって、ハードウェアは、仮想化ソフトウェアによって、パーティション用に仮想化される。
【０００３】
個々のパーティションは、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ、およびＳｏｌａｒｉｓなどの異種ＯＳを動作させることができる。これらのＯＳは、あるパーティション内の１つのＯＳがクラッシュしても、それが他のパーティション内の他のＯＳに影響を及ぼすことがないように、互いに分離することができる。
【０００４】
１組のハードウェア上で複数のパーティションを動作させることに関連するコストの１つは、仮想化ソフトウェアが、各パーティション用に装置を仮想化する際に、多大なプロセッササイクルを消費することである。同様に、仮想化ソフトウェアは、情報（リクエストおよび／またはデータ）または装置をそのようなパーティション間で共用する際にも、多大なサイクルを消費するが、それは、仮想化ソフトウェアが、これらの情報および装置を、パーティション間で共用できるように処理しなければならないためである。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
具体的には、与えられたどのような仮想マシン環境でも、パーティション内に存在するいくつかの、おそらくはすべての入出力装置が、他のパーティション内に見出される複数のＯＳと一緒に共用されるようには設計されていないため、ある種の問題が生じる。大部分の装置のプログラミングモデルは、装置を「所有」するＯＳがただ１つしか存在しないものと仮定しており、このことが、様々なパーティション内に見出される複数のオペレーティングシステムによって、そのような装置を同時に使用することを非常に困難に、または不可能にしている。例えば、１つのディスクコントローラが、２つのオペレーティングシステムから同時にコマンドを受け取っている場合などに、問題が生じ得る。各オペレーティングシステムが、自分がファイルシステム構造を制御していると考え、選択したデータを無条件に書き込むと、やがてディスク内容の正確性は損なわれる。このような事態が起きないようにするには、装置の所有権を単一のオペレーティングシステムに割り当て、その後、その装置のサービスを他の任意の動作中のオペレーティングシステムと共用する方法およびシステムを考案すれば有利であろう。
【０００６】
さらに、ユーザはオペレーティングシステム同士の一定のレベルの統合を必要とするので、複数のオペレーティングシステムが同一マシンを共用しようと試みる場合に、別の問題が生じる。例えば、それぞれのパーティション内に見出されるオペレーティングシステム間でのデータ移送を、ユーザが望むことがある。したがって、動作中のオペレーティングシステム間でデータを、またはより広範には情報を移送する方法およびシステムを提供すればやはり有利であろう。
【課題を解決するための手段】
【０００７】
本発明の様々な態様において、仮想マシン環境内の様々なパーティション間で装置共用およびデータ転送を可能にする方法およびシステムが提供される。本発明の一態様で提供されるパーティションバス（partition bus）は、上記のパーティション間装置共用およびデータ転送を可能にするデータ転送機構である。
【０００８】
詳細には、パーティションバスは、リングバッファ（ring buffer）を使用して、一パーティションから別のパーティションに情報（リクエストおよび／またはデータ）を転送する。本発明の別の態様では、パーティションバスは、リングバッファを使用して一パーティションから別のパーティションにリクエストを送信し、転送ページ（transfer page）を使用して一パーティションから別のパーティションにデータを送信する。本発明のさらに別の態様では、パーティションバスは、リングバッファを使用してパーティション間でリクエストを送信し、アドレス空間操作（address space manipulation）を使用してパーティション間でデータを転送する。
【０００９】
本発明の付加的な態様では、パーティションバスは、一パーティション内に、別のパーティション内でのサービスに対応するローカルプロキシ合成装置（local proxy synthetic device）が存在することを可能にする。パーティションバスは、これらの合成装置が、ストレージコントローラなどの実際の装置、またはドラッグアンドドロップ機能などの抽象サービスに対応することも可能にする。さらなる態様では、パーティションバスは、パーティションによって書き込みおよび読み出しが行えるリングバッファをパーティションにマッピングすることにより、コンテキストスイッチング（context switching）の犠牲を払うことなく、パーティション間でデータを送信するためのメカニズムを提供する。さらに別の態様では、パーティションバスは、バージョン管理機構を提供し、パーティション内に配置されたサービスは、サービスのタイプおよびサービスのインスタンスに基づいて、グローバルに一意な識別情報を有する。別の態様では、パーティションバスは、第１のパーティションによって行われる第２のパーティションへのチャネルオファーの妥当性を検査するためのポリシー決定エージェント（policy decision agent）を使用する。このポリシーエージェントは第３のパーテーションに位置する。さらに別の態様では、パーティションバスは、ハードウェアエミュレート装置モジュール（hardware emulated device module）および仮想化サービスプロバイダ（virtualization service provider）の同時動作を可能にする。またさらに別の態様では、パーティションバスは、クライアントコンポーネントがユーザモードにあるか、それともカーネルモードにあるかに応じて、３つのコンポーネントの組み合わせから構成される。３つのコンポーネントには、リングバッファ管理、チャネル管理、およびバスドライバが含まれる。
【００１０】
本発明の他の特徴について以下で説明する。
【発明を実施するための最良の形態】
【００１１】
本発明の要約および詳細な説明は、添付の図面と併せて読むことで、より良く理解される。本発明を説明するため、本発明の様々な態様が示される。しかし、本発明は、開示された特定のシステムおよび方法に限定されるものではない。
【００１２】
概要
パーティションバスの様々な態様について説明する。最初に、例示的なコンピューティング環境を、仮想マシン環境におけるオペレーティングシステムを有するパーティションの一般的説明と共に提示する。この説明の後、パーティションバスのパーティション間データ転送および装置共用機能について詳しく説明する。パーティションバスの一般的説明を提示した後、合成装置を使用したサービスである、パーティションバスの装置共用機能の詳細な検討を提示し、その後、リングバッファ、転送ページ、およびアドレス空間操作を使用する、パーティションバスのデータ転送機能の詳細な検討を提示する。加えて、パーティションチャネルオファー（partition channel offer）の妥当性を検査するポリシーエージェントの使用など、パーティションバスのさらなる態様について考察する。
【００１３】
例示的なコンピューティング環境
図１および以下の説明は、本発明を実施できる適切なコンピューティング装置についての簡単な概括的説明を提供することを意図している。例えば、図１に示すクライアントおよびサーバコンピュータまたは装置はどれも、この形態をとることができる。しかし、ハンドヘルド、ポータブル、およびその他のコンピューティング装置、ならびにすべての種類のコンピューティングオブジェクトが、本発明で、すなわち、コンピューティング環境における、データを生成でき、処理でき、受信でき、かつ／または送信できるあらゆる場所で、使用されることを企図されている。以下では汎用コンピュータについて説明するが、これは一例にすぎず、本発明は、ネットワーク／バス相互運用性および対話性を有するシンクライアントでも実施することができる。したがって、本発明は、非常に少ないまたは最低限のクライアント資源しか関係させないネットワークホストサービス環境で、例えば、装置内に配置されたオブジェクトなど、クライアント装置がネットワーク／バスへのインタフェースとしてのみ機能するネットワーク環境で実施することができる。本質的に、そこにデータを保存でき、またはそこからデータを取り出せ、もしくは別のコンピュータに送信できる場所はどこでも、本発明のオブジェクト永続性（object persistence）をもつ方法を実施するための望ましいか、または適した環境となる。
【００１４】
必ずしも必要ではないが、本発明は、装置またはオブジェクト用のサービスの開発者によって使用されるオペレーティングシステムを介して実施することができ、かつ／または本発明に従って動作するアプリケーションまたはサーバソフトウェアの内部に含ませることができる。ソフトウェアは、クライアントワークステーション、サーバ、またはその他の装置など、１つまたは複数のコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的コンテキストにおいて説明することができる。通常、プログラムモジュールには、特定のタスクを実行したり、または特定の抽象データ型を実施したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。一般に、プログラムモジュールの機能は、様々な実施形態における要求に応じて、組み合わせたり、または分割したりすることができる。さらに、本発明は、その他のコンピュータシステム構成およびプロトコルと一緒に実施することができる。本発明との使用に適している、その他の周知のコンピューティングシステム、環境、および／または構成には、パーソナルコンピュータ（ＰＣ）、現金自動預け払い機、サーバコンピュータ、ハンドへルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースシステム、プログラム可能消費者家電、ネットワークＰＣ、電気器具、照明、環境制御要素（environmental control element）、ミニコンピュータ、メインフレームコンピュータなどが含まれるが、これらに限定されるものではない。
【００１５】
したがって、図１には、本発明を実施できる適切なコンピューティングシステム環境１００が示されているが、上で明白にしたように、コンピューティングシステム環境１００は、適切なコンピューティングシステム環境の一例にすぎず、本発明の用途または機能の範囲に関して何ら限定を示唆しようとするものではない。コンピューティング環境１００が、例示的な動作環境１００に示されたコンポーネントのいずれか１つまたは組み合わせに関して、何らかの依存性または要件を有すると解釈してはならない。
【００１６】
図１を参照すると、本発明を実施するための例示的なシステムは、コンピュータ１１０の形態の汎用コンピューティング装置を含む。コンピュータ１１０のコンポーネントには、プロセッシングユニット１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントをプロセッシングユニット１２０に結合するシステムバス１２１が含まれるが、これらに限定されるものではない。システムバス１２１は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む複数のタイプのバス構造のいずれであってもよい。例えば、そのようなアーキテクチャには、ＩＳＡ（業界標準アーキテクチャ）バス、ＭＣＡ（マイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（拡張ＩＳＡ）バス、ＶＥＳＡ（ビデオ電子規格協会）ローカルバス、および（メザニンバスとしても知られる）ＰＣＩ（周辺コンポーネント相互接続）バスが含まれるが、これらの限定されるものではない。
【００１７】
コンピュータ１１０は一般に、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセス可能な任意の利用可能媒体とすることができ、揮発性および不揮発性媒体、着脱可能および着脱不能媒体が含まれる。例えば、コンピュータ可読媒体として、コンピュータ記憶媒体と通信媒体を挙げることができるが、これらに限定されるものではない。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータといった情報を記憶するための任意の方法または技法で実施される揮発性および不揮発性媒体、着脱可能および着脱不能媒体が含まれる。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくはその他のメモリ技術、ＣＤＲＯＭ、ＤＶＤ（デジタル多用途ディスク）、もしくはその他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶、もしくはその他の磁気記憶装置、または所望の情報を記憶するのに使用でき、コンピュータ１１０によってアクセスできる、その他の任意の媒体が含まれるが、これらに限定されるものではない。通信媒体は一般に、搬送波またはその他の移送機構などの変調データ信号中に、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを表すものであり、任意の情報送達媒体を含む。「変調データ信号」という語は、信号中に情報を符号化するための方式で設定または変更された１つまたは複数の特性をもつ信号を意味する。例えば、通信媒体には、有線ネットワークまたは直接線接続などの有線媒体、および音響、ＲＦ、赤外線、およびその他の無線媒体などの無線媒体が含まれるが、これらに限定されるものではない。上記の媒体のどのような組み合わせも、コンピュータ可読媒体の範囲に含まれるものとする。
【００１８】
システムメモリ１３０は、ＲＯＭ（読み取り専用メモリ）１３１およびＲＡＭ（ランダムアクセスメモリ）１３２などの、揮発性および／または不揮発性メモリの形態をとるコンピュータ記憶媒体を含む。基本入出力システム（ＢＩＯＳ）１３３は、起動中などにコンピュータ１１０内の要素間の情報伝送を助ける基本ルーチンを含み、一般にＲＯＭ１３１に保存される。ＲＡＭ１３２は一般に、プロセッシングユニット１２０が直ちにアクセス可能であり、かつ／または現在それに基づいて動作しているデータおよび／またはプログラムモジュールを含む。例えば、図１には、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７が示されているが、これらに限定されるものではない。
【００１９】
コンピュータ１１０はまた、その他の着脱可能／着脱不能、揮発性／不揮発性コンピュータ記憶媒体も含む。図１には、着脱不能な不揮発性の磁気媒体に対して読み書きを行うハードディスクドライブ１４１、着脱可能な不揮発性の磁気ディスク１５２に対して読み書きを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＷ、ＤＶＤ−ＲＷ、またはその他の光媒体など着脱可能な不揮発性の光ディスク１５６に対して読み書きを行う光ディスクドライブ１５５が、例としてのみ示されている。例示的な動作環境で使用可能なその他の着脱可能／着脱不能、揮発性／不揮発性コンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、およびソリッドステートＲＯＭなどが含まれるが、これらに限定されるものではない。ハードディスクドライブ１４１は一般に、インタフェース１４０などの着脱不能メモリインタフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は一般に、インタフェース１５０などの着脱可能メモリインタフェースによってシステムバス１２１に接続される。
【００２０】
上で説明し、図１に示すドライブおよびそれに関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの記憶保持をコンピュータ１１０に提供する。図１には、例えば、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するハードディスクドライブ１４１が示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであってもよく、異なっていてもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７には、少なくともそれらが異なるコピーであることを示すため、図１では異なる番号が振られている。ユーザは、キーボード１６２、およびマウス、トラックボール、またはタッチパッドといったポインティングデバイス１６１などの入力装置を介して、コンピュータ１１０にコマンドおよび情報を入力することができる。その他の入力装置（図示せず）としては、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、またはスキャナなどを挙げることができる。上記およびその他の入力装置は、システムバス１２１に結合されたユーザ入力インタフェース１６０を介して、しばしばプロセッシングユニット１２０に接続されるが、パラレルポート、ゲームポート、またはＵＳＢ（ユニバーサルシリアルバス）など、その他のインタフェースおよびバス構造によって接続することもできる。グラフィックスインタフェース１８２も、システムバス１２１に接続することができる。１つまたは複数のグラフィックスプロセッシングユニット（ＧＰＵ）１８４が、グラフィックスインタフェース１８２と通信を行うことができる。モニタ１９１またはその他のタイプのディスプレイ装置も、ビデオインタフェース１９０などのインタフェースを介して、システムバス１２１に接続され、ビデオインタフェースは、ビデオメモリ１８６と通信を行うことができる。モニタ１９１に加えて、コンピュータは、出力周辺インタフェース１９５を介して接続できるスピーカ１９７やプリンタ１９６などのその他の出力周辺装置も含むことができる。
【００２１】
コンピュータ１１０は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理コネクションを使用して、ネットワークまたは分散環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、またはその他の共通ネットワークノードとすることができ、コンピュータ１１０に関連して上で説明した多くの要素またはすべての要素を含むが、図１には、メモリ記憶装置１８１だけを示してある。図１に示す論理コネクションは、ＬＡＮ（ローカルエリアネットワーク）１７１およびＷＡＮ（ワイドエリアネットワーク）１７３を含むが、その他のネットワーク／バスも含むことができる。そのようなネットワーク環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００２２】
ＬＡＮネットワーク環境で使用する場合、コンピュータ１１０は、ネットワークインタフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境で使用する場合、コンピュータ１１０は一般に、インターネットなどのＷＡＮ１７３を介して通信を確立するためのモデム１７２またはその他の手段を含む。モデム１７２は、内蔵とも外付けともすることができ、ユーザ入力インタフェース１６０またはその他の適切な機構を介して、システムバス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関して示したプログラムモジュールまたはその部分は、リモートメモリ記憶装置に保存することができる。例えば、図１には、メモリ装置１８１に存在するリモートアプリケーションプログラム１８５が示されているが、これに限定されるものではない。図示のネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立するその他の手段も使用できることは理解されよう。
【００２３】
仮想マシン
図２は、コンピュータシステムにおける仮想化環境のためのハードウェアおよびソフトウェア構成の論理階層化を表した図である。この図では、仮想化プログラム２１０は、物理ハードウェア構成２１２上で直接的または間接的に動作する。仮想化プログラム２１０は、ホストオペレーティングシステムと一緒に動作する仮想マシンモニタ（virtual machine monitor）、または仮想化を実行するハイパーバイザ（hypervisor）コンポーネントを有するホストオペレーティングシステムとすることができる。仮想化プログラム２１０は、ゲストハードウェア構成２０８（このコンポーネントがパーティションまたは「仮想マシン」であることを図示するために破線で示されている）、すなわち、実際には存在せず、代わりに仮想化プログラム２１０によって仮想化されるハードウェアを仮想化する。ゲストオペレーティングシステム２０６は、ゲストハードウェア構成２０８上で実行され、ソフトウェアアプリケーション２０４は、ゲストオペレーティングシステム２０６上で動作する。図２の仮想化動作環境では、ソフトウェアアプリケーション２０４は、ホストオペレーティングシステムおよびハードウェア構成２１２と一般に互換性のないオペレーティングシステム上で動作するように設計されていても、コンピュータシステム２０２で動作することができる。
【００２４】
図３Ａには、物理コンピュータハードウェア３０２の上で直接に動作するホストオペレーティングシステム（ホストＯＳ）ソフトウェア層３０４を含む、仮想化コンピューティングシステムが示されており、ホストＯＳ３０４は、オペレーティングシステム３１２および３１４によってそれぞれ使用されるインタフェースを、パーティションＡ３０８およびパーティションＢ３１０に提示することによって、物理コンピュータハードウェア３０２の資源へのアクセスを可能にする。これによって、ホストＯＳ３０４は、その上で動作するオペレーティングシステム層３１２および３１４に気づかれることなく、動作することができる。やはり、仮想化を実行するのに、ホストＯＳ３０４は、ネイティブな仮想化機能を有する特別に設計されたオペレーティングシステムとすることができ、または代わりに、仮想化を実行する組み込みハイパーバイザコンポーネント（図示せず）を有する標準オペレーティングシステムとすることができる。
【００２５】
再び図３Ａを参照すると、ホストＯＳ３０４の上に、例えば、仮想化Ｉｎｔｅｌ３８６プロセッサとすることができるパーティションＡ３０８と、例えば、Ｍｏｔｏｒｏｌａ６８０Ｘ０ファミリのプロセッサの１つの仮想化バージョンとすることができるパーティションＢ３１０の、２つのパーティションが存在する。各パーティション３０８および３１０の中に、それぞれゲストオペレーティングシステム（ゲストＯＳ）Ａ３１２およびＢ３１４が存在する。ゲストＯＳ  Ａ３１２上では、アプリケーションＡ１  ３１６とアプリケーションＡ２  ３１８の２つのアプリケーションが動作し、ゲストＯＳ  Ｂ３１４上では、アプリケーションＢ１  ３２０が動作する。
【００２６】
図３Ａに関して、パーティションＡ３０８およびパーティションＢ３１０（破線で示されている）が、ソフトウェア構造としてのみ存在する仮想化コンピュータハードウェア表現であることに留意することが重要である。それらは、パーティションＡ３０８およびパーティションＢ３１０を、それぞれゲストＯＳ  Ａ３１２およびゲストＯＳ  Ｂ３１４に提示するばかりでなく、ゲストＯＳ  Ａ３１２およびゲストＯＳ  Ｂ３１４が間接的に実物理コンピュータハードウェア３０２と対話するために必要なすべてのソフトウェア工程を実行しもする、専用の仮想化ソフトウェアを実行することによって可能になる。
【００２７】
図３Ｂには、ホストオペレーティングシステム３０４”と一緒に動作する仮想マシンモニタ（ＶＭＭ）３０４’によって仮想化が実行される代替の仮想化コンピューティングシステムが示されている。ある場合には、ＶＭＭ３０４’は、ホストオペレーティングシステム３０４”の上で動作し、ホストオペレーティングシステム３０４”を介してだけコンピュータハードウェア３０２と対話するアプリケーションとすることができる。別の場合には、図３Ｂに示すように、ＶＭＭ３０４’は、あるレベルでは、ホストオペレーティングシステム３０４”を介してコンピュータハードウェア３０２と間接に対話する部分的に独立なソフトウェアシステムを代わりに含むことができるが、別のレベルでは、ＶＭＭ３０４’は、（ホストオペレーティングシステムがコンピュータハードウェアと直接に対話するやり方と同じように）コンピュータハードウェア３０２と直接に対話する。また別の場合には、ＶＭＭ３０４’は、すべてのレベルで、ホストオペレーティングシステム３０４”を利用することなく、（ホストオペレーティングシステムがコンピュータハードウェアと直接に対話するやり方と同じように）コンピュータハードウェア３０２と直接に対話する、完全に独立なソフトウェアシステムを含むことができる（ただし、コンピュータハードウェア３０２の利用調整や、衝突回避などのためには、依然としてホストオペレーティングシステム３０４”と対話する）。
【００２８】
上述のパーティションを実装するためのこれらの変形はすべて、単に例示的な実装にすぎず、本明細書の内容はどのようなものであれ、本発明をどれか特定の仮想化態様に限定するものと解釈すべきではない。
【００２９】
パーティションバス概要：装置共用およびデータ転送
本発明の一態様では、ハードウェアバスのソフトウェアモデルが作成される。この「バス」が「パーティションバス」である。パーティションバスは、パーティション間データ転送機構の形式化を可能にする。また、パーティションバスを使用することによって、装置共用およびＯＳ間統合を可能にするサービスを構築することが、はるかに容易になる。
【００３０】
パーティションバスは、複数のパーティションが動作するシステムにおいて、パーティション間またはパーティション内で使用される情報（リクエストおよび／またはデータ）転送機構である。しかし、パーティションバスは、仮想マシン環境で利用可能な単なる情報転送機構であるよう意図されてはいない。そのようなものとして、パーティションバスは、クライアントパーティション／サービスパーティション関係において、クライアントパーティションの個々の可能な目的をすべて満たす必要はない。例えば、パーティションバスは、ハードウェアアブストラクションレイヤ（ＨＡＬ）が初期化用にそれを使用できるほど早く、ＮＴカーネルモード環境にロードされる必要はない。
【００３１】
本発明の一態様では、パーティションバスは、それ自体を設定するため、パーティション間に通信チャネルを確立するため、およびパーティションに割り込みを掛けるために、ハイパーバイザプロセス間通信（ＩＰＣ）に依存する。
【００３２】
図４には、パーティション間で装置共用および情報転送を可能にするパーティションバスの概括的な概念が示されている。３つのパーティション、すなわち、サービスパーティション４０２と、クライアントパーティションＡ４０４およびクライアントパーティションＢ４０６の２つのクライアントパーティションとが示されている。これらのパーティションは、ハイパーバイザ４１０によって維持される。これらのパーティションの各々は、何らかのＯＳを、すなわち、他のパーティションと同じＯＳか、または異なるＯＳを有することができる。したがって、サービスパーティション４０２は、Ｗｉｎｄｏｗｓ（登録商標）ＸＰを実行中であってもよく、クライアントパーティションＡ４０４は、Ｗｉｎｄｏｗｓ（登録商標）２０００を実行中であってもよく、クライアントパーティションＢ４０６は、Ｗｉｎｄｏｗｓ（登録商標）９８を実行中であってもよい。
【００３３】
さらに、これらのパーティションの各々は、何らかの装置を含む。詳細には、サービスパーティション４０２は、物理装置４２４用のデバイスドライバ４１８を含む。デバイスドライバ４１８は、合成装置が物理装置４２４と通信を行えるようにする仮想化サービスプロバイダ（ＶＳＰ）４１７と通信する。したがって、クライアントパーティションＡ４０４の合成装置４２０と、クライアントパーティションＢ４０６の合成装置４２２は、パーティションバス４０８を介して、物理装置４２４のサービスを利用することができる。
【００３４】
パーティションバス４０８は、クライアントパーティションＡ４０４およびクライアントパーティションＢ４０６が、それぞれ合成装置４２０および４２２を使用して、物理装置４２４にアクセスするための手段を提供する。言い換えると、パーティションバス４０８は、物理装置４２４などの装置の所有権を、Ｗｉｎｄｏｗｓ（登録商標）ＸＰ４１２などの単一のＯＳに割り当てるための手段と、そのような装置のサービスを、Ｗｉｎｄｏｗｓ（登録商標）２０００  ４１４やＷｉｎｄｏｗｓ（登録商標）９８  ４１６などの他の実行中ＯＳと共用するための手段とを提供する。
【００３５】
さらに、パーティションバス４０８は、ＯＳがパーティション間でデータを移送することも可能にし、その結果、ハイパーバイザ４１０による従来メカニズムをデータ移送トランザクションで利用して、高いコンピューティングコストを費やすことなく、例えば、サービスパーティション４０２から第２のクライアントパーティションＢ４０６に、データを容易に移送することができる。
【００３６】
パーティションバス：装置共用
本発明の別の態様では、図５Ａには、パーティション内のローカルプロキシ合成装置によって表されるリモートサービスが示されている。例えばリモートパーティション５０８内にリモートオペレーティングシステム５１０と一緒に保存されたリモートサービス５１２が、パーティションバス５１４を介して提供されると、合成装置５０６が、クライアントパーティションのオペレーティングシステム５０４に追加される。リモートサービス５１２などのサービスインスタンスと装置５０６などの合成装置の間には、１対１の対応が存在する。合成装置の各々は、典型的なプロトコルバス上の典型的な装置がそうであるように、データを送信または受信するために使用することができる。
【００３７】
図５Ｂには、パーティションバス上で使用可能な合成装置に対応し得る装置およびサービスのタイプが示されている。具体的に図５Ｂを参照すると、合成装置５１６が提示されている。この合成装置５１６は、ストレージ、ネットワーキング、入力（キーボードやマウス）、サウンド、ビデオ、スマートカードなどの多種多様な装置５１８に対応し得る。合成装置５１６はまた、時間同期、ドラッグアンドドロップ、フォルダ共用、カットアンドペースト、リモート実行、リモートアプリケーション起動、プロセス間通信などの多種多様なサービス５１８にも対応し得る。どのような種類の装置およびサービスが合成装置５１６によってモデル化できるかについて、実際上、制限はない。
【００３８】
パーティションバス：データ転送
パーティションバス６０２は、一パーティションから別のパーティションに転送されるデータ量が、少量か、中量か、それとも大量かに応じて、少なくとも３つの異なる方法で、リクエスト（またはコマンド）およびデータの転送を可能にする。したがって、図６では、データ送信の３つのモデル、すなわち、リングバッファモデル６０４、転送ページモデル６０６、およびアドレス空間操作モデル６０８が示されている。
【００３９】
一般に、リングバッファモデル６０４は、リングバッファ６１０を使用して、一パーティションから別のパーティションにリクエストおよびデータを送信する。リングバッファは、バッファが満杯になった場合、古いデータを上書きする形で、さらなる情報を再びバッファの先頭から格納することで「リング」を形成する、単なる固定サイズのバッファである。典型的な仮想化システムでは、リングバッファは、２以上のＯＳから同時に利用可能とされる。
【００４０】
転送ページモデル６０６は、リングバッファ６１２を使用して、リクエストを送信し、転送ページ６１４を使用して、データを送信する（２つの転送ページ、すなわち、ページＡおよびＢが示されている）。転送ページは、メモリ内にアロケートされたページであり、情報は、一パーティションからアロケートページにコピーされ、さらにアロケートページから別のパーティションにコピーされることによって転送される。転送ページモデル６０６は、構造、プロトコル、または関連する順序をもたない点で、リングバッファとは異なる。したがって、転送ページモデルは、ＤＭＡ操作のターゲットとしてより適しており、また転送ページ内でデータを操作中にロックを掛けずにおくためにもより適している。
【００４１】
最後に、アドレス空間操作モデル６０８について説明する。他の２つのモデルと同様、別のパーティションによって読まれる、一パーティションからのリクエストを保存するのに、リングバッファ６１６が使用される。また、３つのメモリマップ、すなわち、サービスパーティションメモリマップ６１８、クライアントパーティションメモリマップ６２２、および非仮想化システムメモリマップ６２０が示されている。クライアントパーティションおよびサービスパーティションは、（転送ページモデルのシナリオとは異なり）データをコピーする必要がなく、代わりに両パーティションによってデータにアクセスし、読むことができるように、メモリマッピング６１８および６２２の一部を変更して、非仮想化システムメモリマッピング６２０に対応づける。これは、クライアントパーティションおよびサービスパーティションが、それぞれのメモリマップを変更して、物理メモリページの一部を共用することを意味する。トレードオフは、クライアントパーティションのメモリマップ６２２およびサービスパーティションのメモリマップ６１８は、非仮想化システムメモリマッピング６２０に対応づけるために最初に変更しても、与えられたトランザクションが完了すれば、また元のマッピングに変更し直さなければならない点にある。つまり、パーティション間でデータを転送するのにコピーを使用する転送ページモデルとは対照的に、アドレス空間操作モデルは、アドレスマップ変更を使用する。
【００４２】
少量、中量、または大量のデータという概念は、相対的な概念であり、ある程度は、コンピュータシステム資源によって定められることに留意することが重要である。システム資源の可用性に応じて、適切な転送モデルを利用することができる。したがって、経験に基づけば、リングバッファモデルは、少量のデータを転送すべき場合に最も有効であり、転送ページモデルは、中量のデータを転送すべき場合に最も有効であり、アドレス空間操作モデルは、大量のデータを転送すべき場合に最も有効である。
【００４３】
したがって、本発明の一態様では、リングバッファモデルは、２つのパーティション間でリクエストおよびデータ（本明細書では、両方を併せて、または単独で「情報」と呼ぶ）の両方を受け渡すために取っておいたメモリ領域を使用する。このモデルでは、リングバッファに挿入された情報パケットは、１つのパケットが別のパケットの後に続くという意味において順序づけられる。また、前のパケットが挿入されないうちは、後続パケットを挿入することはできないので、リングバッファへのパケット挿入は一般に、相対的に素早い操作である。したがって、リングバッファは、立て続けに到着するデータに最も適しており、後続データを挿入する際に大きな待ち時間を生じさせない。
【００４４】
図７には、リングバッファモデルが示されている。ハイパーバイザ（図示せず）が、クライアントパーティション７０２とサービスパーティション７０８の２つのパーティションを維持する。サービスパーティション７０８は、何らかのサービスＯＳ７１０を実行することができ、サービスＯＳは、データの形態の情報をクライアントパーティション７０２およびそのＯＳ７０４に送信する。データは、連続的に並べられ、リングバッファ７０６に収められる。同様に、リクエストの形態の情報を、クライアントパーティション７０２からリングバッファ７０６を介してサービスパーティション７０８に送信し、何らかのサービスの実行を要求することができる。非仮想化システムメモリ７０５内のリングバッファ７０６は、７０６Ａおよび７０６Ｂとして、それぞれパーティション７０２および７０８にマッピングされ、２つのパーティション７０２および７０８の間のリクエストおよびデータの、このスワッピングを可能にする。つまり、図７には、サービスパーティション７０８とクライアントパーティション７０２の間でリングバッファ７０６を介して送信された、２つのリクエストパケットと、２つのデータパケットが示されている。
【００４５】
本発明の別の態様では、転送ページモデルが利用される。このモデルでは、プールされたページは、転送ライブラリによって管理される。興味深いことに、サービスパーティションまたはクライアントパーティションのどちらかが、いつでも転送ページの組をアロケートすることができ、それをすでに使用されている既存の組に追加することができる。転送ページの組をアロケートしたパーティションは、その組に属するページのアロケーションおよびデアロケーションを含む、その組の管理権を所有する。
【００４６】
転送ページに関連する唯一のコストは、それらがアロケートされ、クライアントおよびサービスパーティションの両方にマッピングされるときに生じる。パーティションの物理アドレスマップも変更されるが、これは１回きりの操作であり、多くの転送によってコストを償却することができる。さらに、転送ページは両方のパーティションに永続的にマッピングされるので、機密をそこに保存することはできないが、これはまた、転送ページの内容を消去する必要がないことを意味する。
【００４７】
上述したように、図８に示される転送ページモデルは、転送ページが構造、プロトコル、または関連する順序を必要としない点で、図７に示されるリングバッファモデルと異なっており、クライアントは、ＤＭＡ操作のターゲットとして転送ページをより自由に使用することができ、また転送ページ内でデータを操作中にロックを掛けずにおくことができる。
【００４８】
図８には、転送ページモデルの例示的な実装が示されている。サービスパーティション８０２およびクライアントパーティション８０４が示されており、これら２つのパーティションは、ハイパーバイザ８０６によって維持される。図８では、クライアントパーティション８０４のユーザモードプロセスが、サービスパーティション８０２の仮想ディスクサービス８０８によって処理されるファイルからデータを要求する。サービスパーティション８０２からデータを取得するリクエストは、ハードウェアダイレクトメモリアクセス（ＤＭＡ）トランザクションとしてモデル化される。
【００４９】
例えば、アプリケーション８１２が、最初に７ページ分のデータを求めるリクエストを作成し、そのデータが、転送ページ８１１でたまたま利用可能である容量よりも多いとする。したがって、リクエストは、２つのサブリクエストに分割しなければならない。第１のリクエストが、仮想ディスクドライバ８１４に受け渡される。いくつかの実例では、これはフィルタとすることが、言い換えると、十分な知識をもった（fully-enlightened）ディスクドライバとすることができる（すなわち、ディスクドライバは、合成装置とだけ通信を行い、そこには仮想機能の痕跡を留めていない。広い意味で、「知識をもった」という語は、仮想化環境内で動作していることを知っているＯＳ環境を指している）。
【００５０】
仮想ディスクドライバ８１４は、その物理デバイスオブジェクト（ＰＤＯ）から取得した関数を使用して、標準ＤＭＡリクエスト８１８を作成する。その後、仮想ディスクドライバインタフェースインスタンス８１６は、プールされた転送ページの中で現在利用可能なすべてのページをアロケートする。この例では、アロケートされたページは、８１１Ａ〜８１１Ｅの５ページであり、転送ページ８１１内に縦線を用いて示されている。
【００５１】
次に、リクエストが、サービスパーティション８０２内のサーバに送信され、仮想ディスクサービス８０８からこれらのページが取得される。サーバは、要求ページに書き込むと、すなわち、要求データをページ８１１Ａ〜８１１Ｅにコピーすると、メッセージをクライアントパーティション８０４に返信する。その後、データは、転送ページからアプリケーション８１２によって維持されるバッファにコピーされる。コピー操作が終了すると、転送ページ８１１Ａ〜８１１Ｅは解放される。
【００５２】
第２のリクエストのために、さらに２つのページ８１０Ｉおよび８１０Ｊが、プールの中からアロケートされる（その他の図示のページ８１０Ｆ〜８１０Ｈは、図示されていない他のリクエストによって予約されている）。したがって、新しいリクエストが、２ページ分のデータのためにサービスパーティション８０２に送信される。先の場合のように、サービスパーティション８０２のサーバは、転送ページ８１１Ｉ〜８１１Ｊにデータを書き込み、その操作に関するメッセージをクライアント８０４に返信する。その後、データは、アプリケーション８１２のバッファに再びコピーされ、その結果、最初に２つのフェーズに分割されたリクエストが完了する。
【００５３】
転送ページ８１１は、データを転送するために使用される。リクエストは、リングバッファ８１０を使用して転送される。本発明のこの態様における、リクエストがパケットとして順次転送されるという特質は、図７で説明した、リクエストおよびデータがリングバッファだけを使用して転送される場合の特質と同様である。
【００５４】
本発明の別の態様では、上で図７および図８を用いてそれぞれ説明したリングバッファおよび転送ページモデルの下で実行される、高コストのメモリコピーを回避するため、アドレス空間操作が使用される。ある種のトランザクションは、クライアントの物理アドレス空間内に任意に配置されるバッファを利用し、非常に大量のデータを転送する必要がある。このような状況では、固定ロケーションにある転送ページから任意に配置されるバッファへのデータのコピーを余儀なくさせることになるので、転送ページは使用されない。データが最終的に存在している必要があるメモリにデータを直接に配置できるよう保証するには、サービスパーティションが少なくとも一時的にクライアントパーティションからのページを含むように、サービスパーティションの物理アドレスマップを変更しなければならない。その後、データは、ソフトウェアまたはハードウェアによって、それらのページに直接書き込むことができ、またはそれらのページから直接読み出すことができる。トランザクションが完了した後、アドレスマップを元通りに変更し、サーバの物理アドレスマップからクライアントページを削除する。この１組の操作は、比較的コストが高いので、少量のデータの転送には使用されず、そのような場合は、データを転送バッファに／からコピーする方が、アドレスマップを変更するより効率的である。
【００５５】
図９には、クライアントパーティション９０２およびサービスパーティション９０８が示されており、両パーティションは、ハイパーバイザ（図示せず）によって維持される。各パーティション９０２および９０８は、独自のＯＳ９０４および９１０をそれぞれ有する。これらのＯＳは、仮想アドレスをパーティションの物理アドレスにマッピングするメモリアドレスマップ９１４および９１６をそれぞれ維持する。これらのパーティション間で大量の情報（主としてデータ）を転送しなければならない場合、最も効率的なメカニズムは、関連するクライアントパーティションのメモリマッピング９１４を変更し、それらを非仮想化システムメモリマッピング９０７の一部に関連づけることを含む。例えば、図９では、クライアントパーティション９０２内の「Ａ」マッピングは、非仮想化システムメモリ９０５内の「３」マッピングに関連づけられる。同様に、メモリ内の１つの場所から別の場所にデータをコピーする必要なしに、クライアントパーティション９０２およびサービスパーティション９０８が、非仮想化システムメモリ９０５にアクセスできるように、サービスメモリマッピング９１６は、非仮想化システムメモリマッピング９０７に関連づけられる。つまり、サービスパーティション９０８内の「ｂ」マッピングは、非仮想化システムメモリ９０５内の「３」マッピングに関連づけられる。コピーを行わないことのトレードオフは、メモリマッピングをトランザクションの開始時に変更しなければならず、トランザクションの完了後に再び元通りに変更しなければならないことである。大量のデータを転送しなければならない場合、このトレードオフがよい結果をもたらす。
【００５６】
本発明の別の態様では、図１０には、コンテキストスイッチに関係するコストを生じさせることなく、パーティション間で情報を送信するためのメカニズムが示されている。ＣＰＵは、個々のパーティションで動作するＯＳと一緒になって、これらのパーティションを切り替えながら、各パーティションにタイムスライスを提供する。そのようなタイムシェアリングシステムでは、コンテキストスイッチの際に、１つのタスク（またはパーティション）から別のタスク（またはパーティション）への切り替えに関連するコストが生じる。
【００５７】
さらに、パーティション間での割り込み送信も、かなり高コストのコンテキストスイッチングを必要とする。例えば、サービスパーティションからサービスを受けられるように、クライアントパーティションが、サービスパーティションを「起動」したい場合に、そのような割り込みを送信しなければならないことがある。同様に、サービスパーティションは、クライアントパーティションによって指定されたタスクを完了したことを、クライアントパーティションに知らせたいことがある。
【００５８】
そのような高コストのコンテキストスイッチングを回避するため、図１０に示す、本発明のこの態様では、リングバッファをコマンドキューとして使用して、一パーティションは、別のパーティションのリングバッファにコマンドを入れ、そうすることで、（以下で説明する）アンダーレート状態（under rate condition）を除き、割り込み送信を回避する。
【００５９】
したがって、クライアントパーティション１００２およびサービスパーティション１０１０が示されている。各パーティションは、Ｗｉｎｄｏｗｓ（登録商標）９８またはＷｉｎｄｏｗｓ（登録商標）ＸＰであるオペレーティングシステムを実行し、これらのパーティションは、ハイパーバイザ１０１６によって維持される。クライアントパーティション１００２が、サービスパーティション１０１０が所有でき、サービスパーティション１０１０上の合成装置に対応可能な、サービスパーティション１０１０からのサービス、例えば、ディスクコントローラサービスを望む場合、このサービスを受けるための１つの方法は、クライアントパーティション１００２が情報（一般にコマンド／リクエスト）をリングバッファ１００６に書き込むことである。その後、サービスパーティション１０１０は、これらのコマンドを読み取り、リクエストに応じることができる。リングバッファ１００６が両パーティション１００２および１０１０にマッピングされる（１００６Ａおよび１００６Ｂ）ことによって、これらのパーティションは、コンテキストスイッチングにコストをかけることなく、通信することができる。
【００６０】
サービスパーティション１０１０は、情報（一般にリクエストに対するレスポンスおよび／またはデータ）をリングバッファ１００６に書き込んで、クライアントパーティション１００２にリクエストが完了したことを知らせることができる。このシナリオでは、リングバッファ１００６が、パーティションバス１００８を実現するために使用されるが、上で説明した他のモデルを適用することもできる。
【００６１】
このリングバッファ実装を利用するパーティションは、リングバッファからコマンドを読み取るために割り込みをかける必要がなく、そのため、割り込み送信（および関連するコンテキストスイッチングすべて）にかかるコストを回避することができる。しかし、例えば、サービスパーティションが、クライアントパーティションから送信されたコマンドを実行しようとしない場合、割り込みは、これらのコマンドの実行を開始させるための適切な方法である。
【００６２】
要約すると、この場合のリングバッファモデルは、コンテキストスイッチングにかかるコストを回避するが、（１）空だった発信リングバッファが、その後、空でなくなった場合と、（２）満杯だった着信リングバッファが、その後、満杯でなくなった場合の２つの状況下で、割り込みを使用することができ、割り込みは、一パーティションから他のパーティションに送信しなければならない（クライアントパーティション１００２の観点からは、リングバッファ１００６が発信リングバッファであり、リングバッファ１００６が着信リングバッファである。サービスパーティション１０１０の観点からは、これと反対になる）。
【００６３】
例えば、第１のケースでは、空だったリングバッファ１０１４が、その後、空でなくなった場合、クライアントパーティション１００２は、リングバッファ１０１４が情報（おそらくコマンド／リクエスト）で満たされたことを、サービスパーティション１０１０に知らせなければならない。第２のケースでは、満杯だったリングバッファ１００６が、その後、満杯でなくなった場合、クライアントパーティション１００２は、リングバッファ１００６がもはや満杯でないことを、割り込みによって、サービスパーティション１０１０に知らせることができる。
【００６４】
本発明のこの態様は、２以上のプロセッサを備えるマシンで特によい結果をもたらす。クライアントパーティション１００２とサービスパーティション１０１０を両方同時に実行することができ、コンテキストスイッチを発生させることなく、一方が他方に情報を送信する。
【００６５】
本発明のこの態様の変形は、割り込みを受信するパーティションが非常に短い時間のうちにたまたま実行を再開した場合、割り込みを送信する前に遅延を導入することによって、割り込みを不必要にする。もちろん、遅延は待ち時間を増やすが、待ち時間のコストは、割り込みのコストよりも小さいであろう。
【００６６】
本発明の別の態様では、パーティションバスは、サービスの異なるバージョンおよびインスタンスが並んで存在することを可能にする。図１１では、サービス１１０２が提供される。各サービスのＩＤは、２つの１２８ビットのグローバルユニークＩＤ（ＧＵＩＤ）から構成される。これらのＩＤの第１のものは、サービスインスタンスを一意に識別する。例えば、サービスインスタンスＡ１１０４は、仮想ディスクであり、この仮想ディスクは、それに一意のＩＤ１１０８を割り当て（例えば、ｃ８０ｃｃｂ８ａ．．．）、仮想ディスクの他のインスタンス（図示せず）は、異なる一意のＩＤを受け取る。
【００６７】
サービスインスタンスＩＤに加えて、やはりＧＵＩＤによって表されるサービスバージョンＩＤも存在する。このＧＵＩＤは、サーバによって実施されるプロトコルを識別する（プロトコルは、サーバによって処理されるすべてのコマンドおよび操作の総体とすることができる）。したがって、図１１では、サービス１１０２のサービスバージョンＩＤ１１０６は、ｂ７３６０６ｄｃ．．．である。これら２つのＧＵＩＤは、パーティションバス上の合成装置のバスレベルのプラグアンドプレイＩＤを作成するのに使用される。クライアントパーティションで動作するＯＳのインスタンスは、これらのプラグアンドプレイＩＤに基づいて、どのドライバをロードすべきかを決定することができ、そのＯＳは、ドライバが個々のドライバファイルに分かれていても、複数のバージョンをもつサービスのためにドライバを維持することができる。さらに、サービスと同様に、異なる装置バージョンにＧＵＩＤを与えて、装置インスタンスおよび装置バージョンを確認することができる。
【００６８】
さらに、サービスパーティションが、ディスクなど、単一の資源についてのサービスの複数のインスタンスを同時に生成することは完全に可能であり、各サービスは、異なるプロトコルバージョンを実施する。クライアントパーティションには、同一仮想ディスクの２つのインスタンスが提供され、クライアントパーティションは、サポートするプロトコルバージョンに関連するドライバだけをロードするように選択する。
【００６９】
本発明のある態様では、パーティションの識別情報および信頼性に基づいて、ポリシー決定を行う機能が提示される。パーティションバスチャネルは、パーティションによっては歓迎されないこともある。具体的には、特定の保護パーティションに到達し得るチャネルオファーを許可するのは適切でないかもしれない。このポリシーの理由には、（１）パーティションが保護パーティションのブートディスクサーバを装えるようにしたくない、（２）信頼性のないＩ／Ｏパスを許可したくない、（３）パーティションが別のパーティションの資源をどれでも使用できるようにしたくないなど、様々なものがあるが、チャネルオファーが行われた場合には、このようなことが起こり得る。
【００７０】
そのようなポリシー決定を支援するため、本発明の本態様は、パーティションバスチャネルポリシーエージェントについて教示する。チャネルポリシーエージェントは、チャネルオファーを調停する。図１２には、あるバージョンのＷｉｎｄｏｗｓ（登録商標）を実行するパーティションのインスタンス内に実装された、チャネルポリシーエージェントが示されている。おそらく、そのようなエージェントは、いくつかの特定のＩ／Ｏチャネルが当該パーティション用に許可されており、その他は許可されていないことを規定した、パーティションマニフェスト（partition manifest）のようなものにアクセスしなければならない。
【００７１】
本発明のこの態様の状態図が、図１２に示されている。図１２には、ハイパーバイザ１２２６によって維持される３つのパーティション、すなわち、（１）サービスパーティション１２０２、（２）セキュリティフィルタパーティション１２０４、および（３）保護ゲストパーティション１２０６が示されている。サービスパーティション１２０２において、第１に、チャネルサーバ１２０８が、チャネル管理ライブラリ１２１０にチャネルオファーと一緒にリクエストを送信する。第２に、そのオファーが、オファーキャッシュ１２１２に格納される。次にオファーキャッシュ１２１２が、セキュリティフィルタパーティション１２０４（または保護パーティションのためにポリシーエージェントがたまたま存在している場所）のオファーキャッシュ１２１８にオファーを転送する。
【００７２】
第３に、セキュリティフィルタパーティション１２０４のチャネル管理ライブラリ１２１６が、妥当性を検査するため、オファーをチャネルポリシーエージェント１２１４に送信する。第４に、チャネルポリシーエージェント１２１４は、オファーを終了させたか、または転送したかをライブラリ１２１６に通知するレスポンスをチャネル管理ライブラリ１２１６に送信する。第５に、オファーは、転送される場合、信頼性のあるゲストパーティション１２０６のオファーキャッシュ１２２４に送信される。
【００７３】
第６に、オファーは、オファーキャッシュ１２２４に到着すると、列挙チャネル（enumeration channel）をトリガし、信頼性のあるゲストパーティション１２０６のソフトウェアは、そのチャネルをオープンすることを決定する。第７に、チャネルクライアント１２２０が、チャネルサーバ１２０８にメッセージを直接返信し、チャネルをオープンする。つまり、このようにして、セキュリティフィルタパーティションに配置されたポリシーエージェントによって、チャネルオファーを調停することができる。
【００７４】
パーティションバス：付加的態様
本発明の別の態様では、エミュレート装置モジュール（ＥＤＭ）が、並列に、またパーティションバスなどの知識をもった（仮想マシンに気づいている）データ転送機構と連携して動作する。ＥＤＭは、Ｉ／Ｏリクエストに応答するため、物理ハードウェア装置と同じ方式で記述される。あるゲストオペレーティングシステムが、問題の物理ハードウェア装置をサポートするように記述されている（すなわち、対応するドライバを含む）場合、そのオペレーティングシステムは、ＥＤＭが正しく記述されていると仮定すれば、変更せずに正しく動作する。すなわち、ＥＤＭは、従来のオペレーティングシステムとの優れた互換性を備えているが、一般に、高い仮想化オーバーヘッドを導入する。対照的に、仮想化サービスプロバイダ（ＶＳＰ）は、はるかに優れた性能を実現するが、クライアントＯＳ用に記述された新しいドライバ（および潜在的に他の変更）を必要とする。
【００７５】
仮想マシンシステムの一実例では、ＶＳＰおよびＥＤＭの両方が、少なくともある時間、同一サービスパーティション内に実装されるが、クライアントパーティション内で利用可能なエミュレートまたは仮想装置とは対照的に、ＶＳＰは、パーティションバスの上に載ったサービスであって、クライアントパーティション内の合成装置にバックエンドサポートを提供する。ＶＳＰは、合成装置の通信相手となる。
【００７６】
具体的には、図１３には、パーティション内で動作するＯＳ１３０８および１３０６をそれぞれ含む、クライアントパーティション１３０４およびサービスパーティション１３０２が示されている。パーティションバス１３１２が、２つのパーティション１３０２および１３０４の間の通信手段を提供する。また、これらのパーティション１３０２および１３０４は共に、ハイパーバイザ１３２０によって維持される。ＥＤＭ１３１６は、装置エミュレーション１３１５がクライアントパーティション１３０４には実装置に見えるように、ハイパーバイザ１３２０と通信を行う。ＥＤＭ１３１６はまた、ＶＳＰ１３１４に依存して、クライアントパーティションと共用する実際の物理装置１３２２と（デバイスドライバ１３１８を介して）通信を行う。ＶＳＰ１３１４はまた、この装置１３２２を合成装置を介してクライアントパーティション１３０４に提示する。
【００７７】
本発明のさらに別の態様では、パーティションバスは、３つのライブラリから、またはより一般的には、３つのコンポーネントから構築される。したがって、図１４Ａ〜図１４Ｃには、異なるモードで使用されているときの、パーティションバスのコンポーネントが示されている。３つのコンポーネントとは、
・リングバッファ管理
・チャネル管理
・バスドライバ
である。
【００７８】
異なる環境は、パーティションバスの異なるコンポーネントを利用する。例えば、図１４Ａでは、ユーザモードサービス１４３１は、チャネル管理を行うのにカーネルモードのコードに依存するので、リングバッファ管理１４３２のコンポーネントだけを取得する。このことは、図１４Ａでは、リングバッファ管理１４３２のコンポーネントを実線のボックスで表し、他の２つのコンポーネント、すなわち、チャネル管理１４３４およびバスドライバ１４３６を破線のボックスで表して、ユーザモード１４３１ではこれら２つのコンポーネントが存在しないことを示すことによって強調されている。
【００７９】
図１４Ｂでは、カーネルモード１４３３のサービスは、３つのコンポーネントをすべて、すなわち、リングバッファ管理１４３２、チャネル管理１４３４、およびバスドライバ１４３６を受け取る。
【００８０】
最後に、図１４Ｃでは、ローダ１４３５の環境は、リングバッファ管理１４３２およびチャネル管理１４３４は受け取るが、バスドライバ１４３６は受け取らない（破線で表されている）。要約すると、パーティションバスは、これら３つのコンポーネント、および他の副次的なコンポーネントから構成され、これらのコンポーネントは、パーティションバスが使用される環境に応じて、様々な組み合わせで現れる。
【００８１】
パーティションバスは、パーティション間でデータを転送する際にリングバッファを使用するために、リングバッファ管理１４３２を使用する。チャネル管理１４３４は、パーティション間でチャネル通信を確立するために使用される。最後に、バスドライバ１４３６は、通信チャネルが確立された後、パーティション間の入出力操作を制御する。したがって、あるパーティション内の合成装置は、他のパーティション内の実装置をハードウェアレベルで所有することができ、入出力操作は、バスドライバ１４３６によって管理されるので、そのような実装置は、他のパーティション内の他の合成装置によって使用することができる。
【００８２】
パーティションバス利用のすべてが物理装置に直接関係するわけではないことを上で言及した。したがって、本発明のさらに別の態様では、物理装置に対応しない多くの利用は、カーネルモードドライバとしての代わりに、ユーザモードコンポーネント（例えば、ＤＬＬ）で便利に実施される。パーティションバスは、ユーザモードでこれらのコンポーネントを完全に生成するために、十分なインフラストラクチャを提供し、アドレス空間管理、割り込み発行、および通常ではカーネルモードからだけアクセス可能な他のサービスを実行することを可能にする。
【００８３】
様々な図に示した好ましい態様に関して本発明を説明してきたが、本発明から逸脱することなく、本発明と同じ機能を実行するために、他の同様の態様が使用でき、または説明した態様に変更および追加が行えることを理解されたい。例えば、本発明のある態様では、パーティション間でデータを転送するための、また選択されたパーティションに装置の所有権を割り当てながら、その装置のサービスを他のパーティションと共用するためのメカニズムを提供するパーティションバスについて説明された。しかし、本発明のこの態様と等価な他の装置のことも、本明細書の教示は企図している。したがって、本発明は、どれか１つの態様に限定されるものではなく、特許請求の範囲に基づく広さおよび範囲において解釈されるべきものである。
【図面の簡単な説明】
【００８４】
【図１】本発明を実施できる適切なコンピューティング装置についての簡単な概括的説明を提供する図である。
【図２】コンピュータシステムにおける仮想化動作環境のためのハードウェアおよびソフトウェア構成の論理階層化を表したブロック図である。
【図３Ａ】ホストオペレーティングシステムによって（直接に、またはハイパーバイザを介して）仮想化が実行される仮想化コンピューティングシステムを表したブロック図である。
【図３Ｂ】ホストオペレーティングシステムと並んで動作する仮想マシンモニタによって仮想化が実行される代替の仮想化コンピューティングシステムを表したブロック図である。
【図４】パーティション間でデータ転送および装置共用を可能にするパーティションバスの概括的な態様を示した図である。
【図５Ａ】ローカルプロキシ合成装置によって表されるリモートサービスを示した図である。
【図５Ｂ】ストレージコントローラやドラッグアンドドロップサービスを含む、本発明の様々な態様で使用できる合成装置のタイプを示した図である。
【図６】リングバッファモデル、転送ページモデル、およびアドレス空間操作モデルを含む、パーティションバスによって使用される異なるタイプのデータ転送機構を示した図である。
【図７】パーティション間で少量のデータを送信するのに使用できるリングバッファモデルを示した図である。
【図８】パーティション間で中量のデータを送信するのに使用できる転送ページモデルを示した図である。
【図９】パーティション間で大量のデータを送信するのに使用できるアドレス空間操作モデルを示した図である。
【図１０】コンテキストスイッチに関係するコストを生じさせずにパーティション間でデータを送信するメカニズムを示した図である。
【図１１】インタフェースおよびプロトコル用のパーティションバスバージョン管理機構を示した図である。
【図１２】別のパーティションの識別情報および信頼性に基づいて一パーティションによって行われるポリシー決定を示した図である。
【図１３】エミュレート装置モジュールと仮想化サービスプロバイダの同時動作を示した図である。
【図１４Ａ】パーティションバスの特定の実施であるユーザモード態様を示した図である。
【図１４Ｂ】パーティションバスの特定の実施であるカーネルモード態様を示した図である。
【図１４Ｃ】パーティションバスの特定の実施であるローダ態様を示した図である。
【符号の説明】
【００８５】
１２０  プロセッシングユニット
１２１  システムバス
１３０  システムメモリ
１３１  ＲＯＭ
１３２  ＲＡＭ
１３３  ＢＩＯＳ
１３４，１４４  オペレーティングシステム
１３５，１４５  アプリケーションプログラム
１３６，１４６  その他のプログラムモジュール
１３７，１４７  プログラムデータ
１４０  着脱不能不揮発性メモリインタフェース
１５０  着脱可能不揮発性メモリインタフェース
１６０  ユーザ入力インタフェース
１６１  ポインティングデバイス
１６２  キーボード
１７０  ネットワークインタフェース
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  ワイドエリアネットワーク
１８０  リモートコンピュータ
１８２  グラフィックスインタフェース
１８４  ＧＰＵ
１８６  ビデオメモリ
１８５  リモートアプリケーションプログラム
１９０  ビデオインタフェース
１９１  モニタ
１９５  出力周辺インタフェース
１９６  プリンタ
１９７  スピーカ
３０８，３１０  パーティション
６０２，１００８  パーティションバス
６０４  リングバッファモデル
６０６  転送ページモデル
６０８  アドレス空間操作モデル
６１０，６１２，６１６，７０６，９０６  リングバッファ
６１４，８１１  転送ページ
６１８  サービスパーティションメモリマップ
６２０  非仮想化システムメモリマップ
６２２  クライアントパーティションメモリマップ
７０２，８０４，９０２，１００２  クライアントパーティション
７０５，９０５，９０７  非仮想化システムメモリ
７０８，８０２，９０８，１０１０  サービスパーティション
８１０，１００６  リングバッファ
９０４，１００４  クライアントＯＳ
９１０  サービスＯＳ    
１２０６  ゲストパーティション
１２１２，１２１８，１２２４  オファーキャッシュ
１２１４  チャネルポリシーエージェント
１２１６  チャネル管理ライブラリ
【図１】
2006318441.tif 000003
【図２】
2006318441.tif 000004
【図３Ａ】
2006318441.tif 000005
【図３Ｂ】
2006318441.tif 000006
【図４】
2006318441.tif 000007
【図５Ａ】
2006318441.tif 000008
【図５Ｂ】
2006318441.tif 000009
【図６】
2006318441.tif 000010
【図７】
2006318441.tif 000011
【図８】
2006318441.tif 000012
【図９】
2006318441.tif 000013
【図１０】
2006318441.tif 000014
【図１１】
2006318441.tif 000015
【図１２】
2006318441.tif 000016
【図１３】
2006318441.tif 000017
【図１４Ａ】
2006318441.tif 000018
【図１４Ｂ】
2006318441.tif 000019
【図１４Ｃ】
2006318441.tif 000020