(57)【要約】      （修正有）【課題】エクステンションが所期の利益をホストソフトウェアアプリケーションに提供できると同時に、エクステンションによって引き起こされる不安定性からホストアプリケーションを絶縁する保護された環境でエクステンションを実行できるようにする。【解決手段】ホストプロセス２０１により、エクステンションの機能性に関連する動作を検出し、エクステンションの、動作に関連する機能性をサポートするプロキシを識別する。ホストプロセス２０１にプロキシ２０５をロードし仮想プロセス２１１にエクステンション２１５をロードする。ホストプロセス２０１内のプロキシ２０５から仮想プロセス２１１内のエクステンション２１５に動作に関連する要求を転送すると、ホストプロセス２０１内のプロキシ２０５にエクステンション２１５から応答を転送する。【選択図】図２
2005322243.tif 000002
【特許請求の範囲】
【請求項１】
ホストプロセスによって使用されるエクステンションを隔離する方法であって、
前記ホストプロセスによる動作を検出するステップであって、前記動作は、前記エクステンションの機能性に関連する、ステップと、
前記エクステンションのプロキシを識別するステップであって、前記プロキシは、前記動作に関連する前記機能性をサポートする、ステップと、
前記ホストプロセスに前記プロキシをロードするステップと、
仮想プロセスに前記エクステンションをロードするステップであって、前記仮想プロセスは、前記ホストプロセスの仮想インスタンスである、ステップと、
前記ホストプロセス内の前記プロキシから前記仮想プロセス内の前記エクステンションに前記動作に関連する要求を転送するステップと、
前記ホストプロセス内の前記プロキシに前記エクステンションから応答を転送するステップであって、前記応答は、前記ホストプロセスによる前記動作をサポートするために前記プロキシによって使用されることができる、ステップと
を含むことを特徴とする方法。
【請求項２】
前記仮想プロセス内のエラーを検出するステップと、
エラー表示と共に前記ホストプロセスに制御を返すステップとを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記動作は、前記エクステンションの呼び出しであり、前記プロキシは、前記ホストプロセスに前記エクステンションに関連するサービスＡＰＩを公開することを特徴とする請求項１に記載の方法。
【請求項４】
前記仮想プロセスは、前記エクステンションに前記ホストプロセスに関連するサポートＡＰＩを提供することを特徴とする請求項１に記載の方法。
【請求項５】
前記要求の前記転送は、前記仮想プロセス内のスタブに前記ホストプロセスからの前記要求を転送するステップを含み、前記エクステンションは、前記エクステンションは前記ホストプロセスにロードされた場合に前記エクステンションは前記ホストプロセスから前記要求を受け取るのと同一の形で前記要求を前記スタブから受け取ることを特徴とする請求項１に記載の方法。
【請求項６】
前記応答の前記転送は、前記エクステンションまたは前記仮想プロセスの準拠しない応答または障害を検出するステップと；前記ホストプロセスによって提供される機能性のグレースフルデグラデーションを可能にする適当な表示を前記プロキシによって前記ホストプロセスに提供するステップとを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記ホストプロセスのユーザモードコンテキストを前記ホストプロセスから前記仮想プロセスにコピーすることによって、前記ユーザモードコンテキストを前記仮想プロセス内で提供するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
ホストプロセスメモリおよび仮想プロセスメモリを共通の物理メモリにマッピングすることによって、前記ホストプロセスのユーザモードコンテキストを前記仮想プロセス内で提供するステップと、
前記仮想プロセスによる書き込みアクセスから前記共通の物理メモリを保護するステップとをさらに含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記仮想プロセスは、保存されたコヒーレント状態を使用して作成された仮想マシンプロセスであり、前記保存されたコヒーレント状態は、初期仮想マシンをブートするステップと；前記初期仮想マシンの前記ブートによって作成されたコヒーレント状態を保存するステップとを含むステップを実行することによって作成されることを特徴とする請求項１に記載の方法。
【請求項１０】
前記ホストプロセスは、オペレーティングシステムプロセスであり、前記仮想プロセスは、保存されたコヒーレント状態を使用して作成された仮想マシンプロセスであり、前記保存されたコヒーレント状態は、前記オペレーティングシステムプロセスのブート中に状態を記録することによって作成されることを特徴とする請求項１に記載の方法。
【請求項１１】
仮想オペレーティングシステム環境を効率的に作成する方法であって、
少なくとも１つのプロセッサを有するコンピューティングデバイスでオペレーティングシステム環境のブートを開始するステップと、
前記オペレーティングシステム環境の前記ブート中に、前記コンピューティングデバイスは前記少なくとも１つのプロセッサに対する１つまたは複数の追加プロセッサを有することを示すステップと、
前記オペレーティングシステム環境の前記ブート中に、前記少なくとも１つのプロセッサおよび前記１つまたは複数の追加プロセッサが初期化された後に、状態を保存するステップと、
前記オペレーティングシステム環境は前記少なくとも１つのプロセッサに関連する少なくとも１つのコンポーネントバインディングを完了した後に、前記１つまたは複数の追加プロセッサは障害を発生したことを前記オペレーティングシステム環境に示すステップと、
前記仮想オペレーティングシステム環境に前記保存された状態を提供するステップと、
前記保存された状態を使用して前記仮想オペレーティングシステム環境をブートするステップであって、前記仮想オペレーティングシステム環境の前記ブートは、前記少なくとも１つのプロセッサは前記少なくとも１つのコンポーネントバインディングに関連する少なくとも１つのコンポーネントにアクセスできなくするステップを含むステップと、
前記１つまたは複数の追加プロセッサに前記少なくとも１つのプロセッサに関連する前記少なくとも１つのコンポーネントバインディングへのアクセスを提供するために先在するサポートを使用して前記少なくとも１つのコンポーネントバインディングへのアクセスを前記仮想オペレーティングシステム環境に提供するステップと
を含むことを特徴とする方法。
【請求項１２】
前記仮想オペレーティングシステム環境の前記ブートは、さらに、
前記少なくとも１つのプロセッサに関連する前記少なくとも１つのコンポーネントバインディングに頼るステップと、
前記１つまたは複数の追加プロセッサを使用して前記仮想オペレーティングシステム環境の前記ブートを完了するステップとを含むことを特徴とする請求項１１に記載の方法。
【請求項１３】
指定されたコンポーネントに対する前記仮想オペレーティングシステム環境内の指定されたコンポーネントバインディングを作成するステップをさらに含み、前記指定されたコンポーネントは、前記仮想オペレーティングシステム環境内でホスティングされるデバイスドライバとインターフェースすることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記指定されたコンポーネントバインディングの前記作成は、前記ホストオペレーティングシステム環境の前記ブート中に前記指定されたコンポーネントに関する通信をキャッシングするステップと；前記キャッシングされた通信を前記仮想オペレーティングシステム環境に提供するステップとを含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記指定されたコンポーネントバインディングの前記作成は、
前記指定されたコンポーネントを前記ホストオペレーティングシステム環境にバインドするステップと、
前記ホストオペレーティングシステム環境内から前記指定されたコンポーネントをハイバーネートさせるステップであって、前記ハイバーネートは、前記指定されたコンポーネントに関する通信キューをクリーンにフラッシュする、ステップと、
前記指定されたコンポーネントを前記仮想オペレーティングシステム環境にバインドするステップと
を含むことを特徴とする請求項１３に記載の方法。
【請求項１６】
ホストプロセスによって使用されるエクステンションを隔離するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記コンピュータ可読媒体は、
前記ホストプロセスによる動作を検出するコンピュータ実行可能命令であって、前記動作は、前記エクステンションの機能性に関連する、コンピュータ実行可能命令と、
前記エクステンションのプロキシを識別するコンピュータ実行可能命令であって、前記プロキシは、前記動作に関連する前記機能性をサポートする、コンピュータ実行可能命令と、
前記ホストプロセスに前記プロキシをロードするコンピュータ実行可能命令と、
仮想プロセスに前記エクステンションをロードするコンピュータ実行可能命令であって、前記仮想プロセスは、前記ホストプロセスの仮想インスタンスである、コンピュータ実行可能命令と、
前記ホストプロセス内の前記プロキシから前記仮想プロセス内の前記エクステンションに前記動作に関連する要求を転送するコンピュータ実行可能命令と、
前記ホストプロセス内の前記プロキシに前記エクステンションから応答を転送するコンピュータ実行可能命令であって、前記応答は、前記ホストプロセスによる前記動作をサポートするために前記プロキシによって使用されることができる、コンピュータ実行可能命令と
を含むことを特徴とするコンピュータ可読媒体。
【請求項１７】
前記ホストプロセスは、前記エクステンションを呼び出すように設計されていないことを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
前記仮想プロセス内のエラーを検出するコンピュータ実行可能命令と、
エラー表示と共に前記ホストプロセスに制御を返すコンピュータ実行可能命令とを含むことを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項１９】
前記動作は、前記エクステンションの呼び出しであり、前記プロキシは、前記ホストプロセスに前記エクステンションに関連するサービスＡＰＩを公開することを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２０】
ソフトウェアフォールト隔離技法を使用して、ホストプロセス内で前記エクステンションの共通して呼び出される軽量機能を実行するコンピュータ実行可能命令をさらに含むことを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２１】
前記仮想プロセスは、前記エクステンションに前記ホストプロセスに関連するサポートＡＰＩを提供することを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２２】
前記要求を転送する前記コンピュータ実行可能命令は、前記仮想プロセス内のスタブに前記ホストプロセスからの前記要求を転送するコンピュータ実行可能命令を含み、前記エクステンションは、前記エクステンションは前記ホストプロセスにロードされた場合に前記エクステンションは前記ホストプロセスから前記要求を受け取るのと同一の形で前記要求を前記スタブから受け取ることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２３】
前記応答を転送する前記コンピュータ実行可能命令は、前記エクステンションまたは前記仮想プロセスの準拠しない応答または障害を検出するコンピュータ実行可能命令と；前記ホストプロセスによって提供される機能性のグレースフルデグラデーションを可能にする適当な表示を前記プロキシによって前記ホストプロセスに提供するコンピュータ実行可能命令とを含むことを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２４】
前記ホストプロセスのユーザモードコンテキストを前記ホストプロセスから前記仮想プロセスにコピーすることによって、前記ユーザモードコンテキストを前記仮想プロセス内で提供するコンピュータ実行可能命令をさらに含むことを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２５】
ホストプロセスメモリおよび仮想プロセスメモリを共通の物理メモリにマッピングすることによって、前記ホストプロセスのユーザモードコンテキストを前記仮想プロセス内で提供するコンピュータ実行可能命令と、
前記仮想プロセスによる書き込みアクセスから前記共通の物理メモリを保護するコンピュータ実行可能命令と
をさらに含むことを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２６】
前記共通の物理メモリの前記保護は、読取専用アクセス、コピーオンライトアクセス、およびヴェッテッドライトバックアクセス（ｖｅｔｔｅｄ  ｗｒｉｔｅ−ｂａｃｋ  ａｃｃｅｓｓ）を含むメモリ保護スキームの群から選択されるメモリ保護スキームの実施を含むことを特徴とする請求項２５に記載のコンピュータ可読媒体。
【請求項２７】
前記仮想プロセスは、保存されたコヒーレント状態を使用して作成された仮想マシンプロセスであり、前記保存されたコヒーレント状態は、初期仮想マシンをブートするステップと、前記初期仮想マシンの前記ブートによって作成されたコヒーレント状態を保存するステップとを含むステップを実行するコンピュータ実行可能命令によって作成されることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２８】
前記ホストプロセスは、オペレーティングシステムプロセスであり、前記仮想プロセスは、保存されたコヒーレント状態を使用して作成された仮想マシンプロセスであり、前記保存されたコヒーレント状態は、前記オペレーティングシステムプロセスのブート中に状態を記録することによって作成されることを特徴とする請求項１６に記載のコンピュータ可読媒体。
【請求項２９】
仮想オペレーティングシステム環境を効率的に作成するコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記コンピュータ可読媒体は、
少なくとも１つのプロセッサを有するコンピューティングデバイスでオペレーティングシステム環境のブートを開始するコンピュータ実行可能命令と、
前記オペレーティングシステム環境の前記ブート中に、前記コンピューティングデバイスは前記少なくとも１つのプロセッサに対する１つまたは複数の追加プロセッサを有することを示すコンピュータ実行可能命令と、
前記オペレーティングシステム環境の前記ブート中に、前記少なくとも１つのプロセッサおよび前記１つまたは複数の追加プロセッサが初期化された後に、状態を保存するコンピュータ実行可能命令と、
前記オペレーティングシステム環境は前記少なくとも１つのプロセッサに関連する少なくとも１つのコンポーネントバインディングを完了した後に、前記１つまたは複数の追加プロセッサは障害を発生したことを前記オペレーティングシステム環境に示すコンピュータ実行可能命令と、
前記仮想オペレーティングシステム環境に前記保存された状態を提供するコンピュータ実行可能命令と、
前記保存された状態を使用して前記仮想オペレーティングシステム環境をブートするコンピュータ実行可能命令であって、前記仮想オペレーティングシステム環境の前記ブートは、前記少なくとも１つのプロセッサは前記少なくとも１つのコンポーネントバインディングに関連する少なくとも１つのコンポーネントにアクセスできなくすることを含むコンピュータ実行可能命令と、
前記１つまたは複数の追加プロセッサに前記少なくとも１つのプロセッサに関連する前記少なくとも１つのコンポーネントバインディングへのアクセスを提供するために先在するサポートを使用して前記少なくとも１つのコンポーネントバインディングへのアクセスを前記仮想オペレーティングシステム環境に提供するコンピュータ実行可能命令と
を含むことを特徴とするコンピュータ可読媒体。
【請求項３０】
前記仮想オペレーティングシステム環境の前記ブートは、さらに、
前記少なくとも１つのプロセッサに関連する前記少なくとも１つのコンポーネントバインディングに頼ることと、
前記１つまたは複数の追加プロセッサを使用して前記仮想オペレーティングシステム環境の前記ブートを完了すること
とを含むことを特徴とする請求項２９に記載のコンピュータ可読媒体。
【請求項３１】
指定されたコンポーネントに対する前記仮想オペレーティングシステム環境内の指定されたコンポーネントバインディングを作成するコンピュータ実行可能命令をさらに含み、前記指定されたコンポーネントは、前記仮想オペレーティングシステム環境内でホスティングされるデバイスドライバとインターフェースすることを特徴とする請求項２９に記載のコンピュータ可読媒体。
【請求項３２】
前記指定されたコンポーネントバインディングを作成する前記コンピュータ実行可能命令は、前記ホストオペレーティングシステム環境の前記ブート中に前記指定されたコンポーネントの制御情報をキャプチャするコンピュータ実行可能命令と；前記仮想オペレーティングシステム環境内でホスティングされる前記デバイスドライバに前記制御情報を提供するコンピュータ実行可能命令とを含むことを特徴とする請求項３１に記載のコンピュータ可読媒体。
【請求項３３】
前記指定されたコンポーネントバインディングを作成する前記コンピュータ実行可能命令は、
前記仮想オペレーティングシステム環境内の前記デバイスドライバに対応するプロキシを前記ホストオペレーティングシステム環境内で確立するコンピュータ実行可能命令と、
前記ホストオペレーティングシステム環境に渡される入出力パケットを前記プロキシによってキャッシングするコンピュータ実行可能命令と、
前記キャッシングされた入出力パケットを前記仮想オペレーティングシステム環境内の前記デバイスドライバに前記プロキシによって送るコンピュータ実行可能命令と
を含むことを特徴とする請求項３１に記載のコンピュータ可読媒体。
【請求項３４】
前記指定されたコンポーネントバインディングを作成する前記コンピュータ実行可能命令は、
前記指定されたコンポーネントを前記ホストオペレーティングシステム環境にバインドするコンピュータ実行可能命令と、
前記ホストオペレーティングシステム環境内から前記指定されたコンポーネントをハイバーネートさせるコンピュータ実行可能命令であって、前記ハイバーネートは、前記指定されたコンポーネントに関する通信キューをクリーンにフラッシュする、コンピュータ実行可能命令と、
前記指定されたコンポーネントを前記仮想オペレーティングシステム環境にバインドするコンピュータ実行可能命令と
を含むことを特徴とする請求項３１に記載のコンピュータ可読媒体。
【請求項３５】
１つまたは複数のプロセスと；メモリストレージとを含むコンピューティングデバイスであって、前記メモリストレージは、
ホストプロセスを作成するコンピュータ実行可能命令であって、前記ホストプロセスは動作を実行する、コンピュータ実行可能命令と、
仮想プロセスを作成するコンピュータ実行可能命令であって、前記仮想プロセスは、前記ホストプロセスの仮想インスタンスであり、さらに、前記仮想プロセスは、前記動作に関連するエクステンションをサポートする、コンピュータ実行可能命令と、
前記動作に関連するプロキシを前記ホストプロセスにロードするコンピュータ実行可能命令と、
前記エクステンションを前記仮想プロセスにロードするコンピュータ実行可能命令と、
前記プロキシからの要求を前記エクステンションに転送するコンピュータ実行可能命令と、
前記エクステンションからの応答を前記プロキシに転送するコンピュータ実行可能命令であって、前記応答は、前記動作をサポートするために前記プロキシによって使用されることができる、コンピュータ実行可能命令と
を含むことを特徴とするコンピューティングデバイス。
【請求項３６】
前記メモリストレージは、さらに、前記エクステンションまたは前記仮想プロセスの準拠しない応答または障害を検出するコンピュータ実行可能命令と；前記ホストプロセスによって提供される機能性のグレースフルデグラデーションを可能にする適当な表示を前記プロキシによって前記ホストプロセスに提供するコンピュータ実行可能命令とを含むことを特徴とする請求項３５に記載のコンピューティングデバイス。
【請求項３７】
前記メモリストレージは、さらに、前記ホストプロセスのユーザモードコンテキストを前記ホストプロセスから前記仮想プロセスにコピーすることによって、またはホストプロセスメモリおよび仮想プロセスメモリを共通の物理メモリにマッピングすることによって、前記ホストプロセスの前記ユーザモードコンテキストを前記仮想プロセス内で提供するコンピュータ実行可能命令をさらに含むことを特徴とする請求項３５に記載のコンピューティングデバイス。
【請求項３８】
前記ホストプロセスは、オペレーティングシステムプロセスであり、前記仮想プロセスは、保存されたコヒーレント状態を使用して作成された仮想マシンプロセスであり、前記保存されたコヒーレント状態は、初期仮想マシンをブートし、前記初期仮想マシンの前記ブートによって作成された状態を保存するステップを実行するコンピュータ実行可能命令によって、または前記オペレーティングシステムプロセスのブートによって作成される状態を保存するステップを実行するコンピュータ実行可能命令によって、作成されることを特徴とする請求項３５に記載のコンピューティングデバイス。
【請求項３９】
前記ホストプロセスは、オペレーティングシステムプロセスであり、前記仮想プロセスは、仮想マシンプロセスであり、前記メモリストレージは、さらに、
前記オペレーティングシステムプロセスのブート中に、前記コンピューティングデバイスが１つまたは複数の追加プロセッサを有することを示すコンピュータ実行可能命令と、
前記オペレーティングシステムプロセスの前記ブート中に、前記１つまたは複数のプロセッサおよび前記１つまたは複数の追加プロセッサが初期化された後に、状態を保存するコンピュータ実行可能命令と、
前記１つまたは複数のプロセッサに関連する少なくとも１つのコンポーネントバインディングは前記オペレーティングシステムプロセスによって完了された後に、前記１つまたは複数の追加プロセッサが障害を発生したことを前記オペレーティングシステムプロセスに示すコンピュータ実行可能命令と、
前記仮想マシンプロセスに前記保存された状態を提供するコンピュータ実行可能命令と、
前記保存された状態を使用して前記仮想マシンプロセスをブートするコンピュータ実行可能命令であって、前記仮想マシンプロセスの前記ブートは、前記１つまたは複数のプロセッサが前記少なくとも１つのコンポーネントバインディングに関連する少なくとも１つのコンポーネントにアクセスできなくする、コンピュータ実行可能命令と、
前記１つまたは複数の追加プロセッサに前記１つまたは複数のプロセッサに関連する前記少なくとも１つのコンポーネントバインディングへのアクセスを提供するために先在するサポートを使用して前記少なくとも１つのコンポーネントバインディングへのアクセスを前記仮想マシンプロセスに提供するコンピュータ実行可能命令と
を含むことを特徴とする請求項３５に記載のコンピューティングデバイス。
【請求項４０】
前記メモリストレージが、さらに、指定されたコンポーネントに対する前記仮想マシンプロセス内の指定されたコンポーネントバインディングを作成するコンピュータ実行可能命令をさらに含み、前記指定されたコンポーネントは、前記仮想マシンプロセス内でホスティングされるデバイスドライバとインターフェースすることを特徴とする請求項３９に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的にはフォールトトレラントエクステンションに関し、具体的には、エクステンション用のフォールト隔離仮想環境を提供するシステムおよび方法に関する。
【背景技術】
【０００２】
本願は、本願と同時に出願された同時係属の米国特許出願、名称「Providing Direct Access To Hardware From A Virtual Environment」、弁理士整理番号第２２６３３９号に関連する。
【０００３】
オペレーティングシステムまたはアプリケーションを拡張するますます人気の高まるメカニズムが、追加機能性を提供でき、個別の基礎で配布でき、呼び出すことができるエクステンションの使用である。例えば、現代のオペレーティングシステムが、ハードウェア製造業者によって作られるハードウェアコンポーネントとオペレーティングシステムソフトウェアとの間でインターフェースするために、ハードウェア製造業者が提供するエクステンションに頼る。その形で、オペレーティングシステム作成者は、全般的なハードウェアサポートを提供することだけが必要であり、すべての考えられるハードウェアデバイスのサポートを試みる必要はない。ハードウェアデバイスが、オペレーティングシステムが動作しているコンピューティングシステムに追加される時に、その新しいハードウェアデバイスとオペレーティングシステムの間でインターフェースするように特に設計されたエクステンションを、ハードウェア製造業者が提供することができ、これをオペレーティングシステムによって使用して、新しいハードウェアデバイスを制御し、新しいハードウェアデバイスの機能性へのアクセスをユーザに提供することができる。
【０００４】
オペレーティングシステムのほかに、多数の他のソフトウェアアプリケーションが、エクステンションに頼って、追加の機能性を提供すると同時に、ホストアプリケーションの複雑さを減らす。例えば、ウェブブラウザアプリケーションは、エクステンションに頼って、様々なデータ型を解釈するかこれと対話する能力をユーザに提供することができる。したがって、ウェブブラウザは、ハイパーテキストマークアップ言語（ＨＴＭＬ）で記述されたウェブページまたはＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）符号化フォーマットを使用して符号化されたイメージなどの限られた型のデータを扱う能力を提供するだけでよい。ブラウザアプリケーションの追加の機能性を必要とするウェブページは、そのブラウザアプリケーションのカスタムエクステンションに頼って、必要な機能性を提供することができる。例えば、ほとんど使用されないフォーマットで符号化されたイメージを使用したいと思うウェブページ作成者は、その特定のイメージフォーマットを理解でき、ウェブブラウザとインターフェースしてウェブブラウザがそのフォーマットを使用して符号化されたイメージを表示できるようにするエクステンションを提供することができる。
【０００５】
他のアプリケーションも、エクステンションを使用して、高められた機能性を提供することができる。例えば、イメージ処理アプリケーションは、様々なアーティストによって提供されるエクステンションを使用して、ユーザがそれらのアーティストによって開発された多数の異なる芸術的イメージ処理アルゴリズムにアクセスできるようにすることができる。したがって、イメージ処理プログラムは、色制御およびコントラスト制御などの基本的なイメージ編集機能を提供することができる。写真を油絵に変換するように見える効果などのより複雑な機能は、別々に入手可能なエクステンションによって提供することができる。その形で、イメージ処理アプリケーションのユーザは、彼らの必要に最も適するエクステンションを個別に選択することができ、これらの要件に対して有用である可能性があるエクステンションだけをインストールすることを選択することができる。
【０００６】
一般に、エクステンションは、様々なアプリケーションプログラムインターフェース（ＡＰＩ）を介してホストソフトウェアアプリケーションと相互作用（対話）する。ＡＰＩは、様々な機能または能力にアクセスする形を定義する。したがって、一方のコンポーネントが、特定の機能を実施するコードおよびデータを含み、ＡＰＩによって定義される形でその機能が呼び出されることを提供し、第２のコンポーネントが、ＡＰＩによって定義される形でその機能を要求する場合に、この２つのコンポーネントがＡＰＩを介して相互作用すると言う。
【０００７】
エクステンションとホストソフトウェアアプリケーションの間の相互作用は、一般に、２つのタイプのＡＰＩすなわち、サービスＡＰＩおよびサポートＡＰＩを介して行われる。サポートＡＰＩは、ホストソフトウェアアプリケーション、オペレーティングシステム、またはホストソフトウェアアプリケーションによって提供される機能性にアクセスするのにエクステンションによって使用されることができる他のソフトウェアによって実施することができる。さらに、いくつかのサポートＡＰＩが、さらなるサポートＡＰＩに頼って要求された機能を実行することができるように、サポートＡＰＩを階層化しまたはスタックすることができる。その一方で、サービスＡＰＩは、エクステンションによって実装することができ、ホストソフトウェアアプリケーションによって、そのエクステンションによって提供される機能性にアクセスするのに使用することができる。例として、ウェブブラウザが特定のフォーマットで符号化されたイメージを表示できるようにするウェブブラウザに対するエクステンションが、ウェブブラウザがイメージデータをエクステンションに渡し、エクステンションがそのイメージデータを解釈することを要求するのに使用できるサービスＡＰＩを公開することができると同時に、ウェブブラウザが、エクステンションがウェブブラウザに要求できる基本サービスを提供できるサポートＡＰＩを提供することができる。
【０００８】
多数のエクステンション、特に、ハードウェアデバイスとインターフェースするように設計された物などのオペレーティングシステムエクステンションは、複数のサポートＡＰＩに頼って、ハードウェアと適当にインターフェースすることができる。現代のコンピューティングデバイスに追加できる多数のハードウェアデバイスは、専用の回路または処理ユニットによって制御されるポートを介してコンピューティングデバイスと物理的にインターフェースする。オペレーティングシステムのサポートＡＰＩは、エクステンションが、それのために設計されたハードウェアデバイスにアクセスし、制御するために、エクステンションがそれによって専用回路を使用できるメカニズムを提供することができる。例えば、オペレーティングシステムは、ランダムアクセスメモリのうちで、ハードウェア入出力通信のためにとっておかれる特定の領域にエクステンションがアクセスできるようにするサポートＡＰＩを提供することができる。その代わりに、オペレーティングシステムは、エクステンションがハードウェア入出力ポートに直接にアクセスできるようにするサポートＡＰＩを提供することができる。
【０００９】
その一方で、エクステンションは、オペレーティングシステムまたは他のソフトウェアアプリケーションが、そのエクステンションによって提供される機能性にアクセスできるようにするサービスＡＰＩを提供することができる。例えば、新しいディスプレイデバイス用のデバイスドライバに、そのディスプレイデバイスを制御するコードおよびデータを含めることができる。ディスプレイデバイスドライバのそのコードおよびデータは、オペレーティングシステムコードまたはソフトウェアアプリケーションコードなどの他のコードによって、サービスＡＰＩの使用を介する事前定義の形で呼び出されることができる。ディスプレイデバイスドライバの例では、サービスＡＰＩに、イメージデータの表示を要求するＡＰＩ、現在の解像度などの情報をディスプレイに要求するＡＰＩ、およびディスプレイの節電機能のアクティブ化を要求するＡＰＩを含めることができる。
【００１０】
残念ながら、ホストソフトウェアアプリケーションおよびエクステンションは、一般に、異なる個人によって作成されるので、エクステンションがホストプログラムと正しくインターフェースしないことが一般的である可能性がある。例えば、一部のエクステンションは、ホストソフトウェアアプリケーションによって提供されるサポートＡＰＩを正しく使用せず、不正なパラメータまたはデータを渡すか、他の形で様々な機能を不正に要求する場合がある。他のエクステンションは、ディスクアクセス、スクリーンアクセス、および類似物など、ホストソフトウェアアプリケーションを介するのではなく、サポートＡＰＩを完全に迂回し、機能性に直接にアクセスすることを試みる場合がある。その代わりに、エクステンションが、完全に文書化されていないＡＰＩまたはソフトウェアアプリケーション自体の中での内部使用だけを意図されたＡＰＩなど、エクステンションによる使用を意図されていないサポートＡＰＩへのアクセスを試みることもできる。
【００１１】
【特許文献１】米国特許第５７６１４７７号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１２】
ホストソフトウェアアプリケーションと正しくインターフェースしないエクステンションは、ホストソフトウェアアプリケーション全体の障害をもたらす可能性があり、コンピューティングシステム全体の障害さえもたらす可能性がある。これは、ホストソフトウェアアプリケーションのユーザが、現代のオペレーティングシステムによって一般的に使用される無数のサードパーティデバイスドライバなど、複数の当事者からの複数のエクステンションの同時使用に頼ることを強制される場合に、特に問題になる可能性がある。さらに、そのような障害は、しばしば、診断し、正しくサポートすることが困難である。というのは、ユーザがホストソフトウェアアプリケーションを非難する場合があるが、実際には、不安定性の原因が、エクステンションであるからである。したがって、ホストソフトウェアアプリケーションをエクステンションによって導入される可能性がある不安定性から絶縁しながら、エクステンションの特徴および能力へのアクセスをホストソフトウェアアプリケーションに提供できるエクステンション環境を作成することが望ましい。
【課題を解決するための手段】
【００１３】
本発明の実施形態は、エクステンションが所期の利益をホストソフトウェアアプリケーションに提供できると同時に、エクステンションによって引き起こされる不安定性からホストアプリケーションを絶縁する保護された環境でエクステンションを実行できるようにする。
【００１４】
一実施形態で、エクステンションが正しく要求できるサポートＡＰＩを提供できると同時にエクステンションをホストソフトウェアアプリケーションから隔離する仮想環境内でエクステンションを実行することができる。
【００１５】
もう１つの実施形態で、エクステンションを仮想環境内で実行でき、対応するプロキシエクステンションがオリジナルエクステンションの能力へのアクセスを提供すると同時に、仮想環境の使用を介してホストソフトウェアアプリケーションがオリジナルエクステンションから隔離される形で、対応するプロキシエクステンションをホストソフトウェアアプリケーションのプロセス空間内で実行することができる。エクステンションとプロキシは、類似する物として、ホストソフトウェアアプリケーションと、そのホストソフトウェアアプリケーションとインターフェースするように設計されたエクステンションとの間のフォールト隔離を提供することができ、あるいは、エクステンションとプロキシを異なる物として、フォールト隔離を提供するだけではなく、ホストソフトウェアアプリケーションが、そのホストソフトウェアアプリケーションとインターフェースするように設計されていない可能性があるエクステンションを利用できるようにすることによって、ホストソフトウェアアプリケーションの機能性を拡張することもできる。
【００１６】
さらに、もう１つの実施形態で、代理ホストソフトウェアアプリケーションを仮想環境内で作成することによって、またはユーザモード範囲が仮想環境とホスト環境の両方で同一の物理メモリにマッピングされるか、もう１つの代替案としてユーザモードコンテキストを仮想環境にコピーできるようにするために仮想環境内のページテーブルマッピングを変更することによって、ユーザモードコンテキストを必要とするエクステンションを仮想環境内で実行できるようにする。フォールト隔離を維持するために、ホスト環境の物理メモリには、読取専用の形で、またはコピーオンライト技法を使用することによって、アクセスすることができる。
【００１７】
さらに、もう１つの実施形態で、エクステンションが必要とする機能性またはその機能性のスーパーセットを有するオリジナル仮想環境をブートすることと、その後の、仮想環境が必要な時点で、必要な仮想環境を作成するためにブートされたオリジナル仮想環境の状態のクローンを作成することによって、エクステンションを安全に実行できる仮想環境を効率的に作成することができる。
【００１８】
さらに、もう１つの実施形態で、ホスト環境の最初のスタートアップシーケンス中に、第２処理ユニットがコンピューティングシステムに存在することをホスト環境に示すことと、ホスト環境が第２処理ユニットのコヒーレントな状態の作成を完了した後に、第２処理ユニットが障害を発生したことをホスト環境に示し、その後、第２処理ユニットが存在することを仮想環境に示し、ホスト環境のスタートアップ中に作成された第２処理ユニットのコヒーレントな状態を使用して仮想環境をスタートアップすることによって、エクステンションを安全に実行できる仮想環境を効率的に作成することができる。
【００１９】
なお、さらに、もう１つの実施形態で、ホスト環境の最初のスタートアップシーケンス中に、第２処理ユニットがコンピューティングシステムに存在することをホスト環境に示し、ホスト環境に第２処理ユニットのコヒーレントな状態を作成させ、ホスト環境に、エクステンションが制御するように設計されたハードウェアデバイスに第２処理ユニットをバインドさせることによって、ハードウェアデバイスを制御するように設計されたエクステンションを安全に実行できる仮想環境を効率的に作成することができる。ホスト環境が、第２処理ユニットのコヒーレントな状態の作成および適当なハードウェアデバイスへのバインドを完了した後に、ホスト環境が、第２処理ユニットが障害を発生したことの表示を受け取ることができると同時に、仮想環境を、ホスト環境のスタートアップ中に作成された第２処理ユニットのコヒーレントな状態を使用してスタートアップすることができ、仮想環境およびその中で実行されるエクステンションに、第２処理ユニットにバインドされたハードウェアデバイスへの単純化されたアクセスが提供される。
【００２０】
本発明の追加の特徴および長所は、添付図面を参照して進行する下の例示的実施形態の詳細な説明から明白になる。
【００２１】
請求項に、本発明の特徴を具体的に記載するが、本発明は、その目的および長所と共に、添付図面と共に解釈される下の詳細な説明から最もよく理解することができる。
【発明を実施するための最良の形態】
【００２２】
多くのソフトウェアアプリケーションおよびオペレーティングシステムが、エクステンションに頼って、追加の機能性、サービス、または能力をユーザに提供する。しばしば使用されるエクステンションの１つを、デバイスドライバと称し、これは、一般にオペレーティングシステムであるホストソフトウェアアプリケーションとハードウェアデバイスの間のインターフェースを提供することができる。他のエクステンションに、ブラウザソフトウェアアプリケーション用のアプレットおよびプラグイン、イメージ編集ソフトウェアアプリケーション用のフィルタ、エフェクト、およびプラグイン、ならびにオーディオ／ビデオソフトウェアアプリケーション用のコーデックが含まれる。
【００２３】
エクステンションは、そのホストソフトウェアアプリケーションと密にインターオペレートするので、エクステンションによって導入される不安定性によって、ホストソフトウェアアプリケーション全体が使用不能になる可能性がある。一般に、エクステンションは、ホストソフトウェアアプリケーションが使用できる１つまたは複数のアプリケーションプログラムインターフェース（ＡＰＩ）を介して、その能力へのアクセスを提供する。エクステンションがその機能性を公開するＡＰＩを、一般に、「サービスＡＰＩ」と称する。エクステンションが、追加情報、リソース、または類似物を必要とする場合に、エクステンションは、一般に「サポートＡＰＩ」と称する１つまたは複数のＡＰＩを介して、ホストソフトウェアアプリケーションにそれらを要求することができる。エクステンションまたはホストソフトウェアアプリケーションのいずれかが、サービスＡＰＩまたはサポートＡＰＩを不正に使用するか、文書化されていないＡＰＩまたはサポートされないＡＰＩへのアクセスを試みる場合に、結果のエラーまたは意図されないアーティファクトが、不安定性を引き起こす可能性がある。エクステンションは、一般に、そのホストソフトウェアアプリケーションと同一のプロセス内で動作するので、そのプロセス内で動作する１つまたは複数のエクステンションが不安定性を導入する場合に、ホストソフトウェアアプリケーションが正しく動作し続けることは、非常に困難になる可能性がある。
【００２４】
エクステンションを別々のプロセスで実行できるならば、エクステンションによって導入されるそのような不安定性を、ホストソフトウェアアプリケーションのプロセスと独立のプロセスに隔離することができ、ホストソフトウェアアプリケーションが、不安定なエクステンションにもかかわらずに正しく動作することができる。オペレーティングシステムなど、多数のエクステンションをホスティングする可能性があるソフトウェアアプリケーションについて、各エクステンションを隔離することによって、オペレーティングシステムの総合的な信頼性を大いに高めることができる。というのは、障害の可能性が、使用される各追加のエクステンションに伴って指数関数的に増えるからである。さらに、エクステンションを隔離することによって、アプリケーション作成者が、彼ら自身のアルゴリズム内の不安定性の源を識別し、除去することに集中できるようになる。その結果、本発明の実施形態は、エクステンションをそのホストソフトウェアアプリケーションから隔離すると同時に、ホストソフトウェアアプリケーションにエクステンションの利益を提供し続ける。
【００２５】
必要ではないが、本発明を、プログラムモジュールなど、コンピューティングデバイスによって実行されるコンピュータ実行可能命令の全般的な文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、および類似物が含まれる。分散コンピューティング環境では、タスクを、通信ネットワークを介してリンクされたリモート処理デバイスによって実行することができる。分散コンピューティング環境では、プログラムモジュールを、ローカルおよびリモートの両方のコンピュータストレージデバイス（記憶デバイス）および／または媒体（記憶媒体）に置くことができる。本発明を、個別にまたは分散コンピューティング環境の一部としてのいずれかで、多数の異なるコンピューティングデバイスを用いて実施することができ、そのようなデバイスに、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルなコンシューマ電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、および類似物を含めることができることを、当業者は諒解するであろう。
【００２６】
図１に移ると、本発明を実施できる例示的なコンピューティングデバイス１００が示されている。コンピューティングデバイス１００は、適切なコンピューティングデバイスの一例にすぎず、本発明の使用または機能性の範囲に関する制限を提案することを意図された物ではない。さらに、コンピューティングデバイス１００を、図１に示された周辺機器のいずれかまたはその組合せに関する依存性または要件を有する物と解釈してはならない。
【００２７】
コンピューティングデバイス１００のコンポーネントに、処理ユニット１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット１２０に結合するシステムバス１２１が含まれる。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む複数のタイプのバス構造のいずれかとすることができる。制限ではなく例として、そのようなアーキテクチャに、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｅ（ＶＥＳＡ）ローカルバス、およびメザニンバスとも称するＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスが含まれる。さらに、処理ユニット１２０に、１つまたは複数の物理プロセッサを含めることができる。
【００２８】
コンピューティングデバイス１００に、通常は、様々なコンピュータ可読媒体が含まれる。コンピュータ可読媒体は、コンピューティングデバイス１００によってアクセスできるすべての使用可能な媒体とすることができ、揮発性および不揮発性、取外し可能および取外し不能の両方の媒体を含む使用可能な媒体とすることができる。制限ではなく例として、コンピュータ可読媒体に、コンピュータストレージ媒体および通信媒体を含めることができる。コンピュータストレージ（記憶）媒体に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を保管する任意の方法またはテクノロジで実施された、揮発性および不揮発性、取外し可能および取外し不能の両方の媒体が含まれる。コンピュータストレージ媒体に、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリテクノロジ、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の光学ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気ストレージデバイス、あるいは所望の情報の保管に使用でき、コンピューティングデバイス１００によってアクセスできる他のすべての媒体が含まれるが、これに制限はされない。通信媒体によって、通常は、搬送波または他のトランスポートメカニズムなどの変調されたデータ信号内のコンピュータ可読命令、データ構造、プログラムモジュール、または他のデータが実施され、通信媒体には、すべての情報配布媒体が含まれる。用語「変調されたデータ信号」は、信号内で情報をエンコードする形でその特性の１つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せも、コンピュータ可読媒体の範囲に含まれなければならない。
【００２９】
システムメモリ１３０に、読取専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性メモリおよび／または不揮発性メモリの形のコンピュータストレージ媒体が含まれる。スタートアップ中などにコンピュータ１１０内の要素の間での情報の転送を助ける基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）が、通常はＲＯＭ  １３１に保管される。ＲＡＭ  １３２には、通常は、処理ユニット１２０から即座にアクセス可能、かつ／または処理ユニット１２０によって現在操作中のデータおよび／またはプログラムモジュールが含まれる。制限ではなく例として、図１に、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００３０】
コンピューティングデバイス１００に、他の取外し可能／取外し不能、揮発性／不揮発性のコンピュータストレージ媒体も含めることができる。例のみとして、図１に、取外し不能不揮発性磁気媒体から読み取るかこれに書き込むハードディスクドライブ１４１、取外し可能不揮発性磁気ディスク１５２から読み取るかこれに書き込む磁気ディスクドライブ１５１、ＣＤ−ＲＯＭまたは他の光媒体などの取外し可能不揮発性光ディスク１５６から読み取るかこれに書き込む光ディスクドライブ１５５を示す。例示的なオペレーティング環境で使用できる他の取外し可能／取外し不能、揮発性／不揮発性のコンピュータストレージ媒体に、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ、および類似物が含まれるが、これに制限はされない。ハードディスクドライブ１４１は、通常は、インターフェース１４０などの取外し不能メモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インターフェース１５０などの取外し可能メモリインターフェースによってシステムバス１２１に接続される。
【００３１】
上で述べ、図１に示したドライブおよびそれに関連するコンピュータストレージ媒体は、コンピューティングデバイス１００のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータのストレージを提供する。図１では、例えば、ハードドライブ１４１が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を保管する物として図示されている。これらのコンポーネントを、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同一のまたは異なる物のいずれかとすることができることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７は、最低限でも異なるコピーであることを示すために、異なる符号を与えられている。
【００３２】
ユーザは、キーボード１６２および、一般にマウス、トラックボール、またはタッチパッドと称するポインティングデバイス１６１などの入力デバイスを介してコンピューティングデバイス１００にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）に、マクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナ、または類似物を含めることができる。上記および他の入力デバイスは、システムバスに結合されたユーザ入力インターフェース１６０を介して処理ユニット１２０に接続することができ、あるいは、パラレルポート、ゲームポート、またはｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することができる。モニタ１９１または他のタイプのディスプレイデバイスも、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続される。モニタのほかに、コンピュータに、スピーカ１９７およびプリンタ１９６など、出力周辺インターフェース１９５を介して接続できる他の周辺出力デバイスも含めることができる。
【００３３】
インターフェーステクノロジーは、経時的に改善され得るので、一部のコンピューティングデバイスに、レガシデバイスとの後方互換性を提供するためにレガシインターフェースを含めることができる。図１のコンピューティングデバイス１００は、レガシインターフェース１９８を有して図示され、このレガシインターフェース１９８は、シリアルポート、パラレルポート、モデムポート、または類似物を含む複数のインターフェースのいずれかとすることができる。レガシインターフェース１９８は、プリンタ、スキャナ、オシロスコープ、ファンクションジェネレータ、または他のタイプの入力デバイスもしくは出力デバイスとすることができるレガシデバイス１９９などのレガシデバイスとコンピューティングデバイス１００が通信できるようにすることができる。当業者に既知のように、ほとんどの現代の入出力デバイスは、ＵＳＢポートまたはＩＥＥＥ  １３９４ポートなどの新たに開発された標準規格に頼るインターフェースを介してインターフェースする。しかしながら、レガシデバイスは、そのようなインターフェースを有しない可能性が高く、したがって、コンピューティングデバイス１００と通信するためにレガシインターフェースに頼らなければならない。
【００３４】
コンピューティングデバイス１００は、１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク化された環境で動作することができる。図１に、リモートコンピューティングデバイス１８０への一般的なネットワーク接続１７１を示す。一般的なネットワーク接続１７１は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、無線ネットワーク、イーサネット（登録商標）プロトコルに準拠するネットワーク、トークンリングプロトコルに準拠するネットワーク、あるいは、インターネットまたはワールドワイドウェブを含む他の論理ネットワーク、物理ネットワーク、または無線ネットワークを含む、様々な異なるタイプのネットワークおよびネットワーク接続のいずれかとすることができる。
【００３５】
ネットワーキング環境で使用される場合に、コンピューティングデバイス１００は、ネットワークインターフェースまたはネットワークアダプタ１７０を介して一般的なネットワーク接続１７１に接続され、ネットワークアダプタ１７０は、有線または無線のネットワークインターフェースカード、モデム、または類似するネットワーキングデバイスとすることができる。ネットワーク化された環境では、コンピューティングデバイス１００に関して示されたプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに保管することができる。図示のネットワーク接続が、例示的であり、コンピュータ間の通信リンクを確立する他の手段を使用できることを諒解されたい。
【００３６】
以下の説明では、本発明を、他の形で示されない限り、１つまたは複数のコンピューティングデバイスによって実行される行為および動作（オペレーション）の記号表現に関して説明する。したがって、そのような行為および動作は、時々“コンピュータの実行”と呼ばれるが、これに、構造化された形態のデータを表す電気信号のコンピューティングデバイスの処理ユニットによる操作が含まれることが理解されるであろう。この操作は、コンピューティングデバイスのメモリシステム内の位置でデータを変換するかこれを維持し、これによって、当業者に明瞭に理解される形でコンピューティングデバイスの動作が再構成されまたは他の形で変更される。データが維持されるデータ構造は、データのフォーマットによって定義される特定の特性を有する、メモリの物理的位置である。しかしながら、本発明を、前述の文脈で説明しているが、下で説明する様々な行為および動作をハードウェアでも実施できることを当業者が諒解するので、これは制限的であることを意図された物ではない。
【００３７】
図２に移ると、本発明の実施形態によって企図される、エクステンションをホストソフトウェアアプリケーションから隔離する１つのメカニズムが示されている。図２からわかるように、ホストプロセス２０１は、エクステンション２１５自体ではなく、プロキシ２０５を呼び出すことができる。エクステンション２１５は、ホストプロセス２０１と別個の仮想プロセス２１１でホスティングされることができる。仮想プロセス２１１は、少なくとも、ホストソフトウェアアプリケーションが提供できるサポートＡＰＩ  ２０３に類似する仮想サポートＡＰＩ  ２１３を提供できる範囲まで、ホストプロセス２０１のエミュレートを試みる。したがって、仮想プロセス２１１で動作するエクステンション２１５は、オリジナルのサポートＡＰＩ  ２０３を使用するのと同一の形で仮想サポートＡＰＩ  ２１３を使用することができる。
【００３８】
本発明の実施形態によって企図されるプロキシ２０５の１つの設計は、少なくともプロキシ２０５がエクステンション２１５によって提供されるサービスＡＰＩに類似するサービスＡＰＩを提供できる範囲まで、エクステンション２１５をエミュレートすることとすることができる。ホストプロセス２０１は、プロキシ２０５によって提供されるＡＰＩを使用して、エクステンション２１５自体によって提供されるサービスＡＰＩを使用するのと同一の形で、エクステンションの機能性にアクセスすることができる。しかしながら、図２に示すように、プロキシ２０５が、そのようなサービスＡＰＩを使用して、ホストプロセス２０１から要求を受け取る場合に、プロキシ２０５は、ホストから関連する情報を収集し、その情報を、仮想プロセス２１１内で実行中のエクステンション２１５に転送することができる。
【００３９】
本発明の実施形態によって企図されるプロキシ２０５のもう１つの設計は、ホストプロセス２０１とインターフェースし、ホストプロセスのある機能を変換またはインターセプトし、エクステンション２１５を使用して、ホストプロセス２０１の機能性を拡張することができる。例えば、エクステンション２１５は、普通でないファイルシステムフォーマットまたはレガシファイルシステムフォーマットを使用するファイルストレージなどの特定のタイプのファイルストレージへのアクセスを提供することができる。その場合に、ホストプロセス２０１内のファイルアクセス命令を検出し、これらの命令をインターセプトするように、プロキシ２０５を設計することができる。プロキシ２０５は、その後、適当な情報をエクステンション２１５に転送することができ、このエクステンション２１５は、レガシファイルシステムフォーマットを使用して、ファイルストレージ内のファイルにアクセスすることができる。その後、情報を、エクステンション２１５からプロキシ２０５に返すことができ、プロキシ２０５は、その情報をホストプロセス２０１に提示することができる。その形で、プロキシ２０５は、ホストプロセス２０１がレガシファイルシステムフォーマットで保存されたデータにアクセスすることを可能にすることによるなど、ホストプロセスがそのような拡張された機能性を使用可能にするように設計されていない場合であっても、ホストプロセス２０１の機能性を拡張することができる。したがって、プロキシ２０５は、ホストプロセス２０１とインターフェースするように設計された先在するエクステンションに基づく必要があるのではなく、ホストプロセスとエクステンションの間のくさび（ｓｈｉｍ）として働くように設計することができる。
【００４０】
プロキシ２０５が、先在するエクステンションをエミュレートするように設計されるか、エクステンションのくさびとして働くように設計されるかにかかわらずに、プロキシ２０５は、エクステンションがホストプロセス２０１のために作業を実行するために、適当な情報をエクステンション２１５に転送することができる。本発明の実施形態によって企図される、プロキシ２０５からエクステンション２１５に情報を転送する方法の１つは、プロキシ２０５がエクステンション２１５と直接に通信することを必要とする。その場合に、プロキシ２０５自体が、エクステンション２１５の適当なサービスＡＰＩを呼び出す。本発明の実施形態によって企図される、要求を転送する代替の方法は、プロキシ２０５が仮想プロセス２１１内で実行されるスタブ２１７と通信することを必要とする。次に、スタブ２１７が、エクステンション２１５の適当なサービスＡＰＩを呼び出すことができる。当業者に既知のように、一部のエクステンションは、プロセス間通信を介して受け取られた要求を正しく処理しない場合がある。そのような問題を避けるために、スタブ２１７などの、仮想プロセス２１１内のスタブを使用して、エクステンション２１５が、プロセス間通信ではなくプロセス内通信を介してそのサービスＡＰＩを介して要求を受け取れるようにするメカニズムを提供することができる。
【００４１】
エクステンション２１５は、ホストプロセス２０１から要求を受け取ったならば、要求に応答することに進行することができる。要求の性質に応じて、エクステンション２１５は、通常はサポートＡＰＩ  ２０３を介してホストプロセス２０１によって提供されるが、ここでは仮想サポートＡＰＩ  ２１３を介して仮想プロセス２１１によって提供できる１つまたは複数の機能にアクセスすることができる。下で詳細に説明するように、ホストの要求の性質に応じて、エクステンション２１５は、コンピューティングシステム１００のリソースに直接にアクセスするか、コンピューティングシステムに接続されたハードウェアデバイスに間接的な形でアクセスする必要がある場合がある。その場合に、エクステンション２１５がそのようなリソースにアクセスすることを許可しながら、エクステンション２１５をホストプロセス２０１から隔離する備えを設けることができる。
【００４２】
意図された隔離を達成するためには、ホストプロセス２０１と仮想プロセス２１１など、２つの別々のプロセスを有することだけでは不十分な場合がある。したがって、本発明の実施形態では、エクステンション２１５からの不正な応答を防ぐか、エクステンションの側での不正な挙動がホストプロセス２０１に影響しなくなるようにプロキシ２０５を設計できることが企図されている。例えば、本発明の実施形態によって企図される１つのメカニズムでは、エクステンション２１５によって提示されるサービスＡＰＩを厳格に固守するようにプロキシ２０５を設計することができる。したがって、エクステンション２１５が、ホストが期待する形態または型でないデータをホストプロセス２０１に返そうとする場合に、プロキシ２０５は、潜在的な問題を識別し、そのデータをホストプロセスに渡さないようにすることができる。
【００４３】
本発明の実施形態によって企図されるもう１つのメカニズムでは、プロキシ２０５が、返されるデータにさらなるインテリジェンスを適用して、ホストプロセス２０１に不安定性が導入されないようにすることができる。例えば、エクステンション２１５が、致命的エラーおよび障害をこうむる場合に、プロキシ２０５は、タイムアウトカウンタまたは類似するメカニズムを維持して、エクステンションの障害を検出でき、エラー応答を提供するか他の形でホストプロセス２０１にそのエラーについて知らせ、例えばユーザの作業の成果を失わずに、ホストプロセスにグレースフルデグラデーション（ｇｒａｃｅｆｕｌ  ｄｅｇｒａｄａｔｉｏｎ）を行わせることができる。プロキシ２０５は、ホストプロセス２０１がエクステンション２１５に与えた可能性があるすべての制御も返して、エクステンションの障害がホストプロセスの実行を妨げないようにすることができる。例えば、プロキシ２０５は、基礎になるオペレーティングシステムが仮想プロセス２１１を終了させ、制御をホストプロセス２０１に返すことを要求することができる。その代わりに、プロキシ２０５が、仮想プロセス２１１の一部である専用コードを使用して、障害が明らかに発生したことを仮想プロセスに知らせ、仮想プロセスが終了し、ホストプロセス２０１に制御を返すことを要求することができる。
【００４４】
しかしながら、エクステンション２１５が、それに要求された仕事のすべてを正しく完了する場合に、エクステンション２１５は、サービスＡＰＩによって指定される形で、ホストプロセス２０１によって期待される可能性があるすべての結果を返すことができる。したがって、例えば、結果が、要求が成功したことの表示であり、呼び出し元プログラムに返される事前定義の変数で渡される場合に、エクステンション２１５は、この変数をスタブ２１７に渡すか、プロキシ２０５に直接に渡すことができる。そこから、この変数を、プロキシ２０５による呼び出しを最初に行ったホストプロセスに返すことができる。そのような形で、プロキシ２０５は、少なくともホストプロセス２０１に関する限り、エクステンション２１５から区別不能になることができる。もちろん、当業者に既知のように、一部のエクステンションは、結果を返す必要がない場合があり、その場合には、返される値を受け入れる備えを実装する必要はない。
【００４５】
図２からわかるように、エクステンション２１５は、仮想プロセス２１１内で動作する。その結果、エクステンション２１５のアクションが不安定性を引き起こす場合に、その不安定性は、仮想プロセス２１１の内部に含まれる可能性が高い。その場合に、オペレーティングシステムまたはプロキシ２０５などの他のコードは、仮想プロセス２１１内のエラーを検出でき、それを終了させるか、再起動を試みることができる。どちらの場合でも、不安定性は、ホストプロセス２０１に影響する可能性が低く、したがって、ユーザに有害な障害をもたらさない。したがって、上述のメカニズムは、ホストプロセスによって使用されるエクステンション２１５が障害を発生するか、他の形で不安定になった場合であっても、ホストプロセス２０１が正しく動作し続けることを可能にする。
【００４６】
上で詳細に説明したように、プロキシ２０５は、ホストプロセス内で動作している場合のエクステンション２１５と同一の形で、ホストプロセス２０１にサービスＡＰＩを提示することができる。本発明の実施形態によって企図される１つのメカニズムで、プロキシ２０５を、エクステンション２１５によって実装される事前定義のサービスＡＰＩに基づいて作成することができる。当業者に既知のように、エクステンションおよびホストソフトウェアアプリケーションがそれを介してインターオペレートできるサービスＡＰＩは、一般に、前もって既知である。というのは、ソフトウェアアプリケーション作成者およびエクステンション作成者が、しばしば異なる実体であるからである。エクステンションがインストールされる場合に、そのエクステンションは、ホストアプリケーションまたは、登録データベース２２１などの適当な情報ストアにそれ自体を登録し、それがサポートするサービスＡＰＩを示すことができる。この情報を使用して、ホストソフトウェアアプリケーションまたは基礎になるオペレーティングシステムは、ホストソフトウェアアプリケーションがそのサービスＡＰＩの１つの使用を試みる場合に、適当なエクステンションを突き止めることができる。この情報を使用して、プロキシ２０５を作成することもできる。というのは、この情報が、そのエクステンション２１５によってサポートされるサービスＡＰＩの完全なセットを示すからである。プロキシ２０５の作成によって、下で詳細に説明する形で、例えば登録データベース２２１内のエントリを変更することもできる。
【００４７】
本発明の実施形態によって企図されるもう１つのメカニズムが、事前定義のサービスＡＰＩのセット全体に基づいて要求を受け入れることができる「スーパープロキシ」の作成である。そのようなスーパープロキシは、ホストアプリケーションが使用しようとする特定のサービスＡＰＩと無関係に呼び出すことができる。その場合に、エクステンション２１５がインストール時に実行できる登録に、スーパープロキシまたは基礎になるサポートアーキテクチャへの登録を含めることができ、その結果、スーパープロキシは、特定のサービスＡＰＩがホストソフトウェアアプリケーションによって使用される場合に正しいエクステンション２１５を呼び出せるようになる。
【００４８】
本発明の実施形態によって企図されるもう１つのメカニズムは、プロキシがホストプロセス２０１に提供しようとする拡張された機能性に基づいてプロキシ２０５を作成できることである。したがって、プロキシ２０５を作成して、ホストプロセス２０１によって使用されるかホストプロセス２０１内にある１つまたは複数の機能を検出し、インターセプトし、または他の形でインターフェースし、その結果、プロキシが、エクステンション２１５の機能性の利益をホストプロセスに提供できるようになる。上で説明した例を使用すると、プロキシ２０５が、ホストプロセス２０１がエクステンション２１５を介してレガシファイルシステムにアクセスすることを可能にするように設計される場合に、そのプロキシを、ホストプロセスによって使用されるファイルアクセス機能および類似する機能を検出し、インターセプトするように設計することができる。プロキシ２０５を、さらに、これらのファイルアクセス機能からエクステンション２１５に関連情報を転送するように設計することができ、その結果、そのエクステンションが、レガシファイルシステムとインターフェースできるようになる。同様に、エクステンション２１５から応答を受け入れ、この応答を、ホストプロセスのインターセプトされたファイルアクセス機能に関連する適当な応答としてホストプロセス２０１によって認識されるフォーマットに変換するようにプロキシ２０５を設計することができる。
【００４９】
いくつかの場合に、仮想サポートＡＰＩ  ２１３を変更して、サポートＡＰＩ  ２０３をより正確に反映することが望ましい場合がある。例えば、仮想サポートＡＰＩ  ２１３は、プロセスの識別子について問い合わされた場合に、仮想プロセス２１１の識別子を返すことができる。しかしながら、仮想サポートＡＰＩ  ２１３が、ホストプロセス２０１の識別子を返すことが望ましい場合がある。その場合に、「バックチャネル」通信または「サイドチャネル」通信を使用して、仮想サポートＡＰＩ  ２１３が、ホストプロセス２０１からの情報にアクセスできるようにすることができる。
【００５０】
要求された特定のエクステンションに関して正しいプロキシが呼び出されることを保証するために、登録データベースまたは類似する情報ストアを使用して、プロキシ２０５をエクステンション２１５にリンクすることができる。上述したように、登録データベース２２１または類似する情報ストアに、ホストプロセス２０１またはオペレーティングシステムによって問い合わせて、エクステンション２１５を呼び出すパラメータを判定することができる。しかしながら、エクステンション２１５自体を識別するのではなく、登録データベース２２１が、その代わりにプロキシ２０５をポイントすることができる。
【００５１】
ホストプロセス２０１が、プロキシ２０５を呼び出したならば、そのプロキシ２０５は、進行して、仮想プロセス２１１内のエクステンション２１５を呼び出すか、他の形でその呼び出しを調整することができる。下で詳細に説明するように、仮想プロセス２１１は、既に動作している場合があり、あるいは、用意の様々な状態である場合がある。仮想プロセス２１１が、まだ動作していない場合には、プロキシ２０５は、仮想プロセス２１１が動作状態に達するのに必要なすべてのステップの完了を調整することができる。仮想プロセス２１１が動作状態になったならば、プロキシ２０５は、エクステンション２１５を呼び出すようにその仮想プロセス２１１に指示することができる。例えば、プロキシ２０５は、エクステンション２１５の位置へのポインタを提供することができ、ホストプロセス２０１によって使用される物と同一のまたは類似するパラメータを渡すことができる。さらに、エクステンション２１５が、バックチャネル通信またはサイドチャネル通信を使用すると判定された場合に、そのエクステンションが使用する追加リソースも、仮想プロセス２１１内で呼び出すことができる。
【００５２】
仮想プロセス２１１がエクステンション２１５およびそのエクステンションによって使用される他のコードを呼び出したならば、プロキシ２０５は、必要な場合にスタブ２１７の呼び出しを調整することができる。その代わりに、プロキシ２０５は、エクステンション２１５との通信リンクを直接に確立することができる。スタブ２１７が使用される場合に、プロキシ２０５は、スタブ２１７の位置およびそのスタブの呼び出しに使用されるパラメータを仮想プロセス２１１に供給することができる。スタブ２１７が呼び出されたならば、そのスタブ自体が、エクステンション２１５との通信リンクならびにプロキシ２０５との通信リンクを確立することができる。プロキシ２０５とスタブ２１７またはエクステンション２１５との間の通信は、例えば既知のリモートプロシージャ呼び出し（ＲＰＣ）メカニズムを含む、任意のタイプのプロセス間通信プロトコルまたはプロセス内通信プロトコルを使用することができる。使用される通信プロトコルが、前もって決定される可能性が高いが、ハンドシェーク手順を実施して、プロキシ２０５およびスタブ２１７またはエクステンション２１５が、適当に通信できることを保証することができる。
【００５３】
一部のエクステンションは、ホストプロセスによって要求された機能を実行するのにユーザモードコンテキストに頼る場合があるので、仮想環境内のエクステンションにユーザモードコンテキストを提供できるようにするメカニズムを提供する必要がある場合がある。ユーザモードコンテキストは、一般に、メモリ、ファイル、レジストリエントリ、および類似物を含むプロセスのリソースの全体的な状態を指し、所与のユーザモードコンテキスト内での特定のリソース参照が正確であるが、これと同一の参照が、その特定のユーザモードコンテキストの外部で渡されル場合に、不正なメモリ位置を参照するか他の形で不正確になるようになっている。大量のデータを受け入れるか返す可能性があるエクステンションについて、しばしば、データ自体を送り、受け取るよりも、共通のユーザモードコンテキストを前提に、メモリ参照を送り、受け取ることが効率的である。したがって、そのようなデータパッシングスキームを使用するエクステンションが正しく動作しなければならない場合に、仮想プロセス２１１とホストプロセス２０１の間での共通ユーザモードコンテキストの維持が必要になる場合がある。
【００５４】
図３に移ると、ホストプロセス２０１が、上で詳細に説明した形で呼び出され、２つのエクステンションすなわちエクステンション２１５およびエクステンション３１５が、それぞれ仮想プロセス２１１および仮想プロセス３１１の内部で実行されている。プロキシ２０５は、上で詳細に説明したスーパープロキシとすることができ、エクステンション２１５またはエクステンション３１５のいずれかにホストプロセス２０１からの要求を向けることができる。その代わりに、エクステンション２１５またはエクステンション３１５のそれぞれがホストプロセス２０１内で１つのプロキシとの１対１関係を有することができるように、図３に示されていない第２のプロキシを使用することができる。
【００５５】
オペレーティングシステム１３４も、図３に示されており、これには、ホストプロセスメモリ３０１ならびに仮想プロセスメモリ３０２および３０３が含まれ、これらのメモリは、それぞれホストプロセス２０１、仮想プロセス２１１、および仮想プロセス３１１に対応する。図３および４に示されたメカニズムは、ホストプロセス２０１ならびに仮想プロセス２１１および３１１の基礎になる共通のオペレーティングシステムに頼ることができるが、下で詳細に説明する追加メカニズムは、仮想プロセスがホストプロセスの基礎になるオペレーティングシステム１３４と独立に実行されている場合であっても、ホストプロセスと仮想プロセスの間の共通のユーザモードを提供することもできる。ホストプロセス２０１ならびに仮想プロセス２１１および３１１が、図３に示されているように共通のオペレーティングシステム１３４を共有する場合に、そのオペレーティングシステムに、ホストプロセスメモリ３０１ならびに仮想プロセスメモリ３０２および３０３を物理ＲＡＭ  １３２のセグメントにマッピングするページテーブルマッピング３２０の集合も含めることができる。図３には、それぞれホストプロセスメモリ３０１ならびに仮想プロセスメモリ３０２および３０３に対応するセグメント３２１、３２２、および３２３が示されているが、セグメント３２１、３２２、および３２３が例示にすぎず、ＲＡＭの物理セグメントが散乱し、図示の形のように連続してはいない可能性が高いことを、当業者は理解するであろう。
【００５６】
ホストプロセス２０１ならびに仮想プロセス２１１および３１１の間で共通のユーザモードコンテキストを維持するために、オペレーティングシステム１３４または他のサポートソフトウェアは、ホストプロセス２０１のユーザモードコンテキストを含むリソースの一部またはすべてへのアクセスを仮想プロセス２１１および３１１に提供することができる。次の説明では、ユーザモードコンテキストのメモリリソース態様への共通のアクセスを提供するメカニズムに焦点を合わせるが、当業者は、レジストリリソース、ファイルリソース、および類似物を含むユーザモードコンテキストを含めることができる他のリソースへのこれらのメカニズムの適用可能性を諒解するであろう。
【００５７】
本発明の実施形態によって企図されるユーザモードコンテキストのメモリリソース態様への共通アクセスを提供する１つのメカニズムで、オペレーティングシステム１３４または類似するサポートソフトウェアは、ホストプロセスメモリ３０１を仮想プロセスメモリ３０２および３０３にコピーすることができる。図３からわかるように、仮想プロセスメモリ３０２および３０３へのホストプロセスメモリ３０１のコピーは、新しいＲＡＭセグメント３２２および３２３へのＲＡＭセグメント３２１の物理的コピーを伴う物とすることができる。その代わりに、入出力マネージャが、ホストプロセスメモリ３０１をシステムメモリの常駐するページングされないプールにコピーすることができ、仮想プロセス２１１または３１１にそのページングされないプールへのアクセスを提供することができる。
【００５８】
エクステンション２１５または３１５が、そのタスクを完了したならば、仮想プロセスメモリ３０２および３０３を、ホストプロセスメモリ３０１にマージすることができる。例えば、プロキシ２０５は、位置３２２および３２３の仮想プロセスメモリと位置３２１のホストプロセスメモリとの間で、バイト単位比較またはよりマクロレベルの比較などの異なる機能を実行して、相違を判定することができる。この相違は、正しく、エクステンション２１５または３１５の期待される挙動に他の形で従う物として検証することができ、ホストプロセスメモリ３０１にコピーバックするか、プロキシ２０５を介してホストプロセス２０１に他の形で使用可能にすることができる。その代わりに、入出力マネージャが、ホストプロセスメモリ３０１をシステムメモリの常駐するページングされないプールにコピーしただけの場合に、その入出力マネージャは、ページングされないプールをホストプロセスメモリにコピーすることができる。一般に、そのようなコピーは、要求ごとの基礎で行われる。したがって、ホストプロセスメモリ３０１全体をコピーするのではなく、本発明の実施形態によって企図される、より効率的なメカニズムは、オペレーティングシステム１３４または他のサポートソフトウェアが、要求されたタスクを実行するためにエクステンション２１５または３１５によって必要とされるホストプロセスメモリ３０１のバッファだけをコピーすることを必要とする。オペレーティングシステム１３４の入出力マネージャによって実行される場合に、システムメモリのページングされないプールへのそのようなバッファ固有のコピーを、「Ｂｕｆｆｅｒｅｄ  Ｉ／Ｏ」または「Ｉ／Ｏ  Ｍｅｔｈｏｄ  Ｂｕｆｆｅｒｅｄ」と称する。
【００５９】
図４に移ると、本発明の実施形態によって企図される、ユーザモードコンテキストのメモリリソース態様への共通アクセスを提供する代替のメカニズムが示されている。具体的に言うと、図４からわかるように、ホストプロセスメモリ３０１の一部またはすべてをコピーするのではなく、オペレーティングシステム１３４によって維持されるページテーブルマッピング３２０を変更して、仮想プロセスメモリ３０２および３０３を、ＲＡＭ  １３２内でホストプロセスメモリ３０１を表すデータが保管される物理的位置３２１に向けることができる。データをコピーする必要がなくなるので、図４に示されたメカニズムは、図３に示されたメカニズムより効率的になる可能性がある。
【００６０】
しかしながら、エクステンション２１５および３１５が、ホストプロセスメモリ３０１を含む物理セグメント３２１に影響することができる場合に、エクステンションの側でのエラーまたは不安定性が、ホストプロセス２０１自体のエラーまたは不安定性をもたらす可能性がある。したがって、この可能性を最小にするために、ページテーブルマッピングを「読取専用」の形に変更し、その結果、仮想プロセス２１１および３１１が、読み取るために物理メモリ３２１をポイントすることができるが、これを変更できなくすることができる。したがって、仮想プロセス２１１および３１１で動作するエクステンションの側でのエラーまたは不安定性は、仮想プロセスがホストプロセスのメモリを変更することを許可されないので、ホストプロセス２０１にエラーまたは不安定性を導入することができない。
【００６１】
上で示したように、図４のメカニズムによって企図されるページテーブルマッピング３２０への変更は、要求ごとの基礎で行うことができる。しかしながら、１つの仮想プロセスだけが存在する場合には、ページテーブルマッピング３２０は、ユーザモードコンテキストを必要としない要求についても、ＲＡＭ  １３２の物理セグメント３２１をポイントし続けることができる。上述のページテーブルマッピングの変更を、一般に、「Ｎｅｉｔｈｅｒ  Ｂｕｆｆｅｒｅｄ  Ｎｏｒ  Ｄｉｒｅｃｔ  Ｉ／Ｏ」または「Ｉ／Ｏ  Ｍｅｔｈｏｄ  Ｎｅｉｔｈｅｒ」と称する。
【００６２】
本発明の実施形態によって企図されるユーザモードコンテキストのメモリ態様への共通アクセスを提供するさらなる代替のメカニズムは、図３および図４に示された代替案の混成物とすることができる。具体的に言うと、仮想プロセス２１１および３１１に、上で詳細に説明したように物理メモリ３２１への読取専用アクセスを与えることができる。しかしながら、エクステンション２１５またはエクステンション３１５が、メモリにデータを書き戻す必要がある場合に、「コピーオンライト」を実行することができる。当業者に既知のように、コピーオンライトは、データへの変更の書き込みに先立って、変更されるデータを新しい位置にコピーすることができる。したがって、エクステンション２１５またはエクステンション３１５が、メモリ３２１にデータを書き戻す必要がある場合に、メモリ３２１の一部またはすべてを、図３に示された３２２または３２３などの新しい位置にコピーすることができ、エクステンション２１５またはエクステンション３１５は、その後、メモリ３２２または３２３のコピーされたデータを変更することができる。その形で、仮想プロセスがホストプロセスのメモリを変更することを許可されないので、仮想プロセス２１１および３１１で動作するエクステンションによって導入されるエラーまたは不安定性のすべてが、ホストプロセス２０１に影響しない。
【００６３】
プロキシ２０５は、上で説明したコピーオンライトメカニズムを使用することによって、エクステンション２１５またはエクステンション３１５によって編集された可能性があるメモリのセグメントを追跡することができる。これらのメモリセグメントにアクセスする場合に、プロキシは、位置３２１の代わりに、位置３２２または３２３を適当に参照することができる。位置３２２または３２３に保管されたデータが、エクステンション２１５または３１５の期待される挙動に従う場合に、プロキシ２０５は、そのデータをホストプロセスメモリ３０１にコピーすることによって、あるいは位置３２２または３２３をホストプロセスに渡すことによってなど、そのデータをホストプロセス２０１内で使用できるようにすることができる。したがって、上で説明した隔離を、プロキシ２０５が変更されたデータにアクセスできるようにしながら達成することができる。
【００６４】
上で説明したように、図２の仮想プロセス２１１などの、エクステンションをホスティングできる仮想プロセスの初期化は、プロキシがエクステンション２１５の代わりにホストプロセス２０１によって呼び出された後に、プロキシ２０５によって調整することができる。本発明の実施形態によって企図される仮想プロセスの１つのタイプが、ホストプロセスと同一のオペレーティングシステム１３４で実行されるホストプロセス２０１のコピーである。そのような仮想プロセスは、ホストプロセスをフォークし、クローン作成されたプロセスを仮想プロセスとして使用することによって作成することができる。その代わりに、オペレーティングシステムに、どれであれ、ホストプロセス２０１を作成するために最初に呼び出されたソフトウェアアプリケーションをもう一度起動するように指示することができる。したがって、例えば、ホストプロセス２０１がウェブブラウザである場合に、仮想プロセス２１１は、そのウェブブラウザアプリケーションをもう一度起動して別々のプロセスを作成することによって、または現在動作しているウェブブラウザプロセスをフォークすることによって、作成することができる。
【００６５】
本発明の実施形態によって企図される仮想プロセスのもう１つのタイプは、仮想マシン環境のコンテキスト内で作成することができる。エクステンション２１５が、デバイスドライバまたはオペレーティングシステムによって使用される他のエクステンションである場合に、仮想マシンは、最適の解決策を提供することができる。フォークまたは再実行によるなど、オペレーティングシステムを使用してそれ自体のもう１つのコピーを作成して仮想プロセスとして働かせることが可能である場合があるが、より優雅な解決策は、仮想マシンを起動し、仮想マシンの環境内でオペレーティングシステムをブートして、１つまたは複数のエクステンションをホスティングする仮想プロセスとして働かせることである。そのようなメカニズムは、よりよい隔離を提供する可能性が高く、あるオペレーティングシステムが、異なるオペレーティングシステム用に設計されたエクステンションを使用することを可能にすることができる。例えば、オペレーティングシステムの新しいバージョンのために更新されていない可能性があるレガシドライバを、仮想マシン環境内で動作するオペレーティングシステムの旧バージョン内でホスティングすることができる。そのような形で、エクステンションの特徴および能力を、新しいオペレーティングシステムのユーザから使用可能にすると同時に、レガシエクステンションによって引き起こされる可能性がある不安定性から新しいオペレーティングシステムを遮蔽することができる。仮想マシンを使用することによって、または上で説明したフォークもしくは再実行を実行することによって、仮想プロセス２１１は、個別の基礎でサポート関数を考慮する必要なしに、ホストプロセス２０１と同等のサポートＡＰＩを提供することができる。
【００６６】
基礎になるオペレーティングシステム１３４からサポートを受ける仮想プロセス２１１および３１１と異なって、仮想マシンは、当業者に既知のように、一般に、この形ではオペレーティングシステムを利用しない。そうではなく、各仮想マシン命令をフルオペレーティングシステムを介して渡させることの性能ペナルティを回避するために、仮想マシンは、その代わりに、限られたオペレーティングシステム機能性を提供でき、オペレーティングシステムが仮想マシン環境内でそれに関して動作するコンピューティングデバイスの基礎になるハードウェアを抽象化できるハイパーバイザだけに頼ることができる。そのようなハイパーバイザを使用することによって、仮想マシンが、はるかに効率的に動作することができる。しかしながら、ハイパーバイザを使用することの結果として、仮想マシンプロセスをコンピューティングデバイスのプロセッサで実行できる前に、コンピューティングデバイスのオペレーティングシステムを除去でき、そのオペレーティングシステムの基礎を保管することができる。その後、仮想マシンプロセスがタスクを完了した場合に、その仮想マシンプロセスは、ハードウェアからその基礎を除去することができ、オリジナルオペレーティングシステムを復元することができる。コンピューティングデバイスのオペレーティングシステムと仮想マシンプロセスの間でのそのようなハードウェア使用の交換は、１秒に何回も行うことができる。したがって、ユーザが、オペレーティングシステムを使用する単にもう１つのアプリケーションとして仮想マシンを知覚することができるが、仮想マシンプロセスは、一般に、コンピューティングデバイスハードウェアをオペレーティングシステムとタイムシェアするのみである。
【００６７】
上で説明した交換を達成するために、仮想マシンに、コンピューティングデバイスのオペレーティングシステムによって呼び出すことができる仮想マシンデバイスドライバまたは類似するエクステンションを含めることができる。仮想マシンデバイスドライバは、コンピューティングデバイスハードウェアからオペレーティングシステムの基礎を除去し、そのオペレーティングシステムが実行再開を許可される時までその基礎をキャッシングするのに必要な命令を提供することができる。さらに、仮想マシンデバイスドライバは、仮想マシンプロセスの呼び出しを調整することができる。例えば、オペレーティングシステムは、実行中に、仮想マシンプロセスにタスクを実行させるユーザコマンドを受け取ることができる。オペレーティングシステムは、仮想マシンプロセスに要求されたタスクを実行させ、効率的な形でオペレーティングシステムに制御を返させるコマンドを仮想マシンデバイスドライバに発行することができる。したがって、オペレーティングシステムは、そのオペレーティングシステムによって現在調整されている他のスレッドに制御を渡すように、仮想マシンプロセスに制御を渡すことを扱うことができる。仮想マシンデバイスドライバは、そのようなコマンドを受け取る時に、コンピューティングデバイスハードウェアからオペレーティングシステムの基礎を除去し、ハイパーバイザがその基礎をインストールできるようにし、コマンドを仮想マシンプロセスに渡す。その後、仮想マシンプロセスが完了した場合に、仮想マシンデバイスドライバは、オペレーティングシステムの基礎を再インストールし、コンピューティングデバイスハードウェアで実行を再開できるようにすることができる。
【００６８】
上で詳細に説明したように、プロキシ２０５は、仮想プロセス２１１内の障害を検出することができ、その障害がホストプロセス２０１に不安定性を導入しないようにすることを試みることができる。しかしながら、仮想プロセス２１１が、仮想マシンによって作成された環境内で動作する仮想オペレーティングシステムプロセスである場合に、プロキシ２０５が、そのような仮想オペレーティングシステムプロセスを検出しまたは制御することが困難である場合がある。というのは、プロキシ２０５が頼ることのできるオペレーティングシステムが、コンピューティングデバイスハードウェアで実行されているのではなく、保管され、仮想マシンがその実行を完了するのを待っているからである。その結果、本発明の実施形態によって企図される、エラーを隔離するメカニズムの１つは、ハイパーバイザが、仮想マシンによって作成された環境内で実行されるソフトウェアを監視し、その環境内の障害を検出することを必要とする。障害が検出された場合に、ハイパーバイザは、実行を停止し、オペレーティングシステムの基礎を再インストールし、そのオペレーティングシステムにコンピューティングデバイスハードウェアでの実行を再開させることができる。ハイパーバイザは、オペレーティングシステムまたは仮想環境内でエクステンションに頼っていた他のソフトウェアがグレースフルデグラデーションを実行できるようにするために、適当な応答を提供することもできる。
【００６９】
さらに、オペレーティングシステムは、一般に、ハイパーバイザによって許可されるまで実行を再開できないので、ハイパーバイザは、タイマまたは類似するメカニズムも維持して、仮想マシン環境の障害が、オペレーティングシステムに制御を返すことを妨げないことを保証することができる。タイマメカニズムを使用して、上述した形で障害を検出することができるが、仮想マシンが、１つまたは複数のエクステンションをホスティングする環境の作成に使用される場合に、タイマメカニズムは、さらなる重要性を有する可能性がある。というのは、仮想マシン環境内で障害が発生した場合に、制御をオペレーティングシステムに返すことができる他のメカニズムが存在しない可能性があるからである。
【００７０】
その代わりに、タイマメカニズムなどの障害を検出できるメカニズムをハイパーバイザ内で維持するのではなく、そのようなメカニズムを、コンピューティングデバイス１００のハードウェアで維持することができ、このメカニズムが、仮想マシンによって作成された環境内で障害が検出される場合に、オペレーティングシステムに制御を返すようにハイパーバイザに促すことができる。例えば、オペレーティングシステムは、ハイパーバイザがハードウェアで実行できるようにするのに先立って、ハードウェアのタイマをセットすることができる。その後、仮想マシンによって作成された環境内で障害が発生する場合に、ハードウェアによって維持されるタイマが、満了し、オペレーティングシステムに制御を返すようにハイパーバイザに促すことができる。オペレーティングシステムに制御を返すために、ハードウェアによって維持されるタイマが満了した場合に異常終了し、オペレーティングシステムに制御を返すように、ハイパーバイザを変更することができる。ハイパーバイザは、この形で制御が返される場合に、エラーの存在を示すこともでき、あるいは、実行が完了しなかったことを示すことができる。
【００７１】
仮想プロセス２１１が仮想マシンによって作成された環境内で動作する仮想オペレーティングシステムプロセスである場合の追加の複雑化は、プロキシ２０５と仮想プロセス２１１またはエクステンション２１５の間の通信が、上で詳細に説明したように、プロセス間通信メカニズムまたはＲＰＣメカニズムに頼ることができない場合があることである。その代わりに、プロキシ２０５と仮想オペレーティングシステムプロセス２１１の間の通信を、ハイパーバイザまたはホストプロセス２０１の下にあるオペレーティングシステムプロセスと通信する仮想マシンによってセットアップされる他のメカニズムによって調整することができる。そのようなメカニズムに、例えば、仮想マシンとオペレーティングシステムのそれぞれがコンピューティングデバイスハードウェアで実行されつつある場合にこの両方からアクセス可能になるように、事前定義のメモリ位置にメッセージを保管すること、または、もう１つの例として、仮想マシンおよびオペレーティングシステムの両方がコンピューティングデバイスハードウェアで実行されている間にもメモリ内に留まる通信スレッドを提供することを含めることができる。
【００７２】
さらに、上で詳細に説明したメカニズムは、仮想プロセス２１１または３１１とホストプロセス２０１との間の共通ユーザモードを提供することができるが、仮想プロセス２１１または３１１が仮想マシン環境内で動作する仮想オペレーティングシステムプロセスである環境では、ある変更を実施することも必要とする場合がある。例えば、共通のオペレーティングシステム１３４に頼ってページテーブルマッピングの変更を実行するのではなく、変更を、仮想マシンのハイパーバイザによって維持されるページテーブルマッピングで行うことができる。したがって、ホストプロセスメモリ３０１が、仮想プロセスメモリ３０２および３０３を作成するためにコピーされる場合に、そのようなコピーは、図３に示されたオペレーティングシステム１３４ではなく、ハイパーバイザによって実行することができる。具体的に言うと、ホストプロセスメモリ３０１は、ホストオペレーティングシステムがもはや実行中ではなく、仮想マシンプロセスが実行中になった後であっても、物理メモリ位置３２１に留まることができる。ハイパーバイザは、物理メモリ位置３２１を識別することができ、その位置の内容を、ハイパーバイザの制御下とすることができる物理メモリ位置３２２または３２３にコピーすることができる。
【００７３】
同様に、ホストプロセス２０１と仮想プロセス２１１および３１１の間の共通ユーザモードが、図４に関して上で詳細に説明した形で、ページテーブルマッピングの変更によって達成される場合に、そのページテーブルマッピングの変更を、ハイパーバイザによって実行することができる。したがって、ホストプロセスメモリ３０１は、物理メモリ位置３２１に留まることができ、ハイパーバイザは、ホストオペレーティングシステムが現在実行中でない場合であっても、仮想プロセスメモリ３０２および３０３を物理メモリ位置３２１にマッピングすることができる。重要なことに、仮想プロセスメモリ３０２または３０３など、物理メモリ位置３２１にマッピングされる必要がある仮想プロセスメモリの両方が、ハイパーバイザの制御下になる。その結果、ホストプロセスメモリ３０１が、変更をまったく必要としないので、上で説明したメカニズムは、オペレーティングシステム１３４からのサポートを必要とせず、したがって、このオペレーティングシステム１３４は、任意の標準的なオペレーティングシステムとすることができる。
【００７４】
仮想プロセスメモリが、ホストプロセスメモリによって使用される物理メモリ位置にマッピングされ、上で詳細に説明した物などのコピーオンライトスキームが使用される場合に、ハイパーバイザは、必要なコピーも実行することができる。例えば、ハイパーバイザは、コピーオンライトの一部として書き込まれる値が保管される追加の物理メモリ位置をとっておくことができる。さらに、上述したように、プロキシ２０５を、ホストプロセスメモリ３０１とコピーオンライトに使用される追加位置の両方を参照するように変更することができる。しかしながら、ハイパーバイザによってとっておかれる追加メモリは、プロキシ２０５の下にあるオペレーティングシステムによって使用できるメモリでない場合があるので、基礎になるオペレーティングシステムによって正しくアクセスされない場合であってもメモリ位置を特に参照するようにプロキシを変更することができる。その代わりに、ハイパーバイザによってとっておかれるメモリ位置を、さらに、仮想マシンがコンピューティングデバイスでの実行を停止し、オペレーティングシステムが実行の再開を許可される手順の一部として、プロキシ２０５の下にあるオペレーティングシステムからアクセス可能なメモリ位置にコピーすることができる。
【００７５】
本発明の実施形態によって企図される共通ユーザモードコンテキストを提供するもう１つの代替メカニズムは、代理ホストプロセスが仮想オペレーティングシステムプロセスの内部で実行されることを必要とする。例えば、代理ホストプロセスは、ホストプロセスに似て、仮想マシン環境内の仮想オペレーティングシステムの上で動作することができる。代理ホストプロセスのユーザモードコンテキストは、仮想マシン環境の外にあるホストプロセスのユーザモードコンテキストと同一にすることができ、これによって、共通ユーザモードが自動的に提供される。共通ユーザモードは、上述した技法を使用することによるなど、ホストプロセスメモリ３０１への明示的アクセスまたはコピーを必要とせずに、ホストプロセスと代理ホストプロセスの間の通信によって維持することができる。
【００７６】
仮想オペレーティングシステムプロセスの作成に関して本発明の実施形態によって企図されるメカニズムの１つが、ホストコンピューティングデバイス１００での仮想マシンソフトウェアアプリケーションの呼び出しと、その後の、仮想マシンソフトウェアアプリケーションが実行される場合に作成される環境のコンテキスト内での適当なオペレーティングシステムのブートである。当業者に既知のように、仮想マシンソフトウェアアプリケーションには、一般に、コンピューティングデバイスハードウェアからオペレーティングシステム１３４の基礎を除去し、これを一時ストレージに保管するのに使用できるオペレーティングシステムエクステンションが含まれる。仮想マシンソフトウェアアプリケーションには、オペレーティングシステム１３４の基礎を除去した後に、コンピューティングデバイスハードウェアにそれ自体の基礎をインストールし、仮想環境の作成に適当な形でそのハードウェアを抽象化することができるハイパーバイザも含めることができる。仮想オペレーティングシステムは、オペレーティングシステム１３４と同一のまたは異なる物とすることができるが、その後、これを、ハイパーバイザによって提供される抽象化されたハードウェア上でブートすることができる。したがって、ハイパーバイザは、仮想オペレーティングシステムプロセスをオペレーティングシステム１３４と独立に実行できる仮想マシン環境を作成することができる。そのような仮想オペレーティングシステムプロセスは、上で列挙した利益を提供することができるが、オペレーティングシステム１３４の説明した除去および仮想マシン環境内での適当なオペレーティングシステムのブートを含む仮想マシンソフトウェアアプリケーションの呼び出しは、極端に遅いプロセスになる可能性がある。
【００７７】
仮想マシンソフトウェアアプリケーションを起動し、その後、仮想マシン環境内でオペレーティングシステムをブートすることによって導入される非効率性を回避するために、本発明の実施形態によって企図されるもう１つのメカニズムは、仮想マシンを初期化し、仮想マシン環境内でオペレーティングシステムをブートし、その仮想マシン環境の結果の最終的な状態を将来の使用のために保存し、クローン作成することを必要とする。したがって、例えば、コンピューティングデバイス１００の最初のスタートアップ中に、オペレーティングシステム１３４がブートされた後に、仮想マシンソフトウェアアプリケーションを自動的にスタートすることができ、仮想オペレーティングシステムを、仮想マシンによって作成された環境内でブートすることができる。この仮想オペレーティングシステムがブートされたならば、仮想マシン環境の状態を保存することができる。当業者に既知のように、そのような状態は、簡単に保存することができる。というのは、仮想マシンソフトウェアアプリケーションが、仮想マシン環境の状態を含む少数のファイルを、コンピューティングデバイス１００のストレージ媒体上に作成する可能性が高いからである。これらのファイルにアクセスし、コピーすることができ、仮想マシンソフトウェアアプリケーションを、動作状態のままにすることができ、あるいはその代わりに、スリープモードなどの予約済み状態にすることができ、あるいは完全にシャットダウンすることができる。
【００７８】
その後、オペレーティングシステム１３４またはアプリケーションプログラム１４５のいずれかとすることができるホストプロセスが、エクステンションの使用をもたらす動作を実行しようとする場合に、設計によってまたはプロキシが中に入ったのでのいずれかで、仮想マシン環境の保存された状態をコピーすることができ、新しい仮想マシン環境を効率的な形で作成することができる。仮想マシンの環境の状態に、既にブートされた仮想オペレーティングシステムが含まれるので、要求されたエクステンションをホスティングできる仮想プロセスを、簡単に作成することができる。例えば、要求されたエクステンションがオペレーティングシステムエクステンションである場合に、そのエクステンション用の仮想プロセスは、仮想オペレーティングシステムの形で既に存在する。一方、要求されたエクステンションがソフトウェアアプリケーションエクステンションである場合には、適当なソフトウェアアプリケーションを仮想オペレーティングシステムで実行することができ、これによって、適当な仮想プロセスを作成することができる。その結果、仮想オペレーティングシステムが仮想マシンの環境内でブートされた後に仮想マシンソフトウェアによって作成された状態を保存することと、その後、保存された状態を必要に応じてクローン作成することによって、オペレーティングシステムエクステンションとソフトウェアアプリケーションエクステンションの両方をホスティングする仮想プロセスを、効率的に作成することができる。
【００７９】
仮想プロセスを作成するための適当なサポートを提供するために、仮想マシンソフトウェアアプリケーションは、そのような仮想マシンソフトウェアアプリケーションが通常抽象化する物より大きい物とすることができるハードウェアのスーパーセットを抽象化するように設計することができる。同様に、仮想マシン環境内でブートされる仮想オペレーティングシステムは、完全なオペレーティングシステムＡＰＩセットを実装することができる。そのようなハードウェアのスーパーセットを抽象化し、完全なオペレーティングシステムＡＰＩセットを提供することによって、仮想マシンによって作成される状態を使用して、要求されたエクステンションに適当な仮想プロセスを生成できる可能性がより高くなる。その結果、より多数の有用な仮想プロセスを、保存された状態のクローン作成によって生成することができ、よりコストの高いメカニズムを使用することによって、より少数の仮想プロセスを作成する必要が生じる。
【００８０】
図５に移ると、本発明の実施形態によって企図される仮想オペレーティングシステムプロセスを作成するもう１つのメカニズムが示されている。流れ図４００には、全般的に、コンピューティングデバイス１００など、多数の現代のコンピューティングデバイスのスタートアップ手順が示されている。流れ図４００は、特定のコンピューティングシステムまたはオペレーティングシステムのスタートアッププロセスの詳細な説明であることを意図された物ではなく、本発明の実施形態によって企図されるメカニズムをよりよく説明するために、スタートアップ手順に一般的に見られる要素の全般的な説明を提供することを意図された物である。
【００８１】
図５からわかるように、ステップ４０５で、コンピューティングデバイスに電力を供給することによって、スタートアップ手順が開始される。次のステップ４１０で、中央処理ユニット（ＣＰＵ）が、読取専用メモリ（ＲＯＭ）基本入出力システム（ＢＩＯＳ）で見つかる命令の実行を開始することができる。ＲＯＭ  ＢＩＯＳは、コンピューティングデバイスの中央ハードウェア要素が正しく機能していることを保証するために基本ハードウェアテストを実行することができる。ステップ４１５で、ＢＩＯＳが、コンフィギュレーション情報を読み取ることができ、これは、一般に相補金属酸化物半導体（ＣＭＯＳ）メモリに保管される。当業者に既知のように、ＣＭＯＳメモリは、コンピューティングデバイスが動作していない場合に電池によってその内容が維持される、メモリの小さい領域とすることができる。ＣＭＯＳメモリは、コンピューティングデバイスに接続できる１つまたは複数のコンピュータ可読媒体を識別することができる。ステップ４２０に示されているように、ＢＩＯＳは、マスタブートレコード（ＭＢＲ）を見つける努力で、様々なコンピュータ可読媒体の第１セクタを検査することができる。
【００８２】
一般に、ＭＢＲにはパーティションローダの一部またはすべてが含まれ、このパーティションローダは、ブートレコードを突き止め、オペレーティングシステムのブートを開始するコンピュータ実行可能命令とすることができる。したがって、ステップ４２５で、ＭＢＲで見つかったパーティションローダが、ＢＩＯＳから引き継ぐことができ、コンピュータ可読媒体のパーティションテーブルまたは類似するレコードを検査して、ロードすべき適当なオペレーティングシステムを判定することができる。各オペレーティングシステムが、それに関連するブートレコードを有することができ、ステップ４３０で、ブートレコードに問題がない場合に、パーティションローダは、オペレーティングシステムのブートを開始することができる。
【００８３】
オペレーティングシステムのブートの一部として、ステップ４３５に示されているように、パーティションローダは、ハードウェア検出ルーチンを呼び出すことができ、このルーチンは、ハードウェア検出を開始することができる。一般に、ステップ４３５で実行されるハードウェア検出は、予備的にすぎず、必ずしもハードウェアをイネーブルするのではなく、ステップ４３５のハードウェア検出は、後の使用のためにハードウェアデバイスのリストを作成するだけである場合がある。そのようなリストは、例えば、登録データベースまたは類似する情報ストアに保管することができる。ステップ４４０で、パーティションローダは、別のオペレーティングシステムプロセスまたはサブシステムを呼び出して、コンピューティングデバイスの様々なハードウェアデバイスへの通信および制御リンクを提供する。時々、このサブシステムを「ハードウェアアブストラクションレイヤ」（ＨＡＬ）と呼ぶ。さらに、パーティションローダは、ステップ４４０で、オペレーティングシステムのカーネルおよびレジストリ、または必要なハードウェアおよびソフトウェアの情報を含む類似するデータベースもロードすることができる。
【００８４】
ステップ４４０でパーティションローダによってロードされるレジストリまたは類似するデータベースには、ハードドライブまたはメモリなどの必要なハードウェアにアクセスするためにオペレーティグシステムカーネルに必要になる可能性があるデバイスドライバのリストも含めることができる。したがって、ステップ４４５で、パーティションローダは、オペレーティングシステムカーネルに適当なサポートを与えるために、これらのデバイスドライバをロードすることができる。デバイスドライバをロードしたならば、やはりステップ４４５で、パーティションローダが、コンピューティングデバイスの制御をオペレーティングシステムカーネルに転送することができる。
【００８５】
流れ図４００のステップ４０５から４４５に、全般的に、スタートアップルーチンのほとんどの要素が示されているが、ステップ４５０には、オペレーティングシステムエクステンションまたはソフトウェアアプリケーションをホスティングできる仮想オペレーティングシステムプロセスを作成するために本発明の実施形態によって企図されるメカニズムの第１部分が示されている。具体的に言うと、ステップ４５０で、ＨＡＬまたはブートレコードに関連する情報から、実際に物理的に存在するより多数のＣＰＵがコンピューティングデバイスに存在するとオペレーティングシステムカーネルに示すことができる。したがって、例えば、単一のＣＰＵだけを有するコンピューティングデバイスで、オペレーティングシステムカーネルは、ステップ４４５で、このコンピューティングシステムに存在する２つ以上のＣＰＵの表示を受け取ることができる。同様に、既に２つのＣＰＵを有するコンピューティングデバイスについて、オペレーティングシステムカーネルは、そのコンピューティングシステムに存在する３つ以上のＣＰＵの表示を受け取ることができる。下で詳細に説明するように、実際には存在しないＣＰＵの存在を示すことによって、仮想オペレーティングシステムプロセスを、より簡単で効率的に作成することができる。
【００８６】
流れ図４００に戻って、ステップ４５５で、オペレーティングシステムカーネルは、ＨＡＬを呼び出して、オペレーティングシステムカーネルがそのコンピューティングデバイスに存在すると信じる各ＣＰＵを初期化する。したがって、ＣＰＵを初期化する要求に、そのコンピューティングシステムに実際には存在しないＣＰＵを含めることができる。ＨＡＬが、すべてのＣＰＵの初期化を完了したならば、ステップ４６０で、下で詳細に説明する形で仮想オペレーティングシステムプロセスを効率的に作成するのに後に使用するために、システムの状態を保存することができる。次に、ステップ４６５に示されているように、オペレーティングシステムのブートは、例えば、オペレーティングシステムの様々なサブシステムの初期化、コンピューティングデバイス１００を含むハードウェアデバイスのアクティブ化、および適当なデバイスドライバのロードを含む標準的なスタートアップ動作を継続することができる。ステップ４５５に、入出力サブシステムの初期化が具体的にリストされているが、オペレーティングシステムカーネルは、メモリマネージャ、プロセスマネージャ、オブジェクトマネージャ、オペレーティングシステムの様々なカーネル、および類似するサブシステムも、ステップ４６５で初期化することができる。さらに、オペレーティングシステムカーネルは、ハードウェア割込みを再イネーブルすることができ、コンピューティングデバイス１００の一部として検出された様々なハードウェアデバイスをアクティブ化することができる。上で示したように、様々なハードウェアデバイスのアクティブ化の一部として、オペレーティングシステムカーネルは、これらのデバイス用の適当なデバイスドライバもロードすることができる。当業者に既知のように、多数のオペレーティングシステムが、最初は単一ＣＰＵを有するコンピューティングデバイス用に設計されているので、そのようなオペレーティングシステムは、一般に、図５に示されたステップの大多数を単一のＣＰＵだけを用いて実行し、スタートアップ手順のすべてをほぼ完了した後に限って追加ＣＰＵをアクティブ化する。その結果、主ＣＰＵは、一般に、ハードウェアバインディングのすべてを維持し、他のＣＰＵには、そのコンピューティングデバイスで実行される様々なプロセスを割り当てることができる。
【００８７】
上述したように、ステップ４５０で、オペレーティングシステムカーネルは、追加ＣＰＵがコンピューティングデバイスに物理的に存在しない場合であっても、追加ＣＰＵについて知らされた。したがって、ステップ４７０で、オペレーティングシステムカーネルに、ステップ４５０で示されたが物理的に存在しないこれらのＣＰＵが、障害を発ししたことを知らせることができる。ステップ４７０での障害を発生したＣＰＵのこの表示は、結果において、ステップ４５０での追加ＣＰＵの表示を元に戻し、オペレーティングシステムカーネルが、コンピューティングデバイス１００に物理的に存在するのと同一の個数のＣＰＵを使用してオペレーティングシステムのブートプロセスを完了できるようにする。上で示したように、様々なシステムが、様々時に追加ＣＰＵを初期化できるので、ステップ４７０は、ステップ４６５に示された要素のすべてが実行された後に行われることに制限されることを意図された物ではない。そうではなく、ステップ４７０は、追加ＣＰＵが初期化され、適当なハードウェアバインディングが確立された後に（それがいつであっても）実行されることが意図されている。流れ図４００を進めると、ステップ４７５で、オペレーティングシステムカーネルは、適当なサブシステムを起動して、ユーザモード環境を作成することができ、ステップ４８０で、ユーザモード環境が作成されたならば、オペレーティングシステムが、ブートプロセスを完了することができる。
【００８８】
ブートプロセスがステップ４８０で完了したならば、ステップ４８０でブートが完了したオペレーティグシステムを介して入力されるコマンドを介して仮想マシンを実行することによるなど、仮想環境をブートすることができる。仮想環境をより効率的に作成するために、オペレーティングシステムのブート中にステップ４６０で保存された状態を使用することができる。保存された状態は、ステップ４５０で提示された複数ＣＰＵを反映し、ステップ４７０での副ＣＰＵの障害の表示を考慮に入れていないので、仮想環境を、複数ＣＰＵが存在するかのようにブートすることができる。したがって、仮想マシンの環境は、下で示す形で、より効率的にスタートアップするために、ホストオペレーティングシステムによって確立されるメカニズムを利用することができる。
【００８９】
上で示したように、多数のオペレーティングシステムが、ブートプロセスがほとんど完了するまで、単一のＣＰＵだけを使用するので、そのＣＰＵは、一般に、システムデバイスからの、ハードウェア割込みなどの通信の処理を含む、システムデバイスのほとんどまたはすべての処理を割り当てられる。その結果、複数の物理ＣＰＵを有するコンピューティングデバイスのオペレーティングシステムは、一般に、ブートプロセス中に使用されないＣＰＵで実行されるプロセスが、ブートプロセス中に使用されるＣＰＵと通信するメカニズムを提供して、これらのプロセスにハードウェアと通信する能力を提供する。図５に、この機能を活用して、仮想マシンの環境が、ハードウェアデバイスへのランタイムバインディングを有することなく基礎になるハードウェアと通信できるようにするメカニズムが示されている。具体的に言うと、保存された状態が仮想環境に提供される場合に、ブートプロセス中に使用されたＣＰＵが使用されないか、少なくとも入出力ハードウェアと通信することを許可されなくなるように、仮想環境を構成することができる。その代わりに、仮想環境が、オペレーティングシステムのメカニズムを使用して、コンピューティングデバイスに複数のＣＰＵが含まれるかのように振る舞うことによって、オペレーティングシステムのために既に実行されたハードウェアバインディングを活用することができる。
【００９０】
一例として、単一のＣＰＵだけを有するコンピューティングデバイスで、仮想オペレーティングシステムプロセスは、少なくとも第２のＣＰＵが存在するかのように動作する。というのは、オペレーティングシステムが、ステップ４７０で第２ＣＰＵが障害を発生したことの表示を受け取っているが、仮想環境はそのような表示を受け取っていないからである。したがって、コンピューティングデバイス内の単一の物理ＣＰＵが、すべての作業を実行するが、仮想マシンの環境は、２ＣＰＵシステムが存在するかのように動作し、一方のＣＰＵは、ハードウェアデバイスへのランタイムバインディングのすべてを有し、第２ＣＰＵは、第１ＣＰＵの存在のゆえにハードウェアへのランタイムバインディングを用いて初期化される必要がないので、仮想オペレーティングシステムプロセスをホスティングする。その結果、仮想オペレーティングシステムは、ハードウェアを初期化する必要がないので、効率的にブートすることができ、仮想マシン自体は、ハードウェアを抽象化する必要がないので、非常に効率的にスタートすることができる。仮想オペレーティングシステムプロセス内でホスティングされるエクステンションが、ハードウェアデバイスとの通信を必要とする場合には、マルチＣＰＵシステムでの使用のために確立される上で説明したメカニズムを使用して、仮想オペレーティングシステムプロセスからホストオペレーティングシステムに要求を行うことができる。したがって、エクステンションが、標準的な形で動作することができ、仮想環境を、効率的に作成することができる。
【００９１】
しかしながら、当業者に既知のように、オペレーティングシステムドライバなどの一部のエクステンションについて、上述のメカニズムが、満足な解決策を提供しない場合がある。具体的に言うと、ホストオペレーティングシステムが、レガシデバイス１９９などのレガシハードウェアに出会う場合に、適当なドライバを突き止めることができない場合があり、ハードウェアを正しく認識しない場合がある。したがって、適当な仮想オペレーティングシステムプロセスが、レガシインターフェース１９８などのレガシデバイスドライバをホスティングできるが、オペレーティングシステムが、上で説明したメカニズムを使用してハードウェア通信のすべてを処理し、このオペレーティングシステムが、レガシハードウェアに正しく接続されないので、レガシハードウェアと通信する方法がない場合がある。さらに、基礎になるオペレーティングシステムが、コンピューティングデバイスのハードウェアのすべてに正しく接続された場合であっても、ビデオデビスドライバなどの一部のエクステンションが、上のメカニズムを使用するハードウェア通信に導入される待ち時間（最小限の量であっても）があると正しく動作できない場合がある。
【００９２】
その結果、本発明の実施形態によって企図される上で述べたメカニズムの変形形態は、そのデバイスドライバが仮想オペレーティングシステムでホスティングされるハードウェアデバイスが、基礎となるオペレーティングシステムのブートシーケンス中に識別され、基礎となるオペレーティングシステムではなく仮想オペレーティングシステムプロセスにバインドされ、デバイスドライバにそのハードウェアデバイスへの直接アクセスが与えられることを必要とする。具体的に言うと、ハードウェアデバイスの割込みを、示されたが物理的には存在しない副ＣＰＵに送ることができる。その後、仮想マシンが、副ＣＰＵが存在することを前提とする環境を作成する場合に、ハードウェアデバイスへのランタイムバインディングを初期化することができ、仮想オペレーティングシステムプロセスが、そのハードウェアデバイスと直接に通信できるようになる。したがって、図５に示されているように、ステップ４９９での仮想環境のブートの完了に先立って、任意選択のステップ４９５で、レガシデバイス１９９のハードウェアコンフィギュレーションを挿入することができ、その仮想環境に、レガシインターフェース１９８などの正しいデバイスドライバをロードすることができる。
【００９３】
代替案では、仮想マシンが、上で説明したブート最適化に頼らずに、複数の仮想ＣＰＵを有する環境を作成することができる。マルチＣＰＵ仮想環境の作成に使用されるプロセスに関係なく、そのデバイスドライバが仮想オペレーティングシステムプロセスによってホスティングされるハードウェアデバイスは、そのハードウェアデバイスが仮想ＣＰＵである副ＣＰＵに割込みを送っているかのようにバインドすることができる。したがって、オペレーティングシステムの初期ブート中に、そのデバイスドライバが仮想環境でホスティングされなければならないハードウェアデバイスを、下で詳細に説明するように隠すか遅らせることができ、その結果、そのハードウェアデバイスは、オペレーティングシステムをロードしている物理的ＣＰＵにバインドされなくなる。しかしながら、仮想環境は、ブートプロセスの一部として、そのハードウェアデバイスをバインドすることができる。上で説明したように、少なくとも第２ＣＰＵが存在し、仮想環境がそのＣＰＵを使用しているかのように仮想環境を作成することができる。したがって、ハードウェアデバイスへのバインディングは、そのハードウェアデバイスが第２ＣＰＵに割込みを送っているかのように実行される。単一の物理ＣＰＵだけが存在するので、そのＣＰＵは、そのハードウェアデバイスからの通信を受け取ることができる。しかしながら、この通信を、ホストオペレーティングシステムではなく仮想環境に向けることができ、仮想環境にそのハードウェアデバイスへの直接アクセスが与えられる。
【００９４】
本発明の実施形態では、そのデバイスドライバが仮想オペレーティングシステムプロセス内でホスティングされなければならないハードウェアデバイスを流れ図４００のステップ４６５で隠すか遅らせることができる複数のメカニズムが企図されている。本発明の実施形態によって企図されるメカニズムの１つは、仮想オペレーティングシステムプロセス内でホスティングされなければならないデバイスドライバにステップ４６５中に送られる可能性があるすべての制御情報のキャプチャを必要とする。そのような制御情報は、ステップ４９０で仮想オペレーティングシステムプロセスが確立されるまで遅らせ、その後、デバイスドライバに中継することができる。本発明の実施形態によって企図されるもう１つのメカニズムは、ホストプロセス２０１およびプロキシ２０５に関して上述した形でオペレーティングシステムプロセスによって呼び出されるデバイスドライバのプロキシが、ステップ４６５で「ＯＫ」表示を返し、その後、ステップ４９０で仮想オペレーティングシステムプロセスが確立されるまで、そのプロキシに送られる入出力要求パケット（ＩＲＰ）をキャッシングすることを必要とする。このプロキシは、その後、仮想オペレーティングシステムプロセス内のデバイスドライバにそれらのＩＲＰを転送することができる。その代わりに、このプロキシが、仮想オペレーティングシステムプロセスが確立されるまで単純に遅らせ、その後、すべてのＩＲＰを、キャッシングを必要とせずにデバイスドライバに直接に渡すことができる。
【００９５】
本発明の実施形態によって企図されるもう１つのメカニズムは、ハードウェアデバイスが、ステップ４６５でまずオペレーティングシステムにバインドされ、その後、キュー内のＩＲＰをクリーンにフラッシュし、ハードウェアを便利な状態にすることができる「ハイバーネート」または類似するコマンドを送られることを必要とする。仮想オペレーティングシステムプロセス内のデバイスドライバは、ステップ４９５で、仮想オペレーティングシステムプロセス内からデバイスとの直接通信を確立することを試みる。本発明の実施形態によって企図されるこのメカニズムの変形形態は、ハードウェアデバイスが、上述のようにバインドされた後にハイバーネートされるのではなく、ステップ４６５でオペレーティングシステムから隠されることを必要とする。ハードウェアデバイスは、ＨＡＬまたは、プラグアンドプレイマネージャなどの様々な他のサブシステムに適当なコマンドを送ることによって隠すことができる。その後、オペレーティングシステムが、ステップ４８０でブートされ、仮想オペレーティングシステムプロセスが確立された後に、ステップ４９５で、ハードウェアデバイスをアクティブ化するか、他の形で可視にすることができ、これによって、それ自体を仮想オペレーティングシステムプロセスおよびそこでホスティングされるデバイスドライバにバインドすることができる。
【００９６】
上で詳細に説明した形で追加ＣＰＵをシミュレートしてマルチＣＰＵオペレーティングシステムの機能を活用することを試みるのではない、本発明の実施形態によって企図される仮想プロセスを効率的に作成する代替のメカニズムを、全般的に図６に示す。図６に示された流れ図５００に、図５に関して上で詳細に説明した物と同一のステップの多数が含まれる。具体的に言うと、ステップ４０５から４４５、４６５、および４７５は、全般的に、上で詳細に説明した物と同一の基本スタートアップ手順を示す。さらに、図６には具体的に示されていないが、オペレーティングシステムカーネルは、ステップ４４５と４６５の間で、コンピューティングデバイスのＣＰＵについて知ることができ、ＨＡＬを呼び出して、これらのＣＰＵを初期化することができる。しかしながら、図５に示されたステップ４５０および４５５と異なって、上で説明したステップは、コンピューティングデバイスに実際に存在する物より多数のＣＰＵをオペレーティングシステムカーネルに提示することを含まない。ステップ４７５の後に、新しいステップ５０５を実行することができ、これによって、コンピューティングデバイスの状態を保存することができる。
【００９７】
ステップ４８５でオペレーティングシステムブートを完了した後に、仮想マシンを起動することができ、この仮想マシンは、観察記録コードによって収集された情報を利用することができる。したがって、ステップ４８５で、仮想マシンは、ブートプロセスを開始することができ、ステップ５１０で、仮想マシンは、ステップ５０５で記録された状態を使用して、仮想オペレーティングシステムプロセスを効率的にブートすることができる。具体的に言うと、仮想環境は、それが仮想化する必要がある特定のハードウェアデバイスだけのパラメータを使用することができ、他のハードウェアデバイスをスキップできるようになる。さらに、パラメータは、ステップ５０５など、オペレーティングシステムブート中に既に確立され、記録されているので、仮想マシンは、より効率的にこれらのハードウェアデバイスを仮想化することができる。しかしながら、レガシデバイス１９９などのハードウェアデバイスが、ステップ４６５で正しく初期化されなかった場合には、任意選択のステップ４９５で、上で詳細に説明した形で、仮想環境内でこれらのハードウェアデバイスを初期化することができる。最終的に、仮想マシンが、仮想化されるハードウェアデバイスの限られたセットを選択でき、これらをより効率的に仮想化できるので、仮想環境をより効率的に作成することができる。しかしながら、当業者が理解するように、上で説明した最適化は、ブートされたオペレーティングシステムと仮想オペレーティングシステムが同一であるか、少なくともハードウェアに関するインターエースが類似する場合に、最も有効である可能性がある。
【００９８】
仮想オペレーティングシステムプロセスによってホスティングできるハードウェアデバイスドライバエクステンションを含むいくつかの場合に、仮想オペレーティングシステムプロセスによって提供されるサポートＡＰＩのセマンティクスが、有用でない場合がある。例えば、一部のハードウェアデバイスドライバは、物理ハードウェアを正しく制御するために、その物理ハードウェアへのアクセスを必要とする可能性がある。したがって、この場合には、仮想オペレーティグシステムプロセスが、物理ハードウェアへのアクセスを、ホスティングされるデバイスドライバに提供する必要がある。上述のメカニズムの一部は、必要な直接アクセスを提供することができるが、本発明の実施形態では、仮想プロセス内でホスティングされるエクステンションがハードウェアへの直接アクセスを有することを可能にするために、その仮想プロセスに適用できる追加のメカニズムが企図されている。
【００９９】
その結果、上で詳細に説明したメカニズムを使用して、エクステンションとホストプロセスとの間のフォールト隔離を提供するだけではなく、ハードウェアの抽象化が効率的でないか不可能である情況で仮想マシンがハードウェアへの直接アクセスを提供できるようにすることもできる。例えば、前述のメカニズムは、仮想マシンが抽象化するように設計されていないハードウェアに頼るソフトウェアを仮想マシンがホスティングすることを可能にすることができる。したがって、前述のメカニズムは、仮想マシンの設計者および作成者に、考慮に入れる必要のあるハードウェアの範囲を絞る能力を提供すると同時に、独自のハードウェアまたはレガシハードウェアを使用する能力を消費者に提供する。
【０１００】
図７に移ると、ハイパーバイザ６１３を使用して基礎になるハードウェア６２０とインターフェースする、エクステンション６１５をホスティングする仮想オペレーティングシステムプロセス６１１を含む仮想マシンプロセス６１７が示されている。黒の矢印によって示されているように、本発明の実施形態では、エクステンション６１５が、ハイパーバイザ６１３によって実行されるすべての抽象化を迂回して、仮想マシン環境内からハードウェア６２０に直接にアクセスできる、仮想マシン環境が企図されている。上で説明したように、ハイパーバイザ６１３などのハイパーバイザは、限られたオペレーティングシステム機能性を提供することと、ハードウェア６２０などの基礎になるハードウェアへの抽象化されたアクセスを提供することによって、仮想マシン環境を管理するコンピュータ実行可能命令とすることができる。したがって、ハイパーバイザ６１３は、基礎になるハードウェアの特性から仮想マシン環境を遮蔽するように働くことができ、仮想マシンソフトウェアアプリケーションが、その中で実行されることを意図されたすべてのコードについて適当な仮想マシン環境を作成することを可能にする。ハイパーバイザは、仮想マシン環境と基礎になるハードウェアの間で変換することができる。
【０１０１】
一例として、仮想マシン環境は、仮想オペレーティングシステムプロセス６１１およびそのプロセス内で実行される可能性があるすべてのプログラムに特定のタイプのＣＰＵを提示することができるが、基礎になるハードウェア６２０には、実際には、完全に異なるタイプのＣＰＵを含めることができる。ハイパーバイザ６１３には、仮想マシン環境の内部のあるタイプのＣＰＵに対して行われた要求を、基礎になるハードウェア６２０に存在する異なるタイプのＣＰＵと通信するのに適する要求に変換する作業を割り当てることができる。しかしながら、上で説明したように、デバイスドライバなどの一部のオペレーティングシステムエクステンションは、基礎になるハードウェアデバイスと直接通信することを必要とする場合があるので、ハイパーバイザによって実行される抽象化が、そのようなオペレーティングシステムエクステンションを正しく動作できなくする可能性がある。その結果、本発明の実施形態では、ハイパーバイザを迂回し、仮想オペレーティングシステムプロセス６１１内でホスティングされるエクステンションがハードウェアに直接にアクセスできるようにする様々なメカニズムが企図されている。
【０１０２】
仮想マシンプロセス６１７の他に、図７に、ハードウェア６２０も使用することができるホストオペレーティングシステムプロセス６０１も示されている。ハードウェア６２０は、ホストオペレーティングシステムプロセス６０１と仮想マシンプロセス６１７の間の上で説明したタイムシェアリングを示すために、２つのブロックに分離されている。したがって、仮想マシンプロセス６１７は、ハイパーバイザ６１３を介してハードウェア６２０で実行しているが、ハードウェア６２０は、ホストオペレーティングシステムプロセス６０１を同時に実行してはいない。そうではなく、ホストオペレーティングシステムプロセス６０１の基礎を、除去し、一時ストレージに置くことができる。図７には示されていないが、そのような基礎に、レジストリエントリ、様々な制御レジスタ、割り込みディスパッチルーチン、ＣＰＵ優先権データ、および類似物を含めることができる。仮想マシンプロセス６１７が、ハードウェア６２０での実行を終了したならば、仮想マシンプロセスの基礎を、除去し、一時ストレージに置くことができ、ホストオペレーティングシステムプロセス６０１を、復元し、ハードウェアでの実行を許可することができる。
【０１０３】
図７に、プロキシ６０５と共にホストオペレーティングシステムプロセス６０１が示されているが、本発明の実施形態によって企図される、仮想環境内からハードウェアへの直接アクセスを提供するメカニズムは、エクステンションフォールト隔離のコンテキストの外部で使用することができる。具体的に言うと、前述のメカニズムを、仮想マシンテクノロジ全般に適用することができ、仮想マシンが、レガシハードウェアデバイス、カスタムハードウェアデバイス、または普通でないハードウェアデバイスに頼るエクステンションおよび他のソフトウェアをホスティングできるようになる。そのようなデバイスの抽象化を設計する必要を除去することによって、本発明の実施形態は、より単純なハイパーバイザおよびより効率的な仮想マシン設計を提供する。
【０１０４】
本発明の実施形態によって企図される、仮想マシン環境内からハードウェアへの直接アクセスを提供するメカニズムの１つは、１つまたは複数のハードウェアデバイスに対応する物理メモリへのアクセスを可能にするために、ハイパーバイザがページテーブルマッピングを変更することを必要とする。当業者に既知のように、アプリケーションまたはエクステンションは、適当な物理メモリにアクセスすることによってハードウェアデバイスと通信することができ、この物理メモリは、しばしば、ハードウェアデバイス自体またはインターフェースカードのいずれかに置かれたレジスタまたは類似するハードウェアとすることができる。したがって、例えば、図１に示された例示的なコンピューティングデバイス１００は、ユーザ入力インターフェース１６０の物理メモリレジスタへのアクセスをキーボードデバイスドライバに提供することによって、キーボードデバイスドライバがキーボード１６２と通信することを可能にすることができる。その代わりに、キーボードデバイスドライバが、ＲＡＭ  １３２内の特定の位置にアクセスでき、追加プロセスが、デバイスドライバによる読み取りのためにＲＡＭ内のその位置にキーボード１６２からの入力を転送することができる。
【０１０５】
仮想マシンプロセス６１７内のエクステンション６１５などの仮想マシン環境内のコードが、基礎になるハードウェアへのアクセスを求める場合に、ハイパーバイザ６１３は、基礎になるハードウェアに適当な変換を実行することができ、物理レジスタ自体にアクセスするか、仮想マシンプロセスメモリ空間内にデータを保管することができ、そのデータを、専用ハードウェアまたは類似物によって読み取り、適当な物理レジスタにコピーすることができる。仮想マシン環境内から基礎になるハードウェアデバイスへの直接アクセスを提供するために、ハイパーバイザは、変換が不正である可能性があるので変換の実行を避けることができ、その代わりに、ハイパーバイザは、必要な物理メモリ位置を適当なメモリ空間（仮想オペレーティングシステムプロセス６１１によって使用されるメモリ空間など）にマッピングできる形でページテーブルマッピングを変更することができる。上で詳細に説明したように、ページテーブルマッピングは、どの物理メモリ位置が所与のプロセスに割り当てられるかを決定する。したがって、仮想オペレーティングシステムプロセスメモリ空間に１つまたは複数のデバイスに対応する物理メモリ位置を置くようにページテーブルマッピングを変更することによって、ハイパーバイザは、仮想オペレーティングシステムを使用するエクステンションおよびアプリケーションが、ハードウェアデバイスに直接にアクセスすることを可能にすることができる。
【０１０６】
一例で、ハードウェアデバイスドライバとすることができ、仮想オペレーティングシステムプロセス６１１によってホスティングされつつあるエクステンション６１５は、既知のメモリ読取動作およびメモリ書込動作を使用することによって、ハードウェア６２０の一部である対応するハードウェアデバイスへの直接アクセスを得ることができる。ハードウェア抽象を提供するハイパーバイザ６１３は、このエクステンション６１５からのメモリ読取動作およびメモリ書込動作を、変換されまたは他の形で抽象化されてはならない動作として認識するように設計することができ、それらを基礎になるハードウェアに渡すことを可能にすることができる。さらに、ハイパーバイザ６１３は、適当にページテーブルマッピングを変更することができるので、メモリ読取動作およびメモリ書込動作は、エクステンション６１５が制御することを求めるハードウェアデバイスに対応する初期のレジスタまたは他の物理メモリ位置に対して物理的に実行することができる。その結果、エクステンション６１５は、ハードウェアデバイスに対応するメモリレジスタまたは他の物理メモリ位置に対する直接制御を有し、これによって、仮想マシン環境内からであってもデバイスを直接に制御することができる。
【０１０７】
しかしながら、ページテーブルマッピングを変更し、エクステンションが仮想マシン環境内から直接にハードウェアにアクセスすることを可能にすることによって、ホストオペレーティングシステムプロセス６０１が、そのエクステンションによって導入される可能性がある不安定性により多く露出されるようになる可能性がある。例えば、仮想マシンプロセス６１７が、ハードウェア６２０上で実行中である間に、エクステンション６１５が、不正な形でハードウェア６２０のあるコンポーネントに直接にアクセスし、そのハードウェアコンポーネントに不正に振る舞わせるか、動作不能にすることができる。その後、ホストオペレーティングシステムプロセス６０１がハードウェア６２０での実行を再開した後に、アクセスされるハードウェアコンポーネントは、不正に振る舞い続け、多分ホストオペレーティングシステムプロセスに不安定性を導入することができ、あるいは、動作不能のままであり、これによってホストオペレーティングシステムが必要なタスクを実行できなくする可能性がある。その結果、本発明の実施形態によって企図されるメカニズムの１つは、上で説明したページテーブルマッピング変更に対する制限を提供する。例えば、１つの制限を、エクステンションに必要な範囲だけでページテーブルマッピングを変更することとすることができる。したがって、エクステンションが、多分ハードウェアデバイス上またはデバイスへのインターフェース上に物理的に置かれたメモリレジスタのアドレスを含む、非常に限られたアドレス範囲へのアクセスだけを必要とする場合に、ページテーブルマッピングを、その限られたアドレス範囲を仮想マシンプロセスメモリ空間にマッピングするのに必要な範囲でのみ変更することができる。もう１つの制限を、時間的制限とすることができ、これによって、ページテーブルマッピングを、エクステンションがそのタスクを達成するのを可能にする時間の間だけ変更することができる。例えば、エクステンション６１５が、ハードウェアデバイスと直接に通信することを試みる場合に、そのエクステンションは、直接アクセスを望む時間の長さを示す要求を、ハイパーバイザ６１３に対して行うことができる。そのような要求は、直接に、またはそのエクステンション６１５をホスティングする仮想オペレーティングシステムプロセス６１１を介して、行うことができる。ハイパーバイザ６１３は、その要求を受け取ったならば、要求された長さの時間の間に、ページテーブルマッピングを変更することができる。
【０１０８】
当業者に既知のように、多数のハードウェアデバイスが、インターフェースカードまたは類似物などのインターフェースハードウェアを介してコンピューティングデバイスに接続される。そのようなインターフェースハードウェアが、しばしば、上述した物などの既知のバスメカニズムに取り付けられる。バスアドレスを、物理メモリにマッピングすることができ、この物理メモリに、さらに、コンピューティングデバイスで動作するソフトウェアによってアクセスすることができる。その結果、インターフェースカードおよび類似物の、バスに接続されたレジスタを、しばしば、「メモリマップドレジスタ」と称し、これは、メモリの１つまたは複数の物理ページにマッピングすることができる。しかしながら、メモリマップドレジスタのセットは、メモリマップドレジスタの別のセットと物理ページを共有することがほとんどないので、ページテーブルマッピングに対する上の変更は、デバイスごとの基礎で行うことができる。
【０１０９】
さらに、本発明の実施形態によって企図されるメカニズムの１つは、あるメモリマップドレジスタを仮想マシンプロセス６１７だけに使用可能にすることを可能にするために、仮想アドレス変換の使用を必要とする。その形で、ホストオペレーティングシステムプロセス６０１は、正しいデバイスドライバを有しない可能性があるハードウェアを扱うことを避けることができ、仮想オペレーティングシステムプロセス内でホスティングできる正しいデバイスドライバに、その特定のハードウェアデバイスへの永久的アクセスを許可することができる。
【０１１０】
本発明の実施形態によって企図される、ハードウェアへの直接アクセスを仮想マシンに提供するもう１つのメカニズムは、エミュレーションまたは他のハイパーバイザ６１３によって実行される変更なしで、仮想マシン環境内から入出力ポートにアクセスすることを可能にする。当業者に既知のように、入出力ポートは、一般に、アドレスまたはポート番号によって識別され、既知の「ＩＮ」コマンドまたは「ＯＵＴ」コマンドを介してアクセスすることができる。デバイスドライバまたは他のソフトウェアアプリケーションが、入出力ポートを使用するハードウェアデバイスにアクセスするために、ＩＮコマンドおよびＯＵＴコマンドを、そのコマンドで指定されたハードウェアデバイス上の物理ポートまたはレジスタに、ソフトウェアを介して転送するか、その代わりに、そのコマンドを発行するデバイスドライバまたは他のアプリケーションから直接に、識別されたポートまたはレジスタに渡すことができる。いくつかのタイプのＣＰＵは、タスクセグメント内の入出力ビットマップを使用することによる、選択的なパススルーまたは直接アクセスを可能にし、この場合に、入出力ビットマップは、ソフトウェアを介して命令を渡せるアドレスと、物理ポートまたはレジスタに直接に命令を渡せるアドレスとを指定する。
【０１１１】
通常動作では、ハイパーバイザ６１３などの仮想マシンのハイパーバイザが、入出力命令をトラップするか、入出力命令をエミュレートして、仮想マシン環境内のソフトウェアに関して、基礎になるハードウェア６２０を正しく抽象化する。ハイパーバイザ６１３が、例えば保護ビットマップを使用して入出力命令をトラップする場合に、本発明の実施形態によって企図されるメカニズムの１つは、「穴」またはハイパーバイザがトラップしない入出力アドレスを設けるための、保護ビットマップの変更を必要とする。したがって、例えば、デバイスドライバとすることのできるエクステンション６１５が、特定の入出力アドレスを使用するハードウェアへの直接アクセスを要求する場合に、保護ビットマップは、エクステンション６１５からなど、その入出力アドレスを指定する、仮想マシンプロセス６１７内からの入出力命令を検出でき、この保護ビットマップは、トラップなしでハイパーバイザを介してこれらの入出力命令を渡すことを可能にすることができる。
【０１１２】
しかしながら、ハイパーバイザ６１３が、入出力命令をエミュレートする場合には、本発明によって企図されるメカニズムは、エミュレーションに先立ってチェックを行うことができ、特定のアドレスを指定する入出力命令に関して、エミュレーションが実行されないようにする、ハイパーバイザの変更を必要とする。したがって、例えば、エクステンション６１５が、特定の入出力アドレスにあるハードウェアへの直接アクセスを要求する場合に、ハイパーバイザ６１３は、受け取られた入出力命令で指定された入出力アドレスを検査することができ、受け取られた入出力命令が、そのエクステンションによって使用される特定のアドレスを指定している場合に、ハイパーバイザは、エミュレーションなしでその入出力命令をパススルーすることを可能にすることができる。その形で、エクステンションは、仮想マシン環境内からであっても、ハードウェアへの直接アクセスを有することができる。
【０１１３】
理解されるように、上で説明したメカニズムは、仮想マシン環境内からであっても、入出力ポートを介するハードウェアへの直接アクセスをエクステンションおよび他のソフトウェアアプリケーションに提供することができる。しかしながら、エクステンションまたは他のソフトウェアアプリケーションが、入出力ポートを介してハードウェアに直接にアクセスするように設計されておらず、その代わりに、そのようなハードウェアアクセスを実行するためにオペレーティングシステムに頼る場合に、本発明の実施形態によって企図されるメカニズムの１つは、仮想オペレーティングシステムプロセス６１１が、エクステンション６１５または、仮想オペレーティングシステムプロセスが入出力ポートを介してハードウェア６２０に直接にアクセスすることを必要とする他のソフトウェアアプリケーションからの要求を検出する場合に、その仮想オペレーティングシステムプロセス６１１が、その要求をハイパーバイザに渡すことができ、このハイパーバイザが、エクステンションまたは他のソフトウェアアプリケーションの代わりに適当な入出力命令を実行することができるようにする、ハイパーバイザ６１３の変更を提供する。その代わりに、仮想オペレーティングシステムプロセス６１１が、それ自体で入出力命令を実行することができ、ハイパーバイザ６１３が、上で詳細に説明したメカニズムを使用することによるなど、その命令をパススルーさせることができる。
【０１１４】
ハードウェアと通信するのにしばしば使用されるもう１つのメカニズムを、直接メモリアクセス（ＤＭＡ）と称する。当業者に既知のように、ＤＭＡは、デバイスドライバまたは他のソフトウェアアプリケーションが、ＣＰＵに負担をかけずにハードウェアデバイスとの間でデータを渡すことを可能にすることができる。具体的に言うと、ＤＭＡは、１つまたは複数の物理メモリセグメントからハードウェアデバイス自体の物理レジスタまたは類似する要素へのデータの転送を提供する。そのような転送は、専用のＤＭＡチップなど、コンピューティングデバイスの回路によって調整されるが、ＣＰＵによる調整を必要としない。
【０１１５】
一般に、ＤＭＡ要求は、オペレーティングシステムまたはソフトウェアアプリケーションによってエクステンションに提供されるサポートＡＰＩの一部とすることができる。しかしながら、上で説明した仮想サポートＡＰＩは、仮想マシン環境内で動作する仮想オペレーティングシステムプロセスによって提供することができるので、仮想マシン環境内から発するＤＭＡによって指定されるメモリアドレスは、ハードウェアデバイスが向けられる正しい物理アドレスでない場合がある。これは、複数の要因に起因する可能性があるが、この要因のうちで最も特筆すべきは、ハイパーバイザによって実行されるハードウェア抽象化の一部として、ＤＭＡアドレスがハイパーバイザによって変更される可能性があることである。その結果、ＤＭＡを正しく実行するために、仮想マシン環境内で正しい物理アドレスを使用することができる。
【０１１６】
本発明の実施形態によって企図される、ＤＭＡ用の正しい物理アドレスを提供するメカニズムの１つは、ハイパーバイザ６１３または仮想オペレーティングシステムプロセス６１１が、エクステンション６１５に、ハードウェアによるＤＭＡアクセスに適するメモリの領域を提供することを必要とする。さらに、悪意のあるＤＭＡ要求または不正なＤＭＡ要求に対する保護のために、ハイパーバイザ６１３は、保護されるべきアドレスをポイントするＤＭＡのすべてを、ブロックするか、他の形で正しいアドレスにそらせることもできる。保護されるアドレスは、例えば、ハイパーバイザ６１３がハードウェア６２０で最初に実行される場合などに前もって決定することができる。保護されるアドレスは、単純に、他のハードウェアデバイスとのＤＭＡ通信に必要なサポートを提供できない可能性があるメモリのアドレスとすることができる。もう１つの代替案として、保護されるアドレスは、現在のＤＭＡ要求に加わらないすべてのアドレスとすることができる。ＤＭＡでの保護されるアドレスの使用の防止は、しばしば、コンピューティングデバイス１００自体の専用のＤＭＡチップ、メモリバス、または類似する回路によって実装することができる。その場合に、ハイパーバイザ６１３は、ソフトウェア解決策を介してＤＭＡをブロックするかそらすことを試みるのではなく、これらのブロックについて知ることができ、これらを使用することができる。
【０１１７】
ＤＭＡに適するメモリアドレスをエクステンション６１５に供給するために、本発明の実施形態によって企図されるメカニズムの１つは、ハイパーバイザ６１３が、エクステンション６１５の動作を監視し、やがて現れるＤＭＡを検出することを必要とする。代替案では、仮想オペレーティングシステムプロセス６１１が、エクステンションの動作を監視し、関連情報をハイパーバイザ６１３に提供するか、仮想オペレーティングシステム自体が、やがて現れるＤＭＡを検出することができる。上で説明したように、エクステンションは、一般に、様々なリソースへのアクセスを得るのにサポートＡＰＩを使用する。したがって、やがて現れるＤＭＡは、仮想オペレーティングシステムプロセス６１１によって提供される仮想サポートＡＰＩを介してエクステンション６１５によって呼び出される機能を監視することによって検出することができる。ある既知の機能、例えば、メモリのブロックを確立する要求またはメモリの物理アドレスに関する要求が、一般に、ＤＭＡをセットアップするのに使用される。その結果、仮想サービスＡＰＩにこれらの機能を要求するエクステンションが、ＤＭＡを実行する準備をしている可能性が高いと判定することができる。
【０１１８】
エクステンション６１５によって行われる仮想サービスＡＰＩ機能呼び出しを継続的に監視するのではなく、ハイパーバイザ６１３または仮想オペレーティングシステムプロセス６１１は、一般にＤＭＡのセットアップに使用される既知の機能が呼び出された場合に不正命令を含むように仮想サポートＡＰＩを変更することによって、より効率的に可能なＤＭＡを検出することができる。そのような不正命令は、トラップを生成し、やがて現れるＤＭＡに対してハイパーバイザまたは仮想オペレーティングシステムプロセスに警告することができる。
【０１１９】
ハイパーバイザ６１３または仮想オペレーティングシステムプロセス６１１は、上で説明したメカニズムを使用することによるなど、やがて来るＤＭＡについて知ったならば、ＤＭＡを正しく進行することを可能にするメモリアドレスの適当な範囲をエクステンション６１５に供給することができる。いくつかの場合に、ハイパーバイザ６１３は、メモリアドレスの適当な範囲を提供できるようにするために、メモリスワッピングまたは類似するメモリ管理を実行することができる。代替案では、ハイパーバイザ６１３は、ホストコンピューティングデバイスの既知のスキャッタ／ギャザ能力に頼って、ＤＭＡを介してハードウェアデバイスに送られるかそれから受け取られる情報を、適当なメモリ範囲に置くことができる。しかしながら、エクステンション６１５は、一般にハイパーバイザ６１３によって実行される変換に起因して、普通でないアドレスを期待するので、上で説明したさらなる策謀が、エクステンションに悪影響を及ぼす可能性が高い。
【０１２０】
メモリアドレスがエクステンション６１５に供給されたならば、ＤＭＡが完了するまで、追加のプロセスがそのアドレスにあるメモリにアクセスしないようにする必要が生じる場合がある。当業者に既知のように、ＤＭＡに適する物理メモリは、一般に、コンピューティングデバイスの通常動作中にはマップアウトされない。しかしながら、仮想マシン環境内のメモリは、通常はハイパーバイザによって、ほぼ必ずマップアウトされる。その結果、仮想マシン環境内の他のプロセスに割り当てられるメモリについて通常は行われる必要がない形で、エクステンションに渡されるメモリアドレスを保護する必要がある可能性がある。そのような保護は、ハイパーバイザによって行うことができ、このハイパーバイザは、ＤＭＡが完了するまで、指定されたメモリ位置の「ピン止め」または「ピンダウン」と一般に称するメカニズムを使用することができる。
【０１２１】
もちろん、ＤＭＡが完了したならば、ハイパーバイザは、指定されたメモリ位置を解放または「ピン解除」することができる。ＤＭＡの完了は、上で詳細に説明した、やがて来るＤＭＡを検出できる形とよく似た形で検出することができる。例えば、ハイパーバイザ６１３または仮想オペレーティングシステムプロセス６１１は、エクステンション６１５によって呼び出される機能を監視することができる。指定されたメモリ位置の割当解除などの機能は、ＤＭＡが完了したことを示すことができ、これを、ハイパーバイザ６１３が指定されたメモリ位置をピン解除できることの表示として使用することができる。
【０１２２】
本発明の実施形態によって企図される、ハードウェアアドレスとの直接通信のさらなる方法は、仮想マシン環境内で実行されるコードへのハードウェア割込みの配送に関する。当業者に既知のように、ハードウェア割込みは、ハードウェアデバイスからの、適当なデバイスドライバまたは他のソフトウェアアプリケーションに送られる、一般にある種の応答または肯定応答を必要とする信号とすることができる。上述したように、ホストオペレーティングシステムは、特定のハードウェアデバイス用の、正しいデバイスドライバまたは他の制御ソフトウェアをサポートできない場合があるので、割込みを、仮想マシン環境内で実行されるエクステンションに向ける必要が生じる場合がある。例えば、図１のコンピューティングデバイス１００は、レガシデバイス１９９に接続されて図示されている。オペレーティングシステム１３４が、現代のオペレーティングシステムである場合に、このオペレーティングシステム１３４は、レガシデバイス１９９用のデバイスドライバを正しくサポートできない場合がある。したがって、コンピューティングデバイス１００のユーザがレガシデバイス１９９を使用することを可能にするために、デバイスドライバまたは類似する制御ソフトウェアを、仮想環境内で実行することができる。その結果、レガシデバイス１９９から受け取られるすべての割込みは、それらが仮想マシンプロセスに向けられ、デバイスドライバに渡されることを可能にされる場合に限って、正しく処理することができる。
【０１２３】
本発明の実施形態によって企図される、割込みをエクステンション６１５などのエクステンションに向けるメカニズムの１つは、受け取られた割込みをテーブルまたは類似する構造と比較して、仮想マシンプロセス６１７がその割込みを処理しなければならないか、その割込みをホストオペレーティングシステムプロセス６０１に渡さなければならないかを判定することを必要とする。具体的に言うと、単一ＣＰＵだけを有するコンピューティングデバイスでは、割込みは、仮想マシンプロセス６１７がそのＣＰＵで実行されている場合、またはホストオペレーティングシステムプロセス６０１がそのＣＰＵで実行されている場合のいずれかに受け取られる可能性がある。本メカニズムは、仮想マシンプロセス６１７がＣＰＵで実行されている間に割込みが到着する状況に適用することができる。その場合に、ハイパーバイザ６１３は、割込みの理由または宛先を判定することができる。ハイパーバイザ６１３は、割込みが、エクステンション６１５などの仮想マシン環境内のエクステンションによって適当に処理されるかどうかを、例えばテーブル内のルックアップを実行することによって判定することができる。割込みが、エクステンション６１５によって適当に処理される場合に、ハイパーバイザ６１３は、その割込みを仮想マシンプロセス６１７に渡し、これによってエクステンションに渡すことができる。割込みが、ホストオペレーティングシステムプロセス６０１に関連するエクステンションまたは他のソフトウェアアプリケーションによって適当に処理される場合には、ハイパーバイザ６１３は、ハードウェア６２０での仮想マシンプロセス６１７の実行を完了し、ホストオペレーティングシステムプロセスが、ハードウェア上で、その割込みに対して適当な形で実行を再開できるようにすることができる。
【０１２４】
ハイパーバイザ６１３は、割込みを仮想マシンプロセス６１７に渡す場合に、仮想オペレーティングシステムプロセス６１１との互換性を維持するために、割込みが来た割込み信号線の番号を変更することができる。したがって、割込み信号線をイネーブルする場合に、ハイパーバイザ６１３は、物理的割込み信号線に対応する割り込み信号線情報を検証することができる。次に、ハイパーバイザ６１３は、物理的割込み信号線とエミュレートされた割込み信号線の間で変換する。
【０１２５】
仮想マシンは、仮想マシンプロセス６１７がその上で実行されるハードウェア６２０と異なるハードウェアをエミュレートすることができるので、ハイパーバイザ６１３は、単一の仮想マシン命令を、ホストハードウェア上で複数の命令としてエミュレートする必要がある場合がある。例えば、仮想マシンが、それが実行される物理ＣＰＵと異なるタイプのＣＰＵをエミュレートしている場合に、エミュレートされるＣＰＵによって実行される場合に単一ＣＰＵサイクルだけを必要とする可能性がある命令が、物理ＣＰＵによって実行される場合に複数のＣＰＵサイクルを必要とする場合がある。その場合に、ハイパーバイザ６１３が、エミュレートされるＣＰＵとの互換性を維持するために、単一の形で物理ＣＰＵの複数のＣＰＵサイクルを扱うことが重要になる可能性がある。したがって、ハイパーバイザ６１３が、エミュレートされるＣＰＵの単一サイクルに対応する物理ＣＰＵの一連のサイクルの実行の途中である間にハードウェア割込みが到達する場合に、ハイパーバイザは、その一連のＣＰＵサイクルが完了するまで、その割込みを無視し、キューに入れ、あるいは他の形で遅らせることができる。
【０１２６】
本発明の実施形態によって企図される、仮想マシンプロセス内のエクステンションに割込みを向けるさらなるメカニズムは、ホストオペレーティングシステムプロセスが、仮想マシンプロセスへの制御の転送に先立って割込みを遅らせるか、割込みが受け取られる否や仮想マシンプロセスに制御を転送するか、仮想マシンプロセスへの適当なポインタを用いてホストプロセス内でそのエクステンションの実行を試みることを必要とする。上で説明したように、単一ＣＰＵだけを有するコンピューティングデバイスでは、割込みは、仮想マシンプロセス６１７がＣＰＵで実行されている場合、またはホストオペレーティングシステムプロセス６０１がＣＰＵで実行されている場合のいずれかに受け取られる可能性がある。本メカニズムは、ホストオペレーティングシステムプロセス６０１がＣＰＵで実行されている間に割込みが到着する状況に適用することができる。最初の問題として、ホストオペレーティングシステムは、割込みを適当なデバイスドライバに向ける事前定義の手順を有する可能性が高い。そのような手順は、例えば、デバイスドライバがロードされる場合など、ホストオペレーティングシステムのブートプロセス中に確立することができる。したがって、エクステンション６１５の呼び出しは、この事前定義の手順を活用することを試み、特定のハードウェアデバイスから受け取られた割込みを仮想マシンプロセス６１７に向けなければならないことをホストオペレーティングシステムプロセス６０１に示すことができる。
【０１２７】
その結果、エクステンション６１５に送られなければならない割込みが、ホストオペレーティングシステムプロセス６０１がＣＰＵで実行されつつある間に受け取られた場合に、ホストオペレーティングシステムプロセスは、他の割込みを受け取った場合に実行される手順に似るが、その割込みを処理する適当なソフトウェアが仮想マシンプロセス６１７内で実行中であることを判定できる点が異なる手順を実行することができる。ホストオペレーティングシステムプロセス６０１は、例えば割込みをディスエーブルし、１つまたは複数のタスクを完了し、仮想マシンプロセス６１７に実行を切り替え、その後、割込みを再イネーブルすることによって、エクステンション６１５に割込みを転送することを試みることができる。したがって、仮想マシンプロセス６１７は、割込みが再イネーブルされる場合にＣＰＵで実行されているので、割込みを、この仮想マシンプロセス６１７によって受け取り、上で詳細に説明した形で処理することができる。
【０１２８】
当業者に既知のように、ハードウェアデバイスは、一般に、２つの異なる種類の割込みすなわち、処理されるまでアクティブのままになる永久割込み（ｐｅｒｍａｎｅｎｔ  ｉｎｔｅｒｒｕｐｔ）と、ラッチをかけ、その後に終了することができる過渡割込み（ｔｒａｎｓｉｅｎｔ  ｉｎｔｅｒｒｕｐｔ）を使用することができる。永久割込みは絶対に非アクティブ化されないので、上述したメカニズムを使用して、仮想マシンプロセス６１７は、割込みが再イネーブルされるや否や、永久割込みを検出することができる。したがって、永久割込みに関して、仮想マシンプロセス６１７は、上で詳細に説明したメカニズムを使用して、元々その仮想マシンプロセスがＣＰＵで実行されつつある時に到着した場合と同一の形で割込みを処理することができる。しかしながら、過渡割込みの場合には、割込みが発生したことを示すことができるラッチが、元に戻される可能性がある。その結果、ラッチをかけ直すためにもう１つの割込みが発生しない限り、ホストオペレーティングシステムプロセス６０１がＣＰＵで実行されつつある間に割込みが発生した場合に、仮想マシンプロセス６１７は、その割込みについて絶対に知ることができない可能性がある。したがって、ホストオペレーティングシステムプロセス６０１は、仮想マシンプロセス６１７に実行を転送するのに先立って、発生した１つまたは複数の過渡割込みを追跡するか他の形で保管することができる。ホストオペレーティングシステムプロセス６０１は、その情報をハイパーバイザ６１３に渡して、過渡割込みが発生したことをハイパーバイザに知らせることができ、適当な場合に、過渡割込みの個数を供給することができる。仮想マシンプロセス６１７がＣＰＵで実行されるようになったならば、次にハイパーバイザ６１３は、過渡割込みをエミュレートすることができ、エクステンション６１５が、本質的にその過渡割込みに応答することを可能にする。ハイパーバイザ６１３は、過渡割込みのエミュレートを完了したならば、割込みを再イネーブルすることができる。
【０１２９】
いくつかの場合に、ハードウェア割込みは、上の手順が提供できる速度より高い速度で処理されるか応答されることを必要とする場合がある。その場合に、本発明の実施形態によって企図されるメカニズムは、ホストオペレーティングシステムプロセス６０１が、上で説明したメカニズムを使用して、割込みをディスエーブルし、１つまたは複数のタスクを完了することを試みるのではなく、エクステンション６１５などの仮想マシンプロセスで動作するエクステンションによって正しく処理される割込みが検出された場合に、即座に仮想マシンプロセス６１７に実行を転送することを必要とする。しかしながら、ハイパーバイザ６１３は、シングルスレッドである場合があり、これによって、ハイパーバイザが応答または他の情報を待っている場合に割込みに検出が遅れ、その結果、割込みのサービスが遅れる可能性がある。
【０１３０】
ハイパーバイザのシングルスレッドの性質に起因する遅れを回避するために、本発明の実施形態によって企図される上のメカニズムの変形形態は、ハイパーバイザ６１３が、マルチＣＰＵコンピューティングデバイスをエミュレートし、仮想オペレーティングシステムプロセス６１１が、マルチＣＰＵ環境で動作できることを必要とする。さらに、ハイパーバイザ６１３は、少なくとも１つのエミュレートされるＣＰＵが、割込みを受け入れられる状態で保存される形で、命令の実行を構成することができる。例えば、上述したように、仮想マシンプロセスにコマンドを渡し、その後、ホストオペレーティングシステムプロセスの基礎をキャッシングし、ハードウェア６２０上で仮想マシンプロセスを実行することによって、仮想マシンプロセス６１７をホストオペレーティングシステムプロセス６０１から呼び出すことができる。ハイパーバイザ６１３は、ホストオペレーティングシステムプロセス６０１から受け取ったコマンドを他のエミュレートされるＣＰＵに渡すことによって、１つのエミュレートされたＣＰＵを、割込みを受け入れられる状態で保存する。その結果、保存されたＣＰＵは、ホストオペレーティングシステムプロセス６０１からのコマンドを処理することを許可されないので、受け取られた割込みを即座に処理できる状態に留まることができる。
【０１３１】
その結果、基礎になるホストオペレーティングシステムプロセス６０１がハードウェア６２０で実行されつつある間に割込みが到着し、その割込みが短い待ち時間を必要とする場合に、ホストオペレーティングシステムプロセスは、できる限り早く仮想マシンプロセス６１７に制御を転送することができる。仮想マシンプロセス６１７がハードウェア６２０での実行を開始したならば、その仮想マシンプロセスの少なくとも１つのエミュレートされるＣＰＵが、割込みを受け入れられる状態である。したがって、他のエミュレートされるＣＰＵが、機能を実行している状態または応答を待っている状態であっても、割込みのために予約された少なくとも１つのエミュレートされたＣＰＵによって、割込みを効率的な形で処理することができる。ハイパーバイザ６１３および仮想オペレーティングシステムプロセス６１１は、上で詳細に説明した形で、エクステンション６１５などの適当なソフトウェアに割込みを渡すのに必要なステップを実行することができる。さらに、ハイパーバイザ６１３は、上述したように物理メモリのピン止めを必要とする場合があるので、割込みを受け取ったエミュレートされたＣＰＵは、別のエミュレートされたＣＰＵまたは別のプロセスに制御を返すのに先立って、割込みの処理を完了することを許可されることができる。その形で、少なくとも１つのエミュレートされるＣＰＵを、割込みの迅速な処理のために予約することができる。
【０１３２】
本発明の実施形態によって企図されるハードウェア割込みの短待ち時間処理を提供するもう１つのメカニズムは、ホストオペレーティングシステムプロセス６０１が、仮想マシンプロセス６１７への適当なデータポインタを用いて、エクステンション６１５から割り込みサービスルーチンのコードを取り出し、そのコード自体を実行することを必要とする。例えば、ホストオペレーティングシステムプロセス６０１は、仮想マシンプロセス６１７のメモリ空間の先頭から、適当な割込みサービスルーチンを見つけることができる。突き止められたならば、非常に短い待ち時間で割込みを処理するために、その割込みサービスルーチンを、ホストオペレーティングシステムプロセス６０１にコピーし、そこで実行することができる。
【０１３３】
割り込みサービスルーチンは、仮想マシンプロセス６１７のプロセス空間内で実行されることが意図されているので、ホストオペレーティングシステムプロセス６０１は、それらのルーチンをコピーし、実行する場合に、ルーチンが正しく動作できるようにするために、仮想マシンプロセス内へのデータポインタを提供することができる。例えば、ホストオペレーティングシステムプロセス６０１は、仮想マシンプロセス６１７内のメモリを参照するように、割り込みサービスルーチンの適当な命令またはページテーブルマッピングを変更することができる。既知のソフトウェアフォールト隔離技法を使用して、適当な命令を変更し、フォールト隔離の手段を提供することができる。当業者に既知のように、ソフトウェアの実行は、監視されるソフトウェアのコマンドの間に適当なコマンドを挿入することによって監視することができる。監視されるソフトウェアを再コンパイルする必要をなくすために、挿入されるコマンドを、コンパイル済みコードに挿入できる低水準コマンドとすることができる。例えば、特定のメモリ位置の内容をプロセッサのレジスタにコピーすることによって特定のメモリ位置にアクセスする低水準命令の前に、アドレスをアドレスの既知の範囲と比較することによるなど、アクセスされるメモリ位置のアドレスを検査する挿入された命令を置くことができる。メモリ位置が、不正な位置である場合、例えば、アドレスの適当な範囲の外である場合に、アクセス要求を適当なアドレスに置換するための変更を行うことができる。その形で、割り込み処理ルーチンが仮想マシンプロセス６１７ではなくホストオペレーティングシステムプロセス６０１内で実行されつつあるという事実にかかわりなく、正しいメモリ位置にアクセスするように各メモリアクセス命令を変更することができる。
【０１３４】
上で示したように、ソフトウェアフォールト隔離技法は、ホストオペレーティングシステムプロセス６０１内での直接の割り込み処理ルーチンの実行にかかわらずに、フォールト隔離の手段も提供する。例えば、ソフトウェアフォールト隔離の一態様は、書き込み命令が向けられる位置が正しい位置であることを保証するために、各メモリ書き込み命令の前に低水準命令を挿入することによって達成される。当業者に既知のように、ソフトウェア障害は、障害が、データが不正なメモリ位置に書き込まれることをもたらすので、しばしば、不安定性を引き起こす。さらに、そのような不正な書き込み命令は、検出が難しい可能性がある。というのは、データが書き込まれるアドレスが、直前の命令の完了まで決定されない場合があるからである。上述の命令をメモリ書き込みの直前に挿入することによって、そのような書き込み命令が向けられるメモリアドレスを、例えばメモリアドレスの既知の範囲と比較することによるなど、検査することができる。したがって、書き込みが既知の範囲の外のメモリ位置に向けられることの表示は、その書き込み命令が不正であり、不安定性を引き起こす可能性があることを示すことができる。その結果、その書き込み命令を、変更するか打ち切ることができ、フォールト隔離の手段を達成することができる。サンドボックス制御フロー、特権命令の使用、および類似物を含む、ソフトウェアフォールト隔離のさらなる態様を使用することもできる。上述を含むソフトウェアフォールト隔離の様々な態様に関する追加情報が開示されており（例えば、特許文献１参照）、この文献の内容は、その開示との一貫性を有する本明細書に含まれる教示または提案をさらに説明するために、その全体を参照によって本明細書に組み込まれる。
【０１３５】
しかしながら、あるコンピューティングデバイスが、複数の物理ＣＰＵを有することができ、その場合に、上のメカニズムのいくつかが不要になる場合がある。例えば、複数の物理ＣＰＵを有するコンピューティングデバイスでは、単一の物理ＣＰＵが、必ず仮想マシンプロセス６１７を実行していることができる。その場合に、本発明の実施形態によって企図されるメカニズムの１つは、エクステンション６１５などのエクステンションを必要とするすべての割込みを、仮想マシンプロセス６１７が常に実行されている物理ＣＰＵに向けるハードウェア割込みの制御メカニズムを必要とし、このメカニズムは、しばしば、コンピューティングデバイス自体の一部である専用回路とすることができる。仮想マシンプロセス６１７が、他のプロセスと物理ＣＰＵを共有するが、常に同一の物理ＣＰＵを共有する場合であっても、エクステンション６１５を必要とするすべての割込みをその物理ＣＰＵに向けることは、現在その物理ＣＰＵで実行されていない場合であっても適当な仮想マシンプロセスに割込みを転送する上述のメカニズムと組み合わされる場合に、最適の解決策を提供することができる。
【０１３６】
しかしながら、仮想マシンプロセス６１７が、複数の物理ＣＰＵのいずれかで実行中であることができる場合に、プロセッサ間メッセージを使用して、いずれかのプロセッサがハードウェア割込みに応答できるようにすることができる。例えば、仮想マシンプロセス６１７が、第１物理ＣＰＵで実行されており、エクステンション６１５によって処理できる割込みが、第２物理ＣＰＵに到着する場合に、第２物理ＣＰＵは、関連情報を第１物理ＣＰＵに通信して、エクステンションがそのハードウェア割込みを処理できるようにすることができる。当業者に既知のように、ある物理ＣＰＵから別の物理ＣＰＵにハードウェア割込みを物理的に転送することは、非常に難しくなる可能性がある。その結果、プロセッサ間メッセージを使用することによって、割込みが正しい物理ＣＰＵに達したかのように、割込みを処理することができる。
【０１３７】
本発明の原理を適用できる多数の可能な実施形態に鑑みて、添付図面に関して本明細書で説明した実施形態が、例示のみとして意図され、本発明の範囲を制限するものとして解釈されてはならないことを理解されたい。例えば、図示の実施形態のいくつかのソフトウェアの要素を、ハードウェアで実施することができ、逆も真であり、本発明の趣旨から逸脱せずに、図示の実施形態を配置および詳細において変更できることを、当業者は理解するであろう。同様に、仮想マシン環境に関して説明したメカニズムを、共通オペレーティングシステムの上で作成される仮想環境に適用可能であり、逆も真であることを理解されたい。例えば、仮想マシン環境に関して上述したソフトウェアフォールト隔離技法は、両方のプロセスが共通の基礎になるオペレーティングシステムを共有する場合に、仮想プロセスからホストプロセスにコピーされたエクステンションルーチンを含む、過度のコンテキスト切り替えが望ましくない可能性がある状況に同等に適用することができる。したがって、本明細書で説明した発明は、請求項およびその同等物の範囲に含めることができる物として、そのような実施形態のすべてを企図している。
【図面の簡単な説明】
【０１３８】
【図１】本発明の実施形態を実施できる例示的デバイスアーキテクチャを全般的に示すブロック図である。
【図２】本発明の実施形態による、エクステンションを隔離する例示的環境を全般的に示すブロック図である。
【図３】本発明の実施形態による、ユーザモードコンテキストへのアクセスを全般的に示すブロック図である。
【図４】本発明の実施形態による、ユーザモードコンテキストへの代替アクセスを全般的に示すブロック図である。
【図５】本発明の実施形態による、コヒーレント状態の作成を全般的に示す流れ図である。
【図６】本発明の実施形態による、コヒーレント状態の代替の作成を全般的に示す流れ図である。
【図７】本発明の実施形態による、仮想マシン内でホスティングされるエクステンションに物理ハードウェアへの直接アクセスを提供する例示的環境を全般的に示すブロック図である。
【符号の説明】
【０１３９】
１００  コンピューティングデバイス
１３０  システムメモリ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１２０  処理ユニット
１９０  ビデオインターフェース
１９５  出力周辺インターフェース
１９８  レガシインターフェース
１９６  プリンタ
１９７  スピーカ
１９９  レガシデバイス
１２１  システムバス
１４０  取外し不能不揮発性メモリインターフェース
１５０  取外し可能不揮発性メモリインターフェース
１６０  ユーザ入力インターフェース
１７０  ネットワークインターフェース
１７１  一般的なネットワーク接続
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１６１  マウス
１６２  キーボード
１８０  リモートコンピューティングデバイス
【図１】
2005322243.tif 000003
【図２】
2005322243.tif 000004
【図３】
2005322243.tif 000005
【図４】
2005322243.tif 000006
【図５】
2005322243.tif 000007
【図６】
2005322243.tif 000008
【図７】
2005322243.tif 000009