【文献】
”Virtual Machine Guide VMware Server 1.0”,2006,VMware Inc.,102〜104ページ
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
一般条件における仮想マシン
[0021] 以下の説明および図面において、本発明の種々の実施形態の完全な理解を得るために、一定の具体的な詳細を明記する。計算およびソフトウェア技術と関連のあることが多いある種の周知の詳細については、本発明の種々の実施形態を不必要に曖昧にすることを避けるために、以下の開示では明記しないこととする。更に、当業者は、以下に説明する詳細の内1つ以上がなくても、本発明の他の実施形態を実施できることを、当業者には理解できよう。最後に、以下の開示においてはステップおよびシーケンスを参照して種々の方法について説明するが、そのような説明は、本発明の実施形態の明確な実施態様を規定するためであり、これらのステップおよびステップのシーケンスが本発明を実施するために必須であると捉えてはならない。
【0009】
[0022] 尚、本明細書において説明する種々の技法は、ハードウェアまたはソフトウェアによって、そして適切である場合には、双方の組み合わせによって実現できることは言うまでもない。つまり、本発明の方法および装置、あるいはそのある種の態様または部分は、フロッピー・ディスケット、CD−ROM、ハード・ドライブ、または任意の他のマシン読み取り可能記憶媒体というような、有形媒体に具体化されたプログラム・コード(即ち、命令)という形態をなすことができる。そして、このプログラム・コードをコンピューターのようなマシンにロードしそれによって実行すると、そのマシンは本発明を実施する装置となる。プログラマブル・コンピューターにおけるプログラム・コード実行の場合、計算機は、一般に、プロセッサー、このプロセッサーによって読み取り可能な記憶媒体(揮発性および不揮発性メモリーおよび/または記憶エレメントを含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを含む。1つ以上のプログラムは、例えば、API、再利用可能な制御部等の使用によって、本発明と関連付けて説明するプロセスを実現または利用することができる。このようなプログラムは、好ましくは、コンピューター・システムと通信するために、高度手順プログラミング言語またはオブジェクト指向プログラミング言語で実装される。しかしながら、プログラム(1つまたは複数)は、望ましければ、アセンブリまたは機械語でも実装することができる。いずれの場合でも、言語はコンパイラまたはインタプリタ言語であればよく、ハードウェアの実施態様と組み合わせてもよい。
【0010】
[0023]
図1aは、複数の仮想マシン120、121を有する仮想マシン環境100を示す。仮想マシン120、121は、複数の仮想プロセッサー110、112、114、116、および対応するゲスト・オペレーティング・システム130、132を備えている。仮想マシン120、121は、スケジューラー142および他のコンポーネント(図示せず)を備えることができる仮想化レイヤー140によって維持されており、この仮想化レイヤー140は、複数の仮想マシン120、121に合わせてハードウェア150を仮想化する。複数の仮想プロセッサー110、112、114、116は、基礎となるハードウェア物理プロセッサー160、162の仮想的な相当物となる。
【0011】
[0024]
図1bは、コンピューター・システムにおける仮想化環境に合わせたハードウェアおよびソフトウェア・アーキテクチャの論理レイヤリングを表す図である。
図1bにおいて、仮想化プログラム180は、物理ハードウェア・アーキテクチャ182において直接または間接的に実行する。仮想化プログラム180は、(a)ホスト・オペレーティング・システムと共に実行する仮想マシン・モニター、(b)ハイパーバイザー・コンポーネントを有するホスト・オペレーティング・システムであって、ハイパーバイザー・コンポーネントが仮想化を実行する、ホスト・オペレーティング・システム、(c)ハードウェア、または(d)マイクロ・コードとすることができる。また、仮想化プログラムは、任意のオペレーティング・システムとは別個に実行するハイパーバイザーであってもよい。言い換えると、ハイパーバイザー仮想化プログラムは、いずれのオペレーティング・システムの一部として実行する必要はなく、いずれのオペレーティング・システムと共に実行する必要もない。ハイパーバイザー仮想化プログラムは、代わりに、「ルート・パーティション」(root partition)を含むあらゆるオペレーティング・システムの「下で」実行することができる。仮想化プログラム180は、ゲスト・ハードウェア・アーキテクチャ179)このコンポーネントは「パーティション」または「仮想マシン」であるという事実を示すために、破線で示されている)を仮想化する。即ち、実際には存在しないが代わりに仮想化プログラム180によって仮想化されているハードウェアである。ゲスト・オペレーティング・システム176は、ゲスト・ハードウェア・アーキテクチャ178において実行し、ソフトウェア・アプリケーション174がゲスト・オペレーティング・システム176において実行することができる。
図1bの仮想化動作環境では、ソフトウェア・アプリケーション174が、ホスト・オペレーティング・システムやハードウェア・アーキテクチャ182とは一般に互換性のないオペレーティング・システムにおいて実行するように構成されているかのように、ソフトウェア・アプリケーション174はコンピューター・システムにおいて実行することができる。
【0012】
[0025] 仮想マシンは、通例、オペレーティング・システム全体、および1組のアプリケーションを内蔵し、これらのアプリケーションが一緒になって多くのプロセスを構成する。仮想マシンのコンテキストでは、これらのプロセス全体を「ワークロード」または「プロセス」と呼ぶことができる。本開示では、「プロセス」および「ワークロード」という用語は、仮想マシンのコンテキストでは相互交換可能に用いることができ、「プロセス」とは仮想マシンにおいてインスタンス化することができるシステムおよびアプリケーションの全てを含む複数のプロセスに言及できることは、当業者には容易に理解できよう。
【0013】
[0026] 次に、
図2は、物理コンピューター・ハードウェア202の直接上(above)で実行するホスト・オペレーティング・システム(ホストOS)ソフトウェア・レイヤー204を備えている仮想化計算システムを示す。ここで、ホストOS204は、オペレーティング・システムA212およびB214による使用のために、それぞれ、インターフェースをパーティションA208およびB210に露出することによって、物理コンピューター・ハードウェア202のリソースへのアクセスを与える。これによって、ホストOS204が、その上で実行するオペレーティング・システム・レイヤー212および214に気付かれずに(unnoticed)動作することが可能になる。この場合も、仮想化を実行するために、ホストOS204は、ネーティブ仮想化能力を有する、特別に設計されたオペレーティング・システムとするとよく、あるいは仮想化を実行するためのハイパーバイザー・コンポーネント(図示せず)が組み込まれた標準的なオペレーティング・システムであってもよい。
【0014】
[0027] 再度
図2を参照すると、ホストOS204の上には、2つのパーティション、即ち、例えば、仮想化インテル386プロセッサーとすることができるパーティションA208、および例えば、モトローラ680X0ファミリー・プロセッサーの内の1つの仮想化バージョンとすることができるパーティションB210である。各パーティション208および210の中には、それぞれ、ゲスト・オペレーティング・システム(ゲストOS)A212およびB214がある。ゲストOS A212の上で実行するのは、2つのアプリケーションA1 216およびアプリケーションA2 218であり、ゲストOS B214の上で実行するのは、アプリケーションB1 220である。
【0015】
[0028]
図2に関して、パーティションA208およびパーティションB214(破線で示されている)が仮想化コンピューター・ハードウェア表現であり、ソフトウェア構成としてのみ存在できることを記するのは重要である。これらは、特殊な仮想化ソフトウェア(1つまたは複数)の実行によって可能になる。パーティションA208およびパーティションB210をゲストOS A212およびゲストOS B214にそれぞれ提示するだけでなく、ゲストOS A212およびゲストOS B214が実在の物理コンピューター・ハードウェア202と間接的に相互作用するために必要なソフトウェア・ステップの全てを実行する。
【0016】
[0029]
図3は、代わりの仮想化計算システムを示し、ここでは、ホスト・オペレーティング・システム204”と共に実行する仮想マシン・モニター(VMM)204によって仮想化が実行される。ある種の場合、VMM204’は、ホスト・オペレーティング・システム204”の上で実行し、ホスト・オペレーティング・システム204”を通じてのみコンピューター・ハードウェア202と相互作用するアプリケーションとなることもある。他の場合では、
図3に示すように、VMM204’は、代わりに、あるレベルではホスト・オペレーティング・システム204”を通じてコンピューター・ハードウェア202と間接的に相互作用する部分的に独立したソフトウェア・システムを備えることができるが、他のレベルでは、VMM204’は、コンピューター・ハードウェア202(ホスト・オペレーティング・システムが直接コンピューター・ハードウェアと相互作用する方法と同様)と直接相互作用する。そして更に別の場合では、VMM204’が完全に独立したソフトウェア・システムを備えることもでき、ホスト・オペレーティング・システム204”を利用することなく(コンピューター・ハードウェア202の使用を調整しコンフリクト等を回避するために、ホスト・オペレーティング・システム204”と相互作用することには変わりないが)全てのレベルでコンピューター・ハードウェア202と直接相互作用する(ホスト・オペレーティング・システムがコンピューター・ハードウェアと直接相互作用する方法と同様)。
【0017】
[0030]
図4は、PCIデバイスに関する場合のI/O空間およびMMIOを表すシステム図の一例を示す。PCI仕様書では、3つのアドレス空間、即ち、メモリー、I/O、およびコンフィギュレーションが定められている。MMIOという用語は、本明細書では、PCI用語の「メモリー」をRAMと区別するために、PCI仕様書において定められている「メモリー」を指すために用いられる。
図4は、システム・バス400、物理メモリー410、プロセッサー420、レジスタ460を有するPCIデバイス430、およびホスト−PCIブリッジ・デバイス440を含む。ホスト−PCIブリッジ・デバイス440に取り付けられているのはPCIバス450であり、PCIバスに取り付けられているのはPCIデバイス430である。PCIデバイス430は、デバイスを制御するためにシステム・プロセッサーから読み取られそして書き込まれなければならないメモリー位置において、1つ以上のレジスタ460を内蔵する。物理メモリー・アドレス空間は、別のアドレス空間とすることができるIOポート空間とは別個であってもよいことが分かる。IOリソースをMMIOリソースに変換することができ、これは、IOポート・アドレス空間をメモリー・マップドIOポート・アクセスを通じてマッピングできる1つの理由となる。
【0018】
[0031]
図5を参照すると、RAMが存在することができるアドレス空間500を示す図が描かれている。図示のように、メモリー・マップド入力/出力(MMIO)エリア510が同じアドレス空間にも存在することができる。典型的な最近のアドレス空間に基づくハードウェア制御インターフェースが、このアドレス空間のMMIOに存在する。システムの物理アドレス空間は、一般に、仮想コンピューター・システムの「物理」アドレス空間500も指す「ゲスト物理アドレス空間」のように、物理コンピューター・システムの物理アドレス空間500も指す。しかしながら、ゲスト物理アドレスは、仮想構造であるため、ゲスト物理アドレスは必ずしもRAMの領域を占めるとは限らない。ハイパーバイザーは、ゲスト物理範囲の一部または全部を、実在のシステム物理アドレス空間内にマッピングすることができ、実際に頻繁にそうするのが慣例である。しかしながら、ハイパーバイザーが実行中の仮想マシンのスナップショットを撮るプロセスの中にあるときのように、どこにもマッピングされていないゲスト物理アドレス空間の範囲がある場合もあり得る。
【0019】
[0032] 物理メモリー・アドレス空間500は、IOポート空間とは別である。この別のIOポート空間は、より古いデバイスを制御するために用いることができ、またより新たなデバイスを設定し構成するためにも用いることができる。これは、PCIコンフィギュレーション空間が通例IOポート空間を通じてアクセスされるからである。更に、IOポート空間アドレスは、通例、32ビットや64ビットではなく、16ビットである。
【0020】
[0033] 前述のパーティションを実現するためのこれらの変形は全て、単なる例示的な実施態様に過ぎず、本明細書では、本開示を任意のいずれかの仮想化態様に限定するように解釈すべきものはない。
物理ハードウェアのエミュレーションとの交換
[0034] 本明細書において開示する種々の実施形態において、仮想マシンと関連したメモリー位置を支持するハードウェアを、支持メカニズムと交換することもできる。この支持メカニズム(backing mechanism)は、そのメモリー位置を、仮想マシンにおいてドライバーが用いるデーターを含むように見えるものとして、提示することができる。このようなデーターは、通例、ハードウェアが実際に読まれたならばそのハードウェアが戻しているであろうものを表すことができる。このような支持メカニズムを設けることによって、ドライバーがハードウェアの除去をチェックする頻度を大幅に少なくすることができ、ドライバーを書くことおよび検査することが一層容易になる。メモリー位置から戻されるデーター・イメージ(data image)は、この場合、仮想マシンから最後に除去されたハードウェアと同等のハードウェアを内蔵していない異なる物理マシンに仮想マシンが移動する場合であっても、仮想マシンと一緒に移動する(travel)ことができる。
【0021】
[0035] 一実施形態では、アドレス空間のハードウェア制御インターフェース部を、ハードウェアを仮想マシンから除去するときに仮想マシンにおいてドライバーに都合がよいデーターまたは挙動、あるいはドライバーによって要求されたデーターまたは挙動と交換することができる。種々の実施形態では、仮想マシンにおいてドライバーに都合がよいデーターおよび挙動は、仮想マシンを保存するとき、そのスナップショットを撮るとき、ライブ・マイグレーションが行われるとき(live-migrated)等では、仮想マシンと共に移動させることができる。仮想マシンを保存することができるのは、例えば、そのマシンが解体されるときである。
【0022】
[0036] 例えば、スナップショットの撮影は、仮想マシン状態を最大限特徴付ける必要があるときに行うことができる。仮想マシンの状態は、特定の時点においてプロセスまたはトランザクションを定めるために必要なデーターを備えることができる。スナップショットは、1組の状態およびデーターが所望の時点にあったときのコピーを含むことができる。仮想マシン・セッションでは、マシン状態全体を支持ファイルにダンピング(dumping)することによって、システム全体のスナップショットを実行することができる。このダンピングの一部は、仮想マシンが実行している最中に、コピー・オン・ライト(copy-on-write)式に行うことができる。ライブ・マイグレーション(live-migration)は、異なる位置および環境間において仮想マシンを移すプロセスである。種々の実施形態において、コードおよびデーターを仮想マシンと共に移動させることができる。例えば、コードおよびデーターは、仮想マシン・ファイルにリンクされたファイルを構成することができる。データーおよび挙動は、仮想マシンが、データーおよび挙動がもはや必要とされないことを示すまで、仮想マシンの状態の一部となることができる。
【0023】
[0037] 種々の実施形態において、特殊なメモリー領域を作成する場合がある。この特殊なメモリー領域は、仮想マシンがハードウェア制御インターフェースの一部であると見なすことができるが、実際には仮想化システムによって設けられる。この特殊なメモリー領域は、ハードウェア・インターフェースが現在利用可能か否か、またはハードウェア・インターフェースが除去されたか否か、仮想マシンが判断するために読み取ることができるメモリー位置を含むことができる。このようなメモリー読み取りは高速で実行することができ、したがって、仮想マシンにおけるドライバーが、必要に応じて、システム性能に影響を及ぼすことなく、ハードウェア・インターフェースの除去をチェックすることができる。
【0024】
[0038] 仮想マシンに割り当てられるデバイスの部分または範囲は変化することができる。例えば、仮想マシンには、他の仮想マシンを除外して、デバイスの制御を与えることができる。あるいは、仮想マシンには、デバイスにおいて利用可能な複数のインターフェース間で、1つのハードウェア制御インターフェースのみを割り当てることもできる。
【0025】
[0039] 以下で更に説明するように、本開示の種々の態様において、実在のハードウェア制御インターフェースをアドレス空間から除去した後におけるアドレス空間のハードウェア制御インターフェース部の使用期間を、異なる実施態様にしたがって変化させることができる。一実施形態では、仮想マシンにおけるドライバーは、実在のハードウェア制御インターフェースがアドレス空間から除去された後できるだけ早くハードウェア制御インターフェースの使用を停止するように構成することができる。他の実施形態では、仮想マシンにおけるドライバーは、実在のハードウェア制御インターフェースがアドレス空間から除去された後無期限にハードウェア制御インターフェースを用い続けることもできる。この実施形態は、更に、以下で説明するエミュレーション挙動を組み込むことができる。
【0026】
[0040] 種々の実施形態において、ハードウェア制御インターフェースが以前に占有していたアドレス空間の部分の特定の挙動を、以下で更に説明するように実現することができる。このような静的データー表現と完全エミュレーション(full emulation)との間の中間的手法は、状態およびデーターを1つの仮想マシンから他の仮想マシンに持っていく際の容易性のために、望ましい場合がある。更に、このような手法が有利であると言えるのは、1つのハイパーバイザーから他のハイパーバイザーに外部でサード・パーティ・コード(例えば、ドライバー)を持っていくことを伴わないからである。
【0027】
[0041] 一実施形態では、基本的挙動のビット・レベルのエミュレーションを実施することができる。実施形態例のいくつかには以下を含むことができる。
i. 読み取りのみ。
【0028】
ii. 常に0を読み取る
iii. 常に1を読み取る
iv. 書き込み−読み取り
v. 1の書き込みをクリアし、0の書き込みのみを残す
vi. 1の書き込みをセットし、0の書き込みのみを残す
vii. 0の書き込みをクリアし、1の書き込みのみを残す
viii.0の書き込みをセットし、1の買い込みのみを残す
ix. 最初の読み取りの後0にクリアする
x. 最初の書き込みの後1にセットする
[0042] 他の実施形態では、ハードウェア・インターフェースを除去するときに、デバイスの完全エミュレーションを設けることができる。完全エミュレーションは、ハードウェア制御インターフェースが以前に占有していたアドレス空間に対する仮想マシン・アクセスのソフトウェアにおける、スクリプトによる処理またはプログラム型処理を含むことができる。
【0029】
[0043] 尚、現在説明しているメカニズムは、仮想マシンから除去されるハードウェア制御インターフェースを代行する(proxying)任意のソフトウェア実装エミュレーションに関して概略的に説明するとよいことは、当業者には容易に認められよう。勿論、これらは単なる(したがって非限定的な)態様の例であり、加えて、本明細書において論じられる他の態様の内任意のもので補足または代用することもできる。
【0030】
[0044] ハードウェア制御インターフェースが存在するアドレス空間は、通例、ランダム・アクセス・メモリー(RAM)が存在するアドレス空間と同じである。また、ハードウェア制御インターフェースは、入力/出力(IO)ポート空間およびPCIコンフィギュレーション空間にも存在することができる。ハードウェア制御インターフェースがRAMアドレス空間内にある場合、仮想マシン内にあるドライバーが、通常のメモリー・アクセス命令を用いて、このインターフェースにアクセスすることができる。ハードウェア制御インターフェースがIOポート・アドレス空間内にある場合、仮想マシン内にあるドライバーが、IOポート・アクセス命令またはメモリー・マップドIOポート・アクセスを用いてこのインターフェースにアクセスすることができる。ハードウェア制御インターフェースがPCIコンフィギュレーション空間内にある場合、仮想マシン内にあるドライバーが、または間接的にOSが、IOポート・アクセス命令またはメモリー・マップドIOポート・アクセスによってこのインターフェースにアクセスすることができる。本明細補において開示する種々の実施形態は、ハードウェア制御インターフェースがRAMと同じアドレス空間にあること、そしてハードウェア制御インターフェースが、メモリー読み取りおよび書き込みを用いてアクセスされることを想定している。ハードウェア制御インターフェースがIOポート・アドレス空間内にある実施形態では、INおよびOUT動作を、読み取りおよび書き込みの代わりに用いることができる。本開示は、アドレス空間にアクセスするために用いられるタイプまたは特定の命令には関係なく、アドレス空間に適用できることは、当業者には容易に認められよう。
【0031】
[0045] アドレス空間に基づくハードウェア制御インターフェースの仮想マシンへの直接的な割り当ては、通例、性能の理由から望ましいものである。アドレス空間に基づくハードウェア・デバイス制御インターフェースが直接仮想マシンに割り当てられる場合、仮想マシンのアドレス空間の一部を、ハードウェア・デバイス制御インターフェースによって占有されるシステムの物理アドレス空間の一部にマッピングすることもできる。このマッピングは、ソフトウェア、ハードウェア、またはこれら2つの組み合わせによって遂行することができる。一旦マッピングが確定されたなら、仮想マシンはハードウェア・デバイス制御インターフェースを通じてハードウェアを制御することができる。
【0032】
[0046] ホット・リムーバル(hot removal)とは、システムまたはサブシステムが動作している間におけるシステム・コンポーネントの予期しない除去である。アドレス空間に基づくハードウェア制御インターフェースの物理マシンからのホット・リムーバブルは、多くのシステムに存在することができる能力である。しかしながら、ホット・リムーバブルは、仮想マシンからのハードウェア制御インターフェースの除去には、通例受け入れられない。何故なら、仮想マシンでは、それを行うために任意の時間量を要することなく、要求されたときに、ハードウェア制御インターフェースを用いるのを停止するために、ハードウェア制御インターフェースを用いるドライバーを信頼することや完全に検査することができないからである。仮想マシンからハードウェア制御インターフェースを除去する前に、仮想マシンがそのハードウェア制御インターフェースを使い終えるまで待つことは、通例では受け入れられない。前述のように仮想マシンを待つとすると、除去に要するだけの時間を仮想マシンに与えることになり得るので、これは望ましくないのが通例である。インターフェースを除去する前に仮想マシンが必要なトランザクションを完了するために、タイムアウト期間を用いることができる。しかしながら、タイムアウトに到達し、仮想マシンからの同意なくしてハードウェアが除去されると、仮想マシン内にあるドライバーが後にハードウェアにアクセスしようとしたときに、仮想マシンが誤って応答したり、またはクラッシュする虞れがある。一般に、システムおよびコンポーネントの挙動の可変性および予測不能性のために、既知の安全なタイムアウト値を計算するのは困難である。加えて、正当に安全のあるタイムアウト値であっても、除去動作の期間に仮想マシンに不適当な制御が行われる虞れがある。
【0033】
[0047] 種々の実施形態において、仮想マシンに割り当てられるデバイスに対する制御の範囲は変化することもあり得る。一実施形態では、この仮想マシンには、他の仮想マシンを除外して、デバイスの制御を与えることができる。あるいは、デバイスにおいて利用可能な1つよりも多いインターフェースの間で、1つのハードウェア制御インターフェースのみを仮想マシンに割り当てることもできる。いずれの場合でも、仮想化システムは、仮想マシンのための関連するアドレス空間の部分を仮想化することによって、デバイスの少なくとも一部のシステム・レベルの制御態様の制御を保持することができる。例えば、デバイスのPCIコンフィギュレーション空間は、通例、仮想マシンが直接見ることができるフィールドを含む。また、PCIコンフィギュレーション空間は、最小限の仮想化で仮想マシンが直接書き込むことができるいくつかのフィールドも含むことができる。しかしながら、基準アドレス・レジスタ部のようなPCIコンフィギュレーション空間のある種の部分は、仮想マシンに、他の仮想マシンを除外して、デバイス機能全体を割り当てる場合であっても、完全に仮想化しなければならない。PCI研究専門委員会(SIG:Special Interest Group)単一ルートI/O仮想化および共有使用によるPCI IO仮想化をサポートするデバイスでは、ハードウェア自体が物理機能および仮想機能を設けることができる。仮想機能は、仮想マシンに割り当て可能に設計することができ、異なる仮想機能を異なる仮想マシンに割り当てることができ、複数の仮想マシンを同時に複数の仮想機能によって用いることができる。このように、本開示は、仮想マシンへの直接ハードウェア制御インターフェース割り当ての種々の粒度およびレベルに跨って実現できることを当業者は認めることができよう。
【0034】
[0048] 本明細書において開示するのは、仮想マシンにおけるドライバーが後に仮想マシンのアドレス空間において除去された部分にアクセスするときに、仮想マシンにおけるドライバーが動作を継続することを可能にできるようにして、ハードウェア制御インターフェースを除去するための種々の方法およびシステムである。通常の動作または予期される動作を継続することによって、仮想マシンにおけるドライバーは、ハードウェアの除去によって生ずる、予期していなかった読み取り/書き込み動作による誤った挙動を回避することができる。ハードウェア制御インターフェースを除去するときにおける典型的な結果は、ハードウェア制御インターフェースによって占有されていた仮想マシン・アドレス空間の部分がマッピングされなくなることである。安全なハードウェア除去の結果の一例では、除去されたアドレス空間への書き込み動作を無視することができ、除去されたアドレス空間に読み取り動作は「1」のビットを返すことができる。
【0035】
[0049] 一実施形態では、仮想マシンにおけるドライバーが、ハードウェア制御インターフェースを用いるトランザクションを完了するまで、ハードウェア制御インターフェースによって占有されていた仮想マシン・アドレス空間の部分を、仮想マシンにおけるドライバーにとって安全な挙動または都合のよい挙動にマッピングすることができる。ハードウェア制御インターフェースを、ドライバーにとって安全な挙動または都合のよい挙動にマッピングすることによって、実際のハードウェア制御インターフェースを、必要に応じて、仮想マシンにおけるドライバーを待つことなく、仮想マシンから除去することができる。更に、ドライバーによるハードウェア制御インターフェースにアクセスする試みの後に、仮想マシンにおけるドライバーがクラッシュしたり、または予期しなかった状態に入る危険性を大幅に低減して、ハードウェア制御インターフェースを除去することもできる。更に別の実施形態では、仮想マシン・アドレス空間のマッピングされている部分に対する交換挙動は、仮想マシンにおけるドライバーがハードウェア制御インターフェースを用いる試みを完了するというような時点まで、仮想マシンと関連付けられたままでいることもできる。
【0036】
[0050] 以上で説明した交換挙動は、一般に種々の形態のエミュレーションを構成することができる。以下に、本開示にしたがって実現することができる挙動の例を示す。
1.ビット毎の挙動
a.読み取りのみ。この挙動では、ハードウェア制御インターフェースの除去の時点において、データーを決定することができ、その時点以降に仮想マシンによってデーターを変更することはできない。これによって、「常に0」/「常に1」領域のグルーピングを一層効率的に表現することができるようになる。
【0037】
b.読み取り時常に0。この挙動は、値が常に0であるときの読み取りのみのシナリオと同様にすることができる。
c.読み取り時常に1。この挙動は、値が常に1であるときの読み取りのみのシナリオと同様にすることができる。
【0038】
d.読み取り−書き込み。この挙動では、ハードウェア制御インターフェースの除去の時点において、データーを最初に決定することができる。しかしながら、その時点以後に仮想マシンによってデーターを変更することができる。
【0039】
e.1の書き込みをクリアし、0の書き込みのみが残る。デバイスのハードウェアは、通知ビットがセットされたことをソフトウェアが承認することができるようにするために、通例、この種の挙動を用いる。ソフトウェアは、セットされた位置において1でメモリー書き込みを実行することによって、セットされたビットを承認することができる。この挙動の結果、通例、再度レジスタが読み出されるときに、ビットがクリアされることになる。
【0040】
f.1の書き込みをセットし、0の書き込みのみが残る。この場合、ハードウェアおよびソフトウェアは、ソフトウェアがハードウェアに通知するために、この種のビットを用いることができる(前述のシナリオ(e)の逆)。
【0041】
g.0の書き込みをクリアし、1の書き込みのみが残る。これは、直前のシナリオの変形である。
h.0の書き込みをセットし、1の書き込みのみが残る。これは、直前の2つのシナリオの変形である。
【0042】
i.最初の読み取りの後0にクリアする。場合によっては、ソフトウェアが読み取りを実行するという単なる動作(act)によってソフトウェアが通知を受信したことを、ハードウェアが推定できることもある。
【0043】
j.最初の読み取りの後1にセットする。これは、直前のシナリオの変形である。
2.エミュレーション−他の実施形態では、ハードウェア制御インターフェースによって以前に占有されていたアドレス空間への仮想マシンのアクセスのソフトウェアにおいて、スクリプトによる処理またはプログラム型処理を実施することができる。種々の実施形態において、限定エミュレーションおよび完全エミュレーションを実施することができる。限定エミュレーションでは、エミュレーションのレベルは、ドライバー・ソフトウェアが任意の保留中の動作を完了し、ハードウェア制御インターフェースがもはや存在しないと判断することができるまで、ドライバー・ソフトウェアとの連続(uninterrupted)トランザクションを維持するのに十分であればよい。エミュレーションのレベルは、実際にデバイスの機能を無期限に実行し続けるには十分でなくてもよい。完全エミュレーションでは、エミュレーションのレベルは、仮想マシン内にあるドライバーがその通常機能を実行し続けることを可能にすればよい。
【0044】
[0051] 交換挙動および挙動の現在の状態は、仮想マシン内にあるドライバーが、ハードウェア制御インターフェースにアクセスすることを必要とするトランザクションを完了したことを報告するというような時点まで、仮想マシンの状態の一部として、仮想マシンと関連付け続けることができる。交換挙動は、仮想マシンが異なるホスト物理マシンに移動しても、または仮想マシンをディスクに保存し後の時点において再現する場合でも、仮想マシンと関連付け続けることができる。
【0045】
[0052] ハードウェア制御インターフェースは、ハードウェア制御インターフェースが十分に利用可能であり全機能を提供しているか否か、仮想マシンにおいて実行中のドライバーに示すデーター・エレメントを含む、メモリーの特殊領域によって増強することができる。このようなメモリーの特殊領域は、1つのメモリー・ページを構成することもできる。また、仮想マシン内において実行中のドライバーは、ハードウェア制御インターフェースが除去されたことを示す1つ以上のメッセージを受信することもできる。しかしながら、仮想マシンにおけるドライバーが、ドライバー・コードの実行における特定の時点までハードウェアが存在したか否かチェックする必要がある場合、ドライバー・コードは、このデーター・エレメントをチェックして、ドライバー・コードにおいてそのデーター・エレメントを読んだ時点まで、実在の機能によってハードウェア・インターフェースが支持されたか否か判断することができる。データー・エレメントの読み取りは、通例、高速動作であるので、仮想マシンにおけるドライバーは、過度の性能影響を受けずに、頻繁にチェックすることができる。仮想マシンにおけるドライバーは、一連のレジスタ読み取りを実行し、次いでハードウェア・インターフェースが未だ仮想マシンに割り当てられているか否か確認するためにチェックすることができる。割り当てられていない場合、ドライバーは読み取ったデーターを完全に無視することができる。しかしながら、レジスタの読み取りの後でもハードウェアが未だ仮想マシンと関連付けられていた場合、仮想マシンにおけるドライバーは、レジスタから読み取ったデーターが実際にはハードウェアから読み取られたのであって有効であると判断することができる。
【0046】
[0053] 交換挙動が完全エミュレーションである場合、仮想マシンにおけるドライバーは、ハードウェア制御インターフェースを使い続けることができ、場合によっては無期限に用い続けることができる。あるいは、ドライバーは、都合のよい時点で(例えば、インターフェースへのアクセスを必要とするかもしれない保留中のトランザクションをドライバーが完了したとき)ハードウェア制御インターフェースの使用を中断することもできる。交換挙動が限定ハードウェア制御インターフェース・エミュレーションである場合、ドライバーは、ある時間期間の後(例えば、トランザクションが未だ保留中であっても、使用を安全に中断できるとき)ハードウェア制御インターフェースの使用を中断することもできる。通例、この時間期間は、ドライバーが所望のトランザクションを完了した後できるだけ早くすべきである。いずれの場合でも、同じハードウェア制御インターフェースと関連付けられたハードウェア・デバイスが実際にない異なる物理マシンに、仮想マシンが既に移動させられた後でも、仮想マシンにおけるドライバーは、ハードウェア制御インターフェースになおもアクセスすることができる。完全エミュレーションが設けられる場合、完全ハードウェア・エミュレーションを通じてデバイス機能を提供し続けるためには、同じ基礎となる記憶デバイス、ネットワーク、または他のリソースへの接続(connectivity)が必要となる場合もある。
【0047】
[0054] 本開示は、デバイス全体の割り当ておよび再割り当てにも適用可能であることは、当業者には認められよう。更に、本開示は、一般に、限定なく、デバイスによって提供される複数のハードウェア制御インターフェース間において任意の特定のハードウェア制御インターフェースに適用することができる。本開示は、一般に、任意の特定のハードウェア制御インターフェース(または、完全エミュレーションの場合、ハードウェア制御インターフェースおよびデバイスの機能をエミュレートするために必要なステップ)をエミュレートするために必要な特定のステップに関係なく、適用することができる。
【0048】
[0055] 以下に、本明細書において開示する方法の種々の実施形態を例示する非限定的な例を示す。一実施形態では、ハードウェアは、ハードウェア・インターフェースが除去されるときに仮想マシンが保存する必要がある状態をなにも保持しなくてもよい。1つの構成例は、パケットに基づいて動作し、パケットの逸失が容認可能なネットワーキング・インターフェースである。この場合、仮想マシンは、同じMACアドレスを用いる同じネットワークへの代替経路を有しても、有しなくてもよい。他の構成例では、この経路は、IPアドレスのような、もっと高いレイヤーにおいて維持することができる。一実施形態では、以下のハードウェア除去ステップを採用することができる。
【0049】
1.仮想マシンの仮想プロセッサーを一時停止する。
2.仮想マシンのアドレス空間の部分(メモリー領域)からハードウェア制御インターフェースにマッピングするマッピングを除去することによって、ハードウェア制御インターフェースを仮想マシンから除去する。
【0050】
3.オプションとして、ハードウェア制御インターフェースから必要とされる任意のデーターを読み取る。
a.この例では、ハードウェアから読み取られるデーターは、仮想マシンにおけるドライバーのクラッシュを回避し、仮想マシンにおけるドライバーが無効な動作(actions)(例えば、無効のデーターを仮想マシンの残りの部分に配信する)を開始するのを防止するために必要なデーターに限定することができる。この限定されたデーターは、現在のレジスタ値等の内容を含むことができる。このデーターは、通例、パケット・データーを含む必要はないが、そのようなデーターが含まれてもよい。
【0051】
4.エミュレートした挙動を設定する。
a.現在の例では、エミュレートされた挙動は、前述のビット毎挙動のリストからの挙動を、ビット毎に異なる可能性がある挙動と共に含むことができる。
【0052】
b.エミュレートされた挙動は、仮想マシンと関連付けていくことができ、仮想マシンにおけるドライバーが、ハードウェア制御インターフェースにアクセスする保留中の試みを完了したことを報告するまで、仮想マシンと共に移動することができる。
【0053】
5.仮想マシンのアドレス空間の該当部分を、所望のエミュレートされた挙動にマッピングする。
6.ハードウェアがもはや存在しないことを示すために、特殊メモリー領域における「ハードウェア存在」値を変更する。
【0054】
7.仮想マシンの仮想プロセッサーの一時停止を解除する。
8.オプションとして、ハードウェアが除去され、そのハードウェアにアクセスする試みを中断することを示すメッセージを、仮想マシンにおけるドライバーに送る。
【0055】
9.最後に、仮想マシンにおけるドライバーは、当該ドライバーがハードウェア制御インターフェースにアクセスする試みを完了したことを報告することができる。この時点で、エミュレートされた挙動を仮想マシンから除去することができる。
【0056】
[0056] 一実施形態では、ハードウェアは、仮想マシンが途絶なく実行し続けるために保存する必要がある状態情報を保持することができる。このような状態データーは、仮想マシンにおけるドライバーの便宜上必要とされるデーター以上であり、それを超える場合もある。一例を上げると、ネットワーキング・インターフェースが、接続に基づいて動作しており、接続が無損失である場合である。このような場合、肝要な(critical)データーが現在ハードウェア・デバイスに格納されているときであっても、接続を確立させ続け有効であり続けなければならない場合には、送信または受信データーが失われてはならない。この場合、仮想マシンは、同じMACアドレスを用いる同じネットワークへの代替経路を有する(そうでなければ、接続を保存する地点がなくなるであろう)と推定することができる。この場合、ハードウェアが除去されるので、ドライバーは、ハードウェアが除去される前に、接続状態データーをハードウェアから抽出することを試みることができることを、仮想マシンにおけるドライバーに通知することができる。仮想マシンにおけるドライバーは、次いで、ハードウェアを除去できるように、それを終了したときに報告することができる。このような通知は、できるだけ早く伝えることが望ましい。一実施形態では、この場合、以下のハードウェア除去ステップを採用することができる。
【0057】
1.仮想化システムは、ハードウェア制御インターフェースが除去されるというメッセージを、仮想マシンにおけるドライバーに送ることができる。
2.仮想化システムは、所定時間または第1時間期間だけ、ドライバーがハードウェアからのデーター抽出を完了したという、仮想マシンにおけるドライバーからのメッセージを待つことができる。仮想化システムは、この所定時間が過ぎたとき、または仮想化システムが、ドライバーがハードウェアからのデーター抽出を完了したというメッセージをドライバーから受信したときに、次のステップに進むことができる。この時間期間は、一般に、例えば、個々のドライバーが用いる最もありふれたトランザクションを完了するための平均時間期間を推定することによって決定すればよい。
【0058】
3.仮想マシンの仮想プロセッサーを一時停止する。
4.仮想マシンのアドレス空間の該当部分(メモリー領域)からハードウェア制御インターフェースにマッピングするマッピングを除去することによって、仮想マシンからハードウェア制御インターフェースを除去する。
【0059】
5.ハードウェア制御インターフェースからあらゆる必要なデーターを読み取る。
a.この実施形態では、仮想マシンにおけるドライバーは、ハードウェア・デバイスからデーターを抽出するために所定の時間量を既に与えられていた。しかしながら、仮想マシンにおけるドライバーはデーター抽出を完了していない場合もある。何故なら、仮想化システムは、仮想マシンがそのプロセスを完了するまで無期限に待つのではなく、所定の時間期間が過ぎたときに、除去ステップを既に継続していることがあるからである。したがって、仮想マシンにおけるドライバーは、仮想プロセッサーが後に一時停止を解除されるときに、ハードウェア制御インターフェースを収容していた仮想マシンのアドレス空間の部分にアクセスする試みをなおも行うことができる。
【0060】
b.この実施形態では、ハードウェアから読み取られるデーターは、仮想マシンにおけるドライバーのクラッシュを回避し、仮想マシンにおけるドライバーが無効な動作(例えば、無効のデーターを仮想マシンの残りの部分に配信する)を開始するのを防止するために必要なデーターに限定することができる。この限定されたデーターは、現在のレジスタ値等の内容を含むことができる。このデーターは、通例、パケット・データーを含む必要はないが、そのようなデーターが含まれてもよい。
【0061】
6.エミュレートした挙動を設定する。
a.現在の例では、エミュレートされた挙動は、前述のビット毎挙動のリストからの挙動を、ビット毎に異なる可能性がある挙動と共に含むことができる。
【0062】
b.エミュレートされた挙動は、仮想マシンと関連付けていくことができ、仮想マシンにおけるドライバーが、ハードウェア制御インターフェースにアクセスする保留中の試みを完了したことを報告するまで、仮想マシンと共に移動することができる。
【0063】
7.仮想マシンのアドレス空間の該当部分を、所望のエミュレートされた挙動にマッピングする。
8.ハードウェアがもはや存在しないことを示すために、特殊メモリー領域における「ハードウェア存在」値を変更する。
【0064】
9.仮想マシンの仮想プロセッサーの一時停止を解除する。
10.仮想マシンにおけるドライバーは、最終的に、所定のタイマーの終了後にハードウェア制御インターフェースからの状態データー抽出を完了したことを報告することができる。これが発生した場合、メッセージを無視または破棄することができる。
【0065】
11.最後に、仮想マシンにおけるドライバーは、当該ドライバーがハードウェア制御インターフェースにアクセスする試みを完了したことを報告することができる。この時点で、エミュレートされた挙動を仮想マシンから除去することができる。
【0066】
[0057] 他の実施形態では、仮想マシンの外部で実行するソフトウェアがしかるべく構成されている場合、この外部のソフトウェアが、仮想マシンにおけるドライバーの代わりに、このドライバーの関与なく、ハードウェアから必要なデーターを抽出するのに必要なステップを実行することができる。仮想マシン外部のソフトウェアによるデーター抽出は、状態データーの量および複雑度がかなり大きく、先の例におけるようにハードウェアとのかなりの同期を必要とする場合でも、可能なこともある。
【0067】
[0058] 更に別の実施形態では、ハードウェア制御インターフェースを、当該ハードウェア制御インターフェースの完全なソフトウェア・エミュレーションと交換することもできる。一実施形態では、ハードウェア制御インターフェースの完全なソフトウェア・エミュレータを設けることができる。この場合、仮想マシンにおけるドライバーは、そのインターフェースが実際のハードウェアを表すかのように、ハードウェア制御インターフェースを用い続けることができる。ハードウェア制御インターフェースをエミュレートするソフトウェアは、ハードウェア制御インターフェースをエミュレートする際の最大範囲の機能を提供することができる。尚、この実施形態では、ハードウェア・インターフェースを完全なエミュレーションと交換することができるが、エミュレーションの具体的な複雑度または範囲は、個々のシステム構成に応じて変化する場合もあることは、当業者には言うまでもないであろう。このようなエミュレーションは、仮想マシン外部におけるコード実行によって、ハードウェアからの状態データーの抽出を含むことができる。この場合、抽出される状態データーは、単に仮想マシンに有用な任意のデーターではなく、ハードウェア・インターフェースが除去または中断された時点からハードウェアを完全にエミュレートするために状態を表すのに十分でなければならない。更に、ハードウェアにおいて現在進行中のトランザクションまたは動作を、ハードウェアから状態が抽出される前に、完了させるとよい。
【0068】
[0059] 現在開示している態様は、システム、方法、コンピューター読み取り可能媒体に存在するコンピューター実行可能命令等として実現することができる。つまり、いずれの特定のシステム、方法、またはコンピューター読み取り可能媒体のいずれの開示も、それに制約されるのではなく、逆に開示する主題を実現する他の方法に拡大する。
【0069】
[0060]
図6から
図8までは、仮想マシン環境内に存在するドライバーについて、前記ドライバーがメモリー領域にアクセスしようとするとき、およびハードウェア・デバイスが計算環境から除去されるように構成されているときに、前記ハードウェア・デバイスに対応する前記メモリー領域へのアクセス可能性を維持するための動作手順の一例を示す。この手順は、動作600、602、604、および606を含むことができる。
図6を参照すると、動作600は動作手順を開始し、動作602において、前記メモリー領域のハードウェア制御インターフェース部分が、前記ハードウェア制御インターフェースと関連したコードおよびデーターによって示される機能と交換されるように構成され、この機能は、ハードウェア・デバイスが計算環境から除去され終えているときでも、ドライバーに理解可能となっている。実際のコードおよびデーターは、ドライバーには直接見えなくてもよく、コードは仮想化システムによって直接実行されなくてもよい。代わりに、コードおよびデーターは、コードが何らかの動作を起こすことやその意図する範囲以外から何らかのデーターを読み取ることを防止するために、何らかの方法で解釈またはエミュレート、あるいは収容されればよい。コードおよびデーターは、仮想マシン環境のアドレスに対する書き込みおよび読み取りを行う挙動を指定し、仮想マシンに呈示しなければならない。言い換えると、仮想マシンが書き込み動作を関連した仮想マシン環境のアドレスに対して実行するとき、コードは、書き込まれるデーターを用いて、恐らくはこのデーターによって表される状態に基づいて動作を実行する。読み取り動作が仮想マシンによって実行される場合、コードは、恐らくはデーターによって表される状態に基づいて、どの値が読み取りによって返されるべきか判断するための動作を実行する。このデーターの一部は、読み取りおよび書き込みを通じて仮想マシンに直接見ることができてもよいが、全てのデーターが仮想マシンに見ることができる必要はない。この可視性は、読み取り/書き込みの下位部分(sub-portion)を用いることによって達成することができ、あるいはデーターに対するコード「パス・スルー」読み取りまたは書き込みによって達成することもできる。データーの見える部分と同等の挙動は、コードによって他の方法で達成することもできる。仮想マシン環境を異なる計算環境に移動させるときは、仮想マシン環境と共に移動する機能を構成する(604)。
【0070】
[0061]
図7は、
図6の動作手順600の更に別の実施形態を示す。動作702において、仮想マシン環境を保存する(save)とき、スナップショットを撮るとき、またはライブ・マイグレーションを行うときに、仮想マシン環境と共に移動するように機能を構成する。先に論じたように、仮想マシンを解体するときに、このマシンを保存することができる。スナップショットの撮影は、仮想マシン状態を完全に特徴付ける必要があるときに行うことができる。つまり1組の状態およびデーターがある特定の時点にあったときのそのコピーを行うことができる。ライブ・マイグレーションは、異なる位置および環境間において仮想マシンを移すプロセスである。つまり、データーおよび挙動は、データーおよび挙動がもはや必要でないことを仮想マシンが示すまで、仮想マシンの状態の一部となることができる。動作704において、前記仮想マシン環境の状態の一部となるように、機能を構成する。仮想マシン環境には、ハードウェア・デバイスを排他的に割り当てることができる(706)。あるいは、仮想マシン環境は、少なくとも1つの他の仮想マシン環境とハードウェア・デバイスを共有することもできる(707)。
【0071】
[0062] 動作708は、第1時間期間の後機能を用いるのを停止するようにドライバーを構成することを示す。通例、この時間期間は、ドライバーが所望のトランザクションを完了した後できるだけ早くすべきである。この第1時間期間によって、保留中のトランザクションを完了することが可能になればよい(709)。仮想化システムは、所定の時間が経過したとき、または仮想化システムが、ドライバーがハードウェアからのデーター抽出を完了したというメッセージをドライバーから受信したときに、次のステップに進むことができる。あるいは、710は、第2時間期間中機能を用い続けるようにドライバーを構成することを示す。この第2時間期間によって、ドライバーがインターフェースを放棄するまで使用を継続可能にすることができる(712)。
【0072】
[0063] 動作713は、機能がビット毎の情報を前記ドライバーに提供することを示す。動作715は、機能が仮想化メカニズムによるエミュレーション挙動を備えていることを示す。動作720は、仮想マシン環境がペアレント仮想マシンのチャイルド仮想マシンであることを示す。動作725において、メモリー領域のハードウェア制御インターフェース部分がこの機能と交換されるまで、仮想プロセッサーを一時中止する。動作730は、メモリー領域のハードウェア制御インターフェース部分をこの機能と交換することを示す。
【0073】
[0064]
図8を参照すると、動作802において、仮想マシン環境のアドレスを、機能によって支持されるメモリー領域の部分にマッピングする。動作808において、仮想プロセッサーを一時中止し、動作813において、ドライバーがメモリー領域のハードウェア制御インターフェース部分にアクセスし終えたことを報告したときに、ハードウェア制御インターフェースを除去する。
【0074】
[0065] 動作814において、メモリー領域のハードウェア制御インターフェース部分が交換されようとしていることを、ドライバーに伝える。ハードウェア・デバイスの状態を記録する(815)。この状態は、コードおよびデーターに追加する情報を含む(820)。動作825は、ドライバーがメモリー領域のハードウェア制御インターフェース部分にアクセスし終えたときをドライバーが報告するのを待つことを示す。動作830は、ドライバーがハードウェア制御インターフェースにアクセスし終えたという報告を、ドライバーから受けることを示す。
【0075】
[0066] 動作835は、仮想マシン外部で実行するソフトウェアが、仮想マシンにおけるドライバーの代わりに、このドライバーの関与なく、ハードウェア・デバイスの状態を読み取ることができることを示す。ハードウェア制御インターフェースの完全なソフトウェア・エミュレーションを動作840において提供することができる。
【0076】
[0067] 動作845は、ハードウェア制御インターフェースがハードウェア・デバイスによって支持されているか否か、またはハードウェア・デバイスが除去されているか否かチェックするために、メモリー領域のハードウェア制御インターフェース部分内に、メモリー下位領域(sub-region)を設けることを示す。動作850は、メモリー領域のハードウェア制御インターフェース部分が交換されたときにハードウェア・デバイスが除去されたことを示すために、メモリー下位領域を更新することを示す。
【0077】
[0068]
図9は、仮想マシン環境内に存在するドライバーに対するハードウェア・デバイスに対応するメモリー領域へのアクセス可能性を維持する動作手順の一例を示し、動作900、902、904、906、908、910、912、および914を含む。
図9を参照すると、動作900においてこの動作手順を開始し、動作902は、前記ハードウェア制御インターフェースと関連したコードおよびデーターによって示される機能と交換されるように、メモリー領域のハードウェア制御部分を構成することを示し、この機能は、ハードウェア・デバイスが計算環境から除去されたときにドライバーには理解可能である。仮想マシン環境を異なる計算環境に移動させるときに、仮想マシン環境と共に移動するように機能を構成することができる(904)。動作906は、ハードウェア制御インターフェースがハードウェア・デバイスによって支持されているか否か、またはハードウェア・デバイスが除去されているか否かチェックするために、メモリー領域のハードウェア制御インターフェース部分内にハードウェア・デバイス存在値を設けることを示す。
【0078】
[0069] 動作908は、メモリー領域のハードウェア制御インターフェース部分を機能と交換する前に、仮想マシン環境の仮想プロセッサーを一時中止することを示す。動作910において、ハードウェア制御インターフェース部分を機能と交換する。動作912は、仮想マシン環境のアドレスを、この機能があるメモリーにおける対応するアドレスにマッピングすることを示す。
【0079】
[0070]
図10に進んで、動作1002は、ハードウェア・デバイス存在値を存在から不在に変更することを示す。動作1004において仮想プロセッサーを一時停止し、動作1006において、ドライバーがハードウェア制御インターフェースにアクセスし終えたことを報告したときに、ハードウェア制御インターフェースを除去する。動作1008は、機能がビット毎情報をドライバーに提供することを示す。
【0080】
[0071] 以上に述べた態様はいずれも、方法、システム、コンピューター読み取り可能媒体、または任意のタイプの生産品(manufacture)で実現することができる。例えば、
図11では、コンピューター読み取り可能媒体が、仮想マシン環境に存在するドライバーに対するハードウェア・デバイスの制御インターフェースに対応するメモリー領域へのアクセス可能性を維持するためのコンピューター実行可能命令を格納することができる。このような媒体は、前記ハードウェア制御インターフェースと関連したコードおよびデーターによって示される機能と交換される(1110)ように、メモリー領域のハードウェア制御インターフェース部分を構成するための命令の第1部分集合を含むことができ、この機能は、ハードウェア・デバイスが計算環境から除去されたときには、ドライバーには理解可能である。また、この媒体は、仮想マシン環境を異なる計算環境に移動させるとき(1112)に仮想マシン環境と共に移動するように機能を構成するための命令の第2部分集合も含む。尚、本明細書に開示した種々の他の態様を捉える(capture)ために追加の命令集合を用いることができ、現在開示されている命令の3つの部分集合は、本開示によってその詳細が変わり得ることは、当業者には認められよう。
【0081】
[0072] 例えば、命令は、更に、ドライバーがハードウェアからのデーター抽出を完了したことを示すドライバーからのメッセージを所定の時間期間だけ待つための命令1020を含むことができる。この命令1020は、更に、抽出されていないデーターをハードウェア制御インターフェースから読み取り、前記メッセージをドライバーから受信する前に所定の時間期間が経過したときに、所定期間の経過後にメッセージを受信した場合にこのドライバーからのメッセージを無視するための命令も含むことができる。
【0082】
[0073] 再度、一例として、命令は、ハードウェア制御インターフェースを機能と交換する前に、仮想マシン環境の仮想プロセッサーを一時停止させる(1121)ための命令、メモリー領域のハードウェア制御インターフェース部分を機能と交換する(1122)ための命令、仮想マシン環境のアドレスを機能とマッピングする(1123)ための命令、前記ハードウェア制御インターフェースが前記ハードウェア・デバイスによって支持されているか否か、または前記ハードウェア・デバイスが除去されているか否かチェックするために、前記仮想マシン環境に対する前記メモリー領域の前記ハードウェア制御インターフェース部分内に、ハードウェア・デバイス存在値を供給する(1125)ための命令、ハードウェア・デバイス存在値を存在から不在に変更する(1126)ための命令、仮想プロセッサーの一時停止を解除する(1128)ための命令、ドライバーがハードウェア制御インターフェースにアクセスし終えたことを報告したときに機能を除去する(1130)ための命令を更に含むことができる。
【0083】
[0074] 更に、前述の命令は命令1140を含むことができ、前述の機能は、ビット毎の情報を前記ドライバーに提供し、この情報は、読み取りのみ、読み取り時常に0、読み取り時常に1、読み取り−書き込み、1の書き込みをクリアする/0の書き込みのみが残る、1の書き込みをセットする/0の書き込みのみが残る、0の書き込みをクリアする/1の書き込みのみが残る、0の書き込みをセットする/1の書き込みのみが残る、最初の読み取りの後0にクリアする、および最初の読み取りの後1にセットすることを含む。
【0084】
[0075] 前述のように、本発明の態様は、プログラミングされたコンピューターにおいて実行することができる。
図1cおよび以下の論述は、本開示の態様を実現することができる適した計算環境について端的な説明を行うことを意図している。尚、
図1のコンピューター・システムは、実施形態によっては、
図1aおよび
図1bの種々の態様を実施できることを、当業者は認めることができよう。これらの実施形態例では、サーバーおよびクライアントは、
図1cにおいて記載するコンポーネントの一部または全部を含むことができ、実施形態によっては、サーバーおよびクライアントの各々が、本開示の特定の態様をインスタンス化するように構成された回路を含むこともできる。
【0085】
[0076] 回路(circuitry)という用語は、本開示全体において用いられる場合、特殊化されたハードウェア・コンポーネントを含むことができる。同じまたは他の実施形態において、回路は、ファームウェアまたはスイッチによって機能(1つまたは複数)を実行するように構成されているマイクロプロセッサーを含むことができる。同じまたは他の実施形態例において、回路は、1つ以上の汎用処理ユニットおよび/またはマルチコア処理ユニット等を含むことができ、これらは、機能(1つまたは複数)を実行するように動作可能なロジックを具体化したソフトウェア命令がメモリー、例えば、RAMおよび/または仮想メモリーにロードされるときに構成を設定することができる。回路がハードウェアおよびソフトウェアの組み合わせを含む実施形態例では、実施者(implementer)はロジックを具体化するソース・コードを書くことができ、このソース・コードをコンパイルしてマシン読み取り可能コードにし、これを汎用処理ユニット(1つまたは複数)によって処理することができる。
【0086】
[0077]
図1cを参照すると、計算システムはコンピューター20等を含むことができる。コンピューター20は、処理ユニット21、システム・メモリー22、およびシステム・バス23を含む。システム・バス23は、システム・メモリーを含む種々のシステム・コンポーネントを処理ユニット21に結合する。システム・バス23は、数種類のバス構造の内任意のものでよく、メモリー・バスまたはメモリー・コントローラ、周辺バス、および種々のバス構造の内任意のものを用いるローカル・バスを含む。システム・メモリーは、リード・オンリ・メモリー(ROM)24およびランダム・アクセス・メモリー(RAM)25を含む。基本入出力システム26(BIOS)は、起動中のように、コンピューター20内にあるエレメント間における情報伝送を補助する基本的なルーティンを含み、ROM24内に格納されている。更に、コンピューター20は、図示しないハード・ディスクからの読み取りおよびこれへの書き込みを行なうハード・ディスク・ドライブ27、リムーバブル磁気ディスク29からの読み取りおよびこれへの書き込みを行なう磁気ディスク・ドライブ28、ならびにCD ROMまたはその他の光媒体のようなリムーバブル光ディスク31からの読み取りおよびこれへの書き込みを行なう光ディスク・ドライブ30を示す。実施形態例によっては、本発明の態様を具体化するコンピューター実行可能命令を、ROM24、ハード・ディスク(図示せず)、RAM25、リムーバブル磁気ディスク29、光ディスク31、および/または処理ユニット21のキャッシュに格納することができる。ハード・ディスク・ドライブ27、磁気ディスク・ドライブ28、および光ディスク・ドライブ30は、それぞれ、ハード・ディスク・ドライブ・インターフェース32、磁気ディスク・ドライブ・インターフェース33、および光ドライブ・インターフェース34によって、システム・バス23に接続されている。これらのドライブおよびそれらに関連するコンピューター読み取り可能媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびコンピューター20のための他のデーターの不揮発性格納に備えている。本明細書において記載した環境ではハード・ディスク、リムーバブル磁気ディスク29、およびリムーバブル光ディスク31を採用したが、磁気カセット、フラッシュ・メモリー・カード、ディジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリー(RAM)、リード・オンリ・メモリー(ROM)等のような、コンピューターによってアクセス可能なデーターを格納することができる、他のタイプのコンピューター読み取り可能媒体も、本動作環境において用いることができることは、当業者には認められてしかるべきである。
【0087】
[0078] ハード・ディスク、磁気ディスク29、光ディスク31、ROM24、またはRAM25には、複数のプログラム・モジュールを格納することができ、これらのプログラム・モジュールには、オペレーティング・システム35、1つ以上のアプリケーション・プログラム36、他のプログラム・モジュール37、およびプログラム・データー38が含まれる。ユーザは、キーボード40およびポインティング・デバイス42のような入力デバイスを通じて、コマンドおよび情報をコンピューター20に入力することができる。他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディスク、スキャナー等を含むことができる。これらおよび他の入力デバイスは、多くの場合、システム・バスに結合されているシリアル・ポート・インターフェース46を介して処理ユニット21に接続されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス(USB)のような、他のインターフェースによって接続することもできる。また、ディスプレイ47または他のタイプのディスプレイ・デバイスも、ビデオ・アダプター48のようなインターフェースを介して、システム・バス23に接続することができる。ディスプレイ47に加えて、コンピューターは、通例、スピーカーおよびプリンターのような、他の周辺出力デバイス(図示せず)も含む。また、
図1のシステムは、ホスト・アダプター55、スモール・コンピューター・システム・インターフェース(SCSI)バス56、およびSCSIバス56に接続されている外部記憶デバイス62も含む。
【0088】
[0079] コンピューター20は、リモート・コンピューター49のような、1つ以上のリモート・コンピューターへの論理接続を用いて、ネットワーク型環境においても動作することができる。リモート・コンピューター49は、他のコンピューター、サーバー、ルーター、ネットワークPC、ピア・デバイス、または他の一般的なネットワーク・ノードとすることができ、通例、コンピューター20に関して先に説明したエレメントの多くまたは全てを含むことができるが、
図1cにはメモリー記憶デバイス50しか示されていない。
図1に図示されている論理接続は、ローカル・エリア・ネットワーク(LAN)51およびワイド・エリア・ネットワーク(WAN)52を含むことができる。このようなネットワーキング環境は、事務所、企業規模のコンピューター・ネットワーク、イントラネットおよびインターネットにおいては、極一般的である。
【0089】
[0080] LANネットワーキング環境で用いる場合、コンピューター20は、ネットワーク・インターフェースまたはアダプター53を介してLAN51に接続する。WANネットワーキング環境で用いる場合、コンピューター20は、通例、モデム54、またはインターネットのようなワイド・エリア・ネットワーク52を通じて通信を確立するその他の手段を含む。モデム54は、内蔵でも外付けでもよく、シリアル・ポート・インターフェース46を介してシステム・バス23に接続することができる。ネットワーク型環境では、コンピューター20に関して図示したプログラム・モジュール、またはその一部は、離れたメモリー記憶装置に格納することもできる。尚、図示したネットワーク接続は一例であり、コンピューター間において通信リンクを確立する他の手段を用いてもよいことは認められよう。更に、本発明の複数の実施形態は特にコンピューター・システムに非常に適しているが、本文書は、本開示をこのような実施形態に限定することを意図するものは何もない。
【0090】
[0081] 以上の詳細な説明では、例および/または動作図によって、システムおよび/またはプロセスの種々の実施形態を明記した。このようなブロック図、および/または例が1つ以上の機能および/または動作を含む限り、このようなブロック図、または例における各機能および/または動作は、広範囲のハードウェア、ソフトウェア、ファームウェア、または事実上その任意の組み合わせによって、個々におよび/または集合的に実現できることは、当業者には言うまでもないであろう。
【0091】
[0082] 最後に、種々の図に示すように、好ましい態様と関連して本開示について説明したが、他の同様の態様も用いることもでき、本開示から逸脱することなく、それと同じ機能を実行するために、記載した態様に対して変更や追加を行うこともできることは言うまでもない。例えば、本開示の種々の態様では、仮想マシンと関連したメモリー位置を支持するハードウェアを、支持メカニズムと交換するための種々のメカニズムを開示した。しかしながら、これらの記載した態様と同等の他のメカニズムも、本明細書における教示によって想起されよう。したがって、本開示はいずれの1つの態様にも限定されることはなく、むしろ添付した特許請求の範囲にしたがってその幅(breadth)および範囲を解釈すべきである。