(57)【要約】      （修正有）【課題】キュー・データ構造およびキュー・データ構造に関連する事前変換済みアドレスを使用して入出力装置またはエンドポイントと通信するための装置および方法を提供する。【解決手段】デバイス・ドライバ・サービスは、デバイス・ドライバにキュー・データ構造に関するルート複合体内のアドレス変換および保護テーブル項目の初期設定のために呼び出され、未変換アドレスをデバイス・ドライバに返す。その未変換アドレスは次に入出力装置またはエンドポイントに提供される。次に、入出力装置またはエンドポイントは、これらの未変換アドレスの変換を要求し、キュー・データ構造をターゲットにする入出力動作を受信する前に入出力装置またはエンドポイントにそのアドレスを保管する。キャッシュされた変換は、ルート複合体のアドレス変換機能をバイパスし、入出力装置またはエンドポイントからキュー・データ構造に直接アクセスするために使用できる。【選択図】図４
2008102928.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システム内でデバイス・ドライバと入出力（Ｉ／Ｏ）装置との間で通信するためのアドレス変換を確立するための方法において、
前記デバイス・ドライバにより、前記デバイス・ドライバと前記入出力装置との間の通信に関連するキュー・エレメントを収容するために使用されるキュー・データ構造を作成するステップと、
前記デバイス・ドライバがデバイス・ドライバ・サービスを呼び出したことに応答して、前記キュー・データ構造に関して前記データ処理システムのルート複合体に関連するアドレス変換データ構造内の１つまたは複数のアドレス変換項目を初期設定するステップであって、前記１つまたは複数のアドレス変換項目が、１つまたは複数の未変換アドレスから前記キュー・データ構造に関連する１つまたは複数の変換済みメモリ・アドレスへの１つまたは複数の変換を指定するステップと、
前記アドレス変換データ構造から、前記キュー・データ構造に関連する前記１つまたは複数のアドレス変換に関する変換情報を前記入出力装置に提供するステップと、
前記キュー・データ構造に関連する通信を処理するために前記アドレス変換情報を前記入出力装置にキャッシュするステップと、
を含む方法。
【請求項２】
前記キュー・データ構造に関連する前記アドレス変換情報を前記入出力装置に提供する前記ステップが、
前記デバイス・ドライバ・サービスにより、前記１つまたは複数の未変換アドレスを前記デバイス・ドライバに渡すステップと、
前記デバイス・ドライバにより、前記キュー・データ構造の前記１つまたは複数の未変換アドレスを前記入出力装置に提供するステップと、
前記１つまたは複数の未変換アドレスを受信したことに応答して、前記入出力装置により、アドレス変換要求を前記ルート複合体に送信するステップと、
前記ルート複合体から、前記キュー・データ構造に関連する前記ルート複合体内の前記１つまたは複数のアドレス変換項目に基づいて前記１つまたは複数の未変換アドレスに関連する前記１つまたは複数の変換済みアドレスを受信するステップと、
を含む、請求項１に記載の方法。
【請求項３】
前記キュー・データ構造の前記１つまたは複数の未変換アドレスを前記入出力装置に提供する前記ステップが、
前記デバイス・ドライバまたは前記デバイス・ドライバ・サービスのうちの一方により、前記１つまたは複数の未変換アドレスを入出力装置構成空間またはＩ／Ｏメモリ・マップ入出力（ＭＭＩＯ）メモリ空間のうちの一方に書き込むステップ
を含む、請求項２に記載の方法。
【請求項４】
前記入出力装置が、前記デバイス・ドライバと前記入出力装置との間で通信するために使用される前記キュー・データ構造の１つまたは複数の未変換アドレスに関連する前記アドレス変換情報を要求する、請求項１に記載の方法。
【請求項５】
前記入出力装置が、
前記デバイス・ドライバと前記入出力装置との間で通信するために使用される前記キュー・データ構造の前記１つまたは複数の変換済みアドレスを保管し、
前記デバイス・ドライバと前記入出力装置との間で通信するために使用される前記キュー・データ構造の１つまたは複数の項目にアクセスするためにＤＭＡトランザクションを実行するときに、１つまたは複数の前に保管した変換済みアドレスを使用する、
請求項１に記載の方法。
【請求項６】
前記入出力装置において、前記キュー・データ構造に関連する前記１つまたは複数のアドレス変換に関する前記変換情報をターゲットにする無効化要求を受信するステップと、
前記無効化要求を受信したことに応答して、前記入出力装置の前記キャッシュ内の前記１つまたは複数のアドレス変換に関する前記変換情報を無効化するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記キュー・データ構造が、前記デバイス・ドライバと記憶装置またはネットワーク装置のうちの一方との間で伝達すべき制御情報を指定するキュー項目を保管する、請求項１に記載の方法。
【請求項８】
前記記憶装置またはネットワーク装置が周辺装置相互接続拡張（ＰＣＩｅ）アダプタである、請求項７に記載の方法。
【請求項９】
前記キュー・データ構造が、リンク・リスト・キュー・データ構造またはサーキュラ・バッファ・キュー・データ構造のうちの一方として構成される、請求項１に記載の方法。
【請求項１０】
前記１つまたは複数の未変換アドレスが、前記キュー・データ構造に関する少なくとも１つの未変換開始アドレスを含み、任意選択で、前記キュー・データ構造に関する未変換終了アドレスまたは前記キュー・データ構造の長さのうちの一方を含む、請求項１に記載の方法。
【請求項１１】
前記デバイス・ドライバが前記データ処理システムのシステム・イメージまたは信頼できないロジカル・パーティション内に設けられ、前記デバイス・ドライバ・サービスが信頼できる仮想化仲介内に設けられる、請求項１に記載の方法。
【請求項１２】
コンピュータ可読プログラムを有するコンピュータで使用可能な媒体を含むコンピュータ・プログラムにおいて、前記コンピュータ可読プログラムが、コンピューティング・デバイス上で実行されると、
デバイス・ドライバにより、前記デバイス・ドライバと入出力装置との間の通信に関連するキュー・エレメントを収容するために使用されるキュー・データ構造を作成するステップと、
前記デバイス・ドライバがデバイス・ドライバ・サービスを呼び出したことに応答して、前記キュー・データ構造に関してデータ処理システムのルート複合体に関連するアドレス変換データ構造内の１つまたは複数のアドレス変換項目を初期設定するステップであって、前記１つまたは複数のアドレス変換項目が、１つまたは複数の未変換アドレスから前記キュー・データ構造に関連する１つまたは複数の変換済みメモリ・アドレスへの１つまたは複数の変換を指定するステップと、
前記アドレス変換データ構造から、前記キュー・データ構造に関連する前記１つまたは複数のアドレス変換に関する変換情報を前記入出力装置に提供するステップと、
前記キュー・データ構造に関連する通信を処理するために前記アドレス変換情報を前記入出力装置にキャッシュするステップと、
を前記コンピューティング・デバイスに実行させる、コンピュータ・プログラム。
【請求項１３】
前記デバイス・ドライバ・サービスにより、前記１つまたは複数の未変換アドレスを前記デバイス・ドライバに渡すステップと、
前記デバイス・ドライバにより、前記キュー・データ構造の前記１つまたは複数の未変換アドレスを前記入出力装置に提供するステップと、
前記１つまたは複数の未変換アドレスを受信したことに応答して、前記入出力装置により、アドレス変換要求を前記ルート複合体に送信するステップと、
前記ルート複合体から、前記キュー・データ構造に関連する前記ルート複合体内の前記１つまたは複数のアドレス変換項目に基づいて前記１つまたは複数の未変換アドレスに関連する前記１つまたは複数の変換済みアドレスを受信するステップと、
により、前記コンピュータ可読プログラムが、前記キュー・データ構造に関連する前記アドレス変換情報を前記入出力装置に提供する前記ステップを前記コンピューティング・デバイスに実行させる、請求項１２に記載のコンピュータ・プログラム。
【請求項１４】
前記デバイス・ドライバまたは前記デバイス・ドライバ・サービスのうちの一方により、前記１つまたは複数の未変換アドレスを入出力装置構成空間またはＩ／Ｏメモリ・マップ入出力（ＭＭＩＯ）メモリ空間のうちの一方に書き込むステップ
により、前記コンピュータ可読プログラムが、前記キュー・データ構造の前記１つまたは複数の未変換アドレスを前記入出力装置に提供する前記ステップを前記コンピューティング・デバイスに実行させる、請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
前記入出力装置が、前記デバイス・ドライバと前記入出力装置との間で通信するために使用される前記キュー・データ構造の１つまたは複数の未変換アドレスに関連する前記アドレス変換情報を要求する、請求項１２に記載のコンピュータ・プログラム。
【請求項１６】
前記入出力装置が、
前記デバイス・ドライバと前記入出力装置との間で通信するために使用される前記キュー・データ構造の前記１つまたは複数の変換済みアドレスを保管し、
前記デバイス・ドライバと前記入出力装置との間で通信するために使用される前記キュー・データ構造の１つまたは複数の項目にアクセスするためにＤＭＡトランザクションを実行するときに、１つまたは複数の前に保管した変換済みアドレスを使用する、
請求項１２に記載のコンピュータ・プログラム。
【請求項１７】
前記コンピュータ可読プログラムが、
前記入出力装置において、前記キュー・データ構造に関連する前記１つまたは複数のアドレス変換に関する前記変換情報をターゲットにする無効化要求を受信するステップと、
前記無効化要求を受信したことに応答して、前記入出力装置の前記キャッシュ内の前記１つまたは複数のアドレス変換に関する前記変換情報を無効化するステップと、
を前記コンピューティング・デバイスにさらに実行させる、請求項１２に記載のコンピュータ・プログラム。
【請求項１８】
前記キュー・データ構造が、前記デバイス・ドライバと記憶装置またはネットワーク装置のうちの一方との間で伝達すべき制御情報を指定するキュー項目を保管する、請求項１２に記載のコンピュータ・プログラム。
【請求項１９】
前記デバイス・ドライバが前記データ処理システムのシステム・イメージまたは信頼できないロジカル・パーティション内に設けられ、前記デバイス・ドライバ・サービスが信頼できる仮想化仲介内に設けられる、請求項１２に記載のコンピュータ・プログラム。
【請求項２０】
プロセッサと、
前記プロセッサに結合された入出力エンドポイントとを含み、
前記プロセッサが、
デバイス・ドライバにより、前記デバイス・ドライバと入出力装置との間の通信に関連するキュー・エレメントを収容するために使用されるキュー・データ構造を作成するステップと、
前記デバイス・ドライバがデバイス・ドライバ・サービスを呼び出したことに応答して、前記キュー・データ構造に関してデータ処理システムのルート複合体に関連するアドレス変換データ構造内の１つまたは複数のアドレス変換項目を初期設定するステップであって、前記１つまたは複数のアドレス変換項目が、１つまたは複数の未変換アドレスから前記キュー・データ構造に関連する１つまたは複数の変換済みメモリ・アドレスへの１つまたは複数の変換を指定するステップと、
前記アドレス変換データ構造から、前記キュー・データ構造に関連する前記１つまたは複数のアドレス変換に関する変換情報を前記入出力装置に提供するステップと、
前記キュー・データ構造に関連する通信を処理するために前記アドレス変換情報を前記入出力装置にキャッシュするステップと、
を前記プロセッサに実行させる命令を実行する、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、一般に、改良されたデータ処理システムおよび方法に関する。より具体的には、本出願は、入出力装置またはエンドポイントにキャッシュ可能なキュー・データ構造および事前変換済みアドレスを使用して入出力装置またはエンドポイントと通信するための装置および方法を対象とする。
【背景技術】
【０００２】
システムによっては、現在の周辺装置相互接続（ＰＣＩ：Peripheral Component Interconnect）プロトコルにより、直接メモリ・アクセス（ＤＭＡ：directmemory access）を実行するときに、アドレス変換および保護テーブル（ＡＴＰＴ：address translation and protectiontable）を使用してアドレス変換およびアクセス検査が実行される。ＡＴＰＴは、数十年間、使用されてきたが、より下位のシステムにとっては新しいものであり、直接メモリ・アクセス（ＤＭＡ）リマッピング・リソースまたは入出力メモリ管理ユニット（ＩＯＭＭＵ：Input/OutputMemory Management Unit）などのいくつかの他の名前で知られている。ＡＴＰＴは、ＤＭＡトランザクションで使用されるＰＣＩバス・アドレスを、実メモリ・リソースにアクセスするために使用される実メモリ・アドレスに変換するための項目を保管する。ＡＴＰＴ内の項目は、どのデバイスが対応するメモリの一部分にアクセス可能であるかと、このようなデバイスがこれらのメモリの一部分で実行可能な特定の動作とを識別する保護情報を保管する。
【０００３】
最近、ＰＣＩ−ＳＩＧ（ｗｗｗ．ｐｃｉｓｉｇ．ｃｏｍ／ｈｏｍｅ）は、ＡＴＰＴに常駐するアドレス変換をＰＣＩファミリ・アダプタにキャッシュできるようにするメカニズムを標準化している最中であった。これらのメカニズムはアドレス変換サービス（ＡＴＳ：Address Translation Services）として知られている。ＡＴＳにより、ＰＣＩファミリ・アダプタは、未変換ＰＣＩバス・アドレスに関する変換を要求することができ、ＡＴＳをサポートするシステム上でこのような要求が正常に完了すると、変換済み、すなわち、実メモリ・アドレスがＰＣＩファミリ・アダプタに返される。次に、ＡＴＳにより、ＰＣＩファミリ・アダプタは、ＤＭＡ動作で使用されるＰＣＩバス・アドレスに変換済みとしてマークを付けることができる。ＡＴＳをサポートするシステムは、その後、変換済みアドレスを使用してＡＴＰＴをバイパスすることになる。また、ＡＴＳは、ホスト側（たとえば、ハードウェアまたは仮想化仲介（virtualizationintermediary））が前に公示されたアドレス変換を無効化するためのメカニズムも提供する。
【０００４】
図１は、ＡＴＰＴおよびＰＣＩエクスプレス（ＰＣＩｅ：PCI express）通信プロトコルを使用してＤＭＡ動作を実行するための従来のメカニズムを例示する模範的な図である。描写された例は、ＰＣＩｅエンドポイント、たとえば、アドレス変換動作を実行するためにＡＴＳを使用するＰＣＩｅ入出力（Ｉ／Ｏ）アダプタによって呼び出される、上述のＰＣＩｅアドレス変換サービス（ＡＴＳ）も示している。後述する通り、ＡＴＳ機能は、ＰＣＩｅエンドポイントおよびホスト・システムのルート複合体（rootcomplex）内に構築される。ＰＣＩｅ  ＡＴＳに関する追加情報については、ｗｗｗ．ｐｃｉｓｉｇ．ｃｏｍの周辺装置相互接続分科会（ＰＣＩ−ＳｉＧ：peripheralcomponent interconnect special interest group）Ｗｅｂサイトから入手可能なＰＣＩｅ  ＡＴＳ規格を参照する。
【０００５】
図１に図示されている通り、ホストＣＰＵおよびメモリ１１０は、システム・バス１１５を介して、アドレス変換および保護テーブル（ＡＴＰＴ）１３０を含むＰＣＩｅルート複合体１２０に結合されている。次に、ＰＣＩｅルート複合体１２０は、ＰＣＩｅリンク１３５を介して、１つまたは複数のＰＣＩｅエンドポイント１４０（「エンドポイント」という用語は、ＰＣＩｅ対応入出力アダプタについて言及するためにＰＣＩｅ規格で使用されるものである）に結合される。ルート複合体１２０は、ＣＰＵ／メモリをＰＣＩｅエンドポイント１４０に接続する入出力階層のルートを意味する。ルート複合体１２０は、ホスト・ブリッジと、ゼロまたは１つ以上のルート複合体統合エンドポイントと、ゼロまたは１つ以上のルート複合体イベント・コレクタと、１つまたは複数のルート・ポートとを含む。各ルート・ポートは個別の入出力階層をサポートする。入出力階層は、ルート複合体１２０と、ゼロまたは１つ以上の相互接続スイッチまたはブリッジあるいはその両方（スイッチまたはＰＣＩファブリックを含むもの）と、エンドポイント１４０などの１つまたは複数のエンドポイントから構成することができる。たとえば、ＰＣＩｅスイッチは、ルート複合体１２０に接続されたエンドポイント１４０などのＰＣＩｅエンドポイントの数を増加するために使用することができる。ＰＣＩおよびＰＣＩｅに関する追加情報については、ｗｗｗ．ｐｃｉｓｉｇ．ｃｏｍのＰＣＩ−ＳｉＧ  Ｗｅｂサイトから入手可能なＰＣＩおよびＰＣＩｅ規格を参照する。
【０００６】
ＰＣＩｅエンドポイントは、内部ルーティング回路１４２と、構成管理ロジック１４４と、１つまたは複数の物理機能（ＰＦ：physical function）１４６と、ゼロまたは１つ以上の仮想機能（ＶＦ：virtual function）１４８〜１５２とを含み、それぞれのＶＦは１つのＰＦに関連づけられている。ＡＴＳにより、各仮想機能は、すでに変換されており、ＤＭＡ動作を実行するときにホストＡＴＰＴ１３０をバイパスするために仮想機能によって使用できるＰＣＩメモリ・アドレスをキャッシュするためにアドレス変換キャッシュ（ＡＴＣ：addresstranslation cache）１６０〜１６４を使用することができる。
【０００７】
実施時に、ＰＣＩｅエンドポイント１４０は、ＰＣＩｅ  ＡＴＳトランザクションを呼び出しを呼び出して、所与のＰＣＩバス・アドレスからシステム・バス・アドレスへの変換を要求し、その後のトランザクション、たとえば、ＤＭＡ動作がすでに変換されており、ＡＴＰＴをバイパスできることを示すことができる。ルート複合体１２０は、ＰＣＩｅエンドポイント１４０に提供された変換がもはやＰＣＩｅエンドポイント１４０の物理または仮想あるいはその両方の機能（複数も可）によって使用されないように、その変換を無効化するためにＰＣＩｅ  ＡＴＳトランザクションを呼び出すことができる。
【０００８】
たとえば、ＤＭＡ動作を実行する予定である場合、ＤＭＡ動作のアドレスは、ＤＭＡ動作を処理する特定の仮想機能１４８〜１５２のＡＴＣ１６０〜１６４でルックアップすることができる。アドレス変換がＡＴＣ１６０〜１６４内に存在しない場合、ＰＣＩｅエンドポイント１４０によってルート複合体１２０に対する変換要求を行うことができる。次に、ルート複合体１２０は、ＡＴＰＴ１３０を使用してアドレス変換を実行し、ＰＣＩｅエンドポイント１４０に変換済みアドレスを返すことができる。次に、ＰＣＩｅエンドポイント１４０は、ＤＭＡ動作を処理する物理または仮想あるいはその両方の機能に対応する適切なＡＴＣ１６０〜１６４内にその変換を保管することができる。ＤＭＡ動作は、変換済みアドレスを使用してシステム・バス１１５上に渡すことができる。
【０００９】
このアドレスに関する変換がすでにＡＴＣ１６０〜１６４内に存在する場合、変換済みアドレスがＤＭＡ動作で使用される。そのアドレスがすでに変換されていることと、このＤＭＡについてルート複合体１２０内のＡＴＰＴ１３０をバイパスできることを示すために、ＤＭＡヘッダ内にビットを設定することができる。その結果、ＰＣＩｅリンク１３５およびシステム・バス１１５を介してＰＣＩｅエンドポイント１４０とホストＣＰＵおよびメモリ１１０との間でＤＭＡ動作が直接実行される。ＰＣＩｅエンドポイントの仮想機能の特定のＢＤＦ番号が、ＤＭＡ動作によって要求されたようにアドレスにアクセスすることが許可されているＢＤＦに対応することを保証するために、アクセス検査は依然としてルート複合体１２０によって実行することができる。
【００１０】
その後の何らかの時点で、変換がＡＴＰＴ１３０内で変化した場合など、ＰＣＩｅエンドポイント１４０に提供された変換がもはやＰＣＩｅエンドポイント１４０によって使用されない場合、ルート複合体１２０はＰＣＩｅエンドポイント１４０にＡＴＳ無効化要求を発行しなければならない。ＰＣＩｅエンドポイント１４０は、無効アドレスに向けられたすべての保留要求を直ちにフラッシュするわけではない。むしろ、ＰＣＩｅエンドポイント１４０は、リタイヤすべき無効変換済みアドレスを参照するすべての未解決の読み取り要求を待ち、無効になるようにＡＴＣ１６０〜１６４内の項目にマークを付けるためのビットを設定することなどにより、ＡＴＣ１６０〜１６４内の変換を解放する。ＰＣＩｅエンドポイント１４０は、ＡＴＣ１６０〜１６４内の変換の無効化の完了を示すＡＴＳ無効化完了メッセージをルート複合体１２０に返す。ＰＣＩｅエンドポイント１４０は、無効化されたアドレスを使用する任意の前にポストされた書き込みのあとで、無効化完了表示がルート複合体１２０に到着することを保証する。
【００１１】
典型的には、ＡＴＰＴ１３０は、システム・メモリ内のツリー構造変換テーブルとして設けることができる。コンピューティング・システムの各ＰＣＩバス／デバイス／機能（ＢＤＦ：Bus/Device/Function）ごとに異なるツリー構造を設けることができる。これらのＡＴＰＴデータ構造を使用して、複数のデバイスは１つのデバイス・アドレス空間を共用することができ、複数のデバイスは専用アドレス空間を有することができる。したがって、すべてのデバイスがシステム・メモリのすべてのアドレス空間上ですべてのＤＭＡ動作を実行できるわけではない。
【００１２】
ＡＴＰＴ１３０のアクセスは、ＤＭＡトランザクションの一部として同期的に実行される。これは、ＤＭＡトランザクションの未変換ＰＣＩバス・メモリ・アドレスをホストのメモリにアクセスするために使用される変換済み実メモリ・アドレスに変換するため、ならびに、ＤＭＡトランザクションをサブミットするデバイスが変換済み実メモリ・ドレスにアクセスするための十分な許可を有し、変換済み実メモリ・アドレス上で所望のＤＭＡ動作を実行するための十分な許可を有することを保証するためにＡＴＰＴをチェックするための時間のかかる変換メカニズムを使用することを必要とする。
【００１３】
ＡＴＰＴ１３０のアクセスの一部として、特定のＢＤＦに対応する正しいＡＴＰＴツリー・データ構造を識別しなければならず、変換およびアクセス検査を実行するためにツリー・データ構造をウォーク（走査）しなければならない。ＡＴＰＴツリー・データ構造の位置特定は、ＢＤＦに関連するツリー・データ構造のアドレスを見つけるために、１回または２回のアクセスを必要とする可能性がある。見つかった場合、ツリーをウォークするためにツリー・データ構造への３回または４回のアクセスを要する可能性がある。したがって、この変換およびアクセス検査には、ＤＭＡ動作に関連する大規模待ち時間に対する責任がある。このような待ち時間は、低い通信待ち時間を必要とするエンドポイントに関する重大な問題を引き起こす可能性がある。
【００１４】
このような待ち時間を緩和する方法として、ＰＣＩｅエンドポイント１４０で実現されるＡＴＳは、これらの変換をもう一度実行する必要がないように、すでに実行されたアドレス変換を保管するためにＡＴＣ１６０〜１６４を使用する。したがって、ＡＴＰＴとＡＴＣとの組み合わせにより、ＰＣＩ  ＡＴＳは、ＤＭＡ動作に関連する待ち時間を短縮するようにアドレス変換およびアクセス検査を実行する。ＰＣＩ  ＳｉＧはＰＣＩｅ  ＡＴＳに関する規格を規定しているが、ＰＣＩ  ＳｉＧでは、ＡＴＳを使用してアドレス変換を実行し、ＡＴＰＴおよびＡＴＣなどのＡＴＳ構造を管理する役割をＰＣＩｅ  ＡＴＳを実現するシステム内でどのように配分すべきかを指定していない。
【特許文献１】米国特許第６６２９１６２号
【発明の開示】
【発明が解決しようとする課題】
【００１５】
例示的な諸実施形態は、入出力（Ｉ／Ｏ）装置またはエンドポイントにキャッシュ可能なキュー・データ構造および事前変換済みアドレスを使用して入出力装置またはエンドポイントと通信するための装置および方法を提供する。この装置および方法により、キュー・データ構造に関連するアドレス変換情報のキャッシュ管理に関する役割は、デバイス・ドライバとデバイス・ドライバ・サービスとの間で分散される。デバイス・ドライバは信頼できないミッション・ロジカル・パーティション（ＬＰＡＲ：logicalpartition）内に設けることができ、デバイス・ドライバ・サービスは仮想化仲介オペレーティング・システム、ハイパーバイザ、サービス・パーティションなどの信頼できる仮想化仲介内に設けることができる。
【００１６】
デバイス・ドライバは、ＬＰＡＲ内のアプリケーションとＰＣＩｅエンドポイントとの間ならびにその逆において要求を通信するためのキューを管理する役割を担う。デバイス・ドライバはさらに、デバイス・ドライバ・サービスを介してメモリ管理を呼び出す役割を担う。デバイス・ドライバ・サービスは、アドレス変換および保護テーブル（ＡＴＰＴ）ならびにＰＣＩｅエンドポイントのアドレス変換キャッシュ（ＡＴＣ）を含む、ＰＣＩｅエンドポイントによってアクセス可能なメモリを管理する役割を担う。
【００１７】
ＰＣＩｅエンドポイントと通信する役割をデバイス・ドライバとデバイス・ドライバ・サービスとの間で分割することにより、ＯＳ内で実行されるデバイス・ドライバは、他のＯＳのメモリに関連する変換をＰＣＩｅエンドポイントに提供することができない。その結果、システム仮想化に関連する信頼モデルが維持される。すなわち、アドレス変換キャッシュ管理の役割をデバイス・ドライバ・サービス内に置くことにより、あるＯＳは、そのエンドポイントが他のＯＳのメモリに対してＤＭＡ動作を実行することを要求できなくなる。
【課題を解決するための手段】
【００１８】
例示的な一実施形態では、ホスト・システムの信頼できないミッション・ロジカル・パーティション（ＬＰＡＲ）システム・イメージ内のデバイス・ドライバの初期設定中に、ＰＣＩｅエンドポイント用のデバイス・ドライバは、アドレス変換および保護テーブル（ＡＴＰＴ）項目を初期設定し、コマンド、応答、およびイベント・キューなど、システム・メモリ内に常駐し、直接メモリ・アクセス（ＤＭＡ）動作によりＰＣＩｅエンドポイントによってアクセス可能なアダプタ・リソース用のデバイス・ドライバにＰＣＩメモリ・アドレスを返すためにデバイス・ドライバ・サービス（以下、単純に「ドライバ・サービス」という）を呼び出す。デバイス・ドライバとＰＣＩｅエンドポイントは、コマンド、応答、およびイベント・キューにより通信する。本書では、これらのキューを「デバイス・ドライバのキュー」ということにする。
【００１９】
本質的に、デバイス・ドライバ・サービスは、デバイス・ドライバのキュー（複数も可）用のホスト・メモリを滞留（pin）させ、デバイス・ドライバのキュー（複数も可）に関するＤＭＡアドレスを割り当て、これらのＤＭＡアドレスに関するＡＴＰＴ項目をプログラミングし、ＡＴＰＴ項目がキャッシュ可能であること、すなわち、ＰＣＩｅエンドポイント上で、キュー・コンテキスト、たとえば、アドレス変換キャッシュ内にキャッシュ可能であることを示すビットを使用可能にする。次に、デバイス・ドライバ・サービスは、未変換ＰＣＩｅメモリ・アドレス（複数も可）、すなわち、ＤＭＡアドレス（複数も可）、たとえば、キュー内の特定の項目を識別するためにオフセットともに使用可能なデバイス・ドライバのキュー（複数も可）に関する開始アドレスをＡＴＰＴ項目用のデバイス・ドライバに返す。未変換ＰＣＩｅメモリ・アドレスは、システムのメモリ空間内にないアドレスであり、システム・メモリにアクセスするために使用するには、その前に変換しなければならないものである。
【００２０】
例示的な諸実施形態のメカニズムを使用すると、この未変換ＰＣＩｅメモリ・アドレスをＰＣＩｅエンドポイントに提供し、ルート複合体に変換要求を送信するためにＰＣＩｅエンドポイントが使用することができる。すなわち、ＰＣＩｅエンドポイントは、未変換ＰＣＩｅメモリ・アドレスに関連する１つまたは複数の変換済みＰＣＩｅメモリ・アドレスを返すようルート複合体に要求することができる。次に、ＰＣＩｅエンドポイントは、１つまたは複数の変換済みＰＣＩｅメモリ・アドレスをデバイス・ドライバのキュー（複数も可）に関連するコンテキスト、たとえば、ＰＣＩｅエンドポイント内の１つまたは複数の仮想機能に関連する１つまたは複数のアドレス変換キャッシュに保管することができる。
【００２１】
未変換ＰＣＩｅメモリ・アドレスの変換をアダプタのデバイス・ドライバ・キュー・コンテキストに保管することにより、ＰＣＩｅエンドポイントは、デバイス・ドライバ・キュー項目をターゲットにするＤＭＡの際にルート複合体のＡＴＰＴをバイパスすることができる。したがって、ルート複合体が変換済みとしてマークが付けられたＰＣＩｅ  ＤＭＡトランザクションを受信すると、ルート複合体は、そのエンドポイントについて変換キャッシュが使用可能になっていることを検証し、ホストの実メモリに直接アクセスするために変換済みＰＣＩｅメモリ・アドレスを使用する。
【００２２】
ＰＣＩｅエンドポイントがシステムから切り離された後、デバイス・ドライバに関連する機能（物理または仮想）がシステムから切り離された後など、その後の何らかの時点で、未変換ＰＣＩｅメモリ・アドレスに対応するＡＴＰＴ項目およびＡＴＣ項目を無効化する必要がある可能性がある。このような無効化を実行するために、デバイス・ドライバあるいはハイパーバイザ管理コンポーネントなどの何らかの上位エンティティは、ホスト・メモリを滞留解除し、ＤＭＡアドレス、すなわち、未変換ＰＣＩｅメモリ・アドレスを解放するためにデバイス・ドライバ・サービスを呼び出す。次に、デバイス・ドライバ・サービスは、未変換ＰＣＩｅメモリ・アドレスに対応するＡＴＰＴ項目を消去し、ルート複合体はＡＴＣ項目無効化要求をＰＣＩｅエンドポイントに発行する。次に、ＰＣＩｅエンドポイントは、未変換ＰＣＩｅメモリ・アドレスに対応する任意のＡＴＣ項目を無効化するための動作を実行し、未変換ＰＣＩｅメモリ・アドレスがもはや使用されなくなった後に、ＡＴＣ無効化完了応答をデバイス・サービス（device service）に返す。次に、デバイス・サービスはデバイス・ドライバに制御を返す。代替実現例では、デバイス・ドライバ・サービスは、ＡＴＣ項目無効化要求をＰＣＩｅエンドポイントに発行することができ、ＰＣＩｅエンドポイントがＡＴＣ項目無効化を完了した後に、デバイス・ドライバ・サービスはＡＴＰＴ項目を消去し、デバイス・ドライバに制御を返すことができる。
【００２３】
前述の通り、例示的な諸実施形態のメカニズムは、システム・イメージと、システム・イメージなどで実行されるアプリケーションと、１つまたは複数のキュー・データ構造を使用するＰＣＩｅエンドポイントとの間で通信する際に使用するためのＡＴＰＴ項目を確立するために使用することができる。例示的な諸実施形態のこのような実現例では、１つまたは複数のキュー・データ構造に関するＡＴＰＴ項目は、前に上述したように初期設定される。ＰＣＩｅエンドポイントの初期設定フェーズ中に、ＰＣＩｅエンドポイントは、デバイス・ドライバが初期設定されていることを検証する。これは、たとえば、ＰＣＩｅエンドポイントのＰＣＩ構成空間、重要プロダクト・データ（ＶＰＤ：Vital Product Data）フィールド、またはメモリ・マップ入出力（ＭＭＩＯ：memory mappedinput/output）フィールドから情報を読み取ることにより、実行することができる。
【００２４】
デバイス・ドライバは、１つまたは複数のキューの開始および終了アドレス、開始アドレスおよび長さなどをＰＣＩｅエンドポイントに提供することができる。たとえば、デバイス・ドライバは、キュー構成空間に対応するＰＣＩｅエンドポイントのＰＣＩ構成空間フィールド、ＶＰＤまたはＭＭＩＯフィールドにこれらのアドレスを書き込むことができる。これらのアドレスは未変換ＰＣＩｅアドレスである。ＰＣＩｅエンドポイントは、キュー・アドレスの変換に関するＰＣＩｅ  ＡＴＳ要求を呼び出すことができる。その結果、ルート複合体は、ＡＴＰＴを使用してアドレス変換を実行し、１つまたは複数のキューから項目を検索する際に使用するためにキュー・コンテキストに変換済みアドレスをキャッシュすることができるＰＣＩｅエンドポイントに結果を返し、項目を１つまたは複数のキュー内に入れることができる。
【００２５】
例示的な一実施形態では、デバイス・ドライバは、ＰＣＩｅエンドポイントと通信するためのキュー・データ構造を生成する。キュー・データ構造は、たとえば、コマンド・キューと応答キューを含むことができる。キュー・データ構造は、たとえば、ＰＣＩｅエンドポイントに結合された小型コンポーネント・システム・インターフェース（ＳＣＳＩ：small component system interface）入出力装置と通信するためのＳＣＳＩキューにすることができる。これらのキュー・データ構造は、リンク・リスト・キュー、サーキュラ・バッファ・キューなどを含む任意の方式で構成することができる。
【００２６】
これらのキュー・データ構造を生成する際にデバイス・ドライバによって実行される動作の一部として、デバイス・ドライバは、キュー・データ構造に関するＡＴＰＴ項目をプログラミングし、キューに関する未変換ＰＣＩｅアドレス、すなわち、ＤＭＡアドレスをデバイス・ドライバに返すためにデバイス・ドライバ・サービスを呼び出す。ＡＴＰＴ項目のプログラミングは、キュー・データ構造に使用されるホスト・メモリ空間を滞留させること、未変換ＰＣＩｅアドレスからシステム・メモリ・アドレスに変換するための変換情報によりルート複合体のＡＴＰＴ内のＡＴＰＴ項目をプログラミングすること、ならびにＡＴＰＴ項目に対応するアドレス変換がＰＣＩｅエンドポイントのＡＴＣ内にキャッシュ可能であることを示すキャッシュ使用可能ビットをＡＴＰＴ項目内に設定することを必要とする可能性がある。このような動作を実行した後、１つまたは複数のＡＴＰＴ項目に関する未変換ＰＣＩｅアドレス（複数も可）がデバイス・ドライバに返される。これらの未変換ＰＣＩｅアドレス（複数も可）は、たとえば、キュー・データ構造の開始および終了アドレスを識別することができる。
【００２７】
未変換ＰＣＩｅアドレス（複数も可）は、ＰＣＩｅエンドポイント内のキュー構成空間にアドレスを書き込むことなどにより、デバイス・ドライバによってＰＣＩｅエンドポイントに提供される。キュー構成空間は、たとえば、ＰＣＩ構成空間、１つまたは複数のＶＰＤフィールド、１つまたは複数のＭＭＩＯフィールドなどにすることができる。キュー・データ構造に関するこれらの未変換ＰＣＩｅアドレス（複数も可）を受信したことに応答して、ＰＣＩｅエンドポイントは、キュー・アドレスに関するＰＣＩｅ  ＡＴＳ要求をルート複合体に発行することができる。その結果、ルート複合体は、キュー・データ構造の未変換ＰＣＩｅアドレスに関するアドレス変換およびアクセス検査を実行し、変換済みアドレスをＰＣＩｅエンドポイントに返すことができる。次に、ＰＣＩｅエンドポイントは、ＰＣＩｅエンドポイントのＡＴＣによって提供されたキュー・コンテキスト内にこれらのアドレス変換を保管することができる。
【００２８】
上記の結果として、ＰＣＩｅエンドポイントはその時点でキュー・データ構造に関連するアドレスに関する変換にアクセスできるので、ＰＣＩｅエンドポイントは、ルート複合体のＡＴＰＴアドレス変換を行う必要なしに、キュー・データ構造にキュー項目をサブミットするかまたはキュー・データ構造からキュー項目を検索するためにＤＭＡ動作を実行することができる。
【００２９】
キュー・データ構造がもはやＰＣＩｅエンドポイントによって使用されない場合、これらのキュー・データ構造に関するアドレスに対応するＡＴＰＴおよびＡＴＣ項目は、前に上述した方式で無効化することができる。このような無効化は、たとえば、ＰＣＩｅエンドポイントがシステムから切り離される場合、デバイス・ドライバに関連する機能（物理または仮想）がホスト・システムから切り離された後などに実行することができる。この無効化プロセスは、デバイス・ドライバが、キュー・データ構造に対応するホスト・システム・メモリを滞留解除するためにデバイス・ドライバ・サービスを呼び出すこと、これらのキュー・データ構造に関するＤＭＡアドレスを解放すること、これらのＤＭＡアドレスに関するＡＴＰＴ項目を消去すること、およびＡＴＣ項目無効化要求をＰＣＩｅエンドポイントに発行することを必要とする可能性がある。ＡＴＣ項目無効化動作がＰＣＩｅエンドポイントによって完了されると、デバイス・ドライバ・サービスはデバイス・ドライバに制御を返し、この時点でＰＣＩｅエンドポイントをシステムから切り離すことができる。
【００３０】
上述の通り、例示的な諸実施形態のメカニズムは、デバイス・ドライバ内のキュー・データ構造と、それに対応するデータ処理システムのルート複合体内のＡＴＰＴ項目を確立するために使用することができる。このようなキュー・データ構造が上述のメカニズムにより初期設定されると、これらのキュー・データ構造およびＡＴＰＴ項目を使用して、ホスト・システムのロジカル・パーティションのアプリケーション・インスタンス、システム・イメージなどとＰＣＩｅエンドポイントとの間の通信を実行することができる。
【００３１】
これらのキュー・データ構造および対応するＡＴＰＴ項目は、種々のタイプのＰＣＩｅエンドポイントとともに使用することができる。たとえば、ＰＣＩｅエンドポイントは、１つまたは複数のデータ・ネットワークにより他のデバイスと通信するためのイーサネット（登録商標）・アダプタ、ファイバ・チャネル・アダプタ、ＩｎｆｉｎｉＢａｎｄ（Ｒ）アダプタなどのネットワーキング・アダプタにすることができる。このようなネットワーキング・アダプタにより、送受信中のデータは、ホスト・システムのデバイス・ドライバに関連するバッファ内に置かれ、データが受信中であるか送信中であるかに応じて、ホスト・システムのシステム・イメージまたはＰＣＩｅアダプタのいずれかによって取り出される。例示的な諸実施形態のメカニズムは、データの送信／受信時にルート複合体によるアドレス変換を受ける必要なしに、これらの変換済みアドレスおよびＤＭＡ動作を使用して送信バッファまたは受信バッファあるいはその両方にデータを直接送信できるように、キュー・データ構造の確立およびキューに対応する変換済みアドレスのキャッシュを可能にする。このため、このメカニズムは、ネットワーク・アダプタによるデータ送信および受信に関連する待ち時間を短縮する。
【００３２】
ネットワーキング・アダプタとの使用に加えて、例示的な諸実施形態のメカニズムはさらに、ローカルに使用可能なデバイスと通信するために他のタイプのＰＣＩｅエンドポイントとともに使用することができる。たとえば、ＰＣＩｅエンドポイントは、ＰＣＩｅエンドポイントに直接接続された記憶装置と通信するための小型コンポーネント・システム・インターフェース（ＳＣＳＩ）アダプタにすることができる。例示的な諸実施形態のメカニズムは、ＳＣＳＩ読み取り／書き込みに関するアドレス情報をＳＣＳＩアダプタ内にキャッシュするためのメカニズムを提供することにより、ＳＣＳＩアダプタのＤＭＡ読み取り待ち時間を短縮するために使用することができる。
【００３３】
例示的な一実施形態では、デバイス・ドライバと入出力（Ｉ／Ｏ）装置との間で通信するためのアドレス変換を確立するための方法が提供される。この方法は、デバイス・ドライバにより、デバイス・ドライバと入出力装置との間の通信に関連するキュー・エレメントを収容するために使用されるキュー・データ構造を作成するステップを含むことができる。この方法は、デバイス・ドライバがデバイス・ドライバ・サービスを呼び出したことに応答して、キュー・データ構造に関してデータ処理システムのルート複合体に関連するアドレス変換データ構造内の１つまたは複数のアドレス変換項目を初期設定するステップをさらに含むことができる。１つまたは複数のアドレス変換項目は、１つまたは複数の未変換アドレスからキュー・データ構造に関連する１つまたは複数の変換済みメモリ・アドレスへの１つまたは複数の変換を指定することができる。
【００３４】
また、この方法は、アドレス変換データ構造から、キュー・データ構造に関連する１つまたは複数のアドレス変換に関する変換情報を入出力装置に提供するステップも含むことができる。その上、この方法は、キュー・データ構造に関連する通信を処理するためにアドレス変換情報を入出力装置にキャッシュするステップを含むこともできる。入出力装置は、デバイス・ドライバと入出力装置との間で通信するために使用されるキュー・データ構造の１つまたは複数の未変換アドレスに関連するアドレス変換情報を要求することができる。
【００３５】
キュー・データ構造に関連するアドレス変換情報を入出力装置に提供するステップは、デバイス・ドライバ・サービスにより、１つまたは複数の未変換アドレスをデバイス・ドライバに渡すステップと、デバイス・ドライバにより、キュー・データ構造の１つまたは複数の未変換アドレスを入出力装置に提供するステップとを含むことができる。アドレス変換情報を提供するステップは、１つまたは複数の未変換アドレスを受信したことに応答して、入出力装置により、アドレス変換要求をルート複合体に送信するステップと、ルート複合体から、キュー・データ構造に関連するルート複合体内の１つまたは複数のアドレス変換項目に基づいて１つまたは複数の未変換アドレスに関連する１つまたは複数の変換済みアドレスを受信するステップとをさらに含むことができる。キュー・データ構造の１つまたは複数の未変換アドレスを入出力装置に提供するステップは、デバイス・ドライバまたはデバイス・ドライバ・サービスのうちの一方により、１つまたは複数の未変換アドレスを入出力装置構成空間またはＩ／Ｏメモリ・マップ入出力（ＭＭＩＯ）メモリ空間のうちの一方に書き込むステップを含むことができる。
【００３６】
入出力装置は、デバイス・ドライバと入出力装置との間で通信するために使用されるキュー・データ構造の１つまたは複数の変換済みアドレスを保管することができる。その上、入出力装置は、デバイス・ドライバと入出力装置との間で通信するために使用されるキュー・データ構造の１つまたは複数の項目にアクセスするためにＤＭＡトランザクションを実行するときに、１つまたは複数の前に保管した変換済みアドレスを使用することができる。
【００３７】
この方法は、入出力装置において、キュー・データ構造に関連する１つまたは複数のアドレス変換に関する変換情報をターゲットにする無効化要求を受信するステップを含むことができる。この方法は、無効化要求を受信したことに応答して、入出力装置のキャッシュ内の１つまたは複数のアドレス変換に関する変換情報を無効化するステップをさらに含むことができる。
【００３８】
キュー・データ構造は、デバイス・ドライバと記憶装置またはネットワーク装置のうちの一方との間で伝達すべき制御情報を指定するキュー項目を保管することができる。記憶装置またはネットワーク装置は、周辺装置相互接続拡張（ＰＣＩｅ：Peripheral Component Interconnect Extended）アダプタにすることができる。
【００３９】
キュー・データ構造は、リンク・リスト・キュー・データ構造またはサーキュラ・バッファ・キュー・データ構造のうちの一方として構成することができる。１つまたは複数の未変換アドレスは、キュー・データ構造に関する少なくとも１つの未変換開始アドレスを含むことができ、任意選択で、キュー・データ構造に関する未変換終了アドレスまたはキュー・データ構造の長さのうちの一方を含むことができる。デバイス・ドライバはデータ処理システムのシステム・イメージまたは信頼できないロジカル・パーティション内に設けることができ、デバイス・ドライバ・サービスは信頼できる仮想化仲介内に設けられる。
【００４０】
他の例示的な諸実施形態では、コンピュータ可読プログラムを有するコンピュータで使用可能な媒体（computer useable medium）を含むコンピュータ・プログラム（computer program product）が提供される。このコンピュータ可読プログラムは、コンピューティング・デバイス上で実行されると、方法の例示的な実施形態に関して上記で概要を示した動作のうちの様々なものおよびそれらの組み合わせをコンピューティング・デバイスに実行させるものである。
【００４１】
さらに他の例示的な実施形態では、装置が提供される。この装置は、プロセッサと、プロセッサに結合された入出力（Ｉ／Ｏ）エンドポイントとを含むことができる。このプロセッサは、デバイス・ドライバにより、デバイス・ドライバと入出力装置との間の通信に関連するキュー・エレメントを収容するために使用されるキュー・データ構造を作成するステップをプロセッサに実行させる命令を実行することができる。この命令はさらに、デバイス・ドライバがデバイス・ドライバ・サービスを呼び出したことに応答して、キュー・データ構造に関してデータ処理システムのルート複合体に関連するアドレス変換データ構造内の１つまたは複数のアドレス変換項目を初期設定するステップをプロセッサに実行させることができる。１つまたは複数のアドレス変換項目は、１つまたは複数の未変換アドレスからキュー・データ構造に関連する１つまたは複数の変換済みメモリ・アドレスへの１つまたは複数の変換を指定することができる。
【００４２】
この命令はさらに、アドレス変換データ構造から、キュー・データ構造に関連する１つまたは複数のアドレス変換に関する変換情報を入出力装置に提供するステップと、キュー・データ構造に関連する通信を処理するためにアドレス変換情報を入出力装置にキャッシュするステップとをプロセッサに実行させることができる。
【００４３】
本発明の上記その他の特徴および利点は、本発明の模範的な諸実施形態に関する以下の詳細な説明に記載されるか、またはその詳細な説明を考慮すると当業者にとって自明なものになるであろう。
【００４４】
本発明ならびにその好ましい使用態様、その他の目的および利点は、添付図面に併せて読んだときに、例示的な諸実施形態に関する以下の詳細な説明を参照することにより最もよく理解されるであろう。
【発明を実施するための最良の形態】
【００４５】
例示的な諸実施形態は、エンドポイントとホスト・システムとの間のより効率的な直接メモリ・アクセス（ＤＭＡ）動作を容易にするためにデバイス・ドライバおよびデバイス・ドライバ・サービスに対してエンドポイント・アドレス変換管理の役割を分散するためのメカニズムを提供する。このため、例示的な諸実施形態は、以下に記載する通り、デバイス・ドライバおよびデバイス・ドライバ・サービスを使用してＤＭＡ動作を実行できる任意のコンピューティング・デバイスで実現することができる。このようなコンピューティング・デバイスは、多くの形を取ることができ、様々な構成を有することができる。以下の図２〜図３では、例示的な諸実施形態の模範的な諸態様を実現可能なデータ処理環境およびデータ処理装置の例を示す。図２〜図３は例示的なものに過ぎず、例示的な諸実施形態のメカニズムを使用可能なデータ処理環境および装置のタイプに関して制限するものではないことを認識されたい。
【００４６】
次に、添付図面、特に図２〜図３に関して説明すると、本発明の諸実施形態を実現可能なデータ処理環境の模範的な図が示されている。図２〜図３は模範的なものに過ぎず、本発明の諸態様または諸実施形態を実現可能な環境に関していかなる制限も主張または暗示するものではないことを認識されたい。本発明の精神および範囲を逸脱せずに、記述されている環境に対して多くの変更を行うことができる。
【００４７】
次に、添付図面に関して説明すると、図２は、例示的な諸実施形態の諸態様を実現可能な模範的な分散データ処理システムの図表現を描写している。分散データ処理システム２００は、例示的な諸実施形態の諸実施形態を実現可能なコンピュータのネットワークを含むことができる。分散データ処理システム２００は少なくとも１つのネットワーク２０２を含み、このネットワークは分散データ処理システム２００内にまとめて接続された様々な装置およびコンピュータ間の通信リンクを提供するために使用される媒体である。ネットワーク２０２は、ワイヤ、ワイヤレス通信リンク、または光ファイバ・ケーブルなどの接続を含むことができる。
【００４８】
描写された例では、サーバ２０４およびサーバ２０６は、記憶装置２０８とともにネットワーク２０２に接続されている。加えて、クライアント２１０、２１２、および２１４もネットワーク２０２に接続されている。これらのクライアント２１０、２１２、および２１４は、たとえば、パーソナル・コンピュータ、ネットワーク・コンピュータなどにすることができる。描写された例では、サーバ２０４は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータをクライアント２１０、２１２、および２１４に提供する。クライアント２１０、２１２、および２１４は、描写された例ではサーバ２０４に対するクライアントである。分散データ処理システム２００は、図示されていない追加のサーバ、クライアント、およびその他の装置を含むことができる。
【００４９】
描写された例では、分散データ処理システム２００は、相互に通信するために伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ：Transmission Control Protocol/Internet Protocol）スイートのプロトコルを使用するネットワークおよびゲートウェイの世界的集合を表すネットワーク２０２を有するインターネットである。インターネットの中心には、データおよびメッセージをルーティングする、数千の商用、行政用、教育用、およびその他のコンピュータ・システムから構成される、メジャー・ノードまたはホスト・コンピュータ間の高速データ通信回線のバックボーンがある。当然のことながら、分散データ処理システム２００は、たとえば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）などのいくつかの異なるタイプのネットワークを含むように実現することもできる。上記の通り、図２は、本発明の種々の実施形態に関するアーキテクチャ上の制限としてではなく、一例として意図されており、したがって、図２に図示されている特定の諸要素は、本発明の例示的な諸実施形態を実現可能な環境に関して制限するものと見なすべきではない。
【００５０】
次に、図３に関して説明すると、例示的な諸実施形態の諸態様を実現可能な模範的なデータ処理システムのブロック図が図示されている。データ処理システム３００は、図２のホスト２１０などのコンピュータの一例であり、本発明の例示的な諸実施形態に関するプロセスを実現するコンピュータで使用可能なコードまたは命令をそこに配置することができる。
【００５１】
描写された例では、データ処理システム３００は、ノース・ブリッジおよびメモリ・コントローラ・ハブ（ＮＢ／ＭＣＨ：north bridge and memory controller hub）３０２とサウス・ブリッジおよび入出力（Ｉ／Ｏ）コントローラ・ハブ（ＳＢ／ＩＣＨ：southbridge and input/output controller hub）３０４とを含むハブ・アーキテクチャを使用している。ＮＢ／ＭＣＨ３０２には、処理装置３０６、メイン・メモリ３０８、およびグラフィックス・プロセッサ３１０が接続されている。グラフィックス・プロセッサ３１０は、アクセラレィティッド・グラフィックス・ポート（ＡＧＰ：acceleratedgraphics port）を介してＮＢ／ＭＣＨ３０２に接続することもできる。
【００５２】
描写された例では、ＳＢ／ＩＣＨ３０４にはローカル・エリア・ネットワーク（ＬＡＮ）アダプタ３１２が接続している。オーディオ・アダプタ３１６、キーボードおよびマウス・アダプタ３２０、モデム３２２、読み取り専用メモリ（ＲＯＭ）３２４、ハード・ディスク（ＨＤＤ）３２６、ＣＤ−ＲＯＭドライブ３３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよびその他の通信ポート３３２、ＰＣＩ／ＰＣＩｅデバイス３３４は、バス３３８およびバス３４０を介してＳＢ／ＩＣＨ３０４に接続している。ＰＣＩ／ＰＣＩｅデバイスとしては、たとえば、イーサネット（登録商標）・アダプタ、アドイン・カード、およびノートブック・コンピュータ用のＰＣカードを含むことができる。ＰＣＩではカード・バス・コントローラを使用し、ＰＣＩｅでは使用しない。ＲＯＭ３２４は、たとえば、フラッシュ・バイナリ入出力システム（ＢＩＯＳ）にすることができる。
【００５３】
ＨＤＤ３２６およびＣＤ−ＲＯＭドライブ３３０は、バス３４０を介してＳＢ／ＩＣＨ３０４に接続している。ＨＤＤ３２６およびＣＤ−ＲＯＭドライブ３３０は、たとえば、統合ドライブ・エレクトロニクス（ＩＤＥ：integrated drive electronics）またはシリアル先端技術接続（ＳＡＴＡ：serial advancedtechnology attachment）インターフェースを使用することができる。スーパー入出力（ＳＩＯ：super I/O）デバイス３３６はＳＢ／ＩＣＨ３０４に接続することができる。
【００５４】
オペレーティング・システムは処理装置３０６上で実行される。オペレーティング・システムは、図３のデータ処理システム３００内の様々なコンポーネントの制御を調整し提供する。クライアントとしてのオペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ（Ｒ）のＷｉｎｄｏｗｓ（登録商標）ＸＰなどの市販のオペレーティング・システムにすることができる（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓ（登録商標）は、米国、その他の国、あるいはその両方におけるマイクロソフト社の商標である）。Ｊａｖａ（登録商標）プログラミング・システムなどのオブジェクト指向プログラミング・システムは、オペレーティング・システムに併せて実行することができ、データ処理システム３００上で実行中のＪａｖａ（登録商標）プログラムまたはアプリケーションからオペレーティング・システムへの呼び出しを提供する（Ｊａｖａは、米国、その他の国、あるいはその両方におけるサン・マイクロシステムズ社の商標である）。
【００５５】
サーバとしてのデータ処理システム３００は、たとえば、拡張対話式エグゼクティブ（ＡＩＸ（Ｒ）：Advanced Interactive Executive）オペレーティング・システムまたはＬＩＮＵＸ（Ｒ）オペレーティング・システムを実行するＩＢＭ（Ｒ）のｅＳｅｒｖｅｒ（Ｒ）ｐＳｅｒｉｅｓ（Ｒ）コンピュータ・システムにすることができる（ｅＳｅｒｖｅｒ、ｐＳｅｒｉｅｓ、およびＡＩＸは、米国、その他の国、あるいはその両方におけるインターナショナル・ビジネス・マシーンズ社の商標であり、ＬＩＮＵＸは、米国、その他の国、あるいはその両方におけるＬｉｎｕｓ  Ｔｏｒｖａｌｄｓの商標である）。データ処理システム３００は、処理装置３０６内に複数のプロセッサを含む対称型マルチプロセッサ（ＳＭＰ：symmetricmultiprocessor）システムにすることができる。代わって、シングル・プロセッサ・システムを使用することもできる。
【００５６】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムに関する命令は、ＨＤＤ３２６などの記憶装置上に配置され、処理装置３０６によって実行するためにメイン・メモリ３０８にロードすることができる。本発明の例示的な諸実施形態に関するプロセスは、たとえば、メイン・メモリ３０８、ＲＯＭ３２４などのメモリ内に、または、たとえば、１つまたは複数の周辺装置３２６および３３０内に配置することができる、コンピュータで使用可能なプログラム・コードを使用して処理装置３０６によって実行することができる。
【００５７】
図３に図示されているバス３３８またはバス３４０などのバス・システムは、１つまたは複数のバスで構成することができる。当然のことながら、バス・システムは、そのファブリックまたはアーキテクチャに接続された種々のコンポーネントまたはデバイス間のデータ転送を可能にする任意のタイプの通信ファブリックまたはアーキテクチャを使用して実現することができる。図３のモデム３２２またはネットワーク・アダプタ３１２などの通信装置は、データを送受信するために使用される１つまたは複数の装置を含むことができる。メモリは、たとえば、メイン・メモリ３０８、ＲＯＭ３２４、または図３のＮＢ／ＭＣＨ３０２内に見られるようなキャッシュにすることができる。
【００５８】
当業者であれば、図２〜図３のハードウェアは実現例に応じて様々になる可能性があることが分かるであろう。図２〜図３に描写されているハードウェアに加えてまたはその代わりに、フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどのその他の内部ハードウェアまたは周辺装置を使用することができる。また、例示的な諸実施形態のプロセスは、本発明の精神および範囲を逸脱せずに、前に述べたＳＭＰシステム以外のマルチプロセッサ・データ処理システムに適用することもできる。
【００５９】
その上、データ処理システム３００は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話またはその他の通信装置、携帯情報端末（ＰＤＡ）などを含む、いくつかの異なるデータ処理システムのうちのいずれかの形を取ることができる。いくつかの例示的な例では、データ処理システム３００は、たとえば、オペレーティング・システム・ファイルまたはユーザ生成データあるいはその両方を保管するための不揮発性メモリを提供するためにフラッシュ・メモリとともに構成されたポータブル・コンピューティング・デバイスにすることができる。本質的に、データ処理システム３００は、アーキテクチャ上の制限なしに、任意の既知のデータ処理システムまたはその後開発されたデータ処理システムにすることができる。
【００６０】
前述の通り、例示的な諸実施形態は、デバイス・ドライバとデバイス・ドライバ・サービスとの間でエンドポイント・アドレス変換キャッシュ管理に関する役割を分散するためのシステムおよびメカニズムを提供する。デバイス・ドライバは、たとえば、信頼できないミッション・ロジカル・パーティション（ＬＰＡＲ）内に設けることができ、デバイス・ドライバ・サービスは、たとえば、信頼できる入出力（Ｉ／Ｏ）仮想化仲介（ＶＩ：virtualization intermediary）内に設けることができる。例示的な諸実施形態の説明ではＰＣＩｅエンドポイントおよびＰＣＩｅ通信プロトコルを使用するが、例示的な諸実施形態はこのようなものに限定されず、本発明の精神および範囲を逸脱せずに、任意の通信プロトコルを使用できることを認識されたい。
【００６１】
例示的な諸実施形態に関しては、デバイス・ドライバは、ユーザ・アプリケーション／ライブラリとＰＣＩｅエンドポイントとの間で通信するためのキュー構造を管理し使用する役割を担う。デバイス・ドライバはさらに、デバイス・ドライバ・サービスによって提供されたメモリ管理サービスを呼び出す役割を担う。デバイス・ドライバ・サービスは、コンピューティング・システムのＰＣＩｅルート複合体のアドレス変換および保護テーブル（ＡＴＰＴ）ならびにＰＣＩｅエンドポイントのアドレス変換キャッシュ（ＡＴＣ）を初期設定し管理する。このような初期設定および管理が実行される方法については以下に説明する。
【００６２】
例示的な一実施形態では、ホスト・システムのロジカル・パーティションのシステム・イメージ内のＰＣＩｅエンドポイント用のデバイス・ドライバの初期設定中に、ＰＣＩｅエンドポイント用のデバイス・ドライバは、アドレス変換および保護テーブル（ＡＴＰＴ）項目を初期設定し、デバイス・ドライバにＰＣＩメモリ・アドレスを返すためにデバイス・ドライバ・サービスを呼び出す。例示的な一実施形態では、これらのＡＴＰＴ項目およびＰＣＩメモリ・アドレスは、ＰＣＩｅアダプタと通信するために、「デバイス・ドライバのキュー」というデバイス・ドライバの１つまたは複数のキューに関連づけられる。
【００６３】
本質的に、デバイス・ドライバ・サービスは、１つまたは複数のキュー用のホスト・システム・メモリを滞留させ、１つまたは複数のキューにＤＭＡアドレスを割り当て、ＡＴＰＴ項目をプログラミングし、ＡＴＰＴ項目がキャッシュ可能であること、すなわち、ＰＣＩｅエンドポイント上でアドレス変換キャッシュ内にキャッシュ可能であることを示すビットを使用可能にする。次に、デバイス・ドライバ・サービスは、１つまたは複数の未変換ＰＣＩｅメモリ・アドレスを、たとえば、１つまたは複数のキューに関連するアドレス（たとえば、キューの開始アドレス、ならびに、任意選択で終了キュー・アドレス）として使用可能なＡＴＰＴ項目用のデバイス・ドライバに返す。未変換ＰＣＩｅメモリ・アドレスは、システムの実メモリ・アドレス空間内にないアドレスであり、システムの実メモリにアクセスするために使用するには、その前に変換しなければならないものである。
【００６４】
例示的な諸実施形態のメカニズムを使用すると、この未変換ＰＣＩｅメモリ・アドレス（複数も可）をＰＣＩｅエンドポイントに提供し、ルート複合体による変換要求動作を実行するためにＰＣＩｅエンドポイントがそれを使用することができる。すなわち、ＰＣＩｅエンドポイントは、ルート複合体が未変換ＰＣＩｅメモリ・アドレスに対応する１つまたは複数の変換済みＰＣＩｅメモリ・アドレスを返すことを要求することができる。次に、ＰＣＩｅエンドポイントは、１つまたは複数の変換済みＰＣＩｅメモリ・アドレスをデバイス・ドライバのキューに関連するコンテキスト、たとえば、ＰＣＩｅエンドポイント内の仮想機能のアドレス変換キャッシュ（ＡＴＣ）に保管することができる。
【００６５】
未変換ＰＣＩｅメモリ・アドレスの変換をアダプタのデバイス・ドライバ・キュー・コンテキストに保管することにより、ＰＣＩｅエンドポイントは、デバイス・ドライバ・キュー項目をターゲットにするＤＭＡの際にルート複合体のＡＴＰＴをバイパスすることができる。したがって、ルート複合体が変換済みとしてマークが付けられたＰＣＩｅ  ＤＭＡトランザクションを受信すると、ルート複合体は、そのエンドポイントについて変換キャッシュが使用可能になっていることを検証し、ホストの実メモリに直接アクセスするために変換済みＰＣＩｅメモリ・アドレスを使用する。
【００６６】
ＰＣＩｅエンドポイントがシステムから切り離された後、デバイス・ドライバに関連する機能（物理または仮想）がシステムから切り離された後など、その後の何らかの時点で、未変換ＰＣＩｅメモリ・アドレスに対応するＡＴＰＴ項目およびＡＴＣ項目を無効化する必要がある可能性がある。このような無効化を実行するために、デバイス・ドライバあるいはハイパーバイザ管理コンポーネントなどの何らかの上位エンティティは、ホスト・メモリを滞留解除し、ＤＭＡアドレス、すなわち、未変換ＰＣＩｅメモリ・アドレスを解放するためにデバイス・ドライバ・サービスを呼び出す。次に、デバイス・サービスは、未変換ＰＣＩｅメモリ・アドレスに対応するＡＴＰＴ項目を消去し、ルート複合体はＡＴＣ項目無効化要求をＰＣＩｅエンドポイントに発行する。
【００６７】
次に、ＰＣＩｅエンドポイントは、未変換ＰＣＩｅメモリ・アドレスに対応する任意のＡＴＣ項目を無効化するための動作を実行し、未変換ＰＣＩｅメモリ・アドレスがもはや使用されなくなった後に、ＡＴＣ無効化完了応答をデバイス・サービスに返す。次に、デバイス・ドライバ・サービスはデバイス・ドライバに制御を返す。代替実現例は、デバイス・ドライバ・サービスによってＡＴＣ項目無効化要求をＰＣＩｅエンドポイントに発行することから構成され、ＰＣＩｅエンドポイントがＡＴＣ項目無効化を完了した後に、デバイス・ドライバ・サービスはＡＴＰＴ項目を消去し、デバイス・ドライバに制御を返すことができる。
【００６８】
図４は、デバイス・ドライバおよびデバイス・ドライバ・サービスに関する例示的な一実施形態の動作を例示する模範的な図である。図４に図示されている通り、ホスト・システムは、システム・イメージ４２０、たとえば、オペレーティング・システムなどを実行可能な１つまたは複数のロジカル・パーティション４１０を有することができる。システム・イメージ４２０は、アプリケーション・ライブラリなどへのアクセスによりユーザ・アプリケーション４３０を実行するために使用することができる。システム・イメージ４２０は、それによりファイル、デバイス・ドライバ、ライブラリ、およびその他のソフトウェア・リソースにアクセス可能な関連ファイル・システム４４０を有する。デバイス・ドライバ４５０は、システム・イメージ４２０とＰＣＩｅアダプタ４９０との間で通信するためにシステム・イメージ４２０内に設けることができる。
【００６９】
デバイス・ドライバ４５０はさらに、それによりユーザ・アプリケーション４３０、システム・イメージ４２０などがＰＣＩｅエンドポイント４９０と通信することができる関連応答キュー４２２を有する。応答キュー４２２は、デバイス・ドライバ４５０、ユーザ・アプリケーション４３０、システム・イメージ４２０、ホスト・システム・メモリ、およびその他のホスト・システム・リソースによって実行されることをＰＣＩｅエンドポイント４９０が希望する動作に関する応答キュー項目（ＲＱＥ：response queue entry）４２４を有する。ドアベル（doorbell）記憶装置４２６は、応答キュー４２２が処理する必要のある応答キュー項目４２４を有するときにシステム・イメージ４２０に通知するために、応答キュー４２２およびシステム・イメージ４２０に関連して設けられる。このようなキューによって実行可能な作業の例としては、ＰＣＩｅエンドポイント４９０から要求された作業システム・イメージ４２０に関連する完了処理、システム・イメージ４２０に対してＰＣＩｅエンドポイント４９０によって表面化されたエラーまたはイベントに関連する非同期イベント処理などを含む。
【００７０】
同様に、ＰＣＩｅエンドポイント４９０は、ＰＣＩｅエンドポイント４９０によって実行されることをシステム・イメージ４２０、ユーザ・アプリケーション４３０などが希望する動作をＰＣＩｅエンドポイント４９０に通知するためにコマンド・キュー項目（ＣＱＥ：command queue entry）４９９を設けることができる、関連ＰＣＩｅエンドポイント・コマンド・キュー４９８を有することができる。ＰＣＩｅエンドポイント４９０のコマンド・キュー４９８は、ＰＣＩｅエンドポイント４９０そのものに、または、より一般的には、描写されている通り、ＰＣＩｅエンドポイント４９０によってアクセス可能なシステム・イメージ４２０のメモリ・ロケーションに実現することができる。ドアベル記憶装置４９６は、ＣＱＥ４９９が処理のためにＰＣＩｅエンドポイント・コマンド・キュー４９８内に存在する時期をＰＣＩｅエンドポイント４９０に通知するためにＰＣＩｅエンドポイント４９０に設けることができる。
【００７１】
ＰＣＩｅエンドポイント４９０はさらに、１つまたは複数の物理機能（図示せず）および仮想機能４９２を有する。仮想機能４９２はさらに、たとえば、ホスト・システム・メモリにより直接メモリ・アクセス（ＤＭＡ）動作を実行する際に使用するための変換済みアドレスをキャッシュするためにアドレス変換キャッシュ（ＡＴＣ）４９４を維持することができる。ＡＴＣ４９４は、ＰＣＩｅエンドポイント４９０のデバイス・ドライバのキュー・コンテキストに保管することができる。
【００７２】
ＰＣＩｅエンドポイント４９０は、通信リンク、１つまたは複数のＰＣＩスイッチなどから構成することができるＰＣＩファブリック４８５を介して、ホスト・システムに結合されている。ホスト・システムは、ＰＣＩファブリック４８５を介してＰＣＩｅエンドポイント４９０と通信するためのＰＣＩｅルート複合体４８０を有する。ルート複合体４８０は、未変換ＰＣＩｅメモリ・アドレスを、システムの実メモリ・アドレス空間で使用される変換済みアドレスに変換するために使用される、アドレス変換および保護テーブル（ＡＴＰＴ）４８２を維持する。
【００７３】
ＡＴＰＴ４８２およびＡＴＣ４９４の管理は、入出力（Ｉ／Ｏ）仮想化仲介（ＶＩ）４６０内に設けられたデバイス・ドライバ・サービス４７０によって実行される。ＩＯＶＩ４６０は、たとえば、信頼できるサービス・パーティションなど、ハイパーバイザまたはその他の仮想化管理コンポーネントにすることができる。デバイス・ドライバ・サービス４７０は、ＡＴＰＴ４８２およびＡＴＣ４９４内の項目を初期設定し無効化するために必要であるときに、デバイス・ドライバ４５０によって呼び出すことができる。
【００７４】
ホスト・システムとＰＣＩｅエンドポイントとの間の通信を管理する役割は、デバイス・ドライバ４５０とデバイス・ドライバ・サービス４７０との間で分割される。具体的には、デバイス・ドライバ４５０は、その応答キュー４２２およびＰＣＩｅエンドポイントのコマンド・キュー４９８を管理する役割を担う。デバイス・ドライバ４５０はさらに、ＡＴＰＴ４８２内のアドレス変換項目を初期設定するために、ならびに、変換がもはやＰＣＩｅエンドポイント４９０によって使用されないときにＡＴＰＴ４８２およびＡＴＣ４９４内の項目を無効化するために必要な機能を実行するために必要であるときに、デバイス・ドライバ・サービス４７０を呼び出す役割を担う。
【００７５】
デバイス・ドライバ４５０の初期設定中に、デバイス・ドライバ４５０は、デバイス・ドライバ応答キュー４２２、ＰＣＩｅエンドポイント４９０と通信するためにシステム・イメージ４２０内に存在するＰＣＩｅエンドポイントのコマンド・キュー４９８などの１つまたは複数のキューに関するＤＭＡアドレス空間を初期設定することができる。次に、ＰＣＩｅエンドポイント４９０用のデバイス・ドライバ４５０は、システム・メモリの一部分にアクセスするためにＰＣＩｅアドレスをＤＭＡアドレス空間アドレスに変換するためのＡＴＰＴ４８２の項目を初期設定するためにデバイス・ドライバ・サービス４７０を呼び出す。それぞれのＡＴＰＴ項目は、１組の連続ＰＣＩバス・アドレスに関するものである。アドレス変換および保護テーブルの項目を初期設定するためのメカニズムは一般に当技術分野で既知のものである。たとえば、このような項目を初期設定するためのメカニズムは、本出願人に譲渡された米国特許第６６２９１６２号に記載されている。次に、デバイス・ドライバ・サービス４７０は、１つまたは複数のＰＣＩメモリ・アドレスをデバイス・ドライバ４５０に返す。
【００７６】
本質的に、描写された例では、デバイス・ドライバ・サービス４７０は、応答キュー４２２と、それがシステム・イメージ４２０内に存在する場合にＰＣＩｅエンドポイントのコマンド・キュー４９８とに関するホスト・メモリを滞留させる。デバイス・ドライバ・サービス４７０は、デバイス・ドライバの応答キュー４２２と、それがシステム・イメージ４２０内に存在する場合にＰＣＩｅエンドポイントのコマンド・キュー４９８とに対して、未変換ＰＣＩｅメモリ・アドレスであるＤＭＡアドレスを割り当てる。デバイス・ドライバ・サービス４７０は、ＡＴＰＴ項目をプログラミングし、デバイス・ドライバの応答キュー４２２と、それがシステム・イメージ４２０内に存在する場合にＰＣＩｅエンドポイントのコマンド・キュー４９８とに関するＡＴＰＴ項目がキャッシュ可能であること、すなわち、ＰＣＩｅエンドポイント４９０上のＡＴＣ４９４内にキャッシュ可能であることを示すビットを使用可能にする。次に、デバイス・ドライバ・サービス４７０は、ＡＴＰＴ項目用のデバイス・ドライバ４５０に未変換ＰＣＩｅメモリ・アドレスを返す。
【００７７】
例示的な諸実施形態のメカニズムを使用すると、この未変換ＰＣＩｅメモリ・アドレス（複数も可）をＰＣＩｅエンドポイント４９０に提供して、キュー４２２および４９８の位置をＰＣＩｅエンドポイント４９０に通知することができる。この未変換ＰＣＩｅメモリ・アドレス（複数も可）は、ルート複合体４８０に変換要求動作を送信するためにＰＣＩｅエンドポイント４９０が使用することができる。すなわち、ＰＣＩｅエンドポイント４９０は、ルート複合体４８０が未変換ＰＣＩｅメモリ・アドレスに関連する変換済みＰＣＩｅメモリ・アドレス（複数も可）を返すことを要求することができる。次に、ＰＣＩｅエンドポイント４９０は、変換済みＰＣＩｅメモリ・アドレス（複数も可）をデバイス・ドライバのキューに関連するコンテキスト、たとえば、ＡＴＣ４９４に保管することができる。その結果、未変換ＰＣＩｅメモリ・アドレスの変換をＰＣＩｅエンドポイントのデバイス・ドライバ・キュー・コンテキストまたはＡＴＣ４９４に保管することにより、ＰＣＩｅエンドポイント４９０は、デバイス・ドライバ・キュー項目、たとえば、応答キュー４２２内のＲＱＥ４２４をターゲットにするＤＭＡの際にルート複合体のＡＴＰＴ４８２をバイパスすることができる。すなわち、ルート複合体４８０が変換済みとしてマークが付けられたＰＣＩｅ  ＤＭＡトランザクションを受信すると、ルート複合体は、ＰＣＩｅエンドポイント４９０について変換キャッシュが使用可能になっていることを検証し、ホスト・システムの実メモリに直接アクセスするために変換済みＰＣＩｅメモリ・アドレスを使用することになる。
【００７８】
ＰＣＩｅエンドポイント４９０がシステムから切り離された後、デバイス・ドライバ４５０に関連する機能（物理または仮想）がホスト・システムから切り離された後など、その後の何らかの時点で、未変換ＰＣＩｅメモリ・アドレス（複数も可）に対応するＡＴＰＴ項目およびＡＴＣ項目を無効化する必要がある可能性がある。このような無効化を実行するために、デバイス・ドライバ４５０、ハイパーバイザ管理コンポーネントなどは、ホスト・メモリを滞留解除し、ＤＭＡアドレス（複数も可）、すなわち、未変換ＰＣＩｅメモリ・アドレス（複数も可）を解放するためにデバイス・ドライバ・サービス４７０を呼び出す。次に、デバイス・ドライバ・サービス４７０は、たとえば、その項目がもはや有効ではないことを示すビットをＡＴＰＴ４８２内に設定するか、またはそれがもはや有効ではないことを示すためにＡＴＰＴ項目を「ゼロにする」ことにより、未変換ＰＣＩｅメモリ・アドレス（複数も可）に対応するＡＴＰＴ４８２内のＡＴＰＴ項目を消去する。
【００７９】
次に、ルート複合体４８０は、ＡＴＣ項目無効化要求をＰＣＩｅエンドポイント４９０に発行する。次に、ＰＣＩｅエンドポイント４９０は、未変換ＰＣＩｅメモリ・アドレス（複数も可）に対応するＡＴＣ４９４内の任意のＡＴＣ項目を無効化するための動作を実行する。このような無効化は、たとえば、変換をキャッシュしていた任意の仮想機能のキュー・コンテキスト、たとえば、ＡＴＣ４９４から、キャッシュされた変換を除去することを必要とする可能性がある。未変換ＰＣＩｅメモリ・アドレスがもはや使用されなくなった後に、すなわち、未変換ＰＣＩｅメモリ・アドレスを参照するすべての未解決のＤＭＡ動作が完了したときに、ＰＣＩｅエンドポイント４９０はＡＴＣ無効化完了応答をデバイス・サービス４７０に返す。次に、デバイス・ドライバ・サービス４７０はデバイス・ドライバ４５０に制御を返す。代替実現例では、デバイス・ドライバ・サービス４７０は、ＡＴＣ項目無効化要求をＰＣＩｅエンドポイント４９０に発行することができ、ＰＣＩｅエンドポイント４９０がＡＴＣ項目無効化を完了した後に、デバイス・ドライバ・サービス４７０はＡＴＰＴ４８２内のＡＴＰＴ項目を消去し、デバイス・ドライバ４５０に制御を返すことができる。
【００８０】
図５は、例示的な一実施形態によりＤＭＡ動作による変換済みおよび未変換ＰＣＩｅアドレスの処理を例示する模範的な図である。図５に図示されている動作では、前に述べた通り、デバイス・ドライバおよびデバイス・ドライバ・サービスを使用して、ＤＭＡ動作に関する適切なＡＴＰＴ項目が初期設定されているものと想定している。図５は、ＰＣＩｅエンドポイント５０５からホスト・システムのＣＰＵおよびメモリ５６０に送信されている未変換ＰＣＩｅアドレスを使用するＤＭＡに関する１つの動作と、ＰＣＩｅエンドポイント５０５からＣＰＵおよびメモリ５６０に送信されている変換済みＰＣＩｅアドレスを使用するＤＭＡに関するもう１つの動作を示している。
【００８１】
図５に図示されている通り、ＰＣＩｅエンドポイント５０５の仮想機能でＤＭＡ動作要求が生成または受信されると、未変換ＰＣＩｅアドレスに関するアドレス変換がＡＴＣ内に存在するかどうかを判断するために、対応するＡＴＣのチェックを実行することができる。未変換ＰＣＩｅアドレスに関する項目がＡＴＣ内に存在しない場合、未変換ＰＣＩｅアドレスを使用する未変換ＰＣＩｅ  ＤＭＡ５１０として、ルート複合体５３０にＤＭＡ動作要求が転送される。ＡＴＣ内で項目が使用可能であり、その項目が無効化されていない場合、ＤＭＡに関する未変換ＰＣＩｅアドレスの代わりに変換済みアドレスを使用することができる。その結果、変換済みアドレス５２０を使用する変換済みＰＣＩｅ  ＤＭＡがルート複合体５３０に転送される。
【００８２】
未変換ＰＣＩｅ  ＤＭＡ５１０の場合、未変換ＰＣＩｅアドレスはホスト・システム・メモリ・アドレス空間内にないので、まず未変換ＰＣＩｅアドレスをホスト・システム・メモリ・アドレスに変換することが必要である。この変換は、ＡＴＰＴを使用して、ルート複合体５３０によって実行される。加えて、ルート複合体５３０はさらに、ＰＣＩｅエンドポイント５０５のＢＤＦ番号およびＡＴＰＴ内の項目に基づいて、アクセス検査を実行する。すなわち、ルート複合体５３０は、ＡＴＰＴ５４０内の未変換ＰＣＩｅアドレスに対応する項目をルックアップし、未変換ＰＣＩｅアドレスに対応する変換済みホスト・システム・メモリ・アドレスと、変換済みホスト・システム・メモリ・アドレスに関する対応する保護情報とを取得する。保護情報は、どのＢＤＦ番号が対応するホスト・システム・アドレスにアクセス可能であるかと、これらのホスト・システム・メモリ・アドレスに対応するシステム・メモリの一部分でこれらが実行可能な特定の動作とを識別することができる。
【００８３】
ＰＣＩｅエンドポイント５０５が変換済みシステム・メモリ・アドレスに対応するシステム・メモリの一部分にアクセスすることが許可されており、要求されたＤＭＡ動作（たとえば、読み取り／書き込み）を実行することが許可されている場合、ＤＭＡ動作要求は、変換済みシステム・メモリ・アドレス５７０を使用して、ＣＰＵおよびメモリ５６０に転送される。ＰＣＩｅエンドポイント５０５がシステム・メモリの一部分にアクセスすることが許可されていない場合、エラー・メッセージが返される可能性があり、ＤＭＡ動作要求はＣＰＵおよびメモリ５６０に転送されない可能性がある。
【００８４】
未変換ＰＣＩｅアドレスに関する変換済みシステム・メモリ・アドレスはＰＣＩｅエンドポイント５０５に返すことができる。次に、ＰＣＩｅエンドポイント５０５は、図４に関して上述した通り、ＤＭＡ動作要求をサブミットした仮想機能のＡＴＣに変換を保管することができる。このようにして、この変換を後で実行しなければならないのではなく、ＡＴＣを介してＰＣＩｅエンドポイント内で変換済みシステム・メモリ・アドレスにアクセスすることができ、これにより、未変換ＰＣＩｅアドレスのＡＴＰＴ変換に必要なサイクルが節約される。
【００８５】
変換済みＰＣＩｅ  ＤＭＡ５２０の場合、ＰＣＩｅアドレスはＰＣＩｅエンドポイント５０５内の仮想機能のＡＴＣによってすでにシステム・メモリ・アドレスに変換されているので、ＤＭＡ動作は、ルート複合体５３０を通過してＣＰＵおよびメモリ５６０に移行することができる。たとえば、変換済みＰＣＩｅ  ＤＭＡ５２０は、ＤＭＡ動作要求のヘッダに指定されたアドレスが変換済みアドレスであることを示すビットがＤＭＡヘッダ内に設定されている（たとえば、ＰＣＩｅエンドポイント５０５によって設定されている）。ルート複合体５３０は、このビットを読み取り、ＤＭＡ動作要求内のアドレスが変換済みアドレスまたは未変換アドレスであることをそのビットが示すかどうかを判断することができる。
【００８６】
そのアドレスが未変換アドレスであるとルート複合体５３０が判断した場合、未変換ＰＣＩｅ  ＤＭＡ動作要求５１０に関して上記で概要を示した動作が実行される。そのアドレスが変換済みアドレスであるとルート複合体５３０が判断した場合、ルート複合体５３０は、ＤＭＡ動作要求５２０をＣＰＵおよびメモリ５６０に渡すことができる。任意選択で、ＰＣＩｅエンドポイントが変換済みシステム・メモリ・アドレスに対応するシステム・メモリの一部分にアクセスすることが許可されていることを保証するために、依然としてＰＣＩｅエンドポイント５０５のＢＤＦ番号に基づいてアクセス検査を実行することができる。このアクセス検査は、そのＢＤＦ番号によってアドレス変換をキャッシュできるかどうかを判断するための一般的検査など、非常に単純なものである可能性があり、そのＢＤＦ番号によってキャッシュできる場合、検査は成功である。そのＢＤＦ番号ではアドレス変換をキャッシュできない場合、アクセス検査は失敗である。
【００８７】
図６〜図８は、例示的な諸実施形態の様々な要素の模範的な動作の概要を示している。これらの流れ図の各ブロック、その後の流れ図、ならびに流れ図内のブロックの組み合わせがコンピュータ・プログラム命令によって実現できることは理解されるであろう。これらのコンピュータ・プログラム命令は、プロセッサまたはその他のプログラマブル・データ処理装置上で実行される命令によって流れ図の１つまたは複数のブロックに指定された機能を実現するための手段が作成されるようにマシンを生産するために、プロセッサまたはその他のプログラマブル・データ処理装置に提供することができる。また、これらのコンピュータ・プログラム命令は、コンピュータ可読メモリまたは記憶媒体に保管された命令によって流れ図の１つまたは複数のブロックに指定された機能を実現する命令手段を含む製品（article of manufacture）が生産されるように特定の方法で機能するようプロセッサまたはその他のプログラマブル・データ処理装置に指示できるコンピュータ可読メモリまたは記憶媒体に保管することもできる。
【００８８】
したがって、流れ図のブロックは、指定の機能を実行するための手段の組み合わせ、指定の機能を実行するためのステップの組み合わせ、ならびに指定の機能を実行するためのプログラム命令手段をサポートする。また、これらの流れ図の各ブロックならびに流れ図内のブロックの組み合わせが、指定の機能またはステップを実行する特殊目的ハードウェアベースのコンピュータ・システムによって、または特殊目的ハードウェアとコンピュータ命令の組み合わせによって実現できることは理解されるであろう。
【００８９】
図６は、例示的な一実施形態によりＤＭＡアドレスに関するＡＴＰＴ項目を初期設定するための模範的な動作の概要を示す流れ図である。図６に図示されている通り、動作は、ホスト・システム上のシステム・イメージの初期設定の一部として、ホスト・システムによって行われるＰＣＩｅエンドポイント用のデバイス・ドライバの初期設定から始まる（ステップ６１０）。ホスト・システムはロジカル・パーティション内のデバイス・ドライバを呼び出し、次にそのデバイス・ドライバが入出力仮想化仲介内のデバイス・ドライバ・サービスを呼び出す（ステップ６２０）。デバイス・ドライバ・サービスはホスト・システム・メモリを滞留させる（ステップ６３０）。
【００９０】
デバイス・ドライバ・サービスはＤＭＡアドレスをＰＣＩｅエンドポイントに割り当てる（ステップ６４０）。デバイス・ドライバ・サービスは、ＤＭＡアドレスに関するＡＴＰＴ項目をプログラミングし、適切であれば、キャッシュ使用可能ビットをＡＴＰＴ項目内に設定する（ステップ６５０）。次に、デバイス・ドライバ・サービスは未変換ＰＣＩｅメモリ・アドレス（複数も可）をデバイス・ドライバに返し（ステップ６６０）、動作は終了する。
【００９１】
図７は、例示的な一実施形態によりＤＭＡアドレスに関するＡＴＰＴ項目およびＡＴＣ項目を無効化するための模範的な動作の概要を示す流れ図である。図７に図示されている通り、動作は、デバイス・ドライバがデバイス・ドライバ・サービスを呼び出すことから始まる（ステップ７１０）。デバイス・ドライバ・サービスはＤＭＡアドレスを解放し（ステップ７２０）、次にＤＭＡアドレスに関するＡＴＰＴ項目を消去する（ステップ７３０）。
【００９２】
ルート複合体はＡＴＣ項目無効化要求をＰＣＩｅエンドポイントに発行する（ステップ７４０）。ＰＣＩｅエンドポイントは、無効化すべきＤＭＡアドレスに対応するＡＴＣ項目を無効化する（ステップ７５０）。デバイス・ドライバ・サービスは、ＡＴＣ無効化完了応答が受信されるのを待つ（ステップ７６０）。ＡＴＣ無効化完了応答が受信されると、デバイス・ドライバ・サービスはホスト・システム・メモリを滞留解除することができ（ステップ７７０）、ＡＴＣ無効化が完了すると、デバイス・ドライバに制御を返すことができる（ステップ７８０）。次に動作は終了する。
【００９３】
図８は、例示的な一実施形態によりＤＭＡ動作において変換済みおよび未変換ＰＣＩｅアドレスを処理するための模範的な動作の概要を示す流れ図である。図８に図示されている通り、動作は、ルート複合体においてＤＭＡトランザクションを受信することから始まる（ステップ８１０）。ルート複合体は、変換済みビットが設定されているかどうかを判断する（ステップ８２０）。変換済みビットが設定されていない場合、ルート複合体は、ＡＴＰＴを使用して完全変換およびＢＤＦ番号アクセス検査を実行する（ステップ８３０）。
【００９４】
その後、２通りの動作経路をたどる。第１の経路では、ＤＭＡ動作のソースが変換済みＤＭＡ動作を実行することが許可されているかどうかに関する判断、すなわち、アクセス検査が正常に完了したかどうかに関する判断が行われる（ステップ８４０）。許可されていない場合、エラーが返される（ステップ８６０）。ソースが変換済みＤＭＡ動作を実行することが許可されている場合、ルート複合体はＤＭＡを実行する（ステップ８５０）。次に動作は終了する。
【００９５】
変換済みビットが設定されている場合（ステップ８２０）、任意選択のＢＤＦ番号アクセス検査を実行することができる（ステップ８７０）。動作は、ステップ８３０のアドレス変換をバイパスして、ステップ８４０に進む。
【００９６】
したがって、例示的な諸実施形態は、ホスト・システムのルート複合体のアドレス変換データ構造においてアドレス変換を初期設定し無効化するためにデバイス・ドライバ・サービスを呼び出すためのメカニズムを提供する。これらのデバイス・ドライバ・サービスは、入出力仮想化仲介内に設けることができ、システム・イメージに関連してロジカル・パーティション内に設けられたデバイス・ドライバによって呼び出すことができる。デバイス・ドライバ・サービスは、ルート複合体により、仮想アドレス、たとえば、未変換ＰＣＩｅアドレスをシステム・メモリ・アドレスに変換するためのアドレス変換データ構造項目を作成することができる。その上、デバイス・ドライバ・サービスは、ルート複合体により、アドレス変換データ構造からアドレス変換項目を消去し、ＰＣＩｅエンドポイントにより、ＰＣＩｅエンドポイントの任意のアドレス変換キャッシュ内の項目を無効化することができる。
【００９７】
前述の通り、例示的な諸実施形態のメカニズムは、システム・イメージと、システム・イメージなどで実行されるアプリケーションと、１つまたは複数のキュー・データ構造を使用するＰＣＩｅエンドポイントとの間で通信する際に使用するためのＡＴＰＴ項目を確立するために使用することができる。例示的な諸実施形態のこのような実現例では、１つまたは複数のキュー・データ構造に関するＡＴＰＴ項目は、前に上述したように初期設定される。ＰＣＩｅエンドポイントの初期設定フェーズ中に、ＰＣＩｅエンドポイントは、デバイス・ドライバが初期設定されていることを検証する。これは、たとえば、ＰＣＩｅエンドポイントのＰＣＩ構成空間、重要プロダクト・データ（ＶＰＤ）フィールド、またはメモリ・マップ入出力（ＭＭＩＯ）フィールドから情報を読み取ることにより、実行することができる。
【００９８】
デバイス・ドライバは、１つまたは複数のキューの開始および終了アドレス、開始アドレスおよび長さなどをＰＣＩｅエンドポイントに提供することができる。たとえば、デバイス・ドライバは、キュー構成空間に対応するＰＣＩｅエンドポイントのＰＣＩ構成空間フィールド、ＶＰＤまたはＭＭＩＯフィールドにこれらのアドレスを書き込むことができる。これらのアドレスは未変換ＰＣＩｅアドレスである。ＰＣＩｅエンドポイントは、キュー・アドレスの変換に関するＰＣＩｅ  ＡＴＳ要求を呼び出すことができる。その結果、ルート複合体は、ＡＴＰＴを使用してアドレス変換を実行し、１つまたは複数のキューから項目を検索する際に使用するためにキュー・コンテキストに変換済みアドレスをキャッシュすることができるＰＣＩｅエンドポイントに結果を返し、項目を１つまたは複数のキュー内に入れることができる。このようにしてキュー・アドレスを事前変換することにより、入出力動作を開始する際に必要となる待ち時間は、変換動作の待ち時間を各動作の開始から任意の動作開始前に移動することによって短縮され、したがって、エンドポイントのＤＭＡ動作の全体的なパフォーマンスが改善される。
【００９９】
図９は、ＰＣＩｅエンドポイント・キューに関するアドレス変換をキャッシュするための例示的な諸実施形態の実現例を例示している。図９に図示されている通り、デバイス・ドライバ９１０は、ＰＣＩｅエンドポイント９９０と通信するためのキュー・データ構造９２０〜９３０を生成する。描写された例では、キュー・データ構造９２０〜９３０は、たとえば、図４のＰＣＩｅエンドポイントのコマンド・キュー４９８と同等である可能性のあるコマンド・キュー９２０と、たとえば、図４の応答キュー４２２と同等である可能性のある応答キュー９３０とを含む。デバイス・ドライバ９１０によって確立可能なキューの数が２に限定されず、本発明の精神および範囲を逸脱せずに、それより少ないかまたは多い数のキューを使用できることを認識されたい。
【０１００】
キュー・データ構造９２０〜９３０は、たとえば、ＰＣＩｅエンドポイント９９０に結合された小型コンポーネント・システム・インターフェース（ＳＣＳＩ）入出力装置と通信するためのＳＣＳＩキューにすることができる。これらのキュー・データ構造は、リンク・リスト・キュー、サーキュラ・バッファ・キューなどを含む任意の方式で構成することができる。
【０１０１】
これらのキュー・データ構造９２０〜９３０を生成する際にデバイス・ドライバ９１０によって実行される動作の一部として、デバイス・ドライバ９１０は、キュー・データ構造９２０〜９３０に関するＡＴＰＴ項目をプログラミングし、キューに関する未変換ＰＣＩｅアドレスをデバイス・ドライバ９１０に返すためにデバイス・ドライバ・サービス９４０を呼び出す。前に上述した通り、例示的な諸実施形態では、ＡＴＰＴ項目のプログラミングは、キュー・データ構造に使用されるホスト・メモリ空間９５０を滞留させること、未変換ＰＣＩｅアドレスからシステム・メモリ・アドレスに変換するための変換情報によりルート複合体９７０のＡＴＰＴ９６２内のＡＴＰＴ項目をプログラミングすること、ならびにＡＴＰＴ項目に対応するアドレス変換がＰＣＩｅエンドポイント９９０のＡＴＣ９９２内にキャッシュ可能であることを示すキャッシュ使用可能ビットをＡＴＰＴ項目内に設定することを必要とする可能性がある。このような動作を実行した後、ＡＴＰＴ項目に関する未変換ＰＣＩｅアドレスがデバイス・ドライバ９１０に返される。これらの未変換ＰＣＩｅアドレスは、たとえば、キュー・データ構造９２０〜９３０の開始および終了アドレスを識別することができる。
【０１０２】
未変換ＰＣＩｅアドレスは、ＰＣＩｅエンドポイント９９０内のキュー構成空間９９４にアドレスを書き込むことなどにより、デバイス・ドライバ９１０によってＰＣＩｅエンドポイント９９０に提供される。キュー構成空間９９４は、たとえば、ＰＣＩ構成空間、１つまたは複数のＶＰＤフィールド、１つまたは複数のＭＭＩＯフィールドなどにすることができる。キュー・データ構造９２０〜９３０に関するこれらの未変換ＰＣＩｅアドレスを受信したことに応答して、ＰＣＩｅエンドポイント９９０は、キュー・アドレスに関するＰＣＩｅ  ＡＴＳ要求をルート複合体９７０に発行することができる。その結果、ルート複合体９７０は、キュー・データ構造９２０〜９３０の未変換ＰＣＩｅアドレスに関するアドレス変換およびアクセス検査を実行し、変換済みアドレスをＰＣＩｅエンドポイント９９０に返すことができる。次に、ＰＣＩｅエンドポイント９９０は、ＰＣＩｅエンドポイント９９０のアドレス変換キャッシュ（ＡＴＣ）９９２によって提供されたキュー・コンテキスト内にこれらのアドレス変換を保管することができる。
【０１０３】
上記の結果として、ＰＣＩｅエンドポイントはその時点でキュー・データ構造９２０〜９３０に関連するアドレスに関する変換にアクセスできるので、ＰＣＩｅエンドポイントは、ルート複合体９７０のＡＴＰＴアドレス変換を行う必要なしに、キュー・データ構造９２０〜９３０にキュー項目をサブミットするかまたはキュー・データ構造９２０〜９３０からキュー項目を検索するためにＤＭＡ動作を実行することができる。
【０１０４】
キュー・データ構造９２０〜９３０がもはやＰＣＩｅエンドポイント９９０によって使用されない場合、これらのキュー・データ構造９２０〜９３０に関するアドレスに対応するＡＴＰＴおよびＡＴＣ項目は、前に上述した方式で無効化することができる。このような無効化は、たとえば、ＰＣＩｅエンドポイントがシステムから切り離される場合、デバイス・ドライバに関連する機能（物理または仮想）がホスト・システムから切り離された後などに実行することができる。前に述べた通り、この無効化プロセスは、デバイス・ドライバ９１０が、キュー・データ構造９２０〜９３０に対応するホスト・システム・メモリ９５０を滞留解除するためにデバイス・ドライバ・サービス９４０を呼び出すこと、これらのキュー・データ構造９２０〜９３０に関するＤＭＡアドレスを解放すること、これらのＤＭＡアドレスに関するＡＴＰＴ項目を消去すること、およびＡＴＣ項目無効化要求をＰＣＩｅエンドポイント９９０に発行することを必要とする可能性がある。ＡＴＣ項目無効化動作がＰＣＩｅエンドポイント９９０によって完了されると、デバイス・ドライバ・サービス９４０はデバイス・ドライバ９１０に制御を返し、この時点でＰＣＩｅエンドポイント９９０をシステムから切り離すことができる。
【０１０５】
図１０は、例示的な一実施形態によりホスト・システムとＰＣＩｅエンドポイントとの間の通信に関するキュー・データ構造を初期設定するための模範的な動作の概要を示す流れ図である。キュー・データ構造のアドレスを無効化するための動作は本質的に上記の図７に概要を示した動作と同じであるので、この説明ではキュー・データ構造に関する初期設定動作についてのみ、流れ図で具体的に例示することにする。
【０１０６】
図１０に図示されている通り、動作は、ホスト・システム上のシステム・イメージの初期設定の一部として、ホスト・システムによって行われるＰＣＩｅエンドポイント用のデバイス・ドライバの初期設定から始まる（ステップ１０１０）。ホスト・システムはロジカル・パーティション内のデバイス・ドライバを呼び出し、次にそのデバイス・ドライバが入出力仮想化仲介内のデバイス・ドライバ・サービスを呼び出す（ステップ１０２０）。デバイス・ドライバ・サービスはキュー・データ構造（複数も可）用のホスト・システム・メモリを滞留させる（ステップ１０３０）。
【０１０７】
デバイス・ドライバ・サービスは未変換ＤＭＡアドレス、すなわち、未変換ＰＣＩｅメモリ・アドレスをキュー・データ構造（複数も可）に割り当てる（ステップ１０４０）。デバイス・ドライバ・サービスは、未変換ＤＭＡアドレスに関するＡＴＰＴ項目をプログラミングし、適切であれば、キャッシュ使用可能ビットをＡＴＰＴ項目内に設定する（ステップ１０５０）。次に、デバイス・ドライバ・サービスは未変換ＤＭＡアドレス、すなわち、キュー・データ構造に関する未変換ＰＣＩｅメモリ・アドレスをデバイス・ドライバに返す（ステップ１０６０）。
【０１０８】
次に、デバイス・ドライバはキュー・データ構造に関する未変換ＤＭＡアドレスをＰＣＩｅエンドポイントに提供する（ステップ１０７０）。ＰＣＩｅエンドポイントはＡＴＳアドレス変換要求をルート複合体に発行する（ステップ１０８０）。ルート複合体は、ＡＴＰＴを使用して未変換ＤＭＡアドレスのアドレス変換を実行し、変換済みアドレスをＰＣＩｅエンドポイントに返す（ステップ１０９０）。ＰＣＩｅエンドポイントはキュー・データ構造に関するキュー・コンテキストに変換済みアドレスを保管し（ステップ１０９５）、動作は終了する。その後、ＰＣＩｅエンドポイントは、キュー・データ構造との間のＤＭＡ要求に対してキュー・コンテキスト内の変換済みアドレスを使用することができる。
【０１０９】
したがって、例示的な諸実施形態は、システム・イメージと、システム・イメージなどで実行されるアプリケーションと、ＰＣＩｅエンドポイント、たとえば、入出力アダプタとの間で通信するための１つまたは複数のキューを作成するためのメカニズムを提供する。例示的な諸実施形態のメカニズムは、未変換アドレス空間、たとえば、ＰＣＩｅバス・アドレス空間から、変換済みアドレス空間、たとえば、システム・バス・アドレス空間に、１つまたは複数のキューに関連するアドレスを変換するためにルート複合体におけるＡＴＰＴ項目の初期設定および使用を可能にする。その上、例示的な諸実施形態は、ルート複合体において形式的変換（formal translation）を行う必要なしに、これらの変換に一致する未変換アドレスを使用する要求を１つまたは複数のキューに直接転送できるように、アドレス変換キャッシュの一部としてＰＣＩｅエンドポイントに変換を保管するためのメカニズムを提供する。
【０１１０】
上述の通り、例示的な諸実施形態のメカニズムは、デバイス・ドライバ内のキュー・データ構造と、それに対応するデータ処理システムのルート複合体内のＡＴＰＴ項目とを確立するために使用することができる。このようなキュー・データ構造が上述のメカニズムにより初期設定されると、これらのキュー・データ構造およびＡＴＰＴ項目を使用して、ホスト・システムのロジカル・パーティションのアプリケーション・インスタンス、システム・イメージなどとＰＣＩｅエンドポイントとの間の通信を実行することができる。
【０１１１】
これらのキュー・データ構造および対応するＡＴＰＴ項目は、種々のタイプのＰＣＩｅエンドポイントとともに使用することができる。たとえば、ＰＣＩｅエンドポイントは、１つまたは複数のデータ・ネットワークにより他のデバイスと通信するためのイーサネット（登録商標）・アダプタ、ファイバ・チャネル・アダプタ、ＩｎｆｉｎｉＢａｎｄ（Ｒ）アダプタなどのネットワーキング・アダプタにすることができる。このようなネットワーキング・アダプタにより、送受信中のデータは、ホスト・システムのデバイス・ドライバ内のバッファ内に置かれ、データが受信中であるか送信中であるかに応じて、ホスト・システムのシステム・イメージまたはネットワーク・アダプタのいずれかによって取り出される。データ・バッファ・アドレスを事前変換することにより、入出力動作を開始する際に必要となる待ち時間は、変換動作の待ち時間を各動作の開始から任意の動作開始前に移動することによって短縮され、したがって、エンドポイントのＤＭＡ動作の全体的なパフォーマンスが改善される。
【０１１２】
次に、ネットワーキング・アダプタに関連する例示的な諸実施形態の構造を使用するデータの受信および送信のためのプロセスについて、図１１および図１２に関連して以下に説明する。図１１は、「コマンド・キュー項目」またはＣＱＥというキュー項目を使用してＰＣＩｅエンドポイントからホスト・システムのバッファにデータを受信するための動作を例示する模範的な図である。最初に、デバイス・ドライバ１１１０は、イーサネット（登録商標）・アダプタ、ファイバ・チャネル・アダプタ、ＩｎｆｉｎｉＢａｎｄ（Ｒ）アダプタなどのネットワーキング・アダプタにすることができるＰＣＩｅエンドポイント１１９０に要求を送信するために、１つまたは複数のキュー・データ構造、たとえば、コマンド・キュー・データ構造１１２０を初期設定するためにデバイス・ドライバ・サービス１１４０を呼び出す。前に述べた通り、この初期設定は、キュー・データ構造用のホスト・システム・メモリを滞留させること、ＤＭＡアドレスを割り当てること、ＡＴＰＴ項目をプログラミングすること、ＡＴＰＴ項目がキャッシュ可能であることを示すビットを設定すること、ならびに未変換ＰＣＩｅメモリ・アドレスをデバイス・ドライバ１１１０に返すことを含むことができる。
【０１１３】
キュー・データ構造を初期設定した後、デバイス・ドライバは、着信データ・パケットからのデータを保管するためにＰＣＩｅエンドポイントが使用するバッファ１１２４を指すポインタ、すなわち、アドレスを含むＣＱＥ１１２２を作成する。バッファに関するアドレスは未変換ＰＣＩｅアドレスである。
【０１１４】
次に、デバイス・ドライバ１１１０は、ＰＣＩｅエンドポイント１１９０内のドアベル記憶装置１１９２、たとえば、レジスタにドアベル値を書き込む。ドアベル値は、ＣＱＥ１１２２が使用可能であることをＰＣＩｅエンドポイント１１９０に対して示すものである。ＰＣＩｅエンドポイント１１９０は、ドアベル記憶装置１１９２内にドアベル値を設定したことに応答して、コマンド・キュー・データ構造１１２０からＣＱＥ１１２２、したがって、バッファ・アドレスを取り出す。
【０１１５】
バッファ１１２４に関する未変換ＰＣＩｅアドレスを取り出すと、ＰＣＩｅエンドポイント１１９０は、バッファ１１２４に関する未変換ＰＣＩｅアドレスのアドレス変換のための要求をルート複合体１１５０に発行する。ルート複合体１１５０は、ＡＴＰＴ１１６０を使用して未変換ＰＣＩｅアドレスを変換済みシステム・メモリ・アドレスに変換し、変換済みシステム・メモリ・アドレスをＰＣＩｅエンドポイント１１９０に返す。ＰＣＩｅエンドポイント１１９０は、ＰＣＩｅエンドポイント１１９０内のＣＱＥ１１９４のローカル・コピーに変換済みシステム・メモリ・アドレスを保管する。
【０１１６】
変換ならびにＣＱＥ１１９４のローカル・コピーへの変化済みアドレス、すなわち、システム・メモリまたは実メモリ・アドレスの保管は、ＣＱＥ１１９４に関する外部ネットワーク接続装置（図示せず）からデータ・パケットを受信する前に実行できることを認識されたい。したがって、データ・パケット（複数も可）が外部ネットワーク接続装置によって送信され、ＰＣＩｅエンドポイント１１９０で受信されるまで、変換済みＰＣＩｅアドレスはＣＱＥ１１９４のローカル・コピーに保管することができる。
【０１１７】
結果のデータ・パケットがＰＣＩｅエンドポイント１１９０で受信されると、ＰＣＩｅエンドポイント１１９０は、ローカルに保管されキャッシュされた変換済みアドレス、すなわち、ＣＱＥ１１９４のローカル・コピーに保管されたバッファ１１２４の未変換ＰＣＩｅアドレスに対応するシステム・メモリ・アドレスを使用して、データをバッファ１１２４に入れるためのＤＭＡ動作要求を発行する。ＤＭＡ動作要求で使用されるアドレスが変換済みシステム・メモリ・アドレスであることを示すためのビットがＤＭＡ動作要求のヘッダに設定されたＤＭＡ動作要求が実行される。その結果、ルート複合体１１５０は、データがバッファ１１２４に直接書き込まれるように、ＡＴＰＴ１１６０を使用するアドレス変換なしに、ＤＭＡ動作要求を通過させる。
【０１１８】
バッファ１１２４に書き込むべきデータのすべてがこのようにバッファ１１２４にＤＭＡされると、ＰＣＩｅエンドポイント１１９０は、同様に応答キュー・データ構造１１３０に応答キュー項目（ＲＱＥ）１１３２をＤＭＡすることができる。デバイス・ドライバ１１１０がＲＱＥ１１３２を受信し処理すると、デバイス・ドライバ１１１０は、データ・バッファ１１２４用のホスト・メモリを滞留解除するためにデバイス・ドライバ・サービス１１４０を呼び出す。デバイス・ドライバ・サービス１１４０は、データ・バッファ１１２４に関するＤＭＡアドレスを解放し、データ・バッファ１１２４に関するＡＴＰＴ項目を消去する。ルート複合体１１５０は、ＣＱＥ１１９４のローカル・コピー内のアドレス情報を消去するために、ＡＴＣ項目無効化要求をＰＣＩｅエンドポイント１１９０に発行する。ＰＣＩｅエンドポイント１１９０は、デバイス・ドライバ・サービス１１４０に完了を通知するＡＴＣ項目無効化完了応答をルート複合体１１５０に返す。次に、デバイス・ドライバ・サービス１１４０はデバイス・ドライバ１１１０に制御を返し、次のＣＱＥを作成する必要が発生するまで動作は完了する。また、複数の動作（たとえば、複数のＣＱＥ）に１つのデータ・バッファを再利用するすることも可能であり、その場合、データ・バッファがもはや他の動作に必要ではなくなるまで、デバイス・ドライバ・サービス１１４０は（たとえば、データ・バッファ・アドレスを無効化し、メモリを滞留解除するために）呼び出されることはないであろう。
【０１１９】
図１２は、ＣＱＥを使用してＰＣＩｅエンドポイントを介してデータを送信するための動作を例示する模範的な図である。ＰＣＩｅエンドポイント１２９０を介してホスト・システム内のシステム・イメージからデータが送信される場合、デバイス・ドライバ１２１０は、バッファ１２２４用のホスト・メモリを滞留させるためにデバイス・ドライバ・サービス１２４０を呼び出し、バッファ１２２４に関するＤＭＡアドレスを割り当て、バッファ１２２４に関するＡＴＰＴ１２６０内のＡＴＰＴ項目をプログラミングし、これらの項目内のアドレス変換がキャッシュ可能であることを示すビットをＡＴＰＴ項目内に設定する。デバイス・ドライバ・サービス１２４０は、バッファ１２２４に関する未変換ＰＣＩｅアドレスをデバイス・ドライバ１２１０に返す。
【０１２０】
デバイス・ドライバは、ＰＣＩｅエンドポイント１２９０がそのポートのうちの１つまたは複数を介してそこからデータを送信する予定のバッファ１２２４を指すポインタ、すなわち、アドレスを含むＣＱＥ１２２２を作成する。バッファ１２２４に関するアドレスは未変換ＰＣＩｅアドレスである。
【０１２１】
次に、デバイス・ドライバ１２１０は、ＰＣＩｅエンドポイント１２９０内のドアベル記憶装置１２９２、たとえば、レジスタにドアベル値を書き込む。ドアベル値は、ＣＱＥ１２２２が使用可能であることをＰＣＩｅエンドポイント１２９０に対して示すものである。ＰＣＩｅエンドポイント１２９０は、ドアベル記憶装置１２９２内にドアベル値を設定したことに応答して、コマンド・キュー・データ構造１２２０からＣＱＥ１２２２、したがって、バッファ・アドレスを取り出す。
【０１２２】
ＰＣＩｅエンドポイント１２９０内のデータ・バッファが一杯である場合、たとえば、ダウンストリーム・ポートが飽和している場合、ＰＣＩｅエンドポイント１２９０はＡＴＳ変換要求をルート複合体１２５０に発行する。ＰＣＩｅエンドポイント１２９０がこのＡＴＳ変換要求の結果として変換済みアドレスを受信すると、それはＣＱＥ１２９４のローカル・コピーに変換済みアドレスを保管する。ＰＣＩｅエンドポイント１２９０がデータ・バッファ１２２４からの送信データをＤＭＡし（たとえば、ポートがデータを送信するために使用可能になった場合）、データを送信した後、ＰＣＩｅエンドポイント１２９０は、送信動作が完了したことを示すために応答キュー１２３０にＲＱＥ１２３２をＤＭＡし、要求された場合、割り込みを生成することもできる。
【０１２３】
デバイス・ドライバ１２１０がＲＱＥ１２３２を検索すると、デバイス・ドライバ１２１０は、バッファ１２２４用のホスト・メモリを滞留解除するためにデバイス・ドライバ・サービス１２４０を呼び出し、ＤＭＡアドレスを解放し、バッファ１２２４の未変換アドレスに関するＡＴＰＴ項目を消去する。次に、ルート複合体１２５０はＡＴＣ項目無効化要求をＰＣＩｅエンドポイント１２９０に発行し、ＰＣＩｅエンドポイント１２９０からの完了メッセージを待つ。ＰＣＩｅエンドポイント１２９０によってＡＴＣ項目無効化動作が実行されると、デバイス・ドライバ・サービス１２４０はデバイス・ドライバ１２１０に制御を返す。また、複数の動作（たとえば、複数のＣＱＥ）に１つのデータ・バッファを再利用するすることも可能であり、その場合、データ・バッファがもはや他の動作に必要ではなくなるまで、デバイス・ドライバ・サービス１２４０は（たとえば、データ・バッファ・アドレスを無効化し、メモリを滞留解除するために）呼び出されることはないであろう。
【０１２４】
図１３〜図１４は、例示的な一実施形態によりネットワーク・アダプタの受信動作に関する模範的な動作の概要を示す流れ図を描写している。図１３〜図１４に図示されている通り、動作は、デバイス・ドライバが１つまたは複数のデータ・バッファ構造を初期設定するためにデバイス・ドライバ・サービスを呼び出すことから始まる（ステップ１３１０）。より具体的には、デバイス・ドライバは、バッファ（複数も可）に関連するホスト・メモリを滞留させ、バッファ・アドレスに関するＡＴＰＴをセットアップするためにデバイス・ドライバ・サービスを呼び出す。データ・バッファ構造（複数も可）を初期設定した後、デバイス・ドライバは、着信データ・パケットからのデータを保管するためにＰＣＩｅエンドポイントが使用するバッファを指すポインタ、すなわち、未変換ＰＣＩｅメモリ・アドレスを含むキュー項目を作成する（ステップ１３１５）。次に、デバイス・ドライバは、ＰＣＩｅエンドポイント内のドアベル記憶装置にドアベル値を書き込む（ステップ１３２０）。
【０１２５】
ＰＣＩｅエンドポイントは、ドアベル記憶装置内にドアベル値を設定したことに応答して、キュー・データ構造からキュー項目、したがって、未変換ＰＣＩｅバッファ・メモリ・アドレスを取り出す（ステップ１３２５）。バッファに関する未変換ＰＣＩｅメモリ・アドレスを取り出すと、ＰＣＩｅエンドポイントは、バッファに関する未変換ＰＣＩｅアドレスのアドレス変換のための要求をルート複合体に発行する（ステップ１３３０）。ルート複合体は、ＡＴＰＴを使用して未変換ＰＣＩｅアドレスを変換済みシステム・メモリ・アドレスに変換し、変換済みシステム・メモリ・アドレスをＰＣＩｅエンドポイントに返す（ステップ１３３５）。ＰＣＩｅエンドポイントは、ＰＣＩｅエンドポイント内のキュー項目のローカル・コピーに変換済みシステム・メモリ・アドレスを保管する（ステップ１３４０）。
【０１２６】
ＰＣＩｅエンドポイントは、データ・パケットが受信されたかどうかを判断する（ステップ１３４５）。受信されていない場合、動作は、ステップ１３４５に戻ることにより、データ・パケットが受信されるのを待つ。データ・パケットがＰＣＩｅエンドポイントで受信された場合、ＰＣＩｅエンドポイントは、ＤＭＡ動作要求のヘッダに変換ビットが設定されたＤＭＡ動作要求を発行し、ローカルに保管されキャッシュされたシステム・メモリ・アドレスを使用して、データをホスト・システムのバッファに入れる（ステップ１３５０）。ルート複合体は、データがバッファに直接書き込まれるように、ＡＴＰＴを使用するアドレス変換なしに、ＤＭＡ動作要求を通過させる（ステップ１３５５）。バッファに書き込むべきデータのすべてがバッファにＤＭＡされたかどうかに関する判断が行われる（ステップ１３６０）。ＤＭＡされていない場合、動作はステップ１３４５に戻る。
【０１２７】
バッファに書き込むべきデータのすべてがバッファにＤＭＡされると、ＰＣＩｅエンドポイントは応答キュー項目を応答キュー・データ構造にＤＭＡする（ステップ１３６５）。ＲＱＥを受信したことに応答して、デバイス・ドライバは、データ・バッファ構造用のホスト・メモリを滞留解除するためにデバイス・ドライバ・サービスを呼び出す（ステップ１３７０）。デバイス・ドライバ・サービスは、キュー・データ構造に関するＤＭＡアドレス、すなわち、未変換ＰＣＩｅメモリ・アドレスを解放し（ステップ１３７５）、キュー・データ構造に関するＡＴＰＴ項目を消去する（ステップ１３８０）。ルート複合体は、キュー項目のローカル・コピー内のアドレス情報を消去するために、ＰＣＩｅエンドポイントにＡＴＣ項目無効化要求を発行する（ステップ１３８５）。次に、ＰＣＩｅエンドポイントは、キュー項目のローカル・コピー内のアドレス情報を無効化し、デバイス・ドライバ・サービスに完了を通知するＡＴＣ項目無効化完了応答をルート複合体に発行する（ステップ１３９０）。次に、デバイス・ドライバ・サービスは、データ・バッファに関連するホスト・メモリを滞留解除する（ステップ１３９２）。次に、デバイス・ドライバ・サービスはデバイス・ドライバに制御を返し（ステップ１３９５）、動作は終了する。
【０１２８】
図１５〜図１６は、例示的な一実施形態によりネットワーク・アダプタの送信動作に関する模範的な動作の概要を示す流れ図を描写している。図１５〜図１６に図示されている通り、動作は、デバイス・ドライバがデバイス・ドライバ・サービスを呼び出すことから始まり（ステップ１４１０）、次にそのデバイス・ドライバ・サービスがバッファ用のホスト・メモリを滞留させ、バッファに関するＤＭＡアドレスを割り当て、バッファに関するＡＴＰＴ内のＡＴＰＴ項目をプログラミングし、これらの項目内のアドレス変換がキャッシュ可能であることを示すビットをＡＴＰＴ項目内に設定する（ステップ１４１５）。次に、デバイス・ドライバ・サービスは、バッファに関する１つまたは複数の未変換ＰＣＩｅメモリ・アドレス（複数も可）、すなわち、ＤＭＡアドレスをデバイス・ドライバに返す（ステップ１４２０）。
【０１２９】
デバイス・ドライバは、ＰＣＩｅエンドポイントがそのポートのうちの１つまたは複数を介してそこからデータを送信する予定のバッファを指すポインタ、すなわち、未変換ＰＣＩｅメモリ・アドレスを含むキュー項目を作成する（ステップ１４２５）。次に、デバイス・ドライバは、ＰＣＩｅエンドポイント内のドアベル記憶装置にドアベル値を書き込む（ステップ１４３０）。ＰＣＩｅエンドポイントは、ドアベル記憶装置内にドアベル値を設定したことに応答して、キュー・データ構造からキュー項目、したがって、バッファの未変換ＰＣＩｅメモリ・アドレスを取り出す（ステップ１４３５）。
【０１３０】
ＰＣＩｅエンドポイント内のデータ・バッファが一杯であるかどうかに関する判断が行われる（ステップ１４４０）。データ・バッファが一杯ではない場合、データはＤＭＡを介して転送され、送信のためにＰＣＩｅエンドポイントのデータ・バッファ内に置かれ（ステップ１４６０）、ＰＣＩｅエンドポイントはそれに応じてデータを送信する（ステップ１４６５）。
【０１３１】
データ・バッファが一杯である場合、ＰＣＩｅエンドポイントはルート複合体にＡＴＳ変換要求を発行する（ステップ１４４５）。ＰＣＩｅエンドポイントがこのＡＴＳ変換要求の結果として変換済みアドレスを受信すると（ステップ１４５０）、ＰＣＩｅエンドポイントはキュー項目のローカル・コピーに変換済みアドレスを保管する（ステップ１４５５）。エンドポイントは使用可能なバッファを待ち（ステップ１４５７）、データはＤＭＡを介して転送され、送信のためにＰＣＩｅエンドポイントのデータ・バッファ内に置かれ（ステップ１４６０）、ＰＣＩｅエンドポイントはそれに応じてデータを送信する（ステップ１４６５）。
【０１３２】
次に、ＰＣＩｅエンドポイントは、送信動作が完了したことを示すために応答キュー項目（ＲＱＥ）を応答キューにＤＭＡし、要求された場合、割り込みを生成することもできる（ステップ１４７０）。
【０１３３】
デバイス・ドライバがＲＱＥを検索すると、デバイス・ドライバは、バッファ用のホスト・メモリを滞留解除し、ＤＭＡアドレスを解放し、バッファの未変換アドレスに関するＡＴＰＴ項目を消去するためにデバイス・ドライバ・サービスを呼び出す（ステップ１４７５）。次に、ルート複合体は、ＰＣＩｅエンドポイントにＡＴＣ項目無効化要求を発行し（ステップ１４８０）、ＰＣＩｅエンドポイントからの完了メッセージを待つ（ステップ１４８５）。ＡＴＣ項目無効化動作がＰＣＩｅエンドポイントによって実行されると、デバイス・ドライバ・サービスは、データ・バッファに関連するホスト・メモリを滞留解除し（ステップ１４９０）、次に、デバイス・ドライバに制御を返し（ステップ１４９５）、動作は終了する。
【０１３４】
したがって、例示的な諸実施形態は、ホスト・システム内のデバイス・ドライバのバッファ内にネットワーク・アダプタＰＣＩｅエンドポイントを介してデータの受信または送信あるいはその両方を行うためにコマンド・キューおよびコマンド・キュー項目を生成するためのメカニズムを提供する。バッファに関するＡＴＰＴ項目は、ルート複合体内でアドレス変換を実行する必要なしにバッファに直接アクセスする際に使用するためにＰＣＩｅエンドポイント内でキャッシュ可能なバッファに対応するアドレスに関する変換により確立することができる。
【０１３５】
ネットワーキング・アダプタとの使用に加えて、例示的な諸実施形態のメカニズムはさらに、ローカルに使用可能なデバイスと通信するために他のタイプのＰＣＩｅエンドポイントとともに使用することができる。たとえば、ＰＣＩｅエンドポイントは、ＰＣＩｅエンドポイントに直接接続された記憶装置と通信するための小型コンポーネント・システム・インターフェース（ＳＣＳＩ）アダプタにすることができる。例示的な諸実施形態のメカニズムは、ＳＣＳＩ読み取り／書き込みに関するアドレス情報をＳＣＳＩアダプタ内にキャッシュするためのメカニズムを提供することにより、ＳＣＳＩアダプタのＤＭＡ読み取り待ち時間を短縮するために使用することができる。
【０１３６】
図１７は、例示的な一実施形態によりＳＣＳＩ読み取り動作を例示する模範的な図である。図１７に図示されている通り、デバイス・ドライバ１５１０が、システム・イメージまたはシステム・イメージで実行されるアプリケーションなどから記憶トランザクション要求を受信すると、デバイス・ドライバ１５１０は、デバイス・ドライバ・バッファ１５２４用のホスト・メモリを滞留させるためにデバイス・ドライバ・サービス１５４０を呼び出し、デバイス・ドライバ・バッファ１５２４にＤＭＡアドレスを割り当て、ＡＴＰＴ項目をプログラミングし、これらのＡＴＰＴ項目がキャッシュ可能であることを示すビットを使用可能にし、バッファ１５２４用のデバイス・ドライバ１５１０に未変換ＰＣＩｅアドレスを返す。
【０１３７】
デバイス・ドライバ１５１０は、コマンド・キュー・データ構造１５２０内にコマンド・キュー項目（ＣＱＥ）１５２２を作成する。ＣＱＥ１５２２は、ＳＣＳＩコマンドと、そのコマンドに関連するバッファ、たとえば、バッファ１５２４を指すポインタ、すなわち、未変換アドレスを含む。次に、デバイス・ドライバ１５１０は、着信要求が存在することをＰＣＩｅエンドポイント１５９０に示すドアベル値をドアベル記憶装置１５９２に書き込む。
【０１３８】
ドアベル記憶装置１５９２内にドアベル値が設定されたことに応答して、この場合もＳＣＳＩアダプタにすることができるＰＣＩｅエンドポイントは、コマンド・キュー・データ構造１５２０からＣＱＥ１５２２を取り出し、どのタイプのコマンドが要求されているかを判断する。この判断は、たとえば、ＣＱＥ１５２２のヘッダに提供されている値に基づいて行うことができる。ＣＱＥ１５２２が、ディスクから読み取るための読み取りコマンドであるＳＣＳＩコマンドを含む場合、ＰＣＩｅエンドポイント１５９０は、ディスク読み取り動作を発行し、続いて、ホスト・システム上のルート複合体１５５０がＣＱＥ１５２２内のポインタ、すなわち、未変換アドレスについてアドレス変換を実行することを要求するＡＴＳアドレス変換要求を発行する。ＰＣＩｅエンドポイント１５９０がアドレス変換の結果を受信すると、その結果はＰＣＩｅエンドポイント１５９０内のＣＱＥ１５９４のローカル・コピーに保管される。したがって、ＣＱＥ１５２２内のポインタのアドレス変換は、読み取り動作が実行されるのとほぼ同時に実行することができる。ＰＣＩｅエンドポイント１５９０に結合されたＳＣＳＩ装置にアクセスするために未変換アドレスが使用されるので、読み取り動作の一部としていかなる変換も行う必要はない。
【０１３９】
ＳＣＳＩ装置がＰＣＩｅエンドポイント１５９０にデータを返すと、ＰＣＩｅエンドポイント１５９０は、ＣＱＥ１５９４内のローカルに保管されキャッシュされた変換済みアドレス、すなわち、バッファ１５２４に関するシステム・バス・アドレスを使用して、データをホスト・システムに返すためのＤＭＡ動作を発行する。ＤＭＡで使用されるアドレスが変換済みアドレスであることを示すヘッダ・ビットが設定されたＤＭＡが実行される。その結果、ＡＴＰＴ１５６０を使用してルート複合体１５５０によっていかなる変換も実行されず、ＤＭＡをバッファ１５２４に通過させる。
【０１４０】
ＰＣＩｅエンドポイント１５９０は、ディスクからの読み取り動作が完了したことを示すために、応答キュー・データ構造１５３０に応答キュー項目（ＲＱＥ）１５３２をＤＭＡする。要求された場合、ＰＣＩｅエンドポイント１５９０は、割り込みを生成することもできる。
【０１４１】
デバイス・ドライバ１５１０がディスクからの読み取り動作のＲＱＥ１５３２を検索すると、デバイス・ドライバ１５１０は、データ・バッファ１５２４用のホスト・メモリを滞留解除するためにデバイス・ドライバ・サービス１５４０を呼び出す。デバイス・ドライバ・サービス１５４０はさらに、データ・バッファ１５２４に関するＤＭＡアドレスを解放し、データ・バッファ１５２４に関するＡＴＰＴ項目を消去する。ルート複合体１５５０はＰＣＩｅエンドポイント１５９０にＡＴＣ項目無効化要求を発行し、それにより、ＰＣＩｅエンドポイント１５９０は、消去されたＡＴＰＴ項目に対応するＡＴＣ項目、すなわち、ＣＱＥ１５９４のローカル・コピーを無効化する。ＡＴＣ無効化動作が完了すると、デバイス・ドライバ・サービス１５４０はデバイス・ドライバ１５１０に制御を返す。
【０１４２】
図１８〜図１９は、例示的な一実施形態によりＳＣＳＩ装置からデータを読み取るための模範的な動作の概要を示す流れ図を例示している。図１８に図示されている通り、動作は、デバイス・ドライバが記憶トランザクション要求を受信することから始まる（ステップ１６０２）。デバイス・ドライバは、ドライバ・サービス・バッファ用のホスト・メモリを滞留させるためにデバイス・ドライバ・サービスを呼び出し（ステップ１６０４）、デバイス・ドライバ・バッファにＤＭＡアドレスを割り当て（ステップ１６０６）、ＡＴＰＴ項目をプログラミングし、これらのＡＴＰＴ項目がキャッシュ可能であることを示すビットを使用可能にし（ステップ１６０８）、バッファに関する未変換ＰＣＩｅメモリ・アドレス、すなわち、ＤＭＡアドレスをデバイス・ドライバに返す（ステップ１６１０）。
【０１４３】
デバイス・ドライバはコマンド・キュー・データ構造内にコマンド・キュー項目（ＣＱＥ）を作成し（ステップ１６１２）、ＣＱＥは、ＳＣＳＩコマンドと、そのコマンドに関連するバッファを指すポインタを含む。次に、デバイス・ドライバはドアベル値をドアベル記憶装置に書き込む（ステップ１６１４）。ドアベル記憶装置内にドアベル値が設定されたことに応答して、ＰＣＩｅエンドポイントは、コマンド・キュー・データ構造からＣＱＥを取り出し（ステップ１６１６）、ＣＱＥ内のコマンドが読み取りコマンドであるかどうかを判断する（ステップ１６２０）。
【０１４４】
ＣＱＥが、ディスクから読み取るための読み取りコマンドであるＳＣＳＩコマンドを含む場合、ＰＣＩｅエンドポイントは、ディスク読み取り動作を発行し、続いて、ホスト・システム上のルート複合体１５５０がＣＱＥ内のポインタについてアドレス変換を実行することを要求するＡＴＳアドレス変換要求を発行する（ステップ１６２２）。ＰＣＩｅエンドポイントがアドレス変換の結果を受信すると、その結果はＰＣＩｅエンドポイント内のＣＱＥのローカル・コピーに保管される（ステップ１６２４）。
【０１４５】
ＳＣＳＩ装置がＰＣＩｅエンドポイントにデータを返すと、ＰＣＩｅエンドポイントは、ＣＱＥ内のローカルに保管されキャッシュされた変換済みアドレスを使用して、データをホスト・システムに返すためのＤＭＡ動作を発行する（ステップ１６２６）。ＤＭＡで使用されるアドレスが変換済みアドレスであることを示すヘッダ・ビットが設定されたＤＭＡが実行される（ステップ１６２８）。その結果、ＡＴＰＴを使用してルート複合体によっていかなる変換も実行されず、ＤＭＡをバッファに通過させる。
【０１４６】
ＰＣＩｅエンドポイントは、ディスクからの読み取り動作が完了したことを示すために、応答キュー・データ構造に応答キュー項目（ＲＱＥ）をＤＭＡする（ステップ１６３０）。要求された場合、ＰＣＩｅエンドポイントは、割り込みを生成することもできる。
【０１４７】
デバイス・ドライバがディスクからの読み取り動作のＲＱＥを検索すると、デバイス・ドライバは、メモリを滞留解除し、ＤＭＡアドレスを解放し、データ・バッファに関するＡＴＰＴ項目を消去するためにデバイス・ドライバ・サービスを呼び出す（ステップ１６３２）。デバイス・ドライバ・サービスはさらに、コマンド・キューに関するＤＭＡアドレスを解放し、コマンド・キューに関するＡＴＰＴ項目を消去する（ステップ１６３４）。ルート複合体はＰＣＩｅエンドポイントにＡＴＣ項目無効化要求を発行し、それにより、ＰＣＩｅエンドポイントは、消去されたＡＴＰＴ項目に対応するＡＴＣ項目を無効化する（ステップ１６３６）。ＡＴＣ無効化動作が完了すると、デバイス・ドライバ・サービスはバッファ用のホスト・メモリを滞留解除し（ステップ１６３８）、デバイス・ドライバ・サービスはデバイス・ドライバに制御を返す（ステップ１６４０）。
【０１４８】
ステップ１６２０に戻ると、図１９に図示されている通り、そのコマンドが読み取りコマンドではない場合、すなわち、そのコマンドがＳＣＳＩ書き込みコマンドである場合、エンドポイントは、ＣＱＥ内の情報に基づいてＳＣＳＩ装置にディスク・シーク動作を発行し、続いて、ＣＱＥ内のポインタについてルート複合体に送信されるアドレス変換要求を発行する（ステップ１６５０）。変換要求を受信するために要する時間は一般に、シーク動作を実行するために物理的ＳＣＳＩ装置が要する時間より短くなり、したがって、動作全体の待ち時間からアドレス変換時間を隠すことになる。
【０１４９】
エンドポイントがルート複合体から変換済みアドレス（複数も可）を受信すると、エンドポイントは、ＣＱＥのローカル・コピーにこれらの変換済みアドレス（複数も可）を保管する（ステップ１６５２）。次に、エンドポイントは、変換済みアドレスがＤＭＡ要求で使用されることを示すようにＤＭＡヘッダを設定し、ＣＱＥのローカル・コピー内のローカルにキャッシュされた変換済みアドレス（複数も可）を使用してシステム・メモリ内のデータ・バッファから書き込むべきデータを取得するためにＤＭＡ動作を実行する（ステップ１６５４）。次に、エンドポイントは、前のディスク・シーク動作が完了したことをＳＣＳＩ装置が示すのを待つ（ステップ１６５６）。ディスク・シーク動作が完了したことを示すＳＣＳＩ装置からのメッセージに応答して、エンドポイントは、前にＤＭＡしたデータをＳＣＳＩ装置に転送する（ステップ１６５８）。次に、動作は上述のステップ１６３０に戻る。
【０１５０】
したがって、例示的な諸実施形態は、デバイス・ドライバおよびデバイス・ドライバ・サービスに対してこの通信の役割を分散するように、ネットワーク・アダプタ、ＳＣＳＩアダプタ、ＩｎｆｉｎｉＢａｎｄ（Ｒ）アダプタなどを含む種々のタイプのＰＣＩｅエンドポイントとの通信のためのメカニズムを提供する。例示的な諸実施形態は、使用されるＰＣＩｅエンドポイントのタイプに応じて異なる方法でこれらの様々なタイプのＰＣＩｅエンドポイントにおける変換済みアドレスのキャッシュの使用を容易にする。これらの変換済みアドレスのキャッシュにより、ホスト・システムのルート複合体においてアドレス変換動作を行う必要なしに、ＰＣＩｅエンドポイントはホスト・システムのキュー、バッファ、およびシステム・メモリに直接アクセスすることができる。
【０１５１】
例示的な諸実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェアとソフトウェアの両方の要素を含む実施形態の形を取ることができることを認識されたい。模範的な一実施形態では、例示的な諸実施形態のメカニズムは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアで実現される。
【０１５２】
さらに、例示的な諸実施形態は、コンピュータまたは任意の命令実行システムにより使用するためのまたはそれに関連するプログラム・コードを提供するコンピュータで使用可能な媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラムの形を取ることができる。この説明のため、コンピュータで使用可能な媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスにより使用するためのまたはそれらに関連するプログラムを収容、保管、伝達、伝搬、または転送することができる任意の装置にすることができる。
【０１５３】
この媒体は、電子、磁気、光、電磁、赤外線、または半導体システム（あるいは装置またはデバイス）もしくは伝搬媒体にすることができる。コンピュータ可読媒体の例としては、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛性磁気ディスク、および光ディスクを含む。光ディスクの現在の例としては、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクト・ディスク読み取り／書き込み（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【０１５４】
プログラム・コードの保管または実行あるいはその両方に適したデータ処理システムは、システム・バスによりメモリ・エレメントに直接または間接的に結合された少なくとも１つのプロセッサを含むことになる。メモリ・エレメントとしては、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置、ならびに、実行中に大容量記憶装置からコードを検索しなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶を可能にするキャッシュ・メモリを含むことができる。
【０１５５】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接または介在する入出力コントローラを介して、システムに結合することができる。また、データ処理システムが介在する私設網または公衆網を介して他のデータ処理システムまたはリモート・プリンタあるいは記憶装置に結合された状態になるように、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット（登録商標）・カードは、現在使用可能なタイプのネットワーク・アダプタのうちのいくつかに過ぎない。
【０１５６】
本発明の説明は、例示および記述のために提示されたものであり、網羅するためあるいは開示された形の本発明に限定するためのものではない。多くの変更例および変形例は当業者にとって自明なものになるであろう。実施形態は、実際の適用例である本発明の原理を最もよく説明し、他の当業者が企図された特定の用途に適した様々な変更例を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【図面の簡単な説明】
【０１５７】
【図１】ＡＴＰＴおよびＰＣＩエクスプレス（ＰＣＩｅ）通信プロトコルを使用してＤＭＡ動作を実行するための従来のメカニズムを例示する模範的な図である。
【図２】例示的な諸実施形態の模範的な諸態様を実現可能な分散データ処理環境を例示する模範的な図である。
【図３】例示的な諸実施形態の模範的な諸態様を実現可能なデータ処理装置を例示する模範的な図である。
【図４】デバイス・ドライバおよびデバイス・ドライバ・サービスに関する例示的な一実施形態の動作を例示する模範的な図である。
【図５】例示的な一実施形態によりＤＭＡ動作による変換済みおよび未変換ＰＣＩｅアドレスの処理を例示する模範的な図である。
【図６】例示的な一実施形態によりＤＭＡアドレスに関するＡＴＰＴ項目を初期設定するための模範的な動作の概要を示す流れ図である。
【図７】例示的な一実施形態によりＤＭＡアドレスに関するＡＴＰＴ項目およびＡＴＣ項目を無効化するための模範的な動作の概要を示す流れ図である。
【図８】例示的な一実施形態によりＤＭＡ動作において変換済みおよび未変換ＰＣＩｅアドレスを処理するための模範的な動作の概要を示す流れ図である。
【図９】ＰＣＩｅエンドポイント・キューに関するアドレス変換をキャッシュするための例示的な諸実施形態の実現例を例示する図である。
【図１０】例示的な一実施形態によりホスト・システムとＰＣＩｅエンドポイントとの間の通信に関するキュー・データ構造を初期設定するための模範的な動作の概要を示す流れ図である。
【図１１】「コマンド・キュー項目」またはＣＱＥというキュー項目を使用してＰＣＩｅエンドポイントからホスト・システムのバッファにデータを受信するための動作を例示する模範的な図である。
【図１２】ＣＱＥを使用してＰＣＩｅエンドポイントを介してデータを送信するための動作を例示する模範的な図である。
【図１３】例示的な一実施形態によりネットワーク・アダプタの受信動作に関する模範的な動作の概要を示す流れ図である。
【図１４】例示的な一実施形態によりネットワーク・アダプタの受信動作に関する模範的な動作の概要を示す流れ図である。
【図１５】例示的な一実施形態によりネットワーク・アダプタの送信動作に関する模範的な動作の概要を示す流れ図である。
【図１６】例示的な一実施形態によりネットワーク・アダプタの送信動作に関する模範的な動作の概要を示す流れ図である。
【図１７】例示的な一実施形態によりＳＣＳＩ読み取り動作を例示する模範的な図である。
【図１８】例示的な一実施形態によりＳＣＳＩ装置からデータを読み取るための模範的な動作の概要を示す流れ図である。
【図１９】例示的な一実施形態によりＳＣＳＩ装置からデータを読み取るための模範的な動作の概要を示す流れ図である。
【符号の説明】
【０１５８】
４１０：ロジカル・パーティション
４２０：システム・イメージ
４２２：応答キュー
４２４：応答キュー項目（ＲＱＥ）
４２６：ドアベル記憶装置
４３０：ユーザ・アプリケーション／ライブラリ
４４０：ファイル・システム
４５０：デバイス・ドライバ
４６０：入出力（Ｉ／Ｏ）仮想化仲介（ＶＩ）
４７０：デバイス・ドライバ・サービス
４８０：ＰＣＩｅルート複合体
４８２：アドレス変換および保護テーブル（ＡＴＰＴ）
４８５：ＰＣＩファブリック
４９０：ＰＣＩｅエンドポイント
４９２：仮想機能
４９４：アドレス変換キャッシュ（ＡＴＣ）
４９６：ドアベル記憶装置
４９８：ＰＣＩｅエンドポイントのローカル・コマンド・キュー
４９９：コマンド・キュー項目（ＣＱＥ）
【図１】
2008102928.tif 000003
【図２】
2008102928.tif 000004
【図３】
2008102928.tif 000005
【図４】
2008102928.tif 000006
【図５】
2008102928.tif 000007
【図６】
2008102928.tif 000008
【図７】
2008102928.tif 000009
【図８】
2008102928.tif 000010
【図９】
2008102928.tif 000011
【図１０】
2008102928.tif 000012
【図１１】
2008102928.tif 000013
【図１２】
2008102928.tif 000014
【図１３】
2008102928.tif 000015
【図１４】
2008102928.tif 000016
【図１５】
2008102928.tif 000017
【図１６】
2008102928.tif 000018
【図１７】
2008102928.tif 000019
【図１８】
2008102928.tif 000020
【図１９】
2008102928.tif 000021