(57)【要約】  様々な実例において、仮想化ソフトウェアによるＶＭメモリへのアクセスが、ＶＭメモリ内のデータへの不適切なアクセスから保護するために、ＶＭのメモリを読み取るためのコマンド及び／又はＶＭメモリから読み取られたデータのうちの１個又は複数を有効にするためにホスト・コントローラの信頼されているファームウェアを使用して、保護される。有効化が失敗した場合、ファームウェアは、データを読み取ること及び／又はデータへのアクセスを仮想化ソフトウェアに提供することをやめることができる。データは、別のエンティティ、たとえば、仮想化環境内の又は外部の別のデバイス、へのホスト・コントローラを使用する接続の確立又は修正に関するＶＭからの要求コマンドを含み得る。仮想化ソフトウェアは、要求コマンドを使用して接続を容易にすることができる。ホスト・コントローラは、接続のための拡張可能ホスト・コントローラ・インターフェイス（ｘＨＣＩ）又は異なるタイプのインターフェイスを提供することができる。
2021532495.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンマネージャ（ＶＭＭ）からコマンドを受信するステップであって、前記コマンドが、周辺デバイスによる要求に対応し、計算デバイスに含まれるメモリであり前記計算デバイスを使用してインスタンス化された仮想マシンに割り当てられたメモリ内のメモリ・アドレスを指示し、前記計算デバイスが、ホスト・コントローラを備え、前記計算デバイスが、前記ホスト・コントローラを使用して前記周辺デバイスと通信可能に結合された、受信するステップと、
前記コマンドの前記受信に基づいて前記メモリ・アドレスからデータを読み取るステップと、
前記メモリ・アドレスから読み取られた前記データを、前記ホスト・コントローラに対応するホスト・コントローラ・ファームウェアによって、有効にするステップと、
前記有効にすることに基づいて前記メモリ・アドレスから読み取られた前記データへのアクセスを、前記ホスト・コントローラ・ファームウェアによって前記ＶＭＭに提供するステップと、
前記メモリ・アドレスから読み取られた前記データが有効にされたことを指示するコマンド完了イベントを前記ＶＭＭへ送るステップと
を含む、方法。
【請求項２】
前記データを有効にする前記ステップが、前記データによって表された１個又は複数の予約済みフィールドは前記ホスト・コントローラ・ファームウェアのコードによって定義された期待値を有すると判定するステップを含む、請求項１に記載の方法。
【請求項３】
前記データを有効にする前記ステップが、前記データによって表されたスロットＩＤは前記ホスト・コントローラ・ファームウェアのコードによって定義された所定の範囲内にあると判定するステップを含む、請求項１に記載の方法。
【請求項４】
前記コマンドが、前記メモリ・アドレス、及び前記メモリ・アドレスを使用して読み取られるべきデータ・サイズを含む、請求項１に記載の方法。
【請求項５】
前記データを有効にする前記ステップが、
前記データによって表された要求タイプを識別するステップと、
前記要求タイプは有効なグループの要求タイプ内にあると判定するステップと
を含む、請求項１に記載の方法。
【請求項６】
前記ＶＭＭからの前記コマンドの前記受信が、ホスト・コントローラへの前記周辺デバイスの接続を検出することに基づき、前記データが、エンティティの接続能力に対する前記ＶＭによる要求を含む、請求項１に記載の方法。
【請求項７】
仮想マシンマネージャ（ＶＭＭ）からコマンドを受信するステップであって、前記コマンドが、計算デバイスに含まれるメモリであり仮想マシンに割り当てられたメモリ内のメモリ・アドレスを指示する、受信するステップと、
前記ＶＭＭから前記受信されたコマンドを、ホスト・コントローラ・ファームウェアによって、有効にするステップと、
前記コマンドの前記受信に基づいて前記メモリ・アドレスからデータを読み取るステップと、
前記有効にすることに基づいて前記メモリ・アドレスから読み取られた前記データへのアクセスを、前記ホスト・コントローラ・ファームウェアによって前記ＶＭＭに提供するステップと、
前記コマンドが有効にされたことを指示するコマンド完了イベントを前記ＶＭＭへ送るステップと
を含む、方法。
【請求項８】
前記メモリ・アドレスから読み取られた前記データを、前記ホスト・コントローラ・ファームウェアによって、有効にするステップをさらに含み、前記データへのアクセスを前記ＶＭＭに前記提供することがさらに、前記データを前記有効にすることに基づく、請求項７に記載の方法。
【請求項９】
前記データが、コマンド転送要求ブロックを表す、請求項７に記載の方法。
【請求項１０】
前記コマンドの有効にする前記ステップが、前記コマンドは前記ＶＭからのメモリ読み取り要求を指示するドアベル・イベントに関連していると判定するステップを含む、請求項７に記載の方法。
【請求項１１】
前記メモリ・アドレスの前記読み取りが、仮想マシン・メモリの直接メモリ・アクセスを使用して前記ホスト・コントローラ・ファームウェアによって実行される、請求項７に記載の方法。
【請求項１２】
前記ホスト・コントローラ・ファームウェアが、前記計算デバイスに含まれたホスト・コントローラのものであり、前記ＶＭＭが、前記メモリ・アドレスから読み取られた前記データを使用して、前記ホスト・コントローラを介する前記仮想マシンと周辺デバイスとの間の接続を確立又は修正する、請求項７に記載の方法。
【請求項１３】
仮想マシンマネージャ（ＶＭＭ）であって、
計算デバイスに含まれるメモリであり仮想マシンに割り当てられたメモリ内のメモリ・アドレスを指示するコマンドをホスト・コントローラ・ファームウェアに送ること、
前記メモリ・アドレスから読み取られたデータ又は前記コマンドのうちの１個又は複数の、前記ホスト・コントローラ・ファームウェアによる、有効化を示すコマンド完了イベントを受信すること、及び、
前記メモリ・アドレスから読み取られた前記データを処理すること
を行うために前記計算デバイスの１個又は複数のプロセッサを使用して実行される仮想マシンマネージャ（ＶＭＭ）と、
ホスト・コントローラであって、
前記ＶＭＭから前記コマンドを受信すること、
前記メモリ・アドレスから読み取られたデータ又は前記コマンドのうちの１個又は複数の前記有効化を実行すること、及び
前記コマンド完了イベントを前記ＶＭＭに送ること
を行うためのホスト・コントローラと
を備えた、システム。
【請求項１４】
前記ＶＭＭがさらに、前記ホスト・コントローラからドアベル・イベントを受信し、前記コマンドを前記送ることが前記ドアベル・イベントに基づく、請求項１３に記載のシステム。
【請求項１５】
前記コマンドが、前記メモリ・アドレス、及び前記メモリ・アドレスを使用して前記ホスト・コントローラによって読み取られるべきデータ・サイズを含む、請求項１３に記載のシステム。
【請求項１６】
前記有効化が、前記データによって表された１個又は複数の予約済みフィールドは前記ホスト・コントローラ・ファームウェアのコードによって定義された期待値を有すると判定する、請求項１３に記載のシステム。
【請求項１７】
前記有効化が、前記データによって表されたスロットＩＤは前記ホスト・コントローラ・ファームウェアのコードによって定義された所定の範囲内にあると判定する、請求項１３に記載のシステム。
【請求項１８】
前記ＶＭＭがさらに、
仮想マシン・メモリ・アドレスを指示する付加的コマンドを前記ホスト・コントローラ・ファームウェアに送ることと、
失敗を示す付加的コマンド完了イベントを、前記ホスト・コントローラ・ファームウェアによって、受信して、前記仮想マシン・メモリ・アドレスから読み取られたデータ又は前記付加的コマンドのうちの１個又は複数を有効にすることと
を行うように構成された、請求項１３に記載のシステム。
【請求項１９】
前記システムが、自律型車両と共に含まれる、請求項１３に記載のシステム。
【請求項２０】
前記ＶＭＭが、仮想機能を前記メモリ・アドレスにマップし、前記コマンド内に前記メモリ・アドレスを含める、請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
仮想マシン・メモリの安全なアクセスに関するものである。
【背景技術】
【０００２】
仮想化は、複数の仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）−オペレーティング・システム・インスタンス（ＯＳＩ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｓｔａｎｃｅｓ）をホストするためにしばしば使用される−が単一のホスト・システム内で同時に実行することを可能にする。ホスト・システムにホスト・コントローラによって提示されたデフォルト・インターフェイス（インターフェイスの仮想化を有さない）は、物理機能（ＰＦ：Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）、又はホスト・コントローラ・インターフェイスを含み得る。ホスト・コントローラ・インターフェイスの例は、ユニバーサル・シリアル・バス（ＵＳＢ：Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ファイアーワイヤ、ブルートゥース、イーサネット（登録商標）、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、又は他のタイプの通信を含む。たとえば、拡張可能ホスト・コントローラ・インターフェイス（ｘＨＣＩ：ｅＸｔｅｎｓｉｂｌｅ  Ｈｏｓｔ  Ｃｏｎｔｒｏｌｌｅｒ  Ｉｎｔｅｒｆａｃｅ）が、ＵＳＢ通信をサポートするために使用され得る。ホスト・コントローラ・インターフェイスの仮想化は、複数の仮想機能（ＶＦ：Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）がＰＦを共用することを可能にする。ハードウェア要件を最小限に抑えるために、ＶＦによって提示される物理インターフェイスは、通常は、対応するＰＦによって提示されたそれのサブセットのみを含み、ＶＦインターフェイスの部分をエミュレートしてギャップを埋めるために仮想化ソフトウェアに依存する。
【０００３】
従来の方法で、仮想化ソフトウェアは、ＶＦを使用してＶＭと、別のエンティティ、たとえば、ホスト・システム内の別のエンティティ（たとえば、別のＶＭ）、又はホスト・システム外部のエンティティ（たとえば、ハードウェア・デバイス）、との接続を容易にするために使用され得る。たとえば、仮想化ソフトウェアは、ＶＦを使用する接続の確立、又はＶＦを使用する既存の接続の修正においてＶＭを支援することができる。接続を容易にするために、仮想化ソフトウェアは、ＶＭによって要求された情報、たとえば、接続プロパティ、を示すＶＭのメモリからのデータを読み取り得る。ｘＨＣＩの実例では、データは、新しく接続されたデバイスのデバイス・プロパティを要求するために使用されるコマンド転送要求ブロック（ＴＲＢ：Ｔｒａｎｓｆｅｒ  Ｒｅｑｕｅｓｔ  Ｂｌｏｃｋ）データでもよい。これは、仮想化ソフトウェアが不正侵入を受けた場合に、悪意のある行為者がホスト・コントローラ・インターフェイスを介して任意のＶＭに割り当てられたメモリを読み取ることが可能になり得るという点で、セキュリティ・リスクをもたらす。たとえば、ＶＭメモリのマッピングを担う仮想化ソフトウェアの構成要素は、メモリ内の無許可の位置にアクセスするために、マッピングを操作し得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示は、一部において、ＶＦを使用してＶＭと、別のエンティティとの間の接続を容易にするために仮想化ソフトウェアによってＶＭメモリへのアクセスを保護することに関する。従来の手法とは対照的に、ホスト・コントローラの信頼されているファームウェアは、ＶＭメモリ内のデータへの不適切なアクセスから保護するために、ＶＭのメモリを読み取るためのコマンド及び／又はＶＭメモリから読み取られたデータのうちの１個又は複数を有効にし得る。有効化が失敗した場合、ファームウェアは、データを読み取ること及び／又はデータへのアクセスを仮想化ソフトウェアに提供することをやめることができる。したがって、仮想化ソフトウェアが不正侵入を受けた場合、悪意のある行為者は、ＶＭメモリに勝手にアクセスすることを阻止され得る。
【０００５】
データを読むために、仮想化ソフトウェアの１個又は複数の仮想マシン・マネージャ（ＶＭＭ：ｖｉｒｔｕａｌ  ｍａｃｈｉｎｅ  ｍａｎａｇｅｒ）は、データにアクセスするために読み取るためのメモリ位置を指示するホスト・コントローラの信頼されたファームウェアへの読み取りコマンドを送ることができる。ホスト・コントローラ・ファームウェアは、読み取りコマンド及び／又はＶＭメモリから読み取られたデータを有効にすることができる。たとえば、ホスト・コントローラ・ファームウェアは、読み取りコマンドが対応するＶＭのコマンド・リングのドアベル・イベントとマッチするということを確認する、それが、読み取りコマンドを受信するより前に、ドアベル・イベントをＶＭＭに送るということを確認する、及び／又はコマンドによって明示されたメモリ・サイズが有効であるということをチェックすることができる。さらなる実例として、ホスト・コントローラ・ファームウェアは、データを読み取り、データが適切なフォーマットである及び／又は適切な情報若しくはパラメータを含むことを確認することができる。コマンド及び／又はデータが有効ではない（たとえば、無効と判定された）場合、ホスト・コントローラは、データにアクセスするためにＶＭＭに提供するのをやめることができる。
【０００６】
仮想マシン・メモリの安全なアクセスのための本システム及び方法について、添付の図面を参照して、以下に詳しく説明する。
【図面の簡単な説明】
【０００７】
【図１】本開示のいくつかの実施例による、メモリ内のデータへの仮想化ソフトウェアによるアクセスを有効にするための動作環境の一実例の図である。
【図２】本開示のいくつかの実施例による、メモリ内のデータへの仮想化ソフトウェアによるアクセスを有効にするためのプロセスの一実例の流れ図である。
【図３】本開示のいくつかの実施例による、仮想化ソフトウェアからの読み取りコマンドに応答してＶＭメモリから読み取られたデータを有効にするための方法の一実例の流れ図である。
【図４】本開示のいくつかの実施例による、ＶＭメモリを読み取るための仮想化ソフトウェアからのコマンドを有効にするための方法の一実例の流れ図である。
【図５】本開示のいくつかの実施例による、仮想化ソフトウェアがホスト・コントローラ・ファームウェアを使用してＶＭメモリからデータを読み取るための方法の一実例の流れ図である。
【図６】本開示のいくつかの実施例による、メモリ内のデータへの仮想化ソフトウェアによるアクセスを有効にするのに適した例示的コンピューティング環境のブロック図である。
【発明を実施するための形態】
【０００８】
システム・メモリ内のデータへの不適切なアクセスから保護するために、ホスト・コントローラの信頼されているファームウェアを使用してＶＭのメモリ（たとえば、ＶＭ専用の若しくはＶＭに割り当てられたシステム・メモリ）を読み取るためのコマンド及び／又はＶＭメモリから読み取られたデータのうちの１個又は複数を有効にすることに関して、システム及び方法が、開示される。結果として、仮想化ソフトウェアが不正侵入を受けた場合に、悪意のある行為者は、ＶＭメモリに勝手にアクセスすることを阻止され得る。
【０００９】
様々な実施例において、仮想化ソフトウェアの１個又は複数の仮想マシン・マネージャ（ＶＭＭ）及びＶＦが、ＶＭと、別のエンティティ（たとえば、外部ＶＭ、外部デバイス）、たとえば、ホスト・システム内の別のエンティティ（たとえば、別のＶＭ）、又はホスト・システム外部のエンティティ、との間の接続を容易にするために使用され得る。ＶＭＭは、ホスト・システムのハイパーバイザを含んでも含まなくてもよい。接続を容易にするために、ＶＭは、エンティティに関するＶＭＭからの通知を受信し得る。たとえば、ユーザは、ＵＳＢデバイスをｘＨＣＩコントローラに接続することができ、そして、ｘＨＣＩコントローラは、次いで適切なＶＭに通知する、新しいデバイスをＶＭＭに通知することができる。通知に応答して、ＶＭは、それがＶＭのために指定された基本的なシステム又はデバイスのメモリ内のデータとして記憶する、ＶＭＭを対象とするコマンドを提供することができる。データを読み取るために、ＶＭＭは、データにアクセスするために読み取るためのメモリ位置を指示するホスト・コントローラの信頼されているファームウェアへの読み取りコマンドを送ることができる。
【００１０】
本開示のいくつかの態様において、ホスト・コントローラ・ファームウェアは、読み取りコマンドを有効にすることができる。たとえば、ホスト・コントローラ・ファームウェアは、その読み取りコマンドは対応するＶＭのコマンド・リングのドアベル・イベントとマッチするということを確認することができる。もう１つの実例として、ホスト・コントローラ・ファームウェアは、それが、コマンドの受信より前に、ドアベル・イベントをＶＭＭに送る（たとえば、ＶＭＭに指示してＶＭのコマンド・リングにおけるコマンドの処理を助けるために）ことを確認することができる。もう１つの実例として、ホスト・コントローラ・ファームウェアは、コマンドによって指定されたメモリ・サイズが有効であることをチェックすることができる（たとえば、ＴＲＢは、１６バイトでもよく、より大きな又は小さなサイズは、無効なコマンドを示し得る）。コマンドが有効ではない場合、ホスト・コントローラ・ファームウェアは、そのメモリ位置を読み取ること及び／又はそのメモリ位置から読み取られたデータへのアクセスをＶＭＭに提供することをやめることができる。
【００１１】
本開示のさらなる態様において、ホスト・コントローラ・ファームウェアがコマンドを有効にすることに加えて又はその代わりに、ホスト・コントローラ・ファームウェアは、そのメモリ位置から読み取られたデータを有効にすることができる。たとえば、ホスト・コントローラ・ファームウェアは、データを読み取り、データが適切なフォーマットである及び／又は適切な情報若しくはパラメータを含むことを確認することができる。これは、要求タイプ・フィールドが有効値を有する、１個若しくは複数の予約済みフィールドが期待値を有する、スロット識別子（ＩＤ）が所定の範囲内にある、及び／又はデータが定義済みフォーマットであることをチェックすることを含み得る。ｘＨＣＩインターフェイスの実例において、これは、ＴＲＢタイプ・フィールドが有効な範囲内にある、１個若しくは複数の予約済みフィールドがゼロと等しい、スロットＩＤが所定の範囲内にある、及び／又はデータがＴＲＢフォーマットであることをチェックすることを含み得る。読み取られたデータが有効ではない場合、ホスト・コントローラ・ファームウェアは、そのメモリ位置から読み取られたデータへのアクセスをＶＭＭに提供するのをやめることができる。
【００１２】
任意の実例において、コマンド及び／又はデータが有効ではない（たとえば、無効と判定された）場合、ファームウェアは、コマンドの失敗を示すコマンド完了イベント（たとえば、ＣＣｏｄｅ＝０）をＶＭＭに提供することができる。コマンド及び／又はデータが有効にされた場合、ホスト・コントローラ・ファームウェアは、データをＶＭＭメモリにコピーすることなどによって、データへのアクセスをＶＭＭに提供することができる。さらに、ホスト・コントローラ・ファームウェアは、コマンドの成功を指示するコマンド完了イベント（たとえば、ＣＣｏｄｅ＝１）をＶＭＭに提供することができる。これは、それがＶＭＭメモリからデータを読み取ることができることをＶＭＭに指示し得る。
【００１３】
ここで図１を参照すると、図１は、本開示のいくつかの実施例による、メモリ内のデータへの仮想化ソフトウェアによるアクセスを有効にするための動作環境１００の一実例の図である。本明細書に記載されたこの及び他の配置は、単に実例として説明されている、ということを理解されたい。他の配置及び要素（たとえば、マシン、インターフェイス、機能、順番、機能のグループ分けなど）が、示されているものに加えて又はその代わりに使用され得、いくつかの要素は、ともに省略され得る。さらに、本明細書に記載の要素の多数は、個別の若しくは分散された構成要素として又は他の構成要素と併せて、並びに任意の適切な組合せ及び位置で、実装され得る機能エンティティである。エンティティによって実行されるものとして本明細書に記載された様々な機能は、ハードウェア、ファームウェア、及び／又はソフトウェアによって実施され得る。たとえば、様々な機能は、メモリに記憶されたプロセッサ実行命令によって実施され得る。
【００１４】
動作環境１００は、特に、ホスト・システム１０２、及び外部デバイス１３０を含み得る。動作環境１００は、たとえば、図６の１個又は複数の計算デバイス６００を使用して実装され得る。ホスト・システム１０２は、ＶＭＭ１０４、ホスト・コントローラ・ファームウェア／ハードウェア１０６（「ホスト・コントローラ１０６」又は「ホスト・コントローラ・ファームウェア１０６」とも呼ばれる）、ＶＭ１０８、ＶＭ１１０、ＶＭ１１４、ＶＭ１１６、及びメモリ１１８を含み得る。ＶＭＭ１０４は、ＶＭＭメモリ１３４、インターフェイス・マネージャ１３６、通信プロセッサ１３８、及びメモリ・マッパ１４０を含み得る。ホスト・コントローラ・ファームウェア１０６は、バリデータ１４２、通信プロセッサ１４４、及びインターフェイス・マネージャ１４６を含み得る。メモリ１１８は、ＶＭメモリ１２０、ＶＭメモリ１２２、ＶＭメモリ１２４、及びＶＭメモリ１２６を含み得る。
【００１５】
ホスト・システム１０２は、１個又は複数の仮想環境をホストするように構成され得る。仮想環境は、その実例には１個又は複数のＶＭＭ１０４が含まれ得る、仮想化ソフトウェアによって管理され得る。ＶＭＭ１０４は、ホスト・システム１０２のハイパーバイザを含んでも含まなくてもよい。ハイパーバイザは、仮想環境の任意の数のＶＭ、たとえば、ＶＭ１０８、１１０、１１４、若しくは１１６（たとえば、ゲストＶＭ）、及び／又は仮想化サービス（たとえば、ＶＭＭ１０４）を作成及び実行し得る。
【００１６】
ＶＭＭ１０４は、数ある潜在的な機能の中でも特に、ＶＦを使用して、ホスト・コントローラ１０６を介してＶＭ、たとえば、ＶＭ１０８、と別のエンティティとの接続を容易にする（たとえば、ｘＨＣＩ対応サーバを使用して）ように構成され得る。他のエンティティの実例には、ホスト・システム１０２内のエンティティ（たとえば、ＶＭ１１６）、又はホスト・システム外部のエンティティ（たとえば、外部デバイス１３０）が含まれる。ＶＭＭ１０４のインターフェイス・マネージャ１３６は、ＶＭＭ１０４への及びＶＭＭ１０４からの通信を管理するように構成され得る。ＶＭＭ１０４の通信プロセッサ１３８は、通信、たとえば、ＶＭメモリを読み取るための読み取りコマンド、を生成するように及び／又は受信された通信、たとえば、ドアベル・イベント若しくはＶＭからのＶＭＭメモリ１３４内の要求コマンド、を処理するように構成され得る。ＶＭＭ１０４のメモリ・マッパ１４０は、ＶＭのメモリからデータを読み取るための読み取りコマンドのためのメモリ１１８（たとえば、ＶＭ１０８のＶＭメモリ１２０）内の対応するメモリ・アドレスにＶＦ又はＶＭに対応するデータをマップするように構成され得る。
【００１７】
数ある潜在的機能の中でも特に、ホスト・コントローラ１０６は、ＶＭと他のエンティティとの接続のためのインターフェイスを提供する、並びにＶＭＭ１０４からの読み取りコマンド及び／又はＶＭメモリから読み取られたデータを有効にするように構成され得る。たとえば、ホスト・コントローラ１０６のインターフェイス・マネージャ１４６は、ホスト・コントローラ１０６への及びそこからの通信を管理するように構成され得る。ホスト・コントローラ１０６の通信プロセッサ１４４は、受信された通信、たとえば、ＶＭからのドアベル・イベント、ＶＭＭ１０４からの読み取りコマンド、及び／又は読み取りコマンド、たとえば、ＶＭからの要求コマンド、に基づいてＶＭメモリから読み取られたデータ、を処理するように構成され得る。ホスト・コントローラ１０６の通信プロセッサ１４４はまた、通信、たとえば、ＶＭＭ１０４のドアベル・イベント、を生成するように構成され得る。通信プロセッサ１４４によって実行される処理のうちの少なくともいくらかは、本明細書に記載のように、ホスト・コントローラ１０６のバリデータ１４２を使用して読み取りコマンド及び／又はＶＭのＶＭメモリから読み取られたデータを有効にすることができる。有効にされた後は、ホスト・コントローラ１０６のインターフェイス・マネージャ１４６は、ＶＭと別のエンティティとの接続の確立及び／又は修正において使用するためにＶＭＭメモリ１３４にデータを提供し得る。インターフェイス・マネージャ１４６は、ＶＭＭ１０４の使用（たとえば、データ転送関連作業のための）を必要とせずに接続をホストするために、ＶＭ及び他方のエンティティと直接通信することができる。
【００１８】
ホスト・システム１０２は、１個又は複数のシステム・オン・チップ（ＳｏＣ：Ｓｙｓｔｅｍ−ｏｎ−Ｃｈｉｐ）及び／又はグラフィック・プロセッシング・ユニット（ＧＰＵ：Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含み得るが、これらに限定されない、１個又は複数の集積回路（ＩＣ）に実装され得る。ホスト・システム１０２は、ＶＭがホスト・コントローラ・インターフェイスを使用して別のエンティティと通信する、任意の適用において一般に使用され得る。いくつかの実例では、ホスト・システム１０２は、電子制御装置（ＥＣＵ：Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）などの組み込みシステムの少なくとも一部を形成し得る。ホスト・システム１０２は、たとえば、非自律型車両、半自律型車両（たとえば、１個又は複数の高度運転者支援システム（ＡＤＡＳ：ａｄｖａｎｃｅｄ  ｄｒｉｖｅｒ  ａｓｓｉｓｔａｎｃｅ  ｓｙｓｔｅｍ）における）、ロボット、倉庫車両、オフロード車両、飛行船舶、ボート、及び／又は他の車両タイプに組み込まれ得る。ホスト・システム１０２は、たとえば、１個又は複数のデバイスの加速装置、ブレーキ、及び／又は機能の制御装置を決定及び／又は運搬する（たとえば、ホスト・コントローラ１０６を使用して）ために、ＶＭ１０８、１１０、１１４、又は１１６を使用し得る。これは、ＡＤＡＳ、ロボット工学（たとえば、ロボットのための進路プランニング）、航空システム（たとえば、ドローン又は他の航空機のための進路プランニング）、船舶システム（たとえば、ボート又は他の水上船舶のための進路プランニング）、及び／又は他の技術のために使用され得る。
【００１９】
ホスト・システム１０２のＶＭ１０８、１１０、１１４、及び１１６のそれぞれは、仮想計算デバイスでもよい。ＶＭ１０８、１１０、１１４、及び１１６のそれぞれは、メモリ１１８において別個の能力及び作動アドレス空間を有し得る。たとえば、ＶＭ１０８、１１０、１１４、及び１１６は、ＶＭメモリ１２０、ＶＭメモリ１２２、ＶＭメモリ１２４、及びＶＭメモリ１２６にそれぞれ対応するそれぞれのアドレス空間を有し得る。メモリ１１８は、１個又は複数の物理メモリ・デバイスを指し得、そして、ハイパーバイザ及び／又はＶＭＭ１０４は、別個のアドレス空間を実施しながら物理デバイスを共用するためのＶＭ１０８、１１０、１１４、及び１１６の能力をサポートする責任を負い得る。いくつかの実例では、各ＶＭは、ハイパーバイザ及び／又はＶＭＭ１０４によってサポートされる異なるパーティションにある。
【００２０】
ＶＭ１０８、１１０、１１４、又は１１６のうちの１個又は複数は、ホスト・コントローラ１０６を介して周辺デバイス（たとえば、外部デバイス１３０）及び構成要素との通信を受信及び提供することができる。外部デバイス１３０の実例には、ホスト・コントローラ・インターフェイスを介してＶＭと通信する能力を有する任意のデバイス、たとえば、ＥＣＵ、ＵＳＢドライブ、カメラ、スマートフォン、ＶＭ、ラップトップ、パーソナル・コンピュータ、ネットワーク・デバイス、周辺デバイス、クライアント・デバイスなど、が含まれる。各ＶＭは、その実例はＬｉｎｕｘ、Ａｎｄｒｏｉｄ、ＧＥＮＩＶＩ、ＱＮＸなどの配備を含む、ゲストＯＳなどのＯＳＩを備え得る。自律運転実装形態の特定の実例として、ゲストＯＳのうちの１つは、車載インフォテインメント（ＩＶＩ：Ｉｎ−Ｖｅｈｉｃｌｅ  Ｉｎｆｏｔａｉｎｍｅｎｔ）システム、別の車両クラスタ、別のヘッド・アップ・ディスプレイ（ＨＵＤ：Ｈｅａｄｓ−Ｕｐ−Ｄｉｓｐｌａｙ）システム、並びにさらに別のＡＤＡＳ及び／又は自律運転システムを制御し得る。この機能性を実装するために使用される任意の数の通信が、ホスト・コントローラ１０６によって提供されるインターフェイスを介して提供され得る。
【００２１】
様々な実例では、ＶＭ１０８、１１０、１１４、及び１１６のそれぞれは、ＶＭが任意の数のコマンド提供し得る先のコマンド・リングを有し得る。各ＶＭは、メモリ１１８内のＶＭのメモリ（たとえば、アドレス空間）においてコマンドを提供し得る。たとえば、ＶＭ１０８は、ＶＭ１０８に割り当てられるＶＭメモリ１２０へのコマンドを提供し得る。そのようなコマンドの一実例には、要求コマンドが含まれ、要求コマンドは、ＶＭが、別のデバイス、たとえば、外部デバイス１３０若しくは別のＶＭ又は論理デバイス若しくは構成要素、への接続を確立及び／又は修正するために、接続及び／又はデバイス能力（たとえば、外部デバイス１３０の）に関する情報を要求するために使用することができる。ＶＭＭ１０４及び／又はハイパーバイザは、接続を修正及び／又は確立するために要求コマンドを使用することができる。一実例として、外部デバイス１３０が、デジタル・カメラである場合、要求コマンドは、どのようなフォーマット又は転送をデジタル・カメラがサポートするかを指示し得る。
【００２２】
要求コマンドは、異なるフォーマットでもよく、並びに／又はホスト・コントローラ１０６によって実装されたコントローラ・インターフェイス及び／若しくは他の接続基準に応じて異なるタイプの情報を含み得る。たとえば、コントローラ・インターフェイスがｘＨＣＩに基づく場合、コマンドはＴＲＢデータを含み得る。ＴＲＢデータは、メモリ内に構築されたデータ構造体の形でもよく、ＴＲＢタイプ・フィールド、１個又は複数の予約済みフィールド、及びスロットＩＤなどの情報を表し得る。各ＶＦ（及びＶＭ）は、スロットＩＤを使用してスロットを割り当てられ得る。スロットは、デバイス全体に関する又はデバイスのすべてのエンドポイントに影響する情報を含むスロット・コンテキスト・データ構造体を含むスロット・コンテキスト・アドレスを有し得る。ＶＭＭ１０４は、スロット・コンテキスト内のＰＦにおいて、このスロット・コンテキスト・アドレス及びプログラムを読み取り得る。
【００２３】
セキュリティ強化のために、ＶＭＭ１０４及び／又はハイパーバイザは、コマンド・リング処理のためにＶＭのメモリを直接読み取るための能力を有さなくてもよい。たとえば、仮想化ソフトウェアが不正侵入を受けた場合、ＶＭＭ１０４は、メモリ１１８内の及び／又は特定のＶＭのメモリ内の任意の位置から読み取ることができ得る。その代わりとして、ＶＭから要求コマンドを読み取るために、ＶＭＭ１０４のインターフェイス・マネージャ１３６は、読み取りコマンドをホスト・コントローラ１０６に提供することができ、ホスト・コントローラ１０６のインターフェイス・マネージャ１４６は、読み取りコマンドを受信し、それに応答して、１個又は複数のコントローラ直接メモリ・アクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）を使用してＶＭメモリからデータを読み取ることができる。ホスト・コントローラ１０６のインターフェイス・マネージャ１４６はさらに、ＶＭＭ１０４のインターフェイス・マネージャ１３６によって読み取られ得る、ＶＭＭメモリ１３４へのデータの提供（たとえば、書き込み）などによる、データへのアクセスをＶＭＭ１０４に提供することができる。ＶＭＭ１０４は、次いで、通信プロセッサ１３８を使用してコマンドを処理して接続を容易にすることができる。ＶＭＭメモリ１３４は、ＶＭＭ１０４内にあるものとして示されているが、ＶＭＭ１０４の外部でもよい。さらにＶＭＭメモリ１３４は、メモリ１１８に及び／又はホスト・システム１０２の様々な他の構成要素に含まれ得る。ＶＭＭメモリ１３４は、一般に、ＶＭＭ１０４のインターフェイス・マネージャ１３６にアクセス可能なメモリ位置を指し得る。
【００２４】
ＶＭＭ１０４は、少なくともいくつかの仮想化サービスをＶＭ１０８、１１０、１１４、及び１１６のそれぞれに提供するように構成され得る。これは、ＶＭ１０８、１１０、１１４、及び１１６のそれぞれの能力及び作動レジスタ空間をトラップするＶＭＭ１０４を含み得る。いくつかの実施例において、ＶＭＭ１０４は、ＶＭ１０８、１１０、１１４、及び１１６のルート・ポート・レベル仮想化を実行するように構成され、そこで、すべてのデバイスは、１個のルート・ポートに接続され得、その中で１個のゲスト・オペレーティング・システムに割り当てられ得る。ＶＭＭ１０４はまた、ＶＭ１０８、１１０、１１４、及び１１６のそれぞれの物理機能及びコマンド・リングを管理し得る。いくつかの実施例において、ＶＭＭ１０４は、ＶＦがホスト・コントローラ１０６の能力及び作動レジスタ空間にアクセスしようとしているときにはいつでも、インターフェイス・マネージャ１３６を介して通知され得る。ＶＭＭ１０４のＰＦコマンド及びイベント・リングは、通信プロセッサ１３８を使用してＶＦコマンドを処理するように及びインターフェイス・マネージャ１３６を使用してホスト・コントローラ１０６からイベントＴＲＢを受信するように構成され得る。ＶＭＭ１０４のインターフェイス・マネージャ１３６はまた、インターフェイス・マネージャ１３６が、次いで、ＶＭ間通信（ＩＶＣ：Ｉｎｔｅｒ  ＶＭ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）メッセージの形でそれぞれのＶＭに転送することができる、ホスト・コントローラ１０６に関連するすべてのポートのパッド割り込みを受信することができる。
【００２５】
ホスト・コントローラ・ファームウェア１０６は、システムの信頼チェーンを介してホスト・システム１０２によってロードされたときに署名及び認証されたホスト・システム１０２の信頼されているエンティティでもよい。ホスト・コントローラ・ファームウェア１０６は、様々なホスト・コントローラ・インターフェイスのうちのいずれか、たとえば、ユニバーサル・シリアル・バス（ＵＳＢ）、ファイアーワイヤ、ブルートゥース、イーサネット（登録商標）、周辺構成要素相互接続（ＰＣＩ）、近距離通信（ＮＦＣ）、車両対あらゆるもの（Ｖ２Ｘ：Ｖｅｈｉｃｌｅ−ｔｏ−ｅｖｅｒｙｔｈｉｎｇ）、Ｃａｒ２Ｃａｒ、セルラ、ワイヤレス・フィディリティ（ＷｉＦｉ：Ｗｉｒｅｌｅｓｓ  Ｆｉｄｅｌｉｔｙ）、又は他のタイプの通信のために使用されるもの、をサポートすることができる。
【００２６】
ホスト・コントローラ・ファームウェア１０６は、メモリ１１８で何にアクセスすべきか、それを安全に行う方法、及びそれらの結果がホスト・システム１０２の他の構成要素にどのように利用可能にされているかを決定し得る。この趣旨で、ホスト・コントローラ１０６は、ＶＭＭ１０４からの読み取りコマンド及び／又はデータへのアクセスを規制するために読み取りコマンドに応答してメモリ１１８から読み取られたデータを有効にするためにバリデータ１４２を使用することができる。ＶＭからの読み取りコマンドを有効にするために、バリデータ１４２は、その読み取りコマンドは対応するＶＭのコマンド・リングのドアベル・イベントとマッチするということを確認することができる。たとえば、ＶＭ１０８が、要求コマンドをＶＭメモリ１２０に書き込むとき、それは、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６によって受信されたドアベル・イベントを提供することができる。そのようなドアベル・イベントが、ＶＭ１０８から受信されなかったが、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６が、ホスト・コントローラ・ファームウェア１０６がＶＭメモリ１２０から読み取ることを要求する読み取りコマンドを受信した場合、バリデータ１４２は、その読み取りコマンドは無効であると判定することができる。
【００２７】
もう１つの実例として、バリデータ１４２は、ホスト・コントローラ１０６のインターフェイス・マネージャ１４６が、読み取りコマンドを受信するより前に、ドアベル・イベントをＶＭＭ１０４に送ったということを確認することができる。たとえば、いくつかの実施例において、ＶＭ１０８からのドアベル・イベントの受信に応答して、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、対応するドアベル・イベントをＶＭＭ１０４に提供することができる。ＶＭＭ１０４へのドアベル・イベントは、ＶＭＭ１０４に指示してメモリ・マッパ１４０を使用してＶＭ１０８のメモリ・アドレスを判定し、ホスト・コントローラ１０６への読み取りコマンドにおいて１個又は複数のメモリ位置のメモリ・アドレス又は他のインジケータを提供することができる。そのようなドアベル・イベントが、ホスト・コントローラ１０６のインターフェイス・マネージャ１４６によってＶＭＭ１０４に提供されなかったが、ホスト・コントローラ・ファームウェア１０６がＶＭメモリ１２０から読み取るということを要求する読み取りコマンドが、受信される場合、バリデータ１４２は、読み取りコマンドは無効であると判定することができる。
【００２８】
任意の実例において、ホスト・コントローラ１０６のバリデータ１４２は、読み取りコマンド内の情報を使用して、読み取りコマンドが有効であるかどうかを判定することができる。たとえば、読み取りコマンドは、スロットＩＤ、ＶＦ  ＩＤ、そこから読み取るべきメモリ・アドレス、又は読み取るべきメモリ・サイズのうちの１個又は複数を含み得る。いくつかの実例では、ＶＦ  ＩＤが、ドアベル・イベントにおいてＶＭ１０８によってホスト・コントローラ・ファームウェア１０６に提供されたＶＦのＩＤとマッチしない場合、ホスト・コントローラ１０６のバリデータ１４２は、読み取りコマンドは無効であると判定することができる。また、いくつかの実例では、スロットＩＤが、ドアベル・イベントにおいてＶＭ１０８によってホスト・コントローラ・ファームウェア１０６に提供されたスロットのＩＤとマッチしない場合、ホスト・コントローラ１０６のバリデータ１４２は、読み取りコマンドは無効であると判定することができる。
【００２９】
もう１つの実例として、ホスト・コントローラ１０６のバリデータ１４２は、読み取りコマンドによって指定されたメモリ・サイズに基づいて読み取りコマンドを有効にすることができる。これは、メモリ・サイズは所定の範囲内にある及び／又は所定のサイズ（他の要因に基づいて変化し得る）であると判定することを含み得る。たとえば、ＴＲＢは、１６バイトでもよく、より大きい又はより小さいサイズは、無効なコマンドを示し得る。したがって、バリデータ１４２が、メモリ・サイズは１６バイトと等しくないと判定した場合、バリデータ１４２は、読み取りコマンドは無効であると判定することができる。読み取りコマンドが、バリデータ１４２によって有効にされない場合、ホスト・コントローラ・ファームウェア１０６は、読み取りコマンドによって指示されたメモリ位置をインターフェイス・マネージャ１４６を使用して読み取ること及び／又はそのメモリ位置から読み取られたデータへのアクセスをＶＭＭ１０４に提供することをやめることができる。
【００３０】
ホスト・コントローラ１０６のバリデータ１４２が読み取りコマンドを有効にすることに加えて又はその代わりに、バリデータ１４２は、読み取りコマンドによって指示されたメモリ位置から読み取られたデータを有効にすることができる。たとえば、バリデータ１４２は、データを読み取り、データが適切なフォーマットである及び／又は適切な情報若しくはパラメータを含むことを確認することができる。これは、要求タイプ・フィールドが有効値を有する、１個又は複数の予約済みフィールドが期待値を有する、スロットＩＤが所定の範囲内にある、及び／又はデータが定義済みフォーマットであることをバリデータ１４２がチェックすることを含み得る。期待値及び／又は所定の範囲は、静的値を有し得る、又は動的に生成され得る。さらに、いずれも、ホスト・コントローラ・ファームウェア１０６にコード化されるなど、ホスト・コントローラ・ファームウェア１０６によって予め決定する又は定義することができる。たとえば、いずれの値も、ランタイムにおいてコードによってハードコード若しくは計算する及び／又はホスト・コントローラ・ファームウェア１０６によって予め決定することができる。ｘＨＣＩインターフェイスの実例では、これは、ＴＲＢタイプ・フィールドが有効な範囲内にある、１個若しくは複数の予約済みフィールドがゼロと等しい、スロットＩＤが所定の範囲内にある、及び／又はデータがＴＲＢフォーマットであるということをチェックすることを含み得る。バリデータ１４２が、データを有効にしない（たとえば、データは無効であると判定する）場合、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、ＶＭＭ１０４にそのメモリ位置から読み取られたデータへのアクセスを提供するのをやめることができる。
【００３１】
ここで図２を参照すると、図２は、本開示のいくつかの実施例による、メモリ内のデータへの仮想化ソフトウェアによるアクセスを有効にするためのプロセス２００の一実例の流れ図を示す。例示的プロセス２００は、例として、図１のＶＭ１０８及びＶＭメモリ１２０を使用して解説されている。しかしながら、プロセス２００は、ＶＭ及びＶＭメモリ、たとえば、図１のＶＭ１１０、１１４、若しくはＶＭ１１６及びＶＭメモリ１２２、１２４、若しくは１２６、のために同様に形成され得る。図１の構成要素の特定の構成及び組立は、図２によって制限されるものではなく、いくつかの実施例において変化し得る。プロセス２００は、ブロック及び矢印を用いて表現されているが、これは、プロセス２００のすべての実施例を特定の順番に、又は特定の動作に制限するものではない。
【００３２】
プロセス２００の２０２において、ＶＭＭ１０４のインターフェイス・マネージャ１３６は、接続関連イベントのＶＭ１０８への通知を送ることができる。通知は、たとえば、論理若しくは物理デバイス／エンティティ（たとえば、外部デバイス１３０）がポート（たとえば、ルート・ポート）に接続した及び／又はデバイス／エンティティがＶＭ１０８への新しい若しくは修正された接続を要求していることをＶＭ１０８に指示し得る。たとえば、プロセス２００より前に、ＶＭＭ１０４は、オプションで、ＶＦを介して接続関連イベントを決定する（たとえば、エンティティ及び／又は周辺デバイスからの要求に基づいて）ことができる。いくつかの実施例において、これは、ＶＭ１０８に関連するポートのパッド割り込みをＶＭＭ１０４のインターフェイス・マネージャ１３６が受信することを含み得る。ＶＭＭ１０４のインターフェイス・マネージャ１３６は、次いで、ＶＭ間通信（ＩＶＣ）メッセージの形で２０２においてＶＭ１０８に対応する情報（たとえば、割り込み情報）を含む通知を転送することができる。
【００３３】
２０２における通知の受信に基づいて、ＶＭ１０８は、２０４Ａにおいて、要求コマンドをＶＭメモリ１２０に書き込むことができる。たとえば、ＶＭ１０８は、ＶＭ１０８のコマンド・リングに要求コマンドを書き込むことができる。要求コマンドは、通知に基づき得、たとえば、接続及び／又はデバイス・プロパティ（たとえば、接続されたデバイスの）の要求を含み得る。要求コマンドが説明されているが、要求コマンドは、任意の数のコマンド（たとえば、複数の要求コマンド）に対応し得る。
【００３４】
さらに２０２における通知の受信に基づいて、ＶＭ１０８は、２０４Ｂにおいて、２０４Ａにおいて記憶されたコマンドに関してホスト・コントローラ・ファームウェア１０６に通知することができる。たとえば、２０４Ａの後、最中、又は前に、ＶＭ１０８は、ドアベル・イベントをホスト・コントローラ・ファームウェア１０６に送ってホスト・コントローラ・ファームウェア１０６のドアベルを鳴らすことができる。ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、通知を受信し、２０６において、２０４Ｂにおける通知の受信に基づいてＶＭＭ１０４に要求を送ることができる。いくつかの実例では、これは、ドアベル・イベントをＶＭＭ１０４に転送することを含む。いくつかの実例では、通信プロセッサ１４４は、ＶＭ１０８からの通知に関する情報を記録し、バリデータ１４２は、それを使用して、ＶＭＭ１０４から受信された読み取り要求を有効にすることができる。これは、たとえば、ＶＭ１０８及び／若しくは任意のＶＭから受信されるいくつかの通知、ＶＭ１０８及び／若しくは任意のＶＭから受信された通知に基づいてＶＭＭ１０４に送られるいくつかの要求、並びに／又はＶＭ１０８のＶＭ  ＩＤ（たとえば、ＶＦ  ＩＤ）を含み得る。
【００３５】
要求（たとえば、転送されたドアベル・イベント）は、ＶＭＭ１０４のインターフェイス・マネージャ１３６によって受信され、ＶＭＭ１０４に指示してＶＭメモリ１２０における要求コマンドの処理を助ける（たとえば、ＶＭ１０８のコマンド・リングにおける１個又は複数のコマンドの処理を助ける）ことができる。ＶＭＭ１０４の通信プロセッサ１４４は、２０６からの要求を処理し、メモリ・マッパ１４０を使用して１個又は複数のメモリ位置に要求をマップすることができる。通信プロセッサ１４４は、１個又は複数のメモリ位置を使用して読み取りコマンドを生成することができ、ＶＭＭ１０４のインターフェイス・マネージャ１３６は、２０８において、読み取りコマンドをホスト・コントローラ１０６に提供することができる。本明細書で論じられているように、読み取りコマンドは、たとえば、メモリ１１８内のメモリ・アドレス及び読み取りのメモリ・サイズを使用して、読み取るべきホスト・コントローラ・ファームウェア１０６の１個又は複数のメモリ位置を指示することができる。読み取りコマンドはまた、ＶＭ１０８のスロットＩＤ又はＶＦ  ＩＤを含み得る。
【００３６】
ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、ＶＭＭ１０４から読み取りコマンドを受信することができ、通信プロセッサ１４４は、読み取りコマンド内の情報を使用して、２０４ＡにおいてＶＭ１０８によってＶＭメモリ１２０に記憶された要求コマンド（たとえば、コマンドＴＲＢデータ）を２１０Ａにおいて読み取ることができる。たとえば、通信プロセッサ１４４は、スロットＩＤ又はＶＦ  ＩＤを使用してＶＭ１０８の固有のストリームＩＤを決定することができる。ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、ストリームＩＤ、メモリ・アドレス、及びＶＭメモリ１２０から読み取るべきメモリ・サイズを使用することができる。ホスト・システム１０２において、ストリームＩＤは、ハイパーバイザによって別のハードウェア・レジスタにおいて個別にプログラムすることができ、異なるストリームＩＤが異なるＶＦ／ＶＭに割り当てられた、メモリ・アクセス・セキュリティのために使用することができる。
【００３７】
２１０Ａの前、最中、及び／又は後に、通信プロセッサ１４４は、バリデータ１４２を使用して、２０８からの読み取りコマンド及び／又は２１０Ａにおいて読み取られたデータのうちの１個又は複数を有効にすることができる。たとえば、いくつかの実施例において、バリデータ１４２が、読み取りコマンドは無効であると判定した場合、２１０Ａは、実行されなくてもよい。他の実例において、バリデータ１４２は、読み取りコマンドが無効であると分かった場合でも、２１０Ａにおいてデータを読み取ることができる。また、バリデータ１４２は、データが有効であるかを判定するためにデータを分析してもしなくてもよい。いくつかの実例では、バリデータ１４２は、常に有効化なしにデータを読み取ることになり、可能であれば、次いで、データの有効化を実行することになる。
【００３８】
データが、２１０Ａにおいて読み取られた後、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、そのデータによって表されたデータ及び／又は情報をＶＭＭ１０４に提供することができる。図示された実例において、インターフェイス・マネージャ１４６は、２１０Ｂにおいて情報（たとえば、コマンドＴＲＢデータ）をＶＭＭメモリ１３４に記憶することによって、それを行うことができる。また、２１２において、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、通知をＶＭＭ１０４に提供することができる。通知は、２１０Ｂからの情報がＶＭＭメモリ１３４にある、２０８からの読み取りコマンドが、バリデータ１４２によって、有効であることが分かった、及び／又は２１０Ａにおいて読み取られたデータが、バリデータ１４２によって、有効であることが分かったということをＶＭＭ１０４に指示することができる。通知は、たとえば、コマンド完了イベントと呼ばれ得る。いくつかの実施例において、コマンド完了イベントは、データ及び／又は読み取りコマンドの有効化の成功を指示する、ＣＣｏｄｅ＝１を含み得る。バリデータ１４２によってデータ及び／又は読み取りコマンドが有効であることが分からなければ、コマンド完了イベント（たとえば、ＣＣｏｄｅ）は、データ及び／又は読み取りコマンドのうちの１個又は複数は無効であると分かったということを指示し得る。たとえば、コマンド完了イベントは、データ及び／又は読み取りコマンドの有効化の失敗を示す、ＣＣｏｄｅ＝０を含み得る。さらに、データ及び／又は読み取りコマンドのうちの１個又は複数が無効であると分かった場合、情報は、２１０ＢにおいてＶＭＭメモリ１３４に記憶されていないことがある。
【００３９】
ＶＭＭ１０４のインターフェイス・マネージャ１３６は、ホスト・コントローラ・ファームウェア１０６からの２１２からの通知を受信し、通知に基づいて、ＶＭＭメモリ１３４から情報を読み取ることができる。たとえば、通信プロセッサ１４４は、２０８からの読み取りコマンドが成功したと判定し（たとえば、コマンド完了イベントにおいてＣＣｏｄｅ＝１を識別することによって）、その判定に基づいて、２１４において情報を読み取ることができる。読み取りコマンドが失敗した場合、ＶＭＭ１０４は、情報の読み取りを試みなくてもよく、いくつかの他のアクションをオプションで実行することができる。たとえば、ＶＭＭ１０４は、失敗に関してＶＭ１０８に通知することができる。ＶＭＭ１０４が、２１４におけるＶＭ１０８からの要求コマンドに関する情報を無事に受信した場合、通信プロセッサ１３８は、情報を処理し、ＶＭ１０８にその結果（たとえば、要求された情報）を送る（たとえば、コマンド完了イベントＴＲＢにおいて）ことができる。その後に、デバイス／エンティティへの接続が、その結果に基づいて、確立及び／又は修正され得る。
【００４０】
ここで図３〜５を参照すると、本明細書に記載された、方法３００、４００、及び５００の各ブロックは、ハードウェア、ファームウェア、及び／又はソフトウェアの任意の組合せを使用して実行され得る計算プロセスを含む。たとえば、様々な機能は、メモリに記憶されたプロセッサ実行命令によって実施され得る。方法３００、４００、及び５００はまた、コンピュータ記憶媒体に記憶されたコンピュータ使用可能な命令として実施され得る。方法３００、４００、及び５００は、非制限的実例をいくつか挙げると、独立型アプリケーション、サービス又はホストされたサービス（独立型の又は別のホストされたサービスと組み合わせた）、或いは別の製品へのプラグインによって提供され得る。加えて、方法３００、４００、及び５００は、例として、図１のホスト・システム１０２を参照して、説明されている。しかしながら、これらの方法３００、４００、及び５００は、本明細書に記載のものを含むが、これらに限定されない、１個のシステム、又は複数のシステムの任意の組合せによって、追加で又は別法として、実行され得る。さらに、方法３００、４００、又は５００は、図２のプロセス２００に対応してもしなくてもよい。
【００４１】
ここで図３を参照すると、図３は、本開示のいくつかの実施例による、仮想化ソフトウェアからの読み取りコマンドに応答してＶＭメモリから読み取られたデータを有効にするための方法の一実例の流れ図を示す。方法３００は、ブロックＢ３０２において、仮想マシンのメモリ・アドレスを指示するコマンドを受信することを含む。たとえば、図１のホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、コマンド（たとえば、読み取りコマンド）をＶＭＭ１０４から受信することができる。コマンドは、ＶＭ１０８のメモリ・アドレスを指示することができる。
【００４２】
方法３００は、ブロックＢ３０４において、メモリ・アドレスからデータを読み取ることを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、コマンドの受信に基づいてＶＭメモリ１２０内のメモリ・アドレスからデータを読み取ることができる。
【００４３】
方法３００は、ブロックＢ３０６において、メモリ・アドレスから読み取られたデータを有効にすることを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のバリデータ１４２は、メモリ・アドレスから読み取られたデータを有効にすることができる。
【００４４】
方法３００は、ブロックＢ３０８において、読み取られたデータへのアクセスをＶＭＭに提供することを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、（たとえば、ＶＭＭメモリ１３４を介して）有効化に基づいてメモリ・アドレスから読み取られたデータへのアクセスをＶＭＭ１０４に提供することができる。
【００４５】
方法３００は、ブロックＢ３１０において、コマンド完了イベントを送ることを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、メモリ・アドレスから読み取られたデータが有効にされたことを指示するコマンド完了イベントをＶＭＭ１０４へ送ることができる。
【００４６】
ブロックＢ３０６においてデータが有効にされなかった場合、少なくともブロックＢ３０８は、実行されなくてもよい。また、いくつかの実施例では、ブロックＢ３０６においてデータが有効にされなかった場合、ブロックＢ３１０におけるコマンド完了イベントは、データは有効にされなかった（たとえば、無効であると分かった）ことを指示し得る。
【００４７】
図４を参照すると、図４は、本開示のいくつかの実施例による、ＶＭメモリを読み取るための仮想化ソフトウェアからのコマンドを有効にする方法４００の一実例の流れ図を示す。いくつかの実例では、方法４００は、方法３００に組み込まれ得る。他の実例において、方法４００及び方法３００は、互いに独立し得る。
【００４８】
方法４００は、ブロックＢ４０２において、仮想マシンのメモリ・アドレスを指示するコマンドを受信することを含む。たとえば、図１のホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、コマンド（たとえば、読み取りコマンド）をＶＭＭ１０４から受信することができる。コマンドは、ＶＭ１０８のメモリ・アドレスを指示することができる。
【００４９】
ブロックＢ４０４において方法４００は、コマンドを有効にすることを含み得る。たとえば、通信プロセッサ１４４は、バリデータ１４２を使用して、ＶＭＭ１０４から受信されたコマンドを有効にすることができる。
【００５０】
ブロックＢ４０６において方法４００は、メモリ・アドレスからデータを読み取ることを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、コマンドの受信に基づいてＶＭメモリ１２０内のメモリ・アドレスからデータを読み取ることができる。いくつかの実施例において、メモリ・アドレスからのデータの読み取りは、コマンドを有効にするバリデータ１４２に基づき得る。他の実例において、データは、コマンドが有効であると判定されたかどうかにかかわらず、読み取られ得る。
【００５１】
方法４００は、ブロックＢ４０８において、読み取られたデータへのアクセスをＶＭＭに提供することを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、（たとえば、ＶＭＭメモリ１３４を介して）有効化に基づいてメモリ・アドレスから読み取られたデータへのアクセスをＶＭＭ１０４に提供することができる。
【００５２】
方法４００は、ブロックＢ４１０において、コマンド完了イベントを送ることを含む。たとえば、ホスト・コントローラ・ファームウェア１０６のインターフェイス・マネージャ１４６は、メモリ・アドレスから読み取られたデータが有効にされたことを指示するコマンド完了イベントをＶＭＭ１０４へ送ることができる。
【００５３】
ブロックＢ４０４においてコマンドが有効にされなかった場合、少なくともブロックＢ４０８は、実行されなくてもよい。また、いくつかの実施例において、ブロックＢ４０４においてデータが有効にされなかった場合、ブロックＢ４１０におけるコマンド完了イベントは、コマンドは有効にされなかった（たとえば、無効であると分かった）ことを指示することができる、及び／又は、ブロックＢ４０６は、実行されなくてもよい。さらにいくつかの事例において、ブロックＢ４０６は、ブロックＢ４０４より前に実行され得る。
【００５４】
図５を参照すると、図５は、本開示のいくつかの実施例による、仮想化ソフトウェアがホスト・コントローラ・ファームウェアを使用してＶＭメモリからデータを読み取る方法５００の一実例の流れ図を示す。いくつかの実例では、方法５００は、方法３００又は方法４００のうちの１個又は複数に組み込まれ得る。たとえば、方法５００は、ＶＭＭの観点から方法３００及び／又は方法４００に対応し得る。他の実例において、方法５００及び方法３００又は方法４００は、互いに独立し得る。
【００５５】
方法５００は、ブロックＢ５０２において、仮想マシンのメモリ・アドレスを指示するコマンドを送ることを含む。たとえば、図１のＶＭＭ１０４のインターフェイス・マネージャ１３６は、コマンド（たとえば、読み取りコマンド）をホスト・コントローラ・ファームウェア１０６に送ることができる。コマンドは、ＶＭ１０８のメモリ・アドレスを指示することができる。いくつかの実施例において、ブロックＢ５０２は、本明細書に記載のように、ホスト・コントローラ１０６からドアベル・イベントを受信するＶＭＭ１０４のインターフェイス・マネージャ１３６に基づき得る。
【００５６】
方法５００は、ブロックＢ５０４において、メモリ・アドレスから読み取られたデータ、コマンド、又はその両方の有効化を示すコマンド完了イベントを受信することを含む。たとえば、ＶＭＭ１０４のインターフェイス・マネージャ１３６は、コマンド完了イベントをホスト・コントローラ・ファームウェア１０６から受信することができる。コマンド完了イベントは、コマンド、コマンドに基づいてメモリ・アドレスから読み取られたデータ、又はその両方の、ホスト・コントローラ・ファームウェア１０６による、有効化を示す（たとえば、本明細書に記載のＣＣｏｄｅを介して）ことができる。
【００５７】
方法５００は、ブロックＢ５０６において、メモリ・アドレスから読み取られたデータを読み取ることを含む。たとえば、ＶＭＭ１０４のインターフェイス・マネージャ１３６は、メモリ・アドレスから読み取られたデータを読み取ることができる。
【００５８】
図６は、本出願のいくつかの実装形態においてメモリ内のデータへの仮想化ソフトウェアによるアクセスを有効にするのに適した例示的コンピューティング環境のブロック図である。計算デバイス６００は、以下のデバイスを直接に又は間接に結合するバス６０２を含み得る：メモリ６０４、１個又は複数の中央処理装置（ＣＰＵ）６０６、１個又は複数のグラフィック・プロセッシング・ユニット（ＧＰＵ）６０８、通信インターフェイス６１０、入出力（Ｉ／Ｏ）ポート６１２、入出力構成要素６１４、電力供給装置６１６、及び１個又は複数の提示構成要素６１８（たとえば、ディスプレイ）。
【００５９】
図６の様々なブロックは、線でバス６０２を介して接続されているように示されているが、これは制限することを意図されておらず、単に分かりやすくするためである。たとえば、一部の実施例では、表示デバイスなどの提示構成要素６１８は、Ｉ／Ｏ構成要素６１４と考えられ得る（たとえば、ディスプレイがタッチ・スクリーンである場合）。別の実例として、ＣＰＵ６０６及び／又はＧＰＵ６０８はメモリを含み得る（たとえば、メモリ６０４は、ＧＰＵ６０８、ＣＰＵ６０６、及び／又は他の構成要素のメモリに加えた記憶デバイスを表し得る）。言い換えれば、図６の計算デバイスは、単に例示である。「ワークステーション」、「サーバ」、「ラップトップ」、「デスクトップ」、「タブレット」、「クライアント・デバイス」、「モバイル・デバイス」、「ハンドヘルド・デバイス」、「ゲーム機」、「電子制御ユニット（ＥＣＵ：ｅｌｅｃｔｒｏｎｉｃ  ｃｏｎｔｒｏｌ  ｕｎｉｔ）」、「仮想現実システム」、及び／又は他のデバイス若しくはシステム・タイプなどのカテゴリはすべて、図６の計算デバイスの範囲内にあることが意図されているので、これらは区別されない。
【００６０】
バス６０２は、アドレス・バス、データ・バス、制御バス、又はその組合せなど、１個又は複数のバスを表し得る。バス６０２は、ＩＳＡ（ｉｎｄｕｓｔｒｙ  ｓｔａｎｄａｒｄ  ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（ｅｘｔｅｎｄｅｄ  ｉｎｄｕｓｔｒｙ  ｓｔａｎｄａｒｄ  ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＶＥＳＡ（ｖｉｄｅｏ  ｅｌｅｃｔｒｏｎｉｃｓ  ｓｔａｎｄａｒｄ  ａｓｓｏｃｉａｔｉｏｎ）バス、ＰＣＩ（ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、ＰＣＩｅ（ＰＣＩ  ｅｘｐｒｅｓｓ）バス、及び／又は別のタイプのバスなど、１個又は複数のバス・タイプを含み得る。
【００６１】
メモリ６０４は、様々なコンピュータ可読媒体のいずれかを含み得る。コンピュータ可読媒体は、計算デバイス６００によってアクセスすることができる任意の利用可能な媒体でもよい。コンピュータ可読媒体は、揮発性及び不揮発性媒体の両方、並びに取り外し可能な及び取り外し不可能な媒体を含み得る。例として、しかし限定ではなく、コンピュータ可読媒体は、コンピュータ記憶媒体及び通信媒体を備え得る。
【００６２】
コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラム・アプリケーション、及び／又は他のデータ・タイプなどの情報の記憶のための任意の方法又は技術において実装された揮発性及び不揮発性媒体並びに／又は取り外し可能な及び取り外し不可能な媒体の両方を含み得る。たとえば、メモリ６０４は、オペレーティング・システムなど、（たとえば、プログラム及び／又はプログラム要素を表す）コンピュータ可読命令を記憶することができる。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ又は他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）又は他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ又は他の磁気記憶デバイス、或いは、所望の情報を記憶するために使用され得る及び計算デバイス６００によってアクセスされ得る任意の他の媒体を含み得るが、これらに限定されない。本明細書では、コンピュータ記憶媒体は、信号自体を含まない。
【００６３】
通信媒体は、搬送波などの変調データ信号又は他の移送機構においてコンピュータ可読命令、データ構造体、プログラム・アプリケーション、及び／又は他のデータ・タイプを実施することができ、任意の情報配信媒体を含む。「変調データ信号」という用語は、その特性セットのうちの１個又は複数を有する或いは信号内の情報をエンコードするような方式で変化した信号を指し得る。限定ではなく、例として、通信媒体は、ワイヤード・ネットワーク又は直接ワイヤード接続などのワイヤード媒体と、音響、ＲＦ、赤外線及び他のワイヤレス媒体などのワイヤレス媒体とを含み得る。前述の任意の組合せもまた、コンピュータ可読媒体の範囲に含まれるべきである。
【００６４】
ＣＰＵ６０６は、コンピュータ可読命令を実行して計算デバイス６００の１個又は複数の構成要素を制御して本明細書に記載の方法及び／又はプロセスのうちの１個又は複数を実行するように構成され得る。ＣＰＵ６０６は、多数のソフトウェア・スレッドを同時に処理する能力を有する１個又は複数の（たとえば、１個、２個、４個、８個、２８個、７２個などの）コアをそれぞれ含み得る。ＣＰＵ６０６は、任意のタイプのプロセッサを含み得、実装された計算デバイス６００のタイプに応じて、異なるタイプのプロセッサを含み得る（たとえば、モバイル・デバイスのためのより少数のコアを有するプロセッサ、及びサーバのためのより多数のコアを有するプロセッサ）。たとえば、計算デバイス６００のタイプに応じて、プロセッサは、縮小命令セット計算（ＲＩＳＣ：Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ）を使用して実装されたＡＲＭプロセッサ、又は複合命令セット計算（ＣＩＳＣ：Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ）を使用して実装されたｘ８６プロセッサでもよい。計算デバイス６００は、計算コプロセッサなど、１個又は複数のマイクロプロセッサ又は補助コプロセッサに加えて１個又は複数のＣＰＵ６０６を含み得る。
【００６５】
ＧＰＵ６０８は、グラフィックス（たとえば、３Ｄグラフィックス）をレンダリングするために、計算デバイス６００によって使用され得る。ＧＰＵ６０８は、同時に数百又は数千のソフトウェア・スレッドを処理する能力を有する数百又は数千のコアを含み得る。ＧＰＵ６０８は、レンダリング・コマンド（たとえば、ホスト・インターフェースを介して受信されたＣＰＵ６０６からのレンダリング・コマンド）に応答して、出力画像のための画素データを生成することができる。ＧＰＵ６０８は、画素データを記憶するための、ディスプレイ・メモリなどの、グラフィックス・メモリを含み得る。ディスプレイ・メモリは、メモリ６０４の一部として含まれ得る。ＧＰＵ６０８は、（たとえば、リンクを介して）並行して動作する２個以上のＧＰＵを含み得る。結合されると、各ＧＰＵ６０８は、出力画像の異なる部分の又は異なる出力画像の画素データを（たとえば、第１のＧＰＵは第１の画像のために及び第２のＧＰＵは第２の画像のために）生成し得る。各ＧＰＵは、独自のメモリを含み得、他のＧＰＵとメモリを共用し得る。
【００６６】
計算デバイス６００がＧＰＵ６０８を含まない実例において、ＣＰＵ６０６は、グラフィックスをレンダリングする及び／又はデータを処理するために使用され得る。
【００６７】
通信インターフェイス６１０は、ワイヤード及び／又はワイヤレス通信を含んだ、電子通信ネットワークを介して計算デバイス６００が他の計算デバイスと通信することを可能にする、１個又は複数のレシーバ、トランスミッタ、及び／又はトランシーバを含み得る。通信インターフェイス６１０は、ワイヤレス・ネットワーク（たとえば、Ｗｉ−Ｆｉ、Ｚ−Ｗａｖｅ、ブルートゥース、ブルートゥースＬＥ、ＺｉｇＢｅｅなど）、ワイヤード・ネットワーク（たとえば、イーサネット（登録商標）を介して通信すること）、低電力ワイド・エリア・ネットワーク（たとえば、ＬｏＲａＷＡＮ、ＳｉｇＦｏｘなど）、及び／又はインターネットなどの、いくつかの異なるネットワークのうちのいずれかを介する通信を可能にするために構成要素及び機能を含み得る。
【００６８】
Ｉ／Ｏポート６１２は、そのうちのいくつかは計算デバイス６００に内蔵（たとえば、統合）され得る、Ｉ／Ｏ構成要素６１４、提示構成要素６１８、及び／又は他の構成要素を含む、他のデバイスに計算デバイス６００が論理的に連結されることを可能にすることができる。例示的なＩ／Ｏ構成要素６１４は、マイクロフォン、マウス、キーボード、ジョイスティック、ゲーム・パッド、ゲーム・コントローラ、サテライト・ディッシュ、スキャナ、プリンタ、ワイヤレス・デバイスなどを含む。Ｉ／Ｏ構成要素６１４は、エア・ジェスチャ、音声、又は、ユーザによって生成される他の生理的入力を処理する自然ユーザ・インターフェース（ＮＵＩ：ｎａｔｕｒａｌ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ）を提供することができる。場合によっては、入力は、さらなる処理のための適切なネットワーク要素に送信され得る。ＮＵＩは、音声認識、スタイラス認識、顔認識、生体認識、画面上及び画面の隣の両方のジェスチャ認識、エア・ジェスチャ、頭部及び視標追跡、並びに計算デバイス６００のディスプレイに関連するタッチ認識（さらに詳しく後述するような）の任意の組合せを実装し得る。計算デバイス６００は、ジェスチャ検出及び認識のための、ステレオスコープ・カメラ・システム、赤外線カメラ・システム、ＲＧＢカメラ・システム、タッチ画面技術、及びこれらの組合せなど、深度カメラを含み得る。追加で、計算デバイス６００は、動きの検出を可能にする加速度計又はジャイロスコープを含み得る（たとえば、慣性測定ユニット（ＩＭＵ：ｉｎｅｒｔｉａ  ｍｅａｓｕｒｅｍｅｎｔ  ｕｎｉｔ）の一部として）。いくつかの実例では、加速度計又はジャイロスコープの出力は、没入型拡張現実又は仮想現実をレンダリングするために、計算デバイス６００によって使用され得る。
【００６９】
電力供給装置６１６は、ハードワイヤード電力供給装置、バッテリ電力供給装置、又はその組合せを含み得る。電力供給装置６１６は、計算デバイス６００の構成要素が動作することを可能にするために計算デバイス６００に電力を提供することができる。
【００７０】
提示構成要素６１８は、ディスプレイ（たとえば、モニタ、タッチ画面、テレビジョン画面、ヘッドアップ表示装置（ＨＵＤ）、他のディスプレイ・タイプ、又はその組合せ）、スピーカ、及び／又は他の提示構成要素を含み得る。提示構成要素６１８は、他の構成要素（たとえば、ＧＰＵ６０８、ＣＰＵ６０６など）からデータを受信し、データを（たとえば、画像、ビデオ、音響などとして）出力することができる。
【００７１】
本開示は、コンピュータ又は、携帯情報端末若しくは他のハンドヘルド・デバイスなどの、他のマシンによって実行されている、プログラム・アプリケーションなどのコンピュータ実行可能命令を含む、コンピュータ・コード又はマシン使用可能命令との一般的関連において説明されることがある。一般に、ルーティン、プログラム、オブジェクト、構成要素、データ構造体などを含むプログラム・アプリケーションは、特定のタスクを実行する又は特定の抽象データ・タイプを実装するコードを指す。本開示は、ハンドヘルド・デバイス、家電製品、汎用コンピュータ、より特殊な計算デバイスなどを含む、様々なシステム構成で実施され得る。本開示はまた、通信ネットワークを介してリンクされた遠隔処理デバイスによってタスクが実行される分散型コンピューティング環境において実施され得る。
【００７２】
本明細書では、２個以上の要素に関する「及び／又は」の記述は、１個の要素のみ、又は要素の組合せを意味すると解釈されるべきである。たとえば、「要素Ａ、要素Ｂ、及び／又は要素Ｃ」は、要素Ａのみ、要素Ｂのみ、要素Ｃのみ、要素Ａ及び要素Ｂ、要素Ａ及び要素Ｃ、要素Ｂ及び要素Ｃ、或いは、要素Ａ、Ｂ、及びＣを含み得る。加えて、「要素Ａ又は要素Ｂのうちの少なくとも１個」は、要素Ａの少なくとも１個、要素Ｂの少なくとも１個、或いは、要素Ａの少なくとも１個及び要素Ｂの少なくとも１個を含み得る。
【００７３】
本開示の主題は、法定の要件を満たすために特異性を有して記述されている。しかしながら、その記述自体が本開示の範囲を制限することは意図されていない。そうではなくて、本発明者は、請求されている主題が、他の現在の又は未来の技術と併せて、異なるステップ又は本文書に記載されたものと類似のステップの組合せを含むように、他の形で実施され得ることを意図している。さらに、「ステップ」及び／又は「ブロック」という用語は、使用される方法の異なる要素を含意するように本明細書で使用され得るが、これらの用語は、個別のステップの順番が明示的に記載されていない限り及びそのように記載されているときを除いて本明細書で開示される様々なステップの間に何らかの特定の順番を暗示するものとして解釈されるべきではない。
【図１】
2021532495.tif 000003
【図２】
2021532495.tif 000004
【図３】
2021532495.tif 000005
【図４】
2021532495.tif 000006
【図５】
2021532495.tif 000007
【図６】
2021532495.tif 000008
【国際調査報告】
2021532495.tif 000009
2021532495.tif 000010