(57)【要約】【課題】  仮想デバイスを仮想コンピューティング環境に動的に追加する手段を提供すること。【解決手段】  マニフェストは、デバイスリストおよび外部デバイスディレクトリを含む。外部デバイスディレクトリは、この仮想化コンピューティングシステムのユーザにこの仮想コンピューティング環境に仮想デバイスを追加するために必要とされる仕様を含むソフトウェアプラグインを追加するためのディレクトリを提供する。ホストオペレーティングシステムおよび仮想デバイスは、一連の状態を介して、初期化、起動、記憶された状態のローディング、通常状態における動作、将来の復元のための状態の保存、パワーダウン、ならびにテアリングダウンおよび電源遮断を介して進む。【選択図】  図４
2006018814.tif 000002
【特許請求の範囲】
【請求項１】
仮想コンピューティング環境が、仮想ハードウェアデバイスを動的に追加するための方法であって、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査するステップと、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するステップと、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するステップと、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用するステップと
を含むことを特徴とする方法。
【請求項２】
前記仮想コンピューティング環境は、前記１組のデバイスプロパティを外部デバイスディレクトリから取得することを特徴とする請求項１に記載の方法。
【請求項３】
前記仮想コンピューティング環境は、前記仮想マシンに対応する前記仮想コンピューティング環境のデバイスリストに前記１組のデバイスプロパティを追加することにより、前記１組のデバイスプロパティを前記仮想マシンに提示することを特徴とする請求項２に記載の方法。
【請求項４】
物理ハードウェアデバイス（ＰＨＤ）についての設計をテストするための方法であって、
前記ＰＨＤについての前記設計に基づいて仮想ハードウェアデバイス（ＶＨＤ）を実施するステップと、
前記ＶＨＤをテストするためのテストデバイスドライバ（ＴＤＤ）を開発するステップと、
前記ＶＨＤおよび前記ＴＤＤを仮想コンピューティング環境（ＶＣＥ）に追加するステップと、
前記ＶＣＥ中で前記ＴＤＤを使用して前記ＶＨＤをテストするステップと
を含むことを特徴とする方法。
【請求項５】
前記ＴＤＤを用いて前記ＶＣＥ中でテストされる前記ＶＨＤに対応する前記ＰＨＤのプロトタイプを作成するステップと、
前記ＴＤＤを使用して前記ＰＨＤの前記プロトタイプをテストするステップと
をさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記仮想コンピューティング環境は、動的に前記ＶＨＤを追加することを特徴とする請求項４に記載の方法。
【請求項７】
前記仮想コンピューティング環境が、前記ＶＨＤを動的に追加する要素は、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査するステップと、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するステップと、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するステップと、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用するステップと
を含むことを特徴とする請求項６に記載の方法。
【請求項８】
デバイスドライバ（ＤＤ）についての設計をテストするための方法であって、
前記ＤＤをテストするための仮想テストハードウェアデバイス（ＶＴＨＤ）を開発するステップと、
前記ＶＴＨＤおよび前記ＤＤを仮想コンピューティング環境（ＶＣＥ）に追加するステップと、
前記ＶＣＥ中で前記ＶＴＨＤを使用して前記ＤＤをテストするステップと
を含むことを特徴とする方法。
【請求項９】
前記ＤＤが前記ＶＣＥ中でテストされた前記ＶＴＨＤのプロトタイプハードウェアデバイスを作成するステップと、
前記プロトタイプハードウェアデバイス上で前記ＤＤをテストするステップと
をさらに含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記仮想コンピューティング環境は、前記ＶＨＤを動的に追加することを特徴とする請求項８に記載の方法。
【請求項１１】
前記仮想コンピューティング環境が、前記ＶＨＤを動的に追加する要素は、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査するステップと、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するステップと、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するステップと、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用するステップと
を含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
仮想コンピューティング環境が、仮想ハードウェアデバイスを動的に追加するためのシステムであって、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査するためのサブシステムと、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するためのサブシステムと、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するためのサブシステムと、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用するためのサブシステムと
を備えることを特徴とするシステム。
【請求項１３】
前記仮想コンピューティング環境が新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するための前記サブシステムは、外部デバイスディレクトリから前記１組のデバイスプロパティを取得することを特徴とする請求項１２に記載のシステム。
【請求項１４】
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するための前記サブシステムは、前記仮想マシンに対応する前記仮想コンピューティング環境のデバイスリストに前記１組のデバイスプロパティを追加することによって前記１組のデバイスプロパティを前記仮想マシンに提示することを特徴とする請求項１３に記載のシステム。
【請求項１５】
物理ハードウェアデバイス（ＰＨＤ）についての設計をテストするためのシステムであって、
前記ＰＨＤについての前記設計に基づいて仮想ハードウェアデバイス（ＶＨＤ）を実施するためのサブシステムと、
前記ＶＨＤをテストするためのテストデバイスドライバ（ＴＤＤ）を開発するためのサブシステムと、
前記ＶＨＤおよび前記ＴＤＤを仮想コンピューティング環境（ＶＣＥ）に追加するためのサブシステムと、
前記ＶＣＥ中で前記ＴＤＤを使用して前記ＶＨＤをテストするためのサブシステムと
を備えることを特徴とするシステム。
【請求項１６】
前記ＴＤＤを用いて前記ＶＣＥ中でテストされる前記ＶＨＤに対応する前記ＰＨＤのプロトタイプを作成するためのサブシステムと、
前記ＴＤＤを使用して前記ＰＨＤの前記プロトタイプをテストするためのサブシステムと
をさらに備えることを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記仮想コンピューティング環境は、前記ＶＨＤを動的に追加するためのサブシステムをさらに備えることを特徴とする請求項１５に記載のシステム。
【請求項１８】
前記ＶＨＤを動的に追加するための前記サブシステムは、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査するためのサブシステムと、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するためのサブシステムと、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するためのサブシステムと、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用するためのサブシステムと
を備えることを特徴とする請求項１７に記載のシステム。
【請求項１９】
デバイスドライバ（ＤＤ）についての設計をテストするためのシステムであって、
前記ＤＤをテストするための仮想テストハードウェアデバイス（ＶＴＨＤ）を開発するためのサブシステムと、
前記ＶＴＨＤおよび前記ＤＤを仮想コンピューティング環境（ＶＣＥ）に追加するためのサブシステムと、
前記ＶＣＥ中で前記ＶＴＨＤを使用して前記ＤＤをテストするためのサブシステムと
を備えることを特徴とするシステム。
【請求項２０】
前記ＤＤが前記ＶＣＥ中でテストされた前記ＶＴＨＤのプロトタイプハードウェアデバイスを作成するためのサブシステムと、
前記プロトタイプハードウェアデバイス上で前記ＤＤをテストするためのサブシステムと
をさらに備えることを特徴とする請求項１９に記載のシステム。
【請求項２１】
前記仮想コンピューティング環境は、前記ＶＨＤを動的に追加するためのサブシステムをさらに備えることを特徴とする請求項１９に記載のシステム。
【請求項２２】
前記ＶＨＤを動的に追加するための前記サブシステムは、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査するためのサブシステムと、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得するためのサブシステムと、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示するためのサブシステムと、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用するためのサブシステムと
を備えることを特徴とする請求項２１に記載のシステム。
【請求項２３】
仮想コンピューティング環境が、仮想ハードウェアデバイスを動的に追加するためのコンピュータ読取り可能命令を含むコンピュータ読取り可能媒体であって、前記コンピュータ読取り可能命令は、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査する命令と、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得する命令と、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示する命令と、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用する命令と
を含むことを特徴とするコンピュータ読取り可能媒体。
【請求項２４】
前記仮想コンピューティング環境が外部デバイスディレクトリから前記１組のデバイスプロパティを取得する命令をさらに含むことを特徴とする請求項２３に記載のコンピュータ読取り可能媒体。
【請求項２５】
前記仮想コンピューティング環境が、前記仮想マシンに対応する前記仮想コンピューティング環境のデバイスリストに前記１組のデバイスプロパティを追加することにより、前記１組のデバイスプロパティを前記仮想マシンに提示する命令をさらに含むことを特徴とする請求項２４に記載のコンピュータ読取り可能媒体。
【請求項２６】
物理ハードウェアデバイス（ＰＨＤ）についての設計をテストするためのコンピュータ読取り可能命令を含むコンピュータ読取り可能媒体であって、前記コンピュータ読取り可能命令は、
前記ＰＨＤについての前記設計に基づいて仮想ハードウェアデバイス（ＶＨＤ）を実施する命令と、
前記ＶＨＤをテストするためのテストデバイスドライバ（ＴＤＤ）を開発する命令と、
前記ＶＨＤおよび前記ＴＤＤを仮想コンピューティング環境（ＶＣＥ）に追加する命令と、
前記ＶＣＥ中で前記ＴＤＤを使用して前記ＶＨＤをテストする命令と
を含むことを特徴とするコンピュータ読取り可能媒体。
【請求項２７】
前記ＴＤＤを用いて前記ＶＣＥ中でテストされる前記ＶＨＤに対応する前記ＰＨＤのプロトタイプを作成する命令と、
前記ＴＤＤを使用して前記ＰＨＤの前記プロトタイプをテストする命令と
をさらに含むことを特徴とする請求項２６に記載のコンピュータ読取り可能媒体。
【請求項２８】
前記仮想コンピューティング環境が前記ＶＨＤを動的に追加する命令をさらに含むことを特徴とする請求項２６に記載のコンピュータ読取り可能媒体。
【請求項２９】
前記仮想コンピューティング環境が前記ＶＨＤを動的に追加する要素は、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査する命令と、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得する命令と、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示する命令と、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用する命令と
をさらに含むことを特徴とする請求項２８に記載のコンピュータ読取り可能媒体。
【請求項３０】
デバイスドライバ（ＤＤ）についての設計をテストするためのコンピュータ読取り可能命令を含むコンピュータ読取り可能媒体であって、前記コンピュータ読取り可能命令は、
前記ＤＤをテストするための仮想テストハードウェアデバイス（ＶＴＨＤ）を開発する命令と、
前記ＶＴＨＤおよび前記ＤＤを仮想コンピューティング環境（ＶＣＥ）に追加する命令と、
前記ＶＣＥ中で前記ＶＴＨＤを使用して前記ＤＤをテストする命令と
を含むことを特徴とするコンピュータ読取り可能媒体。
【請求項３１】
前記ＤＤが前記ＶＣＥ中でテストされた前記ＶＴＨＤのプロトタイプハードウェアデバイスを作成する命令と、
前記プロトタイプハードウェアデバイス上で前記ＤＤをテストする命令と
をさらに含むことを特徴とする請求項３０に記載のコンピュータ読取り可能媒体。
【請求項３２】
前記仮想コンピューティング環境が前記ＶＨＤを動的に追加する命令をさらに含むことを特徴とする請求項３０に記載のコンピュータ読取り可能媒体。
【請求項３３】
前記仮想コンピューティング環境が前記ＶＨＤを動的に追加する要素は、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査する命令と、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得する命令と、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示する命令と、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用する命令と
をさらに含むことを特徴とする請求項３２に記載のコンピュータ読取り可能媒体。
【請求項３４】
仮想コンピューティング環境が、仮想ハードウェアデバイスを動的に追加するためのハードウェア制御デバイスであって、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査する手段と、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得する手段と、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示する手段と、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用する手段と
を備えることを特徴とするハードウェア制御デバイス。
【請求項３５】
前記仮想コンピューティング環境が、前記１組のデバイスプロパティを外部デバイスディレクトリから取得する手段をさらに備えることを特徴とする請求項３４に記載のハードウェア制御デバイス。
【請求項３６】
前記仮想コンピューティング環境が、前記仮想マシンに対応する前記仮想コンピューティング環境のデバイスリストに前記１組のデバイスプロパティを追加することにより、前記１組のデバイスプロパティを前記仮想マシンに提示する手段をさらに備えることを特徴とする請求項３５に記載のハードウェア制御デバイス。
【請求項３７】
物理ハードウェアデバイス（ＰＨＤ）についての設計をテストするためのハードウェア制御デバイスであって、
前記ＰＨＤについての前記設計に基づいて仮想ハードウェアデバイス（ＶＨＤ）を実施する手段と、
前記ＶＨＤをテストするためのテストデバイスドライバ（ＴＤＤ）を開発する手段と、
前記ＶＨＤおよび前記ＴＤＤを仮想コンピューティング環境（ＶＣＥ）に追加する手段と、
前記ＶＣＥ中で前記ＴＤＤを使用して前記ＶＨＤをテストする手段と
を備えることを特徴とするハードウェア制御デバイス。
【請求項３８】
前記仮想コンピューティング環境は、前記ＶＨＤを動的に追加し、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査する手段と、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得する手段と、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示する手段と、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用する手段と
をさらに備えることを特徴とする請求項３７に記載のハードウェア制御デバイス。
【請求項３９】
デバイスドライバ（ＤＤ）についての設計をテストするためのハードウェア制御デバイスであって、
前記ＤＤをテストするための仮想テストハードウェアデバイス（ＶＴＨＤ）を開発する手段と、
前記ＶＴＨＤおよび前記ＤＤを仮想コンピューティング環境（ＶＣＥ）に追加する手段と、
前記ＶＣＥ中で前記ＶＴＨＤを使用して前記ＤＤをテストする手段と
を備えることを特徴とするハードウェア制御デバイス。
【請求項４０】
前記仮想コンピューティング環境は、前記ＶＨＤを動的に追加し、
前記仮想コンピューティング環境が、外部サービスディレクトリを走査する手段と、
前記仮想コンピューティング環境が、新しい仮想ハードウェアデバイスについての１組のデバイスプロパティを取得する手段と、
前記仮想コンピューティング環境が、前記仮想コンピューティング環境中で動作する仮想マシンに前記１組のデバイスプロパティを提示する手段と、
前記仮想マシンが、前記新しい仮想ハードウェアデバイスを利用する手段と
をさらに備えることを特徴とする請求項３９に記載のハードウェア制御デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に仮想マシン環境（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ）において実行される（「プロセッサ仮想化」としても知られている）仮想マシンおよびソフトウェアの分野に関する。より詳細には、本発明は、物理デバイスの動作をエミュレートする仮想デバイスを開発し使用するためのシステムおよび方法を対象とする。
【背景技術】
【０００２】
コンピュータは、特定の１組のシステム命令を実行するように設計される汎用のＣＰＵ（中央演算処理装置）を含んでいる。同様なアーキテクチャまたは設計仕様を有する１グループのプロセッサは、同じプロセッサファミリのメンバと考えることができる。現行のプロセッサファミリの例には、アリゾナ州、フェニックス市のモトローラ社が製造するモトローラ６８０Ｘ０プロセッサファミリ、カリフォルニア州、サニーベール市のインテルコーポレーションが製造するインテル８０Ｘ８６プロセッサファミリ、モトローラ社が製造し、カリフォルニア州、クパチーノ市のアップルコンピュータ社が製造するコンピュータ中で使用されるパワーＰＣプロセッサファミリが含まれる。１グループのプロセッサは、それらが同様なアーキテクチャおよび設計を考慮しているので同じファミリ中に存在することもあるが、プロセッサは、それらのクロック速度および他の性能パラメータに応じてファミリ内で大きく異なることもある。
【０００３】
マイクロプロセッサの各ファミリは、そのプロセッサファミリに固有の諸命令を実行する。プロセッサまたはプロセッサのファミリが実行することができる集合的な１組の命令は、そのプロセッサの命令セットとして知られている。一例として、インテル８０Ｘ８６プロセッサファミリが使用する命令セットは、パワーＰＣプロセッサファミリが使用する命令セットとは互換性がない。このインテル８０Ｘ８６命令セットは、ＣＩＳＣ（複雑命令セットコンピュータ）フォーマットに基づいている。モトローラのパワーＰＣ命令セットは、ＲＩＳＣ（縮小命令セットコンピュータ）フォーマットに基づいている。ＣＩＳＣプロセッサは、多数の命令を使用しており、これらの命令の一部は、かなり複雑なファンクションを実施することができるが、この命令は、一般に、実行するために多数のクロックサイクルを要する。ＲＩＳＣプロセッサは、さらに少ない数の使用可能な命令を使用し、ずっと高速で実行されるさらに簡単な１組のファンクションを実施する。
【０００４】
コンピュータシステムの中のプロセッサファミリの独自性はまた、一般的に、コンピュータシステムのハードウェアアーキテクチャの他の要素の間で非互換性をもたらすことになる。インテル８０Ｘ８６プロセッサファミリからのプロセッサを用いて製造されるコンピュータシステムは、パワーＰＣプロセッサファミリからのプロセッサを用いて製造されるコンピュータシステムのハードウェアアーキテクチャとは異なるハードウェアアーキテクチャを有することになる。プロセッサ命令セットおよびコンピュータシステムのハードウェアアーキテクチャの独自性のために、アプリケーションソフトウェアプログラムは一般的に、特定のオペレーティングシステムを実行する特定のコンピュータシステム上で実行されるように書かれる。
【０００５】
コンピュータ製造業者は、そのコンピュータ製造業者の製品ラインに関連するマイクロプロセッサファミリ上で実行されるアプリケーションを、減らすのでなくより多く実行させることによってその製造業者のマーケットシェアを最大にしたいと望んでいる。あるコンピュータシステム上で実行することができるオペレーティングシステムおよびアプリケーションプログラムの数を増大するために、ある技術分野が発展してきており、この技術分野においては、ホストと呼ばれる、１タイプのＣＰＵを有する所与のコンピュータは、ゲストと呼ばれる無関係のタイプのＣＰＵの命令をそのホストコンピュータがエミュレートすることができるようにするエミュレータプログラムを含むことになる。したがって、このホストコンピュータは、所与のゲスト命令に応答して１つまたは複数のホスト命令を呼び出せるようにするアプリケーションを実行することになる。したがって、このホストコンピュータは、それ自体のハードウェアアーキテクチャ用のソフトウェア設計も、無関係のハードウェアアーキテクチャを有するコンピュータ用に書かれたソフトウェアも共に実行することができる。より具体的な例としては、アップルコンピュータが製造するコンピュータシステムでは、例えばＰＣベースのコンピュータシステム用に書かれたオペレーティングシステムおよびプログラムを実行することができる。エミュレータプログラムを使用して１つのＣＰＵ上で複数の互換性がないオペレーティングシステムを同時に動作させることも可能にすることができる。この構成においては、各オペレーティングシステムは、他のオペレーティングシステムと互換性がないが、エミュレータプログラムは、２つのオペレーティングシステムのうちの一方のホストとしての役割を果たすことができ、そうでなければ互換性のないオペレーティングシステムを同じコンピュータシステム上で同時に実行できるようにする。
【０００６】
ゲストコンピュータシステムがホストコンピュータシステム上でエミュレートされる場合に、このゲストコンピュータシステムは、１つの特定のハードウェアアーキテクチャのオペレーションの純粋なソフトウェア表現としてこのホストコンピュータシステム中に存在するにすぎないので、このゲストコンピュータシステムは、「仮想マシン」であると言われる。エミュレータ、仮想マシン、およびプロセッサエミュレーションという用語は、時々交換可能なように使用されて、全体のコンピュータシステムのハードウェアアーキテクチャを模倣し、またはエミュレートする機能を指し示している。一例として、カリフォルニア州、サンマテオ市のＣｏｎｎｅｃｔｉｘ  Ｃｏｒｐｏｒａｔｉｏｎが作成したＶｉｒｔｕａｌ  ＰＣソフトウェアは、インテル８０Ｘ８６ペンティアム（登録商標）プロセッサおよび様々なマザーボードコンポーネントとカードを含むコンピュータ全体をエミュレートする。これらのコンポーネントのオペレーションは、このホストマシン上で実行される仮想マシン中でエミュレートされる。パワーＰＣプロセッサを有するコンピュータシステムなどのホストコンピュータのオペレーティングシステムソフトウェアおよびハードウェアアーキテクチャ上で実行されるエミュレータプログラムは、この全体のゲストコンピュータシステムのオペレーションを模倣する。
【０００７】
このエミュレータプログラムは、このホストマシンのハードウェアアーキテクチャとこのエミュレートされる環境内で実行されるソフトウェアが伝送する命令との間のやりとりとしての役割を果たす。このエミュレータプログラムは、ＨＯＳ（ｈｏｓｔ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍホストオペレーティングシステム）とすることができ、このＨＯＳは、この物理コンピュータハードウェア上で直接実行されるオペレーティングシステムである。代わりに、このエミュレートされた環境はまた、ＶＭＭ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍｏｎｉｔｏｒ仮想マシンモニタ）とすることもでき、このＶＭＭは、このハードウェア上で直接実行されるソフトウェアレイヤであり、またこのＶＭＭは、このＶＭＭが仮想化しているハードウェアと同じインターフェースを見えるようにすることによってこのマシンのすべてのリソースを仮想化する（これにより、ＶＭＭは、それについて実行中のオペレーティングシステムレイヤから気付かれずに済むことができるようになる）。ホストオペレーティングシステムとＶＭＭは、この同じ物理ハードウェア上で協力して実行されることもある。
【０００８】
仮想デバイスは、ソフトウェアで実施される論理デバイスであり、これは、ある種の実際の物理デバイスまたは理想化された物理デバイスに対応する。一般に、仮想デバイスをモデリングするための２つのアプローチ、すなわち、既存のハードウェア部分を直接にモデル化する「ハードウェア仮想デバイス（ｈａｒｄｗａｒｅ  ｖｉｒｔｕａｌ  ｄｅｖｉｃｅ）」アプローチと、この物理ハードウェアの単なる反映ではないが、ＶＭ（ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ仮想マシン）環境のために最適化される「理想化仮想デバイス（ｉｄｅａｌｉｚｅｄ  ｖｉｒｔｕａｌ  ｄｅｖｉｃｅ）」アプローチが存在する。
【０００９】
このハードウェア仮想デバイスアプローチは、互換性に関して利点を提供する。この仮想デバイスは、あらゆる点において実デバイスとまったく同様に動作するので、このデバイス（例えば、ドライバ）と対話するように設計されているソフトウェアは、修正することなくハードウェア仮想デバイスと共に動作することになる。しかし、物理ハードウェアは、それ自体かなりのオーバーヘッドコスト（および効率の悪さ）を招くことなく仮想デバイスを用いてエミュレートすることがしばしば難しいことがあるので、ハードウェア仮想デバイスは、性能に話が及ぶと不利になるが、この理由はハードウェア設計者が一般に仮想化の課題を考慮に入れておらず、したがってハードウェア仮想デバイスはそれらの実ハードウェア対応物よりもしばしば著しく低速になってしまうことがあるからである。
【００１０】
他方、理想化仮想デバイスにより、開発者が実施するのも簡単で使用するのも効率的な仮想デバイスを設計するためのかなりの自由度がもたらされる。理想化仮想デバイスの設計では、物理ハードウェア設計が課す制限に従う必要がないので、理想化仮想デバイスは、ＶＭ環境内での使用のために最適化することができる。さらに、理想化仮想デバイスの開発者は、既存のソフトウェアが正しいオペレーションのために依存する可能性のある（例えば、タイミングや状態変化など）微妙な副作用について心配する必要がない。さらに、開発者は、実際には存在しないハードウェアに類似した理想化仮想デバイス（例えば、ゲストシステムとホストシステムの間の通信を可能とする仮想デバイス）を作成することもできる。しかし、この仮想デバイスは、実際にはあらゆる点でその実デバイスとまったく同様には動作することができず、その物理デバイス（例えば、ドライバ）と対話するように設計されているソフトウェアは、修正せずには理想化仮想デバイスと共に正しくは動作できず、またはまったく動作できないので、この理想化仮想デバイスアプローチを使用する場合には、互換性の問題が生じる可能性があるというリスクが存在する。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
現状においては、仮想マシン中で使用可能なこの１組の（理想化またはハードウェア）仮想デバイスは、この仮想マシンソフトウェアが書かれる時点において前もって決められており、現行の仮想マシン製品は、新しい仮想デバイスを追加する手段を含んではいない。これは、デバイスの数および種類が、その仮想マシンソフトウェア中に含まれるデバイスの数および種類に制限されてしまうことを意味する。技術が進歩し、（物理および仮想）デバイス数が増大し続けるにつれて、仮想マシンソフトウェアに新しい仮想デバイスを追加することができる機能は、より重要になってきている。仮想マシン環境において必要に応じて新しい仮想デバイスを動的に追加する方法が必要になっている。
【００１２】
仮想マシン環境の必要性に加えて、新しい仮想デバイスをシステムに追加してハードウェアの開発も、このハードウェア用のソフトウェアドライバの開発も共にサポートする手段についての一般的な必要性も存在している。新しいハードウェアについては、新しいハードウェアデバイス中のバグおよび他の予期しないエラーを見出し取り除くための品質テストを行う必要性も存在している。一般に、このタイプのテストに対するアプローチは、このハードウェアデバイスの設計が完了し、プロトタイプの製造が完了した後まで遅延させられる。しかし、この設計−プロトタイプ−テストというプロセスは、エラーがテスト中に見出される場合には、このプロセスがもう一度最初から開始され、したがって新しいデバイスでは長い開発サイクルがもたらされることになる点で非効率的である。物理デバイス製品についての製品化に要する時間（ｔｉｍｅ  ｔｏ  ｍａｒｋｅｔ）を短縮する方法が必要になっている。同様に、物理ハードウェアデバイスにそのデバイスドライバによって処理するための多種多様なエラーをタイムリに意味があるように発生させることは難しいので、以前のデバイスも新しいデバイスも含めた物理ハードウェアデバイス用の新しいデバイスドライバソフトウェアの完全なテストを行うことは、よくても時間がかかり、一部のケースでは、完了するのが困難または不可能にさえなる。その結果、そのテストが実行される物理ハードウェアデバイスは、有限なテスト時間中に全範囲のエラーを示さない（また示すことが実際にできない）ので、このソフトウェアドライバ中のドライバコードの経路の多くが十分には動作試験されないことになってしまう。したがって、デバイスドライバソフトウェアテストのために必要な時間を短縮し、このテストの品質を改善するための方法が必要になっている。
【００１３】
仮想デバイスは、表面上は両者に関して共に解決方法を提供するように見える。すなわち、物理プロトタイプデバイスを修正するよりも仮想デバイスを修正する方が簡単なので、提案された物理ハードウェアデバイスの機能を反映するハードウェア仮想デバイスを使用して、物理プロトタイプが開発される前に、ある種のハードウェア機能および互換性をテストし、それによって設計プロセスがショートカットされる。同様に、新しいデバイスドライバソフトウェアをテストするために、理想化仮想デバイスを使用して、この新しいデバイスドライバを十分にテストするのに必要な所望のハードウェアデバイスエラーのすべてを生成することができる（この場合、この仮想デバイスは、この所望のエラーを作成する意味において「理想化」されており、それによって、わざわざそうするためのハードウェアデバイスを物理的に作成する必要がなくなる）。しかし、このアプローチの短所は、仮想デバイスがハードコード化される傾向があり、すなわち仮想デバイスがこの仮想コンピューティング環境のモノリシックコンテナ中に直接に書き込まれる傾向があり、したがって簡単に修正可能ではないことである。例えば、既存の仮想マシン環境中においては、この仮想マシンは、ロードするためにハードコードされるこれらの仮想デバイスしかロードしない。したがって、新しい仮想デバイスの動的で修正可能なローディングを可能にする仮想コンピューティング環境が、当技術分野において必要になっている。
【課題を解決するための手段】
【００１４】
本発明のいくつかの実施形態では、仮想デバイスを仮想コンピューティング環境に動的に追加する手段が提供されている。本発明は、（内部デバイスリストを含む）マニフェストを有する仮想化コンピューティングシステム、ならびに仮想デバイスをこの仮想コンピューティング環境に追加するために必要とされる仕様を含むソフトウェアプラグインを追加する手段をこの仮想化コンピューティングシステムのユーザに提供する外部デバイスディレクトリを含んでいる。仮想デバイスを追加する方法が説明されており、ここでは、この外部デバイスディレクトリが走査され、適切なデバイスプロパティがそのユーザによって取得され、指定され、保存され、これらの新しい仮想デバイスがこのマニフェストに追加され、この仮想コンピューティング環境において使用可能になっている。
【００１５】
これらのうちのある種の実施形態は特に、仮想化コンピューティングシステムを動作させる方法を提供することを対象にしており、ここでは、このホストオペレーティングシステムおよびこれらの仮想デバイスは、一連の状態を介して、すなわち特に、初期化、起動、記憶された状態のローディング、通常状態における動作、将来の復元（ｒｅｓｔｏｒａｔｉｏｎ）のための状態の保存、パワーダウン、ならびにテアリングダウンおよび電源遮断を介して進む。通常オペレーションに先立つ状態は、これらの仮想デバイスが動作する準備として記述される。この通常の動作状態は、すべてのデバイスの準備ができており、このホストオペレーティングシステムが、ゲストオペレーティングシステムからの要求を受け入れる状態である。通常オペレーションに続く状態は、電源遮断されるコンピューティングデバイスについての準備として通常オペレーションに先立ったステップを元に戻すこと（ｕｎｄｏｉｎｇ）として説明される。
【００１６】
これらのうちのある種の実施形態は特に、物理デバイスの開発における仮想デバイスをテストする手段を提供することを対象にしている。これらの実施形態では、２つの重要な方法で、物理デバイスの開発が支援される。すなわち、１）これらの実施形態は、プロトタイプが物理的に製造される以前に、これらのデバイスのテストが開始されることを可能にしており、２）これらの実施形態は、このデバイスにエラーを意図的に導入することができるようにしており、これにより、デバイスドライバソフトウェア内の経路の以前から可能であったよりもずっと完全なテストが提供される。
【００１７】
ある種の追加の実施形態は、デバイスドライバソフトウェアの開発においてテストし支援するためのエラーを引き起こしやすい理想化仮想デバイスを実現する手段を提供することを対象にしている。これらの実施形態では、２つの重要な方法で、デバイスドライバの開発が支援される。すなわち、（１）これらの実施形態は、エラーを引き起こしやすいプロトタイプをわざわざ開発せずにこのデバイスのテストを可能にしており、（２）これらの実施形態は、この新しいデバイスドライバのより完全でより豊富なテストのために、広範囲のエラーを意図的に生成できるようにしている。
【００１８】
前述の概要、ならびに好ましい実施形態の以下の詳細な説明は、添付の図面を併せ読む場合にさらによく理解されよう。本発明を例証するために本発明の例示の構成が図面に示されている。しかし、本発明は、これらの開示された特定の方法および手段だけに限定されることはない。
【発明を実施するための最良の形態】
【００１９】
本発明の主題については、法令によって定められた要件を満たすように具体性をもって説明している。しかし、この説明それ自体が、本特許の範囲を限定することは意図していない。そうではなくて、本発明者は、この請求された主題を別の方法で実施して、現在または将来の他の技術と組み合わせて、この文書中で説明されるステップと異なるステップ、または同様なステップの組合せを含むようにすることもできると考えている。さらに、本明細書中では、用語「ステップ」を使用して、使用される方法の異なる要素を示すこともできるが、この用語は、個別のステップの順序が明示的に説明されない限り、また明示的に説明される場合以外は、本明細書中で説明する様々なステップの間のどのような特定の順序も暗示するとは解釈すべきではない。
【００２０】
コンピュータ環境
本発明の多数の実施形態は、コンピュータ上で実行することができる。図１および以下の説明では、本発明を実施することができる適切なコンピューティング環境の一般的な簡潔な説明を提供することが意図されている。必要ではないが、本発明については、クライアントワークステーションやサーバなどのコンピュータによって実行されるプログラムモジュールなどコンピュータ実行可能命令の一般的な文脈で説明することにする。一般的に、プログラムモジュールは、特定のタスクを実施し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含んでいる。さらに、本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどを含めて他のコンピュータシステム構成を用いて実施することもできることが当業者には理解されよう。本発明は、分散コンピューティング環境中において実行することもでき、ここでは、タスクは、通信ネットワークを介してリンクされたリモートプロセッシングデバイスによって実施される。分散コンピューティング環境においては、プログラムモジュールは、ローカルメモリストレージデバイス中にもリモートメモリストレージデバイス中にも配置することができる。
【００２１】
図１に示すように、例示の汎用コンピューティングシステムは、処理装置２１、システムメモリ２２、およびこのシステムメモリを含めて様々なシステムコンポーネントを処理装置２１に結合するシステムバス２３を含めて、従来のパーソナルコンピュータ２０などを含んでいる。このシステムバス２３は、メモリバスまたはメモリコントローラ、ペリフェラルバス、および様々なバスアーキテクチャのうちのどれかを使用したローカルバスを含めて、いくつかのタイプのバス構造のうちのどれにすることもできる。このシステムメモリは、ＲＯＭ（読取り専用メモリ）２４およびＲＡＭ（ランダムアクセスメモリ）２５を含んでいる。起動中などパーソナルコンピュータ２０内の要素間で情報を転送する助けをする基本ルーチンを含むＢＩＯＳ（基本入出力システム）２６は、ＲＯＭ２４中に記憶される。パーソナルコンピュータ２０は、図示していないハードディスクから情報を読み取りそれに情報を書き込むハードディスクドライブ２７、着脱可能な磁気ディスク２９から情報を読み取りそれに情報を書き込む磁気ディスクドライブ２８、およびＣＤ−ＲＯＭや他の光媒体など着脱可能な光ディスク３１から情報を読み取りそれに情報を書き込む光ディスクドライブ３０をさらに含んでいる。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、それぞれハードディスクドライブインターフェース３２、磁気ディスクドライブインターフェース３３、および光ドライブインターフェース３４によってシステムバス２３に接続される。これらのデバイスおよびその関連するコンピュータ読取り可能媒体は、パーソナルコンピュータ２０のためのコンピュータ読取り可能命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージを提供する。本明細書中で説明される例示の環境は、ハードディスク、着脱可能磁気ディスク２９、および着脱可能光ディスク３１を使用しているが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）などコンピュータによってアクセス可能なデータを記憶することができる、他のタイプのコンピュータ読取り可能媒体をこの例示の動作環境中において使用することもできることを当業者には理解されたい。
【００２２】
オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、他のプログラムモジュール３７およびプログラムデータ３８を含めて、いくつかのプログラムモジュールをこのハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４またはＲＡＭ２５に記憶することができる。ユーザは、キーボード４０やポインティングデバイス４２など入力デバイスを介してパーソナルコンピュータ２０中にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどを含むことができる。これらおよび他の入力デバイスはしばしば、このシステムバスに結合されるシリアルポートインターフェース４６を介して処理装置２１に接続されるが、パラレルポート、ゲームポート、ＵＳＢ（ユニバーサルシリアルバス）などの他のインターフェースによって接続することもできる。モニタ４７または他のタイプのディスプレイデバイスもまた、ビデオアダプタ４８などのインターフェースを介してシステムバス２３に接続することができる。このモニタ４７に追加してパーソナルコンピュータは、一般的にスピーカやプリンタなど他のペリフェラル出力デバイス（図示せず）を含んでいる。図１の例示のシステムはまた、ホストアダプタ５５、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）バス５６、およびこのＳＣＳＩバス５６に接続された外部ストレージデバイス６２も含んでいる。
【００２３】
パーソナルコンピュータ２０は、リモートコンピュータ４９など１つまたは複数のリモートコンピュータに対する論理接続を使用してネットワーク環境において動作することができる。リモートコンピュータ４９は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードであってもよく、一般的にパーソナルコンピュータ２０に対して前述した要素の多くまたはすべてを含んでいるが、メモリストレージデバイス５０だけしか図１には示してはいない。図１に示す論理接続は、ＬＡＮ（ローカルエリアネットワーク）５１およびＷＡＮ（ワイドエリアネットワーク）５２を含んでいる。かかるネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいては一般的である。
【００２４】
ＬＡＮネットワーキング環境中で使用される場合には、パーソナルコンピュータ２０は、ネットワークインターフェースまたはアダプタ５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーキング環境中で使用される場合には、パーソナルコンピュータ２０は、一般的にインターネットなどのワイドエリアネットワーク５２上で通信を確立するモデム５４または他の手段を含んでいる。モデム５４は、内蔵でもよく、また外付けでもよいが、シリアルポートインターフェース４６を介してシステムバス２３に接続される。ネットワーク環境においては、パーソナルコンピュータ２０に対して示したプログラムモジュール、またはその一部分は、このリモートメモリストレージデバイスに記憶することができる。図に示すネットワーク接続は、例示的であり、これらのコンピュータ間で通信リンクを確立する他の手段を使用することもできることが理解されよう。さらに、本発明の多数の実施形態がコンピュータ化されたシステムにとって特によく適していることが想定されているが、この文書中においては、本発明をかかる実施形態だけに限定することはまったく意図されていない。
【００２５】
仮想マシン
概念的な観点から、コンピュータシステムは、一般的にハードウェアの基本レイヤ上で実行される１つまたは複数のソフトウェアレイヤを含んでいる。この階層化は、抽象化の理由で行われる。所与のソフトウェアレイヤについてのインターフェースを定義することにより、このレイヤは、その上の他の諸レイヤによって異なるように実行することができる。うまく設計されたコンピュータシステムにおいては、各レイヤは、その直下のレイヤについてしか知らない（し、またそれにしか依存しない）。これにより、レイヤまたは「スタック」（複数の隣接レイヤ）は、前記レイヤまたはスタック上の諸レイヤに悪影響を与えずに置き換えることができるようになる。例えば、ソフトウェアアプリケーション（上位レイヤ）は、一般的にそのオペレーティングシステム（下位レイヤ）の下位レベルに依存して、ファイルをある形態の恒久的ストレージに書き込み、これらのアプリケーションは、データをフロッピー（登録商標）ディスクか、ハードドライブか、あるいはネットワークフォルダに書き込むことの間におけるその違いを理解する必要がない。この下位レイヤが、ファイルを書き込むための新しいオペレーティングシステムで置き換えられる場合にも、この上位レイヤソフトウェアアプリケーションのオペレーションは、影響を受けないままである。
【００２６】
階層化ソフトウェアの柔軟性により、仮想マシン（ＶＭ）が、実際には別のソフトウェアレイヤである仮想ハードウェアレイヤを表現できるようになる。このようにして、ＶＭは、その上のソフトウェアレイヤにとって、前記ソフトウェアレイヤがそれら自体のプライベートコンピュータシステム上で実行されているという錯覚を作り出すことができ、したがってＶＭにより、複数の「ゲストシステム」を単一の「ホストシステム」上で同時に実行できるようにすることが可能になる。
【００２７】
図２は、コンピュータシステムにおけるエミュレートされた動作環境についての、ハードウェアアーキテクチャおよびソフトウェアアーキテクチャの論理階層化を示す図である。エミュレーションプログラム９４が、ホストオペレーティングシステムおよび／またはハードウェアアーキテクチャ９２上で実行される。エミュレーションプログラム９４は、ゲストハードウェアアーキテクチャ９６およびゲストオペレーティングシステム９８をエミュレートする。次にソフトウェアアプリケーション１００がゲストオペレーティングシステム９８上で実行される。たとえソフトウェアアプリケーション１００が、ホストオペレーティングシステムおよびハードウェアアーキテクチャ９２とは一般的に互換性がないオペレーティングシステム上で実行されるように設計されているとしても、図２のエミュレートされた動作環境においては、エミュレーションプログラム９４のオペレーションのために、ソフトウェアアプリケーション１００は、コンピュータシステム９０上で実行されることが可能になる。
【００２８】
図３Ａは、物理コンピュータハードウェア１０２上で直接に実行されるホストオペレーティングシステムソフトウェアレイヤ１０４を含む仮想化コンピューティングシステムを示しており、ホストＯＳ（ｈｏｓｔ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍホストオペレーティングシステム）１０４は、このホストＯＳが仮想化しているハードウェアと同じインターフェースを見えるようにする（それにより、このホストＯＳが、その上で実行されるオペレーティングシステムレイヤによって気付かれないままであることが可能になる）ことによってこのマシンのすべてのリソースを仮想化する。
【００２９】
代わりに、仮想マシンモニタ、すなわちＶＭＭソフトウェアレイヤ１０４’は、ホストオペレーティングシステム１０４”の代わりに、または並行して実行することが可能であり、この後者のオプションを図３Ｂに示している。簡潔に言えば、（特にホストオペレーティングシステム１０４に関する）以下のすべての説明は、図３Ａに示すこの実施形態を対象としている。しかし、かかる説明のすべての態様は、図３Ｂの実施形態にも同様に適用されるはずであり、ここで、図３ＢのＶＭＭ１０４’は、機能レベル上本質的に本明細書中で以下に説明する図３Ａのホストオペレーティングシステム１０４の役割を置き換えることになる。
【００３０】
もう一度、図３Ａを参照すると、ホストＯＳ１０４（またはＶＭＭ１０４’）の上には、２つの仮想マシン（ＶＭ）の実施形態、すなわち例えば仮想化されたインテル３８６プロセッサとすることができるＶＭ  Ａ１０８と、例えばモトローラ６８０Ｘ０プロセッサファミリのうちの１つのプロセッサの仮想化バージョンとすることができるＶＭ  Ｂ１１０とが存在する。各ＶＭ１０８および１１０の上には、それぞれゲストＯＳ（ｇｕｅｓｔ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍゲストオペレーティングシステム）Ａ１１２およびＢ１１４が存在する。ゲストＯＳ  Ａ１１２の上では２つのアプリケーション、すなわちアプリケーションＡ１  １１６およびアプリケーションＡ２  １１８が実行されており、ゲストＯＳ  Ｂ１１４上にはアプリケーションＢ１  １２０が存在する。
【００３１】
仮想デバイスの動的な追加
図４は、図３Ｂに示す仮想マシンモニタ（ＶＭＭ）システム（や、代替実施形態では、図３Ａに示すホストＯＳシステム）などの仮想化コンピューティングシステムを示している。この図において、マニフェスト１２２は、デバイスリストＡ１２４およびデバイスリストＢ１２６をさらに含む、ホストＯＳ１０４内の構成ファイルである。マニフェスト１２２を使用してこれらの仮想デバイスを構成し列挙して、ホストＯＳ１０４によって使用されるようにする。デバイスリストＡ１２４およびデバイスリストＢ１２６は、それぞれＶＭ  Ａ１０８およびＶＭ  Ｂ１１０で使用可能なすべての仮想デバイスについてのリストおよび関連するパラメータを含んでいる。本発明によれば、マニフェスト１２２のデバイスリスト１２４および１２６中にリストアップされたデバイスの一部が、この仮想マシンソフトウェア（例えば、仮想ＰＣ）がインストールされた場合に含められた諸デバイスに追加して、長い間にわたってこのリスト（外部定義されたデバイス）に追加される。仮想デバイスを識別し記述する情報が、デバイスリストＡ１２４およびデバイスリストＢ１２６内に記憶される。さらに、一部の実施例においては、これらの仮想デバイスは、一実施例においてはＤＬＬ（ｄｙｎａｍｉｃ  ｌｉｎｋ  ｌｉｂｒａｒｙダイナミックリンクライブラリ）ファイルに対するファイル名を含んでおり、このファイル名を使用して、そのデバイスが使用するために選択される場合にそのデバイスがさらに定義される。
【００３２】
外部デバイスディレクトリ１２８は、ホストＯＳ１０４の内部にあるディレクトリであり、このディレクトリ中では、新しい仮想デバイスに関する情報が、マニフェスト１２２に追加される以前に、またＶＭ  Ａ１０８またはＶＭ  Ｂ１１０にとって使用可能にされる以前に配置される。一実施例においては、プラグインが外部デバイスディレクトリ１２８に書き込まれ、仮想デバイスを仮想コンピューティングデバイスにとって使用可能にする方法が開始されるまで記憶される。
【００３３】
図５は、仮想デバイスを仮想コンピューティングデバイスにとって使用可能にする方法１３０を示している。方法１３０を、ＶＭ  Ａ１０８に関連した一実施例において説明している。しかし、この方法が、ホストＯＳ１０４上で実行されている他の仮想マシンにも適用されることが当業者には理解されよう。ステップ１３２において、ホストＯＳ１０４は、外部デバイスプラグインを求めて外部デバイスディレクトリ１２８を走査する。ステップ１３４において、ホストＯＳ１０４は、各外部デバイスに関連したプロパティを取得する。一実施例においては、ホストＯＳ１０４は、外部デバイスごとにＤＬＬを呼び出し、このＤＬＬは、デバイスごとの適切なプロパティをホストＯＳ１０４に返す。
【００３４】
ステップ１３６において、デバイスごとのプロパティがユーザに提示される。一実施例においては、ＧＵＩ（ｇｒａｐｈｉｃａｌ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅグラフィックユーザインターフェース）は、各デバイスおよびその関連するプロパティをユーザに対して提示する。ステップ１３８において、ユーザは、デバイスごとにこれらの所望のデバイスと、（例えば、メモリサイズ、ビットレート、ディスプレイ解像度など）それらのプロパティを選択する。ステップ１４０において、ユーザは、これらの所望のデバイスおよびそれらの対応するデバイスプロパティを保存し、ホストＯＳ１０４は、これらの所望のデバイスをマニフェスト１２２に追加する。ステップ１４０が完了すると、方法１３０は終了し、新しいデバイスが、構成され、マニフェスト１２２内のデバイスリストＡ１２４に追加されており、必要に応じてＶＭ  Ａ１０８が利用するための準備が整っている。
【００３５】
図６は、仮想デバイスが動的に追加される（図４を参照して説明しているような）仮想化コンピューティングシステムを動作させる方法１５０を示している。方法１５０は、図４を参照して説明しているように、仮想化コンピューティングシステム中で動作する場合にホストオペレーティングシステムおよびすべての仮想デバイスがナビゲートする「状態」の進行を記述している。
【００３６】
ステップ１５２において、コンピュータ２０（図１）が電源投入され、ホストＯＳ１０４は、初期化し（メモリなどの）リソースを割り付ける。ステップ１５４において、ホストＯＳ１０４は、起動しつつあり、仮想デバイスは、ホストＯＳ１０４と情報をやりとりするように構成されるようにそれ自体をマザーボード上で仮想的に配線する。この「仮想配線」に含めて、ホストＯＳ１０４は、方法１３０を実行し、この方法１３０は、これらの新しいデバイスを構成し、それらをマニフェスト１２２内のデバイスリストＡ１２４およびＢ１２６に追加し、必要に応じてＶＭ  Ａ１０８およびＶＭ  Ｂ１１０が利用する準備を整える。仮想ＰＣＩカードを有する一実施例においては、この仮想ＰＣＩカードは、仮想ＰＣＩバスと情報をやりとりして、例えばこの仮想ＰＣＩカードが存在しており、どのスロットに存在しているかについてこの仮想ＰＣＩバスに通知する。Ｉ／Ｏポートの範囲も、ステップ１５４において定義される。別の実施例においては、割込みコントローラ（図示せず）がこのステップ中で起動されるときに、この割込みコントローラは、通常オペレーションに備えてこのＩ／Ｏコントローラ（図示せず）と情報をやりとりする。
【００３７】
判断ステップ１５６においては、以前に記憶された状態が復元されているかどうかについての判定がホストＯＳ１０４によって行われる。ホストＯＳ１０４が記憶された状態を復元している場合、方法１５０は、ステップ１５８へと進む。ホストＯＳ１０４が復元していない場合には、すべてのデバイスがデフォルト状態値に設定され、方法１５０は、ステップ１６０へと進む。
【００３８】
ステップ１５８において、ホストＯＳ１０４は、この仮想プロセッサおよびこれらの仮想デバイスについての状態データを含む記憶済みのスナップショットファイル、ならびにこのスナップショットファイルが保存された際に生成されたデバイスリストにアクセスし、ロードする。スナップショットファイルをロードすることにより、この仮想マシンプロセッサおよびデバイスは、この仮想マシンが最後に保存された時点における正確なポイントまでそれら自体を「よみがえらせる（ｒｅａｎｉｍａｔｅ）」ことができるようになる。一実施例においては、スナップショットファイル（図示せず）をロードして、ＶＭ  Ａ１０８およびそのデバイス、ならびにマニフェスト１２２内のデバイスリストＡ１２４に記憶されたそれらの対応する構成をよみがえらせる。
【００３９】
ステップ１６０において、初期化は完了し、ホストＯＳ１０４は、通常動作モード（すなわち、起動された状態）に入る。通常動作モードにおいて、ホストＯＳ１０４は、ＶＭ  Ａ１０８およびＶＭ  Ｂ１１０からの要求を処理する。一実施例において、ＶＭ  Ａ１０８は、デバイスリストＡ１２４およびホストＯＳ１０４に記憶された仮想デバイスを利用し、これらの仮想デバイスからの通信を変換し、必要に応じてコンピュータハードウェア１０２内のハードウェアデバイスを使用する。
【００４０】
判断ステップ１６２において、ホストＯＳ１０４は、パワーダウン要求が受信されているかどうかを判定する。パワーダウン要求が受信されている場合、方法１５０は、ステップ１６４へと進む。受信されていない場合には、方法１５０は、ステップ１６０に戻ることによって通常オペレーションモードで続行される。
【００４１】
パワーダウンの準備における判断ステップ１６４において、ホストＯＳ１０４は、将来の復元のためにこの仮想マシンおよび仮想デバイスの状態を保存する要求が行われているかどうかを判定する。将来の復元のためにこの仮想マシンの状態を保存する要求が行われている場合、方法１５０は、ステップ１６６へと進み、要求が行われていない場合には、方法１５０は、ステップ１６８へと進む。
【００４２】
ステップ１６６において、ホストＯＳ１０４は、将来の復元のためにこの仮想プロセッサ、およびすべての仮想デバイスの状態を保存する。判断ステップ１６８において、ホストＯＳ１０４は、このパワーダウン要求が「再起動要求（ｒｅｓｔａｒｔ  ｒｅｑｕｅｓｔ）」であるかどうかを判定する。この要求が再起動する要求である場合、方法１５０は、ステップ１５４に戻る。そうでない場合には、方法１５０は、ステップ１７０へと進む。
【００４３】
ステップ１７０において、ホストＯＳ１０４は、リソースを解放し、仮想デバイスの配線を解放する。ステップ１７０は、ステップ１５４の逆であり、したがってステップ１５４で実施されるタスクを逆に行う。ステップ１７０は、ステップ１７２へと進む。
【００４４】
ステップ１７２において、ホストＯＳ１０４は、非初期化（ｄｅ−ｉｎｉｔｉａｌｉｚｅ）され、コンピュータ２０の電源を遮断するための準備を行う。ステップ１７２は、ステップ１５２の逆であり、したがってステップ１５２で実施されるタスクを逆に行う。ステップ１７２が完了すると、コンピュータ２０は、電源が遮断され、方法１５０は終了する。
【００４５】
図７は、仮想コンピューティング環境中で物理ハードウェアデバイスを設計しテストする方法１８０を示している。方法１８０は、より完全なデバイステストを可能にする仮想化環境においてこれらのデバイスを完全にテストすることにより、（プロトタイプを含めて）どのデバイスも物理的に製造が完了する以前に仮想デバイステストを可能にすることによって、物理ハードウェアデバイスを設計するに際しての適時性（ｔｉｍｅｌｉｎｅｓｓ）を簡素化し改善している。
【００４６】
ステップ１８２において、物理ハードウェアデバイスが、ソフトウェアツールを使用して設計され、次いで（図４の外部デバイスディレクトリ１２８に追加される）ＶＨＤ（ｖｉｒｔｕａｌ  ｈａｒｄｗａｒｅ  ｄｅｖｉｃｅ仮想ハードウェアデバイス）として実施される。ステップ１８４において、このデバイスをテストする専用のソフトウェアＴＤＤ（ｔｅｓｔ  ｄｅｖｉｃｅ  ｄｒｉｖｅｒテストデバイスドライバ）が開発される。ステップ１８６において、図５の方法１３０において説明したように、このＶＨＤが、このＶＭＭによってマニフェスト１２２に追加され、ＶＭ  Ａ１０８およびＶＭ  Ｂ１１０にとって使用可能にされ、このＴＤＤがゲストＯＳ  Ａ１１２に追加される。ステップ１８８において、このＶＨＤは、このＴＤＤによって仮想マシン環境中でテストされる。このようにして、このデバイス設計は、この仮想環境中でこのＴＤＤを介して実施される従来のハードウェアテストルーチンによってテストされる。
【００４７】
判断ステップ１９０において、このＶＨＤのパフォーマンスがステップ１８８におけるテストに合格したかどうかに関して判定が行われ、合格しなかった場合、方法１８０は、ステップ１８２へと戻り、ここでこのデバイス設計に対する修正が行われ、このプロセスが反復される。しかし、ステップ１９０において合格した場合には、方法１８０は、オプションとしてのステップ１９２へと進み、このステップでプロトタイプを開発し、（たぶんこの正常なＶＨＤテストによる簡略化されたプロセスで）テストすることができ、ステップ１９４において、この新しいハードウェアデバイス仕様が完成され、製造設備に送られ、方法１８０が終了する。
【００４８】
図８は、仮想コンピューティング環境中の仮想ハードウェアデバイスを使用することにより、物理ハードウェアデバイス用のデバイスドライバを設計しテストする方法２８０を示している。方法２８０は、このデバイスドライバが処理することを予想されることになるすべてのエラーを反復することができ、したがってより複雑なデバイスドライバのテストを可能にする専用の物理ハードウェアデバイスを設計するために必要な努力なしに、仮想デバイスドライバテストを可能にすることによってデバイスドライバを設計するに際しての適時性を簡素化し改善する。
【００４９】
ステップ２８２において、ＤＤ（ｄｅｖｉｃｅ  ｄｒｉｖｅｒデバイスドライバ）が、ソフトウェアツールを使用して開発され、次いで仮想マシン（例えば、ＶＭ  Ａ１０８）上の仮想デバイスとして実施される。ステップ２８４において、専用のＶＴＨＤ（ｖｉｒｔｕａｌ  ｔｅｓｔ  ｈａｒｄｗａｒｅ  ｄｅｖｉｃｅ仮想テストハードウェアデバイス）が、このデバイスドライバをテストするために開発される。ステップ２８６において、このＶＴＨＤが、このＶＭＭによってマニフェスト１２２に追加され、図５の方法１３０において説明しているように、ＶＭ  Ａ１０８およびＶＭ  Ｂ１１０にとって使用可能にされ、このＤＤがゲストＯＳ  Ａ１１２に追加される。ステップ２８８において、このＤＤは、このＶＴＨＤが生成するエラーに基づいてこの仮想マシン環境中でテストされる。このようにして、このＤＤの設計は、この仮想環境中のこのＶＴＨＤを介して実施される従来のデバイスドライバテストルーチンによってテストされる。このテストは、意図的なエラーの導入をこのデバイス設計に含めて、このドライバソフトウェアの経路をテストすることができる。さらに、このドライバソフトウェアは、様々な異なるゲストＯＳ上にこのドライバをインストールすることにより、仮想コンピューティング環境中の様々なオペレーティングシステムにわたって迅速にテストすることができる。
【００５０】
判断ステップ２９０において、このＤＤのパフォーマンスがステップ２８８におけるテストを合格したかどうかに関して判定が行われ、合格しなかった場合、方法２８０は、ステップ２８２に戻り、このステップで、このＤＤ設計に対する修正が行われ、このプロセスが反復される。しかし、ステップ２９０において合格した場合には、方法２８０は、オプションとしてのステップ２９２へと進み、このステップで、専用の物理ハードウェアデバイスを開発し、（たぶんこの正常なＶＨＤテストによる簡単に修正されたハードウェアデバイス上の簡略化されたプロセスで）テストすることができ、ステップ２９４において、この新しいデバイスドライバが完成され、流通へと送られ、方法２８０は終了する。
【００５１】
結論
本明細書中で説明した様々なシステム、方法、および技法は、ハードウェアまたはソフトウェア、あるいは適切な場合にはこれら両者の組合せを用いて実施することができる。したがって、本発明の方法および装置、またはある種の態様またはその一部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、または他の任意のマシン読取り可能ストレージ媒体など有形の媒体の形で実施されるプログラムコード（すなわち、命令）の形態を取ることが可能であり、ここでは、このプログラムコードが、コンピュータなどのマシンにロードされ、マシンによって実行される場合に、このマシンは、本発明を実行するための装置になる。プログラマブルコンピュータ上におけるプログラムコード実行の場合においては、このコンピュータは一般に、プロセッサ、（揮発性および不揮発性のメモリおよび／またはストレージ要素を含めて）このプロセッサにより読取り可能なストレージ媒体、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含むことになる。１つまたは複数のプログラムは、高レベルの手続き形言語またはオブジェクト指向プログラミング言語の形で実施してコンピュータシステムと情報をやりとりすることが好ましい。しかし、この１つまたは複数のプログラムは、必要に応じてアセンブリ言語または機械語で実行することができる。いずれにしても、この言語は、コンパイラ型言語またはインタープリタ型言語とすることが可能であり、ハードウェア実施形態と組み合わせることができる。
【００５２】
本発明の方法および装置は、電気的な配線またはケーブル配線上で、光ファイバを介して、または他の任意の伝送形態を介してなど何らかの伝送媒体上で伝送されるプログラムコードの形態で実施することもでき、ここで、このプログラムコードがマシンによって受信され、マシンにロードされ、またマシンによって実行される場合に、ＥＰＲＯＭ、ゲートアレイ、ＰＬＤ（プログラマブルロジックデバイス）、クライアントコンピュータ、ビデオレコーダなどのマシンが、本発明を実行するための装置になる。汎用プロセッサ上で実施される場合には、このプログラムコードがこのプロセッサと組み合わされて、本発明のインデッックス付け機能を実施するように動作する固有の装置が提供される。
【００５３】
本発明を様々な形の好ましい実施形態に関連して説明してきたが、他の同様な実施形態を使用することもでき、あるいは本発明を逸脱することなく本発明と同じファンクションを実施するために、この説明した実施形態に対して変更および追加を行うことができることを理解されたい。例えば、本発明の例示の実施形態は、パーソナルコンピュータの機能をエミュレートするデジタルデバイスの文脈で説明しているが、本発明は、本出願中で説明されるかかるデジタルデバイスだけに限定されることなく、有線であれ無線であれ、ゲーミングコンソール、ハンドヘルドコンピュータ、ポータブルコンピュータなど任意数の既存の、または出現しつつあるコンピューティングデバイスまたはコンピューティング環境にも適用でき、また通信ネットワークを介して接続され、このネットワークを横切って相互に作用する任意数のかかるコンピューティングデバイスにも適用できることが当業者には理解されよう。さらに、特に無線ネットワークデバイスの数が増え続けているので、ハンドヘルドデバイスオペレーティングシステム、および他の特定用途向けハードウェア／ソフトウェアインターフェースシステムを含めて様々なコンピュータプラットフォームが、本明細書中では企図されていることについて強調すべきである。したがって、本発明は、どの１つの実施形態にも限定すべきではなく、代わりに添付の特許請求の範囲による広がりと範囲で解釈すべきである。
【００５４】
最終的には、本明細書中で説明しているこれらの開示の実施形態は、他のプロセッサアーキテクチャ、コンピュータベースのシステム、またはシステム仮想化において使用するために適合させることができ、かかる実施形態については、本明細書中で行われた開示によって明確に予想されており、したがって、本発明は、本明細書中で説明している特定の実施形態だけに限定すべきではなく、その代わりに最も広範囲に解釈すべきである。同様に、プロセッサ仮想化以外の目的のための合成命令の使用もまた、本明細書中で行われたこの開示によって予想されており、プロセッサ仮想化以外の文脈における合成命令のかかるどのような利用についても、本明細書中で行われたこの開示中に最も広範囲に読み取るべきである。
【図面の簡単な説明】
【００５５】
【図１】本発明の態様を組み込むことができるコンピュータシステムを示すブロック図である。
【図２】コンピュータシステムにおけるエミュレートされた動作環境についての、ハードウェアアーキテクチャおよびソフトウェアアーキテクチャの論理階層化を示す図である。
【図３Ａ】仮想化コンピューティングシステムを示す図である。
【図３Ｂ】ホストオペレーティングシステムと並行して実行される仮想マシンモニタを含む仮想化コンピューティングシステムの代替実施形態を示す図である。
【図４】仮想マシンモニタ内の仮想デバイスに関連したファイル構造を含めて、図３Ｂの仮想化コンピューティングシステムを示す図である。
【図５】仮想化コンピューティングシステム中で使用するための外部デバイスを追加する方法を示す図である。
【図６】仮想デバイスが柔軟に追加される仮想化コンピューティングシステムを動作させる方法を示す図である。
【図７】仮想コンピューティング環境を使用して仮想ハードウェアデバイスを設計しテストする方法を示す図である。
【図８】仮想コンピューティング環境中で仮想ハードウェアを使用してデバイスドライバを設計しテストする方法を示す図である。
【符号の説明】
【００５６】
２０  コンピュータ
２１  処理装置
２２  システムメモリ
２３  システムバス
２７  ハードドライブ
２８  フロッピー（登録商標）ドライブ
２９  着脱可能ストレージ
３０  光ドライブ
３２  ハードディスクドライブＩ／Ｆ
３３  磁気ディスクドライブＩ／Ｆ
３４  光ドライブＩ／Ｆ
３６  アプリケーションプログラム
３６’  アプリケーション
３７  他のプログラム
３８  プログラムデータ
４０  キーボード
４２  マウス
４６  シリアルポートＩ／Ｆ
４７  モニタ
４８  ビデオアダプタ
４９  リモートコンピュータ
５０  フロッピー（登録商標）ドライブ
５３  ネットワークＩ／Ｆ
５４  モデム
５５  ホストアダプタ
５６  ＳＣＳＩバス
６２  ストレージデバイス
【図１】
2006018814.tif 000003
【図２】
2006018814.tif 000004
【図３Ａ】
2006018814.tif 000005
【図３Ｂ】
2006018814.tif 000006
【図４】
2006018814.tif 000007
【図５】
2006018814.tif 000008
【図６】
2006018814.tif 000009
【図７】
2006018814.tif 000010
【図８】
2006018814.tif 000011