(57)【特許請求の範囲】
【請求項１】
ヘッダとペイロードを各々含み、結合したコンテキストを有さないマップされていないフレームを確認する方法であって；
（ａ）マップされていないフレームを受信し；
（ｂ）前記ステップ（ａ）において受信したマップされていないフレームである現行フレームが現行シーケンスの一部であるかどうかを確認し、そうでない場合には現行フレームのヘッダとペイロードをバッファ内に保存し、その他の場合には、その現行フレームが現行シーケンス内の次の予想されるフレームであるかどうかを確認し；
（ｃ）現行フレームが現行シーケンス内の次の予想されるフレームである場合、
（１）現行フレームのペイロードを、バッファ内の先行フレームのペイロードに続く次の部分に保存し、
（２）現行フレームが現行シーケンス内の最後のフレームであるかどうかを確認し、そうであれば、完全な現行シーケンスを受信したことを示すメッセージをホストに送り；
（ｄ）現行フレームが現行シーケンス内の次の予想されるフレームでない場合は、部分シーケンスを受信したことを示すメッセージをホストに送り、現行フレームのヘッダとペイロードをバッファ内に保存する；
ステップを含んでなる方法。
【請求項２】
各フレームがファイバーチャネルのフレームである請求項１に記載の方法。
【請求項３】
各フレームのヘッダが、少なくとも、シーケンスアイデンティフィケーション、シーケンス識別子およびソースアイデンティフィケーションを有し、そして現行フレームがシーケンス内の次の予想されるフレームであるかどうかを確認するステップが、現行フレームのシーケンスアイデンティフィケーション、シーケンス識別子およびソースアイデンティフィケーション各々を、先のフレームの対応するシーケンスアイデンティフィケーション、シーケンス識別子およびソースアイデンティフィケーション各々と比較するステップを含んでいる請求項１に記載の方法。
【請求項４】
ヘッダとペイロードを各々含み、結合したコンテキストを有さないマップされていないフレームを確認するシステムであって；
（ａ）マップされていないフレームを受信する入力ポート；
（ｂ）ホストプロセッサに連結されるように構成されているバッファ；
（ｃ）プロトコルプロセッサであって、
（１）前記受信されたマップされていないフレームである現行フレームが現行シーケンスの一部であるかどうかを確認し、そうでない場合には、現行フレームのヘッダとペイロードをバッファ内に保存し、その他の場合には、現行フレームが現行シーケンス内の次の予想されるフレームであるかどうかを確認し；
（２）現行フレームが現行シーケンス内の次の予想されるフレームである場合、
（２−１）現行フレームのペイロードを、バッファ内の先行フレームのペイロードに続く次の部分に保存し；
（２−２）現行フレームが現行シーケンス内の最後のフレームであるかどうかを確認し、そうであれば、完全な現行シーケンスが受信されたことを示すメッセージをホストに送り；
（３）現行フレームが現行シーケンス内の次の予想されるフレームでない場合は、部分シーケンスが受信されたことを示すメッセージをホストに送り、現行フレームのヘッダとペイロードをバッファ内に保存する；
ためのプロトコルプロセッサ；
を備えてなるシステム。
【請求項５】
各フレームがファイバーチャネルのフレームである請求項４に記載のシステム。
【請求項６】
各フレームのヘッダが、少なくともシーケンスアイデンティフィケーション、シーケンス識別子およびソースアイデンティフィケーションを有し、そして現行フレームがシーケンス内の次の予想されるフレームであるかどうかを確認するプロトコルプロセッサの機能が、現行フレームのシーケンスアイデンティフィケーション、シーケンス識別子およびソースアイデンティフィケーションの各々を、先のフレームの対応するシーケンスアイデンティフィケーション、シーケンス識別子およびソースアイデンティフィケーションの各々と比較する機能を含んでいる請求項４に記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータネットワークにおけるデータの転送に関し、さらに詳しくは、コンピュータネットワークの境界を横切るデータの非インターロックフレームのシーケンスの処理および伝送に関する。
【０００２】
【従来の技術】
近年、コンピュータと周辺装置の数は急激に増大している。そのため、これら装置の相互接続方法の改良された方法が要望されている。多種類のネットワーク化のパラダイムが開発されて、異なる種類のコンピュータと周辺コンポーネントが互いに交信できるようになってきた。
【０００３】
データを、このようなネットワークにそって交換できる速度に問題がある。このことは、ネットワークアーキテクチャの速度の増大がより速いコンピュータの処理速度と歩調がそろっていないから、予想外のことではない。コンピュータチップの処理力は、これまで、１８ヶ月毎に約２倍になっており、強力なマシンと”帯域幅ハングリー（bandwidth hungry）”アプリケーションがどしどし生まれている。入力／出力の１秒当り１メガビットが、一般に、処理力の”ＭＩＰＳ”（１秒当り数百万の命令）当りに必要であると推定されている。現在、ＣＰＵは優に２００ＭＩＰＳを超えているので、ネットワークはこれらのいっそう速い速度に歩調をあわせることは困難である。
【０００４】
広域のネットワークとチャネルは、コンピュータのネットワークアーキテクチャのために開発された二つの方法である。従来のネットワーク（例えばＬＡＮやＷＡＮのネットワーク）は、大きなフレキシビリティと比較的長い距離の通信能力（relatively large distance capability）を示す。The Enterprise System Connection（ＥＳＣＯＮ）およびthe Small Computer System Interface（ＳＣＳＩ）などのチャネルは、高い性能と信頼性を得るために開発されたものである。チャネルは一般に、コンピュータ間またはコンピュータと周辺装置の間の専用の短距離の接続を使用する。
【０００５】
チャネルとネットワーク両者の特徴が、”ファイバーチャネル（Fibre Channel）”として知られている新しいネットワーク標準に組み込まれている。ファイバーチャネルシステムは、チャネルの速度と信頼性およびネットワークのフレキシビリティーと接続性を兼ね備えている。ファイバーチャネルの製品は、現在、非常に高いデータ速度、例えば、２６６Ｍｂｐまたは１０６２Ｍｂｐで作動可能である。これらの速度は、非圧縮、フルモーション、高品質のビデオ（uncompressed,full motion,high-quality video）などの全デマンディングアプリケーション（quite demanding application）を扱うのに十分な速度である。
【０００６】
ファイバーチャネルネットワークを配備するのに一般に３種の方法がある。すなわち単純なポイントツーポイント接続；アービトレーテッドループ（arbitrated loop）；および交換ファブリック（switched fabric）である。最も簡単な形態は、ポイントツーポイントの配置構成であり、この場合、二つのファイバーチャネルシステムが単純に、直接、接続されている。アービトレーテッドループは、アービトレーションによって、帯域幅に対する共用アクセスを提供するファイバーチャネルリングの接続である。交換ファイバーチャネルネットワーク（”ファブリック”と呼称される）は、クロスポイントスイッチングの利益を高めることによって、最高の性能を発揮する。
【０００７】
上記ファイバーチャネルのファブリックは、従来の電話システムとほぼ同様に作動する。このファブリックは、ファイバーチャネルのインターフェースポートをもっている、ワークステーション、ＰＣＳ、サーバ、ルータ、メインフレームおよび記憶装置など各種の装置を接続できる。これらの装置は各々、フレームのヘッダ中の宛先ポートのアドレスに入ることによって、該ファブリックを”呼出す”オリジネーションポート（origination port）を持つことができる。このファイバーチャネルの仕様は、このフレームの構造を定義する（このフレーム構造は、以下に考察しかつ本発明が扱うデータ転送の問題を提起する）。上記ファイバーチャネルファブリックは所望の接続をセットアップするすべての作業を行うのでフレームのオリジネータ（frame originator）は、複雑なルーチングアルゴリズムに関与する必要がない。セットアップすべき複雑な相手固定接続（ＰＶＣ）が全くない。ファイバーチャネルファブリックは、１６００万を超えるアドレスを扱うことができるので非常に大きなネットワークを収容できる。このファブリックはポートを追加するだけで拡大することができる。完全に構成されたファイバーチャネルのネットワークの集合体データの速度（aggregate data rate）は、１秒当りテラビットの範囲内たりうる。
【０００８】
ファイバーチャネルの接続法の三つの基本的なタイプ各々を、図１に示す。なお、各種図面中の同じ参照番号と名称は同じ要素を示す。図１はファイバーチャネルの技法を使用するいくつもの方式を示している。特に、メインフレームを互いに接続するポイントツーポイントの接続１００が示されている。ディスク記憶ユニットを接続するファイバーチャネルのアービトレーテッドループ１０２が示されている。ファイバーチャネルのスイッチファブリック１０４は、ワークステーション１０６、メインフレーム１０８、サーバ１１０、ディスク駆動装置１１２およびローカルエリアのネットワーク（ＬＡＮ）１１４を接続している。このようなＬＡＮとしては、例えばイーサーネット（Ethernet）、トークンリング（Token Ring）およびFDDIのネットワークがある。
【０００９】
ＡＮＳＩの仕様（X3.230-1994）に、ファイバーチャネルネットワークが定義されている。この仕様によれば、ファイバーチャネルの機能は、五つの層に配分されている。図２に示すように、ファイバーチャネルの五つの機能層は、ＦＣ−０層：物理的媒体層；ＦＣ−１層：コーディングおよびエンコーディングを行う層；ＦＣ−２層：実転送機構（フレーミングプロトコルとノード間のフロー制御を含む）；ＦＣ−３層：共通サービスの層；およびＦＣ−４層：上層のプロトコルである。
【００１０】
ファイバーチャネルは、比較的速い速度で作動するとはいえ、さらに速度を上げて、いっそう速いプロセッサの要求を満たすことが望ましい。これを実行する一方法は、インターフェースポイントで起こる遅延を除くかまたは小さくする方法である。この遅延の一つは、フレームを、ＦＣ−１層からＦＣ−２層へ転送する間に生じる。このインターフェースにおいて、ファイバーチャネルのデータリンクでリンクされた装置はファイバーチャネルのフレームをシリアルに受信する。プロトコルエンジンがこれらのフレームを受信して、これらフレームを次の層すなわち図２に示すＦＣ−２層で処理する。上記プロトコルエンジンの機能には、各フレームを確認する機能；各フレームをホスト（ホストコンピュータ）に転送するため、ダイレクトメモリアクセス（ＤＭＡ）の操作を待ち行列に入れる（キューする）機能；およびトランスミットフレームを構築する機能がある。各フレームはヘッダとペイロード部分をもっている。
【００１１】
フレームを扱う通常の方法は一般に、フレームバイフレームベース（frame-by-frame basis）でホストＣＰＵが行う方法である。例えば、受信されたフレームの確認およびＤＭＡの操作と肯定応答のセットアップは一般に、ホストＣＰＵに行わせる。これは、フレームの伝送と受信の速度を制限して、ホストＣＰＵが他のタスクを実行することを阻止する。さらに、ソフトウェアプロトコル”スタック”を有するホストＣＰＵは、ファイバーチャネルのような速いネットワークと歩調を合わせることは困難である。
【００１２】
一般に、ファイバーチャネルでは、受信されたフレームはすべて、プロトコルエンジンが、受信されたフレームのヘッダを、予想値に対して確認できるコンテキスト（context）にマップされる。特に、大部分のクラスのファイバーチャネルのサービスには、トランスミッタとレシーバに、”ＲＸＩＤ”と”ＯＸＩＤ”のヘッダフィールドを用いて一連のフレームを交換局（exchange）に対しマップさせるインターロッキングフレームがある。しかし、特定のクラスのサービスとプロファイル（例えば、クラス３、ＴＣＰ／ＩＰ）では、ファイバーチャネルのフレームのシーケンスはインタロックされない。したがって、受信されたフレームは、結合したコンテキスト（associated context）をもっていないので、プロトコルエンジンはヘッダを確認できない。通常の設計では、プロトコルエンジンは、ホストＣＰＵがヘッダを確認して、ペイロードデータを適正なホストバッファにコピーできるように、受信されたフレームヘッダおよびペイロードの両方を、ホストメモリに送らねばならない。フレームのホストメモリへの転送は各々、ホストＣＰＵに対する割込みを起こす。この方法は、ホストに負担をかけ、ヘッダ記憶用のホストのバッファスペースを消費し、そして転送バス帯域を浪費する。
【００１３】
図３は、マップされていないフレームの一般的な従来技術のホストデータ構造体の簡略化したブロック図である。第一フレーム３００と第二フレーム３０２は、ネットワークデータリンクから受信したシリアルデータからアセンブルされる。各フレームはヘッダとペイロード部分からなり、それぞれ、該ブロック図中に、”ＨＤＲ１”と”ＰＬ１”および”ＨＤＲ２”と”ＰＬ２”として示してある。受信されたフレームは結合したコンテキストをもっていないので、プロトコルエンジンによって確認することができない。したがって、各フレーム３００と３０２の受信されたフレームのヘッダとペイロードのデータの両方は、ヘッダの確認と、結合したペイロードデータの適正なバッファ記憶とを行うためにホストメモリ３０４に送らなければならない。ホストメモリ３０４に記憶されたフレームは図に示すように、簡単に連結される。次いでホストは、各フレームのヘッダを逐次検査して、フレームが現行シーケンス（current sequence）の一部であるかどうかを確認する。
【００１４】
【発明が解決しようとする課題】
上記のことからみて、本発明の目的は次のとおりである。すなわち、ファイバーチャネルのネットワークなどの高速ネットワークにおけるデータ転送処理速度を上昇すること；フレームバイフレームベースで作動するホストＣＰＵを関与させることなしに、データフレームのプロトコルエンジンによる処理をスピードアップできる技法を提供すること；介入ヘッダを除くためにホストＣＰＵがペイロードデータをコピーする必要をなくすこと；フレームの完全なまたは一部のシーケンスが受信されたときにのみホストの割込みを発生させることによって、ホストの割込みの数を減らすこと；および浪費されるバス帯域、およびマップされていないフレームに対し全てのフレームヘッダを記憶するのに必要なホストメモリをなくすことである。
【００１５】
【発明の概要】
本発明は、コンピュータのデータリンクにおけるデータのフレームの処理と転送に関する。本発明は、プロトコルエンジンに、特定の環境下で、マップされていないフレームに対するヘッダの確認を実行させる。
【００１６】
さらに詳しく述べると、本発明には、ヘッダとペイロードを各々含み、結合したコンテキスト（前後関係）を有さないマップされていないフレームを確認する方法が含まれており、その方法は以下のステップを含んでなる方法である。すなわち、マップされていないフレームを受信し；その受信したマップされていないフレームである現行フレームがシーケンス内の第一フレームであるかどうかを確認し、そうであれば現行フレームのヘッダとペイロードをバッファ内に保存し（退避させ）、そしてそうでなければ、その現行フレームが、シーケンス内の次の予想されるフレームであるかどうかを確認し；現行フレームがシーケンス内の次の予想されるフレームである場合、現行フレームのペイロードを、バッファ内の先行フレーム（prior frame）のペイロードに続く次の部分に保存し（退避させ）；現行フレームがシーケンス内の最後のフレームであるかどうかを確認し、そうであれば、完全なシーケンスを受信したことを示すメッセージをホストに送り；現行フレームがシーケンス内の次の予想されるフレームでない場合は、現行フレームのヘッダとペイロードを前記バッファ内に保存し（退避させ）、そして、部分シーケンスを受信したことを示すメッセージをホストに送るステップを含んでなる方法である。完全なシーケンスが受信されるか、または受信された現行フレームが先に受信されたフレームと矛盾した場合（例えば、受信された現行フレームのシーケンスアイデンティフィケーション、ソース識別子（source identifier）、またはシーケンスのカウントが予測値と一致しない場合）、即ち一部のシーケンスが受信されると、ホストＣＰＵが割込まれる。次に、ホストＣＰＵはそのシーケンスの連結されたペイロードを処理する。本発明は、ファイバーチャネルのネットワーク内のＴＣＰ／ＩＰフレームを処理するのに特に有用である。
【００１７】
本発明の一つ以上の実施態様の詳細を、添付図面と以下の説明によって述べる。本発明の他の特徴、目的、および利点は、以下の説明と図面および特許請求の範囲から明らかになるであろう。
【００１８】
【発明の実施の形態】
本発明は、ホストへの割込みの数を減らすことによって、ファイバーチャネルなどの高速データリンクでのホストの性能を改善する。本発明の好ましい実施態様は、完全なシーケンスまたは部分シーケンスの第一フレームに対する”静的”フレームヘッダフィールドを保存し、”動的”フレームヘッダフィールドに対する次に予想される値を算出して、その”静的”および”動的”のヘッダフィールドを、次に受信されるフレームの対応するフィールドと比較する。前記次のフレームが予想値と一致すれば、次のフレームのヘッダは、ホストメモリに書き込む必要がない。
【００１９】
図４は好ましい通信処理システムを示す。シリアルデータがファイバーチャネルの様なデータリンク４００にそって受信される。フレームは一般に、三つの部分、すなわち、プリアンブル、データまたは”ペイロード”の部分、およびトレーラの部分を含んでいる。例えば、ファイバーチャネルのデータリンクの場合、フレームは、フレーム開始（ＳＯＦ）ワード（４バイト）；フレームヘッダ（６バイト）、ゼロ〜２１１２のペイロードバイトおよび周期冗長検査（ＣＲＣ）ワード（４バイト）を含むデータ部分；およびフレーム終了（ＥＯＦ）ワード（４バイト）を含んでいる。そのフレームのヘッダを使用して、リンクアプリケーションを制御し、装置プロトコルの転送を制御し、そして行方不明または異常フレームを検出する。ＣＲＣのワードは、データ崩壊（data corruption）などの伝送時の問題があるかどうか、または、フレームのある部分が伝送中に損失したかどうかを示す。
【００２０】
データリンク４００から受信されたフレームは、入ってくるシリアルデータを、デコード及びパラレル化してワードにし、次いでそれらのワードを、フレームにアセンブルするＮＬ−ポート４０２によって処理される。また、ＮＬ−ポート４０２は、受信された各フレームについてＣＲＣワードを検査し、次に得られた”良−不良（good-bad）”のＣＲＣ状態標識を、ＥＯＦワードから生じるＥＯＦ状態ワード内の他の状態情報ビットに付加する。ＮＬ−ポート４０２は、次に、受信フレームの先入れ先出し（ＦＩＦＯ）バッファ４０４中に各フレームを書き込む。好ましい受信フレームＦＩＦＯバッファモジュール４０４のさらなる詳細事項は、本発明の譲受人と同じ譲受人に譲渡された、１９９７年９月２３日付け出願の、発明の名称が”RECEIVE FRAME FIFO WITH END OF FRAME BYPASS”の同時係属中の米国特許願第０８／９３５，８９８号に記載されている。なお、この特許の開示事項は本願に援用するものである。類似の方式で、ＮＬ−ポート４０２は、トランスミットフレームＦＩＦＯバッファ４０６から伝送されるフレームを受信し、次にこのようなフレームをシリアルデータに変換する。
【００２１】
次にフレームは、全二重方式の通信プロセッサ４０８（プロトコルエンジン（ＰＥＮＧ）とも呼称される）によって受信される。このＰＥＮＧ４０８によって以下のいくつもの機能が実行される。すなわち（１）ホストの指令を待ち行列に入れて（キューして）、受信されたフレームのデータを、直接メモリアクセス（ＤＭＡ）チャネルを通じて、ホストメモリ４１２に書き込み；（２）フレームヘッダを確認して、そのフレームが受信されるべき次の論理フレームであることを保証し；（３）そのフレームに欠陥があるかまたはないかを確認し；および（４）受信されたフレームまたはホストが発した伝送指令に応答して伝送フレームを発する機能である。好ましいＰＥＮＧ４０８のさらなる詳細事項は、本発明の譲受人と同じ譲受人に譲渡された、１９９７年９月２４日付け出願の、発明の名称が”FULL-DUPLEX COMMUNICATION PROCESSOR”の同時係属中の米国特許願第０８／９３７，０６６号に記載されている。なお、この特許の開示事項は本願に援用するものである。
【００２２】
本発明によれば、ＰＥＮＧ４０８は、受信フレームＦＩＦＯバッファ４０４から受信されたＰＥＮＧヘッダバッファ４１０内でフレームヘッダを確認する。またＰＥＮＧ４０８は、伝送フレームも構築して、それを、伝送フレームＦＩＦＯバッファ４０６を通じてデータリンク４００に送る。
【００２３】
各フレームヘッダの内の探索フィールドは、結合”コンテキスト”（associated "context"）に対するポインタを含んでいる。一般に、結合コンテキストは、ホストメモリ４１２内のホストドライバによって初期設定され、そして、特定のデータフレームをホストメモリ４１２内のどこに入れるかを示す情報をもっている。さらに詳しく述べると、上記コンテキストは、バッファのリストで定義される、最大のフレームの大きさ、現行バッファのポインタと長さおよび状態の情報などのフィールドを含んでいる。ファイバーチャネルを実動化する際の状態情報は小型コンピュータシステムインターフェース（ＳＣＳＩ）の状態情報を含んでいる。各フレームヘッダは、フレームを確認できるように、その特定のフレームに対してどのコンテキストをアクセスまたは”プルダウン”するかをＰＥＮＧ４０８に知らせる。当該コンテキストは、コンテキストマネージャーエンジンの制御下、ホストメモリインタフェース４１６を通じてホストメモリ４１２からプルダウンされる。次に、レシーブプロトコルエンジンシーケンサー（receive protocol engine sequencer）がフレームを確認する。フレームの確認が一旦完了すると、フレームヘッダによってポイントされるコンテキストは、レシーブプロトコルエンジンに、そのフレームをどう処理すべきかを知らせる。
【００２４】
探索フィールドがフレームヘッダ内に提供されていない場合、ＰＥＮＧ４０８は、ホストからコンテキスト情報を得ることができないが、受信されたフレームの現行シーケンスについての一時的な情報を蓄積することができる。さらに詳しく述べると、本発明にしたがって、ＰＥＮＧ４０８は、ホストコンピュータ４１４と共同して作動し、ＰＥＮＧヘッダバッファ４１０内に入っているフレームヘッダを確認する。
【００２５】
本発明の好ましい実施態様にしたがって、各フレームは、少なくとも以下のフィールドを画定するデータを含んでいる。すなわちフレームのソースを示すソースＩＤ；そのソースからの特定のシーケンスを示すシーケンスＩＤ；および特定のシーケンス内のフレームの順序を示すシーケンス識別子のフィールドである。前記ソースＩＤはポートＩＤと交換ＩＤを含んでいてもよく、これらのＩＤはさらに、フレームのソースを修飾する。例えばシーケンスがゼロからスタートして番号をつけた１０個のフレームを有している場合、シーケンス＃４は、フレームが、その特定のシーケンスの５番目の部分であることを示す。これらのフィールドは、本発明にしたがって、ＰＥＮＧ４０８によって検査されて、フレームのシーケンスを確認する。
【００２６】
フレームヘッダ内の他の情報を使用して、フレームのシーケンスを確認することができる。例えば、ファイバーチャネルのフレームは、シーケンス内に、第一フレームと最後のフレームのＳＯＦワードとＥＯＦワードそれぞれに対する独特の標識を提供する。これらの標識を使用して、特定のフレームがその予測されるシーケンスオーダーになっているかまたはシーケンスの中断が起こっているかをさらに確かめることができる。
【００２７】
図５は、本発明にしたがって行われるヘッダによって確認してホストバッファを割当てる方法の簡略化したフローチャートである。一般に、シーケンスの第一フレームのヘッダとペイロードが記憶される。その後、各フレームが受信され、先に受信されたフレームから得られる情報と比較される。現行フレームが同じシーケンス内の次の論理フレームである場合、ヘッダは転送されず、結合したペイロードデータだけが記憶される。このプロセスは、次の論理フレームが受信されなくなるまでまたはフレームのシーケンスが終わるまで続く。
【００２８】
さらに詳しく述べると、図５のＡで始まり、フレームがデータリンク４００から受信される（ステップ５００）。その受信されたフレームが、進行中のフレームのシーケンスの一部でない場合（ステップ５０２）、フレームヘッダおよび結合したペイロード（新しいシーケンスの第一ヘッダおよびペイロード）は、ホストメモリ内のバッファに記憶される（ステップ５０４）。次いでプロセスはＡに折り返して次のフレームを処理する（ステップ５０６）。受信されたフレームが進行中のフレームのシーケンスの一部である場合（ステップ５０２）、そのフレームをチェックして、シーケンス内の次の予想されるフレームであるかどうかを調べる（ステップ５０８）。シーケンスオーダーの確認は、例えば、ＰＥＮＧのヘッダバッファ４１０内の先のフレームのシーケンス識別子、シーケンスＩＤおよびソースＩＤを読み取って記憶することによって行うことができる。次いで、次のフレームのシーケンスＩＤとソースＩＤは一致（match）するか否かについて比較することができ、そしてシーケンスの識別子が連続した値についてチェックされる。この後者のテストは以下のいくつもの方法のうちのいずれかで実施できる。すなわち先行フレーム（prior frame）のシーケンス識別子を増加させて記憶させ、その記憶値を、一致するか否かについて現行フレームのシーケンス識別子と比較する方法；先行フレームのシーケンス識別子を記憶させて、その記憶値を現行フレームのシーケンス識別子から差し引いて結果が”１”になるかどうかをテストする方法；先行フレームのシーケンス識別子を記憶させ、現行フレームのシーケンス識別子を減少させ、次いで前記記憶値を、現行フレームの減少させた前記シーケンス識別子と、一致するか否かについて比較する方法がある。
【００２９】
受信されたフレームが、シーケンス内の次の予想されるフレームである場合（ステップ５０８）、そのフレームをチェックして、シーケンス内の最後のフレームであるかどうかを調べる（ステップ５１０）。このことは、例えば、そのフレームヘッダを検査して、現行フレームがシーケンスの最後のフレームであるかどうかを示すフラグの存在を確認することによって確認できる。受信されたフレームがシーケンス内の最後のフレームでない場合、そのフレームヘッダは廃棄され、次いでフレームのペイロードのデータが同じシーケンス内の前記記憶された第一ヘッダ及び先行ペイロードに関連してホストメモリに記憶される（ステップ５１２）。次に、そのプロセスは、Ａに折り返して次のフレームを処理する（ステップ５１４）。
【００３０】
一方、受信されたフレームが、予想されるシーケンス内の最後のフレームである場合（ステップ５１０）、そのフレームのペイロードのデータは、同じシーケンス内の前記記憶された第一ヘッダ及び先行ペイロードに関連してホストメモリに記憶される（ステップ５１６）。その後、フレームの全シーケンスが受信されたことを示すメッセージがホストに送られる（ステップ５１８）。好ましい実施態様で、前記メッセージには最後のフレームのフレームヘッダからの情報が含まれており、その情報は、ホストが全シーケンスを処理するのに使用できる。ここで、ホストは、単一のフレームヘッダおよび複数の逐次パックされたペイロードを処理することができ、その結果、ホストの割込みがいっそう少なくなりかつ処理量の効率がいっそう高くなる。
【００３１】
ステップ５０８に戻って、受信されたフレームが予想されるシーケンス内の次のフレームでない場合、受信されたフレームのヘッダと結合ペイロードのデータはホストメモリに記憶されて（ステップ５２０）、新しいシーケンスが始まる。次に、先のシーケンスが部分シーケンスであることを示すメッセージがホストに送られる（ステップ５２２）。好ましい実施態様で、このメッセージには、先のフレームのフレームヘッダからの情報が含まれており、その情報は、ホストが、先のシーケンス全体を処理するのに使用できる。これら最後の二つのステップ５２０と５２２は順序を逆にすることができる。
【００３２】
図５に示すプロセス図の帰結は、シーケンスのフレームペイロードが、ホストのインタラクション（interaction）が必要になる前に、単一のヘッダとともにメモリにおいて論理的に連結されることである。図６は、本発明の好ましい実施態様による通信処理システムのブロック図であり、いくつもの入ってくる非インターロッキングフレームを受信した後の各種の好ましいデータ構造を示す。特に、ファイバーチャネルの如くのデータリンク４００から受信されたシリアルデータは、ＮＬ−ポート４０２によってフレームに変換される。これらフレームは、受信フレームＦＩＦＯバッファ４０４を通じてプロトコルエンジン（ＰＥＮＧ）４０８に転送されて、本発明にしたがって処理される。ＮＬ−ポート４０２、フレームＦＩＦＯバッファ４０４、ＰＥＮＧ４０８は、特定用途向け集積回路（ＡＳＩＣ）などのシングルチップ６００上で実行（実現）できる。レジスタセット６０２は、処理されるフレームのためのソースＩＤ６０４、シーケンスＩＤ６０６およびシーケンス識別子６０８を記憶する記憶場所を、現行フレームの類似のフィールドと比較するために提供する。
【００３３】
初めのフレームヘッダおよび結合ペイロードのデータのシーケンスは、バッファ６１０のバッファスロット６２０〜６３２内に配置される。バッファ６１０は、順次バッファディスクリプタのバッファリスト６１４と連結されたバッファゲットポインタ６１２によって指標付けされる。各バッファディスクリプタには、バッファスロットの開始をポイントするアドレス６１６と、バッファスロットの入口の大きさを示す長さ６１８が含まれている。
【００３４】
本発明によれば、シーケンス内の第一フレームまたは異なるシーケンスの次のフレームからのヘッダが、バッファリストゲストポインタ６１２が示す、最初に利用可能な空のバッファスロット６２０内に配置される。そのゲットポインタ６１２は次いで、次の利用可能な空のバッファスロット６２２に進められ、そのスロット６２２は第一フレームからのペイロードを受信する。同じシーケンスのより多くのフレームが適正な順に受信されると、それらフレームのペイロードが、最初のペイロードバッファスロット６２２から出発して（スペースが利用可能な場合）次のバッファスロットに続いてバッファ６１０内にパックされる。
【００３５】
例えば、ヘッダＨＤＲ０とペイロードＰＬ０を有する初めのフレーム０のヘッダＨＤＲ０は、最初の利用可能なバッファスロット６２０に記憶され、そしてペイロードＰＬ０は次の利用可能なバッファスロット６２２に記憶される。その後、次のフレーム１が受信される。ＰＥＮＧ４０８は、フレームの０と１が同じシーケンスの一部分であり、かつフレーム１はフレーム０に続く次の予想されるフレームであることを確認する。したがって、フレーム１のヘッダは廃棄され、そして結合したペイロードＰＬ１だけが、バッファスロット６２２内の利用可能なバッファスペースを使用してバッファ６１０に記憶され、次に、必要に応じて続けてバッファスロット６２４と６２６に記憶される。その後、次のフレーム２が受信される。フレーム０、１および２は同じシーケンスの一部分であり、そしてフレーム２は、フレーム１に続く次の予想されるフレームである。やはり、フレーム２のヘッダが廃棄されそして、結合ペイロードＰＬ２だけが、バッファ６１０内の、次の利用可能なバッファスロット６２８に記憶される。このプロセスは、新しいシーケンスが始まるまで（すなわち、完全なシーケンスが先に受信されるまで）またはそのシーケンスの次の予想されるフレーム以外のフレームが受信されるまで（すなわち、部分シーケンスが受信されるまで）続く。何れの場合であっても、対応するフレームヘッダと結合ペイロードは次の利用可能なバッファスロット内に配置される。例えば、フレームの部分シーケンスが受信されたことを示すため、フレーム０、１、２および４が同じシーケンスの一部分であるが、フレーム４がフレーム２に続く次の予想されるフレームでないとみなす。むしろ、対応するヘッダＨＤＲ３と結合ペイロードＰＬ３を有するフレーム３（図６には示していない）がフレーム２に続く次の予想されるフレームである。この場合、フレーム４のヘッダＨＤＲ４が次の利用可能なバッファスロット６３０に記憶され、ペイロードＰＬ４が次のバッファスロット６３２に記憶され、そして、メッセージが、ホストに部分シーケンスを知らせる（フレーム０、１および２）。
【００３６】
応答リング６３６（すなわち、メモリレジスターセットまたはメモリ構造体）がＰＥＮＧ４０８からホストへの情報の通信のために使用される。メッセージスロット６３４は、完成されたフレームシーケンス（”RSP-SEQ-RCVD”）の受信、または部分のフレームシーケンス（”RSP-PARTIAL-SEQ-RCVD” ）の受信を示すために使用される。大きさの値６３８が、ホストに、シーケンスに対するペイロードデータの全体の大きさを提供する。好ましい実施態様で、最後のフレームヘッダの情報６４０も、ホストへの伝達のために利用できる。次に、ホストは割込まれて、受信されたシーケンスを、所望の方式で処理する。要約すると、本発明は、ホストへの割込みを減らし、ホストドライバの性能を改善し、そして、フレームの部分または完全なシーケンスが受信された場合のみ、ホストの割込みを行うことによって、無駄になっている転送バス帯域幅およびマップされていないすべてのフレームを記憶するためのホストメモリが除かれる。
【００３７】
基本発明を知っていることから、本発明の他の側面は容易に実現される。本発明は、ハードウェアもしくはソフトウェアで、または両者の組合せで実現できる。本発明がソフトウェアで実現される場合、ソフトウェアは、少なくとも一つのプロセッサ要素、データ記憶システム（揮発性および非揮発性のメモリおよび／または記憶要素を含む）、少なくとも一つの入力ポートおよび少なくとも一つの出力ポートを備えているプロセッサにおいて実行する一つ以上のコンピュータプログラムとして構成されている。プログラムコードが、入力データに適用されて、本願で述べた機能が実行されて、出力情報が生成される。その出力情報は、公知の方式で、一つ以上の出力ポートまたは出力デバイスに適用される。
【００３８】
このようなコンピュータプログラムは各々、記憶媒体または記憶デバイスをプロセッサが読み取って、本願に述べられている手順を実行するとき、プロセッサのコンフィギュレーションを行って作動させるため、一般的なまたは特別な目的のプログラム可能なプロセッサによって読取り可能な記憶媒体または記憶デバイス（例えば、ＲＯＭまたは磁気ディスケット）に記憶させることが好ましい。また本発明のシステムは、コンピュータプログラムで構成された、コンピュータが読取り可能な記憶媒体として実現されると考えられ、このように構成された記憶媒体によって、コンピュータまたはプロセッサは特定の前もって定められた方式で作動して、本願に記憶されている機能を実行する。
【００３９】
本発明のいくつもの実施態様を述べてきたが、本発明は、本発明の精神と範囲から逸脱することなく、各種の変形を行うことができるものである。例えば、上記のいくつものステップとテストは、異なる順序で実施しても同じ結果を得ることができる。したがって図５に示す実施態様に対して別の実施態様で、ステップ５１２と５１６の記憶機能は、ステップ５１０のテストを実行する前に実施することができる。さらに、ステップ５２０と５２２は逆にすることができる。別の例として、他の基準を使用して、例えば次の予想されるフレームが時間切れの期間内に受信されない場合に、シーケンスが不完全であることを示すことができる。したがって、他の実施態様は、前記特許請求の範囲の範囲内に入っている。
【図面の簡単な説明】
【図１】  ファイバーチャネルの技法を利用する、従来技術の複合コンピュータネットワークのブロック図である。
【図２】  従来技術のファイバーチャネル標準の五つの機能層の図である。
【図３】  マップされていないファイバーチャネルフレームの代表的な従来技術のホストデータ構造を示す簡略化ブロック図である。
【図４】  好ましい通信処理システムの簡略化ブロック図である。
【図５】  本発明による、ヘッダの確認とホストバッファの割当てを行う方法の簡略化フローチャートである。
【図６】  本発明の好ましい実施態様による通信処理システムのブロック図であり、入ってくるいくつもの非インターロッキングフレームを受信した後の各種の好ましいデータ構造を示してある。
【図１】
0003735647.tif 000002
【図２】
0003735647.tif 000003
【図３】
0003735647.tif 000004
【図４】
0003735647.tif 000005
【図５】
0003735647.tif 000006
【図６】
0003735647.tif 000007