(57)【特許請求の範囲】
【請求項１】
ゲスト仮想マシン、ゲストドライバ、および仮想マシンモニタを実行するプラットフォームハードウェアを備え、
前記プラットフォームハードウェアは、前記ゲストドライバを実行して、前記仮想マシンモニタを用いてエミュレートされている仮想デバイス、および、前記プラットフォームハードウェア内の物理デバイスの仮想機能のうちどちらのデバイスが複合仮想デバイスについてアクティブ状態であるかを検出して、前記アクティブ状態のデバイスに一致するプラグインを選択し、
前記プラットフォームハードウェアは、前記仮想マシンモニタを実行して、前記仮想デバイス、および、前記物理デバイスの仮想機能のうち一方を、前記ゲスト仮想マシンに割り当てて、前記割り当てられた方のデバイスを介して、前記複合仮想デバイスのインターフェースを前記ゲスト仮想マシンに公開するシステム。
【請求項２】
前記プラットフォームハードウェアは、仮想マシン移行を前記ゲストドライバに通知する仮想マシンツールモジュールをさらに実行する請求項１に記載のシステム。
【請求項３】
前記プラットフォームハードウェアは、前記仮想マシンモニタを実行して、さらに、前記割り当てられた方のデバイスインターフェースから独立している、前記複合仮想デバイスについてのコンフィグレーションスペースを、前記ゲスト仮想マシンに公開する請求項１または２に記載のシステム。
【請求項４】
前記プラットフォームハードウェアは、前記仮想マシンモニタを実行して、さらに、前記コンフィグレーションスペースのマッピングを前記割り当てられた方のデバイスへと切り替えることにより、前記コンフィグレーションスペースから前記アクティブ状態のデバイスへのマッピングを維持する請求項３に記載のシステム。
【請求項５】
前記プラットフォームハードウェアは、前記仮想マシンモニタを実行して、さらに、前記エミュレートされている仮想デバイスおよび前記仮想機能をカバーするべく前記コンフィグレーションスペース内の１以上のフィールドを提供する請求項３または４に記載のシステム。
【請求項６】
前記エミュレートされている仮想デバイスは、エミュレートされているグラフィクス処理機能を実施するべく、エミュレートされている仮想グラフィクスデバイスを含む請求項１から５のいずれか一項に記載のシステム。
【請求項７】
前記ゲストドライバは、ラッパ−プラグイン構造を持ち、前記ラッパは、前記プラットフォームハードウェアにより実行されて、前記アクティブ状態のデバイスに対応するプラグインを決定する請求項１から６のいずれか一項に記載のシステム。
【請求項８】
前記プラットフォームハードウェアは、前記仮想マシンモニタを実行して、さらに、前記ゲスト仮想マシンのゲストオペレーティングシステムにおいてプラグ・アンド・プレイイベントをトリガすることなく、前記複合仮想デバイスにおいて、前記エミュレートされている仮想デバイスと前記物理デバイスの前記仮想機能との間で切り替えを行う請求項１から７のいずれか一項に記載のシステム。
【請求項９】
プラットフォームハードウェアが、エミュレートされている仮想グラフィクスデバイス、および、ホスト内の物理グラフィクスデバイスの仮想機能のうち一方を介して、複合仮想グラフィクスデバイスをゲストに提供する段階と、
前記プラットフォームハードウェアが、前記複合仮想グラフィクスデバイスのインターフェースを前記ゲストに公開する段階と、
前記プラットフォームハードウェアが、前記エミュレートされている仮想グラフィクスデバイスと前記仮想機能との間で切り替えが発生することに応じて、切り替え先のデバイスに対応するプラグインドライバを決定する段階と、
前記プラットフォームハードウェアが、前記エミュレートされている仮想グラフィクスデバイスおよび前記仮想機能のうち前記切り替え先である一方を初期化する段階と
を備える方法。
【請求項１０】
前記プラットフォームハードウェアが、前記ゲストのゲストオペレーティングシステムからホットプラグ／アンプラグを行うことなく、仮想機能デバイスと前記エミュレートされている仮想グラフィクスデバイスとの間で切り替えを行う段階をさらに備える請求項９に記載の方法。
【請求項１１】
前記プラットフォームハードウェアが、前記複合仮想グラフィクスデバイスについて前記エミュレートされている仮想グラフィクスデバイスおよび前記仮想機能のうちどちらがアクティブ状態であるかからは独立しているコンフィグレーションスペースである、前記複合仮想グラフィクスデバイスについてのＰＣＩｅコンフィグレーションスペースを、前記ゲストのゲストオペレーティングシステムに公開する段階をさらに備える請求項９または１０に記載の方法。
【請求項１２】
前記ＰＣＩｅコンフィグレーションスペースは、前記エミュレートされている仮想グラフィクスデバイスおよび前記仮想機能のうちアクティブ状態である方へマッピングされている１以上のフィールドを含む請求項１１に記載の方法。
【請求項１３】
前記プラットフォームハードウェアが、前記ゲストのゲストオペレーティングシステムにおいてプラグ・アンド・プレイイベントをトリガすることなく、前記複合仮想グラフィクスデバイスにおいて前記エミュレートされている仮想グラフィクスデバイスと前記仮想機能との間での切り替えを行う段階をさらに備える請求項９から１２のいずれか一項に記載の方法。
【請求項１４】
コンピュータに、
ＰＣＩｅグラフィクスデバイスの仮想モデルについて、ホスト内の物理グラフィクスデバイスの仮想機能およびエミュレートされている仮想グラフィクスデバイスのうちどちらのデバイスがアクティブ状態であるかを検出する手順と、
検出されたアクティブ状態である前記デバイスに一致するプラグインを選択する手順と、
前記仮想機能、および、前記エミュレートされている仮想グラフィクスデバイスのうち一方をゲストに割り当てる手順と、
ＰＣＩｅグラフィクスデバイスの仮想モデルのインターフェースを前記ゲストに公開する手順と
を実行させるためのプログラムであって、
前記ＰＣＩｅグラフィクスデバイスは、前記割り当てられた方のデバイスを介してグラフィクス機能を持つ
プログラム。
【請求項１５】
前記コンピュータにさらに、前記ＰＣＩｅグラフィクスデバイスの前記仮想モデルのＰＣＩｅコンフィグレーションスペースを前記ゲストに対して公開する手順を実行させるためのプログラムであって、
前記ＰＣＩｅコンフィグレーションスペースは、前記割り当てられた方のデバイスから独立しており、前記仮想機能および前記エミュレートされている仮想グラフィクスデバイスのコンフィグレーションをカバーする請求項１４に記載のプログラム。
【請求項１６】
前記コンピュータにさらに、前記ゲストにおいて仮想マシン移行が発生することに応じて、前記ＰＣＩｅグラフィクスデバイスの前記仮想モデルにおいてＰＣＩｅ機能レベルリセットを実行して、前記仮想機能および前記エミュレートされている仮想グラフィクスデバイスへのアクセスを無視する手順を実行させるための請求項１４または１５に記載のプログラム。
【請求項１７】
前記コンピュータにさらに、前記仮想マシン移行に基づき、前記ＰＣＩｅグラフィクスデバイスの前記仮想モデルの基礎となる前記物理グラフィクスデバイスと前記仮想機能との間において切り替えを行う手順を実行させるための請求項１６に記載のプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
仮想化によって、仮想化がハードウェアおよびソフトウェアによってサポートされている単一のホストマシンは、当該ホストを抽象化したものを提示することができ、ホストマシンの基礎となるハードウェアは１以上の独立して動作する仮想マシンとして存在するようになる。このため、各仮想マシンは、自己完結型のプラットフォームとして機能するとしてよい。仮想化技術は、複数のゲストオペレーティングシステムおよび／または他のゲストソフトウェアを、実際には物理的に同じハードウェアプラットフォームで実行されているものの、見掛け上同時に、そして、見掛け上独立して、複数の仮想マシンで共存および実行させるべく利用されるとしてよい。仮想マシンは、ホストマシンのハードウェアを模倣するとしてもよいし、これに代えて、別のハードウェア抽象化を共に提示するとしてもよい。
【０００２】
仮想化システムは、ホストマシンへのアクセスを制御する仮想マシンモニタ（ＶＭＭ）を含むとしてよい。一部の実施形態によると、任意のその他のＶＭ制御ロジックを利用するとしてもよい。ＶＭＭは、仮想マシンで動作するゲストソフトウェアに、一連のリソース（例えば、プロセッサ、メモリ、ＩＯデバイス）を提供するとしてよい。ＶＭＭは、物理ホストマシンのコンポーネントの一部またはすべてを仮想マシンにマッピングするとしてよく、仮想マシン（例えば、仮想Ｉ／Ｏデバイス）が利用可能な仮想コンポーネントを、ＶＭＭ内のソフトウェアにおいてエミュレートするとしてよい。ＶＭＭは、ハードウェア仮想化アーキテクチャの特徴を利用して、仮想マシンにサービスを提供し、ホストマシンで実行されている複数の仮想マシンをそれぞれ保護するとしてよい。
【０００３】
仮想化コンピューティング環境において、「ライブマイグレーション」を利用して、または、ＶＭの状態を保存して復元させる方法を利用して、一の物理プラットフォームから別の物理プラットフォームへと仮想マシンを移行させるとしてよい。ＶＭに提示されている全てのプラットフォームリソースが仮想リソースである場合、ＶＭＭはこれらのリソースの全ての状態を移行させるとしてよい。物理グラフィクスデバイス機能（例えば、ＳＲ−ＩＯＶ（ｓｉｎｇｌｅ−ｒｏｏｔ  Ｉ／Ｏ  ｖｉｒｔｕａｌｉｚａｔｉｏｎ）対応デバイス、または、ＩＯＭＭＵ（入出力メモリ管理モジュール）のサポートがマッピングされている専用デバイスの仮想機能）に対するインターフェースがＶＭに提供されている場合、移行プロセスは禁止されているとしてよい。一例を挙げると、移行の対象プラットフォームが、ゲストＯＳが利用可能なハードウェアグラフィクスデバイスを持っていない場合がある。別の場合には、対象プラットフォームのグラフィクスハードウェアは、ソースプラットフォームのものとは異なっている場合がある。準拠したハードウェアが対象プラットフォームで利用可能である場合には、ＶＭＭは、関連するデバイス状態情報の全ては移行しないとしてよい。グラフィクス仮想化およびＶＭ移行の場合、ゲストＯＳは、ハードウェアベースのグラフィクスデバイスが利用可能になって仮想マシンモニタ（ＶＭＭ）からＶＭへと割り当てられると、ハードウェアベースのグラフィクスデバイスへの動的な変更をサポートする必要があるとしてよい。一部のオペレーティングシステムでは、グラフィクスデバイスの動的なプラグ・アンド・プレイ機能をサポートしていない場合がある。
【図面の簡単な説明】
【０００４】
本明細書で説明する発明は、添付図面において、一例として図示するものであって、図示内容で限定されるものではない。簡潔に分かり易く図示することを目的としており、図示している構成要素は必ずしも実寸に即したものではない。例えば、分かり易いように、一部の構成要素の寸法は他の構成要素に比べて強調している場合がある。さらに、適切と考えられる場合には、対応する構成要素または同様の構成要素を示すべく、複数の図面にわたって同じ参照符号を繰り返す。
【図１】本発明の実施形態に係る、仮想マシン環境の上位構造の一例を示す概略図である。
【図２】装置の実施形態を示す概略図である。
【図３】本発明の一部の実施形態に応じたフローチャートである。
【図４Ａ】本発明の一部の実施形態に応じた概略フローチャートである。
【図４Ｂ】本発明の一部の実施形態に応じた概略フローチャートである。
【発明を実施するための形態】
【０００５】
以下に記載する説明では、複合仮想グラフィクス装置を可能とする利用モデルを提供する技術について述べる。一実施形態によると、複合仮想グラフィクス装置は、仮想マシン環境において実現され得る。別の実施形態によると、複合仮想グラフィクス機能は、プロセッサベースのコンピューティングシステムにおいて実現され得る。本発明に係る技術を実現するのはコンピューティングシステムに限定されるものではなく、同様の目的を持つ実行環境、例えば、任意のその他のデジタル／電子装置またはシステムで用いられるとしてよい。以下の説明では、数多くの具体的且つ詳細な内容、例えば、ロジック実装、オペコード、オペランド特定手段、リソースのパーティション化／共有／複製の実施例、システムコンポーネントの種類および相関関係、および、ロジックのパーティション化／統合化の選択肢について、本発明をより深く理解していただくべく、記載している。しかし、本発明はこのような具体的且つ詳細な内容を採用することなく実施するとしてもよい。また、制御構造および完全ソフトウェア命令シーケンスは、本発明をあいまいにしないように、詳細な説明を省略している。
【０００６】
本明細書において「一実施形態」、「ある実施形態」、「実施形態例」等の記載がある場合、説明している実施形態が、特定の特徴、構造または特性を含むことを意味するが、全ての実施形態が必ずしもこの特定の特徴、構造または特性を含むとは限らない。さらに、このような記載は必ずしも同じ実施形態を指すものではない。さらに、特定の特徴、構造または特性をある実施形態に関連付けて説明している場合、このような特徴、構造または特性を他の実施形態に関連付けて実現することは、明示的に記載されているか否かにかかわらず、当業者の想到し得る範囲内であると考えられる。
【０００７】
本発明の実施形態は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組み合わせで実現されるとしてよい。本発明の実施形態はさらに、１以上のプロセッサによって読み込まれて実行される機械可読媒体に格納されている命令として実現されるとしてもよい。機械可読媒体は、機械（例えば、コンピューティングデバイス）が読み出し可能な形式で情報を送信または格納する任意の機構を含むとしてよい。例えば、機械可読媒体は、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ、磁気ディスク格納媒体、光格納媒体、フラッシュメモリデバイス、電気伝搬信号、光伝搬信号、音響伝搬信号またはその他の形式の伝搬信号（例えば、搬送波、赤外信号、デジタル信号等）等を含むとしてよい。
【０００８】
以下の説明は、「第１」、「第２」等の用語を含むが、これは説明を目的としたものに過ぎず、限定的に解釈すべきではない。
【０００９】
図１は、仮想マシン環境１００の一実施形態を示すブロック図である。本実施形態において、プロセッサベースのプラットフォーム１１６はＶＭＭ１１４を実行するとしてよい。ＶＭＭは、ソフトウェアで実現されるが、仮想マシンインターフェースをエミュレートして、より上位のソフトウェアにエクスポートするとしてよい。このような上位のソフトウェアは、標準的なＯＳ、リアルタイムＯＳを含むとしてよく、オペレーティングシステム機能が限定されている必要最低限の環境であってもよいし、一部の実施形態では標準的なＯＳで利用可能なＯＳ機能を含まないとしてもよい。これに代えて、例えば、ＶＭＭ１１４は、別のＶＭＭにおいて実行されるとしてもよいし、または、別のＶＭＭのサービスを用いて実行されるとしてもよい。ＶＭＭは、例えば、ハードウェア、ソフトウェア、ファームウェアで実現されるとしてもよいし、または、一部の実施形態ではさまざまな技術を組み合わせて実現するとしてもよい。少なくとも一の実施形態では、ＶＭＭの１以上のコンポーネントは、１以上の仮想マシンで実行されるとしてよく、ＶＭＭの１以上のコンポーネントは、図１に図示するように、プラットフォームハードウェアで実行されるとしてよい。プラットフォームハードウェアで直接実行されるＶＭＭのコンポーネントは、本明細書ではＶＭＭのホストコンポーネントと呼ぶ。別の実施形態では、ＶＭＭ１１４の例は、ハイブリッド仮想マシンモニタ、ホスト仮想マシンモニタまたはハイパーバイザ仮想マシンモニタを含むとしてよい。
【００１０】
プラットフォームハードウェア１１６は、パーソナルコンピュータ（ＰＣ）、サーバ、メインフレーム、携帯情報端末（ＰＤＡ）、タブレット、スマートフォンまたは任意のその他のスマートデバイス等の手持ちデバイス、インターネットプロトコルデバイス、デジタルカメラ、ポータブルコンピュータ、ネットブックまたはノートブック等の手持ちＰＣ、または、マイクロコントローラ等の埋め込みアプリケーション、デジタルシグナルプロセッサ（ＤＳＰ）、システムオンチップ（ＳｏＣ）、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または、別のプロセッサベースのシステムであってよい。
【００１１】
プラットフォームハードウェア１１６は、少なくともプロセッサ１１８およびメモリ１２０を含む。プロセッサ１１８は、プログラムを実行可能な任意の種類のプロセッサ、例えば、マイクロプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ等であってよい。プロセッサは、実施形態において実行されるマイクロコード、プログラム可能ロジックまたはハードコードロジックを含むとしてよい。図１が図示するプロセッサ１１８は１つのみであるが、実施形態に係るシステムでは１以上のプロセッサであってよい。また、プロセッサ１１８は、複数のコアを含むとしてよく、複数のスレッドをサポートしている等としてよい。プロセッサ１１８は、本明細書で説明するさまざまな実施形態に対応付けられている処理を実行するマイクロコード、プログラム可能ロジックまたはハードコードロジックを含むとしてよい。
【００１２】
メモリ１２０は、さまざまな実施形態において、ハードディスク、フロッピー（登録商標）ディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、フラッシュメモリ、任意のその他の種類の揮発性メモリデバイスまたは不揮発性メモリデバイス、または、上記のデバイスの組み合わせ、または、プロセッサ１１８から読み出し可能な任意のその他の種類の機械媒体を含むとしてよい。メモリ１２０は、プログラムの実行および他の方法の実施形態を実行するための命令および／またはデータを格納しているとしてよい。一部の実施形態によると、本発明の一部の構成要素は、他のシステムコンポーネントで、例えば、プラットフォームのチップセットで、または、システムの１以上のメモリコントローラで実現されるとしてよい。
【００１３】
ＶＭＭ１１４は、ゲストソフトウェアに、１以上の仮想マシンの抽象化を提示するとしてよい。ＶＭＭ１１４は、複数のＶＭに対して、物理プラットフォームの同じ抽象化、または、複数の異なる抽象化を提示するとしてよい。図１の実施形態は、２つの仮想マシン１０２および１１２を示している。各仮想マシンで実行されているゲストソフトウェア１０３および１１３等のゲストソフトウェアは、ゲストＯＳ１０４または１０６等のゲストＯＳ、ならびに、さまざまなゲストソフトウェアアプリケーション１０８および１１０を含むとしてよい。ゲストソフトウェア１０３および１１３は、他の機能を実行するべく、ゲストソフトウェア１０３および１１３が実行されている仮想マシン内の物理リソース（例えば、プロセッサレジスタ、メモリおよびＩ／Ｏデバイス）にアクセスするとしてよい。例えば、ゲストソフトウェア１０３および１１３は、仮想マシン１０２および１１２で提示されているプロセッサおよびプラットフォームのアーキテクチャに応じて、全てのレジスタ、キャッシュ、構造、Ｉ／Ｏデバイス、メモリ等に対するアクセスを持つとしてよい。
【００１４】
一実施形態によると、プロセッサ１１８は、仮想マシン１０２および１１２の動作を制御するとしてよい。一実施形態によると、仮想マシン１０２が自身の仮想アドレス空間内のメモリ位置を参照することに応じて、ホストマシン１１６の物理メモリ（マシン物理メモリ）内の実際のアドレスへの参照を、ＶＭＭ１１４内のメモリ管理モジュール（不図示）で生成するとしてよい。これは、ハードウェア（場合によっては、プロセッサ１１８に組み込まれる）およびソフトウェア（例えば、ホストマシンのオペレーティングシステムで）で実行されるとしてよい。図１の実施形態では、プラットフォームハードウェア１１６はさらに、１以上のＩ／Ｏデバイス１２２を含むとしてよい。プラットフォームハードウェア１１６はさらに、１以上のグラフィクス機能を実行するべく用いられる１以上のグラフィクス制御デバイス１２４を含むとしてよい。一部の実施形態によると、プラットフォームハードウェア１１６は、任意のその他の物理グラフィクスデバイスを含むとしてよい。
【００１５】
図２は、一実施形態に応じた、仮想マシン環境において実現される複合仮想グラフィクス装置の一例を示す図である。図２を参照すると、仮想マシン環境２００は、仮想マシンモニタ（ＶＭＭ）２２０およびプラットフォーム２１０を含むとしてよい。プラットフォーム２１０は、プロセッサ１１８、メモリ１２０、入出力デバイス１２２、グラフィクスデバイス１２４等のハードウェアを含むとしてよいが、一部の実施形態によると、プラットフォーム２１０は、任意のその他のプラットフォームハードウェアデバイスを含むとしてよい。一実施形態によると、プラットフォーム２１０におけるプロセッサは、ソフトウェア命令を実行可能な任意の種類のプロセッサであってよく、例えば、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピュータ（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、複数の命令セットの組み合わせを実行するプロセッサ、または、任意のその他のプロセッサデバイス、例えば、デジタルシグナルプロセッサ、マイクロプロセッサ、デジタルシグナルプロセッサまたはマイクロコントローラ等であってよい。プラットフォーム２１０内のプロセッサは、本明細書で説明するさまざまな実施形態に対応付けられている処理を実行するマイクロコード、プログラム可能ロジック、または、ハードコードロジックを含むとしてよい。一実施形態によると、１以上のプロセッサがプラットフォーム２１０内に設けられているとしてよく、１以上のプロセッサは、複数のスレッド、複数のコア等を含むとしてよい。
【００１６】
実施形態は、コンピューティングシステムに限定されない。本発明の別の実施形態は、任意のフォームファクタのデバイス、例えば、手持ちデバイスおよび埋め込みアプリケーションで用いることができる。プラットフォーム２１０は、手持ちデバイス、ポータブルコンピュータ、セットトップボックスまたは任意のその他のプロセッサベースのシステムのハードウェアプラットフォームを含むとしてよい。手持ちデバイスの例を幾つか挙げると、携帯電話、スマートフォン、タブレット、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）、または、ネットブックまたはノートブック等の手持ちＰＣがあるとしてよい。埋め込みアプリケーションは、マイクロコントローラ、デジタルシグナルプロセッサ（ＤＳＰ）、システムオンチップ（ＳｏＣ）、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または、任意のその他のシステムを含むとしてよい。
【００１７】
図２を参照すると、ある実施形態において、ＶＭＭ２２０は、他のソフトウェアに、１以上のＶＭまたは仮想システム（不図示）の抽象化を提示するとしてよい。一実施形態によると、ＶＭＭ２２０は、環境２００内のハードウェアリソースを、ＶＭまたは仮想システムにおいて実行されている１以上の同時に動作しているオペレーティングシステムセッションに分散させることができるとしてよい。ゲストプラットフォーム２５０上の各ＶＭは、自己完結型のプラットフォームとして機能するとしてよく、自身の「ゲストオペレーティングシステム」（ＶＭＭがホストするオペレーティングシステム（ＯＳ））および他のソフトウェアを実行する。これらはまとめて、ゲストソフトウェアと呼ぶ。ある実施形態によると、ゲストプラットフォーム２５０は、さまざまなイベントを制御するとしてよく、さまざまなハードウェアリソースにアクセスすることができるとしてよい。ゲストプラットフォーム２５０の各仮想マシンで実行されているゲストソフトウェアは、ゲストＯＳまたはゲストカーネル２３０、および、ゲストユーザインターフェース２４０上のさまざまなゲストソフトウェアアプリケーション２４２を含むとしてよい。ＶＭＭ２２０は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせで実現されるとしてよい。一実施形態によると、ゲストプラットフォーム２５０は、ゲストグラフィクスサブシステムとして機能するとしてよい。
【００１８】
図２を参照すると、ある実施形態において、プラットフォーム２１０は物理グラフィクスデバイス２１２を含むとしてよい。一実施形態によると、物理グラフィクスデバイス２１２は、ＳＲ−ＩＯＶまたは任意のその他の規格等のハードウェア仮想化規格をサポートしているとしてよい。ＶＭＭ２２０は、物理グラフィクスデバイス２１２の１以上の仮想機能２１４をゲストＯＳ２３０に割り当てるとしてよい。図２の実施形態によると、ＶＭＭ２２０は、ゲストＯＳ２３０に、複合仮想グラフィクスデバイス（ＣＶＧＤ）２２２を公開するとしてよい。一実施形態によると、複合仮想グラフィクスデバイス２２２は、基礎となるエミュレートされたビデオグラフィクスアレイ（ＶＧＡ）デバイス２２４、エミュレートされた仮想グラフィクス処理ユニット（ＶＧＰＵ）２２６等の仮想グラフィクスデバイス、物理グラフィクスデバイス２１２の仮想機能（ＶＦ）２１４を統合して、ソフトウェアでエミュレートされたＶＧＡ機能をＶＧＡ２２４を介して、および、グラフィクス機能をＶＧＰＵ２２６およびデバイス２１２のＶＦ２１４の一方を介して提供するとしてよい。別の実施形態によると、複合仮想グラフィクスデバイス２２２は、ＶＧＰＵ２２６およびＶＦ２１４へのアクセスを統合する単一のペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）グラフィクスデバイスとして、ＶＭに対して提示されるとしてよい。複合仮想グラフィクスデバイス２２２は、例えば、ＶＭに提供されるグラフィクスアクセラレーション機能および／または他のグラフィクス機能のために、ＶＧＰＵ２２６とＶＦ２１４との間で切り替えを行うとしてよい。
【００１９】
ＶＭＭ２２０が提供するＶＧＡ２２４は、グラフィクスデバイス２１２の仮想機能２１４を増強するとしてよい。一実施形態によると、ＶＧＡ２２４は、例えば、ブートプロセス（ＶＦドライバがロードされる前）および／または診断出力において利用されるとしてよい。一部の実施形態によると、ＶＭＭ２２０は、複合仮想グラフィクスデバイス２２２内のスーパーＶＧＡをゲストＯＳ２３０に提供して、例えば、グラフィクス機能の改善をサポートするとしてよい。一実施形態によると、ＶＦ２１４が無いプラットフォームの場合、ＶＭＭ２２０は、エミュレートされたグラフィクス処理機能、例えば、グラフィクスレンダリング機能および／またはメディアレンダリング機能を、ソフトウェアエミュレーション（例えば、ＶＧＰＵ２２６）で、または、ホストグラフィクスハードウェアによるアクセラレーションを利用して、実現するとしてよい。ＶＭＭ２２０は、例えば、ゲストＯＳ２３０におけるプラグ・アンド・プレイ（ＰｎＰ）イベントをトリガすることなく、同じ複合仮想グラフィクスデバイス２２２内において、基礎となるエミュレートされたＶＧＰＵ２２６とＶＦ２１４との間で動的に切り替えを行うとしてよい。
【００２０】
一実施形態によると、ＶＭＭ２２０は、複合仮想グラフィクスデバイス２２２のＰＣＩｅコンフィグレーションスペースを、ゲストＯＳ２３０に公開するとしてよい。ＰＣＩｅコンフィグレーションスペースは、基礎となるグラフィクスデバイスのうち利用されているものからは独立しているとしてよい。例えば、ＶＭＭ２２０は、例えば、エミュレートされたグラフィクスデバイスＶＧＰＵ２２６またはＶＦ２１４のいずれが用いられるか、または、仮想機能がどのグラフィクスハードウェアからのものかに関係なく、複合仮想グラフィクスデバイス２２２の同じＰＣＩｅコンフィグレーションスペースを維持するとしてよい。ＶＭＭ２２０はさらに、複合仮想グラフィクスＰＣＩｅコンフィグレーションスペース（例えば、ゲストＯＳに可視）からアクティブ状態の基礎となるデバイスへのマッピングを維持するとしてよい。コンフィグレーションスペースは、基礎となるデバイスのうち１以上のコンフィグレーションを含むべく、ベースアドレスレジスタ（ＢＡＲ）のオーバープロビジョニングの数および／またはサイズを持つとしてよい。
【００２１】
一実施形態によると、ＰＣＩｅコンフィグレーションスペースは、１以上のレジスタおよび／またはフィールドを含むとしてよい。例えば、仮想グラフィクスＰＣＩｅコンフィグレーションスペースは、ベンダ識別情報（ＶＩＤ）、デバイスＩＤ（ＤＩＤ）等のデータフィールドを含むとしてよい。別の実施形態によると、仮想グラフィクスＰＣＩｅコンフィグレーションスペースは、コンフィグレーションスペース内の制御レジスタセットの一部であるＢＡＲ０およびＢＡＲ１からＢＡＲ５等のベースアドレスレジスタ（ＢＡＲ）を含むとしてよい。例えば、ＢＡＲは、メモリマッピングＩ／Ｏ（ＭＭＩＯ）レジスタまたはＩ／Ｏレジスタまたはメモリ領域を含むとしてよい。別の実施形態によると、仮想デバイスの場合、ＶＭＭは、仮想ベンダＩＤおよび／またはデバイスＩＤ等の情報をＰＣＩ−ｅコンフィグレーションレジスタに格納するとしてよく、および／または、ＢＡＲのうち１つに含まれるＭＭＩＯレジスタに、現在の状況について設定するべくドライバによって利用され得る任意の情報を格納するとしてよい。一実施形態によると、ＶＩＤ／ＤＩＤは、コンフィグレーションスペースにあるとしてよいが、ＢＡＲ０または任意のその他のＢＡＲにはないとしてよく、一部の実施形態によると、ＶＩＤおよび／またはＤＩＤは任意のその他のレジスタにあるとしてよい。
【００２２】
一実施形態によると、ＶＩＤは、基礎となるハードウェアから独立しているベンダＩＤであってよく、ＶＦ２１４（またはグラフィクスデバイス２１２）等のハードウェアの挿入／取消が行われても変化しないとしてよい。ＤＩＤは、基礎となるハードウェアから独立しているＩＤ値を持つ仮想デバイスＩＤ（ＤＩＤ）であってよく、ＶＦ２１４等のハードウェアの挿入／取消が行われてもそのままであるとしてよい。別の実施形態では、ＢＡＲ０は、基礎となるグラフィクスデバイスを特定するために用いられる１以上のＶＭＭでエミュレートされたメモリマッピングＩ／Ｏ（ＭＭＩＯ）レジスタへとマッピングされるとしてよい。一実施形態によると、ＢＡＲ０は、２つのレジスタＨＷ  ＶＩＤおよびＨＷ  ＤＩＤを含むとしてよい。一部の実施形態によると、ＢＡＲ０は１以上のレジスタを含むとしてよい。ＨＷ  ＶＩＤレジスタは、基礎となるグラフィクスデバイスのベンダＩＤを格納するとしてよい。基礎となるグラフィクスデバイスは、エミュレートされたグラフィクスデバイス２２６またはＶＦ２１４であってよい。ＨＷ  ＤＩＤレジスタは、基礎となるグラフィクスデバイスのデバイスＩＤを格納するとしてよい。基礎となるグラフィクスデバイスは、エミュレートされたグラフィクスデバイス２２６またはＶＦ２１４であってよい。一部の実施形態によると、ベンダＩＤ、デバイスＩＤおよびＢＡＲ０は、物理機能（ＰＦ）および／または仮想機能（ＶＦ）等のＳＲ−ＩＯＶ（ｓｉｎｇｌｅ−ｒｏｏｔ  Ｉ／Ｏ  ｖｉｒｔｕａｌｉｚａｔｉｏｎ）グラフィクスハードウェアにマッピングしないとしてよい。別の実施形態によると、仮想グラフィクスＰＣＩｅコンフィグレーションスペースは、１以上のエミュレートされたグラフィクスデバイスおよび／または１以上のサポートされているＶＦ実装をカバーするべく、数および／サイズに関してオーバープロビジョニングされているＢＡＲ１からＢＡＲ５等の１以上のレジスタを含むとしてよい。一部の実施形態によると、冗長なレジスタの数を変更するとしてもよい。ＶＭＭ２２０は、冗長なＢＡＲ１からＢＡＲ５を、アクティブ状態のエミュレートされたグラフィクスデバイス２２６またはＶＦ２１４等の現在のアクティブ状態の基礎となるグラフィクスデバイスのレジスタに動的にマッピングするとしてよい。
【００２３】
一実施形態によると、ＶＭＭ２２０は、エミュレートされたグラフィクスデバイス２２６またはＶＦ２１４のいずれが利用されるかに関わらず、または、どのグラフィクスハードウェアから仮想機能が提供されているかに関わらず、同じＰＣＩｅコンフィグレーションスペースを維持するとしてよい。ＶＭＭ２２０は、仮想グラフィクスＰＣＩコンフィグレーションスペース（ゲストＯＳに可視）からアクティブ状態の基礎となるグラフィクスデバイスへのマッピングを維持するとしてよい。
【００２４】
図２を参照すると、ゲストＯＳ２３０は、ゲストグラフィクスドライバ２３２を含むとしてよい。ＶＭＭ２２０は、ゲストグラフィクスドライバ２３２について、複合仮想ＰＣＩｅグラフィクスデバイス２２２によって公開されるアクティブ状態の基礎となるデバイスを検出する手段を提供するとしてよい。ある実施形態によると、ゲストグラフィクスドライバ２３２は、ラッパ−プラグイン構造を持つとしてよい。基礎となるデバイスであるＶＧＰＵ２２６およびＶＦ２１４はそれぞれ、ゲストグラフィクスドライバ２３２の対応するプラグインによって管理されるとしてよい。例えば、ゲストグラフィクスドライバ２３２は、ＶＧＰＵ２２６についてはドライバプラグイン２３６を持ち、ＶＦ２１４についてはプラグイン２３８を持つとしてよい。基礎となるグラフィクスデバイスについての各ドライバプラグインは、基礎となるグラフィクスデバイスのＢＡＲマッピングに関して知っているとしてよい。ある実施形態によると、ラッパ２３４は、複合仮想グラフィクスデバイス２２２によって公開されるアクティブ状態の基礎となるグラフィクスデバイスを検出して、検出した基礎となるデバイスに一致する適切なプラグインを選択するとしてよい。ラッパ２３４は、現在アクティブである基礎となるデバイスについてプラグインを決定するとしてよく、および／または、ＶＭＭ２２０が基礎となるグラフィクスデバイスを切り替えることに応じて、新しいプラグインを切り替えるとしてよい。ラッパ２３４はさらに、一連の１以上の標準的なグラフィクスデバイスドライバインターフェース（ＤＤＩ）をゲストＯＳ２３０および／またはグラフィクススタック２４４に提供するとしてよく、実行のために現在アクティブ状態であるプラグインにインターフェースをマッピングするとしてよい。例えば、ＯＳは、標準的なインターフェースをグラフィクススタックに対して定義するとしてよく、例えばＷｉｎｄｏｗｓ（登録商標）用のＤｉｒｅｃｔＸを定義するとしてよいが、一部の実施形態は任意の標準的なインターフェースを利用するとしてよい。
【００２５】
例えば、ＶＭＭ２２０による基礎となるグラフィクスデバイスの切り替えに応じて、ラッパ２３４は通知およびスクリーン再描画を利用してユーザに知らせるとしてよい。一実施形態によると、ＶＭ移行に応じて、ラッパ２３４は、ゲストＯＳ２３０およびグラフィクススタック２４４に対して、基礎となるグラフィクスデバイスが切り替わった旨を通知するとしてよい。例えば、ラッパ２３４は、ゲストＯＳ２３０およびグラフィクススタック２４４に対して、例えば、Ｗｉｎｄｏｗｓ（登録商標）  Ｖｉｓｔａにおいて、ドライバ呼び出しのタイムアウトによって切り替えを通知するとしてよい。別の実施形態によると、ラッパ２３４は、グラフィクスデバイスを再度初期化する修復シーケンスをゲストＯＳ２３０からプロンプトするとしてよい。別の実施形態によると、ゲストグラフィクスドライバ２３２は、ラッパ２３４からの通知に応じて、アクティブ状態の基礎となるデバイスのプラグインを呼び出すとしてよい。別の実施形態では、ＶＭ移行に応じた基礎となるグラフィクスデバイスの切り替えの通知に応じて、グラフィクススタック２４４および／または２４２等のゲストユーザインターフェース（ＵＩ）アプリケーションが、それぞれのウィンドウを再描画するとしてよい。一実施形態によると、ゲストＯＳ２３０およびグラフィクススタック２４４は、グラフィクススタック２４４および／またはＵＩアプリケーション２４２によるグラフィクスハードウェアリセットおよび／または自動再描画をサポートしているとしてよい。図２の実施形態によると、ゲストユーザインターフェース２４０はさらに、例えば図４Ａおよび図４Ｂを参照しつつ説明するように、ＶＭ移行の開始および／または管理に利用されるＶＭツール２４６を含むとしてよい。
【００２６】
図２はＶＧＰＵ２２６およびＶＦ２１４を図示しているが、一部の実施形態では、ＶＭＭ２２０が実現している複合仮想グラフィクスデバイスは、１以上の基礎となるハードウェアベースのデバイスおよび／またはソフトウェアベースのデバイスをカバーしているとしてよく、ＶＭＭ２２０は、デバイスが利用可能になること、または、利用不可能になることに応じて、複数の基礎となるデバイス間で切り替えを行うとしてよい。図２は複合仮想グラフィクスデバイスの実施形態を図示したが、一部の実施形態において、ＶＭＭ２２０は、基礎となるデバイスが利用可能か否かに基づいてゲストに複合仮想デバイスを提供するべく、任意のその他の基礎となるデバイス間で切り替えを行うとしてよい。
【００２７】
図３は、本発明の実施形態に係る方法の実施形態を説明するためのフローチャートである。ある実施形態によると、図３のフローチャートは、ゲストスタートアップに関するとしてよい。ブロック３０２において、ＶＭＭは、ＶＦまたはエミュレートされたグラフィクスデバイス等の基礎となるグラフィクスデバイスをゲストＯＳに割り当てるとしてよい。ブロック３０４において、ＶＭＭは、ゲストについて仮想ＰＣＩｅグラフィクスデバイスを設定するとしてよい。例えば、ＶＭＭは、割り当てられた基礎となるグラフィクスデバイスを用いてゲストＯＳについて複合仮想ＰＣＩｅグラフィクスデバイスを提供するとしてよい。ブロック３０４において、ＶＭＭは、複合仮想ＰＣＩｅグラフィクスデバイスのＢＡＲを、ブロック３０２で割り当てられた基礎となるグラフィクスデバイスのリソースにマッピングするとしてよい。一実施形態によると、ブロック３０６において、ゲストＯＳは、ブート中の表示用に複合仮想ＰＣＩｅグラフィクスデバイスが公開しているエミュレートされたＶＧＡを利用するとしてよい。ブロック３０８において、ゲストＯＳは、複合仮想グラフィクスＰＣＩｅデバイスを検出して、検出された仮想グラフィクスデバイスについて、２３４等のグラフィクスドライバラッパをロードするとしてよい。ブロック３１０において、ゲストラッパドライバは、基礎となるグラフィクスデバイスのどれがアクティブであるかを、仮想ＰＣＩｅコンフィグレーションスペースレジスタ、または、ＢＡＲ０等のエミュレートされたＭＭＩＯレジスタにある情報に基づいて検出するとしてよい。ブロック３１０において、ゲストラッパドライバは、エミュレートされたグラフィクスデバイス２２６またはＶＦ２１４等の検出されたアクティブ状態の基礎となるグラフィクスデバイスの対応するドライバプラグインをロードするとしてよく、および／または、ロードされたドライバプラグインによって、アクティブ状態の基礎となるグラフィクスデバイスを初期化するとしてよい。
【００２８】
図４Ａは、本発明の実施形態に係る方法の実施形態を説明するためのフローチャートである。ある実施形態によると、図４Ａに示すフローチャートは、ゲスト上の移行ソースプラットフォームによるＶＭ移行のために準備する処理に関するとしてよい。ブロック４０２において、ゲストＶＭ内の２４６等のＶＭツールモジュールは、ゲストグラフィクスドライバラッパに対して、次回のＶＭ移行について通知するとしてよい。ブロック４０４において、ゲストグラフィクスドライバラッパは、複合仮想グラフィクスＰＣＩｅデバイスに対してＰＣＩｅ機能レベルリセット（ＦＬＲ）を実行するとしてよく、ＶＧＰＵ２２６等のエミュレートされたグラフィクスデバイスおよびＶＦデバイス２１４等の仮想ＶＦ  ＰＣＩｅデバイスへのその後のアクセスを無視するとしてよい。一実施形態によると、ＦＬＲに応じて、ゲストは、ＦＬＲの完了に応じてＶＭ移行の用意が整ったことになるとしてよい。
【００２９】
図４Ｂは、本発明の実施形態に係る方法の実施形態を説明するためのフローチャートである。ある実施形態によると、図４Ｂに示すフローチャートは、ゲスト上の移行ターゲットプラットフォームによって実行されるＶＭ移行のための処理に関するとしてよい。ブロック４０６において、例えば、第１のＶＭから第２のＶＭへのＶＭ移行に応じて、ＶＭＭは、複合仮想ＰＣＩｅグラフィクスデバイス（例えば、ブロック４０４に関して説明したＦＬＲによってリセット状態である）をゲストに提供するとしてよい。例えば、ＶＭの移行先のターゲットプラットフォームおよび／またはＶＭＭ構成に基づいて、複合仮想ＰＣＩｅデバイスは、基礎となるデバイスとして、ＶＧＰＵ２２６等のエミュレートされたグラフィクス、または、２１４等のＶＦを持つとしてよい。ブロック４０８において、ゲストグラフィクスドライバラッパは、複合仮想ＰＣＩｅデバイスへのアクセスを無視し続けるとしてよい。ブロック４１０において、ＶＭツールモジュールは、ゲストグラフィクスドライバラッパに対して、グラフィクスハードウェアが変更されて利用の準備が再度整った旨を通知するとしてよい。
【００３０】
ブロック４１２において、ゲストグラフィクスドライバラッパは、ＢＡＲ０等のエミュレートされたＭＭＩＯレジスタおよび／またはＰＣＩｅコンフィグレーションスペース内の情報に基づいて基礎となるグラフィクスデバイスを検出するとしてよく、検出された基礎となるグラフィクスデバイスの対応するドライバプラグインをロードするとしてよい。ゲストグラフィクスドライバラッパは、新たに検出された基礎となるグラフィクスデバイスを初期化するべく、ロードされたドライバプラグインを利用するとしてよい。ブロック４１４において、ゲストグラフィクスドライバプラグインは、ゲストＶＭにおいてグラフィクススタックのリセットを開始するとしてよく、グラフィクススタックおよびゲストＵＩアプリケーションは、リセットに応じてウィンドウまたは表示を再描画するとしてよい。ブロック４１６において、ゲストグラフィクスドライバおよびゲストスタックは、通常処理を再開するとしてよい。
【００３１】
図３、図４Ａおよび／または図４Ｂのフローチャートは一連のプロセスを構成するものとして図示されているが、一部の実施形態に係るフローは、図示したプロセスを別の順序で実行するとしてよい。別の実施形態によると、図３、図４Ａおよび／または図４Ｂのフローは、ライブマイグレーションおよび／またはＶＭ保存／ＶＭロード型の移行をサポートするとしてよい。別の実施形態によると、図３、図４Ａおよび／または図４Ｂのフローは、ゲストＯＳおよびグラフィクスデバイスドライバモデルに対してホットプラグ／アンプラグ機能を必要としないとしてよい。図３、図４Ａおよび／または図４Ｂに示すフローは１以上の基礎となるグラフィクスデバイス／機能の間における移行について用いられるが、一部の実施形態によると、これらのフローは、任意のその他のデバイス／機能のプラグ・アンド・プレイをＶＭＭでサポートするべく利用されるとしてもよい。一部の実施形態は、グラフィクスデバイスのプラグ・アンド・プレイをＶＭＭでサポートするべく、基礎となるデバイスにおける変化に伴って挙動が変化する複合仮想グラフィクスデバイスを公開するとしてよい。一実施形態によると、複合仮想グラフィクスデバイスは、全てのＶＭＭ実施例において標準となるインターフェースを公開するとしてよく、ゲストＯＳグラフィクスデバイスドライバは、任意の特定のＶＭＭ実施例には依存しないとしてよい。別の実施形態によると、ＶＭＭによって実現される複合仮想グラフィクスデバイスは、ハードウェア、ソフトウェア、ファームウェアおよび／またはこれらの組み合わせに基づいている１以上の基礎となるデバイスをカバーしているとしてよく、基礎となるデバイスが利用可能であるか否かに応じて、基礎となるデバイスを切り替えるとしてもよい。別の実施形態によると、複合仮想グラフィクスデバイスは、全てのＶＭＭ実施例において標準となるＰＣＩｅインターフェースを公開するとしてよい。さらに別の実施形態によると、ゲストＯＳにおけるラッパ−プラグイングラフィクスデバイスドライバ構造は、基礎となるデバイスの挙動が変化すれば、新しいプラグインモジュールに切り替わるとしてよい。ラッパとプラグインとの間のインターフェースは、ゲストＯＳの全種類について標準であってよく、任意のＶＭＭ実施例に依存しないとしてよい。複合仮想グラフィクスデバイスにおいて、１以上の基礎となるグラフィクスデバイス／機能を組み合わせて、一のＰＣＩｅデバイスにまとめるとしてよい。複合仮想グラフィクスデバイスは、ＶＭＭによって実現されるとしてよいが、全てのＶＭＭ実施例において標準であるゲストＯＳへのＰＣＩｅインターフェースを公開するとしてよい。ゲストＯＳ内のラッパプラグイングラフィクスデバイスドライバにおいて、基礎となるＰＣＩｅグラフィクスデバイスの挙動の変化が検出され、適切なプラグインに切り替わるとしてよい。
【００３２】
本発明の特定の特徴について実施形態を参照しつつ説明したが、説明は本発明を限定するものと解釈されるべきではない。実施形態のさまざまな変形例および本発明の他の実施形態は、本発明の関連技術分野の当業者には明らかであり、本発明の意図および範囲に含まれるものとする。
【図１】
0005706036.tif 000002
【図２】
0005706036.tif 000003
【図３】
0005706036.tif 000004
【図４Ａ】
0005706036.tif 000005
【図４Ｂ】
0005706036.tif 000006