(57)【特許請求の範囲】
【請求項１】
ハードウェア・デバイスが計算環境から除去されたときにおいても、仮想マシン内に存在する前記ハードウェア・デバイスに対応するドライバーが、前記ハードウェア・デバイスに対応するメモリー・マップド入力／出力（ＭＭＩＯ）エリアへアクセスすることを可能とする、コンピューターにより実行される方法であって、
前記計算環境が、前記コンピューターと前記ハードウェア・デバイスを含み、
前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアは、ＲＡＭが存在することができる前記コンピューターのアドレス空間に存在し、前記ハードウェア・デバイスは、前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアに存在するハードウェア制御インターフェースを介して制御されるものであって、
前記方法が、
前記コンピューターが、前記ハードウェア・デバイスが前記計算環境から除去されたときに、前記ハードウェア・デバイスの機能と前記ハードウェア・デバイスに対応する前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアの前記ハードウェア制御インターフェースをエミュレートするよう作用可能である、ステップと、
を含む、方法。
【請求項２】
請求項１に記載の方法において、前記仮想マシンには排他的に前記ハードウェア・デバイスが割り当てられる、方法。
【請求項３】
請求項１に記載の方法において、前記仮想マシンが、前記ハードウェア・デバイスを少なくとも１つの他の仮想マシンと共有する、方法。
【請求項４】
請求項１から３のいずれかに記載の方法であって、更に、前記コンピューターが、前記ハードウェア・デバイスが除去されるというメッセージを受け取ってから第１時間期間の経過後、前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアの前記ハードウェア制御インターフェースを使用するのを停止するように、前記ドライバーを構成するステップを含み、該ステップは、前記ハードウェア制御インターフェース内のハードウェア・デバイスの存在値を存在から不在に変更することを含み、前記第１時間期間が前記ドライバーが前記ハードウェア制御インターフェースを介して前記ハードウェア・デバイスに対して行う制御を完了するための平均時間を有する、方法。
【請求項５】
請求項１から４のいずれかに記載の方法であって、更に、前記コンピューターが、前記ハードウェア・デバイスが除去されるというメッセージを受け取ってから第２時間期間中前記ハードウェア・デバイスの前記機能を使用し続けることができるように前記ドライバーを構成するステップを含む、方法。
【請求項６】
請求項１から５のいずれかに記載の方法において、前記仮想マシンが、ペアレント仮想マシンのチャイルド仮想マシンである、方法。
【請求項７】
請求項１から６のいずれかに記載の方法であって、
前記コンピューターが、前記ハードウェア・デバイスが前記計算環境から除去されたときに、前記ハードウェア・デバイスの機能と前記ハードウェア・デバイスに対応する前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアの前記ハードウェア制御インターフェースをエミュレートするよう作用可能である、ステップが、
前記仮想マシンの仮想プロセッサーを一時停止するステップと、
前記仮想マシンのアドレス空間の中の前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアを前記ハードウェア制御インターフェースにマッピングするマッピングを除去することによって、前記ハードウェア制御インターフェースを前記仮想マシンから除去するステップと、
前記仮想マシンのメモリーに、前記ハードウェア・デバイスの機能と前記ハードウェア・デバイスに対応する前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアの前記ハードウェア制御インターフェースをエミュレートした挙動を設定するステップと、
前記仮想マシンのアドレス空間の中の前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアを前記エミュレートした挙動が設定された前記仮想マシンのメモリーにマッピングするステップと、
前記仮想マシンの前記仮想プロセッサーの一時停止を解除するステップと、
前記ドライバーが前記ハードウェア制御インターフェースにアクセスし終えたことを報告したとき、前記エミュレートした挙動を除去するステップと、
を含む、方法。
【請求項８】
請求項１〜７のいずれか一項に記載の方法を実行するためのプログラムを記録した記録媒体。
【請求項９】
ハードウェア・デバイスがシステムから除去されたときにおいても、仮想マシン内に存在する前記ハードウェア・デバイスに対応するドライバーが、前記ハードウェア・デバイスに対応するメモリー・マップド入力／出力（ＭＭＩＯ）エリアへアクセスすることを可能とするように構成されたシステムであって、
少なくとも１つのプロセッサー、前記ハードウェア・デバイス、前記少なくとも１つのプロセッサーに対し通信できるように結合された少なくとも１つのメモリーと、
を含み、
前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアは、ＲＡＭが存在することができる前記システムのアドレス空間に存在し、前記ハードウェア・デバイスは、前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアに存在するハードウェア制御インターフェースを介して制御されるものであって、
前記システムが、前記ハードウェア・デバイスが前記システムから除去されたときに、前記ハードウェア・デバイスの機能と前記ハードウェア・デバイスに対応する前記メモリー・マップド入力／出力（ＭＭＩＯ）エリアの前記ハードウェア制御インターフェースをエミュレートするよう作用可能である、
コンピューター実行可能命令が前記メモリーに格納されている、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  ここに開示する主題は、計算の分野に関し、更に特定すれば、コンピューターの仮想化に関するが、仮想化は非限定的分野の一例に過ぎない。
【従来技術】
【０００２】
[0002]  ハイパーバイザー(hypervisor)のような仮想マシン・モニターは、仮想マシンを作成するプログラムであり、各仮想マシンは、仮想化されたハードウェア・リソースを有し、これらのリソースは、基礎となる物理的ハードウェア・リソースによって支持することができる。ハードウェア制御インターフェースを直接仮想マシンに割り当てる場合、その仮想マシンには、メモリー・アクセス（レジスタ、カード上ＲＡＭ等への）と思われるようなものを通じて、ハードウェアの直接制御が与えられるのが通例である。しかしながら、仮想マシンがハードウェア制御インターフェースを放棄する要求に対して適時に応答しない場合、最終的には仮想マシンからハードウェア制御インターフェースを除去することが必要となる場合もあり得る。この手法に伴う問題は、インターフェースを除去するときに、仮想マシンにおけるデバイス・ドライバーがハードウェア制御インターフェースを使用している最中であることもあり得ることであり、したがって仮想マシンにおいて関連したドライバーが、以前にはハードウェアによって支持されていたメモリー位置から読み取ろうとしたときに、予期しなかった値を受けることがあり得ることである。例えば、予期せずにメモリー・アクセスを失うことによって、バイト毎に０ｘＦＦと読まれるメモリー位置が放置される虞れがある。予期せぬ値は、チャイルド・ドライバーがクラッシュする、無限ループに入る、または停頓する原因となる可能性があり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]  別の問題は、任意の２つの命令の間にある境界において仮想プロセッサーを一時停止させる可能性があることであり、このような任意の命令境界のいずれにおいてもハードウェアの除去を扱うドライバーを書き込み検査することが困難になる。実在の(real)物理プロセッサーは、命令が素早く実行され割り込みがないモードで動作するのが通常である。つまり、当技術分野では、前述の問題を解決するために他の技法が求められている。
【課題を解決するための手段】
【０００４】
[0004]  仮想マシンと関連したメモリー位置を支持するハードウェアを、支持メカニズムと交換するための種々の方法およびシステムを、本明細書において開示する。この支持メカニズムは、仮想マシンにおいてドライバーにとって都合のよいデーターをメモリー位置が収容しているように思わせることができ、通例、メモリーが読み出されたならばハードウェアが戻すであろう値を含む。  このような支持メカニズムを設けることによって、ドライバーはハードウェアの除去をチェックする頻度を減らすことができ、ドライバーが書き込みおよび読み取りを行うのが一層容易となる。したがって、仮想マシンから最後に除去されたハードウェアと同等のハードウェアを全く含まない異なる物理マシンに仮想マシンが移動しても、メモリー位置から戻されるデーター・イメージは仮想マシンと共に移動することができる。
【０００５】
[0005]  以上のことに加えて、本開示の一部をなす特許請求の範囲、図面、および本文には、他の態様についても記載する。尚、本開示の１つ以上の種々の態様は、本開示の本明細書において参照した態様を実施するための回路および／またはプログラミングを含むがこれらには限定されないことは、当業者には認めることができよう。これらの回路および／またはプログラミングは、システム設計者の設計選択に応じて本明細書において参照する態様を実施するように構成されているハードウェア、ソフトウェア、および／またはファームウェアの事実上あらゆる組み合わせとすることができる。
【０００６】
[0006]  尚、この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられていることは記してしかるべきである。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定する際に補助として用いられることを意図するのでもない。
【図面の簡単な説明】
【０００７】
[0007]  以上の摘要、および以下の詳細な説明は、添付図面と合わせて読むと一層深く理解することができる。本開示を例示するために、本開示の種々の態様を示す。しかしながら、本開示は示される具体的な態様に限定されるのではない。以下の図面が含まれる。
【図１ａ】図１ａは、複数の仮想プロセッサーおよび対応するゲスト・オペレーティング・システムを備えている、複数の仮想マシンがある仮想マシン環境を示す。これらの仮想マシンは、スケジューラーおよび他のコンポーネントを備えることができる仮想化レイヤーによって維持されており、この仮想化レイヤーが複数の仮想マシンのハードウェアを仮想化する。
【図１ｂ】図１ｂは、コンピューター・システムにおける仮想化環境のためのハードウェアおよびソフトウェア・アーキテクチャの論理階層(layering)を表す図を示す。
【図１ｃ】図１ｃは、本開示の態様を実現することができるコンピューター・システムの一例を示す。
【図２】図２は、仮想化計算システムの一例を示す。
【図３】図３は、代わりの仮想化計算システムを示す。
【図４】図４は、ペリフェラル・コンポーネント相互接続（ＰＣＩ）デバイスに関する場合の入力／出力（Ｉ／Ｏ）空間およびメモリー・マップドＩ／Ｏ（ＭＭＩＯ：memory mapped I/O)を表すシステム図の一例を示す。
【図５】図５は、ランダム・アクセス・メモリー（ＲＡＭ）が存在することができるアドレス空間を示す図の例である。
【図６】図６は、仮想マシン環境内に存在するドライバーのハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持するための動作手順の一例を示す。
【図７】図７は、仮想マシン環境内に存在するドライバーのハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持するための動作手順の一例を示す。
【図８】図８は、仮想マシン環境内に存在するドライバーのハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持するための動作手順の一例を示す。
【図９】図９は、仮想マシン環境内に存在するドライバーのハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持するための動作手順例を示す。
【図１０】図１０は、仮想マシン環境内に存在するドライバーのハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持するための動作手順例を示す。
【図１１】図１１は、先に図１から図１０に関して論じたコンピューター実行可能命令を保つコンピューター読み取り可能媒体を示す。
【発明を実施するための形態】
【０００８】
一般条件における仮想マシン
[0021]  以下の説明および図面において、本発明の種々の実施形態の完全な理解を得るために、一定の具体的な詳細を明記する。計算およびソフトウェア技術と関連のあることが多いある種の周知の詳細については、本発明の種々の実施形態を不必要に曖昧にすることを避けるために、以下の開示では明記しないこととする。更に、当業者は、以下に説明する詳細の内１つ以上がなくても、本発明の他の実施形態を実施できることを、当業者には理解できよう。最後に、以下の開示においてはステップおよびシーケンスを参照して種々の方法について説明するが、そのような説明は、本発明の実施形態の明確な実施態様を規定するためであり、これらのステップおよびステップのシーケンスが本発明を実施するために必須であると捉えてはならない。
【０００９】
[0022]  尚、本明細書において説明する種々の技法は、ハードウェアまたはソフトウェアによって、そして適切である場合には、双方の組み合わせによって実現できることは言うまでもない。つまり、本発明の方法および装置、あるいはそのある種の態様または部分は、フロッピー・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、または任意の他のマシン読み取り可能記憶媒体というような、有形媒体に具体化されたプログラム・コード（即ち、命令）という形態をなすことができる。そして、このプログラム・コードをコンピューターのようなマシンにロードしそれによって実行すると、そのマシンは本発明を実施する装置となる。プログラマブル・コンピューターにおけるプログラム・コード実行の場合、計算機は、一般に、プロセッサー、このプロセッサーによって読み取り可能な記憶媒体（揮発性および不揮発性メモリーおよび／または記憶エレメントを含む）、少なくとも１つの入力デバイス、ならびに少なくとも１つの出力デバイスを含む。１つ以上のプログラムは、例えば、ＡＰＩ、再利用可能な制御部等の使用によって、本発明と関連付けて説明するプロセスを実現または利用することができる。このようなプログラムは、好ましくは、コンピューター・システムと通信するために、高度手順プログラミング言語またはオブジェクト指向プログラミング言語で実装される。しかしながら、プログラム（１つまたは複数）は、望ましければ、アセンブリまたは機械語でも実装することができる。いずれの場合でも、言語はコンパイラまたはインタプリタ言語であればよく、ハードウェアの実施態様と組み合わせてもよい。
【００１０】
[0023]  図１ａは、複数の仮想マシン１２０、１２１を有する仮想マシン環境１００を示す。仮想マシン１２０、１２１は、複数の仮想プロセッサー１１０、１１２、１１４、１１６、および対応するゲスト・オペレーティング・システム１３０、１３２を備えている。仮想マシン１２０、１２１は、スケジューラー１４２および他のコンポーネント（図示せず）を備えることができる仮想化レイヤー１４０によって維持されており、この仮想化レイヤー１４０は、複数の仮想マシン１２０、１２１に合わせてハードウェア１５０を仮想化する。複数の仮想プロセッサー１１０、１１２、１１４、１１６は、基礎となるハードウェア物理プロセッサー１６０、１６２の仮想的な相当物となる。
【００１１】
[0024]  図１ｂは、コンピューター・システムにおける仮想化環境に合わせたハードウェアおよびソフトウェア・アーキテクチャの論理レイヤリングを表す図である。図１ｂにおいて、仮想化プログラム１８０は、物理ハードウェア・アーキテクチャ１８２において直接または間接的に実行する。仮想化プログラム１８０は、（ａ）ホスト・オペレーティング・システムと共に実行する仮想マシン・モニター、（ｂ）ハイパーバイザー・コンポーネントを有するホスト・オペレーティング・システムであって、ハイパーバイザー・コンポーネントが仮想化を実行する、ホスト・オペレーティング・システム、（ｃ）ハードウェア、または（ｄ）マイクロ・コードとすることができる。また、仮想化プログラムは、任意のオペレーティング・システムとは別個に実行するハイパーバイザーであってもよい。言い換えると、ハイパーバイザー仮想化プログラムは、いずれのオペレーティング・システムの一部として実行する必要はなく、いずれのオペレーティング・システムと共に実行する必要もない。ハイパーバイザー仮想化プログラムは、代わりに、「ルート・パーティション」(root partition)を含むあらゆるオペレーティング・システムの「下で」実行することができる。仮想化プログラム１８０は、ゲスト・ハードウェア・アーキテクチャ１７９）このコンポーネントは「パーティション」または「仮想マシン」であるという事実を示すために、破線で示されている）を仮想化する。即ち、実際には存在しないが代わりに仮想化プログラム１８０によって仮想化されているハードウェアである。ゲスト・オペレーティング・システム１７６は、ゲスト・ハードウェア・アーキテクチャ１７８において実行し、ソフトウェア・アプリケーション１７４がゲスト・オペレーティング・システム１７６において実行することができる。図１ｂの仮想化動作環境では、ソフトウェア・アプリケーション１７４が、ホスト・オペレーティング・システムやハードウェア・アーキテクチャ１８２とは一般に互換性のないオペレーティング・システムにおいて実行するように構成されているかのように、ソフトウェア・アプリケーション１７４はコンピューター・システムにおいて実行することができる。
【００１２】
[0025]  仮想マシンは、通例、オペレーティング・システム全体、および１組のアプリケーションを内蔵し、これらのアプリケーションが一緒になって多くのプロセスを構成する。仮想マシンのコンテキストでは、これらのプロセス全体を「ワークロード」または「プロセス」と呼ぶことができる。本開示では、「プロセス」および「ワークロード」という用語は、仮想マシンのコンテキストでは相互交換可能に用いることができ、「プロセス」とは仮想マシンにおいてインスタンス化することができるシステムおよびアプリケーションの全てを含む複数のプロセスに言及できることは、当業者には容易に理解できよう。
【００１３】
[0026]  次に、図２は、物理コンピューター・ハードウェア２０２の直接上(above)で実行するホスト・オペレーティング・システム（ホストＯＳ）ソフトウェア・レイヤー２０４を備えている仮想化計算システムを示す。ここで、ホストＯＳ２０４は、オペレーティング・システムＡ２１２およびＢ２１４による使用のために、それぞれ、インターフェースをパーティションＡ２０８およびＢ２１０に露出することによって、物理コンピューター・ハードウェア２０２のリソースへのアクセスを与える。これによって、ホストＯＳ２０４が、その上で実行するオペレーティング・システム・レイヤー２１２および２１４に気付かれずに(unnoticed)動作することが可能になる。この場合も、仮想化を実行するために、ホストＯＳ２０４は、ネーティブ仮想化能力を有する、特別に設計されたオペレーティング・システムとするとよく、あるいは仮想化を実行するためのハイパーバイザー・コンポーネント（図示せず）が組み込まれた標準的なオペレーティング・システムであってもよい。
【００１４】
[0027]  再度図２を参照すると、ホストＯＳ２０４の上には、２つのパーティション、即ち、例えば、仮想化インテル３８６プロセッサーとすることができるパーティションＡ２０８、および例えば、モトローラ６８０Ｘ０ファミリー・プロセッサーの内の１つの仮想化バージョンとすることができるパーティションＢ２１０である。各パーティション２０８および２１０の中には、それぞれ、ゲスト・オペレーティング・システム（ゲストＯＳ）Ａ２１２およびＢ２１４がある。ゲストＯＳ  Ａ２１２の上で実行するのは、２つのアプリケーションＡ１  ２１６およびアプリケーションＡ２  ２１８であり、ゲストＯＳ  Ｂ２１４の上で実行するのは、アプリケーションＢ１  ２２０である。
【００１５】
[0028]  図２に関して、パーティションＡ２０８およびパーティションＢ２１４（破線で示されている）が仮想化コンピューター・ハードウェア表現であり、ソフトウェア構成としてのみ存在できることを記するのは重要である。これらは、特殊な仮想化ソフトウェア（１つまたは複数）の実行によって可能になる。パーティションＡ２０８およびパーティションＢ２１０をゲストＯＳ  Ａ２１２およびゲストＯＳ  Ｂ２１４にそれぞれ提示するだけでなく、ゲストＯＳ  Ａ２１２およびゲストＯＳ  Ｂ２１４が実在の物理コンピューター・ハードウェア２０２と間接的に相互作用するために必要なソフトウェア・ステップの全てを実行する。
【００１６】
[0029]  図３は、代わりの仮想化計算システムを示し、ここでは、ホスト・オペレーティング・システム２０４”と共に実行する仮想マシン・モニター（ＶＭＭ）２０４によって仮想化が実行される。ある種の場合、ＶＭＭ２０４’は、ホスト・オペレーティング・システム２０４”の上で実行し、ホスト・オペレーティング・システム２０４”を通じてのみコンピューター・ハードウェア２０２と相互作用するアプリケーションとなることもある。他の場合では、図３に示すように、ＶＭＭ２０４’は、代わりに、あるレベルではホスト・オペレーティング・システム２０４”を通じてコンピューター・ハードウェア２０２と間接的に相互作用する部分的に独立したソフトウェア・システムを備えることができるが、他のレベルでは、ＶＭＭ２０４’は、コンピューター・ハードウェア２０２（ホスト・オペレーティング・システムが直接コンピューター・ハードウェアと相互作用する方法と同様）と直接相互作用する。そして更に別の場合では、ＶＭＭ２０４’が完全に独立したソフトウェア・システムを備えることもでき、ホスト・オペレーティング・システム２０４”を利用することなく（コンピューター・ハードウェア２０２の使用を調整しコンフリクト等を回避するために、ホスト・オペレーティング・システム２０４”と相互作用することには変わりないが）全てのレベルでコンピューター・ハードウェア２０２と直接相互作用する（ホスト・オペレーティング・システムがコンピューター・ハードウェアと直接相互作用する方法と同様）。
【００１７】
[0030]  図４は、ＰＣＩデバイスに関する場合のＩ／Ｏ空間およびＭＭＩＯを表すシステム図の一例を示す。ＰＣＩ仕様書では、３つのアドレス空間、即ち、メモリー、Ｉ／Ｏ、およびコンフィギュレーションが定められている。ＭＭＩＯという用語は、本明細書では、ＰＣＩ用語の「メモリー」をＲＡＭと区別するために、ＰＣＩ仕様書において定められている「メモリー」を指すために用いられる。図４は、システム・バス４００、物理メモリー４１０、プロセッサー４２０、レジスタ４６０を有するＰＣＩデバイス４３０、およびホスト−ＰＣＩブリッジ・デバイス４４０を含む。ホスト−ＰＣＩブリッジ・デバイス４４０に取り付けられているのはＰＣＩバス４５０であり、ＰＣＩバスに取り付けられているのはＰＣＩデバイス４３０である。ＰＣＩデバイス４３０は、デバイスを制御するためにシステム・プロセッサーから読み取られそして書き込まれなければならないメモリー位置において、１つ以上のレジスタ４６０を内蔵する。物理メモリー・アドレス空間は、別のアドレス空間とすることができるＩＯポート空間とは別個であってもよいことが分かる。ＩＯリソースをＭＭＩＯリソースに変換することができ、これは、ＩＯポート・アドレス空間をメモリー・マップドＩＯポート・アクセスを通じてマッピングできる１つの理由となる。
【００１８】
[0031]  図５を参照すると、ＲＡＭが存在することができるアドレス空間５００を示す図が描かれている。図示のように、メモリー・マップド入力／出力（ＭＭＩＯ）エリア５１０が同じアドレス空間にも存在することができる。典型的な最近のアドレス空間に基づくハードウェア制御インターフェースが、このアドレス空間のＭＭＩＯに存在する。システムの物理アドレス空間は、一般に、仮想コンピューター・システムの「物理」アドレス空間５００も指す「ゲスト物理アドレス空間」のように、物理コンピューター・システムの物理アドレス空間５００も指す。しかしながら、ゲスト物理アドレスは、仮想構造であるため、ゲスト物理アドレスは必ずしもＲＡＭの領域を占めるとは限らない。ハイパーバイザーは、ゲスト物理範囲の一部または全部を、実在のシステム物理アドレス空間内にマッピングすることができ、実際に頻繁にそうするのが慣例である。しかしながら、ハイパーバイザーが実行中の仮想マシンのスナップショットを撮るプロセスの中にあるときのように、どこにもマッピングされていないゲスト物理アドレス空間の範囲がある場合もあり得る。
【００１９】
[0032]  物理メモリー・アドレス空間５００は、ＩＯポート空間とは別である。この別のＩＯポート空間は、より古いデバイスを制御するために用いることができ、またより新たなデバイスを設定し構成するためにも用いることができる。これは、ＰＣＩコンフィギュレーション空間が通例ＩＯポート空間を通じてアクセスされるからである。更に、ＩＯポート空間アドレスは、通例、３２ビットや６４ビットではなく、１６ビットである。
【００２０】
[0033]  前述のパーティションを実現するためのこれらの変形は全て、単なる例示的な実施態様に過ぎず、本明細書では、本開示を任意のいずれかの仮想化態様に限定するように解釈すべきものはない。
物理ハードウェアのエミュレーションとの交換
[0034]  本明細書において開示する種々の実施形態において、仮想マシンと関連したメモリー位置を支持するハードウェアを、支持メカニズムと交換することもできる。この支持メカニズム(backing mechanism)は、そのメモリー位置を、仮想マシンにおいてドライバーが用いるデーターを含むように見えるものとして、提示することができる。このようなデーターは、通例、ハードウェアが実際に読まれたならばそのハードウェアが戻しているであろうものを表すことができる。このような支持メカニズムを設けることによって、ドライバーがハードウェアの除去をチェックする頻度を大幅に少なくすることができ、ドライバーを書くことおよび検査することが一層容易になる。メモリー位置から戻されるデーター・イメージ(data image)は、この場合、仮想マシンから最後に除去されたハードウェアと同等のハードウェアを内蔵していない異なる物理マシンに仮想マシンが移動する場合であっても、仮想マシンと一緒に移動する(travel)ことができる。
【００２１】
[0035]  一実施形態では、アドレス空間のハードウェア制御インターフェース部を、ハードウェアを仮想マシンから除去するときに仮想マシンにおいてドライバーに都合がよいデーターまたは挙動、あるいはドライバーによって要求されたデーターまたは挙動と交換することができる。種々の実施形態では、仮想マシンにおいてドライバーに都合がよいデーターおよび挙動は、仮想マシンを保存するとき、そのスナップショットを撮るとき、ライブ・マイグレーションが行われるとき(live-migrated)等では、仮想マシンと共に移動させることができる。仮想マシンを保存することができるのは、例えば、そのマシンが解体されるときである。
【００２２】
[0036]  例えば、スナップショットの撮影は、仮想マシン状態を最大限特徴付ける必要があるときに行うことができる。仮想マシンの状態は、特定の時点においてプロセスまたはトランザクションを定めるために必要なデーターを備えることができる。スナップショットは、１組の状態およびデーターが所望の時点にあったときのコピーを含むことができる。仮想マシン・セッションでは、マシン状態全体を支持ファイルにダンピング(dumping)することによって、システム全体のスナップショットを実行することができる。このダンピングの一部は、仮想マシンが実行している最中に、コピー・オン・ライト(copy-on-write)式に行うことができる。ライブ・マイグレーション(live-migration)は、異なる位置および環境間において仮想マシンを移すプロセスである。種々の実施形態において、コードおよびデーターを仮想マシンと共に移動させることができる。例えば、コードおよびデーターは、仮想マシン・ファイルにリンクされたファイルを構成することができる。データーおよび挙動は、仮想マシンが、データーおよび挙動がもはや必要とされないことを示すまで、仮想マシンの状態の一部となることができる。
【００２３】
[0037]  種々の実施形態において、特殊なメモリー領域を作成する場合がある。この特殊なメモリー領域は、仮想マシンがハードウェア制御インターフェースの一部であると見なすことができるが、実際には仮想化システムによって設けられる。この特殊なメモリー領域は、ハードウェア・インターフェースが現在利用可能か否か、またはハードウェア・インターフェースが除去されたか否か、仮想マシンが判断するために読み取ることができるメモリー位置を含むことができる。このようなメモリー読み取りは高速で実行することができ、したがって、仮想マシンにおけるドライバーが、必要に応じて、システム性能に影響を及ぼすことなく、ハードウェア・インターフェースの除去をチェックすることができる。
【００２４】
[0038]  仮想マシンに割り当てられるデバイスの部分または範囲は変化することができる。例えば、仮想マシンには、他の仮想マシンを除外して、デバイスの制御を与えることができる。あるいは、仮想マシンには、デバイスにおいて利用可能な複数のインターフェース間で、１つのハードウェア制御インターフェースのみを割り当てることもできる。
【００２５】
[0039]  以下で更に説明するように、本開示の種々の態様において、実在のハードウェア制御インターフェースをアドレス空間から除去した後におけるアドレス空間のハードウェア制御インターフェース部の使用期間を、異なる実施態様にしたがって変化させることができる。一実施形態では、仮想マシンにおけるドライバーは、実在のハードウェア制御インターフェースがアドレス空間から除去された後できるだけ早くハードウェア制御インターフェースの使用を停止するように構成することができる。他の実施形態では、仮想マシンにおけるドライバーは、実在のハードウェア制御インターフェースがアドレス空間から除去された後無期限にハードウェア制御インターフェースを用い続けることもできる。この実施形態は、更に、以下で説明するエミュレーション挙動を組み込むことができる。
【００２６】
[0040]  種々の実施形態において、ハードウェア制御インターフェースが以前に占有していたアドレス空間の部分の特定の挙動を、以下で更に説明するように実現することができる。このような静的データー表現と完全エミュレーション(full emulation)との間の中間的手法は、状態およびデーターを１つの仮想マシンから他の仮想マシンに持っていく際の容易性のために、望ましい場合がある。更に、このような手法が有利であると言えるのは、１つのハイパーバイザーから他のハイパーバイザーに外部でサード・パーティ・コード（例えば、ドライバー）を持っていくことを伴わないからである。
【００２７】
[0041]  一実施形態では、基本的挙動のビット・レベルのエミュレーションを実施することができる。実施形態例のいくつかには以下を含むことができる。
ｉ．      読み取りのみ。
【００２８】
ｉｉ．    常に０を読み取る
ｉｉｉ．  常に１を読み取る
ｉｖ．    書き込み−読み取り
ｖ．      １の書き込みをクリアし、０の書き込みのみを残す
ｖｉ．    １の書き込みをセットし、０の書き込みのみを残す
ｖｉｉ．  ０の書き込みをクリアし、１の書き込みのみを残す
ｖｉｉｉ．０の書き込みをセットし、１の買い込みのみを残す
ｉｘ．    最初の読み取りの後０にクリアする
ｘ．      最初の書き込みの後１にセットする
[0042]  他の実施形態では、ハードウェア・インターフェースを除去するときに、デバイスの完全エミュレーションを設けることができる。完全エミュレーションは、ハードウェア制御インターフェースが以前に占有していたアドレス空間に対する仮想マシン・アクセスのソフトウェアにおける、スクリプトによる処理またはプログラム型処理を含むことができる。
【００２９】
[0043]  尚、現在説明しているメカニズムは、仮想マシンから除去されるハードウェア制御インターフェースを代行する(proxying)任意のソフトウェア実装エミュレーションに関して概略的に説明するとよいことは、当業者には容易に認められよう。勿論、これらは単なる（したがって非限定的な）態様の例であり、加えて、本明細書において論じられる他の態様の内任意のもので補足または代用することもできる。
【００３０】
[0044]  ハードウェア制御インターフェースが存在するアドレス空間は、通例、ランダム・アクセス・メモリー（ＲＡＭ）が存在するアドレス空間と同じである。また、ハードウェア制御インターフェースは、入力／出力（ＩＯ）ポート空間およびＰＣＩコンフィギュレーション空間にも存在することができる。ハードウェア制御インターフェースがＲＡＭアドレス空間内にある場合、仮想マシン内にあるドライバーが、通常のメモリー・アクセス命令を用いて、このインターフェースにアクセスすることができる。ハードウェア制御インターフェースがＩＯポート・アドレス空間内にある場合、仮想マシン内にあるドライバーが、ＩＯポート・アクセス命令またはメモリー・マップドＩＯポート・アクセスを用いてこのインターフェースにアクセスすることができる。ハードウェア制御インターフェースがＰＣＩコンフィギュレーション空間内にある場合、仮想マシン内にあるドライバーが、または間接的にＯＳが、ＩＯポート・アクセス命令またはメモリー・マップドＩＯポート・アクセスによってこのインターフェースにアクセスすることができる。本明細補において開示する種々の実施形態は、ハードウェア制御インターフェースがＲＡＭと同じアドレス空間にあること、そしてハードウェア制御インターフェースが、メモリー読み取りおよび書き込みを用いてアクセスされることを想定している。ハードウェア制御インターフェースがＩＯポート・アドレス空間内にある実施形態では、ＩＮおよびＯＵＴ動作を、読み取りおよび書き込みの代わりに用いることができる。本開示は、アドレス空間にアクセスするために用いられるタイプまたは特定の命令には関係なく、アドレス空間に適用できることは、当業者には容易に認められよう。
【００３１】
[0045]  アドレス空間に基づくハードウェア制御インターフェースの仮想マシンへの直接的な割り当ては、通例、性能の理由から望ましいものである。アドレス空間に基づくハードウェア・デバイス制御インターフェースが直接仮想マシンに割り当てられる場合、仮想マシンのアドレス空間の一部を、ハードウェア・デバイス制御インターフェースによって占有されるシステムの物理アドレス空間の一部にマッピングすることもできる。このマッピングは、ソフトウェア、ハードウェア、またはこれら２つの組み合わせによって遂行することができる。一旦マッピングが確定されたなら、仮想マシンはハードウェア・デバイス制御インターフェースを通じてハードウェアを制御することができる。
【００３２】
[0046]  ホット・リムーバル(hot removal)とは、システムまたはサブシステムが動作している間におけるシステム・コンポーネントの予期しない除去である。アドレス空間に基づくハードウェア制御インターフェースの物理マシンからのホット・リムーバブルは、多くのシステムに存在することができる能力である。しかしながら、ホット・リムーバブルは、仮想マシンからのハードウェア制御インターフェースの除去には、通例受け入れられない。何故なら、仮想マシンでは、それを行うために任意の時間量を要することなく、要求されたときに、ハードウェア制御インターフェースを用いるのを停止するために、ハードウェア制御インターフェースを用いるドライバーを信頼することや完全に検査することができないからである。仮想マシンからハードウェア制御インターフェースを除去する前に、仮想マシンがそのハードウェア制御インターフェースを使い終えるまで待つことは、通例では受け入れられない。前述のように仮想マシンを待つとすると、除去に要するだけの時間を仮想マシンに与えることになり得るので、これは望ましくないのが通例である。インターフェースを除去する前に仮想マシンが必要なトランザクションを完了するために、タイムアウト期間を用いることができる。しかしながら、タイムアウトに到達し、仮想マシンからの同意なくしてハードウェアが除去されると、仮想マシン内にあるドライバーが後にハードウェアにアクセスしようとしたときに、仮想マシンが誤って応答したり、またはクラッシュする虞れがある。一般に、システムおよびコンポーネントの挙動の可変性および予測不能性のために、既知の安全なタイムアウト値を計算するのは困難である。加えて、正当に安全のあるタイムアウト値であっても、除去動作の期間に仮想マシンに不適当な制御が行われる虞れがある。
【００３３】
[0047]  種々の実施形態において、仮想マシンに割り当てられるデバイスに対する制御の範囲は変化することもあり得る。一実施形態では、この仮想マシンには、他の仮想マシンを除外して、デバイスの制御を与えることができる。あるいは、デバイスにおいて利用可能な１つよりも多いインターフェースの間で、１つのハードウェア制御インターフェースのみを仮想マシンに割り当てることもできる。いずれの場合でも、仮想化システムは、仮想マシンのための関連するアドレス空間の部分を仮想化することによって、デバイスの少なくとも一部のシステム・レベルの制御態様の制御を保持することができる。例えば、デバイスのＰＣＩコンフィギュレーション空間は、通例、仮想マシンが直接見ることができるフィールドを含む。また、ＰＣＩコンフィギュレーション空間は、最小限の仮想化で仮想マシンが直接書き込むことができるいくつかのフィールドも含むことができる。しかしながら、基準アドレス・レジスタ部のようなＰＣＩコンフィギュレーション空間のある種の部分は、仮想マシンに、他の仮想マシンを除外して、デバイス機能全体を割り当てる場合であっても、完全に仮想化しなければならない。ＰＣＩ研究専門委員会（ＳＩＧ：Special Interest Group)単一ルートＩ／Ｏ仮想化および共有使用によるＰＣＩ  ＩＯ仮想化をサポートするデバイスでは、ハードウェア自体が物理機能および仮想機能を設けることができる。仮想機能は、仮想マシンに割り当て可能に設計することができ、異なる仮想機能を異なる仮想マシンに割り当てることができ、複数の仮想マシンを同時に複数の仮想機能によって用いることができる。このように、本開示は、仮想マシンへの直接ハードウェア制御インターフェース割り当ての種々の粒度およびレベルに跨って実現できることを当業者は認めることができよう。
【００３４】
[0048]  本明細書において開示するのは、仮想マシンにおけるドライバーが後に仮想マシンのアドレス空間において除去された部分にアクセスするときに、仮想マシンにおけるドライバーが動作を継続することを可能にできるようにして、ハードウェア制御インターフェースを除去するための種々の方法およびシステムである。通常の動作または予期される動作を継続することによって、仮想マシンにおけるドライバーは、ハードウェアの除去によって生ずる、予期していなかった読み取り／書き込み動作による誤った挙動を回避することができる。ハードウェア制御インターフェースを除去するときにおける典型的な結果は、ハードウェア制御インターフェースによって占有されていた仮想マシン・アドレス空間の部分がマッピングされなくなることである。安全なハードウェア除去の結果の一例では、除去されたアドレス空間への書き込み動作を無視することができ、除去されたアドレス空間に読み取り動作は「１」のビットを返すことができる。
【００３５】
[0049]  一実施形態では、仮想マシンにおけるドライバーが、ハードウェア制御インターフェースを用いるトランザクションを完了するまで、ハードウェア制御インターフェースによって占有されていた仮想マシン・アドレス空間の部分を、仮想マシンにおけるドライバーにとって安全な挙動または都合のよい挙動にマッピングすることができる。ハードウェア制御インターフェースを、ドライバーにとって安全な挙動または都合のよい挙動にマッピングすることによって、実際のハードウェア制御インターフェースを、必要に応じて、仮想マシンにおけるドライバーを待つことなく、仮想マシンから除去することができる。更に、ドライバーによるハードウェア制御インターフェースにアクセスする試みの後に、仮想マシンにおけるドライバーがクラッシュしたり、または予期しなかった状態に入る危険性を大幅に低減して、ハードウェア制御インターフェースを除去することもできる。更に別の実施形態では、仮想マシン・アドレス空間のマッピングされている部分に対する交換挙動は、仮想マシンにおけるドライバーがハードウェア制御インターフェースを用いる試みを完了するというような時点まで、仮想マシンと関連付けられたままでいることもできる。
【００３６】
[0050]  以上で説明した交換挙動は、一般に種々の形態のエミュレーションを構成することができる。以下に、本開示にしたがって実現することができる挙動の例を示す。
１．ビット毎の挙動
ａ．読み取りのみ。この挙動では、ハードウェア制御インターフェースの除去の時点において、データーを決定することができ、その時点以降に仮想マシンによってデーターを変更することはできない。これによって、「常に０」／「常に１」領域のグルーピングを一層効率的に表現することができるようになる。
【００３７】
ｂ．読み取り時常に０。この挙動は、値が常に０であるときの読み取りのみのシナリオと同様にすることができる。
ｃ．読み取り時常に１。この挙動は、値が常に１であるときの読み取りのみのシナリオと同様にすることができる。
【００３８】
ｄ．読み取り−書き込み。この挙動では、ハードウェア制御インターフェースの除去の時点において、データーを最初に決定することができる。しかしながら、その時点以後に仮想マシンによってデーターを変更することができる。
【００３９】
ｅ．１の書き込みをクリアし、０の書き込みのみが残る。デバイスのハードウェアは、通知ビットがセットされたことをソフトウェアが承認することができるようにするために、通例、この種の挙動を用いる。ソフトウェアは、セットされた位置において１でメモリー書き込みを実行することによって、セットされたビットを承認することができる。この挙動の結果、通例、再度レジスタが読み出されるときに、ビットがクリアされることになる。
【００４０】
ｆ．１の書き込みをセットし、０の書き込みのみが残る。この場合、ハードウェアおよびソフトウェアは、ソフトウェアがハードウェアに通知するために、この種のビットを用いることができる（前述のシナリオ（ｅ）の逆）。
【００４１】
ｇ．０の書き込みをクリアし、１の書き込みのみが残る。これは、直前のシナリオの変形である。
ｈ．０の書き込みをセットし、１の書き込みのみが残る。これは、直前の２つのシナリオの変形である。
【００４２】
ｉ．最初の読み取りの後０にクリアする。場合によっては、ソフトウェアが読み取りを実行するという単なる動作(act)によってソフトウェアが通知を受信したことを、ハードウェアが推定できることもある。
【００４３】
ｊ．最初の読み取りの後１にセットする。これは、直前のシナリオの変形である。
２．エミュレーション−他の実施形態では、ハードウェア制御インターフェースによって以前に占有されていたアドレス空間への仮想マシンのアクセスのソフトウェアにおいて、スクリプトによる処理またはプログラム型処理を実施することができる。種々の実施形態において、限定エミュレーションおよび完全エミュレーションを実施することができる。限定エミュレーションでは、エミュレーションのレベルは、ドライバー・ソフトウェアが任意の保留中の動作を完了し、ハードウェア制御インターフェースがもはや存在しないと判断することができるまで、ドライバー・ソフトウェアとの連続(uninterrupted)トランザクションを維持するのに十分であればよい。エミュレーションのレベルは、実際にデバイスの機能を無期限に実行し続けるには十分でなくてもよい。完全エミュレーションでは、エミュレーションのレベルは、仮想マシン内にあるドライバーがその通常機能を実行し続けることを可能にすればよい。
【００４４】
[0051]  交換挙動および挙動の現在の状態は、仮想マシン内にあるドライバーが、ハードウェア制御インターフェースにアクセスすることを必要とするトランザクションを完了したことを報告するというような時点まで、仮想マシンの状態の一部として、仮想マシンと関連付け続けることができる。交換挙動は、仮想マシンが異なるホスト物理マシンに移動しても、または仮想マシンをディスクに保存し後の時点において再現する場合でも、仮想マシンと関連付け続けることができる。
【００４５】
[0052]  ハードウェア制御インターフェースは、ハードウェア制御インターフェースが十分に利用可能であり全機能を提供しているか否か、仮想マシンにおいて実行中のドライバーに示すデーター・エレメントを含む、メモリーの特殊領域によって増強することができる。このようなメモリーの特殊領域は、１つのメモリー・ページを構成することもできる。また、仮想マシン内において実行中のドライバーは、ハードウェア制御インターフェースが除去されたことを示す１つ以上のメッセージを受信することもできる。しかしながら、仮想マシンにおけるドライバーが、ドライバー・コードの実行における特定の時点までハードウェアが存在したか否かチェックする必要がある場合、ドライバー・コードは、このデーター・エレメントをチェックして、ドライバー・コードにおいてそのデーター・エレメントを読んだ時点まで、実在の機能によってハードウェア・インターフェースが支持されたか否か判断することができる。データー・エレメントの読み取りは、通例、高速動作であるので、仮想マシンにおけるドライバーは、過度の性能影響を受けずに、頻繁にチェックすることができる。仮想マシンにおけるドライバーは、一連のレジスタ読み取りを実行し、次いでハードウェア・インターフェースが未だ仮想マシンに割り当てられているか否か確認するためにチェックすることができる。割り当てられていない場合、ドライバーは読み取ったデーターを完全に無視することができる。しかしながら、レジスタの読み取りの後でもハードウェアが未だ仮想マシンと関連付けられていた場合、仮想マシンにおけるドライバーは、レジスタから読み取ったデーターが実際にはハードウェアから読み取られたのであって有効であると判断することができる。
【００４６】
[0053]  交換挙動が完全エミュレーションである場合、仮想マシンにおけるドライバーは、ハードウェア制御インターフェースを使い続けることができ、場合によっては無期限に用い続けることができる。あるいは、ドライバーは、都合のよい時点で（例えば、インターフェースへのアクセスを必要とするかもしれない保留中のトランザクションをドライバーが完了したとき）ハードウェア制御インターフェースの使用を中断することもできる。交換挙動が限定ハードウェア制御インターフェース・エミュレーションである場合、ドライバーは、ある時間期間の後（例えば、トランザクションが未だ保留中であっても、使用を安全に中断できるとき）ハードウェア制御インターフェースの使用を中断することもできる。通例、この時間期間は、ドライバーが所望のトランザクションを完了した後できるだけ早くすべきである。いずれの場合でも、同じハードウェア制御インターフェースと関連付けられたハードウェア・デバイスが実際にない異なる物理マシンに、仮想マシンが既に移動させられた後でも、仮想マシンにおけるドライバーは、ハードウェア制御インターフェースになおもアクセスすることができる。完全エミュレーションが設けられる場合、完全ハードウェア・エミュレーションを通じてデバイス機能を提供し続けるためには、同じ基礎となる記憶デバイス、ネットワーク、または他のリソースへの接続(connectivity)が必要となる場合もある。
【００４７】
[0054]  本開示は、デバイス全体の割り当ておよび再割り当てにも適用可能であることは、当業者には認められよう。更に、本開示は、一般に、限定なく、デバイスによって提供される複数のハードウェア制御インターフェース間において任意の特定のハードウェア制御インターフェースに適用することができる。本開示は、一般に、任意の特定のハードウェア制御インターフェース（または、完全エミュレーションの場合、ハードウェア制御インターフェースおよびデバイスの機能をエミュレートするために必要なステップ）をエミュレートするために必要な特定のステップに関係なく、適用することができる。
【００４８】
[0055]  以下に、本明細書において開示する方法の種々の実施形態を例示する非限定的な例を示す。一実施形態では、ハードウェアは、ハードウェア・インターフェースが除去されるときに仮想マシンが保存する必要がある状態をなにも保持しなくてもよい。１つの構成例は、パケットに基づいて動作し、パケットの逸失が容認可能なネットワーキング・インターフェースである。この場合、仮想マシンは、同じＭＡＣアドレスを用いる同じネットワークへの代替経路を有しても、有しなくてもよい。他の構成例では、この経路は、ＩＰアドレスのような、もっと高いレイヤーにおいて維持することができる。一実施形態では、以下のハードウェア除去ステップを採用することができる。
【００４９】
１．仮想マシンの仮想プロセッサーを一時停止する。
２．仮想マシンのアドレス空間の部分（メモリー領域）からハードウェア制御インターフェースにマッピングするマッピングを除去することによって、ハードウェア制御インターフェースを仮想マシンから除去する。
【００５０】
３．オプションとして、ハードウェア制御インターフェースから必要とされる任意のデーターを読み取る。
ａ．この例では、ハードウェアから読み取られるデーターは、仮想マシンにおけるドライバーのクラッシュを回避し、仮想マシンにおけるドライバーが無効な動作(actions)（例えば、無効のデーターを仮想マシンの残りの部分に配信する）を開始するのを防止するために必要なデーターに限定することができる。この限定されたデーターは、現在のレジスタ値等の内容を含むことができる。このデーターは、通例、パケット・データーを含む必要はないが、そのようなデーターが含まれてもよい。
【００５１】
４．エミュレートした挙動を設定する。
ａ．現在の例では、エミュレートされた挙動は、前述のビット毎挙動のリストからの挙動を、ビット毎に異なる可能性がある挙動と共に含むことができる。
【００５２】
ｂ．エミュレートされた挙動は、仮想マシンと関連付けていくことができ、仮想マシンにおけるドライバーが、ハードウェア制御インターフェースにアクセスする保留中の試みを完了したことを報告するまで、仮想マシンと共に移動することができる。
【００５３】
５．仮想マシンのアドレス空間の該当部分を、所望のエミュレートされた挙動にマッピングする。
６．ハードウェアがもはや存在しないことを示すために、特殊メモリー領域における「ハードウェア存在」値を変更する。
【００５４】
７．仮想マシンの仮想プロセッサーの一時停止を解除する。
８．オプションとして、ハードウェアが除去され、そのハードウェアにアクセスする試みを中断することを示すメッセージを、仮想マシンにおけるドライバーに送る。
【００５５】
９．最後に、仮想マシンにおけるドライバーは、当該ドライバーがハードウェア制御インターフェースにアクセスする試みを完了したことを報告することができる。この時点で、エミュレートされた挙動を仮想マシンから除去することができる。
【００５６】
[0056]  一実施形態では、ハードウェアは、仮想マシンが途絶なく実行し続けるために保存する必要がある状態情報を保持することができる。このような状態データーは、仮想マシンにおけるドライバーの便宜上必要とされるデーター以上であり、それを超える場合もある。一例を上げると、ネットワーキング・インターフェースが、接続に基づいて動作しており、接続が無損失である場合である。このような場合、肝要な(critical)データーが現在ハードウェア・デバイスに格納されているときであっても、接続を確立させ続け有効であり続けなければならない場合には、送信または受信データーが失われてはならない。この場合、仮想マシンは、同じＭＡＣアドレスを用いる同じネットワークへの代替経路を有する（そうでなければ、接続を保存する地点がなくなるであろう）と推定することができる。この場合、ハードウェアが除去されるので、ドライバーは、ハードウェアが除去される前に、接続状態データーをハードウェアから抽出することを試みることができることを、仮想マシンにおけるドライバーに通知することができる。仮想マシンにおけるドライバーは、次いで、ハードウェアを除去できるように、それを終了したときに報告することができる。このような通知は、できるだけ早く伝えることが望ましい。一実施形態では、この場合、以下のハードウェア除去ステップを採用することができる。
【００５７】
１．仮想化システムは、ハードウェア制御インターフェースが除去されるというメッセージを、仮想マシンにおけるドライバーに送ることができる。
２．仮想化システムは、所定時間または第１時間期間だけ、ドライバーがハードウェアからのデーター抽出を完了したという、仮想マシンにおけるドライバーからのメッセージを待つことができる。仮想化システムは、この所定時間が過ぎたとき、または仮想化システムが、ドライバーがハードウェアからのデーター抽出を完了したというメッセージをドライバーから受信したときに、次のステップに進むことができる。この時間期間は、一般に、例えば、個々のドライバーが用いる最もありふれたトランザクションを完了するための平均時間期間を推定することによって決定すればよい。
【００５８】
３．仮想マシンの仮想プロセッサーを一時停止する。
４．仮想マシンのアドレス空間の該当部分（メモリー領域）からハードウェア制御インターフェースにマッピングするマッピングを除去することによって、仮想マシンからハードウェア制御インターフェースを除去する。
【００５９】
５．ハードウェア制御インターフェースからあらゆる必要なデーターを読み取る。
ａ．この実施形態では、仮想マシンにおけるドライバーは、ハードウェア・デバイスからデーターを抽出するために所定の時間量を既に与えられていた。しかしながら、仮想マシンにおけるドライバーはデーター抽出を完了していない場合もある。何故なら、仮想化システムは、仮想マシンがそのプロセスを完了するまで無期限に待つのではなく、所定の時間期間が過ぎたときに、除去ステップを既に継続していることがあるからである。したがって、仮想マシンにおけるドライバーは、仮想プロセッサーが後に一時停止を解除されるときに、ハードウェア制御インターフェースを収容していた仮想マシンのアドレス空間の部分にアクセスする試みをなおも行うことができる。
【００６０】
ｂ．この実施形態では、ハードウェアから読み取られるデーターは、仮想マシンにおけるドライバーのクラッシュを回避し、仮想マシンにおけるドライバーが無効な動作（例えば、無効のデーターを仮想マシンの残りの部分に配信する）を開始するのを防止するために必要なデーターに限定することができる。この限定されたデーターは、現在のレジスタ値等の内容を含むことができる。このデーターは、通例、パケット・データーを含む必要はないが、そのようなデーターが含まれてもよい。
【００６１】
６．エミュレートした挙動を設定する。
ａ．現在の例では、エミュレートされた挙動は、前述のビット毎挙動のリストからの挙動を、ビット毎に異なる可能性がある挙動と共に含むことができる。
【００６２】
ｂ．エミュレートされた挙動は、仮想マシンと関連付けていくことができ、仮想マシンにおけるドライバーが、ハードウェア制御インターフェースにアクセスする保留中の試みを完了したことを報告するまで、仮想マシンと共に移動することができる。
【００６３】
７．仮想マシンのアドレス空間の該当部分を、所望のエミュレートされた挙動にマッピングする。
８．ハードウェアがもはや存在しないことを示すために、特殊メモリー領域における「ハードウェア存在」値を変更する。
【００６４】
９．仮想マシンの仮想プロセッサーの一時停止を解除する。
１０．仮想マシンにおけるドライバーは、最終的に、所定のタイマーの終了後にハードウェア制御インターフェースからの状態データー抽出を完了したことを報告することができる。これが発生した場合、メッセージを無視または破棄することができる。
【００６５】
１１．最後に、仮想マシンにおけるドライバーは、当該ドライバーがハードウェア制御インターフェースにアクセスする試みを完了したことを報告することができる。この時点で、エミュレートされた挙動を仮想マシンから除去することができる。
【００６６】
[0057]  他の実施形態では、仮想マシンの外部で実行するソフトウェアがしかるべく構成されている場合、この外部のソフトウェアが、仮想マシンにおけるドライバーの代わりに、このドライバーの関与なく、ハードウェアから必要なデーターを抽出するのに必要なステップを実行することができる。仮想マシン外部のソフトウェアによるデーター抽出は、状態データーの量および複雑度がかなり大きく、先の例におけるようにハードウェアとのかなりの同期を必要とする場合でも、可能なこともある。
【００６７】
[0058]  更に別の実施形態では、ハードウェア制御インターフェースを、当該ハードウェア制御インターフェースの完全なソフトウェア・エミュレーションと交換することもできる。一実施形態では、ハードウェア制御インターフェースの完全なソフトウェア・エミュレータを設けることができる。この場合、仮想マシンにおけるドライバーは、そのインターフェースが実際のハードウェアを表すかのように、ハードウェア制御インターフェースを用い続けることができる。ハードウェア制御インターフェースをエミュレートするソフトウェアは、ハードウェア制御インターフェースをエミュレートする際の最大範囲の機能を提供することができる。尚、この実施形態では、ハードウェア・インターフェースを完全なエミュレーションと交換することができるが、エミュレーションの具体的な複雑度または範囲は、個々のシステム構成に応じて変化する場合もあることは、当業者には言うまでもないであろう。このようなエミュレーションは、仮想マシン外部におけるコード実行によって、ハードウェアからの状態データーの抽出を含むことができる。この場合、抽出される状態データーは、単に仮想マシンに有用な任意のデーターではなく、ハードウェア・インターフェースが除去または中断された時点からハードウェアを完全にエミュレートするために状態を表すのに十分でなければならない。更に、ハードウェアにおいて現在進行中のトランザクションまたは動作を、ハードウェアから状態が抽出される前に、完了させるとよい。
【００６８】
[0059]  現在開示している態様は、システム、方法、コンピューター読み取り可能媒体に存在するコンピューター実行可能命令等として実現することができる。つまり、いずれの特定のシステム、方法、またはコンピューター読み取り可能媒体のいずれの開示も、それに制約されるのではなく、逆に開示する主題を実現する他の方法に拡大する。
【００６９】
[0060]  図６から図８までは、仮想マシン環境内に存在するドライバーについて、前記ドライバーがメモリー領域にアクセスしようとするとき、およびハードウェア・デバイスが計算環境から除去されるように構成されているときに、前記ハードウェア・デバイスに対応する前記メモリー領域へのアクセス可能性を維持するための動作手順の一例を示す。この手順は、動作６００、６０２、６０４、および６０６を含むことができる。図６を参照すると、動作６００は動作手順を開始し、動作６０２において、前記メモリー領域のハードウェア制御インターフェース部分が、前記ハードウェア制御インターフェースと関連したコードおよびデーターによって示される機能と交換されるように構成され、この機能は、ハードウェア・デバイスが計算環境から除去され終えているときでも、ドライバーに理解可能となっている。実際のコードおよびデーターは、ドライバーには直接見えなくてもよく、コードは仮想化システムによって直接実行されなくてもよい。代わりに、コードおよびデーターは、コードが何らかの動作を起こすことやその意図する範囲以外から何らかのデーターを読み取ることを防止するために、何らかの方法で解釈またはエミュレート、あるいは収容されればよい。コードおよびデーターは、仮想マシン環境のアドレスに対する書き込みおよび読み取りを行う挙動を指定し、仮想マシンに呈示しなければならない。言い換えると、仮想マシンが書き込み動作を関連した仮想マシン環境のアドレスに対して実行するとき、コードは、書き込まれるデーターを用いて、恐らくはこのデーターによって表される状態に基づいて動作を実行する。読み取り動作が仮想マシンによって実行される場合、コードは、恐らくはデーターによって表される状態に基づいて、どの値が読み取りによって返されるべきか判断するための動作を実行する。このデーターの一部は、読み取りおよび書き込みを通じて仮想マシンに直接見ることができてもよいが、全てのデーターが仮想マシンに見ることができる必要はない。この可視性は、読み取り／書き込みの下位部分(sub-portion)を用いることによって達成することができ、あるいはデーターに対するコード「パス・スルー」読み取りまたは書き込みによって達成することもできる。データーの見える部分と同等の挙動は、コードによって他の方法で達成することもできる。仮想マシン環境を異なる計算環境に移動させるときは、仮想マシン環境と共に移動する機能を構成する（６０４）。
【００７０】
[0061]  図７は、図６の動作手順６００の更に別の実施形態を示す。動作７０２において、仮想マシン環境を保存する(save)とき、スナップショットを撮るとき、またはライブ・マイグレーションを行うときに、仮想マシン環境と共に移動するように機能を構成する。先に論じたように、仮想マシンを解体するときに、このマシンを保存することができる。スナップショットの撮影は、仮想マシン状態を完全に特徴付ける必要があるときに行うことができる。つまり１組の状態およびデーターがある特定の時点にあったときのそのコピーを行うことができる。ライブ・マイグレーションは、異なる位置および環境間において仮想マシンを移すプロセスである。つまり、データーおよび挙動は、データーおよび挙動がもはや必要でないことを仮想マシンが示すまで、仮想マシンの状態の一部となることができる。動作７０４において、前記仮想マシン環境の状態の一部となるように、機能を構成する。仮想マシン環境には、ハードウェア・デバイスを排他的に割り当てることができる（７０６）。あるいは、仮想マシン環境は、少なくとも１つの他の仮想マシン環境とハードウェア・デバイスを共有することもできる（７０７）。
【００７１】
[0062]  動作７０８は、第１時間期間の後機能を用いるのを停止するようにドライバーを構成することを示す。通例、この時間期間は、ドライバーが所望のトランザクションを完了した後できるだけ早くすべきである。この第１時間期間によって、保留中のトランザクションを完了することが可能になればよい（７０９）。仮想化システムは、所定の時間が経過したとき、または仮想化システムが、ドライバーがハードウェアからのデーター抽出を完了したというメッセージをドライバーから受信したときに、次のステップに進むことができる。あるいは、７１０は、第２時間期間中機能を用い続けるようにドライバーを構成することを示す。この第２時間期間によって、ドライバーがインターフェースを放棄するまで使用を継続可能にすることができる（７１２）。
【００７２】
[0063]  動作７１３は、機能がビット毎の情報を前記ドライバーに提供することを示す。動作７１５は、機能が仮想化メカニズムによるエミュレーション挙動を備えていることを示す。動作７２０は、仮想マシン環境がペアレント仮想マシンのチャイルド仮想マシンであることを示す。動作７２５において、メモリー領域のハードウェア制御インターフェース部分がこの機能と交換されるまで、仮想プロセッサーを一時中止する。動作７３０は、メモリー領域のハードウェア制御インターフェース部分をこの機能と交換することを示す。
【００７３】
[0064]  図８を参照すると、動作８０２において、仮想マシン環境のアドレスを、機能によって支持されるメモリー領域の部分にマッピングする。動作８０８において、仮想プロセッサーを一時中止し、動作８１３において、ドライバーがメモリー領域のハードウェア制御インターフェース部分にアクセスし終えたことを報告したときに、ハードウェア制御インターフェースを除去する。
【００７４】
[0065]  動作８１４において、メモリー領域のハードウェア制御インターフェース部分が交換されようとしていることを、ドライバーに伝える。ハードウェア・デバイスの状態を記録する（８１５）。この状態は、コードおよびデーターに追加する情報を含む（８２０）。動作８２５は、ドライバーがメモリー領域のハードウェア制御インターフェース部分にアクセスし終えたときをドライバーが報告するのを待つことを示す。動作８３０は、ドライバーがハードウェア制御インターフェースにアクセスし終えたという報告を、ドライバーから受けることを示す。
【００７５】
[0066]  動作８３５は、仮想マシン外部で実行するソフトウェアが、仮想マシンにおけるドライバーの代わりに、このドライバーの関与なく、ハードウェア・デバイスの状態を読み取ることができることを示す。ハードウェア制御インターフェースの完全なソフトウェア・エミュレーションを動作８４０において提供することができる。
【００７６】
[0067]  動作８４５は、ハードウェア制御インターフェースがハードウェア・デバイスによって支持されているか否か、またはハードウェア・デバイスが除去されているか否かチェックするために、メモリー領域のハードウェア制御インターフェース部分内に、メモリー下位領域(sub-region)を設けることを示す。動作８５０は、メモリー領域のハードウェア制御インターフェース部分が交換されたときにハードウェア・デバイスが除去されたことを示すために、メモリー下位領域を更新することを示す。
【００７７】
[0068]  図９は、仮想マシン環境内に存在するドライバーに対するハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持する動作手順の一例を示し、動作９００、９０２、９０４、９０６、９０８、９１０、９１２、および９１４を含む。図９を参照すると、動作９００においてこの動作手順を開始し、動作９０２は、前記ハードウェア制御インターフェースと関連したコードおよびデーターによって示される機能と交換されるように、メモリー領域のハードウェア制御部分を構成することを示し、この機能は、ハードウェア・デバイスが計算環境から除去されたときにドライバーには理解可能である。仮想マシン環境を異なる計算環境に移動させるときに、仮想マシン環境と共に移動するように機能を構成することができる（９０４）。動作９０６は、ハードウェア制御インターフェースがハードウェア・デバイスによって支持されているか否か、またはハードウェア・デバイスが除去されているか否かチェックするために、メモリー領域のハードウェア制御インターフェース部分内にハードウェア・デバイス存在値を設けることを示す。
【００７８】
[0069]  動作９０８は、メモリー領域のハードウェア制御インターフェース部分を機能と交換する前に、仮想マシン環境の仮想プロセッサーを一時中止することを示す。動作９１０において、ハードウェア制御インターフェース部分を機能と交換する。動作９１２は、仮想マシン環境のアドレスを、この機能があるメモリーにおける対応するアドレスにマッピングすることを示す。
【００７９】
[0070]  図１０に進んで、動作１００２は、ハードウェア・デバイス存在値を存在から不在に変更することを示す。動作１００４において仮想プロセッサーを一時停止し、動作１００６において、ドライバーがハードウェア制御インターフェースにアクセスし終えたことを報告したときに、ハードウェア制御インターフェースを除去する。動作１００８は、機能がビット毎情報をドライバーに提供することを示す。
【００８０】
[0071]  以上に述べた態様はいずれも、方法、システム、コンピューター読み取り可能媒体、または任意のタイプの生産品(manufacture)で実現することができる。例えば、図１１では、コンピューター読み取り可能媒体が、仮想マシン環境に存在するドライバーに対するハードウェア・デバイスの制御インターフェースに対応するメモリー領域へのアクセス可能性を維持するためのコンピューター実行可能命令を格納することができる。このような媒体は、前記ハードウェア制御インターフェースと関連したコードおよびデーターによって示される機能と交換される（１１１０）ように、メモリー領域のハードウェア制御インターフェース部分を構成するための命令の第１部分集合を含むことができ、この機能は、ハードウェア・デバイスが計算環境から除去されたときには、ドライバーには理解可能である。また、この媒体は、仮想マシン環境を異なる計算環境に移動させるとき（１１１２）に仮想マシン環境と共に移動するように機能を構成するための命令の第２部分集合も含む。尚、本明細書に開示した種々の他の態様を捉える(capture)ために追加の命令集合を用いることができ、現在開示されている命令の３つの部分集合は、本開示によってその詳細が変わり得ることは、当業者には認められよう。
【００８１】
[0072]  例えば、命令は、更に、ドライバーがハードウェアからのデーター抽出を完了したことを示すドライバーからのメッセージを所定の時間期間だけ待つための命令１０２０を含むことができる。この命令１０２０は、更に、抽出されていないデーターをハードウェア制御インターフェースから読み取り、前記メッセージをドライバーから受信する前に所定の時間期間が経過したときに、所定期間の経過後にメッセージを受信した場合にこのドライバーからのメッセージを無視するための命令も含むことができる。
【００８２】
[0073]  再度、一例として、命令は、ハードウェア制御インターフェースを機能と交換する前に、仮想マシン環境の仮想プロセッサーを一時停止させる（１１２１）ための命令、メモリー領域のハードウェア制御インターフェース部分を機能と交換する（１１２２）ための命令、仮想マシン環境のアドレスを機能とマッピングする（１１２３）ための命令、前記ハードウェア制御インターフェースが前記ハードウェア・デバイスによって支持されているか否か、または前記ハードウェア・デバイスが除去されているか否かチェックするために、前記仮想マシン環境に対する前記メモリー領域の前記ハードウェア制御インターフェース部分内に、ハードウェア・デバイス存在値を供給する（１１２５）ための命令、ハードウェア・デバイス存在値を存在から不在に変更する（１１２６）ための命令、仮想プロセッサーの一時停止を解除する（１１２８）ための命令、ドライバーがハードウェア制御インターフェースにアクセスし終えたことを報告したときに機能を除去する（１１３０）ための命令を更に含むことができる。
【００８３】
[0074]  更に、前述の命令は命令１１４０を含むことができ、前述の機能は、ビット毎の情報を前記ドライバーに提供し、この情報は、読み取りのみ、読み取り時常に０、読み取り時常に１、読み取り−書き込み、１の書き込みをクリアする／０の書き込みのみが残る、１の書き込みをセットする／０の書き込みのみが残る、０の書き込みをクリアする／１の書き込みのみが残る、０の書き込みをセットする／１の書き込みのみが残る、最初の読み取りの後０にクリアする、および最初の読み取りの後１にセットすることを含む。
【００８４】
[0075]  前述のように、本発明の態様は、プログラミングされたコンピューターにおいて実行することができる。図１ｃおよび以下の論述は、本開示の態様を実現することができる適した計算環境について端的な説明を行うことを意図している。尚、図１のコンピューター・システムは、実施形態によっては、図１ａおよび図１ｂの種々の態様を実施できることを、当業者は認めることができよう。これらの実施形態例では、サーバーおよびクライアントは、図１ｃにおいて記載するコンポーネントの一部または全部を含むことができ、実施形態によっては、サーバーおよびクライアントの各々が、本開示の特定の態様をインスタンス化するように構成された回路を含むこともできる。
【００８５】
[0076]  回路(circuitry)という用語は、本開示全体において用いられる場合、特殊化されたハードウェア・コンポーネントを含むことができる。同じまたは他の実施形態において、回路は、ファームウェアまたはスイッチによって機能（１つまたは複数）を実行するように構成されているマイクロプロセッサーを含むことができる。同じまたは他の実施形態例において、回路は、１つ以上の汎用処理ユニットおよび／またはマルチコア処理ユニット等を含むことができ、これらは、機能（１つまたは複数）を実行するように動作可能なロジックを具体化したソフトウェア命令がメモリー、例えば、ＲＡＭおよび／または仮想メモリーにロードされるときに構成を設定することができる。回路がハードウェアおよびソフトウェアの組み合わせを含む実施形態例では、実施者(implementer)はロジックを具体化するソース・コードを書くことができ、このソース・コードをコンパイルしてマシン読み取り可能コードにし、これを汎用処理ユニット（１つまたは複数）によって処理することができる。
【００８６】
[0077]  図１ｃを参照すると、計算システムはコンピューター２０等を含むことができる。コンピューター２０は、処理ユニット２１、システム・メモリー２２、およびシステム・バス２３を含む。システム・バス２３は、システム・メモリーを含む種々のシステム・コンポーネントを処理ユニット２１に結合する。システム・バス２３は、数種類のバス構造の内任意のものでよく、メモリー・バスまたはメモリー・コントローラ、周辺バス、および種々のバス構造の内任意のものを用いるローカル・バスを含む。システム・メモリーは、リード・オンリ・メモリー（ＲＯＭ）２４およびランダム・アクセス・メモリー（ＲＡＭ）２５を含む。基本入出力システム２６（ＢＩＯＳ）は、起動中のように、コンピューター２０内にあるエレメント間における情報伝送を補助する基本的なルーティンを含み、ＲＯＭ２４内に格納されている。更に、コンピューター２０は、図示しないハード・ディスクからの読み取りおよびこれへの書き込みを行なうハード・ディスク・ドライブ２７、リムーバブル磁気ディスク２９からの読み取りおよびこれへの書き込みを行なう磁気ディスク・ドライブ２８、ならびにＣＤ  ＲＯＭまたはその他の光媒体のようなリムーバブル光ディスク３１からの読み取りおよびこれへの書き込みを行なう光ディスク・ドライブ３０を示す。実施形態例によっては、本発明の態様を具体化するコンピューター実行可能命令を、ＲＯＭ２４、ハード・ディスク（図示せず）、ＲＡＭ２５、リムーバブル磁気ディスク２９、光ディスク３１、および／または処理ユニット２１のキャッシュに格納することができる。ハード・ディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれ、ハード・ディスク・ドライブ・インターフェース３２、磁気ディスク・ドライブ・インターフェース３３、および光ドライブ・インターフェース３４によって、システム・バス２３に接続されている。これらのドライブおよびそれらに関連するコンピューター読み取り可能媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびコンピューター２０のための他のデーターの不揮発性格納に備えている。本明細書において記載した環境ではハード・ディスク、リムーバブル磁気ディスク２９、およびリムーバブル光ディスク３１を採用したが、磁気カセット、フラッシュ・メモリー・カード、ディジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリー（ＲＡＭ）、リード・オンリ・メモリー（ＲＯＭ）等のような、コンピューターによってアクセス可能なデーターを格納することができる、他のタイプのコンピューター読み取り可能媒体も、本動作環境において用いることができることは、当業者には認められてしかるべきである。
【００８７】
[0078]  ハード・ディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５には、複数のプログラム・モジュールを格納することができ、これらのプログラム・モジュールには、オペレーティング・システム３５、１つ以上のアプリケーション・プログラム３６、他のプログラム・モジュール３７、およびプログラム・データー３８が含まれる。ユーザは、キーボード４０およびポインティング・デバイス４２のような入力デバイスを通じて、コマンドおよび情報をコンピューター２０に入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディスク、スキャナー等を含むことができる。これらおよび他の入力デバイスは、多くの場合、システム・バスに結合されているシリアル・ポート・インターフェース４６を介して処理ユニット２１に接続されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）のような、他のインターフェースによって接続することもできる。また、ディスプレイ４７または他のタイプのディスプレイ・デバイスも、ビデオ・アダプター４８のようなインターフェースを介して、システム・バス２３に接続することができる。ディスプレイ４７に加えて、コンピューターは、通例、スピーカーおよびプリンターのような、他の周辺出力デバイス（図示せず）も含む。また、図１のシステムは、ホスト・アダプター５５、スモール・コンピューター・システム・インターフェース（ＳＣＳＩ）バス５６、およびＳＣＳＩバス５６に接続されている外部記憶デバイス６２も含む。
【００８８】
[0079]  コンピューター２０は、リモート・コンピューター４９のような、１つ以上のリモート・コンピューターへの論理接続を用いて、ネットワーク型環境においても動作することができる。リモート・コンピューター４９は、他のコンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイス、または他の一般的なネットワーク・ノードとすることができ、通例、コンピューター２０に関して先に説明したエレメントの多くまたは全てを含むことができるが、図１ｃにはメモリー記憶デバイス５０しか示されていない。図１に図示されている論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）５１およびワイド・エリア・ネットワーク（ＷＡＮ）５２を含むことができる。このようなネットワーキング環境は、事務所、企業規模のコンピューター・ネットワーク、イントラネットおよびインターネットにおいては、極一般的である。
【００８９】
[0080]  ＬＡＮネットワーキング環境で用いる場合、コンピューター２０は、ネットワーク・インターフェースまたはアダプター５３を介してＬＡＮ５１に接続する。ＷＡＮネットワーキング環境で用いる場合、コンピューター２０は、通例、モデム５４、またはインターネットのようなワイド・エリア・ネットワーク５２を通じて通信を確立するその他の手段を含む。モデム５４は、内蔵でも外付けでもよく、シリアル・ポート・インターフェース４６を介してシステム・バス２３に接続することができる。ネットワーク型環境では、コンピューター２０に関して図示したプログラム・モジュール、またはその一部は、離れたメモリー記憶装置に格納することもできる。尚、図示したネットワーク接続は一例であり、コンピューター間において通信リンクを確立する他の手段を用いてもよいことは認められよう。更に、本発明の複数の実施形態は特にコンピューター・システムに非常に適しているが、本文書は、本開示をこのような実施形態に限定することを意図するものは何もない。
【００９０】
[0081]  以上の詳細な説明では、例および／または動作図によって、システムおよび／またはプロセスの種々の実施形態を明記した。このようなブロック図、および／または例が１つ以上の機能および／または動作を含む限り、このようなブロック図、または例における各機能および／または動作は、広範囲のハードウェア、ソフトウェア、ファームウェア、または事実上その任意の組み合わせによって、個々におよび／または集合的に実現できることは、当業者には言うまでもないであろう。
【００９１】
[0082]  最後に、種々の図に示すように、好ましい態様と関連して本開示について説明したが、他の同様の態様も用いることもでき、本開示から逸脱することなく、それと同じ機能を実行するために、記載した態様に対して変更や追加を行うこともできることは言うまでもない。例えば、本開示の種々の態様では、仮想マシンと関連したメモリー位置を支持するハードウェアを、支持メカニズムと交換するための種々のメカニズムを開示した。しかしながら、これらの記載した態様と同等の他のメカニズムも、本明細書における教示によって想起されよう。したがって、本開示はいずれの１つの態様にも限定されることはなく、むしろ添付した特許請求の範囲にしたがってその幅(breadth)および範囲を解釈すべきである。
【図１ａ】
0005798485.tif 000002
【図１ｂ】
0005798485.tif 000003
【図１ｃ】
0005798485.tif 000004
【図２】
0005798485.tif 000005
【図３】
0005798485.tif 000006
【図４】
0005798485.tif 000007
【図５】
0005798485.tif 000008
【図６】
0005798485.tif 000009
【図７】
0005798485.tif 000010
【図８】
0005798485.tif 000011
【図９】
0005798485.tif 000012
【図１０】
0005798485.tif 000013
【図１１】
0005798485.tif 000014