(57)【要約】【課題】性能を向上させ、データを転送するために必要なメモリの容量を減少させるのに必要とされる、ページが滞留されたままの時間を短くする方法を提供すること。【解決手段】一実施形態中で、データの転送を要求するコマンドをアダプタでイニシエータから受け取り、そのデータをイニシエータからアダプタへと転送し、そのデータをアダプタに転送した後でかつアダプタがコマンドに基づくプロセスを完了する以前にそのコマンドが正常に完了したという通知でイニシエータに対して応答する方法、装置、システム、および信号保持媒体が提供される。【選択図】図１
2004326782.tif 000002
【特許請求の範囲】
【請求項１】
データの転送を要求するコマンドをアダプタでイニシエータから受け取るステップと、
前記データを前記イニシエータから前記アダプタへと転送するステップと、
前記データを前記アダプタに転送した後でかつ前記アダプタが前記コマンドに基づくプロセスを完了する以前に、前記コマンドが正常に完了したという通知で前記イニシエータに対して応答するステップと
を含む方法。
【請求項２】
前記アダプタが、前記コマンドに基づく前記プロセスを完了した後、前記コマンドが正常に完了したという明示的な通知で前記イニシエータに対して応答するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記データが、前記コマンドに関連する接続に割り振られる予約域内に収まるかどうかを判定するステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記データを保持するために前記アダプタ中に少なくとも１つのページを割り振るステップと、
前記割り振るステップが完了するまで前記転送するステップをブロックするステップと
をさらに含む、請求項１に記載の方法。
【請求項５】
前記データを前記アダプタから転送した後、前記コマンドが正常に完了したという明示的な通知を前記イニシエータに報告するステップをさらに含む、請求項１に記載の方法。
【請求項６】
イニシエータから複数の接続上の複数のコマンドをアダプタで受け取る手段であって、前記複数のコマンドがそれぞれのデータの転送を要求し、前記複数のコマンドが受取順序を有する手段と、
少なくとも一部の前記データを順不同で前記イニシエータから前記アダプタへと転送する手段と、
前記データを前記アダプタに転送した後でかつ前記コマンドに基づくプロセスを完了する前に、前記コマンドが正常に完了したという通知を前記イニシエータに報告する手段と
を備える装置。
【請求項７】
前記データのうちどれを順不同に転送すべきかを判定する手段をさらに備える、請求項６に記載の装置。
【請求項８】
前記データのすべてを前記アダプタから順次転送する手段をさらに備える、請求項６に記載の装置。
【請求項９】
前記それぞれのデータを前記アダプタから転送した後、それぞれのコマンドが正常に完了したという通知を前記イニシエータに報告する手段をさらに備える、請求項８に記載の装置。
【請求項１０】
前記データを保持するために前記アダプタ中に少なくとも１つのページを割り振る手段と、
前記割振りが完了するまで前記転送する手段をブロックする手段と
をさらに備える、請求項６に記載の装置。
【請求項１１】
前記複数の接続中の前記複数のコマンドのラウンド・ロビン式の処理をする手段をさらに備える、請求項６に記載の装置。
【請求項１２】
命令でコード化される信号保持媒体であって、前記命令が、実行されるときに、
データの転送を要求するコマンドをイニシエータから受け取るステップと、
前記データを前記イニシエータからアダプタへと転送するステップと、
前記転送するステップを前記イニシエータから受け取る複数のコマンドの順序に対して順不同で実施すべきかどうかを判定するステップと、
前記データを前記アダプタに転送した後でかつ前記アダプタが前記コマンドに基づくプロセスを完了する前に、前記コマンドが正常に完了したという通知を前記イニシエータに報告するステップと、が実行されることになる、信号保持媒体。
【請求項１３】
前記データが、前記コマンドに関連する接続に割り振られた予約域内に収まるかどうかを判定するステップをさらに含む、請求項１２に記載の信号保持媒体。
【請求項１４】
前記データを保持するために前記アダプタ中に少なくとも１つのページを割り振るステップと、
前記割り振るステップが完了するまで前記転送するステップをブロックするステップと
をさらに含む、請求項１２に記載の信号保持媒体。
【請求項１５】
前記プロセスを完了した後、前記コマンドが正常に完了したという通知を前記イニシエータに報告するステップをさらに含む、請求項１２に記載の信号保持媒体。
【請求項１６】
前記暗黙の通知が、
キュー上の次のエントリに末尾ポインタを動かすステップであって、前記キューが前記コマンドを記憶するステップをさらに含む、請求項１２に記載の信号保持媒体。
【請求項１７】
前記判定するステップが、
順不同の転送がデッドロック状態を引き起こすことになるかどうかを判定するステップをさらに含む、請求項１２に記載の信号保持媒体。
【請求項１８】
データをイニシエータから入出力アダプタへと転送するデータ・フェッチ・エンジンと、
前記データの転送を要求するコマンドを前記イニシエータから受け取り、
前記コマンドが、即時転送を要求するかそれとも非即時転送を要求するかを判定し、
前記コマンドが即時転送を要求するときには、前記イニシエータから前記入出力アダプタへの前記データの前記転送の後であるが前記アダプタが前記コマンドに基づくプロセスを完了する前に、前記コマンドが完了したという通知を前記イニシエータに報告し、
前記コマンドが非即時転送を要求するときには、前記イニシエータから前記入出力アダプタへの前記データの前記転送の前に、前記コマンドが完了したという前記通知を前記イニシエータに報告する
コマンド・フェッチ・エンジンと
を備える入出力アダプタ。
【請求項１９】
コマンド・キューであって、前記コマンド・キューが前記コマンドを前記イニシエータから受け取り、前記コマンド・フェッチ・エンジンが、さらに前記コマンド・キュー上の次のエントリに末尾ポインタを動かすことによって前記暗黙の通知を報告するコマンド・キューをさらに備える、請求項１８に記載の入出力アダプタ。
【請求項２０】
前記データ・フェッチ・エンジンがさらに、フェッチする必要があるデータを有する関連するコマンドを探しながら複数の接続を通ってラウンド・ロビン式に進む、請求項１８に記載の入出力アダプタ。
【請求項２１】
少なくとも１つのページを滞留し、データの転送を要求するコマンドを送り、前記コマンドが完了したという通知を受け取った後に、前記少なくとも１つのページからピンを外すイニシエータと、
前記コマンドを受け取り、前記イニシエータから前記アダプタへの前記データの転送後であるが前記アダプタが前記コマンドに基づくプロセスを完了する前に、前記通知を報告するアダプタと
を備えるシステム。
【請求項２２】
前記通知が、コマンド・キュー上の次のエントリに末尾ポインタを動かすことを含む、請求項２１に記載のシステム。
【請求項２３】
前記アダプタがさらに、前記コマンドに基づく前記プロセスを完了した後、コマンド完了通知を前記イニシエータに送る、請求項２１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデータの転送に関し、より詳細にはアダプタへのデータの転送を効率的に制御することに関する。
【背景技術】
【０００２】
コンピュータ・システムは、そのメモリ中にデータを記憶する。有用な仕事を行うために、コンピュータ・システムは、このデータを処理し、このデータに対して操作を実施する。コンピュータ・システムには、ただ一つの無制限に大容量の非常に高速なメモリがあり、このメモリ中で個々のデータがどれもコンピュータ・システムにとって直ちに利用可能になることが理想的である。実際には、非常に高速なメモリはまた非常に高価でもあるので、このようなことが可能にはなってきていない。
【０００３】
したがって、コンピュータには、一般にメモリの階層（またはレベル）があり、階層の各レベルは、前のレベルより容量は大きくなっているが、単位コスト当たりのコストは安いが、、速度はより遅くなっている。これら階層のレベルは、互いのサブセットを形成できるようになっており、すなわち、あるレベル中のすべてのデータをその下のレベル中にも見出せるようになっており、その下層（下位）のレベル中のすべてのデータも、さらにその下のレベル中で見出せるようになっており、以下、階層の最下部に到達するまで同様になっている。階層メモリ構造が導入する性能上の不利益を最小限にするためには、最速メモリ中に最も多用されているデータを記憶し、最低速のメモリ中に最も使用頻度の少ないデータを記憶することが望ましい。
【０００４】
例えば、コンピュータ・システムが、以下のものを含むことがある。
１）最も多用されているデータを格納する、非常に低容量、非常に高速、かつ非常に高価なキャッシュ、
２）キャッシュ中のすべてのデータに加えて次に多用されているデータを格納する、低容量、高速、かつそれほど高価ではないＲＡＭ、
３）コンピュータ・システム中のすべてのデータを格納する複数の大容量、低速、かつ安価なディスク・ドライブ。
【０００５】
コンピュータ・システムは、データが必要になると、まずキャッシュ中を調べる。データがキャッシュにない場合、コンピュータ・システムは、ＲＡＭやディスク・ドライブなど、下層（下位）のメモリ・レベルからデータを取り出し、そのデータをキャッシュに入れる。キャッシュがすでにデータでいっぱいの場合、コンピュータ・システムが、キャッシュからどのデータを取り除いて、現在必要となっているデータのための記憶場所を空けるかを決定する必要がある。効率を上げるために、データをページと呼ぶ単位で記憶レベル間で移動させることができる。レベル間でデータを移動させるプロセスをページングと呼ぶ。
【０００６】
レベルを介してどのページを戻すかを選択するために使用するアルゴリズムのことを置換アルゴリズムと呼ぶ。しばしば、「最低使用頻度（least -recently-used）」アルゴリズムを使用してページの移動を管理する。すなわち、最近参照されたことのないページが、最初に置き換えられる。それ故、あるページが長期間にわたって使用されていない場合、そのページは、記憶階層中を移動して最低速レベルに至ることになる。したがって、最高使用頻度データは、すぐにアクセスできる準備の整った高速の主記憶装置中に格納されるが、使用頻度の少ないデータは、記憶階層中を移動して、しばしば二次記憶と呼ばれる低速側の記憶装置へと向かう。
【０００７】
最低使用頻度アルゴリズムは、多くのページング状況にとって許容できるものである。しかし、ページの使用履歴とは無関係に、あるページ上のあるデータが、直ちにアクセスするために主記憶装置中で利用可能でなければならないという状況が生ずる。これらのページへのアクセスは、プロセッサ、またはＩ／Ｏ装置もしくはネットワークによってなされる参照の結果として必要になることもある。例えば、高速Ｉ／Ｏ装置またはネットワーク用のデータ・バッファは、主記憶装置中に配置されなければならない。
【０００８】
主記憶装置中で、あるページの存在を保証する技術のことをピニング（pinning）と呼ぶ。ページが滞留（pin）されると、主記憶装置上のある区域がそのページ用に確保され、そのページは二次記憶装置への移動が許されなくなる。この確保された記憶装置中で滞留されたページを置き換えようとするどのような試みもブロックされる。メモリをピニングすることは、その他のシステム動作に利用可能なメモリが少なくなり、その結果ページング活動が増加することから性能の低下がもたらされるのでコストがかかる。したがって、性能を低下させないように、またＩ／Ｏ装置もしくはネットワークへまたはこれらからデータを転送するのに必要なシステム・メモリの容量を低下させるために、可能な限り最短の期間だけに限ってページを滞留することが望ましい。
【０００９】
それにもかかわらず、典型的なシステムでデータ伝送を実施するために行われ得る一連の動作の以下の例に見られるように、現行のシステムでは、長期間にわたって滞留されるページを保持しなければならない。
ａ．システムが、転送すべきデータを格納するメモリ・ロケーションを滞留する。
ｂ．システムが、コマンドを構築し、転送すべきデータを要求するアダプタにコマンドを送る。
ｃ．アダプタが、データをフェッチし、そのデータをアダプタ中のバッファに入れる。
ｄ．アダプタが、そのデータをネットワーク上に送信する。
ｅ．アダプタが、そのネットワーク上で、肯定応答を待ち、それを受信する。
ｆ．アダプタが、そのコマンドが完了したことを示す応答をシステムに対して送る。
ｇ．システムが、その滞留されたメモリを解放する。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
性能を向上させ、データを転送するために必要なメモリの容量を減少させるのに必要とされるのは、ページが滞留されたままの時間を短くする方法である。前述の性能上の問題を、システムがメモリ・ロケーションを滞留するという文脈で説明してきたが、性能上の問題については、性能が課題になるどのようなシナリオにも適用することができる。
【課題を解決するための手段】
【００１１】
一実施形態中では、データの転送を要求するコマンドをアダプタでイニシエータから受け取り、データをそのイニシエータからアダプタへと転送し、アダプタにデータを転送した後でかつアダプタがコマンドに基づくプロセスを完了する前に、コマンドが正常に完了したという通知でそのイニシエータに対して応答する方法が提供される。
【００１２】
他の実施形態中では、イニシエータから複数の接続上の複数のコマンドをアダプタで受け取る手段であって、複数のコマンドがそれぞれのデータの転送を要求し、複数のコマンドが受取順序を有する手段と、少なくとも一部のデータを順不同（out-of-order）でイニシエータからアダプタへと転送する手段と、アダプタにデータを転送した後でかつコマンドに基づくプロセスを完了する前に、コマンドが正常に完了したという暗黙の通知をイニシエータに報告する手段とを備える装置が提供される。
【００１３】
さらに他の実施形態中では、命令でコード化される信号保持媒体が提供され、これらの命令は、実行されるときに、データの転送を要求するコマンドをイニシエータから受け取るステップと、データをイニシエータからアダプタへと転送するステップと、イニシエータから受け取る複数のコマンドの順序に対して順不同で転送を実施すべきかどうかを判定するステップと、そのデータをアダプタに転送した後でかつアダプタがコマンドに基づくプロセスを完了する前に、コマンドが正常に完了したという暗黙の通知をイニシエータに報告するステップとを含む。
【００１４】
さらに他の実施形態では、データをイニシエータから入出力アダプタへと転送するデータ・フェッチ・エンジンと、データの転送を要求するコマンドをイニシエータから受け取り、コマンドが即時転送を要求するかそれとも非即時転送を要求するかを判定し、コマンドが即時転送を要求するときには、イニシエータから入出力アダプタへのデータの転送の後であるがアダプタがコマンドに基づくプロセスを完了する前に、そのコマンドが完了したという暗黙の通知をイニシエータに報告し、コマンドが非即時転送を要求するときには、イニシエータから入出力アダプタへのデータの転送の前に、コマンドが完了したという暗黙の通知をイニシエータに報告するコマンド・フェッチ・エンジンとを備える入出力アダプタが提供される。
【００１５】
さらに他の実施形態では、少なくとも１つのページを滞留し、データの転送を要求するコマンドを送り、そのコマンドが完了したという暗黙の通知を受け取った後に、その少なくとも１つのページからピンを外すイニシエータと、コマンドを受け取り、イニシエータからアダプタへのデータの転送後であるがアダプタがそのコマンドに基づくプロセスを完了する前に、暗黙の通知を報告するアダプタとを備えるシステムが提供される。
【発明の効果】
【００１６】
このようにして、様々な実施形態において、データ転送の性能を向上させることができ、このデータ転送を行うのに必要なメモリ容量を減少させることができる。
【発明を実施するための最良の形態】
【００１７】
図１に、本発明の一実施形態を実装する一例のシステム１００のブロック図を示す。システム１００は、Ｉ／Ｏアダプタ１０４にバス１０８を介して接続されたイニシエータ１０２を含む。このＩ／Ｏアダプタ１０４は、さらにネットワーク１０６に接続されている。１つのイニシエータ１０２、１つのＩ／Ｏアダプタ１０４、および１つのネットワーク１０６だけを示したが、その他の実施形態では、任意数または任意数の組合せもあり得る。
【００１８】
イニシエータ１０２は、プロセッサ１２０と、バス１２６を介して接続された記憶装置１２５を含む。プロセッサ１２０は、ＣＩＳＣ（Complex Instruction Set Computing複雑命令セット・コンピューティング）、ＲＩＳＣ（ReducedInstruction Set Computing縮小命令セット・コンピューティング）、ＶＬＩＷ（Very Long Instruction Word超長命令語）、ハイブリッド・アーキテクチャなど、任意タイプのアーキテクチャによる中央演算処理装置を示すが、適切なプロセッサならどれでも使用することができる。プロセッサ１２０は、命令を実行し、イニシエータ全体の動作を制御する、イニシエータ１０２の一部分を含む。図１に示してはいないが、プロセッサ１２０は、一般にメモリ中のデータ記憶域とプログラム記憶域を管理し、イニシエータ１０２の様々な部分の間でデータ情報およびその他の情報を転送する制御装置を含む。プロセッサ１２０は、記憶装置１２５またはＩ／Ｏアダプタ１０４あるいはその両方からコードおよびデータを読み取り、またはそこにコードおよびデータを記憶し、あるいはその両方を行う。
【００１９】
イニシエータ１０２を、単一プロセッサ１２０と単一バス１２６だけを含むように示しているが、本発明は、一部またはすべてが異なる機能を異なる方法で実施する複数のプロセッサと複数のバスを有することもあるイニシエータに対しても同様に適用される。
【００２０】
記憶装置１２５は、データを記憶する１つまたは複数のメカニズムを表す。例えば、記憶装置１２５には、ＲＯＭ、ＲＡＭ、磁気ディスク記憶媒体、光記憶媒体、フラッシュ・メモリ装置、またはその他のマシン読取り可能媒体、あるいはこれらの組合せが含まれ得る。他の実施形態では、適切な任意タイプの記憶装置を使用することができる。ただ１つの記憶装置１２５しか示していないが、複数の記憶装置および複数タイプの記憶装置が存在しうる。さらに、イニシエータ１０２が記憶装置１２５を含むように描いているが、記憶装置を、他のイニシエータとの間で分散させることもできる。記憶装置１２５は、データ転送コマンドをＩ／Ｏアダプタ１０４に送り、記憶装置１２５中のデータのページが滞留され、ピンを外すように要求できるデータ転送制御装置１２７を含む。
【００２１】
バス１２６は、１つまたは複数のバス、例えばＰＣＩ（PeripheralComponent Interconnect周辺部品相互接続）、ＩＳＡ（Industry Standard Architecture産業標準構成バス）、Ｘ−Ｂｕｓ、ＥＩＳＡ（ExtendedIndustry Standard Architecture拡張ＩＳＡ）、その他任意の適切なバス、または（バス制御装置とも呼ばれる）ブリッジ、あるいはこれらの組合せを表す。
【００２２】
イニシエータ１０２は、パーソナル・コンピュータなど、適した任意のハードウェアまたはソフトウェアあるいはその両方を使用して実装することができる。ポータブル・コンピュータ、ラップトップ・コンピュータまたはノートブック・コンピュータ、ＰＤＡ（Personal Digital Assistant携帯型情報端末）、ポケット・コンピュータ、電話、ページャ、自動車、電子会議システム、アプライアンス、およびメインフレーム・コンピュータが、イニシエータ１０２を構成することが可能なその他の例である。
【００２３】
Ｉ／Ｏアダプタ１０４は、プロセッサ１３０と、バス１３７を介して接続された記憶装置１３５とを含む。このプロセッサ１３０、記憶装置１３５、およびバス１３７は、前述のプロセッサ１２０、記憶装置１２５、およびバス１２６に類似のものでよい。他の実施形態では、プロセッサ１３０は存在しない。Ｉ／Ｏアダプタ１０４は、イニシエータ１０２と別に実装されるように示しているが、他の実施形態では、これらは一緒に実装される。例えば、一実施形態では、Ｉ／Ｏアダプタ１０４は、イニシエータ１０２内のカードのこともある。
【００２４】
記憶装置１３５は、コマンド・フェッチ・エンジン１４０、データ・フェッチ・エンジン１４５、およびコマンド・キュー１４６を含む。一実施形態では、コマンド・フェッチ・エンジン１４０およびデータ・フェッチ・エンジン１４５は、図２〜図７を参照して以下でさらに説明するように、プロセッサ１３０上で実行して本発明の機能を実行することができる命令を含む。他の実施形態では、コマンド・フェッチ・エンジン１４０またはデータ・フェッチ・エンジン１４５あるいはその両方の一部またはすべての機能が、プロセッサ・ベースのシステムの代わりにまたはそれに追加して、ハードウェアを介して実行される。
【００２５】
コマンド・キュー１４６を使用して、イニシエータ１０２から受け取るべきコマンド・ブロックのアドレスまたはロケーションを記憶する。コマンド・キュー１４６には、コマンド・キューの先頭とコマンド・キューの末尾が含まれ得る。コマンド・キューの先頭とは、イニシエータ１０２が次のコマンド・ブロックのアドレスを書き込むコマンド・キュー１４６中のロケーションである。コマンド・キューの末尾とは、コマンド・フェッチ・エンジン１４０が次のコマンド・ブロックをフェッチする、イニシエータ１０２中のアドレスを指定する、コマンド・キュー１４６中のロケーションである。コマンド・キュー１４６については、図２を参照して以下でさらに説明する。
【００２６】
コマンド・フェッチ・エンジン１４０は、イニシエータ１０２からコマンドをフェッチする。イニシエータ１０２は、ラッピング（wrapping）先頭／末尾コマンド・キュー１４６を使用して、コマンドのロケーションをイニシエータ１０２からＩ／Ｏアダプタ１０４へと伝える。一実施形態では、イニシエータ１０２は、コマンド・キュー１４６がオーバランしてコマンド損失をもたらすことがないよう保証するのに必要な減速（throttle）を行う。イニシエータ１０２は、コマンド・ブロックのロケーション（アドレス）をコマンド・キューの先頭に書き込み、次いでコマンド・キュー先頭ポインタを動かす（bump）。コマンド・フェッチ・エンジン１４０は、先頭ポインタと末尾ポインタが異なることを知ると、コマンド・キュー末尾ポインタが指すコマンド・ブロックをフェッチする。コマンド・ブロックがこのコマンドには即時データ・フェッチが必要なことを示す場合、コマンド・フェッチ・エンジン１４０は、即時データ・フェッチ必要変数（immediatedata fetch needed variable）および即時データ・フェッチ接続変数（immediate data fetch connectionvariable）をセットし、データ・フェッチ・エンジン１４５が即時データ・フェッチ必要変数をクリアするのを待つ。次いでコマンド・フェッチ・エンジン１４０は、コマンド・キュー末尾ポインタを動かす。これは、コマンドのフェッチが完了したことをイニシエータ１０２に対して示す役割を果たし、また、即時データ・フェッチを使用したコマンドに対するコマンド完了の暗黙の通知としての役割も果たす。イニシエータ１０２は、コマンド・キュー末尾ポインタ値が変更されるときはいつでも、ポーリングすることによって、またはＩ／Ｏアダプタ１０４による割込みを生成することによって、様々な実施形態で、コマンド・キュー末尾ポインタの値が変更されたことを知る。コマンド・フェッチ・エンジン１４０については、図２を参照して以下でさらに説明する。
【００２７】
データ・フェッチ・エンジン１４５は、イニシエータ１０２からデータをフェッチし、その結果、データをネットワーク１０６に送信することができるようになる。一実施形態では、データをネットワーク１０６に送信することが、コマンドに基づくプロセスの一例である。データ・フェッチ・エンジン１４５は、接続ごとのパラメータを使用して、デッドロックの回避、枯渇の回避、資源の優先順位付け、および公平性を提供する。様々な実施形態において、パラメータの一部またはすべてを調整して、所与のアプリケーションの必要性を満たす様々な特性を提供することができ、また１つの設計で、ただ単にパラメータを調整することによって、多くの必要性を満たせるようにすることができる。データ・フェッチ・エンジン１４５は、フェッチする必要のあるデータを有するコマンド・ブロックを探しながら、すべての接続をラウンド・ロビン式に進む。一実施形態では、接続は、InfiniBandアダプタ中のキュー・ペア接続である。他の実施形態では、接続は、装置など２つのエンドポイント間の論理接続である。
【００２８】
データ・フェッチ・エンジン１４５は、かかるコマンド・ブロックを見出すと、接続ごとのパラメータを調べてデータ転送が制限をどれでも超過することがあるかどうかを判定する。これらの制限には、割り振られるデータ・ページの最大数量、およびこのラウンドですでに転送されたデータ・ページ数が含まれる。転送が許容可能な場合、データ・フェッチ・エンジン１４５は、（要求を完了することによって十分なページが利用可能になるまで、必要ならデータ転送をブロックして）要求を保持するのに十分なデータ・ページを割り振り、転送を実施する。転送が許容できない場合、データ・フェッチ・エンジン１４５は、次の接続へと進む。許容できないと思われた要求は、制限が改善するとき、例えば後続ラウンドで、または接続が保持するデータ・ページの一部がこのコマンドが完了したために解放されるときに満たされる。
【００２９】
あらゆる完了したデータ・フェッチ要求の後に、あるいは現在満足させることができる要求がないことが分かると、次いでデータ・フェッチ・エンジン１４５は、検査して、即時データ・フェッチを必要とする要求があるかどうかを調べる。データ・フェッチ・エンジン１４５は、即時データ・フェッチが完了するまでコマンド・フェッチ・エンジン１４０がブロックされるので非常に頻繁に検査することになる。保留中の即時データ・フェッチ要求がある場合、データ・フェッチ・エンジン１４５は、一連の検査を実施して、行うべき正しい動作を決定する。これらの検査については、図４および図５を参照して、以下で詳細に説明する。
【００３０】
検査の結果に応じて、データ・フェッチ・エンジン１４５は、転送を即時に実施し、同じ接続について異なる転送を実施し（これによって一部のデッドロック・シナリオがなくなる）、あるいは、これらを両方ともしないで正常な処理を再開する。所与の接続には、即時データ・フェッチも、通常のデータ・フェッチも要求するコマンド・ブロックがあり得るので、データ・フェッチ・エンジン１４５が、所与の接続に対する要求を順不同に実施して、コマンド・フェッチ・エンジンがブロックされる時間を制限することができる。一実施形態では、ネットワーク１０６上の要求を順次実行しなければならないので、資源（この場合にはデータ・ページ）を順不同に割り振ることによって、デッドロックの可能性がもたらされる。このデッドロックを防止するために、またすべての要求についてデータを順次フェッチする場合に生ずるはずの性能低下を回避するために、接続ごとのパラメータを使用して、イニシエータ１０２とＩ／Ｏアダプタ１０４の間でできるだけ多くの順不同のデータ転送を最大限に実施する。データ・フェッチ・エンジン１４５については、図３〜図７を参照して以下でさらに説明する。
【００３１】
ネットワーク１０６は、どのような適切なネットワークまたはネットワークの組合せでもよく、Ｉ／Ｏアダプタ１０４へと情報を伝えるのに適したどのような適切なプロトコルをサポートすることもできる。様々な実施形態では、ネットワーク１０６は、Ｉ／Ｏアダプタ１０４に直接または間接に接続された記憶装置または記憶装置の組合せとしてもよい。一実施形態では、ネットワーク１０６は、InfiniBandをサポートすることができる。一実施形態では、ネットワーク１０６は、無線通信をサポートすることもできる。他の実施形態では、ネットワーク１０６は、電話回線やケーブルなどの有線通信をサポートすることもできる。他の実施形態では、ネットワーク１０６は、イーサネット（Ｒ）ＩＥＥＥ（Instituteof Electrical and Electronics Engineers米国電気電子技術者協会）８０２．３ｘ仕様をサポートすることもできる。他の実施形態では、ネットワーク１０６はインターネットでもよく、またＩＰ（InternetProtocolインターネット・プロトコル）をサポートすることもできる。他の実施形態では、ネットワーク１０６は、ＬＡＮ（local area networkローカル・エリア・ネットワーク）またはＷＡＮ（widearea network広域ネットワーク）でもよい。他の実施形態では、ネットワーク１０６は、ホットスポット・サービス・プロバイダ・ネットワークでもよい。他の実施形態では、ネットワーク１０６は、イントラネットでもよい。他の実施形態では、ネットワーク１０６は、ＧＰＲＳ（GeneralPacket Radio Service汎用パケット無線システム）ネットワークでもよい。他の実施形態では、ネットワーク１０６は、適切なセルラ・データ・ネットワ−クまたはセル・ベース無線ネットワーク技術でもよい。他の実施形態では、ネットワーク１０６は、ＩＥＥＥ８０２．１１Ｂ無線ネットワークでもよい。さらに他の実施形態では、ネットワーク１０６は、適切などのようなネットワークでも、またネットワークの組合せでもよい。１つのネットワーク１０６を示したが、その他の実施形態では、（同種または異種の）任意数のネットワークが存在してもよい。
【００３２】
図１に示すハードウェアおよびソフトウェアは、特定のアプリケーションに対して変化してもよく、また図に示したものよりも多い、または少ない要素を含むことができる。例えば、オーディオ・アダプタや、ＥＰＲＯＭ（Erasable Programmable Read-Only Memory消去可能プログラマブル読出し専用メモリ）プログラミング装置などのチップ・プログラミング装置などその他の周辺装置を、すでに図示したハードウェアに追加して、またはその代わりに使用することができる。
【００３３】
以下で詳細に説明するように、本発明の一実施形態の態様は、コンピュータ、アダプタ、またはその他のイニシエータ上に実装可能な特定の装置および方法要素に属する。他の実施形態では、本発明をアダプタ、またはその他のイニシエータと共に使用するためのプログラム製品として実装することができる。この実施形態の機能を定義するプログラムを、それだけには限定されないが、以下を含む様々な信号保持媒体を介して、アダプタまたはイニシエータへと配布することができる。
（１）非書換え可能記憶媒体上、例えば、ＣＤ−ＲＯＭドライブによって読取り可能なＣＤ−ＲＯＭなど、アダプタまたはイニシエータにまたはその内部で接続される読出し専用メモリ装置上に永続的に記憶される情報、
（２）書換え可能な記憶媒体上、例えばハード・ディスク・ドライブまたはディスケット上に記憶される可変情報、または
（３）無線通信を含めて、コンピュータ・ネットワークまたは電話ネットワークを介するなど、通信媒体によってアダプタまたはイニシエータに伝えられる情報。
【００３４】
かかる信号保持媒体は、本発明の機能を対象とするマシン読取り可能な命令を搬送するときには、本発明の実施形態となる。
【００３５】
図２に、本発明の一実施形態によるコマンド・フェッチ・エンジン１４０の処理例の流れ図を示す。制御はブロック２００から開始される。次いで制御は、ブロック２０５に進み、ここでコマンド・フェッチ・エンジン１４０は、コマンド・ブロックをイニシエータ１０２からフェッチする必要があるという通知を待つ。一実施形態では、イニシエータ１０２はコマンド・ブロックのアドレスをコマンド・キュー１４６の先頭に書き込み、コマンド・キュー先頭ポインタを動かす。コマンド・フェッチ・エンジン１４０は、コマンド・キューの先頭ポインタと末尾ポインタが異なるという判定をすることによって、通知を受け取る。
【００３６】
次いで制御は、ブロック２１０へと進み、ここでコマンド・フェッチ・エンジン１４０は、ＤＭＡ動作を実施して、コマンド・キューの末尾で特定されるコマンド・ブロックをイニシエータ１０２中の記憶装置１２５からＩ／Ｏアダプタ１０４中の記憶装置１３５へと取り出す。次いで制御は、ブロック２１５へと進み、ここでコマンド・フェッチ・エンジン１４０は、コマンド・ブロックが即時データ・フェッチを必要とするかどうかを判定する。
【００３７】
ブロック２１５における判定の結果が真である場合、制御は、ブロック２２０へと進み、ここでコマンド・フェッチ・エンジン１４０は、即時データ・フェッチ必要変数および即時データ・フェッチ接続変数をセットする。即時データ・フェッチ必要変数は、データ・フェッチ・エンジン１４５が最後の検索コマンド・ブロックをデータ・フェッチするのを、コマンド・フェッチ・エンジン１４０が待って一時停止しているか否かを示すブーリアン表示（真／偽）とすることができる。即時データ・フェッチ必要変数は、コマンド・フェッチ・エンジン１４０でセットし、データ・フェッチ・エンジン１４５でクリアする。即時データ・フェッチ接続変数は、どの接続が即時データ・フェッチを必要とするかを示す。即時データ・フェッチ接続変数は、この即時データ・フェッチ変数が真にセットされるときだけ有効になる。
【００３８】
次いで制御は、ブロック２２５へと進み、ここでコマンド・フェッチ・エンジン１４０は、図５を参照して以下でさらに説明するように、データ・フェッチ・エンジン１４５が即時データ・フェッチ必要変数をクリアするのを待つ。次いで制御は、ブロック２３０へと進み、ここでコマンド・フェッチ・エンジン１４０は、コマンド・キュー末尾ポインタをコマンド・キュー１４６上の次のエントリへと動かす。次いで制御は、先に説明したようにブロック２０５へと戻る。
【００３９】
ブロック２１５における判定の結果が偽である場合、次いで制御は、ブロック２３５へと進み、ここでコマンド・フェッチ・エンジン１４０は、全体データ非割振り変数を動作サイズだけ増加させる。全体データ非割振り変数は、すでにフェッチ済みのすべてのコマンドを完了するために現在の接続が必要とする、まだ割り振られていないページ数を示す変数である。動作サイズとは、現在のコマンド・ブロックによって転送するように求められているデータ・ページ数のことである。次いで制御は、先に説明したようにブロック２３０へと進む。
【００４０】
図３に、本発明の一実施形態によるデータ・フェッチ・エンジン１４５の処理例の流れ図を示す。様々な実施形態では、データ・フェッチ・エンジン１４５の処理は、電源オン時または他の選択時に呼び出される。制御は、ブロック３００から開始される。次いで制御は、ブロック３０５へと進み、ここでデータ・フェッチ・エンジン１４５は、図４を参照して以下でさらに説明するように即時データ・フェッチ動作を実施する。次いで制御は、ブロック３１０へと進み、ここでデータ・フェッチ・エンジン１４５は、図６を参照して以下でさらに説明するように非即時データ・フェッチ動作を実施する。次いで制御は、先に説明したようにブロック３０５に戻る。
【００４１】
図４に、本発明の一実施形態による即時データ・フェッチの処理例の流れ図を示す。制御は、ブロック４００から開始される。次いで制御は、ブロック４０５へと進み、ここでデータ・フェッチ・エンジン１４５は、即時データ・フェッチ動作が必要かどうかを判定する。一実施形態では、データ・フェッチ・エンジン１４５は、即時データ・フェッチ必要変数を検査することによって判定を行う。ブロック４０５における判定の結果が偽である場合、制御はブロック４９９へと進み、ここでこの機能は元に戻る。
【００４２】
ブロック４０５における判定の結果が真である場合、制御はブロック４１０へと進み、ここでデータ・フェッチ・エンジン１４５は、即時データ・フェッチ接続変数中に示される接続について保留中の作業がなにか存在するかどうかを判定する。一実施形態では、データ・フェッチ・エンジン１４５は、全体データ非割振り変数がゼロに等しくないかどうかを検査することによって判定を行う。全体データ非割振り変数とは、すでにフェッチ済みのすべてのコマンドを完了するためにこの接続が必要とするまだ割り振られていないデータ・ページ数のことである。
【００４３】
ブロック４１０における判定の結果が偽（保留中の作業なし）である場合、制御はブロック４９８へと進み、以下でさらに説明するようにここで図５の処理が呼び出される。次いで制御は、ブロック４９９へと進み、ここでこの機能は元に戻る。
【００４４】
ブロック４１０における判定の結果が真（保留中の作業が存在）である場合、制御はブロック４１５へと進み、ここでデータ・フェッチ・エンジン１４５は、すべての作業が予約域に収まるかどうかを判定する。この予約域は、他の接続によっては使用できない、現在の接続用に予約されたデータ・ページを含む。一実施形態では、データ・フェッチ・エンジン１４５は、（この要求中のデータ）＋（全体割振りデータ）＋（全体非割振りデータ）＜＝（予約データ割振り）が満たされるかどうかを検査することによって判定を行う。全体割振りデータとは、この接続によって現在使用中のデータ・ページ数のことである。全体非割振りデータとは、すでにフェッチ済みのすべてのコマンドを完了するために、この接続が必要とする、まだ割り振られていないデータ・ページ数のことである。予約データ割振りとは、この接続で使用するためだけに予約され、他のどの接続からも使用できないデータ・ページ数のことである。予約データ割振りを使用して、所与の接続のために利用可能な資源の一定量を保証することができる。例えば、データ・ページがしばしば他の接続によってすべて使用中である場合に、この予約データ割振りを使用して、コマンド・フェッチ・エンジン１４０が長時間の間ブロックしないようにすることができる。
【００４５】
ブロック４１５における判定の結果が真である場合、制御は、先に説明したようにブロック４９８へと進む。
【００４６】
ブロック４１５における判定の結果が偽である場合、制御はブロック４２０へと進み、ここでデータ・フェッチ・エンジン１４５は、順不同の転送が行われる場合にデッドロックが起こらないように保証されるかどうかを判定する。一実施形態では、データ・フェッチ・エンジン１４５は、（順次データ割振り）＞＝（全体非割振りデータ）が成立するかどうかを検査することによって判定を行う。この順次データ割振り変数は、フェッチされるデータが依然としてあるままの介入コマンド・ブロックをもたないコマンド・ブロックに対してこの接続が割り振るデータ・ページ数を記憶する。他の実施形態では、順次データ割振り変数は、追加のデータ・ページ割振りを必要とすることなく、この接続によって解放されることが保証されるデータ・ページ数を記憶する。他の実施形態では、データ・フェッチ・エンジン１４５は、（順次データ割振り）＞＝（最長連続順不同シーケンス）という比較を行うことによって判定を行う。
【００４７】
ブロック４２０における判定の結果が真である場合、制御は、先に説明したようにブロック４９８へと進む。
【００４８】
ブロック４２０における判定の結果が偽である場合、制御は、ブロック４２５へと進み、ここでデータ・フェッチ・エンジン１４５は、ＤＭＡウェイト（weight）を超過しているかどうかを判定する。一実施形態では、データ・フェッチ・エンジン１４５は、（順次要求サイズ）＞（残存ＤＭＡウェイト）が成立するかどうかを検査することによって判定を行う。残存ＤＭＡウェイト変数は、このラウンド・ロビン式トラバースに対してこの接続用に残っているデータ・ページ数を示す。残存ＤＭＡウェイト変数値は、全体ＤＭＡウェイトに初期化され、ＤＭＡが行われるごとに減分される。残存ＤＭＡウェイト変数値はまた、各即時データ・フェッチ転送ごとにも減分され、これによって順不同転送が他のトラフィックを枯渇させることがないようにする。全体ＤＭＡウェイトとは、データ・フェッチ・エンジン１４５による、すべての接続についての１回のラウンド・ロビン式トラバースの間に、この接続に対して転送できるデータ・ページ総数のことである。全体ＤＭＡウェイトを使用して、１つの接続がすべてのＤＭＡ時間を独占し、他の接続を枯渇させることがないようにする。
【００４９】
ブロック４２５における判定の結果が真である場合、制御はブロック４９７へと進み、ここでこの機能は元に戻る。
【００５０】
ブロック４２５における判定の結果が偽である場合、制御はブロック４３０へと進み、ここでデータ・フェッチ・エンジン１４５は、ＤＭＡがこの接続用にあまりにも多すぎるデータを必要とすることになるのかどうかを判定する。一実施形態では、データ・フェッチ・エンジン１４５は、（全体割振りデータ）＋（順次要求サイズ）＞（最大データ割振り）が成立するかどうかを検査することによって判定を行う。最大データ割振りは、現在の接続が任意の所与の時間に割り振ることができているデータ・ページの最大数を示す。資源が過剰にコミットされる、すなわち最大データ割振り値の合計が利用可能なデータ・ページ総数を超過する場合に、最大データ割振りを使用して、１つの接続があまりに多くの資源を独占することがないようにすることができる。
【００５１】
ブロック４３０における判定の結果が真である場合、制御は、ブロック４９７へと進み、ここでこの機能は元に戻る。
【００５２】
ブロック４３０における判定の結果が偽である場合、制御は、ブロック４３５へと進み、ここでデータ・フェッチ・エンジン１４５は、十分なデータ・ページが利用可能になるまでデータ転送をブロックしながら、データ・ページを記憶装置１３５に割り振り、イニシエータ１０２とＩ／Ｏアダプタ１０４の間でデータ転送を実施する。Ｉ／Ｏアダプタ１０４とネットワーク１０６の間のデータ転送を後で実施し、その後、以前の暗黙の通知がコマンド完了通知としての役割も果たさない場合には、明示的なコマンド完了通知をイニシエータ１０２に送る。次いで制御は、ブロック４４０へと進み、ここでデータ・フェッチ・エンジン１４５は、全体データ割振りを動作サイズだけ増加させ、全体非割振りデータを動作サイズだけ減少させ、順次データ割振りを少なくとも動作サイズだけ、また以前の順不同転送のため多分もっと多く増加させ、残存ＤＭＡウェイトを動作サイズだけ増加させることによって接続ごとの変数を更新する。
【００５３】
次いで制御は、ブロック４１０へと戻り、ここでデータ・フェッチ・エンジン１４５は、先に説明したように、再び即時データ・フェッチ要求を行おうと試みる。
【００５４】
図５に、本発明の一実施形態による即時データ・フェッチのさらなる処理例の流れ図を示す。制御は、ブロック５００から開始される。次いで制御は、ブロック５０５へと進み、ここでデータ・フェッチ・エンジン１４５は、ＤＭＡウェイトを超過しているかどうかを判定する。一実施形態では、データ・フェッチ・エンジン１４５は、即時データ・フェッチ要求サイズが残存ＤＭＡウェイトよりも大きいかどうかを検査することによって判定を行う。ブロック５０５における判定の結果が真である場合、制御はブロック５９９へと進み、ここでこの機能は元に戻る。
【００５５】
ブロック５０５における判定の結果が偽である場合、制御は、ブロック５１０へと進み、ここでデータ・フェッチ・エンジン１４５は、ＤＭＡがこの接続に対してあまりにも多すぎるデータを必要とすることになるかどうかを判定する。一実施形態では、データ・フェッチ・エンジンは、（全体割振りデータ）＋（即時データ・フェッチ要求サイズ）＞（最大データ割振り）が成立するかどうかを検査することによって判定を行う。ブロック５１０における判定の結果が真である場合、制御はブロック５９９へと進み、ここでこの機能は元に戻る。
【００５６】
ブロック５１０における判定の結果が偽である場合、制御は、ブロック５１５へと進み、ここでデータ・フェッチ・エンジン１４５は、十分なデータ・ページが利用可能になるまでデータ転送をブロックしながら、データ・ページを記憶装置１３５に割り振り、イニシエータ１０２からＩ／Ｏアダプタ１０４へと転送を実施する。
【００５７】
次いで制御は、ブロック５２０へと進み、ここでデータ・フェッチ・エンジン１４５は、全体割振りデータを動作サイズだけ増加させ、全体非割振りデータがゼロに等しい場合に順次データ割振りを動作サイズだけ増加させ、残存ＤＭＡウェイトを動作サイズだけ減少させることによって接続ごとの変数を更新する。
【００５８】
次いで制御は、ブロック５２５へと進み、ここでデータ・フェッチ・エンジン１４５は、即時データ・フェッチ必要変数をクリアする。次いで制御は、ブロック５９９へと進み、ここでこの機能は元に戻る。
【００５９】
図６に、本発明の一実施形態による非即時データ・フェッチの処理例の流れ図を示す。制御は、ブロック６００から開始される。次いで制御は、ブロック６０５へと進み、ここでデータ・フェッチ・エンジン１４５は、開始接続を現在の接続に等しく設定する。開始接続をデータ・フェッチ・エンジン１４５によってエンドポイントとして使用して、非即時データ・フェッチを行う試みの間に、いつすべての接続を調べ終えたかを検出する。
【００６０】
次いで制御は、ブロック６１０へと進み、ここでデータ・フェッチ・エンジン１４５は、データ転送が現在の接続について必要かどうかを判定する。ブロック６１０における判定の結果が偽である場合、制御は、ブロック６３５へと進み、ここで図７の処理が呼び出される。次いで制御は、ブロック６９９へと進み、ここでこの機能は元に戻る。
【００６１】
ブロック６１０における判定の結果が真である場合、制御は、ブロック６１５へと進み、ここでデータ・フェッチ・エンジン１４５は、ＤＭＡがこの接続について残存ＤＭＡウェイトを超過することになるかどうかを判定する。ブロック６１５における判定の結果が真である場合、制御は、ブロック６４０へと進み、ここで図７の処理が呼び出される。次いで制御は、ブロック６９８へと進み、ここでこの機能は元に戻る。
【００６２】
ブロック６１５における判定の結果が偽である場合、制御はブロック６２０へと進み、ここでデータ・フェッチ・エンジン１４５は、ＤＭＡによって全体割振りデータがこの接続についての最大データ割振りを超過するようになるかどうかを判定する。ブロック６２０における判定の結果が真である場合、制御は、先に説明したように、ブロック６４０へと進む。
【００６３】
ブロック６２０における判定の結果が偽である場合、制御はブロック６２５へと進み、ここでデータ・フェッチ・エンジン１４５は、十分なページが利用可能になるまでブロックしながら、データ・ページを記憶装置１３５に割り振り、イニシエータ１０２とＩ／Ｏアダプタ１０４中の記憶装置１３５の間でデータ転送を実施する。Ｉ／Ｏアダプタ１０４とネットワーク１０６の間のデータ転送を後で実施し、その後、以前の暗黙の通知がコマンド完了通知としての役割も果たさない場合には、明示的なコマンド完了通知をイニシエータ１０２に送る。
【００６４】
次いで制御は、ブロック６３０へと進み、ここでデータ・フェッチ・エンジン１４５は、全体割振りデータを動作サイズだけ増加させ、全体非割振りデータを動作サイズだけ減少させ、順次データ割振りを少なくとも動作サイズだけ、また以前の順不同転送のため多分もっと多く増加させ、残存ＤＭＡウェイトを動作サイズだけ減少させることによって接続ごとの変数を更新する。次いで制御は、ブロック６９８へと進み、ここでこの機能は元に戻る。
【００６５】
図７に、本発明の一実施形態による非即時データ・フェッチのさらなる処理例の流れ図を示す。制御はブロック７００から開始される。次いで制御は、ブロック７０５へと進み、ここでデータ・フェッチ・エンジン１４５は、現在の接続を増分することによりラップ、すなわちすべての接続が処理済みになることが引き起こされるかどうかを判定する。ブロック７０５における判定の結果が真である場合、制御はブロック７１０へと進み、ここでデータ・フェッチ・エンジン１４５は、残存ＤＭＡウェイトをそれぞれの接続についての全体ＤＭＡウェイトにリセットする。次いで制御は、ブロック７１５へと進み、ここでデータ・フェッチ・エンジン１４５は、現在の接続を増分する。次いで制御は、ブロック７２０へと進み、ここでデータ・フェッチ・エンジン１４５は、現在の接続が開始接続に等しいかどうかを判定する。ブロック７２０における判定の結果が真である場合、制御はブロック７９８へと進み、保留中の即時データ・フェッチ要求を検査する必要があるので、ここでこの機能は元に戻る。ブロック７２０における判定の結果が偽である場合、制御は図６のブロック６１０に戻る。
【００６６】
ブロック７０５における判定の結果が偽である場合、制御は、先に説明したように、ブロック７１５へと直接に進む。
【００６７】
本発明の実施形態の例についての前述の詳細な説明において、添付図面（図中、同じ番号は同様な要素を表す）を参照している。これら図面は、本明細書の一部を成し、図面には、本発明を実施できる具体的な実施形態の例が、例示の目的で示されている。これらの実施形態は、当業者が本発明を実施できるのに十分なだけ詳細に記述されているが、その他の実施形態も利用することができ、本発明の範囲を逸脱することなく、論理的な、機械的な、電気的な、またその他の変更を行うことができる。本明細書内で使用されている用語「実施形態」の異なる例は、必ずしも同一の実施形態を指してはいないが、指すこともできる。したがって、前述の詳細な説明は、限定的な意味に取るべきではなく、本発明の範囲は、添付の特許請求の範囲によってのみ定義される。
【００６８】
先の説明で、本発明の完全な理解が得られるようにするために数多くの具体的な詳細について述べてきた。しかし、本発明は、これらの具体的な詳細なしに実施することができる。その他に、周知の回路、構造、および技術については、本発明を分かりにくくしないために、詳細を示してはいない。
【００６９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００７０】
（１）データの転送を要求するコマンドをアダプタでイニシエータから受け取るステップと、
前記データを前記イニシエータから前記アダプタへと転送するステップと、
前記データを前記アダプタに転送した後でかつ前記アダプタが前記コマンドに基づくプロセスを完了する以前に、前記コマンドが正常に完了したという通知で前記イニシエータに対して応答するステップと
を含む方法。
（２）前記アダプタが、前記コマンドに基づく前記プロセスを完了した後、前記コマンドが正常に完了したという明示的な通知で前記イニシエータに対して応答するステップをさらに含む、上記（１）に記載の方法。
（３）前記データが、前記コマンドに関連する接続に割り振られる予約域内に収まるかどうかを判定するステップをさらに含む、上記（１）に記載の方法。
（４）前記データを保持するために前記アダプタ中に少なくとも１つのページを割り振るステップと、
前記割り振るステップが完了するまで前記転送するステップをブロックするステップと
をさらに含む、上記（１）に記載の方法。
（５）前記データを前記アダプタから転送した後、前記コマンドが正常に完了したという明示的な通知を前記イニシエータに報告するステップをさらに含む、上記（１）に記載の方法。
（６）イニシエータから複数の接続上の複数のコマンドをアダプタで受け取る手段であって、前記複数のコマンドがそれぞれのデータの転送を要求し、前記複数のコマンドが受取順序を有する手段と、
少なくとも一部の前記データを順不同で前記イニシエータから前記アダプタへと転送する手段と、
前記データを前記アダプタに転送した後でかつ前記コマンドに基づくプロセスを完了する前に、前記コマンドが正常に完了したという暗黙の通知を前記イニシエータに報告する手段と
を備える装置。
（７）前記データのうちどれを順不同に転送すべきかを判定する手段をさらに備える、上記（６）に記載の装置。
（８）前記データのすべてを前記アダプタから順次転送する手段をさらに備える、上記（６）に記載の装置。
（９）前記それぞれのデータを前記アダプタから転送した後、それぞれのコマンドが正常に完了したという明示的な通知を前記イニシエータに報告する手段をさらに備える、上記（８）に記載の装置。
（１０）前記データを保持するために前記アダプタ中に少なくとも１つのページを割り振る手段と、
前記割振りが完了するまで前記転送する手段をブロックする手段と
をさらに備える、上記（６）に記載の装置。
（１１）前記複数の接続中の前記複数のコマンドのラウンド・ロビン式の処理をする手段をさらに備える、上記（６）に記載の装置。
（１２）命令でコード化される信号保持媒体であって、前記命令が、実行されるときに、
データの転送を要求するコマンドをイニシエータから受け取るステップと、
前記データを前記イニシエータからアダプタへと転送するステップと、
前記転送するステップを前記イニシエータから受け取る複数のコマンドの順序に対して順不同で実施すべきかどうかを判定するステップと、
前記データを前記アダプタに転送した後でかつ前記アダプタが前記コマンドに基づくプロセスを完了する前に、前記コマンドが正常に完了したという暗黙の通知を前記イニシエータに報告するステップと
を含む信号保持媒体。
（１３）前記データが、前記コマンドに関連する接続に割り振られた予約域内に収まるかどうかを判定するステップをさらに含む、上記（１２）に記載の信号保持媒体。
（１４）前記データを保持するために前記アダプタ中に少なくとも１つのページを割り振るステップと、
前記割り振るステップが完了するまで前記転送するステップをブロックするステップと
をさらに含む、上記（１２）に記載の信号保持媒体。
（１５）前記プロセスを完了した後、前記コマンドが正常に完了したという明示的な通知を前記イニシエータに報告するステップをさらに含む、上記（１２）に記載の信号保持媒体。
（１６）前記暗黙の通知が、
キュー上の次のエントリに末尾ポインタを動かすステップであって、前記キューが前記コマンドを記憶するステップをさらに含む、上記（１２）に記載の信号保持媒体。
（１７）前記判定するステップが、
順不同の転送がデッドロック状態を引き起こすことになるかどうかを判定するステップをさらに含む、上記（１２）に記載の信号保持媒体。
（１８）データをイニシエータから入出力アダプタへと転送するデータ・フェッチ・エンジンと、
前記データの転送を要求するコマンドを前記イニシエータから受け取り、
前記コマンドが、即時転送を要求するかそれとも非即時転送を要求するかを判定し、
前記コマンドが即時転送を要求するときには、前記イニシエータから前記入出力アダプタへの前記データの前記転送の後であるが前記アダプタが前記コマンドに基づくプロセスを完了する前に、前記コマンドが完了したという暗黙の通知を前記イニシエータに報告し、
前記コマンドが非即時転送を要求するときには、前記イニシエータから前記入出力アダプタへの前記データの前記転送の前に、前記コマンドが完了したという前記暗黙の通知を前記イニシエータに報告する
コマンド・フェッチ・エンジンと
を備える入出力アダプタ。
（１９）コマンド・キューであって、前記コマンド・キューが前記コマンドを前記イニシエータから受け取り、前記コマンド・フェッチ・エンジンが、さらに前記コマンド・キュー上の次のエントリに末尾ポインタを動かすことによって前記暗黙の通知を報告するコマンド・キューをさらに備える、上記（１８）に記載の入出力アダプタ。
（２０）前記データ・フェッチ・エンジンがさらに、フェッチする必要があるデータを有する関連するコマンドを探しながら複数の接続を通ってラウンド・ロビン式に進む、上記（１８）に記載の入出力アダプタ。
（２１）少なくとも１つのページを滞留し、データの転送を要求するコマンドを送り、前記コマンドが完了したという暗黙の通知を受け取った後に、前記少なくとも１つのページからピンを外すイニシエータと、
前記コマンドを受け取り、前記イニシエータから前記アダプタへの前記データの転送後であるが前記アダプタが前記コマンドに基づくプロセスを完了する前に、前記暗黙の通知を報告するアダプタと
を備えるシステム。
（２２）前記暗黙の通知が、コマンド・キュー上の次のエントリに末尾ポインタを動かすことを含む、上記（２１）に記載のシステム。
（２３）前記アダプタがさらに、前記コマンドに基づく前記プロセスを完了した後、明示的なコマンド完了通知を前記イニシエータに送る、上記（２１）に記載のシステム。
【図面の簡単な説明】
【００７１】
【図１】本発明の一実施形態を実装する一例のシステムを示すブロック図である。
【図２】本発明の一実施形態によるコマンド・フェッチ・エンジンの処理例を示す流れ図である。
【図３】本発明の一実施形態によるデータ・フェッチ・エンジンの処理例を示す流れ図である。
【図４】本発明の一実施形態による即時データ・フェッチの処理例を示す流れ図である。
【図５】本発明の一実施形態による即時データ・フェッチのさらなる処理例を示す流れ図である。
【図６】本発明の一実施形態による非即時データ・フェッチの処理例を示す流れ図である。
【図７】本発明の一実施形態による非即時データ・フェッチのさらなる処理例を示す流れ図である。
【符号の説明】
【００７２】
１００  システム
１０２  イニシエータ
１０４  Ｉ／Ｏ（入出力）アダプタ
１０６  ネットワーク
１０８  バス
１２０  プロセッサ
１２５  記憶装置
１２６  バス
１２７  データ転送制御装置
１３０  プロセッサ
１３５  記憶装置
１３７  バス
１４０  コマンド・フェッチ・エンジン
１４５  データ・フェッチ・エンジン
１４６  コマンド・キュー
【図１】
2004326782.tif 000003
【図２】
2004326782.tif 000004
【図３】
2004326782.tif 000005
【図４】
2004326782.tif 000006
【図５】
2004326782.tif 000007
【図６】
2004326782.tif 000008
【図７】
2004326782.tif 000009