(57)【特許請求の範囲】
【請求項１】
コンピューター上で実現される非特権仮想マシンと前記コンピューターのＩ／Ｏデバイスとの間における通信を管理する、前記コンピューターにより実行される方法であって、
前記コンピューターが、前記Ｉ／Ｏデバイスの記述を受けるステップであって、前記記述が、前記Ｉ／Ｏデバイスにおいて実行可能な動作の内のどの動作を前記非特権仮想マシンが前記Ｉ／Ｏデバイスにおいて実行することができるかに関する情報を含む、ステップと、
前記コンピューターが、前記記述に基づいて、前記Ｉ／Ｏデバイスのコンフィギュレーション空間の表現を作るステップであって、前記コンフィギュレーション空間は、前記Ｉ／Ｏデバイスを設定するためのメモリー・アドレス空間であり、前記表現が、少なくとも１つの読み出しおよび書き込み動作と関連したプロパティを定めるためのビットを有し、前記ビットは、前記コンフィギュレーション空間内のメモリー位置に対して実行することができる動作を制限するために前記コンピューターにより使用可能である、ステップと、
前記コンピューターが、前記記述に基づいてメモリー・マップドＩ／Ｏ空間の表現を作るステップであって、前記メモリー・マップドＩ／Ｏ空間は、前記Ｉ／Ｏデバイスによって読み出しおよび書き込みができるメモリー・アドレス空間であり、前記表現が、
前記非特権仮想マシンにマッピングされる前記メモリー・マップドＩ／Ｏ空間のページに基づいて構成される第１レベルのメモリー・マップドＩ／Ｏ空間と、
前記非特権仮想マシンから除外される前記メモリー・マップドＩ／Ｏ空間のページに基づいて構成される第２レベルのメモリー・マップドＩ／Ｏ空間であって、該ページに静止ビットが収容された、第２レベルのメモリー・マップドＩ／Ｏ空間と、
を含む、ステップと、
前記コンピューターが、前記コンフィギュレーション空間の前記表現および前記メモリー・マップドＩ／Ｏ空間の前記表現にしたがって、前記非特権仮想マシンによる前記Ｉ／Ｏデバイスへのアクセスを制御するステップと、
を含む、方法。
【請求項２】
請求項１に記載の方法であって、前記記述が、前記Ｉ／Ｏデバイスの販売業者によって提供されるファイルで受け取られる、方法。
【請求項３】
非特権仮想マシンとデバイスとの間における通信を管理するためのシステムであって、
少なくとも１つのプロセッサーであって、前記非特権仮想マシンが該少なくとも１つのプロセッサー上で実現される、少なくとも１つのプロセッサーと、
前記デバイスと、
前記少なくとも１つのプロセッサーに対し通信できるように結合された少なくとも１つのメモリーであって、該メモリーが、コンピューター実行可能命令を格納し、該コンピューター実行可能命令が、前記プロセッサーで実行されると前記プロセッサーに、
前記デバイスの記述を受け、前記記述が、前記デバイスにおけるどの動作がシステム規模の効果を有するか、およびどの動作が前記デバイスに対してローカルな効果を有するかに関する情報を含み、
前記記述に基づいて、前記デバイスのコンフィギュレーション空間の表現を作成し、前記コンフィギュレーション空間は、前記デバイスを設定するためのメモリー・アドレス空間であり、前記表現が、少なくとも１つの読み出しおよび書き込み動作と関連したプロパティを定めるためのビットを有し、前記システムが、前記コンフィギュレーション空間内のメモリー位置に対し実行することができる動作を制限するため前記ビットを使用するように構成され、
前記記述に基づいてメモリー・マップドＩ／Ｏ空間の表現を作り、前記メモリー・マップドＩ／Ｏ空間は、前記デバイスによって読み出しおよび書き込みができるメモリー・アドレス空間であり、前記表現が、
前記非特権仮想マシンにマッピングされる前記メモリー・マップドＩ／Ｏ空間のページに基づいて構成される第１レベルのメモリー・マップドＩ／Ｏ空間と、
前記非特権仮想マシンから除外される前記メモリー・マップドＩ／Ｏ空間のページに基づいて構成される第２レベルのメモリー・マップドＩ／Ｏ空間であって、前記ページに静止ビットが収容された、第２レベルのメモリー・マップドＩ／Ｏ空間と、
を含み、
前記コンフィギュレーション空間の前記表現および前記メモリー・マップドＩ／Ｏ空間の前記表現にしたがって、前記非特権仮想マシンによる前記Ｉ／Ｏデバイスへのアクセスを制御すること、
を含む動作を実行させる、少なくとも１つのメモリーと、
を含むシステム。
【請求項４】
デバイスへのアクセスを制御するコンピューター実行可能命令を格納したコンピューター読み取り可能記憶媒体であって、前記デバイスが、非特権仮想マシンをホストする物理マシンに対し通信できるように結合され、
前記デバイスのインストール・ファイルを受け取る命令であって、前記インストール・ファイルが、前記デバイスにおけるどの動作がシステム規模の効果を有するか、およびどの動作が前記デバイスに対してローカルな効果を有するかに関する情報を含む、命令と、
前記インストール・ファイルに基づいて、前記デバイスのコンフィギュレーション空間、メモリー・マップドＩ／Ｏ空間、およびＩ／Ｏ空間についての属性の少なくとも１つのマップを作るための命令であって、前記コンフィギュレーション空間は、前記デバイスを設定するためのメモリー・アドレス空間であり、前記メモリー・マップドＩ／Ｏ空間は、前記デバイスによって読み出しおよび書き込みができるメモリー・アドレス空間であり、前記少なくとも１つのマップが、メモリー・マップドＩ／Ｏ空間の表現を含み、該表現が、
前記非特権仮想マシンにマッピングされる前記メモリー・マップドＩ／Ｏ空間のページに基づいて構成される第１レベルのメモリー・マップドＩ／Ｏ空間と、
前記非特権仮想マシンから除外される前記メモリー・マップドＩ／Ｏ空間のページに基づいて構成される第２レベルのメモリー・マップドＩ／Ｏ空間であって、該ページに静止ビットが収容された、第２レベルのメモリー・マップドＩ／Ｏ空間と、
前記コンフィギュレーション空間内のメモリー位置に対して実行することができる動作を制限するために仮想化システムにより使用可能である前記少なくとも１つのマップであって、前記少なくとも１つのマップと関連した各ページまたは各ビットが前記非特権仮想マシンにマッピングされ、ビットの静止ページを非特権仮想マシンに前記デバイスの状態として供給することができる、前記少なくとも１つのマップと、
を含む、命令と、
前記受け取ったインストール・ファイルに基づいて、前記少なくとも１つのマップを収容する命令と、
前記非特権仮想マシンによる前記デバイスへのアクセスを管理するために前記少なくとも１つのマップを用いる命令と、
を含む、コンピューター読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  ここに開示する主題は、計算の分野に関し、更に特定すれば、コンピューターの仮想化に関するが、仮想化は非限定的分野の一例に過ぎない。
【従来技術】
【０００２】
[0002]  殆どの入力／出力（Ｉ／Ｏ）デバイスは、システムにおいてＩ／Ｏデバイスの全てを設定する(configure)信頼できるソフトウェアが１つ存在することを仮定して設計されている。また、通例では、これらのＩ／Ｏデバイスは、個々のデバイスの相違を抽象化するプラグイン・モジュールであるデバイス・ドライバーによって根本的に制御されることも仮定している。更に、これらのデバイス全てが１つのカーネルに含まれることも仮定している。
【０００３】
[0003]  しかしながら、仮想マシンのコンテキストでは、以上の仮定がもはや有効ではない場合もある。各仮想マシンは、通例、それ自体のオペレーティング・システム・カーネルを含むが、このカーネルは、他の仮想マシン全てにおいて実行する全てのカーネルによって信頼されている場合も、されていない場合もある。物理ホスト内でデバイスを設定し制御するには、一方の仮想マシンからのアクションが他の仮想マシンにどのように影響を及ぼし得るかに関する方針を施行することができる何らかの中央オーソリティが必要となる。システムによっては、この中央オーソリティがホスト・オペレーティング・システムの中にある場合がある。他のシステムでは、そのオーソリティがハイパーバイザー内にあるかもしれず、更に他のシステムでは、オーソリティがハイパーバイザーの上で実行する仮想マシンの１つと共存する場合もある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0004]  仮想化システムを作るとき、１つの手法では、前述の中央オーソリティ内に全てのＩ／Ｏデバイスの完全な制御を維持することが考えられる。つまり、仮想マシンがＩ／Ｏサービスを必要とするとき、この仮想マシンは、Ｉ／Ｏを制御する中央オーソリティに要求を（直接または間接的に）渡すことができる。この手法は有効に作用することができるが、２つの問題がある。第１に、Ｉ／Ｏは、仮想マシンではなく物理ハードウェアにおいて実行するオペレーティング・システムと比較すると、動作する速度が遅い。第２に、仮想マシンに対して表現されるＩ／Ｏデバイスの範囲が、仮想化ソフトウェアによって限定される場合がある。物理コンピューター内にあるデバイスの各々を、その中で実行する仮想マシンの１つ以上に割り当てることができれば望ましいであろう。このようにすると、Ｉ／Ｏは、間接的な処置(indirection)に伴う性能低下を被ることなく、そして仮想化レイヤーが完全にその内部機能を理解することを必要とせずに、コンピューターに差し込むことができる任意のデバイスを仮想マシンによって用いることができるようになる。
【０００５】
[0005]  したがって、当技術分野では、前述の問題を解決するために他の技法が求められている。
【課題を解決するための手段】
【０００６】
[0006]  本明細書では、（１）デバイスにおけるどの動作がシステム規模の効果を有する可能性があるか、および（２）どの動作がそのデバイスに対してローカルな効果を有するかを、特権オーソリティ（例えば、ハイパーバイザーまたは仮想化システムの他の特権態様）に示すデバイスの記述を作成するまたは受け取ることによって、デバイスと相互作用する非特権仮想マシン（デバイスに対してシステム規模の方針を所有していない仮想マシン）の挙動を制限する種々の態様を開示する。次いで、特権オーソリティはこれらのアクションを許可または拒否することができる。また、特権オーソリティはこれらのアクションを、適度な成果(benign consequences)が得られる他のアクションに変換することもできる。
【０００７】
[0007]  一実施形態では、デバイス毎に、コンフィギュレーション空間のマップを作ることができ、コンフィギュレーションにおける各ビットが、以下のプロパティの内１つ以上を有することができる。
【０００８】
ｉ．      読み取りのみ。
ｉｉ．    常に０を読み取る。
ｉｉｉ．  常に１を読み取る。
【０００９】
ｉｖ．    書き込み−読み取り。
ｖ．      １の書き込みをクリアし、０の書き込みのみを残す。
ｖｉ．    １の書き込みをセットし、０の書き込みのみを残す。
【００１０】
ｖｉｉ．  ０の書き込みをクリアし、１の書き込みのみを残す。
ｖｉｉｉ．０の書き込みをセットし、１の書き込みのみを残す。
ｉｘ．    最初の読み取りの後０にクリアする。
【００１１】
ｘ．      最初の書き込みの後１にセットする。
[0008]  以上の挙動は例であり、メモリー位置において許されるアクションを制限するために、他の挙動も含めることができる。また、ＭＭＩＯ空間のマップも作ることができ、各ページを仮想マシンにマッピングすることができる。仮想マシンのマップから除外されたページについて、特権オーソリティは、デバイスのように見える静止画像をそのページに収容することを選択することもできる。あるいは、特権オーソリティは、傍受を受け取り、コンフィギュレーション空間をこれらの特定のページに適用されるマップと共に用いてこれらの傍受を扱うことを選択することもできる。
【００１２】
[0009]  更に別の実施形態では、安全にデバイスを含めるための情報を交換する方法を開示する。実施形態によっては、マップの表現をドライバー・インストール・ファイルに埋め込むことができる。インストール・ファイルには、これらを製作した当事者によってディジタル署名することもできる。したがって、マシン・アドミニストレータは、実際にそのデバイスのドライバーを特権オーソリティにインストールすることなく、特権オーソリティにインストール・ファイルを処理させることができる。ドライバーを仮想マシンにインストールすることができ、デバイスは、仮想マシンにおいて作動可能になり、デバイスが他の仮想マシンや特権オーソリティに影響を及ぼさないように抑制する(contain)ことができる。
【００１３】
[0010]  以上のことに加えて、本開示の一部をなす特許請求の範囲、図面、および本文には、他の態様についても記載する。尚、本開示の１つ以上の種々の態様は、本開示の本明細書において参照した態様を実施するための回路および／またはプログラミングを含むがこれらには限定されないことは、当業者には認めることができよう。これらの回路および／またはプログラミングは、システム設計者の設計選択に応じて本明細書において参照する態様を実施するように構成されているハードウェア、ソフトウェア、および／またはファームウェアの事実上あらゆる組み合わせとすることができる。
【００１４】
[0011]  尚、この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられていることは注記してしかるべきである。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定する際に補助として用いられることを意図するのでもない。
【図面の簡単な説明】
【００１５】
[0012]  以上の摘要、および以下の詳細な説明は、添付図面と合わせて読むと一層深く理解することができる。本開示を例示するために、本開示の種々の態様を示す。しかしながら、本開示は示される具体的な態様に限定されるのではない。以下の図面が含まれる。
【図１ａ】図１ａは、複数の仮想プロセッサーおよび対応するゲスト・オペレーティング・システムを備えている、複数の仮想マシンがある仮想マシン環境を示す。これらの仮想マシンは、スケジューラーおよび他のコンポーネントを備えることができる仮想化レイヤーによって維持されており、この仮想化レイヤーが複数の仮想マシンのハードウェアを仮想化する。
【図１ｂ】図１ｂは、コンピューター・システムにおける仮想化環境のためのハードウェアおよびソフトウェア・アーキテクチャの論理階層(layering)を表す図を示す。
【図１ｃ】図１ｃは、本開示の態様を実現することができるコンピューター・システムの一例を示す。
【図２】図２は、仮想化計算システムの一例を示す。
【図３】図３は、代わりの仮想化計算システムを示す。
【図４】図４は、ＰＣＩデバイスに関する場合のＩＯ空間およびＭＭＩＯを表すシステム図の一例を示す。
【図５】図５は、ＲＡＭが存在することができるアドレス空間を示す図の例である。
【図６】図６は、非特権仮想マシンとＩＯデバイスとの間におけるトランザクションのグローバルおよびローカル効果を管理するための動作手順の一例を示す。
【図７】図７は、非特権仮想マシンとＩＯデバイスとの間におけるトランザクションのグローバルおよびローカル効果を管理するための動作手順の一例を示す。
【図８】図８は、デバイスと相互作用する非特権仮想マシンのグローバルおよびローカル効果を管理するための動作手順の一例を示す。
【図９】図９は、デバイスと相互作用する非特権仮想マシンの挙動を制限するための動作手順の一例を示す。
【図１０】図１０は、先に図１から図９に関して論じたコンピューター実行可能命令を保つコンピューター読み取り可能媒体を示す。
【発明を実施するための形態】
【００１６】
一般的条件における仮想マシン
[0025]  以下の説明および図面において、本発明の種々の実施形態の完全な理解を得るために、一定の具体的な詳細を明記する。計算およびソフトウェア技術と関連のあることが多いある種の周知の詳細については、本発明の種々の実施形態を不必要に曖昧にすることを避けるために、以下の開示では明記しないこととする。更に、当業者は、以下に説明する詳細の内１つ以上がなくても、本発明の他の実施形態を実施できることを、当業者には理解できよう。最後に、以下の開示においてはステップおよびシーケンスを参照して種々の方法について説明するが、そのような説明は、本発明の実施形態の明確な実施態様を規定するためであり、これらのステップおよびステップのシーケンスが本発明を実施するために必須であると捉えてはならない。
【００１７】
[0026]  尚、本明細書において説明する種々の技法は、ハードウェアまたはソフトウェアによって、そして適切である場合には、双方の組み合わせによって実現できることは言うまでもない。つまり、本発明の方法および装置、あるいはそのある種の態様または部分は、フロッピー・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、または任意の他のマシン読み取り可能記憶媒体というような、有形媒体に具体化されたプログラム・コード（即ち、命令）という形態をなすことができる。そして、このプログラム・コードをコンピューターのようなマシンにロードしそれによって実行すると、そのマシンは本発明を実施する装置となる。プログラマブル・コンピューターにおけるプログラム・コード実行の場合、計算機は、一般に、プロセッサー、このプロセッサーによって読み取り可能な記憶媒体（揮発性および不揮発性メモリーおよび／または記憶エレメントを含む）、少なくとも１つの入力デバイス、ならびに少なくとも１つの出力デバイスを含む。１つ以上のプログラムは、例えば、ＡＰＩ、再利用可能な制御部等の使用によって、本発明と関連付けて説明するプロセスを実現または利用することができる。このようなプログラムは、好ましくは、コンピューター・システムと通信するために、高度手順プログラミング言語またはオブジェクト指向プログラミング言語で実装される。しかしながら、プログラム（１つまたは複数）は、望ましければ、アセンブリまたは機械語でも実装することができる。いずれの場合でも、言語はコンパイラまたはインタプリタ言語であればよく、ハードウェアの実施態様と組み合わせてもよい。
【００１８】
[0027]  図１ａは、複数の仮想マシン１２０、１２１を有する仮想マシン環境１００を示す。仮想マシン１２０、１２１は、複数の仮想プロセッサー１１０、１１２、１１４、１１６、および対応するゲスト・オペレーティング・システム１３０、１３２を備えている。仮想マシン１２０、１２１は、スケジューラー１４２および他のコンポーネント（図示せず）を備えることができる仮想化レイヤー１４０によって維持されており、この仮想化レイヤー１４０は、複数の仮想マシン１２０、１２１に合わせてハードウェア１５０を仮想化する。複数の仮想プロセッサー１１０、１１２、１１４、１１６は、基礎となるハードウェア物理プロセッサー１６０、１６２の仮想的な相当物となる。
【００１９】
[0028]  図１ｂは、コンピューター・システムにおける仮想化環境に合わせたハードウェアおよびソフトウェア・アーキテクチャの論理レイヤーリングを表す図である。図１ｂにおいて、仮想化プログラム１８０は、物理ハードウェア・アーキテクチャ１８２において直接または間接的に実行する。仮想化プログラム１８０は、（ａ）ホスト・オペレーティング・システムと共に実行する仮想マシン・モニター、（ｂ）ハイパーバイザー・コンポーネントを有するホスト・オペレーティング・システムであって、ハイパーバイザー・コンポーネントが仮想化を実行する、ホスト・オペレーティング・システム、（ｃ）ハードウェア、または（ｄ）マイクロ・コードとすることができる。また、仮想化プログラムは、任意のオペレーティング・システムとは別個に実行するハイパーバイザーであってもよい。言い換えると、ハイパーバイザー仮想化プログラムは、いずれのオペレーティング・システムの一部として実行する必要はなく、いずれのオペレーティング・システムと共に実行する必要もない。ハイパーバイザー仮想化プログラムは、代わりに、「ルート・パーティション」(root partition)を含むあらゆるオペレーティング・システムの「下で」実行することができる。仮想化プログラム１８０は、ゲスト・ハードウェア・アーキテクチャ１７９）このコンポーネントは「パーティション」または「仮想マシン」であるという事実を示すために、破線で示されている）を仮想化する。即ち、実際には存在しないが代わりに仮想化プログラム１８０によって仮想化されているハードウェアである。ゲスト・オペレーティング・システム１７６は、ゲスト・ハードウェア・アーキテクチャ１７８において実行し、ソフトウェア・アプリケーション１７４がゲスト・オペレーティング・システム１７６において実行することができる。図１ｂの仮想化動作環境では、ソフトウェア・アプリケーション１７４が、ホスト・オペレーティング・システムやハードウェア・アーキテクチャ１８２とは一般に互換性のないオペレーティング・システムにおいて実行するように構成されているかのように、ソフトウェア・アプリケーション１７４はコンピューター・システムにおいて実行することができる。
【００２０】
[0029]  仮想マシンは、通例、オペレーティング・システム全体、および１組のアプリケーションを内蔵し、これらのアプリケーションが一緒になって多くのプロセスを構成する。仮想マシンのコンテキストでは、これらのプロセス全体を「ワークロード」または「プロセス」と呼ぶことができる。本開示では、「プロセス」および「ワークロード」という用語は、仮想マシンのコンテキストでは相互交換可能に用いることができ、「プロセス」とは仮想マシンにおいてインスタンス化することができるシステムおよびアプリケーションの全てを含む複数のプロセスに言及できることは、当業者には容易に理解できよう。
【００２１】
[0030]  次に、図２は、物理コンピューター・ハードウェア２０２の直接上(above)で実行するホスト・オペレーティング・システム（ホストＯＳ）ソフトウェア・レイヤー２０４を備えている仮想化計算システムを示す。ここで、ホストＯＳ２０４は、オペレーティング・システムＡ２１２およびＢ２１４による使用のために、それぞれ、インターフェースをパーティションＡ２０８およびＢ２１０に露出することによって、物理コンピューター・ハードウェア２０２のリソースへのアクセスを与える。これによって、ホストＯＳ２０４が、その上で実行するオペレーティング・システム・レイヤー２１２および２１４に気付かれずに(unnoticed)動作することが可能になる。この場合も、仮想化を実行するために、ホストＯＳ２０４は、ネーティブ仮想化能力を有する、特別に設計されたオペレーティング・システムとするとよく、あるいは仮想化を実行するためのハイパーバイザー・コンポーネント（図示せず）が組み込まれた標準的なオペレーティング・システムであってもよい。
【００２２】
[0031]  再度図２を参照すると、ホストＯＳ２０４の上には、２つのパーティション、即ち、例えば、仮想化インテル３８６プロセッサーとすることができるパーティションＡ２０８、および例えば、モトローラ６８０Ｘ０ファミリー・プロセッサーの内の１つの仮想化バージョンとすることができるパーティションＢ２１０である。各パーティション２０８および２１０の中には、それぞれ、ゲスト・オペレーティング・システム（ゲストＯＳ）Ａ２１２およびＢ２１４がある。ゲストＯＳ  Ａ２１２の上で実行するのは、２つのアプリケーションＡ１  ２１６およびアプリケーションＡ２  ２１８であり、ゲストＯＳ  Ｂ２１４の上で実行するのは、アプリケーションＢ１  ２２０である。
【００２３】
[0032]  図２に関して、パーティションＡ２０８およびパーティションＢ２１４（破線で示されている）が仮想化コンピューター・ハードウェア表現であり、ソフトウェア構成としてのみ存在できることを注記するのは重要である。これらは、特殊な仮想化ソフトウェア（１つまたは複数）の実行によって可能になる。パーティションＡ２０８およびパーティションＢ２１０をゲストＯＳ  Ａ２１２およびゲストＯＳ  Ｂ２１４にそれぞれ提示するだけでなく、ゲストＯＳ  Ａ２１２およびゲストＯＳ  Ｂ２１４が実在の物理コンピューター・ハードウェア２０２と間接的に相互作用するために必要なソフトウェア・ステップの全てを実行する。
【００２４】
[0033]  図３は、代わりの仮想化計算システムを示し、ここでは、ホスト・オペレーティング・システム２０４”と共に実行する仮想マシン・モニター（ＶＭＭ）２０４によって仮想化が実行される。ある種の場合、ＶＭＭ２０４’は、ホスト・オペレーティング・システム２０４”の上で実行し、ホスト・オペレーティング・システム２０４”を通じてのみコンピューター・ハードウェア２０２と相互作用するアプリケーションとなることもある。他の場合では、図３に示すように、ＶＭＭ２０４’は、代わりに、あるレベルではホスト・オペレーティング・システム２０４”を通じてコンピューター・ハードウェア２０２と間接的に相互作用する部分的に独立したソフトウェア・システムを備えることができるが、他のレベルでは、ＶＭＭ２０４’は、コンピューター・ハードウェア２０２（ホスト・オペレーティング・システムが直接コンピューター・ハードウェアと相互作用する方法と同様）と直接相互作用する。そして更に別の場合では、ＶＭＭ２０４’が完全に独立したソフトウェア・システムを備えることもでき、ホスト・オペレーティング・システム２０４”を利用することなく（コンピューター・ハードウェア２０２の使用を調整しコンフリクト等を回避するために、ホスト・オペレーティング・システム２０４”と相互作用することには変わりないが）全てのレベルでコンピューター・ハードウェア２０２と直接相互作用する（ホスト・オペレーティング・システムがコンピューター・ハードウェアと直接相互作用する方法と同様）。
【００２５】
[0034]  図４は、ＰＣＩデバイスに関する場合のＩ／Ｏ空間およびＭＭＩＯを表すシステム図の一例を示す。ＰＣＩ仕様書では、３つのアドレス空間、即ち、メモリー、Ｉ／Ｏ、およびコンフィギュレーションが定められている。ＭＭＩＯという用語は、本明細書では、ＰＣＩ用語の「メモリー」をＲＡＭと区別するために、ＰＣＩ仕様書において定められている「メモリー」を指すために用いられる。図４は、システム・バス４００、物理メモリー４１０、プロセッサー４２０、レジスタ４６０を有するＰＣＩデバイス４３０、およびホスト−ＰＣＩブリッジ・デバイス４４０を含む。ホスト−ＰＣＩブリッジ・デバイス４４０に取り付けられているのはＰＣＩバス４５０であり、ＰＣＩバスに取り付けられているのはＰＣＩデバイス４３０である。ＰＣＩデバイス４３０は、デバイスを制御するためにシステム・プロセッサーから読み取られそして書き込まれなければならないメモリー位置において、１つ以上のレジスタ４６０を内蔵する。物理メモリー・アドレス空間は、別のアドレス空間とすることができるＩＯポート空間とは別個であってもよいことが分かる。ＩＯリソースをＭＭＩＯリソースに変換することができ、これは、ＩＯポート・アドレス空間をメモリー・マップドＩＯポート・アクセスを通じてマッピングできる１つの理由となる。
【００２６】
[0035]  図５を参照すると、ＲＡＭが存在することができるアドレス空間５００を示す図が描かれている。図示のように、メモリー・マップド入力／出力（ＭＭＩＯ）エリア５１０が同じアドレス空間にも存在することができる。典型的な最近のアドレス空間に基づくハードウェア制御インターフェースが、このアドレス空間のＭＭＩＯ部分に存在する。システムの物理アドレス空間は、一般に、仮想コンピューター・システムの「物理」アドレス空間５００も指す「ゲスト物理アドレス空間」のように、物理コンピューター・システムの物理アドレス空間５００も指す。物理メモリー・アドレス空間５００は、ＩＯポート空間とは別である。この別のＩＯポート空間は、より古いデバイスを制御するために用いることができ、またより新たなデバイスを設定し構成するためにも用いることができる。これは、ＰＣＩコンフィギュレーション空間が通例ＩＯポート空間を通じてアクセスされるからである。更に、ＩＯポート空間アドレスは、通例、３２ビットや６４ビットではなく、１６ビットである。
【００２７】
[0036]  前述のパーティションを実現するためのこれらの変形は全て、単なる例示的な実施態様に過ぎず、本明細書では、本開示を任意のいずれかの仮想化態様に限定するように解釈すべきものはない。
コンフィギュレーション空間の仮想化
[0037]  殆どの入力／出力（Ｉ／Ｏ）デバイスは、システムにおいてＩ／Ｏデバイスの全てを設定する(configure)信頼できるソフトウェアが１つ存在することを仮定して設計されている。また、通例では、これらのＩ／Ｏデバイスは、個々のデバイスの相違を抽象化するプラグイン・モジュールであるデバイス・ドライバーによって究極的に制御されることも仮定している。更に、これらのデバイス全てが１つのカーネルに含まれることも仮定している。
【００２８】
[0038]  しかしながら、仮想マシンのコンテキストでは、以上の仮定がもはや有効ではない場合もある。各仮想マシンは、通例、それ自体のオペレーティング・システム・カーネルを含み、このカーネルが、他の仮想マシン全てにおいて実行する全てのカーネルによって信頼されている場合も、されていない場合もある。物理ホスト内でデバイスを設定し制御するには、一方の仮想マシンからのアクションが他の仮想マシンにどのように影響を及ぼし得るかに関する方針を施行することができる何らかの中央オーソリティが必要となる。システムによっては、この中央オーソリティがホスト・オペレーティング・システムの中にある場合がある。他のシステムでは、そのオーソリティがハイパーバイザー内にあるかもしれず、更に他のシステムでは、オーソリティがハイパーバイザーの上で実行する仮想マシンの１つと共存する場合もある。
【００２９】
[0039]  仮想化システムを作るとき、１つの手法では、前述の中央オーソリティ内に全てのＩ／Ｏデバイスの完全な制御を維持することが考えられる。つまり、仮想マシンがＩ／Ｏサービスを必要とするとき、この仮想マシンは、Ｉ／Ｏを制御する中央オーソリティに要求を（直接または間接的に）渡すことができる。この手法は容認できる場合もあるが、２つの問題がある。第１に、Ｉ／Ｏは、仮想マシンではなく物理ハードウェアにおいて実行するオペレーティング・システムと比較すると、動作する速度が遅い。第２に、仮想マシンに対して表現されるＩ／Ｏデバイスの範囲が、仮想化ソフトウェアによって限定される場合がある。物理コンピューター内にあるデバイスの各々を、その中で実行する仮想マシンの１つ以上に割り当てることができれば望ましいであろう。このようにすると、間接的な処置(indirection)に伴う性能低下を被ることなく、そして仮想化レイヤーが完全にその内部機能を理解することを必要とせずに、コンピューターに差し込むことができる任意のデバイスを仮想マシンによってＩ／Ｏを用いることができるようになる。
【００３０】
[0040]  例えば、ネットワーク・インターフェース・コントローラ（ＮＩＣ）を物理マシンに差し込む場合、仮想化ソフトウェアがＮＩＣを制御し操作すると仮定することは正当であろう。ＮＩＣは、共通であり、ＮＩＣ販売業者は、普及しているオペレーティング・システムおよび仮想化システムの双方にデバイス・ドライバー・ソフトウェアを提供することを望む場合もある。一方、もっと難解なデバイスがコンピューターに差し込まれた場合、対応する仮想化ソフトウェアが入手可能である可能性は低くなる。つまり、仮想マシンがデバイスをどのように用いるかについて全く理解することなく、この仮想マシンにそのデバイスに直接アクセスさせることができれば望ましいであろう。
【００３１】
[0041]  生憎、難解なデバイスのコンフィギュレーションおよびセットアップは、システム規模の成り行きを有する場合があり、これが他の仮想マシンの機能に影響を及ぼす可能性がある。例えば、デバイスをオンにすると、流入電流スパイクが発生し、この流入が他の流入スパイクと同時に発生した場合、コンピューター全体に電圧低下が発生する原因になる虞れがある。他の例では、デバイスを設定するには、メモリー・アドレス空間の範囲を要求するようにそのデバイスに命令することができるが、この範囲が他のデバイスまたは主メモリーによって占有されている可能性がある。最後の例として、多くの他のデバイスと共に、デバイスをチップ内にパッケージ化することができる。周辺素子相互接続（ＰＣＩ）仕様の条件では、このようなデバイスを「機能」と呼び、チップを「パッケージ」と呼ぶ。パッケージは、バスに対して１つの接続（または、ＰＣＩ−Expressの場合、ファブリックに対する接続）を有することができ、パッケージ内部にある各機能は、システムの残り部分に接続することに関連のあるハードウェアの一部を共有することができる。この場合、最も低い番号が付けられた機能（＃０）のコンフィギュレーションが、それよりも高い番号が付けられた機能の動作において見ることができる副作用をしばしば有する可能性がある。機能０が仮想マシンの制御下にある場合、同じパッケージにおける他の機能は、その仮想マシンにおいて行われる選択によって影響を受ける可能性がある。このため、他の仮想マシンは、他のマシンの制御下にある機能からサービスを受けられなくなる可能性、または貧弱なサービスしか受けられなくなる可能性がある。
【００３２】
[0042]  本明細書において開示する種々の実施形態において、デバイスと相互作用する非特権仮想マシンの挙動は、そのデバイスの記述を作成することによって制限することができる。この記述は、（１）そのデバイスにおけるどの動作がシステム規模の副作用を有する可能性があるか、および（２）どの動作がそのデバイスにローカルな影響を有するかを特権オーソリティ（例えば、ハイパーバイザーまたは仮想化システムの他の特権態様）に示す。非特権仮想マシンとは、システムまたはデバイスに対してシステム規模の方針を所有しない仮想マシンを指す。言い換えると、非特権仮想マシンは、ハイパーバイザーやペアレント／ルート／ホストＯＳではない。そして、特権オーソリティはこれらのアクションを許可または拒否することができる。また、特権オーソリティはこれらのアクションを、適度な成果が得られる他のアクションに変換することもできる。
【００３３】
[0043]  デバイスのドライバーを特権オーソリティのコンテキストにロードすることによって、以上の方法の一部を実現することが可能になると考えられるが、このような手法は、特権オーソリティにおいて余分なコードが必要になるため、通例では望ましくない。特権オーソリティ内部におけるコード量を最小限にすることは、仮想化システムを安全かつ効率的にするためには重要であることが多い。
【００３４】
[0044]  更に、ＰＣＩ機能全体（例えば、単にデバイスの１部分集合ではなく）を非特権仮想マシンの管理下に置くことを許可するとき、デバイスのリソースを多くの仮想マシンに再割り当て(sub-allocate)するためのコードが特権オーソリティ内には全くない場合がある。この再割り当てプロセスは、多くの仮想マシン間でデバイスを共有するときには極普通である。対照的に、本開示は、ディスクリート・デバイス全体を仮想マシンの制御下に置く方法について記載する。
【００３５】
[0045]  一実施形態では、各ＰＣＩ（またはＰＣＩ−Ｘ、またはＰＣＩ−Ｅｘｐｒｅｓｓ）デバイスが２箇所または３カ所のアドレス空間を実装することができる。第１アドレス空間は、メモリー・マップドＩ／Ｏ空間として記述することができ、ＲＡＭアドレシングと同様に振る舞うことができる。デバイスに対する読み出しおよび書き込みは、ＲＡＭに対する読み出しおよび書き込みのように実行することができるが、異なるアドレスを用いる。図５を参照すると、ＲＡＭアドレス空間５２０は、例えば、メモリー・アドレス空間の最初の２ＧＢを占有することができ、Ｉ／Ｏデバイスは３ＧＢ（アドレス３２２１２２５４７２）および４ＧＢ（アドレス４２９４９７８２９６）の間にあるアドレス空間５１０を占有する。ＭＭＩＯアドレス空間は、デバイス・ドライバーによるデバイスとの刻々の相互作用に用いることができる。ＭＭＩＯアドレス空間へのアクセスは通例素早く、通常そのデバイスのデバイス・ドライバー（通例、デバイス販売業者によって供給される）によって実行される。デバイスをオフにすると、デバイスはいずれのＭＭＩＯ空間もデコードしないのが通例である。
【００３６】
[0046]  実装することができる第２アドレス空間は、ＰＣＩデバイスによって実装されるコンフィギュレーション空間である。このコンフィギュレーション空間には、デバイスを設定するためのメカニズム（例えば、レジスタ）を収容する(populate)ことができる。このようなメカニズムには、デバイスをオフおよびオンに切り換えること、リソースを割り当てること等を含むことができる。コンフィギュレーション空間は、通例、デバイスがオンになっているかまたはオフになっているかには係わらずデコードされる。ＰＣＩ仕様は、この空間内にあるレジスタの一部の挙動を識別する。これらのレジスタは、包括的なコンフィギュレーション・ソフトウェア（デバイス販売業者によって供給されるのではない）が、デバイスを設定し、リソースをデバイスに割り当て（ＭＭＩＯ空間アドレスの指定範囲のように）、そしてデバイスをオンにすることを可能にする。コンフィギュレーション空間は、ＰＣＩ仕様によって定義される意味を有さないデバイス特定レジスタを含むことができ、通常これらのレジスタを含む。このようなレジスタは、通例、デバイスに合ったデバイス・ドライバーによってでなければ操作することができない。最後に、「能力構造」(capability structures)と呼ばれるコンフィギュレーション空間に新たな範囲を定めることによって、新たな機構をＰＣＩ仕様に追加することもできる。
【００３７】
[0047]  ＰＣＩデバイスが用いることができる第３アドレス空間は、「Ｉ／Ｏ」空間と呼ばれ、主に履歴的(historical)である。一般に、Ｉ／Ｏ空間はＭＭＩＯ空間のプロパティを有する。
【００３８】
[0048]  ハイパーバイザーまたは他の仮想化仲介物(intermediary)のような特権オーソリティは、コンフィギュレーション空間の内どの部分を非特権仮想マシンの制御下に置くことができるか判断する必要がある場合がある。以下に開示する実施形態では、ハイパーバイザーを特権オーソリティとして記述する。しかしながら、開示する実施形態は任意の他の仮想化仲介物とでも実現できることは、当業者には容易に明らかとなるはずである。
【００３９】
[0049]  更に、ハイパーバイザーは、非特権仮想マシンがアクセスすることができるＭＭＩＯおよびＩ／Ｏ空間の部分を含もうとすることができる。種々の実施形態において、本開示は非特権仮想マシンの挙動を含む方法について記載する。一実施形態では、デバイス毎に、コンフィギュレーション空間のマップを作り、このマップ内における各ビットが以下のプロパティの１つ以上を有する。
【００４０】
ｉ．      読み取りのみ。
ｉｉ．    常に０を読み取る
ｉｉｉ．  常に１を読み取る
ｉｖ．    書き込み−読み取り
ｖ．      １の書き込みをクリアし、０の書き込みのみを残す
ｖｉ．    １の書き込みをセットし、０の書き込みのみを残す
ｖｉｉ．  ０の書き込みをクリアし、１の書き込みのみを残す
ｖｉｉｉ．０の書き込みをセットし、１の書き込みのみを残す
ｉｘ．    最初の読み取りの後０にクリアする
ｘ．      最初の書き込みの後１にセットする
[0050]  以上の挙動は一例であり、メモリー位置において許されるアクションを制限するために、追加の挙動を含むこともできる。また、バイト、またはページのようなメモリーのもっと大きなセグメントというような、もっと高い粒度レベルで、メモリー位置に挙動をマッピングすることもできる。
【００４１】
[0051]  ＭＭＩＯ空間のマップを作ることができ、各ページを仮想マシンにマッピングすることができ、または仮想マシンにマッピングしなくてもよい。このマップは、ビット粒度の代わりに、ページ粒度を用いて作ることができる。ビット粒度を用いる場合、ＭＭＩＯ空間のビットが多数になる可能性があり、その結果マップが不当に大きくなる虞れがある。更に、プロセッサーは通例ハイパーバイザーにページ粒度のみで傍受する(intercept)能力を与えるので、ビット・レベルのマップを作ることは、ハイパーバイザーがあらゆるＭＭＩＯ動作を傍受し、マップによって暗示されている適正なフィルタを適用しなければならないことを必ず伴う。このようなデバイスの動作との一定の干渉は、デバイスの動作に負の影響を及ぼす可能性がある。
【００４２】
[0052]  デバイスによっては、レジスタをそのコンフィギュレーション空間から２回目にそのＩ／ＯまたはＭＭＩＯ空間にマッピングする場合もある。これを行うとよいのは、コンフィギュレーション空間へのアクセスは通例時間がかかり、デバイスを設定する前にレジスタへのアクセスを与えることが便利であると考えられるからであり、その場合、マッピングはコンフィギュレーション空間において行われることになる。また、レジスタへのアクセスは、後に実行時に、レジスタへの軽い経路(lightweight path)を通じて与えられなければならず、その場合も、マッピングはメモリー空間において行われなければならない。したがって、ＭＭＩＯ空間のページに対する挙動の１つは、そのページをコンフィギュレーション空間のエリアスとして設定することであり、そのページに対するいずれのアクセスをも捕獲して、コンフィギュレーション空間を扱うコードに誘導し直さなければならない。このようにページ全体をマッピングすることに加えて、ページ内にある個々のビットを、コンフィギュレーション空間内において特定のビットのエリアスとして印すこともできる。
【００４３】
[0053]  仮想マシンのマップから除外されたページでは、ハイパーバイザーが、この除外されたページに、デバイスのように見える静止画像を収容ことを選択することもできる。あるいは、ハイパーバイザーは傍受を受け入れ、これらの傍受を、これらの特定のページに適用されるマップを用いて、コンフィギュレーション空間のように扱うことを選択することもできる。言い換えると、ＭＭＩＯ空間のマップは２つのレベルを有することができる。一方のレベルは、仮想マシンにマッピングされるデバイスＭＭＩＯ空間のページのリストのためのものとすることができる。第２のレイヤー・マップは、オプションとして、除外されたページ内においてビットを定めることができる。
【００４４】
[0054]  デバイスのＩ／Ｏ空間は、コンフィギュレーション空間のように扱うことができる。あるいは、Ｉ／Ｏ空間を仮想マシンから除外することもできる。
[0055]  先に論じたように、開示する種々の実施形態は、ハイパーバイザーのようなオーソリティが、デバイス・ドライバーを採用していないデバイスを安全に含めることを可能にすることができる。つまり、ハイパーバイザーがこのようなマップに収容する情報を有していない可能性がある。したがって、この情報をデバイス販売業社から入手する方法が必要となる。一実施形態では、ドライバー・インストール・ファイルに埋め込むことができるマップの表現を作成することができる。一実施形態では、ドライバー・インストール・ファイルをＩＮＦと呼ぶことができる。ＩＮＦは、ドライバー・インストール・パッケージに含めることができる。更に、パッケージを生成したエンティティによって、ＩＮＦにディジタル署名することもできる。したがって、マシン・アドミニストレータは、デバイスのドライバーを実際にインストールすることなく、デバイス製造業者によって供給されたＩＮＦを、ハイパーバイザーに処理させることを決定することができる。次いで、仮想マシンにドライバーをインストールすることができ、デバイスが仮想マシンにおいて作動できるようになり、そしてドライバーが他の仮想マシンやハイパーバイザー自体に影響を及ぼすことがないように抑制することができる。
【００４５】
[0056]  現在開示している態様は、システム、方法、コンピューター読み取り可能媒体に存在するコンピューター実行可能命令等として実現することができる。つまり、いずれの特定のシステム、方法、またはコンピューター読み取り可能媒体のいずれの開示も、それに制約されるのではなく、逆に開示する主題を実現する他の方法に拡大する。
【００４６】
[0057]  図６から図８までは、仮想マシンとＩ／Ｏデバイスとの間における通信を管理する動作手順の一例を示す。この手順は、動作６００、６０２、６０４、６０５、および６０６を含むことができる。図６を参照すると、動作６００はこの動作手順を開始し、動作６０２において、コンフィギュレーション空間の表現をＩ／Ｏデバイスのために作り、仮想マシンによってＩ／Ｏデバイスにおいて実行することができるアクションを示す。このコンフィギュレーション空間には、デバイスを設定するためのメカニズム（例えば、レジスタ）を収容することができる。メモリー・マップドＩ／Ｏ空間の表現を作ることができ（６０３）、メモリー・マップドＩ／Ｏ空間の各ページが仮想マシンにマッピングされるか、または仮想マシンから除外される。動作６０４は、前記コンフィギュレーション空間の表現および前記メモリー・マップドＩ／Ｏ空間の表現にしたがって、前記Ｉ／Ｏデバイスへのアクセスを制御することを示す。動作６０５は、コンフィギュレーション空間の表現を作る前記動作が、前記コンフィギュレーション空間の表現における各ビットを、少なくとも１つの読み出しおよび書き込み動作と関連付けることを含むことを示す。動作６０６は、前記コンフィギュレーション空間の表現から除外された任意のメモリーについて、そして前記メモリー・マップドＩ／Ｏ空間から除外された任意のメモリーについて、前記任意のメモリーに前記Ｉ／Ｏデバイスを表すデーターを収容することを示す。例えば、仮想マシンのマップから除外されたページに対して、ハイパーバイザーは、デバイスのように見える静止画像を、その除外されたページに収容することを選択することができる。
【００４７】
[0058]  図７を参照すると、動作７０６は、読み出しおよび書き込み動作が以下を含むことを示す。読み取りのみ７０８、常に０を読み取る７１０、常に１を読み取る７１２、読み取り−書き込み７１４、１の書き込みをクリアし、０の書き込みのみを残す７１６、  １の書き込みをセットし、０の書き込みのみを残す７１８、０の書き込みをクリアし、１の書き込みのみを残す７２０、０の書き込みをセットし、１の書き込みのみを残す７２２、最初の読み取りの後０にクリアする７２４、最初の書き込みの後１にセットする７２６。
【００４８】
[0059]  図８を参照すると、動作８０２は、除外されたメモリーに対するページ内においてビットを定めることを示す。動作８０４は、傍受を受け取り、ビットが定められたページを用いてこれらの傍受を処理することを示す。例えば、ハイパーバイザーは、傍受を受け入れて、これらの特定のページに適用されるマップを用いて、これらの傍受をコンフィギュレーション空間のように扱うことを選択することができる。一実施形態８０６では、前記マップを作るために情報を受けることができ、前記情報は、前記Ｉ／Ｏデバイスの販売業者によって提供されるファイルにおいて受け取られる。別の実施形態では、このファイルに前記販売業者によってディジタル署名する（８０８）。動作８１０は、販売業者から受け取った情報にしたがって、表現を作ることを示す。
【００４９】
[0060]  定められたビットを有するページを用いて、仮想化レイヤー８１３によって管理を行うことができる。仮想マシン内にドライバーをインストールすることができ、デバイスは、この仮想マシンにおいて作動可能になり、ドライバーが他の仮想マシンやハイパーバイザー自体に影響を及ぼさないように抑制することができる。
【００５０】
[0061]  動作８１４において、Ｉ／Ｏ空間の表現を作る。動作８１５は、受け取った情報に基づいて、Ｉ／Ｏ空間の表現を収容することを示す。動作８２５は、Ｉ／Ｏ空間の表現にしたがって前記Ｉ／Ｏデバイスへのアクアセスを制御することを示す。動作８３０は、受け取った情報に基づいて、コンフィギュレーション空間の前記マップおよびメモリー・マップドＩ／Ｏ空間の前記マップの双方を収容することを示す。仮想マシンからのＩ／Ｏ空間を動作８３５において除外することができる。
【００５１】
[0062]  図９は、仮想マシンとデバイスとの間における通信を管理する動作手順例を示し、動作９００、９０２、９０４、９０６、９０８、９１０、９１２、および９１４を含む。図９を参照すると、動作９００はこの動作手順を開始し、動作９０２はデバイスの記述を受け取ることを示す。この記述は、デバイスにおけるどの動作がシステム規模の影響を有するか、そしてどの動作が当該デバイスにローカルな影響を有するかに関する情報を含む。動作９０４は、この記述の表現を作成することを示す。動作９０６は、このデバイスのドライバーのインストール・ファイルにこの表現を埋め込むことを示し、この表現は、このデバイスのコンフィギュレーション空間のマップおよびメモリー・マップドＩ／Ｏ空間のマップを作ることを可能にする。コンフィギュレーション空間のマップおよびメモリー・マップドＩ／Ｏ空間のマップは、デバイスにアクセスするために用いることができる。
【００５２】
[0063]  動作９０８は、前記マップ、またはコンフィギュレーション空間のマップのマップおよびメモリー・マップドＩ／Ｏ空間のマップと関連のあるページの中にある各ビットが、以下のプロパティの内少なくとも１つを含むことを示す。読み取りのみ９１０、常に０を読み取る９１２、常に１を読み取る９１４、読み取り−書き込み９１６、１の書き込みをクリアし、０の書き込みのみを残す９１８、１の書き込みをセットし、０の書き込みのみを残す９２０、０の書き込みをクリアし、１の書き込みのみを残す９２２、０の書き込みをセットし、１の書き込みのみを残す９２４、最初の読み取りの後０にクリアする９２６、最初の書き込みの後１にセットする９２８。動作９３０は、インストール・ファイルがＩＮＦであることを示し、動作９３２はＩＮＦにディジタル署名することを示す。
【００５３】
[0064]  前述の態様はいずれも、方法、システム、コンピューター読み取り可能媒体、または任意のタイプの生産物に実現することができる。例えば、図１０では、コンピューター読み取り可能媒体はＰＣＩ、ＰＣＩ−Ｘ、またはＰＣＩ−Ｅｘｐｒｅｓｓデバイスへのアクセスを制御するためのコンピューター実行可能命令を格納することができ、デバイスは、仮想マシンをホストする物理マシンに通信するように結合されている。このような媒体は、デバイスのためのインストール・ファイルを受け取るための命令の第１部分集合を備えることができ、このインストール・ファイルは、デバイスにおけるどの動作がシステム規模の影響を有するか、そしてどの動作が当該デバイスにローカルな影響を有するかに関する情報１０１０を備えている。この媒体は、デバイスのコンフィギュレーション空間、メモリー・マップドＩ／Ｏ空間、およびＩ／Ｏ空間についての属性の少なくとも１つのマップを作るための命令の第２部分集合１０１２を備えており、少なくとも１つのマップと関連のある各ページまたは各ビットが、仮想マシンにマッピングされており、ビットの静止ページを仮想マシンにおいてデバイスの状態として提示することができる。この媒体は、前記受け取ったインストール・ファイルに基づいて少なくとも１つのマップを収容するための命令の第３部分集合１０１４、およびデバイスへのアクセスを管理するために少なくとも１つのマップを用いるための命令の第４部分集合１０１６を備えている。尚、本明細書において開示する種々の他の態様を把握するために、追加の命令集合も用いることができ、現在開示している３つの命令の部分集合は、本開示によれば、その詳細が変化する可能性があることは、当業者には認められよう。
【００５４】
[0065]  例えば、命令は更に命令１０２０を含むことができ、少なくとも１つのマップと関連のある前記マップまたはページの中にある各ビットが、以下のプロパティの内１つを含む。読み取りのみ、常に０を読み取る、常に１を読み取る、読み取り−書き込み、１の書き込みをクリアし、０の書き込みのみを残す、１の書き込みをセットし、０の書き込みのみを残す、０の書き込みをクリアし、１の書き込みのみを残す、０の書き込みをセットし、１の書き込みのみを残す、最初の読み取りの後０にクリアする、最初の書き込みの後１にセットする。
【００５５】
[0066]  再度、一例として、命令は、更に、コンフィギュレーション空間のメモリーから除外された任意のメモリーについての所定のデーター、またはメモリー・マップドＩ／Ｏ空間のマップから除外された任意のメモリーについての所定のデーターを、前記任意のメモリーに収容するための命令１０２１を含むことができ、所定のデーターは所定のデバイス１０２２に対応する。更に、命令は、除外されたメモリーのページ内においてビットを定めるための命令１０２３、および傍受を受け取り、ビットが定められたページを用いて傍受を処理するための命令１０２４を含むことができる。インストール・ファイルは、デバイスの販売業者によって提供されるＩＮＦであり、オプションとしてディジタル署名することができる（１０２６）。
【００５６】
[0067]  前述のように、本発明の態様は、プログラミングされたコンピューターにおいて実行することができる。図１ｃおよび以下の論述は、本開示の態様を実現することができる適した計算環境について端的な説明を行うことを意図している。尚、図１のコンピューター・システムは、実施形態によっては、図１ａおよび図１ｂの種々の態様を実施できることを、当業者は認めることができよう。これらの実施形態例では、サーバーおよびクライアントは、図１ｃにおいて記載するコンポーネントの一部または全部を含むことができ、実施形態によっては、サーバーおよびクライアントの各々が、本開示の特定の態様をインスタンス化するように構成された回路を含むこともできる。
【００５７】
[0068]  回路(circuitry)という用語は、本開示全体において用いられる場合、特殊化されたハードウェア・コンポーネントを含むことができる。同じまたは他の実施形態において、回路は、ファームウェアまたはスイッチによって機能（１つまたは複数）を実行するように構成されているマイクロプロセッサーを含むことができる。同じまたは他の実施形態例において、回路は、１つ以上の汎用処理ユニットおよび／またはマルチコア処理ユニット等を含むことができ、これらは、機能（１つまたは複数）を実行するように動作可能なロジックを具体化したソフトウェア命令がメモリー、例えば、ＲＡＭおよび／または仮想メモリーにロードされるときに構成を設定することができる。回路がハードウェアおよびソフトウェアの組み合わせを含む実施形態例では、実施者(implementer)はロジックを具体化するソース・コードを書くことができ、このソース・コードをコンパイルしてマシン読み取り可能コードにし、これを汎用処理ユニット（１つまたは複数）によって処理することができる。
【００５８】
[0069]  図１ｃを参照すると、計算システムはコンピューター２０等を含むことができる。コンピューター２０は、処理ユニット２１、システム・メモリー２２、およびシステム・バス２３を含む。システム・バス２３は、システム・メモリーを含む種々のシステム・コンポーネントを処理ユニット２１に結合する。システム・バス２３は、数種類のバス構造の内任意のものでよく、メモリー・バスまたはメモリー・コントローラ、周辺バス、および種々のバス構造の内任意のものを用いるローカル・バスを含む。システム・メモリーは、リード・オンリ・メモリー（ＲＯＭ）２４およびランダム・アクセス・メモリー（ＲＡＭ）２５を含む。基本入出力システム２６（ＢＩＯＳ）は、起動中のように、コンピューター２０内にあるエレメント間における情報伝送を補助する基本的なルーティンを含み、ＲＯＭ２４内に格納されている。更に、コンピューター２０は、図示しないハード・ディスクからの読み取りおよびこれへの書き込みを行なうハード・ディスク・ドライブ２７、リムーバブル磁気ディスク２９からの読み取りおよびこれへの書き込みを行なう磁気ディスク・ドライブ２８、ならびにＣＤ  ＲＯＭまたはその他の光媒体のようなリムーバブル光ディスク３１からの読み取りおよびこれへの書き込みを行なう光ディスク・ドライブ３０を示す。実施形態例によっては、本発明の態様を具体化するコンピューター実行可能命令を、ＲＯＭ２４、ハード・ディスク（図示せず）、ＲＡＭ２５、リムーバブル磁気ディスク２９、光ディスク３１、および／または処理ユニット２１のキャッシュに格納することができる。ハード・ディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれ、ハード・ディスク・ドライブ・インターフェース３２、磁気ディスク・ドライブ・インターフェース３３、および光ドライブ・インターフェース３４によって、システム・バス２３に接続されている。これらのドライブおよびそれらに関連するコンピューター読み取り可能媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびコンピューター２０のための他のデーターの不揮発性格納に備えている。本明細書において記載した環境ではハード・ディスク、リムーバブル磁気ディスク２９、およびリムーバブル光ディスク３１を採用したが、磁気カセット、フラッシュ・メモリー・カード、ディジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリー（ＲＡＭ）、リード・オンリ・メモリー（ＲＯＭ）等のような、コンピューターによってアクセス可能なデーターを格納することができる、他のタイプのコンピューター読み取り可能媒体も、本動作環境において用いることができることは、当業者には認められてしかるべきである。
【００５９】
[0070]  ハード・ディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５には、複数のプログラム・モジュールを格納することができ、これらのプログラム・モジュールには、オペレーティング・システム３５、１つ以上のアプリケーション・プログラム３６、他のプログラム・モジュール３７、およびプログラム・データー３８が含まれる。ユーザは、キーボード４０およびポインティング・デバイス４２のような入力デバイスを通じて、コマンドおよび情報をコンピューター２０に入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディスク、スキャナー等を含むことができる。これらおよび他の入力デバイスは、多くの場合、システム・バスに結合されているシリアル・ポート・インターフェース４６を介して処理ユニット２１に接続されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）のような、他のインターフェースによって接続することもできる。また、ディスプレイ４７または他のタイプのディスプレイ・デバイスも、ビデオ・アダプター４８のようなインターフェースを介して、システム・バス２３に接続することができる。ディスプレイ４７に加えて、コンピューターは、通例、スピーカーおよびプリンターのような、他の周辺出力デバイス（図示せず）も含む。また、図１のシステムは、ホスト・アダプター５５、スモール・コンピューター・システム・インターフェース（ＳＣＳＩ）バス５６、およびＳＣＳＩバス５６に接続されている外部記憶デバイス６２も含む。
【００６０】
[0071]  コンピューター２０は、リモート・コンピューター４９のような、１つ以上のリモート・コンピューターへの論理接続を用いて、ネットワーク型環境においても動作することができる。リモート・コンピューター４９は、他のコンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイス、または他の一般的なネットワーク・ノードとすることができ、通例、コンピューター２０に関して先に説明したエレメントの多くまたは全てを含むことができるが、図１ｃにはメモリー記憶デバイス５０しか示されていない。図１に図示されている論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）５１およびワイド・エリア・ネットワーク（ＷＡＮ）５２を含むことができる。このようなネットワーキング環境は、事務所、企業規模のコンピューター・ネットワーク、イントラネットおよびインターネットにおいては、極一般的である。
【００６１】
[0072]  ＬＡＮネットワーキング環境で用いる場合、コンピューター２０は、ネットワーク・インターフェースまたはアダプター５３を介してＬＡＮ５１に接続する。ＷＡＮネットワーキング環境で用いる場合、コンピューター２０は、通例、モデム５４、またはインターネットのようなワイド・エリア・ネットワーク５２を通じて通信を確立するその他の手段を含む。モデム５４は、内蔵でも外付けでもよく、シリアル・ポート・インターフェース４６を介してシステム・バス２３に接続することができる。ネットワーク型環境では、コンピューター２０に関して図示したプログラム・モジュール、またはその一部は、離れたメモリー記憶装置に格納することもできる。尚、図示したネットワーク接続は一例であり、コンピューター間において通信リンクを確立する他の手段を用いてもよいことは認められよう。更に、本発明の複数の実施形態は特にコンピューター・システムに非常に適しているが、本文書は、本開示をこのような実施形態に限定することを意図するものは何もない。
【００６２】
[0073]  以上の詳細な説明では、例および／または動作図によって、システムおよび／またはプロセスの種々の実施形態を明記した。このようなブロック図、および／または例が１つ以上の機能および／または動作を含む限り、このようなブロック図、または例における各機能および／または動作は、広範囲のハードウェア、ソフトウェア、ファームウェア、または事実上その任意の組み合わせによって、個々におよび／または集合的に実現できることは、当業者には言うまでもないであろう。
【００６３】
[0074]  最後に、種々の図に示すように、好ましい態様と関連して本開示について説明したが、他の同様の態様も用いることもでき、本開示から逸脱することなく、それと同じ機能を実行するために、記載した態様に対して変更や追加を行うこともできることは言うまでもない。例えば、本開示の種々の態様では、仮想マシンと関連のあるメモリー位置を支持するハードウェアを、支持メカニズムと交換するための種々のメカニズムを開示した。しかしながら、これらの記載した態様と同等の他のメカニズムも、本明細書における教示によって想起されよう。したがって、本開示はいずれの１つの態様にも限定されることはなく、むしろ添付した特許請求の範囲にしたがってその幅(breadth)および範囲を解釈すべきである。 
【図１ａ】
0005584220.tif 000002
【図１ｂ】
0005584220.tif 000003
【図１ｃ】
0005584220.tif 000004
【図２】
0005584220.tif 000005
【図３】
0005584220.tif 000006
【図４】
0005584220.tif 000007
【図５】
0005584220.tif 000008
【図６】
0005584220.tif 000009
【図７】
0005584220.tif 000010
【図８】
0005584220.tif 000011
【図９】
0005584220.tif 000012
【図１０】
0005584220.tif 000013