(57)【要約】      （修正有）【課題】周辺デバイスによりコンフィグレーション空間をエミュレートする【解決手段】エミュレートするための技法は、コンフィグレーションアクセス要求を受信することと、コンフィグレーションアクセス要求が周辺デバイスのネイティブコンフィグレーション空間以外のコンフィグレーション空間に対すると判断することと、エミュレートされたコンフィグレーションをエミュレートされたコンフィグレーション空間から検索することとを含む。コンフィグレーションアクセス要求は次いで、エミュレートされたコンフィグレーションを使用することにより供給される。【選択図】図７
2019091494.tif 000002
【特許請求の範囲】
【請求項１】
コンフィグレーションアクセス要求を受信するように構成されたバスインターフェースと、
第１周辺デバイスに対応する、物理機能及び前記物理機能に関連する仮想機能を含む第１機能セットの第１コンフィグレーションレジスタをエミュレートするエミュレートコンフィグレーション空間と、
前記エミュレートコンフィグレーション空間からエミュレートコンフィグレーションレジスタを検索し、前記コンフィグレーションアクセス要求を供給することにより、前記コンフィグレーションアクセス要求を処理するエミュレーションモジュールと、を備える、周辺デバイス。
【請求項２】
前記エミュレートコンフィグレーション空間は、第２周辺デバイスに対応する、第２機能セットに対する第２コンフィグレーションレジスタをエミュレートするように構成できる、請求項１に記載の周辺デバイス。
【請求項３】
前記第１周辺デバイス及び前記第２周辺デバイスは異なる種類の周辺デバイスであり、前記前記第１周辺デバイス及び前記第２周辺デバイスは、大容量ストレージデバイス、ネットワークデバイス、ディスプレイデバイス、マルチメディアデバイス、メモリデバイス、ブリッジデバイス、通信デバイス、入力デバイス、ドッキングステーション、プロセッサ、シリアルバス、無線デバイス、インテリジェントＩ／Ｏデバイス、遠隔通信デバイス、暗号／複合デバイス、又はデータ入手デバイスから選ばれる、請求項２に記載の周辺デバイス。
【請求項４】
エミュレートされる前記第１コンフィグレーションレジスタは、前記物理機能によって使用されるアドレス範囲を特定するベースアドレスレジスタを含む、請求項１に記載の周辺デバイス。
【請求項５】
エミュレートされる前記第１コンフィグレーションレジスタは、前記物理機能に関連するケーパビリティレジスタを含む、請求項１に記載の周辺デバイス。
【請求項６】
前記ケーパビリティレジスタへの変更は、前記物理機能に関連する仮想機能をリセットする、請求項５に記載の周辺デバイス。
【請求項７】
さらに、前記コンフィグレーションアクセス要求の受信を記録する、コンフィグレーショントランザクションロギングユニットを備える、請求項１に記載の周辺デバイス。
【請求項８】
前記コンフィグレーショントランザクションロギングユニットは、受信した前記コンフィグレーションアクセス要求を処理する順序を決定する、請求項７に記載の周辺デバイス。
【請求項９】
前記エミュレートコンフィグレーション空間は、起動時に永続メモリからローカルメモリにロードされる、請求項１に記載の周辺デバイス。
【請求項１０】
前記エミュレートコンフィグレーション空間は、初期化されていない機能または架空の機能に応答するように構成されている、請求項１に記載の周辺デバイス。
【請求項１１】
エミュレートコンフィグレーション空間において、周辺デバイスによって、第１周辺デバイスに対応する、物理機能及び前記物理機能に関連する仮想機能を含む第１機能セットの第１コンフィグレーションレジスタをエミュレートすることと、
前記周辺デバイスによって、コンフィグレーションアクセス要求を受け取ることと、
前記周辺デバイスによって、前記エミュレートコンフィグレーション空間より、エミュレートコンフィグレーションレジスタを検索することと、
前記周辺デバイスによって、前記コンフィグレーションアクセス要求を供給することと、を備える方法。
【請求項１２】
前記エミュレートコンフィグレーション空間は、第２周辺デバイスに対応する、第２機能セットに対する第２コンフィグレーションレジスタをエミュレートするように構成できる、請求項１１に記載の方法。
【請求項１３】
前記第１周辺デバイス及び前記第２周辺デバイスは異なる種類の周辺デバイスであり、前記前記第１周辺デバイス及び前記第２周辺デバイスは、大容量ストレージデバイス、ネットワークデバイス、ディスプレイデバイス、マルチメディアデバイス、メモリデバイス、ブリッジデバイス、通信デバイス、入力デバイス、ドッキングステーション、プロセッサ、シリアルバス、無線デバイス、インテリジェントＩ／Ｏデバイス、遠隔通信デバイス、暗号／複合デバイス、又はデータ入手デバイスが含まれる、請求項１２に記載の方法。
【請求項１４】
エミュレートされる前記第１コンフィグレーションレジスタは、前記物理機能によって使用されるアドレス範囲を特定するベースアドレスレジスタを含む、請求項１１に記載の方法。
【請求項１５】
エミュレートされる前記第１コンフィグレーションレジスタは、前記物理機能に関連するケーパビリティレジスタを含む、請求項１１に記載の方法。
【請求項１６】
前記ケーパビリティレジスタへの変更は、前記物理機能に関連する仮想機能をリセットする、請求項１５に記載の方法。
【請求項１７】
コンフィグレーショントランザクションログに前記コンフィグレーションアクセス要求の受信を記録することをさらに備える、請求項１１に記載の方法。
【請求項１８】
受信した前記コンフィグレーションアクセス要求を処理する順序を決定することをさらに備える、請求項１７に記載の方法。
【請求項１９】
前記周辺デバイスの起動時に、永続メモリからローカルメモリに前記エミュレートコンフィグレーション空間をロードすることをさらに備える、請求項１１に記載の方法。
【請求項２０】
初期化されていない機能または架空の機能に応答することをさらに備える、請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレートされたエンドポイントコンフィグレーションに関する。
【背景技術】
【０００２】
コンピューティングシステムは複数の周辺デバイスを含み得る。周辺デバイスはコンピューティングシステムの機能性を拡張、適合及び／または変更してよい。周辺デバイスは１つ以上の機能を実施してよい。例えば、周辺デバイスは、ネットワーク接続機能を提供するネットワークインターフェースカードまたはデータ記憶機能等を提供する大容量ストレージデバイスとなり得る。
【０００３】
いくつかの周辺デバイスは、周辺デバイスの挙動を制御するために使用されるコンフィグレーションレジスタを含んでよい。例えば、周辺デバイスがペリフェラルコンポーネントインターコネクト（ＰＣＩ）に準拠するデバイスの場合、周辺デバイスは１セットのＰＣＩコンフィグレーション空間レジスタを有してよい。コンフィグレーションレジスタは周辺デバイスのケーパビリティを示すために読み出され得るフィールドを含んでよく、かつ周辺デバイスの機能を使用可能、使用不可能または変更するために書き込まれ得るフィールドを含んでよい。一般的に、コンフィグレーションレジスタは物理的なハードウェアレジスタとして実装され、フィールドは周辺デバイスの特定のケーパビリティ及び機能に従って定義及びハードコードされる。その結果、一度製造されると、周辺デバイスのコンフィグレーションレジスタの定義は通常固定され、変更できない。
【発明の概要】
【課題を解決するための手段】
【０００４】
周辺デバイスによりコンフィグレーション空間をエミュレートするための技法は、コンフィグレーションアクセス要求を受信することと、コンフィグレーションアクセス要求が周辺デバイスのネイティブコンフィグレーション空間以外のコンフィグレーション空間に対すると判断することと、エミュレートされたコンフィグレーションをエミュレートされたコンフィグレーション空間から検索することとを含んでよい。コンフィグレーションアクセス要求は次いで、エミュレートされたコンフィグレーションを使用することにより供給され得る。
【０００５】
本開示に係る種々の実施形態が図面を参照して説明される。
【図面の簡単な説明】
【０００６】
【図１】いくつかの実施形態に係る、複数の周辺デバイスを含むコンピューティングシステムの一例を例示する。
【図２】いくつかの実施形態に係る、エミュレートされたコンフィグレーション空間を伴う周辺デバイスのブロック図を例示する。
【図３】いくつかの実施形態に係る、エミュレートされたコンフィグレーション空間を伴う周辺デバイスのブロック図を例示する。
【図４】いくつかの実施形態に係る、コンフィグレーション読み出しトランザクションを供給する周辺デバイスの一例を例示する。
【図５】いくつかの実施形態に係る、コンフィグレーション書き込み要求を供給する周辺デバイスの一例を例示する。
【図６】いくつかの実施形態に係る、シングルルート入出力仮想化（ＳＲ−ＩＯＶ）を実施するように構成される周辺デバイスのブロック図を例示する。
【図７】いくつかの実施形態に係る、コンフィグレーションアクセス要求を供給するフロー図を例示する。
【図８】いくつかの実施形態に係る、コンフィグレーションレジスタを読み出すコンフィグレーションアクセス要求を供給する処理の一例を例示する。
【図９】いくつかの実施形態に係る、コンフィグレーションレジスタを書き込むコンフィグレーションアクセス要求を供給する処理の一例を例示する。
【図１０】いくつかの実施形態に係る、１つ以上のネットワークを介して接続される１つ以上のサービスプロバイダコンピュータ及び／またはユーザデバイスを含む、本明細書に記載の特徴及びシステムのためのアーキテクチャの一例を例示する。
【図１１】いくつかの実施形態に係る、態様を実施するためのコンピューティングシステムの環境の一例の態様を例示する。
【発明を実施するための形態】
【０００７】
以下の説明では、種々の実施形態が記載される。説明の目的上、実施形態の十分な理解を提供するために、特定の構成及び詳細が記載される。しかしながら、さらに、実施形態は特定の詳細を伴わずに実施され得ることが当業者には明らかであるだろう。さらに、記載されている実施形態を不明瞭にしないために、既知の特徴は省略または簡素化され得る。
【０００８】
コンピューティングシステムは複数の周辺デバイスを含み得る。周辺デバイスはコンピューティングシステムの機能性を拡張、適合及び／または変更してよい。例えば、周辺デバイスは、コンピューティングシステムにサポートされるストレージ、ネットワーク接続及び／またはオーディオ及びビデオ等を提供してよい。周辺デバイスは、通常、１つ以上のバスを通じてコンピューティングシステムと通信する。バス上のデータ転送はバスプロトコルにより規定され得る。バスプロトコルの例として、とりわけバスプロトコルのペリフェラルコンポーネントインターコネクト（ＰＣＩ）の一群（例えば、ＰＣＩ、ＰＣＩ−ｅＸｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、アクセラレーテッドグラフィックスポート（ＡＧＰ）などのＰＣＩ派生物等）を含んでよい。
【０００９】
本明細書に記載の技法は周辺デバイスのコンフィグレーション空間の一部または全てをエミュレートする構成要素及び方法を含む。エミュレートされたコンフィグレーション空間は周辺デバイスにより使用され、周辺デバイス自体を様々なケーパビリティを伴う様々なタイプの周辺デバイスとして表し得る。例えば、エミュレートされたコンフィグレーション空間により、周辺デバイスは、ある場合には、周辺デバイス自体がネットワークインターフェースカードとして表され、他の場合には、ビデオカードとして表されること等ができ得る。エミュレートされたコンフィグレーション空間はさらに、動的に変更、拡張、複製または全く異なるコンフィグレーション空間に置換することができる。追加的に、複数のエミュレートされたコンフィグレーション空間は様々な機能に対して保持され得る。エミュレートされたコンフィグレーション空間はさらに、より少ないハードウェアを必要とし得る。例えば、シングルルート入出力仮想化（ＳＲ−ＩＯＶ）を実施するデバイスは、任意の数の物理機能及び／または仮想機能に縮小され得るエミュレートされたコンフィグレーションを含んでよく、これには各機能に対する物理的なハードウェアレジスタは必要ない。さらに、エミュレートされたコンフィグレーション空間によりエミュレートされる機能の数は動的に変更できる。
【００１０】
本明細書に記載の技法はさらに、エミュレートされたコンフィグレーション空間へのアクセスを容易にするエミュレーションモジュールを提供してよい。エミュレーションモジュールはソフトウェア、ハードウェアまたはソフトウェアとハードウェアとの組み合わせ（例えば、周辺デバイスのプロセッサにより実行されるソフトウェア）として実装されてよい。エミュレーションモジュールはエミュレートされたコンフィグレーション空間と相互作用してよく、これはコンフィグレーションレジスタの読み取り及び書き込み表現を含む。
【００１１】
Ｉ．システム
図１は、複数の周辺デバイスを含むコンピューティングシステム１００の一例を例示する。周辺デバイスは、コンピューティングシステムに連結され、システムに機能性を追加し得るハードウェアデバイス及び／またはハードウェアとソフトウェアとの組み合わせを含むデバイスを含んでよい。周辺デバイスの例は、とりわけ、ストレージデバイス、ビデオカード、オーディオカード、有線及び／または無線ネットワークアダプタ、シリアル及び／またはパラレルポートなどの追加ポートをシステムに提供するアダプタ、追加の周辺デバイスにポートを提供するブリッジ、ハブ及び／またはスイッチを含む。一般的に、周辺デバイスはコンピューティングシステムから接続及び切断され、システムの機能性を変更し得る。いくつかの場合、コンピューティングシステムは、周辺デバイスの追加または取り外しに対して電源を切らなければならない。別の場合、周辺デバイスは、コンピュータシステムの電源が投入されている間に連結または取り外される場合がある（例えば、「ホットスワップ」または「ホットプラグ」と呼ばれることが多い）。
【００１２】
図１の例はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス規格の１つ以上の変形形態を実装する周辺機器を含むシステムを例示する。バスは、コンピューティングシステム内またはコンピューティングシステムと他のデバイスとの間でデータを転送する通信チャネルである。規格化されたバスプロトコルは、種々の製造者により仕様が定義及び採用されているデータ転送プロトコルである。準拠デバイスはバスプロトコルを実装するコンピューティングシステムと互換性があり、その逆も同様である。ＰＣＩは関連性のある、規格化されたバスプトコルの一群を表す。本明細書で使用される場合、ＰＣＩはオリジナルＰＣＩ規格、ＰＣＩ−ｅＸｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、アクセラレーテッドグラフィックスポート（ＡＧＰ）及びＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅであり、ＰＣＩ−ＸＰとも呼ばれる）を含む。本明細書で使用される場合、用語「ＰＣＩ」はバスプロトコルのＰＣＩ群の任意のプロトコルを表すために使用され得る。図１に示す例では、ＰＣＩはコンピューティングシステムにより実装され得るバスプロトコルの一例としてのみ提供される。他のバスプロトコルは、例えば、インダストリ・スタンダード・アーキテクチャ（ＩＳＡ）、拡張ＩＳＡ（ＥＩＳＡ）、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）、マイクロチャネル、バスのアドバンスドテクノロジーアタッチメント（ＡＴＡ）群のいずれか等を含んでよい。例示の例は規格化されたバスプロトコル、プロプライエタリなバスプロトコルの組み合わせ及び／または規格化されたプロプライエタリなバスプロトコルの組み合わせで実装され得る。
【００１３】
コンピューティングシステム１００の例は、プロセッサ１０２、１つ以上のルートコンプレックス１０４ａ〜ｂ、メモリサブシステム１０６、スイッチ１０８、ブリッジ１１４及び多数の周辺デバイスを含んでよい。周辺デバイスは「エンドポイント」と呼ばれ得る。プロセッサ１０２は、Ｉｎｔｅｌ（登録商標）、ＡＭＤ（登録商標）、ＡＲＭ（登録商標）、Ｑｕａｌｃｏｍｍ（登録商標）等で製造されるような汎用コンピューティングユニットでよく、一般的にソフトウェアコードを実行することができる。プロセッサ１０２は複数の処理コアを含んでよい。
【００１４】
ルートコンプレックス１０４ａは、プロセッサ１００及びメモリサブシステム１０６をエンドポイント１１０ａ〜ｃ，１１２ａ〜ｃに接続するハードウェアデバイスまたはハードウェア及びソフトウェアデバイスであってよい。エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃはルートコンプレックス１０４ａに直接接続されてよい。代替的または追加的に、エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃはスイッチ１０８またはハブ等を通じてルートコンプレックス１０４ａに接続されてよい。ブリッジ１１４はさらに、ルートコンプレックス１０４ａに接続されてよい。ルートコンプレックス１０４ａはプロセッサ１０２とトランザクション及び応答を相互に転送してもよく、及び／またはプロセッサ１０２の代わりにトランザクションの生成及び応答を行ってよい。いくつかの場合、ルートコンプレックス１０４ａはさらに、エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃから別のエンドポイントに、及び／またはエンドポイント１１０ａ〜ｃ，１１２ａ〜ｃ、スイッチ１０８及びブリッジ１１４の間のトランザクションをルーティングしてよい。ルートコンプレックス１０４ａは、ホットプラグコントローラ、電源管理コントローラ、割り込みコントローラ及び／またはエラー検出及び報告などのサービスをコンピュータシステム１００に提供してよい。いくつかの場合、ルートコンプレックス１０４ａ及び／または１０４ｂはホストシステムの一部（例えば、プロセッサ１０２）として実装されてよい。いくつかの実施形態では、コンピューティングシステム１００は２つ以上のルートコンプレックスを含んでよい。各ルートコンプレックスは様々なセットの周辺デバイスに接続されてよい。いくつかの場合、１つ以上の周辺デバイスは２つ以上のルートコンプレックスに接続されてよい。例えば、図１に例示する通り、エンドポイント１１０ａはルートコンプレックス１０４ａ及び１０４ｂの両方に接続され得る。
【００１５】
メモリサブシステム１０６は、コンピューティングシステム１００により使用され得るデータの一時的または長期的な記憶を提供する。メモリサブシステム１０６は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）（例えば、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ）ＳＤＲＡＭ等）及び／またはスタティクランダムアクセスメモリ（ＳＲＡＭ）、フラッシュメモリ等の他のタイプのメモリを含んでよい。
【００１６】
エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃはデータトランザクションの生成及び／または応答を行うことができる周辺デバイスである。例えば、エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃは「リクエスタ」（トランザクション生成側）及び／または「コンプリータ」（トランザクション応答側）となり得る。ＰＣＩ実装では、エンドポイント１１０ａ〜ｃはＰＣＩｅを実装する周辺デバイスを含んでよく、エンドポイント１１２ａ〜ｃはレガシＰＣＩを実装する周辺デバイスを含んでよい。エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃは共有バスを通じてコンピューティングシステム１００に接続されてよい。例えば、レガシエンドポイント１１２ｂ〜ｃは共有ＰＣＩバス１１６に接続される。代替的または追加的に、エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃはスイッチングファブリックトポロジで接続されてよい。スイッチングファブリックトポロジは、ファブリックに接続されるデバイス間のポイント・ツー・ポイント接続を含んでよく、デバイス間でメッセージを通過させるためのルーティングシステムを含んでよい。スイッチングファブリックにおいて、トランザクションは複数の物理リンクにわたり広がってよい。ファブリック内のデバイス間の接続１１８ａ〜ｆはさらに、バスと呼ばれ得る。
【００１７】
スイッチ１０８は、ルートコンプレックス１０４ａ及びエンドポイント１１０ａ〜ｃ、１１２ａを含む種々の周辺デバイス間のブリッジとして機能する。スイッチ１０８はエンドポイント１１０ａ〜ｃ、１１２ａ間及びエンドポイント１１０ａ〜ｃ、１１２ａとルートコンプレックス１０４との間のトランザクションをルーティングしてよい。スイッチ１０８はさらに、受信及び送信データトランザクションに優先順位をつけるアービトレーションを提供し得る。ルートコンプレックス１０４及びエンドポイント１１０ａ〜ｃ、１１２ａは、スイッチ１０８を別の周辺デバイスリクエスタ及び／またはコンプリータとして処理し得る。
【００１８】
ブリッジ１１４は他のバスまたはスイッチングファブリックに接続を提供し得る。他のバスまたはスイッチングファブリックはＰＣＩの別形または別のプロトコルを実装し得る。例えば、図１の例では、ブリッジ１１４はレガシＰＣＩ規格を実装するバスへの接続を提供する。ブリッジ１１４はレガシＰＣＩなどの１つのバス規格から、ＰＣＩｅなどの別のプロトコルに変換する機構を含んでよい。
【００１９】
図１の例では、プロセッサ１０２、ルートコンプレックス１０４ａ〜ｂ、メモリサブシステム１０６、スイッチ１０８、ブリッジ１１４及びエンドポイント１１０ａ〜ｃ，１１２ａ〜ｃなどの構成要素は個別の構成要素として例示される。いくつかの実装では、これらの構成要素の１つ以上が単一の構成要素に組み合わされてよい。別の実装では、これらの構成要素の１つ以上が単一のチップに実装されてよい。別の実装では、これらの構成要素の１つ以上が、ハードウェア、ソフトウェア及び／またはハードウェアとソフトウェアとの組み合わせに部分的にまたは完全に実装されてよい。
【００２０】
上記の通り、エンドポイントまたは周辺デバイスはコンピューティングシステム１００の機能性を追加及び／または変更してよい。例えば、１つのエンドポイント１１０ａはＷｉ−Ｆｉ（登録商標）アダプタ１２０を実装してよい。Ｗｉ−Ｆｉ（登録商標）アダプタ１２０を使用すると、コンピューティングシステム１００は無線アクセスポイント１２２と無線で通信することができ得、これによりネットワークにアクセスする。別の例として、別のエンドポイント１１０ｂはビデオカードを実装してよい。ビデオカードはモニタ１２４または他の表示デバイスを接続するポートを含んでよい。さらなる例として、コンピューティングシステム１００はサウンドカードを実装するレガシエンドポイント１１２ａを含んでよい。サウンドカードはスピーカ１２６または他のオーディオ出力デバイス用のプラグを受け入れるポートまたはジャックを含んでよい。もう１つの例として、エンドポイント１１０ｃはＥｔｈｅｒｎｅｔ（登録商標）アダプタを実装し、ＤＳＬまたはケーブルモデムなどのゲートウェイデバイス１２８への接続を提供してよい。ゲートウェイデバイス１２８を使用することにより、コンピューティングシステム１００はネットワーク１３０にアクセスしてよい。
【００２１】
これらの例に例示の通り、ネットワークアダプタ、ビデオカード、オーディオカード及びその他を含む、様々なタイプの周辺デバイスがシステムに接続できる。いくつかの場合、周辺デバイスは２つ以上の機能デバイスを実装してよい。例えば、いくつかの場合、単一のエンドポイントはモニタ１２４に出力するためのビデオカードと、スピーカ１２６に出力するためのサウンドカードとの両方を含んでよい。いくつかの実装では、例えば、ドーターカードまたは外部デバイスを、周辺デバイス上の拡張スロットまたは外部ポートに接続することにより、周辺デバイスにさらに機能を追加することができる。いくつかの実施形態では、ＰＣＩを実装する周辺デバイスは最大で８つの個別の機能を含んでよい。これらの実装では、ＰＣＩデバイスは、クラスコード及び任意のサブクラスコードを使用して実装された機能（複数可）を示してよい。クラスコード及び任意のサブクラスコードはコンフィグレーションレジスタに配置されてよい。コンフィグレーションレジスタは以下にさらに詳細に説明する。
【００２２】
表１にＰＣＩデバイスクラスコード及びその説明を列挙する。クラスコードは８ビットの１６進法の値として与えられる。
【表１】
2019091494.tif 000003
【００２３】
初めに、図１に例示するコンピューティングシステム１００などのコンピューティングシステムに電源を投入すると、プロセッサ１０２はシステムに接続される任意のエンドポイントを認識しない場合がある。プロセッサ１０２はルートコンプレックス１０４ａ〜ｂを認識し、さらに場合によっては、ルートコンプレックスが１つ以上のバスに接続されていることを認識し得る。プロセッサ１０２はエンドポイント１１０ａ〜ｃ，１１２ａ〜ｃと、これらがシステムをスキャン及び構成する処理を実行することにより提供する機能とを発見し得る。この処理はエニュメレーション処理とも呼ばれ得る。エニュメレーション処理の間、プロセッサ１０２上で実行するソフトウェアは、ルートコンプレックス１０４に接続される各バス１１８ａ，１１８ｅ，１１８ｆをスキャンし、各バス１１８ａ，１１８ｅ，１１８ｆに連結される各エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃ、スイッチ１０８及び／またはブリッジ１１４を識別し得る。プロセッサ１０２はさらに、ルートコンプレックス１０４に、各エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃ、スイッチ１０８及び／またはブリッジ１１４のコンフィグレーションレジスタに読み出し及び書き込みを行うトランザクションを開始するように指示し得る。コンフィグレーション読み出しトランザクションは、プロセッサ１０２に、各エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃ、スイッチ１０８及び／またはブリッジ１１４のデバイスのケーパビリティ及びタイプを通知し得る。コンフィグレーション書き込みトランザクションは、各エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃ、スイッチ１０８及び／またはブリッジ１１４を構成及び制御するために使用できる。例えば、エニュメレーション中に、各エンドポイント１１０ａ〜ｃ，１１２ａ〜ｃ、スイッチ１０８及び／またはブリッジ１１４はバス及びデバイス番号を割り当てられてよい。コンフィグレーションレジスタは、通常、周辺デバイスの物理的なハードウェアレジスタとして実装され、周辺デバイスにおけるコンフィグレーションレジスタの定義は通常固定され、動的に変更できない。
【００２４】
上記の通り、エンドポイントは複数の機能を実装してよい。エニュメレーション処理はさらに、各エンドポイントにより実施される機能を発見してよい。いくつかの場合、各機能は機能自体のコンフィグレーションレジスタのセットを含んでよい。読み出し機能に特化したコンフィグレーションレジスタは、プロセッサ１０２に、機能の性質（例えば、機能がビデオドライバを実装する）を通知してよい。機能特化したコンフィグレーションレジスタはさらに、機能に特化した構成及び設定を記憶してよい。書き込み機能に特化したレジスタは、コンピューティングシステムまたはプロセッサ１０２により要求される通り、機能を構成してよい。
【００２５】
スイッチ１０８を発見すると、プロセッサ１０２はさらに、スイッチ１０８に接続されるエンドポイント１１０ａ〜ｃをスキャン及び構成してよい。ブリッジ１１４を発見すると、プロセッサ１０２はさらに、ブリッジ１１４の別方向上のバス１１６に連結されるエンドポイント１１２ｂ〜ｃをスキャン及び構成してよい。
【００２６】
いくつかの場合、エミュレートされたコンフィグレーション空間を実装する周辺デバイスは、それ自体を様々な周辺デバイスとしてコンピューティングシステムに表してよい。例えば、エミュレートされたコンフィグレーション空間を実装する周辺デバイスは、ある場合には、周辺デバイス自体をネットワークインターフェースカードに特化したコンフィグレーションレジスタを伴うネットワークインターフェースカードとして表わしてよく、あるいは、別の場合には、周辺デバイス自体を係る周辺デバイスに特化したコンフィグレーションレジスタを伴うビデオカードもしくはサウンドカードなどの様々な周辺デバイスとして表わしてよい。エミュレートされたコンフィグレーション空間はさらに、変更、複製または全く異なるコンフィグレーション空間に置換することができる。追加的に、複数のエミュレートされたコンフィグレーション空間は特定の機能に対して保持されてよい。例えば、コンピューティングシステムは複数の仮想マシンを実行していてよく、コンピューティングシステムにおいて各仮想マシンは様々なオペレーティングシステムを実行している。各仮想マシンは、周辺デバイスにより提供される同じ機能に対して異なるコンフィグレーションを要求してよい。係る場合、周辺デバイスのエミュレートされたコンフィグレーション空間はエミュレートされたコンフィグレーションを各仮想マシンに対し提供してよい。エミュレートされたコンフィグレーション空間はさらに、より少ないハードウェアを必要とし得る。例えば、ＳＲ−ＩＯＶを含むデバイスは、各機能に対する物理的なハードウェアレジスタを要求する代わりに、任意の数の物理機能及び／または仮想機能に対してエミュレートされたコンフィグレーションを含んでよい。
【００２７】
ＩＩ．エミュレートされたコンフィグレーション空間
図２は、いくつかの実施形態に係る、エミュレートコンフィグレーション空間を実装する周辺デバイス２００の一例を例示する。例えば、周辺デバイス２００は図１に例示の１つ以上のエンドポイント及び／またはルートコンプレックスを置換するために使用できる。周辺デバイス２００はスタンドアロンのデバイスとして示されるが、周辺デバイス２００の構成要素は、周辺デバイス２００及びホストシステムが同じシリコンダイまたはパッケージに実装できるよう、ホストシステム（例えば、ホストプロセッサ）に統合できることに留意すべきである。例えば、周辺デバイス２００は、ホストプロセッサと同じチップ上に実装される統合グラフィックスデバイスであり得る。例示される周辺デバイスの例は、ＩＳＡ、ＥＩＳＡ、ＶＥＳＡ、マルチチャネル等、プロトコルのＰＣＩ群などの任意のバスプロトコルを実装してよい。バスプロトコルは指定アドレスにより、周辺デバイスが包含される予定のコンフィグレーションレジスタに定義を与え得る。図２の周辺デバイス２００は実装されるバスプロトコルに対して定義されるコンフィグレーションアドレス空間の少なくとも一部をエミュレートしてよい。いくつかの場合、周辺デバイス２００はさらに、周辺デバイスの基本機能性（例えば、バス速度の設定用など）及び／または特定のバスプロトコルを実装する全ての周辺デバイスに共通する基本機能性を実装するコンフィグレーションレジスタなどのエミュレートされないコンフィグレーションレジスタを含んでよい。これらのエミュレートされないコンフィグレーションレジスタは「ネイティブ」コンフィグレーション空間と呼ばれ得る。
【００２８】
いくつかの実装では、エミュレーションはプログラムまたはデバイスが別のプログラムまたはデバイスを模倣する能力を指す。例えば、図２の周辺デバイス２００は様々な周辺デバイスの機能（複数可）をエミュレートする、エミュレートされたコンフィグレーション空間を含んでよい。例えば、周辺デバイス２００は、ある状況においてビデオカードをエミュレートし、別の状況において大容量ストレージデバイスをエミュレートしてよい。別の例として、ある機能を実装し、ある企業により製造される周辺デバイス２００は、様々な企業により製造され同じ機能を実装する周辺デバイスをエミュレートできてよい。いくつかの実施形態では、周辺デバイス２００は２つ以上の周辺デバイスをエミュレートするために使用することができ、その結果、いくつかのシナリオでは、周辺デバイス２００は周辺サブシステム全体をエミュレートできる。
【００２９】
周辺デバイス２００はバスインターフェースコア２１０、コンフィグレーション管理モジュール２２０、ローカルハードウェア２３０及びメモリ２４０を含んでよい。周辺デバイス２００はバス２０２上でコンピューティングシステムと通信状態にあってよい。バス２０２は特定のバスプロトコルを実装してよい。
【００３０】
バスインターフェースコア２１０は、バス２０２と通信するために周辺デバイス２００が必要とする回路及び論理を含んでよい。例えば、バスインターフェースコア２１０は、バス２０２と通信するためのバスインターフェース２１４を含んでよい。バスインターフェース２１４は、バス２０２に対するリンクの任意の電気特性を管理する回路を含む、バス２０２への物理接続を含んでよい。バスインターフェース２１４はさらに、他の動作の中でとりわけ、バス２０２への同期、受信トランザクションの復号、送信トランザクションの暗号化及び／または送受信データのエラーの検出及び管理（場合による）に対する論理を含んでよい。
【００３１】
バスインターフェースコア２１０はさらに、ネイティブコンフィグレーション空間２１２を含んでよい。エミュレートされたコンフィグレーション空間を含まない周辺デバイスでは、通常、バスインターフェースコア２１０は、例えば、バスプロトコルに定義される、周辺デバイスの全てのコンフィグレーションレジスタを含む。さらに、係る実装では、バスインターフェースコア２１０は、通常、全ての読み出し及び書き込みトランザクションをコンフィグレーションレジスタに供給し（コンフィグレーションアクセス要求またはコンフィグレーションアクセスとも呼ばれ得る）、応答（必要であれば）をバス２０２に提供する。対照的に、周辺デバイス２００の例では、ネイティブコンフィグレーション空間２１２は、周辺デバイス２００のコンフィグレーションレジスタのサブセットである、ネイティブコンフィグレーションレジスタを含んでよい。例えば、ネイティブコンフィグレーションレジスタは所与のバスプロトコルに対する周辺デバイス全てに共通となり得る基本機能（例えば、バス速度の設定用など）に関連してよく、及び／または別様にはエミュレートが不要または不都合なコンフィグレーションレジスタであってよい。いくつかの実施形態では、ネイティブコンフィグレーション空間２１２はさらにエミュレートされ得る。
【００３２】
いくつかの実装では、バスインターフェースコア２１０はネイティブコンフィグレーション空間２１２に向けられる読み出し及び書き込みトランザクションを検出してよい。係る実装では、バスインターフェースコア２１０は、ネイティブコンフィグレーションレジスタ２１２に導かれるコンフィグレーショントランザクションを供給してよい。さらに、これらの実装では、ネイティブコンフィグレーション空間２１２内に存在しないコンフィグレーション空間に向けられるコンフィグレーショントランザクションはコンフィグレーション管理モジュール２２０に導かれてよい。別の実装では、バスインターフェースコア２１０はコンフィグレーション読み出し及び書き込みトランザクションの全てを、どこに向けられるかに関わらず、コンフィグレーション管理モジュール２２０に導き、コンフィグレーション管理モジュール２２０はトランザクションがネイティブコンフィグレーション空間２１２に対するものかどうかを判断してよい。
【００３３】
コンフィグレーション管理モジュール２２０は、コンフィグレーションレジスタに導かれる読み出し及び書き込みトランザクションの管理を提供してよい。いくつかの実装では、コンフィグレーション管理モジュール２２０はトランザクションロギングを提供してよい。トランザクションロギングは受信コンフィグレーショントランザクションを記録または追跡するハードウェア及び／またはソフトウェアにより実施されてよい。コンフィグレーショントランザクションを受信すると、バスインターフェースコア２１０はコンフィグレーション管理モジュール２２０によりトランザクションを記録してよい。バスインターフェースコア２１０は他の動作を続けてよく、記録されたコンフィグレーショントランザクションが完了するのを待つ必要はない。コンフィグレーショントランザクションは、例えば、ローカルハードウェア２３０が自由に行うときはいつでも、トランザクションログから読み出され、ローカルハードウェア２３０により供給することができる。ローカルハードウェア２３０はトランザクションが読み出されると、ログからトランザクションを取り除いてもよく、あるいはトランザクションが実行され応答された後でトランザクションを取り除いてもよく、あるいは別様には、トランザクションが供給されたこと、または供給途中であることをログに示してよい。
【００３４】
ローカルハードウェア２３０は、コンフィグレーショントランザクションを処理するように適合された１つ以上のローカルプロセッサ、１つ以上のローカルプロセッサコア、ローカルプロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路として実装することができる。複数のプロセッサまたはプロセッサコアを含む実装では、各プロセッサまたはプロセッサコアは独立してまたは協調してソフトウェアコードを実行してよい。係る実装では、各プロセッサまたはプロセッサコアは、コンフィグレーション管理モジュール２１０から複数のトランザクションを同時に供給してよい。１つのプロセッサを含む実装では、プロセッサはマルチスレッド型でよく、さらに複数のトランザクションを同時に供給することができてよい。ローカルハードウェア２３０はオペレーティングシステム２３２を実行してよい。オペレーティングシステム２３２は、Ｌｉｎｕｘ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）、ｉＯＳ（登録商標）等などの市販のオペレーティングシステムでよく、あるいはプロプライエタリなオペレーティングシステムでよい。
【００３５】
ローカルハードウェア２３０はエミュレーションモジュール２３６を実装または実行してよい。いくつかの実施形態では、コンフィグレーショントランザクションは高速な応答時間を要求し得るため、エミュレーションモジュールはコンフィグレーショントランザクションの処理が割り込まれないよう、セキュアな環境で実行され得るか、十分な権限を有する状態で実行され得る。エミュレーションモジュール２３６は、コンフィグレーショントランザクションを含むトランザクションをコンフィグレーション管理モジュール２２０から受信してよく、これらのトランザクションを供給してよい。トランザクションの供給は、必要であれば、トランザクションのタイプ（例えば、読み出し及び／または書き込み）の識別、トランザクションのソースの識別、トランザクションが導かれる宛先の識別、トランザクションの実行及び／またはトランザクションへの応答の生成を含んでよい。例えば、コンフィグレーション読み出しトランザクションは、コンフィグレーションレジスタの読み出しと、レジスタから読み出された情報の応答とを含んでよい。別の例として、コンフィグレーション書き込みレジスタはコンフィグレーションレジスタのコンテンツの更新を含んでよい。いくつかの場合、コンフィグレーション書き込みは、書き込みトランザクションが完了したことを確認した状態で、応答されてよい。
【００３６】
いくつかの実装では、エミュレーションモジュール２３６は、コンフィグレーショントランザクションがネイティブコンフィグレーション空間２１２に導かれるかまたはエミュレートされたコンフィグレーション空間２４２に導かれるかを判断してよい。コンフィグレーショントランザクションがネイティブコンフィグレーション空間２１２に導かれる場合、エミュレーションモジュール２３６はバスインターフェースコア２１０と通信し、ネイティブコンフィグレーションレジスタの読み出しまたは書き込みを行ってよい。コンフィグレーション読み出しがエミュレートされたコンフィグレーション空間２４２に導かれる場合、エミュレーションモジュール２３６はコンフィグレーションレジスタのコンテンツを表す値を、エミュレートされたコンフィグレーション空間２４２から読み出してよい。コンフィグレーション書き込みが、エミュレートされたコンフィグレーション空間２４２に導かれる場合、エミュレーションモジュール２３６はコンフィグレーションレジスタのコンテンツを表すエミュレートされたコンフィグレーション空間２４２のデータを書き込みまたは更新してよい。いくつかの実装では、コンフィグレーショントランザクションは１つ以上の機能に関連するコンフィグレーションレジスタに導かれてよく、この場合、エミュレーションモジュール２３６は機能を識別し、その機能に特化したエミュレートされたコンフィグレーションレジスタにアクセスしてよい。別の実装では、コンフィグレーショントランザクションは複数のソースのうちの１つ、例えば、様々なオペレーティングシステムを実行中であり得るいくつかの仮想マシンの１つなどから来てよい。係る実装では、エミュレーションモジュール２３６はソースを識別し、そのソースに対して指定され得るまたは適切となり得るエミュレートされたコンフィグレーションレジスタにアクセスしてよい。
【００３７】
メモリ２４０はローカルハードウェア２３０により動作され得るデータの記憶を提供する。メモリモジュール２４０は、ＤＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ−ＳＤＲＡＭ）、ＳＲＡＭ、フラッシュもしくはいくつかの他のメモリタイプ、またはそれらの任意の組み合わせを含んでよい。いくつかの実施形態では、メモリ２４０は外部メモリモジュールとして、または周辺デバイス２００の内部メモリとして、またはその組み合わせとして実装され得る。メモリモジュール２４０はエミュレートされたコンフィグレーション空間２４２を記憶してよい。エミュレートされたコンフィグレーション空間２４２は任意の数の周辺デバイスに対して定義されたコンフィグレーションレジスタアドレス空間の全てまたはいくつかの表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間２４２は周辺デバイスの機能の動作に影響を及ぼし得るコンフィグレーション空間を含む。いくつかの実装では、エミュレートされたコンフィグレーション空間２４２は、バスプロトコルを実装する全ての周辺デバイスに対して基礎的及び／または共通となり得るか、あるいはエミュレートが不要または不都合となり得るネイティブコンフィグレーション空間を除く。エミュレートされたコンフィグレーションレジスタは、読み出し専用で読み出しクリア（または読み出しクリアビットを有する）のフィールドを含んでよく、読み取り可能及び書き込み可能の両方であってもよく、０書き込みクリア（もしくは０書き込みクリアビットを有する）であってよく、及び／または１書き込み設定（もしくは書き込み設定ビットを有する）であってよい。
【００３８】
エミュレートされたコンフィグレーション空間２４２は、テキストファイル、ソースコード、オブジェクトコードとして、スクリプトとして、及び／またはエミュレーションモジュール２３６により読み出し可能ないくつかの他の形式でメモリ２４０に記憶されてよい。いくつかの実施形態では、エミュレートされたコンフィグレーション２４２は暗号化されてよい。いくつかの実装では、エミュレートされたコンフィグレーション２４２は変更または置換され得る。例えば、追加のエミュレートされたコンフィグレーションレジスタまたはエミュレートされたコンフィグレーションレジスタの更新バージョンが、例えば、インターネットのウェブサイトを通じて提供されてよい。これらの実装では、追加または更新された、エミュレートされたコンフィグレーションレジスタは、インターネットからダウンロードされ、メモリ２４０にアップロードされ得る。いくつかの実装では、メモリ２４０は、複数のエミュレートされたコンフィグレーション空間２４２または同じエミュレートされたコンフィグレーション空間２４２の複数バージョンを記憶してよい。
【００３９】
図３は、いくつかの実施形態に係る、周辺デバイス３００のＰＣＩｅ実装の一例を例示する。図３のＰＣＩｅ周辺デバイス３００は、ＰＣＩｅコア３１０、コンフィグレーション管理モジュール３２０、ローカルハードウェア３３０及びメモリ３４０を含んでよい。ＰＣＩｅ周辺デバイス３００は、バス３０２を通じてコンピューティングシステムと通信状態にあってよい。バス３０２はＰＣＩｅプロトコルを実装してよい。
【００４０】
ＰＣＩｅコア３１０はＰＣＩｅを使用してバス上の通信を支援するのに必要な少なくともいくつかの機能性を含んでよい。ＰＣＩｅコア３１０はバスインターフェース３１４を含んでよい。バスインターフェース３１４は受信及び送信トランザクションを管理するネットワークプロトコル層３１４ａ〜ｄを実装してよい。アウトバウンドトランザクションでは、トランザクション層３１４ａは、ＰＣＩｅコア３１０自体、コンフィグレーション管理モジュール３２０またはローカルハードウェア３３０などのトランザクションイニシエータにより提供される情報でパケットを形成してよい。データリンク層３１４ｂは追加情報をパケットに追加してもよく、追加情報は、例えば、トランザクションの受信者が情報の整合性を検証するために使用し得るパケットヘッダ情報及び／またはエラー確認情報である。メディアアクセス層３１４ｃはソースの物理アドレス及びトランザクションの宛先の物理アドレスなどのアドレス指定情報を提供してよい。物理層３１４ｄはパケットを電気信号に暗号化し、パケットをバス３０２上に送信してよい。受信トランザクションでは、物理層３１４ｄはバス３０２からパケットを受け取り、パケットを復号する。メディアアクセス層３１４ｃはトランザクションのソース及び宛先アドレスを処理してよい。データリンク層３１４ｂはパケットヘッダ情報をパースし、エラーを確認してよい。トランザクション層３１４ａはパケットに包含される情報を、ＰＣＩｅコア３１０及び／またはローカルプロセッサ３３０により処理可能な形式に変換してよい。
【００４１】
ＰＣＩｅコア３１０はさらに、ネイティブコンフィグレーション空間３１２を含んでよい。ネイティブコンフィグレーション空間３１２は基本機能性に関連し、及び／またはＰＣＩｅベースの周辺デバイスに共通し得る、及び／またはエミュレートが不要または不都合であり得るコンフィグレーションレジスタを含んでよい。係るレジスタの例は、タイプ０／１共通レジスタヘッダ３１６、アドバンストエラーリポーティングケーパビリティレジスタ３１２ａ、拡張メッセージシグナル割り込み（ＭＳＩ−Ｘ）ケーパビリティレジスタ３１２ｂ、電源管理ケーパビリティレジスタ３１２ｃを含む。例えば、エミュレートされたコンフィグレーション空間３２４内に任意の残りのコンフィグレーションレジスタ空間を見つけてよい。いくつかの実施形態では、ネイティブコンフィグレーション空間３１２はさらにエミュレートされてよい。したがって、例えば、いくつかの実施形態では、ＰＣＩｅベースの周辺デバイスは、そのＰＣＩｅコンフィグレーション空間レジスタの全てをエミュレートしてよい。
【００４２】
いくつかの実装では、ＰＣＩｅコア３１０はネイティブコンフィグレーション空間３１２に対する読み出し及び書き込みトランザクションを検出してよい。係る実装では、ＰＣＩｅコア３１０は、ネイティブコンフィグレーション空間３１２に導かれるコンフィグレーショントランザクションを供給してよい。さらに、これらの実装では、ネイティブコンフィグレーション空間３１２内に存在しないコンフィグレーション空間に向けられたコンフィグレーショントランザクションはコンフィグレーション管理モジュール３２０に導かれてよい。他の実装では、ＰＣＩｅコア３１０は、全てのコンフィグレーション読み出し及び書き込みトランザクションを、それらがネイティブコンフィグレーション空間３１２に向けられるかどうかに関わらず、コンフィグレーション管理モジュール３２０に導く。
【００４３】
コンフィグレーション管理モジュール３２０は、コンフィグレーションレジスタに導かれる読み出し及び書き込みトランザクションの管理を提供してよい。いくつかの実装では、コンフィグレーション管理モジュール３１０はトランザクションロギングを提供してよい。コンフィグレーショントランザクションを受信すると、ＰＣＩｅコア３１０はコンフィグレーション管理モジュール３２０によりトランザクションを記録してよい。ＰＣＩｅコア３１０は、次いで、他の動作を続けてよい。コンフィグレーショントランザクションはログから読み出され、ローカルハードウェア３３０により供給されてよい。ローカルプロセッサ３３０はトランザクションが読み出されると、ログからトランザクションを取り除いてよく、あるいはトランザクションが実行及び応答された後でトランザクションを取り除いてよく、あるいは別様には、トランザクションが供給されたこと、または供給途中であることをログに示してよい。
【００４４】
ローカルハードウェア３３０は、コンフィグレーショントランザクションを処理するように適合された１つ以上のプロセッサ、１つ以上のプロセッサコア、プロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路を含んでよい。ローカルハードウェア３３０はオペレーティングシステム３３２を実行してよい。オペレーティングシステム３３２はユーザモード３３２ａ及び特権モード３３２ｂを提供してよい。ユーザモード３３２ａは、例えば、ＰＣＩｅ周辺デバイス３００にロードされたユーザアプリケーションを実行してよい。特権モード３３２ｂはシステム機能を実行してよい。
【００４５】
ローカルハードウェア３３０はさらに、動作のセキュアモード３３４（例えば、ＡＲＭセキュアモード等）を含んでよい。セキュアモード３３４で実行するプログラムまたはソフトウェアは、ローカルハードウェア３３０内の他のプログラムから分離されてよい。例えば、オペレーティングシステムモジュール３３２及び／またはオペレーティングシステムモジュール３３２上で実行するアプリケーションは、セキュアモジュール３３４内で実行するモジュールにアクセスできない場合がある。逆に、いくつかの実施形態では、セキュアモード３３４内で実行するプログラムは、セキュアモジュール２３４の外部で実行するモジュールには影響を及ぼし得ない場合がある。その結果、セキュアモード３３４は、ローカルハードウェア３３０内で実行中であり得る他のプログラムからの割り込みまたは干渉がない状態でプログラムが実行できる環境を提供し得る。セキュアモード３３４で実行するプログラムは高度に最適化されてもよく、及び／または他のプログラムより高い優先度を有してよい。いくつかの実施形態では、セキュアモード３３４はローカルハードウェア３３０内で論理的及び／または物理的に分離されたハードウェア及び／またはソフトウェアのセクションとして実装されてよい。
【００４６】
いくつかの実施形態では、エミュレーションモジュール３３６はローカルハードウェア３３０のエミュレーション制御論理回路として、及び／またはセキュアモード３３４で実行中のエミュレーションソフトウェアとして実装され得る。エミュレーションソフトウェアはＣｏｎｆｉｇＳｐａｃｅエミュレーションソフトウェア（ＣＳＥＳ）と呼ばれ得る。エミュレーションモジュール３３６は、コンフィグレーショントランザクションを含むトランザクションをコンフィグレーション管理モジュール３２０から受信してよく、これらのトランザクションを供給してよい。例えば、コンフィグレーション読み出しトランザクションの供給は、コンフィグレーションレジスタをエミュレートされたコンフィグレーション空間から読み出すことと、レジスタから読み出された情報に応答することとを含んでよい。別の例として、コンフィグレーション書き込みレジスタの供給は、エミュレートされたコンフィグレーション空間にあるコンフィグレーションレジスタのコンテンツを更新することを含んでよい。いくつかの場合、コンフィグレーション書き込みは、書き込みトランザクションが完了したことを確認した状態で、応答されてよい。
【００４７】
いくつかの実装では、エミュレーションモジュール３３６は周辺デバイスに導かれるコンフィグレーショントランザクションの一部または全てを受信してよい。いくつかの実装では、エミュレーションモジュール３３６は、コンフィグレーショントランザクションがネイティブコンフィグレーション空間３１２に導かれるか、またはエミュレートされたコンフィグレーション空間３４２に導かれるかどうかを判断してよい。コンフィグレーショントランザクションがネイティブコンフィグレーション空間３１２に導かれる場合、エミュレーションモジュール３３６はＰＣＩｅコア３１０と通信し、ネイティブコンフィグレーションレジスタの読み出しまたは書き込みを行ってよい。いくつかの実施形態では、コンフィグレーション管理モジュールは、エミュレーションモジュール３３６の関与なく、ネイティブコンフィグレーションレジスタのアクセスを処理してよい。コンフィグレーション読み出しが、エミュレーションコンフィグレーション３４２に導かれる場合、エミュレーションモジュール３３６はコンフィグレーションレジスタのコンテンツを表す値を、エミュレートされたコンフィグレーション空間３４２から読み出してよい。コンフィグレーション書き込みが、エミュレートされたコンフィグレーション空間３４２に導かれる場合、エミュレーションモジュール３３６はコンフィグレーションレジスタを表すエミュレートされたコンフィグレーション空間３４２のデータを書き込みまたは更新してよい。いくつかの実装では、エミュレーションモジュール３３６は、それ自体が、１つ以上のコンフィグレーションレジスタを内部にエミュレートしてよい。係る実装では、エミュレーションモジュール３３６はコンフィグレーションレジスタの内部表現を読み出すか、または書き込んでよく、エミュレートされたコンフィグレーション空間３４２にアクセスする必要がなくなり得る。
【００４８】
いくつかの実装では、エミュレーションモジュール３３６はＰＣＩ割り込み機構を利用し、エミュレートされたコンフィグレーションレジスタのアクセスを処理してよい。例えば、エミュレーションモジュール３３６はＰＣＩｅコア０割り込みをセキュアな割り込みと定義し、この割り込みに対するハンドラを登録してよい。割り込みハンドラは、割り込みが受信された際にトリガされる独立したソフトウェア機能となり得る。ＰＣＩｅコア０割り込みがトリガされると、エミュレーションモジュール３３６が警告を受けてよく、コンフィグレーション管理モジュール３２０からトランザクションの供給を開始してよい。ＰＣＩｅコア０割り込みをセキュアとして定義することにより、割り込みが隠されるか、オペレーティングシステムモジュール３３２などの非セキュアなモジュールからマスクされてよい。いくつかの実施形態では、セキュアな割り込みはさらに、非セキュアな割り込みハンドラに割り込んでよい。
【００４９】
メモリ３４０はローカルハードウェア３３０により動作され得るデータの記憶を提供する。メモリ３４０は、ＤＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ−ＳＤＲＡＭ等）、ＳＲＡＭ、フラッシュメモリもしくはいくつかの他のメモリタイプまたはそれらの組み合わせを含んでよい。いくつかの実施形態では、メモリ３４０は外部メモリモジュールとして、または周辺デバイス２００の内部メモリとして、またはその組み合わせとして実装され得る。メモリ３４０はエミュレートされたコンフィグレーション空間３４２を記憶してよい。エミュレートされたコンフィグレーション空間３４２は、４ＫＢのＰＣＩｅコンフィグレーションアドレスの全てまたは一部に対する表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間３４２はＰＣＩｅ拡張ケーパビリティレジスタを含んでよい。例えば、エミュレートされたコンフィグレーション空間３４２は、アドバンストエラーリポーティングケーパビリティレジスタ、仮想チャネルケーパビリティレジスタ、デバイスシリアル番号レジスタ及び／または電源管理ケーパビリティレジスタを含み得る。代替的または追加的に、エミュレートされたコンフィグレーション空間３４２はＳＲ−ＩＯＶ拡張ケーパビリティレジスタを含んでよい。係る場合、エミュレートされたコンフィグレーション空間３４２は、ＳＲ−ＩＯＶの物理機能及び仮想機能を制御可能にするケーパビリティレジスタを含んでよい。ＳＲ−ＩＯＶを以下にさらに詳細に説明する。
【００５０】
いくつかの実装では、エミュレートされたコンフィグレーション空間３４２は動的に置換及び／または変更されてよい。例えば、ＰＣＩｅ拡張ケーパビリティは、エミュレートされたコンフィグレーション空間３４２で追加または取り除かれてよい。他の実装では、ＰＣＩｅ周辺デバイス３００は、様々な仮想マシン、様々なオペレーティングシステム及び／または様々なデバイスタイプに適した複数のエミュレートされたコンフィグレーション空間を含んでよい。
【００５１】
表２はエミュレートされたコンフィグレーション空間３４２の一例を例示する。オフセットはエミュレートされたコンフィグレーション空間の開始からのオフセットを記述する。オフセットは１２ビットの１６進法の値として与えられる。エミュレートされたコンフィグレーションは各エミュレートされたコンフィグレーションレジスタに関する他の情報を含んでよい。例えば、いくつかのエミュレートされたコンフィグレーションレジスタは、ルートコンプレックスにより、読み出し専用、書き込み専用、または読み出し可能／書き込み可能専用としてマークされてよい。別の例として、いくつかのエミュレートされたコンフィグレーションレジスタにデフォルトまたはリセット値を提供してよい。いくつかの実施形態では、エミュレートされたコンフィグレーション空間３４２は、表２に示すコンフィグレーションレジスタの複数セットに対する表現を含んでよい。例えば、いくつかの実施形態では、ＰＣＩｅ周辺デバイス３００は、１つ以上のＰＣＩｅエンドポイントに対する接続を提供し得るＰＣＩスイッチ、ブリッジまたはハブを実装するために使用され得る。係るシナリオでは、エミュレートされたコンフィグレーション空間３４２は、スイッチ、ブリッジまたはハブのコンフィグレーションレジスタ、ならびにスイッチ、ブリッジまたはハブに関連する各エンドポイントデバイスに対するコンフィグレーションレジスタに対する表現を含んでよい。
【表２】
2019091494.tif 000004
2019091494.tif 000005
【００５２】
上述の通り、コンフィグレーショントランザクションロギングは受信コンフィグレーショントランザクションを追跡するために実装されてよい。コンフィグレーショントランザクションロギングは受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てのログを保持してよい。いくつかの実装では、コンフィグレーショントランザクションロギングは所与のコンフィグレーショントランザクションを記録するために、いくつかのレジスタを使用してよい。これらのレジスタは、アドレスレジスタ、データレジスタ及び完了レジスタを含んでよい。
【００５３】
アドレスレジスタは、コンフィグレーション読み出しまたは書き込みトランザクションがコンフィグレーショントランザクションロギングに送信される際に設定されてよい。アドレスレジスタは、インバウンドコンフィグレーショントランザクションのターゲットであるコンフィグレーションレジスタを識別するのに必要な情報を包含してよい。いくつかの場合、アドレスレジスタは、エミュレーションモジュール３３６により読み出される際にクリアされてよい。一例として、アドレスレジスタは、アドレスレジスタが有効かどうかを示す有効インジケータ、コンフィグレーションタイプ（例えば、タイプ０またはタイプ１）、ターゲットレジスタオフセット、トランザクションが読み出しアクセスか書き込みアクセスかを示す読み出し／書き込みインジケータ、物理機能または仮想機能のどちらがコンフィグレーションアクセスのターゲットであるかを示すデバイス機能フィールド及びターゲットバス番号などの情報を含んでよい。いくつかの実施形態では、有効なインジケータを設定することにより、エミュレーションモジュールに対する割り込みまたは低遅延通知をトリガし、エミュレーションモジュールにコンフィグレーションアクセス要求を供給するように要求してよい。
【００５４】
データレジスタはコンフィグレーショントランザクションに関連するデータを記憶してよい。コンフィグレーション書き込みトランザクションでは、データレジスタは書き込まれるデータを記憶してよい。コンフィグレーション読み出しトランザクションでは、データレジスタはエミュレーションモジュール３３６によりターゲットコンフィグレーションレジスタから読み出されるデータを記憶してよい。
【００５５】
完了レジスタはコンフィグレーション読み出しまたは書き込みトランザクションのステータスを示す。完了レジスタは、エミュレーションモジュール３３６がコンフィグレーショントランザクションを完了すると、エミュレーションモジュール３３６により書き込まれてよい。完了レジスタに書き込まれる値は、コンフィグレーショントランザクションのイニシエータ（例えば、ルートコンプレックス）に送信される完了応答を形式化するために使用され得る。例えば、完了レジスタの値は完了表示を生成するために使用されてよい。完了表示は、バス番号、デバイス番号及び／または周辺デバイスの機能番号ならびにコンフィグレーショントランザクションの受け入れ及び供給を行った機能を識別してよい。いくつかの場合、エミュレーションモジュール３３６が完了レジスタに書き込む際、保留コンフィグレーショントランザクションは完了したとみなされ、解放されてよい。いくつかの場合、完了レジスタは各インバウンドコンフィグレーショントランザクションに対して１度のみ書き込まれてよい。
【００５６】
一例として、完了レジスタは、完了ステータス、ターゲットバス番号、ターゲットデバイス番号及びターゲット機能番号などの情報を含んでよい。完了ステータスは、コンフィグレーショントランザクションの完了が成功したか、コンフィグレーショントランザクションが無効だったか（例えば、ターゲット機能番号またはターゲットバス番号が存在し得ない）、コンフィグレーショントランザクションを再試行すべきか（例えば、周辺デバイスがコンフィグレーショントランザクションを受け入れることができず、コンフィグレーショントランザクションがトランザクションのイニシエータにより再度送信されるべきである）またはコンフィグレーショントランザクションが中止されたか（例えば、周辺デバイスはコンフィグレーショントランザクションを受け入れたが、完了できなかった）を示してよい。ターゲットバス番号は、どのバス番号を完了識別子で使用するかを示してよい（例えば、アドレスレジスタに提供されるターゲットバス番号が返されるか、ターゲット機能に関連するバス番号が返される）。例えば、周辺デバイスはバス番号１上に存在してよい。インバウンドコンフィグレーショントランザクションは、コンフィグレーションタイプ１であってよく、バス番号２に導かれてよい。この場合、エミュレーションモジュールはバス番号１または２のいずれかを返し得る。ターゲットデバイス番号は、どのターゲットデバイス番号を完了識別子で使用するかを示してよい（例えば、アドレスレジスタに提供されるターゲットデバイス番号が返されるか、ターゲット機能に関連するデバイス番号が返される）。ターゲット機能番号は、どのターゲット機能番号を完了識別子で使用するかを示してよい（例えば、アドレスレジスタに提供されるターゲット機能番号が返されるか、ポート機能番号が返される）。
【００５７】
エミュレートされたコンフィグレーション技法を伴う周辺デバイスは、柔軟性及び構成可能性に加え、さらに、向上したセキュリティを提供し得、これはエミュレートされない周辺デバイスでは得られない場合がある。
【００５８】
例えば、周辺デバイスはサービス攻撃の拒絶対象となり得る。係る攻撃では、悪意のある仮想マシンは、デバイスハードウェア及び／またはソフトウェアの障害を引き起こそうと試みて、周辺デバイスに大量のコンフィグレーショントランザクションを送り得る。しかしながら、エミュレーションモジュールを備える周辺デバイスは、（例えば、トランザクションログを監視することにより）仮想マシンによるコンフィグレーションアクセス速度を追跡可能になり得る。エミュレーションモジュールは、この結果、仮想マシンによる異常なアクセス増加を検出し得、その仮想マシンからのさらなるアクセスを拒否し得る。
【００５９】
別の例では、仮想マシンは初期化されていない機能または架空の機能にアクセスしてよい。普通の周辺デバイスは係る場合に停止することがある。しかしながら、エミュレーションモジュールは係るアクセスを取り込み、初期化されていない機能または架空の機能に対してコンフィグレーションレジスタをエミュレートするか、アクセスが架空の機能であると認識することにより、適切に応答し得る。エミュレーションモジュールは、その結果、周辺デバイスが停止することを防ぎ得る。
【００６０】
さらに別の例では、仮想マシンは不適切な時間に機能のリセットを開始し得る。しかしながら、エミュレーションモジュールは、係るソフトウェアベースのリセットを取り込み記録し得る。エミュレーションモジュールは、次に、例えば、全ての保留トランザクションを完了することを可能にした後などの適切な時間にリセットを処理してよい。代替的に、エミュレーションモジュールは単に不適切なリセットをブロックしてよい。
【００６１】
最後の例として、仮想マシンは無効またはタイミングの悪いコンフィグレーション変更を試みることがある。例えば、仮想マシンはバスリンクの速度または幅を変更しようと試みることがある。しかしながら、エミュレーションモジュールは、これらの不適切なコンフィグレーション変更を含む全てのコンフィグレーションアクセスを取り込むことがあり、これらの無効またはタイミングの悪いコンフィグレーション変更アクセスを拒否し得る。
【００６２】
ＩＩＩ．コンフィグレーショントランザクション処理
図４はコンフィグレーション読み出しトランザクションを供給する周辺デバイス４００の一例を例示する。図４の周辺デバイス４００は他の周辺デバイス及び／または複数のデバイス機能を柔軟にエミュレートしてよい。周辺デバイス４００は、バスインターフェースコア４１０、コンフィグレーショントランザクションロギングユニット４０８、ネイティブコンフィグレーション空間４１２、エミュレーションモジュール４３０及びメモリ４４０を含んでよい。
【００６３】
バスインターフェースコア４１０は、周辺デバイス４００をコンピューティングシステムに接続するバスと通信するための機能性を含んでよい。バスインターフェースコア４１０は、バスへの物理接続を含んでよく、ハードウェア及び／またはソフトウェアを提供してバスへの電気接続を管理し、受信トランザクションを復号し、送信トランザクションを暗号化し、及び／または受信及び送信トランザクションのエラーを管理してよい。
【００６４】
コンフィグレーショントランザクションロギングユニット４０８は受信コンフィグレーショントランザクションを追跡してよい。コンフィグレーショントランザクションロギングユニット４０８は受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てのログを保持してよい。ログはリストまたは表の形式、あるいはリスト及び／または表の組み合わせの形態をとってよい。いくつかの実装では、コンフィグレーショントランザクションロギングユニット４０８は、いくつかのトランザクションが他のトランザクションより早く供給され得るよう、受信コンフィグレーショントランザクションに優先度を割り当ててよい。係る実装では、コンフィグレーショントランザクションロギングユニット４０８はさらに、一貫性、つまり読み出し及び書き込みが適切な順序で発生するよう保持してよい。例えば、レジスタの読み出しトランザクションが、同じレジスタに対する書き込みトランザクションの後に受信される場合、書き込みトランザクションが最初に発生しなければならない。他の実装では、コンフィグレーションロギング４０８は受信トランザクションを受信した順序で保持する。
【００６５】
ネイティブコンフィグレーション空間４１２は、周辺デバイス４００によりエミュレートされていないネイティブコンフィグレーションレジスタを含んでよい。ネイティブコンフィグレーションレジスタは、通常、物理アドレスを有し、その結果、１つ以上のアドレス空間を占めてよい。
【００６６】
エミュレーションモジュール４３０は、コンフィグレーショントランザクションを処理するように適合された１つ以上のプロセッサ、１つ以上のプロセッサコア、プロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路を使用して実装することができる。エミュレーションモジュール４３０は、上記の通り、オペレーティングシステム及び／またはエミュレーションソフトウェアなどのソフトウェアコードを実行してよい。いくつかの実施形態では、エミュレーションソフトウェアの機能性はハードウェア（例えば、制御論理回路）に実装できる。エミュレーションモジュール４３０は、ネイティブコンフィグレーション空間４１２をターゲットにするトランザクション及びエミュレートされたコンフィグレーション空間４４２をターゲットにするトランザクションの両方を含む、受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てを供給してよい。
【００６７】
メモリ４４０はエミュレーションモジュール４３０により動作され得るデータの記憶を提供する。メモリ４４０はエミュレートされたコンフィグレーション空間４４２を記憶してよい。エミュレートされたコンフィグレーション空間４４２は、周辺デバイス４００によりエミュレートされている１つ以上の周辺デバイスに対して定義されたコンフィグレーションレジスタの一部または全ての表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間４４２はエミュレート中の周辺デバイスの動作をもたらすコンフィグレーションレジスタを主に含んでよい。エミュレートされたコンフィグレーション空間４４２は、テキストファイル、ソースコード、オブジェクトコード、スクリプトの形態またはいくつかの他の形式で記憶されてよい。いくつかの実施形態では、エミュレートされたコンフィグレーション空間４４２は暗号化されてよい。いくつかの実装では、メモリ４４０は２つ以上のエミュレートされたコンフィグレーション空間を含んでよい。例えば、周辺デバイスは複数の他の周辺デバイス及び／または複数の機能をエミュレートしてよい。係る場合、メモリ４４０はエミュレート中の各周辺デバイス及び／またはエミュレート中の各機能に対してエミュレートされたコンフィグレーション空間を含んでよい。
【００６８】
図４の例は、コンフィグレーション読み出しトランザクションが受信される際に、周辺デバイス４００により実行され得るステップを例示する。ステップ４５２では、コンフィグレーション読み出しトランザクションがバスから（例えば、ルートコンプレックスまたはホストから）受信される。バスインターフェースコア４１０はコンフィグレーショントランザクションを受信し、トランザクションを受け入れるべきであると判断してよい。バスインターフェースコア４１０は、この判断を行うために、例えば、トランザクションのターゲットバス識別子、デバイス識別子、機能識別子及び／またはアドレスを調査してよい。周辺デバイス４００は２つ以上の周辺デバイス及び／または２つ以上の機能をエミュレート中であってよい。したがって、バスインターフェースコア４１０は、エミュレート中の任意の数の周辺デバイスに対してトランザクションを受け入れてよい。
【００６９】
ステップ４５４では、バスインターフェースコア４１０はコンフィグレーション読み出しトランザクションをコンフィグレーショントランザクションロギングユニット４０８に送信してよい。コンフィグレーショントランザクションロギングユニット４０８は読み出しトランザクションをそのトランザクションログに追加してよい。いくつかの実施形態では、一度読み出しトランザクションが記録されると、バスインターフェースコア４１０は他の動作に進んでよく、読み出しトランザクションが完了するのを待つ必要はない。
【００７０】
ステップ４５６では、コンフィグレーショントランザクションロギングユニット４０８は割り込みをエミュレーションモジュール４３０に送信してよい。エミュレーションモジュール４３０は、エミュレーション処理を起動することにより、割り込みに応答してよい。エミュレーション処理はコンフィグレーショントランザクションロギングユニット４０８からコンフィグレーショントランザクションを検索し、コンフィグレーショントランザクションを供給してよい。いくつかの実施形態では、エミュレーションモジュール４３０の準備ができ次第または割り込みルーチンに従って、エミュレーションモジュール４３０はコンフィグレーショントランザクションを供給してよい。いくつかの実施形態では、エミュレーションモジュール４３０は、コンフィグレーショントランザクションを供給するための専用リソースを含んでよい。例えば、エミュレーションモジュール４３０はコンフィグレーショントランザクションを供給するために指定されたプロセッサコアまたは実行スレッドを有してよい。代替的または追加的に、コンフィグレーショントランザクションロギングユニット４０８は、トランザクションがステップ４５４でコンフィグレーショントランザクションロギングに送信され次第、割り込みをエミュレーションモジュール４３０に送信してよい。割り込みはエミュレーションモジュール４３０が作動すべきことをエミュレーションモジュール４３０に通知する。いくつかの場合、エミュレーションモジュール４３０はさらに、バスにより規定されるタイミング要件に従う必要があり得る。例えば、いくつかのバスプロトコルは、周辺デバイスが一定時間内に読み出しトランザクションに応答するだろうと予測してよい。
【００７１】
コンフィグレーショントランザクションは、ステップ４５２でバスインターフェースコア４１０により受信されたものと同じ順序で、ステップ４５６においてフェッチまたは受信されてよい。代替的に、コンフィグレーショントランザクションロギングユニット４０８は、優先度のより高いトランザクションが最初に供給されるよう、記録したトランザクションに再度優先順位をつけてよい。
【００７２】
コンフィグレーション読み出しトランザクションを受信またはフェッチすると、エミュレーションモジュール４３０は、トランザクションがエミュレートされたコンフィグレーション空間４４２に導かれるか、またはネイティブコンフィグレーション空間４１２に導かれるかを判断してよい。この判断は読み出されるコンフィグレーションレジスタのアドレスに基づいてよく、アドレスはエミュレートされたコンフィグレーション空間またはネイティブコンフィグレーション空間に該当し得る。いくつかの場合、読み出しトランザクションがエミュレートされたコンフィグレーション空間４４２に導かれる場合、エミュレーションモジュール４３０は、ステップ４５８ａにおいて、ターゲットのコンフィグレーションレジスタのコンテンツを表す値を、メモリ４４０のエミュレートされたコンフィグレーション空間４４２から読み出してよい。他の場合では、エミュレーションモジュール４３０はターゲットのコンフィグレーションレジスタがエミュレートされておらず、ネイティブコンフィグレーション空間４１２の一部であることを判断してよい。係る場合、エミュレーションモジュール４３０は、ステップ４５８ｂで、コンフィグレーションレジスタのコンテンツをネイティブコンフィグレーション空間４１２から読み出してよい。
【００７３】
次に、ステップ４６０では、エミュレーションモジュール４３０はコンフィグレーション読み出しへの応答を生成してよい。いくつかの実装では、エミュレーションモジュール４３０は検索したデータをバスインターフェースコア４１０に送信してよい。係る実装では、バスインターフェースコア４１０は、バス上で送信するために読み出しデータをパッケージ化し、パッケージ化されたデータを送信してよい。他の実装では、エミュレーションモジュール４３０は、データをバスインターフェースコア４１０に提供する前に、読み出しデータをパッケージ化してよい。
【００７４】
ステップ４６２では、エミュレーションモジュール４３０は、ステップ４６２の後、コンフィグレーショントランザクションロギングユニット４０８を更新し、コンフィグレーション読み出しトランザクションが完了したことを示してよい。いくつかの実装では、エミュレーションモジュール４３０は、読み出しトランザクションを供給した後、読み出しトランザクションをコンフィグレーショントランザクションロギングユニット４０８から取り除いてよい。
【００７５】
周辺デバイス４００はＰＣＩを実装する周辺デバイスであってよい。周辺デバイス４００がＰＣＩ周辺デバイスである場合、上記のステップはいくつかの実施形態に従って、以下に記載されてよい。
【００７６】
ステップ４５２では、例えば、ルートコンプレックスから、コンフィグレーション読み出しトランザクション層パケット（ＴＬＰ）が受信されてよい。コンフィグレーション読み出しＴＬＰはＰＣＩｅバス上で受信されてもよく、ＰＣＩｅコアにより受信されてよい。ＰＣＩｅコアはＴＬＰをアンパックし、コンフィグレーション要求を、より簡単に処理される形式に縮小する。
【００７７】
ステップ４５４では、ＰＣＩｅコアはコンフィグレーション読み出し要求をコンフィグレーショントランザクションロギングに転送してよい。例えば、ＰＣＩｅコアは、コンフィグレーション読み出し要求情報により、コンフィグレーショントランザクションロギングのアドレスレジスタを更新してよい。コンフィグレーショントランザクションロギングは、コンフィグレーション読み出し要求を、保留コンフィグレーショントランザクションのログに追加してよい。コンフィグレーション読み出し要求をコンフィグレーショントランザクションロギングに転送した後、ＰＣＩｅコアは他の動作を自由に実行してよい。
【００７８】
ステップ４５６では、コンフィグレーショントランザクションロギングはエミュレーションモジュールに割り込みを送信してよい。割り込みを受信すると、エミュレーションモジュールはエミュレーション処理を起動してよく、コンフィグレーショントランザクションロギングは応答を待ってよい。
【００７９】
ステップ４５８ａでは、エミュレーションモジュールは、コンフィグレーション読み出しトランザクションによりターゲットにされる、エミュレートされたコンフィグレーションレジスタを検索してよい。エミュレーションモジュールはメモリのエミュレートされたコンフィグレーション空間にアクセスし、要求されたエミュレートされたコンフィグレーションレジスタをその内部に配置してよい。要求されたエミュレートされたコンフィグレーションレジスタを配置すると、エミュレーションモジュールはエミュレートされたコンフィグレーションレジスタの値を読み出してよい。いくつかの場合、読み出し要求を、エミュレートされたコンフィグレーションレジスタに供給することは、周辺デバイスのハードウェアからの追加情報を要求してよい。これらの場合、エミュレーションモジュールは、物理ポートコンフィグレーションレジスタまたはネイティブコンフィグレーション空間のレジスタなどの、追加のコンフィグレーションレジスタを読み出してよい。
【００８０】
ステップ４６０では、エミュレーションモジュールは、エミュレートされたコンフィグレーションレジスタから読み出した値をコンフィグレーショントランザクションロギングユニットに転送し、完了ステータスをコンフィグレーショントランザクションロギングユニットの完了成功として更新してよい。ステップ４６２では、エミュレーションモジュールまたはコンフィグレーショントランザクションロギングユニットは読み出し値をＰＣＩｅデバイスコアに伝達し、ＰＣＩｅデバイスコアは次に読み出し値をパッケージ化し、ルートコンプレックスに送信する。例えば、ＰＣＩｅデバイスコアはコンフィグレーション完了ＴＬＰをルートコンプレックスに送信してよい。いくつかの実施形態では、コンフィグレーション読み出し要求が完了できなかった場合、これに応じてエミュレーションモジュールは完了ステータスを更新してよい。
【００８１】
図５は、コンフィグレーション書き込み要求を供給する周辺デバイス５００の一例を例示する。周辺デバイス５００は様々な周辺デバイス及び／または複数のデバイス機能を柔軟にエミュレートしてよい。周辺デバイス５００は、バスインターフェースコア５１０、コンフィグレーショントランザクションロギングユニット５０８、ネイティブコンフィグレーション空間５１２、エミュレーションモジュール５３０及びメモリ５４０を含んでよい。バスインターフェースコア５１０は、周辺デバイスをコンピューティングシステムに接続するバスと通信するための機能性を含んでよい。コンフィグレーショントランザクションロギングユニット５０８は受信コンフィグレーショントランザクションを追跡してよい。コンフィグレーショントランザクションロギングユニット５０８は受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てのログを保持してよい。ネイティブコンフィグレーション空間５１２は、周辺デバイス５００によりエミュレートされていないコンフィグレーションレジスタを含んでよい。エミュレーションモジュール５３０は、コンフィグレーショントランザクションを処理するように適合された１つ以上のプロセッサ、１つ以上のプロセッサコア、プロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路を使用して実装することができる。エミュレーションモジュール５３０は、オペレーティングシステム及び／またはエミュレーションモジュールなどのソフトウェアコードを実行してよい。いくつかの実施形態では、エミュレーションソフトウェアの機能性はハードウェア（例えば、制御論理回路）に実装できる。メモリ５４０はエミュレーションモジュール５３０により動作され得るデータの記憶を提供する。メモリ５４０は１つ以上のエミュレートされたコンフィグレーション空間を含んでよい。エミュレートされたコンフィグレーション空間５４２は、エミュレートされる周辺デバイス及び／または機能に対して定義されたコンフィグレーションレジスタの一部または全ての表現を含んでよい。いくつかの実施形態では、メモリ５４０はエミュレートされる各周辺デバイス及び／または機能に対してエミュレートされたコンフィグレーション空間５４２を含んでよい。
【００８２】
図５の例は、コンフィグレーション書き込みトランザクションが受信される際に、周辺デバイス５００により実行され得るステップを例示する。ステップ５５２では、コンフィグレーション書き込み要求がバスから（例えば、ルートコンプレックスまたはホストから）受信される。バスインターフェースコア５１０はコンフィグレーション書き込みトランザクションを受信し、トランザクションを受け入れるべきであると判断してよい。周辺デバイス５００は２つ以上の周辺デバイス及び／または機能をエミュレート中であってよい。したがって、デバイスコア５１０は、エミュレート中の任意の数の周辺デバイスに対するトランザクションを受け入れてよい。
【００８３】
ステップ５５４では、バスインターフェースコア５１０はコンフィグレーション書き込みトランザクションをコンフィグレーショントランザクションロギング５０８に送信してよい。コンフィグレーショントランザクションロギング５０８はコンフィグレーション書き込みトランザクションをそのトランザクションログに追加してよい。一度コンフィグレーション書き込みトランザクションが記録されると、バスインターフェースコア５１０は他の動作に進んでよく、書き込みトランザクションが完了するのを待つ必要はない。
【００８４】
ステップ５５６では、コンフィグレーショントランザクションロギング５０８は割り込みをエミュレーションモジュール５３０に送信してよい。エミュレーションモジュール５３０は、エミュレーションモジュールを起動することにより、割り込みに応答してよい。エミュレーションモジュール５３０はコンフィグレーショントランザクションロギング５０８からコンフィグレーショントランザクションを検索し、コンフィグレーショントランザクションを供給してよい。エミュレーションモジュール５３０の準備ができ次第、エミュレーションモジュール５３０はコンフィグレーショントランザクションを供給してよい。いくつかの実施形態では、エミュレーションモジュール５３０は、コンフィグレーショントランザクションを供給するための専用リソースを含んでよい。いくつかの場合、エミュレーションモジュール５３０は、ステップ５５４でコンフィグレーショントランザクションがコンフィグレーショントランザクションロギングユニット５０８に追加され次第、割り込みを受信してよい。
【００８５】
コンフィグレーション書き込みトランザクションを受信またはフェッチすると、エミュレーションモジュール５３０は、トランザクションがエミュレートされたコンフィグレーション空間５４２に導かれるか、またはネイティブコンフィグレーション空間５１２に導かれるかを判断してよい。いくつかの場合、コンフィグレーション書き込みトランザクションがエミュレートされたコンフィグレーション空間５４２に導かれる場合、処理クラスタ５３０は、ステップ５５８ａで、エミュレートされたコンフィグレーション空間５４２のターゲットになるコンフィグレーションレジスタの表現を書き込みデータで更新してよい。書き込みトランザクションがネイティブコンフィグレーション空間５１２に導かれる場合、エミュレーションモジュール５３０は、ステップ５５８ｂで、ネイティブコンフィグレーション空間５１２のコンフィグレーションレジスタを書き込みデータで更新してよい。
【００８６】
ステップ５６２では、エミュレーションモジュール５３０は、コンフィグレーショントランザクションロギングユニット５０８を更新し、コンフィグレーション書き込みトランザクションが完了したことを示してよい。いくつかの実装では、エミュレーションモジュール５３０は、書き込みトランザクションを供給した後、書き込みトランザクションをコンフィグレーショントランザクションロギングユニット５０８から取り除いてよい。
【００８７】
いくつかの実装では、エミュレーションモジュール５３０は、書き込みトランザクションの完了が成功したことを示すために、書き込みトランザクションへの応答を生成してよい。これらの実装では、エミュレーションモジュール５３０はバスインターフェースコア５１０に応答を生成するよう指示してよい。代替的には、エミュレーションモジュール５３０自体が応答を生成し、応答をバスに送信してよい。
【００８８】
周辺デバイス５００はＰＣＩを実装する周辺デバイスであってよい。周辺デバイス５００がＰＣＩ周辺デバイスである場合、上記のステップはいくつかの実施形態に従って、以下に記載されてよい。
【００８９】
ステップ５５２では、例えば、ルートコンプレックスから、コンフィグレーション書き込みＴＬＰが受信されてよい。コンフィグレーション書き込みＴＬＰはＰＣＩｅバス上で受信されてよく、ＰＣＩｅコアにより受信されてよい。ＰＣＩｅコアはＴＬＰをアンパックし、コンフィグレーション要求を、より簡単に処理される形式に縮小してよい。
【００９０】
ステップ５５４では、ＰＣＩｅコアは、例えば、アドレスレジスタをコンフィグレーション書き込み要求情報で更新することにより、コンフィグレーション書き込み要求をコンフィグレーショントランザクションロギングに転送してよい。コンフィグレーショントランザクションロギングは、コンフィグレーション書き込み要求をその保留コンフィグレーショントランザクションのログに追加してよい。コンフィグレーション書き込み要求をコンフィグレーショントランザクションロギングユニットに転送した後、ＰＣＩｅコアは他の動作を自由に実行してよい。
【００９１】
ステップ５５６では、コンフィグレーショントランザクションロギングユニットは割り込みをエミュレーションモジュールに送信してよい。割り込みを受信すると、エミュレーションモジュールはエミュレーションモジュールを起動してよく、コンフィグレーショントランザクションロギングユニットは応答を待ってよい。
【００９２】
ステップ５５８ａでは、エミュレーションモジュールはコンフィグレーション書き込みトランザクションにより書き込まれる、エミュレートされたコンフィグレーションレジスタを検索してよい。エミュレーションモジュールはメモリのエミュレートされたコンフィグレーション空間にアクセスし、要求されたエミュレートされたコンフィグレーションレジスタをその内部に配置してよい。ターゲットになるエミュレートされたコンフィグレーションレジスタを配置すると、エミュレーションモジュールはエミュレートされたコンフィグレーション空間のエミュレートされたコンフィグレーションレジスタを書き込みデータで更新してよい。いくつかの場合、エミュレートされたコンフィグレーションレジスタに書き込まれる値は、周辺デバイス５００のハードウェアへの更新を要求してよい。これらの場合、エミュレーションモジュールは、物理ポートコンフィグレーションレジスタまたはネイティブコンフィグレーション空間のレジスタなどの、追加のコンフィグレーションレジスタを書き込んでよい。
【００９３】
ステップ５６２では、エミュレーションモジュールはコンフィグレーショントランザクションロギングの完了ステータスを更新してよい。この完了ステータスは、コンフィグレーション書き込みトランザクションの完了が成功したことを示してよい。コンフィグレーショントランザクションロギングは完了ステータスをＰＣＩｅデバイスコアに伝達してよい。ＰＣＩｅデバイスコアは完了の成功をルートコンプレックスに示してよい。例えば、ＰＣＩｅデバイスコアはコンフィグレーション完了ＴＬＰをルートコンプレックスに送信してよい。いくつかの実施形態では、コンフィグレーション書き込み要求が完了できなかった場合、これに応じてエミュレーションモジュールは完了ステータスを更新してよい。
【００９４】
図４〜５は、エミュレートされたコンフィグレーション空間を伴う周辺デバイスがどのようにコンフィグレーション読み出し及び書き込みトランザクションを供給し得るかの一例を例示する。エミュレートされたコンフィグレーション空間は変更及び／または置換され、これにより、エミュレートされている周辺デバイス及び／または機能の変更及び／または置換を行う。さらに、周辺デバイスのエミュレーションコンフィグレーション空間は複数のエミュレートされたコンフィグレーションを含んでよく、これにより周辺デバイスは複数のデバイス及び／または機能をエミュレートすることができる。エミュレーション技法は、この結果、柔軟性及び適合性のあるコンフィグレーション空間を伴う周辺デバイスの構築を可能にし、いくつかの場合、周辺デバイスの固定及び変更不可能なコンフィグレーション定義を削減または排除し得る。
【００９５】
ＩＶ．ＳＲ−ＩＯＶ
図６は、シングルルート入出力仮想化（ＳＲ−ＩＯＶ）ケーパビリティを伴う周辺デバイス６００の一例を例示する。ＳＲ−ＩＯＶは、物理リソース（例えば、単一のネットワークインターフェースコントローラ）が複数のリソース（例えば、６４のネットワークインターフェースコントローラ）のように見えることが可能になる拡張ケーパビリティである。その結果、特定の機能性を提供する周辺デバイスは、その機能性を提供する複数のデバイスのように見え得る。ＳＲ−ＩＯＶが可能な周辺デバイスの機能は物理機能（ＰＦ）と仮想機能（ＶＦ）とに分類され得る。物理機能は、発見、管理及び操作可能なデバイスの完全装備機能である。物理機能は周辺デバイスを構成または制御するために使用可能なコンフィグレーションリソースを有する。物理機能は非仮想化デバイスが有するだろう同一のコンフィグレーションアドレス空間及びメモリアドレス空間を含む。物理機能は物理機能に関連する多数の仮想機能を有し得る。仮想機能は物理機能と類似しているが、コンフィグレーションリソースがない簡易な機能であり、通常、物理機能の基本物理機能のコンフィグレーションにより制御される。物理機能及び／または仮想機能のそれぞれは、コンピューティングシステム上で実行するそれぞれの実行スレッド（例えば、仮想マシンなど）に割り当てられてよい。
【００９６】
図６に示す、ＳＲ−ＩＯＶが可能なデバイス６００の例は、ＰＣＩｅポート６０２、内部ルーティング６０４及び６０６ａ〜ｍ、１つ以上の物理機能６１０ａ〜ｍ、物理機能６１０ａ〜ｍ当たりの１つ以上の仮想機能（例えば、６２０ａ〜ｃ、６２１ａ〜ｃ）を含んでよい。ＰＣＩｅポート６０２は物理接続をＰＣＩｅバスに提供してよい。内部ルーティング６０４及び６０６ａ〜ｍはバストランザクションを適切な物理機能６１０ａ〜ｍ及び仮想機能に導き得る。各物理機能６１０ａ〜ｍは内部ルーティング６０４を通じてＰＣＩｅポート６０２に接続されてよい。各仮想機能は第１レベルの内部ルーティング６０６ａ〜ｍを通じて、次いで第２レベルの内部ルーティング６０４を通じて、ＰＣＩｅポート６０２に接続されてよい。内部ルーティング６０４は、各物理機能６１０ａ〜ｍとＰＣＩｅポート６０２との間、または任意の仮想機能６１２０ａ〜ｆとＰＣＩｅポート６０２との間のポイント・ツー・ポイント接続を提供してよい。
【００９７】
各物理機能６１０ａ〜ｍは物理リソースに関連し、それぞれの物理機能を実施し得る。例えば、ＰＦ  ０  ６１０ａは物理リソース６１８ａに関連し、ＰＦ  ｍ  ６１０ｍは物理リソース６１８ｍに関連し得る。仮想機能のそれぞれはさらに、それぞれの物理リソースに関連し、仮想機能の機能性を実施し得る。各物理機能６１０ａ〜ｍはさらに、それぞれのコンフィグレーションリソース６１２ａ〜ｍ及びそれぞれのアドレス変換キャッシュ（ＡＴＣ）６１４ａ〜ｍを含んでよい。コンフィグレーションリソース６１２ａ〜ｍのそれぞれは、例えば、４ＫＢのコンフィグレーションアドレス空間を含んでよい。アドレス変換キャッシュ６１４ａ〜ｍのそれぞれは、直近で使用されたアドレス変換を記憶してよい。物理機能６１０ａ〜ｍは、コンピューティングシステムに可視のアドレス空間が、連結される周辺デバイスの物理アドレス空間と異なる場合、アドレス変換を提供してよい。例えば、ある位置にアクセスする仮想マシンは、物理アドレスに変換される仮想アドレスを使用してよい。
【００９８】
いくつかの実施形態では、ＳＲ−ＩＯＶに関連するコンフィグレーションレジスタは、周辺デバイスのエミュレートされたコンフィグレーション空間でエミュレートすることができる。各物理機能は一定数のベースアドレスレジスタ（ＢＡＲ）を含んでよい。ベースアドレスレジスタは物理機能の入出力アドレス範囲及び／またはメモリアドレス範囲を指定するコンフィグレーションレジスタである。ベースアドレスレジスタに記憶される値を必要に応じて変更し、物理機能に割り当てられたアドレス空間を変更してよい。ベースアドレスレジスタはエミュレートされたコンフィグレーション空間に含まれてよい。エミュレートされたコンフィグレーション空間は、例えば、物理機能に関連する６つのＢＡＲ、ＳＲ−ＩＯＶケーパビリティに対する６つのＢＡＲ、拡張読み出し専用メモリ（ＲＯＭ）に対するアドレスを記憶する１つのＢＡＲ（周辺デバイスがデバイスＲＯＭを内蔵する場合）の表現を含んでよい。いくつかの実装では、物理機能のエミュレートされたコンフィグレーション空間のベースアドレスレジスタはデフォルト値を有してよい。
【００９９】
物理機能のエミュレートされたコンフィグレーション空間はさらに、ＳＲ−ＩＯＶケーパビリティレジスタの表現を含んでよい。いくつかの場合、ＳＲ−ＩＯＶケーパビリティレジスタは、物理機能のエミュレートされたコンフィグレーション空間のケーパビリティリストから読み出され得るオフセットに存在してよい。代替的または追加的に、エミュレーションモジュールは、このオフセットのローカルコピーを保持してもよく、これによりエミュレーションモジュールは最初にケーパビリティリストを読み出すことなく、ＳＲ−ＩＯＶケーパビリティレジスタにアクセスし得る。
【０１００】
いくつかの実装では、ＳＲ−ＩＯＶケーパビリティレジスタの設定の変更（例えば、コンフィグレーション書き込み）に仮想機能を使用不可能にすることが必要な場合がある。例えば、仮想機能の数及び／または仮想機能に対するベースアドレスレジスタへの変更は、仮想機能を使用不可能にすることが必要な場合がある。いくつかの場合、仮想機能を使用不可能にすること及び仮想機能を再度使用可能にすることは仮想機能のリセットを引き起こし得る。ＳＲ−ＩＯＶケーパビリティレジスタの設定が変更されると、物理機能は全てのアクティブな仮想機能をリセットし得る。物理機能はさらに、変更されたＳＲ−ＩＯＶケーパビリティレジスタを読み出し、どの設定が変更されたかを判断し得る。物理機能は、次いで、必要な場合、ＳＲ−ＩＯＶケーパビリティレジスタの変更された設定を基に、仮想機能のコンフィグレーションを更新し得る。
【０１０１】
いくつかの実装では、物理機能及びその関連する仮想機能に対してエミュレートされたコンフィグレーション空間は、第１アドレスオフセットにおける物理機能コンフィグレーション空間、第２アドレスオフセットにおける仮想機能コンフィグレーション空間及び第３アドレスオフセットにおける追加のコンフィグレーションイメージに組織されたコンフィグレーションイメージの一部であり得る。
【０１０２】
ＳＲ−ＩＯＶに対してエミュレートされたコンフィグレーション空間は少なくとも３つの構成要素、つまり、各物理機能に対するＳＲ−ＩＯＶケーパビリティコンフィグレーション空間と、各仮想機能の状態及びケーパビリティを保持するためのコンフィグレーション空間と、ＳＲ−ＩＯＶベースアドレスレジスタ（ＢＡＲ）に対するコンフィグレーション空間とを含んでよい。いくつかの実装では、物理機能のエミュレートされたコンフィグレーション及び仮想機能のエミュレートされたコンフィグレーションへのアクセスは、ＰＣＩｅコアに到達するコンフィグレーション空間アクセスを取得及び処理することにより、処理され得る。ＳＲ−ＩＯＶベースアドレスレジスタは、いくつかの実装では、例えば、少なくとも１対のベースアドレスレジスタをネイティブコンフィグレーション空間に確保することにより、ネイティブコンフィグレーション空間でベースアドレスレジスタを使用して実装してよい。
【０１０３】
いくつかの実施形態では、機能レベルリセット（ＦＬＲ）、バスマスタ使用可能（ＢＭＥ）、メモリ空間使用可能（ＭＳＥ）等などのコンフィグレーション空間の特定ビットへの変更は、対応する物理機能及び関連する仮想機能を利用するアプリケーションに伝達される。例えば、アプリケーションはＦＬＲ要求を受信及び確認してもよく、エミュレーションモジュールは、ＦＬＲが完了したことをアプリケーションが確認するまで、機能保留ＦＬＲに対する任意のトランザクションへの応答を留保してよい。アプリケーションは任意のコマンドを実行する前に、各機能（ＦＬＲ、ＢＭＥ、ＭＳＥ等）のステータスを確認してよい。アプリケーションは、各機能に対する保留トランザクションがあるかどうかをエミュレーションモジュールに通知し、ＢＡＲ、仮想機能の数等のコンフィグレーション空間に構成される種々の設定を確認してよい。
【０１０４】
いくつかの実施形態では、物理機能及び関連する仮想機能のステータス（機能プロパティとも呼ばれ得る）はエミュレートされたコンフィグレーション空間で保持され、アプリケーションまたはエミュレーションモジュールに伝達され得る。各機能のステータスを追跡するためのメモリ空間のサイズは、例えば、物理機能または仮想機能当たり４バイトの整数であり得る。第１の整数は物理機能のステータスを提供し得、第２の整数は第１仮想機能のステータスを提供し得るなどである。
【０１０５】
各機能のステータスは即時のアプリケーション応答を要求しない情報を含み得るが、アプリケーションは入出力処理中にプロパティを検査すべきである。例えば、機能が保留ＦＬＲである場合、保留ＦＬＲに対して受信される任意のコマンドは破棄されるべきである。別の例として、ＢＭＥが設定されない場合、アプリケーションはＤＭＡトランザクションを機能に対してポスティングすることを避けるべきである。いくつかの実施形態では、各機能のステータスは、機能が使用可能かどうか（物理機能が常に使用可能となり得る）、機能がＦＬＲ保留を有するかどうか、ＭＳＥが使用可能かどうか（物理機能に対して）、ＢＭＥが使用可能かどうか及びＭＳＩ−Ｘが使用可能かどうかなどの情報を提供してよい。
【０１０６】
以下は機能レベルリセットを行う一例を提供する。機能レベルリセットは特定の物理機能及びその関連する仮想機能をリセットするための機構を提供する。通常、物理機能のリセットは物理機能に関連する仮想機能のリセットをトリガする場合がある。機能レベルリセットは段階的な機構であり、仮想機能及び物理機能が保留動作を完了し、静止またはアイドル状態に入ることを可能にする。一度機能が休止状態になると、機能はリセットされ得る。
【０１０７】
エミュレーションモジュールが物理機能をリセットすることを識別する機能レベルリセット要求を受信してよい。関連する仮想機能は最初に静止状態になってよい。エミュレーションモジュールは、仮想機能に対してＦＬＲビットを機能プロパティに設定することにより、仮想機能がリセットされていることを示してよい。エミュレーションモジュールは次にＦＬＲメッセージをアプリケーションキューに送信してよく、仮想機能への任意のさらなる要求は、アプリーションがＦＬＲを確認するまで、「サポートされていない要求」応答で応答されるだろう。一度仮想機能が任意の保留トランザクションを完了すると、アプリケーションは機能レベルリセット要求を確認するだろう。アプリケーションは、次いで、エミュレーションモジュールのためにメッセージをキューに送信してよい。エミュレーションモジュールがコンフィグレーションアクセス要求を受信すると、エミュレーションモジュールはキューをポーリングし、ＦＬＲ確認を受信する。エミュレーションモジュールは、次いで、仮想機能に対するさらなる要求に応答してよい。仮想機能のステータスまたはプロパティは更新されてよい。例えば、ＭＳＩ−Ｘ及びＢＭＥは使用不可能になり得る。
【０１０８】
物理機能では、機能レベルリセットを受信すると、エミュレーションモジュールは、ＭＳＥ及びＢＭＥステータスビットを介して、メモリ空間及びバスマスタを使用不可能にしてよい。さらに、エミュレーションモジュールは全てのエミュレートされたレジスタ及びネイティブコンフィグレーションレジスタをデフォルト値に戻してよい。エミュレーションモジュールはさらに、ＦＬＲメッセージをアプリケーションキューに送信してよく、物理機能への任意のさらなる要求は、アプリケーションにより別様に指示されるまで、「サポートされていない要求」応答で応答されるだろう。アプリケーションはその物理機能データ構造及び保留トランザクションキューをリセットしてよい。これらの動作を完了すると、アプリケーションは、エミュレーションモジュールのためにメッセージをキューに送信することにより、機能レベルリセット要求を確認してよい。エミュレーションモジュールがコンフィグレーションアクセス要求を受信すると、エミュレーションモジュールはキューをポーリングし、ＦＬＲ確認を受信する。エミュレーションモジュールは、次いで、物理機能に対するさらなる要求に応答してよい。物理機能に関連する仮想機能は、ルートコンプレックスにより再度使用可能になるまで、使用不可能であってよい。
【０１０９】
以下の例は、周辺デバイスによるＳＲ−ＩＯＶケーパビリティのエミュレーションを例示する。周辺デバイスは、例えば、ＰＦ０として指定される１つの物理機能を含んでよい。ＰＦ０に対するエミュレートされたコンフィグレーションはＳＲ−ＩＯＶ拡張ケーパビリティレジスタを含む。さらに、ＰＦ０は、周辺デバイスがＰＦ０に関連する仮想機能を発見、設定及び管理するために使用されてよい。通常、エミュレートされたＳＲ−ＩＯＶレジスタは、ＳＲ−ＩＯＶプロトコルにより定義されたのと同じデフォルト値で周辺デバイスにアップロードされてよい。いくつかの実装では、ＳＲ−ＩＯＶレジスタは他の値でアップロードされてよい。例えば、ＰＦ０に割り当てられた仮想機能の合計数は４Ｋに設定されてよく、エミュレートされたＳＲ−ＩＯＶレジスタ内の第１仮想機能に対するデフォルトオフセットは２５７に設定されてよく、デフォルト仮想機能ストライドは１に設定されてよい。
【０１１０】
本例では、仮想機能はＭＳＩ−Ｘケーパビリティを含んでよい。さらに、物理機能と仮想機能の両方がアドバンスドルーティング識別（ＡＲＩ）ケーパビリティを含んでよい。ＡＲＩは周辺デバイスが９つ以上の機能をサポートできる機構を提供する。ＡＲＩをサポートする周辺デバイスは、ＰＣＩコンフィグレーションヘッダのデバイスＩＤフィールドを、機能番号の一部として解釈する。これにより、周辺デバイスは最大２５６の機能をサポートする能力を得る。
【０１１１】
いくつかの実装では、ＳＲ−ＩＯＶ制御レジスタは、ＡＲＩが可能な階層が使用可能かどうかを示す。ＡＲＩが可能な階層を使用可能にすると、例えば、仮想機能は８〜２５５の機能番号を使用することができる。ＡＲＩが可能な階層設定はさらに、ＡＲＩがルートコンプレックスまたは周辺デバイスのアップストリームに隣接するスイッチで使用可能であったことを示す。ルートコンプレックスは、ルートコンプレックスまたはスイッチ内のＡＲＩ転送使用可能設定に一致するようＡＲＩが可能な階層設定を設定してよい。周辺デバイスは、ＡＲＩが可能な階層設定のコンフィグレーションを使用して第１仮想機能のオフセットを決定してよい。例えば、第１仮想機能へのデフォルトオフセットは、ＡＲＩ及び非ＡＲＩの両方のモードに対して２５７に設定され得る。
【０１１２】
通常、バス番号及びデバイス番号はコンピューティングシステムに包含されるＰＣＩ階層がルートコンプレックスによりエニュメレーションされる前には、割り当てられない。エニュメレーション処理の間、エミュレーションモジュールはＰＦ０をターゲットにしないコンフィグレーションアクセスへの応答をやめてよい。これは、周辺デバイスが２つ以上の物理機能を含むという印象を、周辺デバイスがルートコンプレックスに与えたくない場合があるためである。コンピューティングシステムの機能及びデバイスがルートコンプレックスによりマッピングされた後、ルートコンプレックスはＡＲＩケーパビリティ階層設定、ならびにＳＲ−ＩＯＶコンフィグレーションレジスタの仮想機能使用可能設定を設定することを可能にし得る。
【０１１３】
いくつかの場合、エミュレーションモジュールは仮想機能を使用可能にするトランザクションを取り込んでよい。これらの場合、一度仮想機能が使用可能になると、エミュレーションモジュールはＰＦ０に割り当てられた以外のバス番号、デバイス番号及び機能番号をターゲットにするコンフィグレーショントランザクションを受け入れ可能であってよい。
【０１１４】
いくつかの実装では、周辺デバイスは、物理機能に対するバス番号より高いバス番号に位置するように、仮想機能をエミュレートしてよい。これらの実装では、仮想機能へのコンフィグレーションアクセスは恐らくコンフィグレーションタイプ１、これはコンフィグレーションアクセスがより高い番号のバスにブリッジされるべきであることを意味する。表３は本例の種々のコンフィグレーショントランザクションがどのように処理され得るかの一例を提供する。コンフィグレーショントランザクションはコンフィグレーションタイプ０（ローカルバスに導かれる）またはコンフィグレーションタイプ１（より高レベルのバスに導かれ、そのバスに到達するためにブリッジされるべきである）であってよい。ターゲットバスは、例示の周辺デバイスが位置するものであり得るか、またはより高いバス番号であり得る。コンフィグレーションタイプ及びターゲットバスを考慮して、表は、コンフィグレーショントランザクションが物理機能及び／または任意の関連する仮想機能をターゲットにし得るかどうかを示す。最後に、表は周辺デバイスがこれらのコンフィグレーショントランザクションにどのように応答し得るかを示す。
【表３】
2019091494.tif 000006
【０１１５】
コンフィグレーショントランザクションが、物理機能または任意の仮想機能のいずれにも割り当てられないバス番号をターゲットにする場合、周辺デバイスはサポートされていない要求で応答してよい。
【０１１６】
表４は様々な仮想機能の数に対するバス割り当ての例を提供する。
【表４】
2019091494.tif 000007
【０１１７】
バス割り当て、及び、どの物理機能及び仮想機能が利用可能かは、物理機能及び仮想機能に対してエミュレートされたコンフィグレーションを読み出すことにより知ることができる。存在しない機能に対するコンフィグレーショントランザクションが受信されると、エミュレーションモジュールはサポートされていない要求応答で応答し得る。
【０１１８】
表５は、仮想機能が使用可能かどうか、及びＡＲＩが可能な階層が使用可能かどうかに基づく応答例を提供する。
【表５】
2019091494.tif 000008
【０１１９】
Ｖ．方法
図７〜９は周辺デバイスのコンフィグレーション空間をエミュレートするための方法の実施形態を例示する。これらの方法は、上記のシステムにより実施されてよい。
【０１２０】
図７は、コンフィグレーションアクセス要求を供給する処理７００を例示する。コンフィグレーションアクセス要求は、エミュレートされたコンフィグレーション空間を含む周辺デバイスにより受信されてよい。エミュレートされたコンフィグレーション空間により、周辺デバイスは１つ以上の様々な周辺デバイス及び／または機能をエミュレートすることができ得る。コンフィグレーションアクセス要求はコンフィグレーションレジスタの読み出し及び／またはコンフィグレーションレジスタの書き込みに対する要求であってよい。
【０１２１】
ステップ７０２では、周辺デバイスはコンフィグレーションアクセス要求を受信する。コンフィグレーションアクセス要求はバス上で受信されてよい。コンフィグレーションアクセス要求はコンフィグレーションアクセス要求のターゲットを識別する情報を含んでよい。例えば、コンフィグレーションアクセス要求はバス識別子、デバイス識別子、機能識別子及び／またはアドレスを含んでよい。識別情報は、周辺デバイスがコンフィグレーションアクセス要求を受け入れ及び供給すべきかどうかを示してよい。いくつかの実装では、周辺デバイスは複数の周辺デバイス及び／または機能をエミュレートしてよい。係る実装では、周辺デバイスは、２つ以上の周辺デバイス及び／または機能に対するコンフィグレーションアクセス要求を受け入れてよい。
【０１２２】
ステップ７０６では、周辺デバイスは、コンフィグレーションアクセス要求が、周辺デバイスのネイティブコンフィグレーション空間以外のコンフィグレーション空間に対すると判断し得る。コンフィグレーションアクセス要求はエミュレートされているアドレス空間にあるコンフィグレーションレジスタに対するものであってよい。ネイティブコンフィグレーション空間に対するコンフィグレーションアクセス要求は、処理７００により例示されるものとは異なる方法で処理されてよい。例えば、ネイティブコンフィグレーションに対するコンフィグレーションアクセス要求は、周辺デバイスのバスインターフェースコアなどの、周辺デバイスのネイティブハードウェアにより処理されてよい。
【０１２３】
ステップ７１０では、周辺デバイスは、エミュレートされたコンフィグレーション空間からエミュレートされたコンフィグレーションを検索してよい。エミュレートされたコンフィグレーションは１つ以上のコンフィグレーションレジスタに対する表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間は、２つ以上の機能に対してエミュレートされたコンフィグレーションヘッダ及び／またはレジスタ（エミュレートされたコンフィグレーションと呼ばれてよい）を含む。係る実装では、周辺デバイスはコンフィグレーションアクセス要求に対するターゲット機能を判断し、適切なエミュレートされたコンフィグレーションを検索してよい。
【０１２４】
ステップ７１２では、周辺デバイスは、エミュレートされたコンフィグレーションを使用してコンフィグレーションアクセス要求を供給してよい。コンフィグレーションアクセス要求を供給することは、コンフィグレーションアクセス要求がアクセスを要求しているレジスタを識別することを含んでよい。いくつかの実装では、コンフィグレーションアクセス要求を供給することは、エミュレートされたコンフィグレーションをコンフィグレーションアクセス要求のソースに提供することを含んでよい。係る実装では、周辺デバイスは識別されたコンフィグレーションレジスタの表現をエミュレートされたコンフィグレーションから読み出してよい。他の実装では、コンフィグレーションアクセス要求を供給することはエミュレートされたコンフィグレーションを更新することを含んでよい。係る実装では、周辺デバイスは識別されたコンフィグレーションレジスタの表現をエミュレートされたコンフィグレーションに書き込みまたは更新してよい。
【０１２５】
図８は、コンフィグレーションレジスタを読み出すコンフィグレーションアクセス要求を供給する処理８００の一例を例示する。処理８００は、ＰＣＩを、周辺デバイスにより実施され得るバスプロトコルの一例として使用して例示される。周辺デバイスはＰＣＩをエミュレートしたコンフィグレーション空間を実装してよい。ＰＣＩをエミュレートしたコンフィグレーション空間により、周辺デバイスは１つ以上のＰＣＩデバイス及び／または機能をエミュレートすることができ得る。いくつかの実施形態では、処理８００は、周辺デバイスが様々なバスプロトコルに適合するエミュレートされたコンフィグレーション空間を使用している場合などでは、他のバスプロトコルで実施されてよい。
【０１２６】
ステップ８０２では、周辺デバイスのＰＣＩコアはＰＣＩコンフィグレーションアクセス要求をルートコンプレックスから受信してよい。コンフィグレーションアクセス要求はコンフィグレーションアクセス要求のターゲットを識別する情報を含んでよい。識別情報は、周辺デバイスがコンフィグレーションアクセス要求を受け入れ及び供給すべきかどうかを示してよい。周辺デバイスは複数の周辺デバイス及び／または機能をエミュレートしてよい。係る実装では、周辺デバイスは、２つ以上の周辺デバイス及び／または機能に対するコンフィグレーションアクセス要求を受け入れてよい。
【０１２７】
ステップ８０４では、周辺デバイスのＰＣＩコアは、ＰＣＩコンフィグレーションアクセス要求を周辺デバイスのコンフィグレーション管理モジュールに送信してよい。コンフィグレーション管理モジュールはコンフィグレーションアクセス要求のログを保持してよい。ログは周辺デバイスにより受信されたコンフィグレーションアクセス要求の記録をつけてよい。
【０１２８】
ステップ８０６では、コンフィグレーション管理モジュールは、ＰＣＩコンフィグレーションアクセス要求がネイティブコンフィグレーション空間以外のコンフィグレーション空間をターゲットにすることを判断してよい。ネイティブコンフィグレーション空間は、エミュレートが不要及び／または不都合であり得るバス速度選択などの、基本機能性に対するコンフィグレーションレジスタを含んでよい。ネイティブコンフィグレーション空間以外のコンフィグレーション空間はエミュレートされてよい。エミュレートされたコンフィグレーション空間はエミュレートされたコンフィグレーションヘッダを使用して表わされてよい。
【０１２９】
ステップ８０８では、周辺デバイスのコンフィグレーション管理モジュールは低遅延通知（例えば、割り込み要求）を周辺デバイスのエミュレーションモジュール（例えば、プロセッサ、制御論理回路等として実装され得る）に送信してよい。割り込みは周辺デバイスのエミュレーションモジュールに、コンフィグレーションアクセス要求が受信されたこと、及び／またはエミュレーションモジュールがコンフィグレーションアクセス要求を供給すべきことを通知してよい。
【０１３０】
ステップ８１０では、周辺デバイスのエミュレーションモジュールは、（例えば、コンフィグレーションアクセス要求を処理するためにコンフィグレーション空間エミュレーションソフトウェアを実行することにより）割り込み要求に応答してよい。エミュレーションモジュールは、エミュレートされたコンフィグレーションをエミュレートされたコンフィグレーション空間から検索してよい。いくつかの実装では、周辺デバイスは１つ以上の周辺デバイス及び／または機能をエミュレートしていてよい。係る実装では、コンフィグレーションアクセス要求は、ターゲットになるエミュレートされた周辺デバイス及び／または機能の識別を含んでよい。さらに、コンフィグレーション空間エミュレーションソフトウェアは、ターゲットになるエミュレートされた周辺デバイス及び／または機能に対するコンフィグレーションを検索してよい。いくつかの実装では、エミュレートされたコンフィグレーション空間はＤＲＡＭに記憶されるか、内部でエミュレートされ得る。電源喪失の間、エミュレートされたコンフィグレーション空間がメモリに保持されるよう、永続メモリをさらに使用してエミュレートされたコンフィグレーション空間を記憶してよい。いくつかの実施形態では、永続メモリに記憶されたエミュレートされたコンフィグレーション空間は、起動時にＤＲＡＭまたはローカルメモリにロードすることができ、エミュレーションコンフィグレーション空間に対してより高速なアクセスを提供する。いくつかの実装では、コンフィグレーション空間エミュレーションソフトウェアが分離された環境で実行される。分離された環境では、コンフィグレーション空間エミュレーションソフトウェアは、他のソフトウェアによる割り込みまたは干渉がない状態で、セキュアに実行することができ得る。
【０１３１】
ステップ８１２では、ＰＣＩコンフィグレーションアクセス要求は、検索されたエミュレートされたコンフィグレーションを使用して供給されてよい。いくつかの実装では、コンフィグレーションアクセス要求はコンフィグレーション読み出し要求であってよい。係る実装では、処理８００はステップ８１４を含んでよく、ステップ８１４では、コンフィグレーションアクセス要求の供給は、検索されたエミュレートされたコンフィグレーションをＰＣＩルートコンプレックスに送信することを含んでよい。いくつかの実施形態では、読み出されているエミュレートされたコンフィグレーションが、読み出した時に、その状態を変化するレジスタのタイプ（例えば、読み出しクリアレジスタまたは読み出しクリアビットを有する）を含む場合、処理８００はさらに、エミュレートされたコンフィグレーションのコンテンツを、コンフィグレーションアクセス要求を供給することの一部として変更してよい。
【０１３２】
図９は、コンフィグレーションレジスタを書き込むコンフィグレーションアクセス要求を供給する処理９００の一例を例示する。処理９００は、ＰＣＩを、周辺デバイスにより実装され得るバスプロトコルの一例として使用して例示される。周辺デバイスはＰＣＩエミュレーションシステムを実装していてよい。ＰＣＩのエミュレーションシステムにより、周辺デバイスは１つ以上のＰＣＩデバイス及び／または機能をエミュレートすることができ得る。処理９００は、周辺デバイスが様々なバスプロトコルを使用するエミュレーションシステムを使用している場合などでは、他のバスプロトコルで実施されてよい。
【０１３３】
ステップ９０２では、周辺デバイスのＰＣＩコアはＰＣＩコンフィグレーションアクセス要求をルートコンプレックスから受信してよい。コンフィグレーションアクセス要求はコンフィグレーションアクセス要求のターゲットを識別する情報を含んでよい。識別情報は、周辺デバイスがコンフィグレーションアクセス要求を受け入れ及び供給すべきかどうかを示してよい。周辺デバイスは複数の周辺デバイス及び／または機能をエミュレートしてよい。係る実装では、周辺デバイスは、２つ以上の周辺デバイス及び／または機能に対するコンフィグレーションアクセス要求を受け入れてよい。
【０１３４】
ステップ９０４では、周辺デバイスのＰＣＩコアは、ＰＣＩコンフィグレーションアクセス要求を周辺デバイスのコンフィグレーション管理モジュールに送信してよい。コンフィグレーション管理モジュールはコンフィグレーションアクセス要求のログを保持してよい。ログは周辺デバイスにより受信されたコンフィグレーションアクセス要求の記録をつけてよい。
【０１３５】
ステップ９０６では、コンフィグレーション管理モジュールは、ＰＣＩコンフィグレーションアクセス要求がネイティブコンフィグレーション空間以外のコンフィグレーション空間をターゲットにすることを判断してよい。ネイティブコンフィグレーション空間は、エミュレートが不要及び／または不都合であり得るバス速度選択などの、基本機能性に対するコンフィグレーションレジスタを含んでよい。ネイティブコンフィグレーション空間以外のコンフィグレーション空間はエミュレートされてよい。エミュレートされたコンフィグレーション空間はエミュレートされたコンフィグレーションヘッダを使用して表わされてよい。
【０１３６】
ステップ９０８では、周辺デバイスのコンフィグレーション管理モジュールは低遅延通知（例えば、割り込み要求）を周辺デバイスのエミュレーションモジュールに送信してよい。割り込みは周辺デバイスのエミュレーションモジュールに、コンフィグレーションアクセス要求が受信されたこと、及び／またはエミュレーションモジュールがコンフィグレーションアクセス要求を供給すべきことを通知してよい。
【０１３７】
ステップ９１０では、周辺デバイスのエミュレーションモジュールは、（例えば、コンフィグレーション空間エミュレーションソフトウェアを実行する）割り込み要求に応答してよい。エミュレーションモジュールはエミュレートされたコンフィグレーションをエミュレートされたコンフィグレーション空間から検索してよい。いくつかの実装では、周辺デバイスは１つ以上の周辺デバイス及び／または機能をエミュレートしていてよい。係る実装では、コンフィグレーションアクセス要求は、ターゲットになるエミュレートされた周辺デバイス及び／または機能の識別を含んでよい。さらに、コンフィグレーション空間エミュレーションソフトウェアは、ターゲットになるエミュレートされた周辺デバイス及び／または機能に対するコンフィグレーションを検索してよい。いくつかの実装では、エミュレートされたコンフィグレーション空間はＤＲＡＭに記憶されるか、内部でエミュレートされ得る。電源喪失の間、エミュレートされたコンフィグレーション空間がメモリに保持されるよう、永続メモリをさらに使用してエミュレートされたコンフィグレーション空間を記憶し得る。いくつかの実施形態では、永続メモリに記憶されたエミュレートされたコンフィグレーション空間は、起動時にＤＲＡＭまたはローカルメモリにロードすることができ、エミュレートションコンフィグレーション空間へのより高速なアクセスを提供する。いくつかの実装では、コンフィグレーション空間エミュレーションソフトウェアが分離された環境で実行される。分離された環境では、コンフィグレーション空間エミュレーションソフトウェアは、他のソフトウェアによる割り込みまたは干渉内で、セキュアに実行することができ得る。
【０１３８】
ステップ９１２では、ＰＣＩコンフィグレーションアクセス要求は、エミュレートされたコンフィグレーションヘッダを使用して供給されてよい。いくつかの実装では、コンフィグレーションアクセス要求はコンフィグレーション書き込み要求であってよい。係る実装では、処理９００はステップ９１４を含んでよく、ステップ９１４では、コンフィグレーションアクセス要求の供給は、エミュレートされたコンフィグレーションを更新することを含んでよい。
【０１３９】
図７〜９に例示される処理の一部または全て（または本明細書に記載される任意の他の処理、または変形形態、及び／またはその組み合わせ）は実行可能な命令により構成される１つ以上のコンピュータシステムの制御下で行われてもよく、ハードウェアまたはその組み合わせにより、１つ以上のプロセッサ上で集合的に実行されるコード（例えば、実行可能な命令、１つ以上のコンピュータプログラムまたは１つ以上のアプリケーション）として実装されてよい。コードは、例えば、１つ以上のプロセッサにより実行可能な複数の命令を備えるコンピュータプログラムの形態でコンピュータ可読記憶媒体上に記憶されてよい。コンピュータ可読記憶媒体は非一時的であってよい。一般的に、本明細書に開示される任意の構成要素、システム及び周辺機器は、ハードウェアまたはハードウェアとソフトウェアとの組み合わせで部分的にまたは完全に実装され得る。ハードウェアは、システムオンチップ（ＳｏＣ）、特定用途向け集積回路（ＡＳＩＣ）、プロセッサまたはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などの電子回路を含み得る。
【０１４０】
ＶＩ．コンピュータシステム
図１０は、少なくとも１つの実施形態例に係る、１つ以上のネットワークを介して接続される１つ以上のサービスプロバイダコンピュータ及び／またはユーザデバイスを含む、本明細書に記載の特徴及びシステムのためのアーキテクチャの一例を例示する。図１〜１４に記載のデバイスは、図１０に記載のコンピューティングデバイスの１つ以上の構成要素を使用してよく、あるいは図１０に記載の１つ以上のコンピューティングデバイスを表してよい。例示のアーキテクチャ１０００では、１人以上のユーザ１００２はユーザコンピューティングデバイス１００４（１）〜（Ｎ）を使用し、１つ以上のネットワーク１００８を介して、アプリケーション１００６（例えば、ウェブブラウザまたはモバイルデバイスアプリケーション）にアクセスしてよい。いくつかの態様では、コンピューティングリソースサービスまたはサービスプロバイダによりアプリケーション１００６をホスト、管理及び／または提供してよい。１つ以上のサービスプロバイダコンピュータ１０１０は、ユーザ（複数可）１００２が相互作用し得るユーザデバイス１００４上で実行するように構成されるネイティブアプリケーションを提供してよい。サービスプロバイダコンピュータ（複数可）１０１０は、いくつかの例では、クライアントエンティティ、低遅延データ記憶、耐久性のあるデータ記憶、データアクセス、管理、仮想化、クラウドベースソフトウェアソリューション、電子コンテンツ性能管理等などであるが、これらに限定されないコンピューティングリソースを提供してよい。サービスプロバイダコンピュータ（複数可）１０１０はさらに、ウェブホスティング、コンピュータアプリケーション開発及び／または実装プラットフォーム、前述の組み合わせなどを、ユーザ（複数可）１００２に提供するように動作可能であってよい。サービスプロバイダコンピュータ（複数可）１０１０は、いくつかの例では、１つ以上のサードパーティコンピュータ１０１２と通信してよい。
【０１４１】
いくつかの例では、ネットワーク（複数可）１００８は、多くの様々なタイプのネットワーク、例えば、ケーブルネットワーク、インターネット、無線ネットワーク、セルラネットワークならびに他のプライベート及び／またはパブリックネットワークの任意の１つまたは組み合わせを含んでよい。例示の例はネットワーク（複数可）１００８上でアプリケーション１００６にアクセスしているユーザ（複数可）１００２を表す一方、記載された技法は、ユーザ（複数可）１００２がユーザデバイス（複数可）１００４を介して、固定電話上で、キオスクを介して、または任意の他の様式で、サービスプロバイダコンピュータ（複数可）１０１０と相互作用する例に、同様に適用されてよい。記載された技法が、非クライアント／サーバ配置（例えば、ローカルに記憶されたアプリケーション等）だけでなく、他のクライアント／サーバ配置（例えば、セットトップボックス等）に適用されてよいことがさらに留意される。
【０１４２】
簡単に上述した通り、アプリケーション１００６により、ユーザ（複数可）１００２は、ウェブコンテンツ（例えば、ウェブページ、音楽、ビデオ等）にアクセスすることなど、サービスプロバイダコンピュータ（複数可）１０１０と相互作用することが可能になり得る。サーバのクラスタ内またはサーバファームとして配置され得るサービスプロバイダコンピュータ（複数可）１０１０は、アプリケーション１００６及び／またはクラウドベースのソフトウェアサービスをホストしてよい。他のサーバアーキテクチャはさらに、アプリケーション１００６をホストするためにも使用されてよい。アプリケーション１００６は、多くのユーザ１００２からの要求を処理し、それに応答して、種々のアイテムウェブページを供給することが可能であってよい。アプリケーション１００６は、ソーシャルネットワーキングサイト、オンライン小売店、情報サイト、ブログサイト、検索エンジンサイト、ニュース及びエンターテイメントサイトなどを含む、ユーザ相互作用をサポートする任意のタイプのウェブサイトを提供し得る。上述の通り、記載された技法は、ユーザデバイス（複数可）１００４上で実行している他のアプリケーションなどのアプリケーション１００６の外部で同様に実施され得る。
【０１４３】
ユーザデバイス（複数可）１００４は、携帯電話、スマートフォン、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、デスクトップコンピュータ、シンクライアントデバイス、タブレットＰＣ、電子書籍（ｅ−ｂｏｏｋ）リーダ等であるがそれらに限定されない、任意のタイプのコンピューティングデバイスであってよい。いくつかの例において、ユーザデバイス（複数可）１００４は、ネットワーク（複数可）１００８を介して、または他のネットワーク接続を介して、サービスプロバイダコンピュータ（複数可）１０１０と通信状態にあってよい。代替的に、ユーザデバイス（複数可）１００４は、サービスプロバイダコンピュータ（複数可）１０１０により管理されるか、制御されるか、別様にはその一部である分散システムの一部（例えば、サービスプロバイダコンピュータ１０１０に統合されるコンソールデバイス）であってよい。
【０１４４】
１つの例示的な構成において、ユーザデバイス（複数可）１００４は、少なくとも１つのメモリ１０１４及び１つ以上の処理ユニット（またはプロセッサ（複数可）１０１６）を含んでよい。プロセッサ（複数可）１０１６は、ハードウェア、コンピュータ実行可能命令、ファームウェアまたはそれらの組み合わせにおいて適切に実装されてよい。プロセッサ（複数可）１０１６のコンピュータ実行可能命令またはファームウェア実装は、記載された種々の機能を行うために任意の適切なプログラミング言語で書かれたコンピュータ実行可能またはマシン実行可能命令を含んでよい。ユーザデバイス（複数可）１００４はさらに、ユーザデバイス（複数可）１００４に関連する地理的位置情報を提供及び／または記録するための地理的位置デバイス（例えば、全地球測位システム（ＧＰＳ）デバイスなど）を含んでよい。
【０１４５】
メモリ１０１４は、プロセッサ（複数可）１０１６上でロード可能及び実行可能であるプログラム命令、ならびに、これらのプログラムの実行中に生成されたデータを記憶してよい。ユーザデバイス（複数可）１００４の構成及びタイプに応じて、メモリ１０１４は揮発性（ランダムアクセスメモリ（ＲＡＭ）など）及び／または不揮発性（読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ等など）であってよい。ユーザデバイス（複数可）１００４はさらに、磁気ストレージ、光学ディスク及び／またはテープストレージを含むがそれらに限定されない、追加の取り外し可能ストレージ及び／または取り外し不可能ストレージを含んでよい。ディスクドライブ及びそれらの関連するコンピュータ可読媒体は、コンピューティングデバイスに、コンピュータ可読命令、データ構造、プログラムモジュール及び他のデータの不揮発性ストレージを提供してよい。いくつかの実装において、メモリ１０１４は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、またはＲＯＭなどの複数の異なるタイプのメモリを含んでよい。
【０１４６】
さらに詳細にメモリ１０１４のコンテンツに注目すると、メモリ１０１４は、ブラウザアプリケーション１００６または専用アプリケーション（例えば、スマートフォンアプリケーション、タブレットアプリケーション等）を介するなど、少なくとも１人のユーザが提供する入力要素または電子サービスウェブページを含む、本明細書に開示された特徴を実装するためのオペレーティングシステムと、１つ以上のアプリケーションプログラムまたはサービスとを含んでよい。ブラウザアプリケーション１００６は、サービスプロバイダコンピュータ（複数可）１０１０と相互作用するためのウェブサイトまたは他のインターフェースを受信、記憶及び／または表示するように構成されてよい。追加的に、メモリ１０１４は、アクセス認証情報及び／または他のユーザ情報（例えば、ユーザＩＤ、パスワード及び／または他のユーザ情報であるが、これらに限定されない）を記憶してよい。いくつかの例では、ユーザ情報は、アカウントアクセス要求を認証するための情報（例えば、装置ＩＤ、クッキー、ＩＰアドレス、位置などであるが、これらに限定されない）を含んでよい。追加的に、ユーザ情報は、セキュリティ質問に対してユーザが提供した応答またはユーザデバイス１００４により得られる地理的位置を含んでよい。
【０１４７】
いくつかの態様では、サービスプロバイダコンピュータ（複数可）１０１０はさらに、任意のタイプのコンピューティングデバイスであってよく、以下に限定されないが、例えば、携帯電話、スマートフォン、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、デスクトップコンピュータ、サーバコンピュータ、シンクライアントデバイス、タブレットＰＣ等である。追加的に、いくつかの実施形態では、サービスプロバイダコンピュータ（複数可）１０１０は、ホスト型コンピューティング環境に実装された１つ以上の仮想マシンにより実行されることに留意すべきである。ホスト型コンピューティング環境は、１つ以上の迅速に提供及び解放されるコンピューティングリソースを含んでよく、コンピューティングリソースは、コンピューティングデバイス、ネットワーキングデバイス及び／またはストレージデバイスを含んでよい。ホスト型コンピューティング環境はさらに、クラウドコンピューティング環境と呼ばれてよい。いくつかの例では、サービスプロバイダコンピュータ（複数可）１０１０は、ユーザデバイス（複数可）１００４及び／または他のサービスプロバイダと、ネットワーク１００８を介して、または他のネットワーク接続を介して通信状態にあってよい。サービスプロバイダコンピュータ（複数可）１０１０は、１つ以上のサーバを含んでよく、おそらくクラスタ内に、サーバファームとして、または互いに関連しない別個のサーバとして、配置される。これらのサーバは、本明細書で記載したキーワード分類及び評価機能サービスを、統合された分散コンピューティング環境の一部として実施するように構成されてよい。
【０１４８】
１つの例示的な構成において、サービスプロバイダコンピュータ（複数可）１０１０は、少なくとも１つのメモリ１０１８及び１つ以上の処理ユニット（またはプロセッサ（複数可）１０２０）を含んでよい。プロセッサ（複数可）１０２０は、ハードウェア、コンピュータ実行可能命令、ファームウェアまたはそれらの組み合わせにおいて適切に実装されてよい。プロセッサ（複数可）１０２０のコンピュータ実行可能命令またはファームウェア実装は、記載された種々の機能を行うために任意の適切なプログラミング言語で書かれたコンピュータ実行可能またはマシン実行可能命令を含んでよい。
【０１４９】
いくつかの例では、ハードウェアプロセッサ（複数可）１０２０はシングルコアプロセッサまたはマルチコアプロセッサであってよい。マルチコアプロセッサは同じプロセッサ内の複数の処理ユニットを含んでよい。いくつかの実施形態では、マルチコアプロセッサは、バス及びマルチコア間の第２または第３レベルのキャッシュなどの特定のリソースを共有してよい。いくつかの例では、シングルまたはマルチコアプロセッサの各コアはさらに、複数の実行論理プロセッサ（またはスレッド）を含んでよい。（複数の論理プロセッサをサポートする）係るコアにおいて、実行パイプラインのいくつかのステージ及びさらに低レベルのキャッシュはさらに共有されてよい。
【０１５０】
メモリ１０１８は、プロセッサ（複数可）１０２０上でロード可能及び実行可能であるプログラム命令、ならびに、これらのプログラムの実行中に生成されたデータを記憶してよい。サービスプロバイダコンピュータ（複数可）１０１０の構成及びタイプに応じて、メモリ１０１８は揮発性（ＲＡＭなど）及び／または不揮発性（ＲＯＭ、フラッシュメモリ等など）であってよい。サービスプロバイダコンピュータ（複数可）１０１０またはサーバはさらに、追加のストレージ１０２２を含んでよく、ストレージ１０２２は取り外し可能ストレージ及び／または取り外し不可能ストレージを含んでよい。追加のストレージ１０２２は、磁気ストレージ、光学ディスク及び／またはテープストレージを含んでよいが、これらに限定されない。ディスクドライブ及びそれらの関連するコンピュータ可読媒体は、コンピューティングデバイスのためのコンピュータ可読命令、データ構造、プログラムモジュール及び他のデータの不揮発性ストレージを提供してよい。いくつかの実装において、メモリ１０１８は、ＳＲＡＭ、ＤＲＡＭまたはＲＯＭなどの複数の異なるタイプのメモリを含んでよい。
【０１５１】
メモリ１０１８、取り外し可能及び取り外し不可能の両方の追加のストレージ１０２２は全て、コンピュータ可読記憶媒体の例である。例えば、コンピュータ可読記憶媒体は、情報（例えば、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータ）の記憶のための任意の方法または技術で実装された揮発性または不揮発性、取り外し可能または取り外し不可能な媒体を含んでよい。メモリ１０１８及び追加のストレージ１０２２は全て、コンピュータ記憶媒体の例である。サービスプロバイダコンピュータ（複数可）１０１０に存在し得る追加タイプのコンピュータ記憶媒体としては、ＰＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤもしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または任意の他の媒体であって、所望の情報を記憶するために使用できるもの、及びサービスプロバイダコンピュータ（複数可）１０１０がアクセスできるものを含んでよいが、これらに限定されない。前述の任意の組み合わせはさらに、コンピュータ可読媒体の範囲内に含まれるべきである。
【０１５２】
代替的に、コンピュータ可読通信媒体は、コンピュータ可読命令、プログラムモジュールまたはデータ信号内で送信される他のデータ（例えば搬送波または他の送信）を含んでよい。しかしながら、本明細書で使用する場合、コンピュータ可読記憶媒体にはコンピュータ可読通信媒体は含まれない。
【０１５３】
サービスプロバイダコンピュータ（複数可）１０１０はさらに、通信接続（複数可）１０２４であって、サービスプロバイダコンピュータ（複数可）１０１０が、記憶されたデータベース、別のコンピューティングデバイスもしくはサーバ、ユーザ端末及び／またはネットワーク（複数可）１００８上の他のデバイスと通信することを可能にする通信接続（複数可）１０２４を包含してよい。サービスプロバイダコンピュータ（複数可）１０１０はさらに、入出力デバイス（複数可）１０２６（例えば、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、ディスプレイ、スピーカ、プリンタなど）を含んでよい。
【０１５４】
メモリ１０１８は、オペレーティングシステム１０２８、１つ以上のデータストア１０３０及び／または管理バッファ１０３２及びロギングバッファ１０４０を含む本明細書に開示の特徴を実施するための１つ以上のアプリケーションプログラムもしくはサービスを含んでよい。本明細書に記載のモジュールは、ソフトウェアモジュール、ハードウェアモジュールまたはその適切な組み合わせでよい。モジュールがソフトウェアモジュールの場合、モジュールは非一時的なコンピュータ可読媒体上に具現化され、本明細書に記載の任意のコンピュータシステムのプロセッサにより処理され得る。記載の処理及びアーキテクチャは、任意のユーザ相互作用の前に、リアルタイムモードまたは非同時モードのいずれかで行われ得ることに留意すべきである。モジュールは図１０に提示された様式で構成されてもよく、及び／または本明細書に記載の機能は個別のモジュールとして存在する１つ以上のモジュールにより提供することができ、及び／または本明細書に記載のモジュール機能は複数のモジュールにわたり広がり得る。
【０１５５】
図１１は、種々の実施形態に係る、態様を実施するための環境例１１００の態様を例示する。理解される通り、説明のためにウェブベースの環境が使用されるが、適切であれば、種々の実施形態を実装するために様々な環境が使用され得る。環境は、電子クライアントデバイス１１０２を含み、このデバイスは、適切なネットワーク１１０４上で要求、メッセージまたは情報を送信及び受信するように、ならびにデバイスのユーザに情報を返すように動作可能な、任意の適切なデバイスを含み得る。係るクライアントデバイスの例には、パーソナルコンピュータ、携帯電話、ハンドヘルドメッセージングデバイス、ラップトップコンピュータ、セットトップボックス、携帯情報端末、電子書籍リーダなどが含まれる。ネットワークは、イントラネット、インターネット、セルラネットワーク、ローカルエリアネットワークもしくは任意の他の係るネットワーク、またはそれらの組み合わせを含む、任意の適切なネットワークを含み得る。係るシステムに使用される構成要素は、選択されるネットワーク及び／または環境のタイプに少なくとも部分的に依存し得る。係るネットワークを介した通信のためのプロトコル及び構成要素は既知であり、本明細書では詳細に述べない。ネットワーク上の通信は、有線接続または無線接続及びそれらの組み合わせによって使用可能になり得る。本例では、ネットワークはインターネットを含み、環境は要求を受信及びそれに応答するコンテンツの供給を行うウェブサーバ１１０６を含むが、他のネットワークの場合、同様の目的を供給する代替デバイスが使用できることが当業者には明らかであろう。
【０１５６】
例示の環境は、少なくとも１つのアプリケーションサーバ１１０８及びデータストア１１１０を含む。連結されるかまたは別様に構成可能であり、適切なデータストアからデータを取得するなどのタスクを行うために相互作用可能な、いくつかのアプリケーションサーバ、層または他の要素、処理もしくは構成要素が存在し得ることを理解すべきである。本明細書で使用される場合、用語「データストア」は、任意の標準型、分散型またはクラスタ型の環境において、任意の組み合わせ及び数のデータサーバ、データベース、データストレージデバイス及びデータ記憶媒体を含んでよい、データの記憶、アクセス及び検索が可能な任意のデバイスまたはデバイスの組み合わせを指す。アプリケーションサーバは、クライアントデバイスに対する１つ以上のアプリケーションの態様を実行し、アプリケーションに対する大部分のデータアクセス及びビジネス論理を処理するために、必要に応じてデータストアに統合するための、任意の適切なハードウェア及びソフトウェアを含み得る。アプリケーションサーバは、データストアと協働してアクセス制御サービスを提供し、ユーザに転送されるテキスト、グラフィックス、オーディオ及び／またはビデオなどのコンテンツを生成することが可能であり、これをウェブサーバによって、本例ではハイパーテキストマークアップ言語（「ＨＴＭＬ」）、拡張可能マークアップ言語（ＸＭＬ）または別の適切な構造言語の形態でユーザに供給してよい。全ての要求及び応答の処理、ならびにクライアントデバイス１１０２とアプリケーションサーバ１１０８との間のコンテンツの送達は、ウェブサーバによって処理可能である。本明細書で述べられる構造化コードは、本明細書の他の場所で述べられるような任意の適切なデバイスまたはホストマシン上で実行可能であるため、ウェブサーバ及びアプリケーションサーバは必須ではなく単なる例示の構成要素であることを理解すべきである。
【０１５７】
データストア１１１０は、特定の態様に関するデータを記憶するための、いくつかの個別のデータテーブル、データベースまたは他のデータ記憶機構及び媒体を含み得る。例えば、例示のデータストアは、製造データ１１１２及びユーザ情報１１１６を記憶するための機構を含み、これを使用して製造側にコンテンツを供給し得る。データストアはさらに、ログデータ１１１４を記憶するための機構を含むように示されており、これは報告、分析または他の係る目的に使用され得る。データストアに記憶する必要があり得る多くの他の態様が存在し得ることを理解すべきであり、例えば、適切であるものとして上記で列挙した機構のいずれか、またはデータストア１１１０の追加の機構に記憶可能なページイメージ情報及びアクセス権情報などに対してのものである。データストア１１１０は、それに関連付けられた論理を介してアプリケーションサーバ１１０８から命令を受信し、それに応答してデータの取得、更新または別様の処理を行うように、動作可能である。一例では、ユーザはあるタイプのアイテムに対する検索要求を提出する場合がある。この場合、データストアは、ユーザの識別を検証するためにユーザ情報にアクセスする可能性があり、カタログ詳細情報にアクセスしてそのタイプのアイテムに関する情報を取得することができる。次いで、ユーザがユーザデバイス１１０２上でブラウザを介して見ることができるウェブページ上に列挙された結果にあるなどの情報をユーザに返すことができる。対象の特定アイテムに関する情報は、ブラウザの専用ページまたはウィンドウで見ることができる。
【０１５８】
各サーバは、通常、そのサーバの一般的な管理及び動作に関する実行可能プログラム命令を提供するオペレーティングシステムを含むことになり、通常、サーバのプロセッサによって実行された場合、サーバがその目的機能を行えるようにする命令を記憶するコンピュータ可読記憶媒体（例えば、ハードディスク、ランダムアクセスメモリ、読み出し専用メモリ等）を含むことになる。オペレーティングシステム及びサーバの一般的な機能性に対する好適な実装は既知であるか、または市販されており、当業者によって、特に本明細書における開示に鑑みて、容易に実装される。
【０１５９】
一実施形態における環境は、１つ以上のコンピュータネットワークまたは直接接続を使用して、通信リンクを介して相互接続されるいくつかのコンピュータシステム及び構成要素を利用する、分散型コンピューティング環境である。しかしながら、当業者であれば、係るシステムが、図１１に示されるよりも少ないかまたは多い数の構成要素を有するシステム内で、等しく良好に動作可能であることを理解されよう。したがって、図１１のシステム１１００の図示は、本来は例示的なものであり、本開示の範囲を限定するものと解釈されるべきではない。
【０１６０】
種々の実施形態は、いくつかの場合、任意の多数のアプリケーションを動作するように使用可能な１つ以上のユーザコンピュータ、コンピューティングデバイスまたは処理デバイスを含み得る、多種多様な動作環境でさらに実施できる。ユーザデバイスまたはクライアントデバイスは、標準オペレーティングシステムを実行するデスクトップまたはラップトップコンピュータなどの任意の多数の汎用パーソナルコンピュータ、ならびにモバイルソフトウェアを実行し、多数のネットワーキングプロトコル及びメッセージングプロトコルをサポートすることが可能な、セルラ式、無線及びハンドヘルドのデバイスのうちのいずれかを含み得る。係るシステムはさらに、開発及びデータベース管理などの目的で多様な市販のオペレーティングシステム及び他の既知のアプリケーションのいずれかを実行する、多数のワークステーションを含み得る。これらのデバイスは、ダミー端末、シンクライアント、ゲームシステム及びネットワークを介して通信可能な他のデバイスなどの、他の電子デバイスを含み得る。
【０１６１】
ほとんどの実施形態は、トランスミッションコントロールプロトコル／インターネットプロトコル（「ＴＣＰ／ＩＰ」）、開放型システム間相互接続（「ＯＳＩ」）、ファイルトランスファプロトコル（「ＦＴＰ」）、ユニバーサルプラグアンドプレイ（「ＵｐｎＰ」）、ネットワークファイルシステム（「ＮＦＳ」）、共通インターネットファイルシステム（「ＣＩＦＳ」）及びＡｐｐｌｅＴａｌｋ（登録商標）などの、多様な市販のプロトコルのいずれかを使用する通信をサポートするための、当業者によく知られた少なくとも１つのネットワークを利用する。例えば、ネットワークは、ローカルエリアネットワーク、ワイドエリアネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク及びそれらの任意の組み合わせとなり得る。
【０１６２】
ウェブサーバを利用する実施形態では、ウェブサーバは、ハイパーテキストトランスファプトロコル（「ＨＴＴＰ」）サーバ、ＦＴＰサーバ、共通ゲートウェイインターフェース（「ＣＧＩ」）サーバ、データサーバ、Ｊａｖａ（登録商標）サーバ及びビジネスアプリケーションサーバを含む、多様なサーバまたは中間層アプリケーションのいずれかを実行することができる。サーバ（複数可）はさらに、Ｊａｖａ（登録商標）、Ｃ、Ｃ＃もしくはＣ＋＋などの任意のプログラミング言語、またはＰｅｒｌ、ＰｙｔｈｏｎもしくはＴＣＬなどの任意のスクリプト言語、ならびにそれらの組み合わせで記述された、１つ以上のスクリプトまたはプログラムとして実装してよい、１つ以上のウェブアプリケーションを実行することなどにより、ユーザデバイスからの要求に応答して、プログラムまたはスクリプトを実行可能であってよい。サーバ（複数可）はさらに、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）及びＩＢＭ（登録商標）から市販されているものを限定なしに含む、データベースサーバを含んでよい。
【０１６３】
環境はさらに、前述のように、多様なデータストアならびに他のメモリ及び記憶媒体を含み得る。これらは、１つ以上のコンピュータに対してローカルな（及び／または内部に常駐した）、あるいはネットワークにわたるコンピュータのいずれかまたは全てからリモートの、記憶媒体上などの、多様な位置に常駐可能である。実施形態の特定のセットでは、情報は当業者によく知られたストレージエリアネットワーク（「ＳＡＮ」）内に常駐してよい。同様に、コンピュータ、サーバまたは他のネットワークデバイスに寄与する機能を行うために必要な任意のファイルは、適宜、ローカル及び／またはリモートに記憶されてよい。システムがコンピュータ化されたデバイスを含む場合、それぞれの係るデバイスは、バスを介して電気的に結合し得るハードウェア要素を含むことが可能であり、要素は、例えば、少なくとも１つの中央処理ユニット（ＣＰＵ）、少なくとも１つの入力デバイス（例えば、マウス、キーボード、コントローラ、タッチスクリーンまたはキーパッド）、及び少なくとも１つの出力デバイス（例えば、ディスプレイデバイス、プリンタまたはスピーカ）を含み得る。係るシステムはさらに、ディスクドライブ、光学ストレージデバイス及びランダムアクセスメモリ（「ＲＡＭ」）または読み出し専用メモリ（「ＲＯＭ」」などのソリッドステートストレージデバイスなどの、１つ以上のストレージデバイス、ならびに取り外し可能な媒体デバイス、メモリカード、フラッシュカード等を含んでよい。
【０１６４】
係るデバイスはさらに、上記の通り、コンピュータ可読記憶媒体リーダ、通信デバイス（例えば、モデム、ネットワークカード（無線または有線）、赤外線通信デバイス等）及び作業メモリを含み得る。コンピュータ可読記憶媒体リーダは、リモート、ローカル、固定及び／または取り外し可能ストレージデバイスを表す、コンピュータ可読記憶媒体、ならびにコンピュータ可読情報を一時的及び／またはより永続的に包含する、記憶する、伝達する及び検索するための記憶媒体に、接続されるか、またはそれらを受信するように構成可能である。システム及び種々のデバイスはさらに、通常、クライアントアプリケーションまたはウェブブラウザなどのオペレーティングシステム及びアプリケーションプログラムを含む、少なくとも１つの作業メモリデバイス内に配置された、多数のソフトウェアアプリケーション、モジュール、サービスまたは他の要素を含むことになる。代替的な実施形態は、上記からの多数の変形形態を有してよいことを理解すべきである。例えば、カスタマイズされたハードウェアはさらに、ハードウェア、ソフトウェア（アプレットなどのポータブルソフトウェアを含む）またはその両方で使用される場合があり、及び／または特定の要素をハードウェア、ソフトウェア（アプレットなどのポータブルソフトウェアを含む）またはその両方で実装する場合がある。さらに、ネットワーク入出力デバイスなどの他のコンピューティングデバイスへの接続を用いてよい。
【０１６５】
コードまたはコードの一部を包含するための記憶媒体及びコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、電気的に消去可能なプログラム可能読み出し専用メモリ（「ＥＥＰＲＯＭ」）、フラッシュメモリもしくは他のメモリ技術、コンパクトディスク読み出し専用メモリ（「ＣＤ−ＲＯＭ」）、デジタル多用途ディスク（ＤＶＤ）もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイスを含む、コンピュータ可読命令、データ構造、プログラムモジュールもしくは他のデータなどの情報の記憶及び／または伝達用の任意の方法または技術で実装された、揮発性及び不揮発性の媒体、取り外し可能及び取り外し不可能な媒体などであるがこれらに限定されない記憶媒体及び通信媒体、あるいは所望の情報を記憶するために使用可能な、かつシステムデバイスによるアクセスが可能な、任意の他の媒体を含む、当分野で知られているかまたは使用されている任意の適切な媒体を含み得る。当業者であれば、本明細書で提供された開示及び教示に基づき、種々の実施形態を実装するための他の手段及び／または方法を理解されよう。
【０１６６】
したがって、本明細書及び図面は、限定的ではなく例示的な意味であるとみなされる。しかしながら、特許請求の範囲に記載された本開示のより広義な趣旨及び範囲から逸脱することなく、本明細書に対する種々の修正及び変更が行われ得ることは明白であろう。
【０１６７】
開示の実施形態は以下の条項を考慮して記載され得る。
１．ＰＣＩデバイスのＰＣＩコアにより、ＰＣＩコンフィグレーションアクセス要求をＰＣＩルートコンプレックスから受信することと、
前記ＰＣＩコアにより、前記ＰＣＩコンフィグレーションアクセス要求を、前記ＰＣＩデバイスのコンフィグレーション管理モジュールに送信することと、
前記コンフィグレーション管理モジュールにより、前記ＰＣＩコンフィグレーションアクセス要求が、前記ＰＣＩコアのネイティブコンフィグレーション空間以外のコンフィグレーション空間に対すると判断することと、
前記コンフィグレーション管理ハードウェアにより、前記ＰＣＩコンフィグレーションアクセス要求に関連する割り込み要求を、前記ＰＣＩデバイスのエミュレーションモジュールに送信することと、
前記割り込み要求に応答して、前記エミュレーションモジュールにより、コンフィグレーション空間エミュレーションソフトウェアを実行して、エミュレートされたコンフィグレーション空間からエミュレートされたコンフィグレーションを検索することと、
前記ＰＣＩコンフィグレーションアクセス要求を前記エミュレートされたコンフィグレーションを使用して供給することと
を備える、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）コンフィグレーション空間をエミュレートするための方法。
【０１６８】
２．前記ＰＣＩコンフィグレーションアクセス要求を供給することは、前記ＰＣＩコンフィグレーションアクセス要求がコンフィグレーション読み出し要求の場合に、前記エミュレートされたコンフィグレーションを、前記ＰＣＩルートコンプレックスに送信することを含む、条項１に記載の方法。
【０１６９】
３．前記ＰＣＩコンフィグレーションアクセス要求を供給することはさらに、前記エミュレートされたコンフィグレーションを変更することを含む、条項２に記載の方法。
【０１７０】
４．前記ＰＣＩコンフィグレーションアクセス要求を供給することは、前記ＰＣＩコンフィグレーションアクセス要求がコンフィグレーション書き込み要求の場合に、前記エミュレートされたコンフィグレーションを更新することを含む、先行条項のいずれかに記載の方法。
【０１７１】
５．前記エミュレートされたコンフィグレーション空間は複数のＰＣＩデバイスに対してエミュレートされたコンフィグレーションを含む、先行条項のいずれかに記載の方法。
【０１７２】
６．前記エミュレートされたコンフィグレーション空間はＤＲＡＭに記憶される、先行条項のいずれかに記載の方法。
【０１７３】
７．前記エミュレートされたコンフィグレーション空間は永続メモリに記憶される、条項１〜５のいずれかに記載の方法。
【０１７４】
８．前記コンフィグレーション空間エミュレーションソフトウェアが分離された環境で実行される、先行条項のいずれかに記載の方法。
【０１７５】
９．エミュレーション構成要素と、
１セットのネイティブコンフィグレーションレジスタを含むバスインターフェースコアと、
前記バスインターフェースコアに連結されるコンフィグレーション管理構成要素であって、
前記バスインターフェースコアからコンフィグレーションアクセス要求を受信し、
前記エミュレーション構成要素に、エミュレートされたコンフィグレーション空間からエミュレートされたコンフィグレーションを検索するよう要求し、
前記コンフィグレーションアクセス要求を前記エミュレートされたコンフィグレーションを使用して供給するように構成される、前記コンフィグレーション管理構成要素
とを備える装置。
【０１７６】
１０．前記エミュレートされたコンフィグレーション空間は複数の周辺デバイスに対してエミュレートされたコンフィグレーションを含む、条項９に記載の装置。
【０１７７】
１１．前記エミュレートされたコンフィグレーションは物理機能リソースを表す、条項９または１０に記載の装置。
【０１７８】
１２．前記エミュレートされたコンフィグレーションは仮想機能リソースを表す、条項９〜１１のいずれかに記載の装置。
【０１７９】
１３．前記エミュレートされたコンフィグレーションは、分離された環境で実行するコンフィグレーションエミュレーションソフトウェアの実行を介して検索される、条項９〜１２のいずれかに記載の装置。
【０１８０】
１４．前記コンフィグレーション管理構成要素は、前記コンフィグレーションアクセス要求の前記進捗を追跡するステータスレジスタを含み、前記ステータスレジスタは前記コンフィグレーションアクセス要求を供給することの完了後に更新される、条項９〜１３のいずれかに記載の装置。
【０１８１】
１５．前記エミュレーション構成要素はＤＲＡＭに連結され、前記エミュレートされたコンフィグレーション空間は前記ＤＲＡＭに記憶される、条項９〜１４のいずれかに記載の装置。
【０１８２】
１６．前記エミュレーション構成要素は永続メモリに連結され、前記エミュレートされたコンフィグレーション空間は前記永続メモリに記憶される、条項９〜１５のいずれかに記載の装置。
【０１８３】
１７．前記エミュレートされたコンフィグレーション空間はテキストファイルとして記憶される、条項９〜１６のいずれかに記載の装置。
【０１８４】
１８．前記エミュレーション構成要素の少なくとも１つ、前記バスインターフェースコア及び前記コンフィグレーション管理構成要素は電子回路を備える、条項９〜１７のいずれかに記載の装置。
【０１８５】
１９．前記装置は、システムオンチップ（ＳｏＣ）、特定用途向け集積回路（ＡＳＩＣ）、プロセッサまたはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）に実装される、条項９〜１８のいずれかに記載の装置。
【０１８６】
２０．周辺デバイスによりコンフィグレーション空間をエミュレートするための方法であり、
前記周辺デバイスにより、コンフィグレーションアクセス要求を受信することと、
前記周辺デバイスにより、前記コンフィグレーションアクセス要求がエミュレートされたコンフィグレーション空間に対すると判断することと、
前記周辺デバイスにより、エミュレートされたコンフィグレーションを前記エミュレートされたコンフィグレーション空間から検索することと、
前記周辺デバイスにより、前記コンフィグレーションアクセス要求を前記エミュレートされたコンフィグレーションを使用して供給すること
とを備える、前記方法。
【０１８７】
２１．前記エミュレートされたコンフィグレーション空間は複数の周辺デバイス機能に対してエミュレートされたコンフィグレーションを含む、条項２０に記載の方法。
【０１８８】
２２．前記エミュレートされたコンフィグレーションは物理機能リソースを表す、条項２０または２１に記載の方法。
【０１８９】
２３．前記エミュレートされたコンフィグレーションは仮想機能リソースを表す、条項２０または２１に記載の方法。
【０１９０】
２４．前記コンフィグレーションアクセス要求を供給することは、前記エミュレートされたコンフィグレーションを前記コンフィグレーションアクセス要求のソースに提供することを含む、条項２０〜２３のいずれかに記載の方法。
【０１９１】
２５．前記コンフィグレーションアクセス要求を供給することは、前記エミュレートされたコンフィグレーションを更新することを含む、条項２０〜２４のいずれかに記載の方法。
【０１９２】
２６．ＰＣＩデバイスのＰＣＩコアにより、ホストコンピュータにより発信されたコンフィグレーション読み出し要求を受信することと、
基本ＰＣＩケーパビリティ回路を備える前記ＰＣＩコアにより、及び管理ハードウェアに対して、前記ＰＣＩデバイスコンフィグレーション読み出し要求を送信することと、
前記管理ハードウェアにより、ＰＣＩコンフィグレーション読み出し要求が受信されたことをプロセッサに通知することと、
前記プロセッサにより、前記ＰＣＩデバイスによりサポートされる前記ＰＣＩデバイスの前記拡張ＰＣＩケーパビリティを表すエミュレートされたコンフィグレーションヘッダを検索することと、
前記エミュレートされたコンフィグレーションヘッダを前記ホストコンピュータに送信することと、
を備える、拡張ペリフェラルコンポーネントインターコネクト（ＰＣＩ）ケーパビリティをエミュレートするための方法。
【０１９３】
２７．前記プロセッサの分離されたソフトウェアコンテンツで実行するファームウェアにより、前記割り込み要求に応答することを備える、条項２６に係る方法。
【０１９４】
２８．前記管理ハードウェアのステータスレジスタを更新することにより、前記エミュレートされたコンフィグレーションヘッダの前記検索の進捗後に追跡することを備える、条項２６または２７に係る方法。
【０１９５】
２９．前記エミュレートされたコンフィグレーションヘッダの前記検索は、前記プロセッサにより、コンフィグレーション空間エミュレーションソフトウェアを実行することを備える、条項２６〜２８のいずれかに係る方法。
【０１９６】
３０．前記エミュレートされたコンフィグレーションヘッダは仮想機能リソースのステータスを表す、条項２６〜２９のいずれかに係る方法。
【０１９７】
３１．前記エミュレートされたコンフィグレーションヘッダは物理機能リソースのステータスを表す、条項２６〜２９のいずれかに係る方法。
【０１９８】
３２．前記ＰＣＩコアにより、前記エミュレートされたコンフィグレーションヘッダを更新するための、前記ホストコンピュータにより発信されるＰＣＩデバイスコンフィグレーション書き込み要求を受信することと、
前記ＰＣＩコアにより、及び前記管理ハードウェアに対して、前記ＰＣＩデバイスコンフィグレーション書き込み要求を送信することと、
前記管理ハードウェアにより、前記ＰＣＩデバイスコンフィグレーション書き込み要求が受信されたことを、前記プロセッサに通知することと、
前記プロセッサにより、前記エミュレートされたコンフィグレーションヘッダを検索することと、
前記プロセッサにより、前記エミュレートされたコンフィグレーションヘッダを更新することと、
をさらに備える、条項２６〜３１のいずれかに係る方法。
【０１９９】
３３．前記更新は仮想機能リソースのステータスを更新することを備える、条項３２に係る方法。
【０２００】
３４．前記更新は物理機能リソースのステータスを更新することを備える、条項３２に係る方法。
【０２０１】
３５．前記ＰＣＩコアにより、新規にエミュレートされたコンフィグレーションヘッダを書き込むための、前記ホストコンピュータにより発信されるＰＣＩデバイスコンフィグレーション書き込み要求を受信することと、
前記ＰＣＩコアにより、及び前記管理ハードウェアに対して、前記ＰＣＩデバイスコンフィグレーション書き込み要求を送信することと、
前記管理ハードウェアにより、前記ＰＣＩデバイスコンフィグレーション書き込み要求が受信されたことを、前記プロセッサに通知することと、
前記プロセッサにより、前記新規にエミュレートされたコンフィグレーションヘッダを前記プロセッサにアクセス可能なメモリに書き込むことと
をさらに備える、条項２６〜３４のいずれかに係る方法。
【０２０２】
３６．ホストコンピュータにより発信されるＰＣＩデバイスコンフィグレーション読み出し要求を受信するように構成され、基本ＰＣＩケーパビリティ回路を備えるＰＣＩコアと、
前記ＰＣＩコアから前記ＰＣＩデバイスコンフィグレーション読み出し要求を受信し、前記ＰＣＩデバイスコンフィグレーション読み出し要求に応答して、割り込み要求をプロセッサに送信するように構成される、管理ハードウェアと、
前記割り込み要求に応答して、前記ＰＣＩデバイスによりサポートされる前記ＰＣＩデバイスの前記拡張ＰＣＩケーパビリティを表すエミュレートされたコンフィグレーションヘッダを検索するように構成されるプロセッサと
を備える、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）デバイスであり、
前記ＰＣＩデバイスが前記エミュレートされたコンフィグレーションヘッダを前記ホストコンピュータに送信するように構成された、前記ＰＣＩデバイス。
【０２０３】
３７．一度ペリフェラルコンポーネントインターコネクト（ＰＣＩ）デバイスにより実行されると、前記ＰＣＩデバイスに
前記ＰＣＩデバイスのＰＣＩコアにより、ホストコンピュータから発信されたＰＣＩデバイスコンフィグレーション読み出し要求を受信するステージと、
基本ＰＣＩケーパビリティ回路を備える前記ＰＣＩコアにより、及び管理ハードウェアに対して、前記ＰＣＩデバイスコンフィグレーション読み出し要求を送信するステージと、
前記管理ハードウェアにより、前記ＰＣＩデバイスコンフィグレーション読み出し要求に応答して、割り込み要求をプロセッサに送信するステージと、
前記プロセッサにより、前記割り込み要求に応答して、前記ＰＣＩデバイスによりサポートされる前記ＰＣＩデバイスの前記拡張ＰＣＩケーパビリティを表すエミュレートされたコンフィグレーションヘッダを検索するステージと、
前記エミュレートされたコンフィグレーションヘッダを前記ホストコンピュータに送信するステージと、
を行わせる命令を記憶する、非一時的コンピュータ可読媒体。
【０２０４】
他の変形形態は本開示の趣旨の範囲内である。したがって、開示された技法は種々の修正及び代替構成の対象となり得るが、そのうちの特定の例示された実施形態が図面に示されており、上記で詳細に説明された。しかしながら、開示された特定の形態（複数可）に本開示を限定することは意図されておらず、反対に、添付の特許請求の範囲に定義された通り本開示の趣旨及び範囲内にある全ての修正、代替構成及び等価物をカバーするよう意図されていることを理解すべきである。
【０２０５】
開示された実施形態を記述する文脈での（特に以下の特許請求の範囲の文脈での）用語「ａ」及び「ａｎ」及び「ｔｈｅ」及び同様の指示対象の使用は、本明細書で別段に指示されていない限り、または文脈と明らかに矛盾しない限り、単数形及び複数形の両方をカバーするものと解釈されるものである。用語「ｃｏｍｐｒｉｓｉｎｇ（備える）」、「ｈａｖｉｎｇ（有する）」、「ｉｎｃｌｕｄｉｎｇ（含む）」及び「ｃｏｎｔａｉｎｉｎｇ（包含する）」は、別段に記載されていない限り、非限定（すなわち「含むが限定されない」ことを意味する）用語として解釈されるものである。用語「接続された」は、たとえ何らかの介入が存在していても、部分的または全体的に包含される、連結される、または互いに接合されるとして解釈されるものである。本明細書での値の範囲の列挙は、本明細書で別段に指示されていない限り、範囲内にある各個別の値を個々に指す省略方法として機能することが単に意図されており、各個別の値は、あたかも本明細書に個々に列挙されているかのように本明細書に組み込まれる。本明細書に記載された全ての方法は、本明細書で別段に指示されていない限り、または文脈と明らかに矛盾しない限り、任意の適切な順序で実行可能である。本明細書で提供された任意及び全ての例または例示的な表現（例えば、「などの」）の使用は、本開示の実施形態を単により良く明らかにすることが意図されており、別段に請求されない限り、本開示の範囲に限定を課すものではない。本明細書内のいかなる表現も、本開示の実施に不可欠な任意の請求されない要素を示すものと解釈されるべきではない。
【０２０６】
語句「Ｘ、ＹまたはＺの少なくとも１つ」などの接続語は、別段の定めのない限り、項目、用語などがＸ、ＹまたはＺのいずれかまたはそれらの任意の組み合わせ（例えば、Ｘ、Ｙ及び／またはＺ）であり得ることを提示するために、一般的に使用される文脈で解釈される。したがって、係る接続語は、一般的に、ある実施形態が、Ｘ、Ｙ及びＺのそれぞれが存在するために、Ｘの少なくとも１つ、Ｙの少なくとも１つまたはＺの少なくとも１つを必要とすることを示すように意図されるものではなく、そうすべきでもない。
【０２０７】
本明細書には、本開示を実施するための発明者に知られた最良の方法を含む、本開示の種々の実施形態が記述されている。前述の説明を読むことで当業者にそれらの実施形態の変形形態が明らかとなってよい。発明者は、当業者が係る変形形態を適切なものとして利用するものと予期し、発明者は、本明細書で具体的に記載された以外の方法で本開示が実施されることを意図する。したがって、本開示は、適用可能な法律によって許可された場合、添付の特許請求の範囲に記載された主題の全ての修正及び等価物を含む。さらに、本明細書で別段に指示されていない限り、または文脈と明らかに矛盾していない限り、全ての可能な変形形態における前述の要素の任意の組み合わせが本開示によって包含される。
【図１】
2019091494.tif 000009
【図２】
2019091494.tif 000010
【図３】
2019091494.tif 000011
【図４】
2019091494.tif 000012
【図５】
2019091494.tif 000013
【図６】
2019091494.tif 000014
【図７】
2019091494.tif 000015
【図８】
2019091494.tif 000016
【図９】
2019091494.tif 000017
【図１０】
2019091494.tif 000018
【図１１】
2019091494.tif 000019