(57)【特許請求の範囲】
【請求項１】
メッセージ転送ネットワークによって相互接続される複数の処理ノードを含むコンピュータシステムであって、
各ノードは、命令処理装置と、前記ネットワークを介して他の処理ノードにメッセージを転送する送信回路と、前記メッセージはヘッダ部とデータ部とを含み、前記ヘッダ部はメッセージを識別するための識別フィールドを有し、
記憶装置と、複数のメッセージを受信するための受信要求であって前記記憶装置に格納される複数の受信要求と、前記受信要求は受信すべきメッセージを指定するメッセージ指定フィールドを有し、前記受信要求はまた受信したメッセージの書き込み場所を指定する情報を含む受信制御フィールドを有し、
受信回路と、前記受信回路は前記ネットワークを介して他の処理ノードから送信された前記メッセージを受信する受信手段と、前記メッセージの受信時に、前記記憶装置に格納された複数の受信要求の中から前記受信したメッセージの前記識別フィールドに対応する前記メッセージ指定フィールドを有する受信要求を検索して確定する検索手段と、任意の受信要求の検索及び確定時に、前記受信制御フィールドを使用して、指定された書き込み場所に受信したメッセージを書き込む動作を含むメッセージの受信動作を制御する受信制御手段とを有することを特徴とするコンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムであって、
前記メッセージの前記識別フィールドは、送信ノードの命令処理装置によって設定される送信コンテキストを識別するコミュニケータフィールドと、メッセージの種類を識別するタグフィールドと、メッセージの送信元を識別する送信元フィールドを含み、前記受信要求の前記メッセージ指定フィールドは、受信コンテキストを指定するコミュニケータ指定フィールドと、メッセージの種類を指定するタグ指定フィールドと、メッセージの送信元を指定する送信元指定フィールドを含み、
前記検索手段は、前記記憶装置を検索して前記受信メッセージの前記コミュニケータフィールドと、前記タグフィールドと、前記送信元フィールドに対応する前記コミュニケータ指定フィールドと、前記タグ指定フィールドと、前記送信元指定フィールドとを含む前記メッセージ指定フィールドを有する前記受信要求を確定することを特徴とするコンピュータシステム。
【請求項３】
請求項２に記載のコンピュータシステムであって、
前記タグ指定フィールドは、特定のメッセージの種類を指定する特定タグ指定フィールドもしくは前記記憶装置に格納された受信要求のタグ指定フィールドのいずれにも一致しないメッセージに対する無指定タグ指定フィールドのいずれかであり、前記検索手段は、前記記憶装置を検索して、前記受信メッセージの前記タグフィールドに対応する特定タグ指定フィールドもしくは無指定タグ指定フィールドのいずれかを有する受信要求を確定することを特徴とするコンピュータシステム。
【請求項４】
請求項３に記載のコンピュータシステムであって、
前記送信元指定フィールドは、特定の送信元を指定する特定送信元指定フィールドもしくは前記記憶装置に格納された受信要求の送信元指定フィールドのいずれにも一致しないメッセージに対する無指定送信元指定フィールドのいずれかであり、前記検索手段は、前記記憶装置を検索して、前記受信メッセージの送信元フィールドに対応する特定送信元指定フィールドもしくは無指定送信元指定フィールドのいずれかを有する受信要求を確定することを特徴とするコンピュータシステム。
【請求項５】
請求項１に記載のコンピュータシステムであって、
前記受信要求は、前記記憶装置内にあるハッシュテーブルの有効なエントリであり、前記検索手段は、前記受信メッセージの前記識別フィールドに対応する前記受信要求を確定するために行なう前記記憶装置の検索において、検索すべき前記受信要求の前記メッセージ指定フィールドのハッシュ値を最初に計算し、前記ハッシュ値は前記ハッシュテーブル内のエントリを検索するための最初のインデックスとして使用され、次いで前記検索手段は、各ハッシュテーブルエントリの検索を前記最初のインデックスから開始して、無効なハッシュテーブルエントリまたは所望の受信要求のいずれかが検出されるまで行なうことを特徴とするコンピュータシステム。
【請求項６】
請求項５に記載のコンピュータシステムであって、
前記各受信要求は、前記各受信要求が発行された後の相対経過時間を示す時間フィールドをさらに含み、
前記検索手段は、前記受信メッセージに対応する複数の受信要求を検出した場合、各受信要求の前記時間フィールドに基づいて決定された最長経過時間を有する受信要求を確定することを特徴とするコンピュータシステム。
【請求項７】
請求項１に記載のコンピュータシステムであって、
前記各受信要求は、前記受信制御フィールドが有効かまたは使用中かを示す受信要求有効フィールドを含み、前記検索手段は前記記憶装置の検索において前記有効な受信要求のみを検索し、
前記受信回路は、受信要求無効化手段を有し、任意の受信要求が検索及び確定された場合、前記受信要求無効化手段は、前記受信要求の前記受信要求有効フィールドを変更することによって前記受信要求が使用中であることを示すことを特徴とするコンピュータシステム。
【請求項８】
請求項７に記載のコンピュータシステムであって、
前記各受信要求は、前記受信要求が持続性受信要求かまたは非持続性受信要求かを示す持続性制御フィールドをさらに含み、前記受信要求無効化手段は、前記持続性受信要求以外の受信要求のみの前記受信要求有効フィールドを変更することを特徴とするコンピュータシステム。
【請求項９】
請求項７に記載のコンピュータシステムであって、
前記受信制御フィールドは受信制御語アドレスポインタを含み、前記記憶装置には複数の前記受信制御語が格納され、
前記受信制御手段は、任意の受信要求が検索及び確定された場合、前記受信要求の前記受信制御フィールド内の前記受信制御語アドレスポインタを使用して対応する受信制御語を読み出し、前記受信制御語を使用して前記受信回路の前記メッセージの受信動作を制御することを特徴とするコンピュータシステム。
【請求項１０】
請求項９に記載のコンピュータシステムであって、
各受信制御語は、次受信制御語アドレスポインタと、前記次受信制御語アドレスポインタが有効か否かを示す次受信要求有効フィールドとを含み、前記次受信制御語アドレスポインタと前記次受信要求有効フィールドとによって前記複数の受信制御語が連鎖され、該連鎖における最終受信制御語は無効と示された次受信制御語アドレスポインタを含み、
前記受信要求無効化手段は、前記受信制御語が検索及び確定された場合、前記次受信制御語アドレスポインタを前記受信制御フィールドの前記受信制御語アドレスポインタへと複写するとともに、前記次受信要求有効フィールドを前記受信制御フィールドの前記受信要求有効フィールドへと複写し、前記連鎖における前記最終受信制御語が検索及び確定された場合においてのみ前記受信要求が使用中であることを示すように前記受信要求有効フィールドを変更することを特徴とするコンピュータシステム。
【請求項１１】
請求項９に記載のコンピュータシステムであって、
前記受信制御語は、前記受信回路による前記メッセージの受信状態を示す受信状態フィールドを含み、
前記受信回路は、前記受信制御語の前記受信状態フィールドを更新する受信状態更新手段を有することを特徴とするコンピュータシステム。
【請求項１２】
請求項１１に記載のコンピュータシステムであって、
前記受信状態更新手段は、前記メッセージの受信開始時に、前記受信状態フィールドを更新し、前記メッセージの受信終了時に、前記受信状態フィールドを再度更新することを特徴とするコンピュータシステム。
【請求項１３】
請求項８に記載のコンピュータシステムであって、
前記受信制御フィールドは受信制御語アドレスポインタを含み、前記受信制御後アドレスポインタは、非持続性受信要求の受信制御語アドレスポインタまたは持続性受信要求のプール制御語アドレスポインタのいずれかであり、前記記憶装置には複数の受信制御語及び複数のプール制御語が格納され、
前記受信制御手段は、前記非持続性受信要求が検索及び確定された場合、前記非持続性受信要求の前記受信制御フィールド内の前記受信制御語アドレスポインタを使用して対応する受信制御語を読み出し、前記受信制御語を使用して前記受信回路の前記メッセージの受信動作を制御し、
前記持続性受信要求が検索及び確定された場合、前記持続性受信要求の前記受信制御フィールド内の前記プール制御語アドレスポインタを使用して対応するプール制御語を読み出し、前記プール制御語を使用して前記受信回路の前記メッセージの受信動作を制御することを特徴とするコンピュータシステム。
【請求項１４】
請求項１３に記載のコンピュータシステムであって、
各受信制御語またはプール制御語は、次制御語アドレスポインタと、前記次制御語アドレスポインタが有効か否かを示す次受信要求有効フィールドと、次制御語アドレスポインタが次受信制御語アドレスポインタまたは次プール制御語アドレスポインタのいずれであるかを示す次持続性制御フィールドとを含み、次制御語アドレスポインタと次受信要求有効フィールドとによって前記複数の受信制御語またはプール制御語が連鎖され、該連鎖における最終受信制御語または最終プール制御語は無効と示された次制御語アドレスポインタを含み、
前記受信要求無効化手段は、前記受信制御語またはプール制御語が検索及び確定された場合、前記次制御語アドレスポインタを前記受信制御フィールドの前記受信制御語アドレスポインタへ複写し、前記次持続性制御フィールドを前記持続性制御フィールドへ複写し、対応する次受信要求有効フィールドを前記受信要求有効フィールドへ複写し、前記連鎖における前記最終受信制御語が検索及び確定された場合であって、前記最終受信制御語の前記次持続性制御フィールドが、次制御語アドレスポインタが次プール制御語アドレスポインタであることを示す場合においてのみ前記受信要求が持続性であることを示すように前記持続性制御フィールドを変更し、前記プール制御語が連鎖されていない場合であって、前記連鎖における前記最終受信制御語が検索及び確定された場合においてのみ前記受信要求が使用中であることを示すように前記受信要求有効フィールドを変更することを特徴とするコンピュータシステム。
【請求項１５】
請求項１３に記載のコンピュータシステムであって、
前記記憶装置に形成され、前記記憶装置の空き記憶領域である複数のデータプールと、前記記憶装置に形成され、複数の受信状態語が格納される複数の受信状態語プールと、各プール制御語は前記データプールと前記受信状態語プールとを管理する制御情報を含み、
前記受信回路は、前記プール制御語に対応するデータプールにプール受信バッファを割り当て、前記受信したメッセージの前記データ部を前記プール受信バッファに書き込み、また、前記プール制御語に対応する受信状態語プールに前記受信状態語を割り当て、前記受信したメッセージに関する状態情報及び制御情報を前記受信状態語に記録するプール受信手段を有することを特徴とするコンピュータシステム。
【請求項１６】
請求項１５に記載のコンピュータシステムであって、
各受信制御語は、前記記憶装置に形成された受信バッファを指すアドレスポインタと、前記受信バッファの使用を許可する受信バッファ許可フィールドと、前記受信バッファの使用が許可されない場合に、前記受信回路によって使用される前記プール制御語を指すプール制御語アドレスポインタとを含み、
前記受信回路は、前記受信バッファの使用が許可される場合に、前記受信したメッセージの前記アドレスポインタを使用して前記データ部を前記受信バッファに書き込む受信バッファ手段をさらに有し、
前記受信制御語において前記受信バッファの使用が許可されない場合、前記プール受信手段は、前記受信制御語内の前記プール制御語アドレスポインタを使用して前記プール制御語を検索及び確定し、前記プール制御語に対応するデータプールに前記プール受信バッファを割り当て、前記受信したメッセージの前記データ部を前記プール受信バッファに書き込むことを特徴とするコンピュータシステム。
【請求項１７】
請求項１６に記載のコンピュータシステムであって、
前記プール制御語は、受信シーケンスフィールドを含み、前記受信制御語は、受信状態フィールドを含み、
前記プール受信手段は、前記プール制御語を使用して前記メッセージを受信する際、前記受信シーケンスフィールドを増分する手段と、前記プール制御語における前記受信シーケンスフィールドの現在値を記録する手段とを有することを特徴とするコンピュータシステム。
【請求項１８】
請求項１に記載のコンピュータシステムであって、
前記受信制御フィールドは、前記記憶装置に形成された受信バッファを指すアドレスポインタを含み、
前記受信回路は、前記受信したメッセージの前記受信制御フィールド内の前記アドレスポインタを使用して前記データ部を前記受信バッファに書き込む受信バッファ手段を有することを特徴とするコンピュータシステム。
【請求項１９】
請求項１８に記載のコンピュータシステムであって、
各受信制御フィールドは、前記受信バッファの大きさを示すサイズフィールドをさらに含み、
前記受信回路は、前記受信したメッセージの前記データ部の長さを前記受信バッファに対応する前記サイズフィールドと比較する長さ検査手段を有することを特徴とするコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ転送ネットワークを介してデータをメッセージの形式で転送するコンピュータシステムに関する。
【０００２】
【従来の技術】
並列コンピュータシステムのうち、特に分散型記憶装置を有するシステムに使用する目的で記述されたソフトウェアの多くのアプリケーションでは、アプリケーションソフトウェアと通信ネットワークのハードウェアとの間のインタフェースとしてメッセージ通信ソフトウェアライブラリを使用する。こうしたライブラリの一例として、ＭＰＩ（Ｍｅｓｓａｇｅ‐Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ  Ｓｔａｎｄａｒｄ；  メッセージ通信インタフェース規格）がある。
【０００３】
ＭＰＩの場合、ライブラリはソフトウェアのルーチンとして作成される。これらのルーチンは、アプリケーションソフトウェアによって呼び出され、並列コンピュータの各ノードにおける命令処理装置によって実行される。命令処理装置は、ノードの送信回路と受信回路とを制御する。これらの回路は、ネットワークを介してシステムの他のノードへと接続されている。
【０００４】
ＭＰＩ規格に準ずるライブラリにおいては、基本的に２種類のソフトウェアルーチンが存在する。一方のルーチンは、送信要求ルーチンであって、システムの他のノード宛てにメッセージの送信を要求するために使用される。他方のルーチンは、受信要求ルーチンであって、メッセージの受信を要求するために使用される。
【０００５】
アプリケーションが送信要求ルーチンを呼び出してメッセージを送信する場合、アプリケーションは複数のパラメータを指定する。これらのパラメータとしては、メッセージの宛先ノード番号（各ノードは一意な識別番号を有する）、タグ値（アプリケーションがメッセージの種類を識別するために使用する値）、コミュニケータ値（送信における通信のコンテキストを指定するために使用され、メッセージは同一の通信コンテキストにおいてのみ受信可能である）、送信データのローカルメモリ内のアドレス、送信データの量などがある。
【０００６】
アプリケーションが受信要求ルーチンを呼び出す場合、アプリケーションは、受信したいメッセージと、そのメッセージのローカルメモリ内の書込アドレスとを指定する。かかる指定に関するパラメータは、受信要求ルーチンに渡される。これらのパラメータとしては、タグ指定（特定のタグもしくは任意の無指定（Ｗｉｌｄｃａｒｄ）タグ値を指定する）、送信元指定（特定の送信元もしくは任意の無指定（Ｗｉｌｄｃａｒｄ）送信元値を指定する）、コミュニケータ値（受信時の通信のコンテキストを指定するために使用され、受信要求は同一の通信コンテキストで送信されたメッセージにのみ対応する）、宛先バッファのローカルメモリ内のアドレス、宛先バッファの大きさなどがある。
【０００７】
受信ルーチンを実行すると、メッセージがすでに当該ノード宛てに送信済みであれば、受信メッセージ指定に対応する該メッセージが直ちにアプリケーションへと返送される。要求が直ちに実行できない場合、該要求に関する情報が記録され、かかる情報はポスト受信要求と呼ばれる。ついでこのようなメッセージの送信要求が発行されると、受信ルーチンは、当該メッセージを完成してアプリケーションソフトウェアへと返送する。またＭＰＩ規格は、複数のメッセージが互いを追い越さないことを定めている。すなわち複数の保留状態の受信要求が一メッセージに対応する場合、保留時間のもっとも長い受信要求がかかるメッセージによって満たされる。
【０００８】
あるノードのローカルメモリから他のノードのローカルメモリへとメッセージを転送するためのハードウェアの従来技術が特開平６ー３２４９９８に開示されている。この従来技術の発明の一実施例を図３に示す。複数のノードがメッセージ転送ネットワーク（９０２）に接続されるが、ここでは説明を簡単にするために１個のノード（９０１）のみを示す。各ノードは、命令処理装置ＩＰ（９０３）と、ローカルメモリ（９０４）と、ネットワークインタフェースアダプタＮＩＡ（９０５）とを含む。これらの構成はすべてバス（９０６）によって接続される。ネットワークインタフェースアダプタＮＩＡ（９０５）は、送信回路（９０８）と受信回路（９１０）とを含む。送信回路（９０８）と受信回路（９１０）は、それぞれ送信ネットワーク接続機構（９０９）と受信ネットワーク接続機構（９１１）とを介して、ネットワーク（９０２）へと接続される。ネットワークメッセージ（９１２）は、メッセージデータ（９１７）とメッセージヘッダとから構成される。メッセージヘッダは、ＤＮＮフィールド（９１３）とタグフィールド（９１６）とを有し、ＤＮＮフィールド（９１３）はどのノードが当該メッセージを受信するかを指定する。受信回路内には、入力ポート（９１８）と、受信シーケンサ（９１９）と、直接メモリアクセス制御装置ＤＭＡＣ（９２１）と、受信ポストレジスタ（９２０）とが含まれる。メッセージが入力ポート（９１８）に到着すると、該メッセージのタグフィールド（９１６）とポストレジスタ（９２０）に格納されたタグフィールドとが照合される。両フィールドが一致すれば、受信シーケンサ（９１９）の指令によって、直接メモリアクセス制御装置ＤＭＡＣ（９２１）はユーザ受信バッファ（９３３）を使用してメッセージデータ（９１７）を受信する。ユーザ受信バッファ（９３３）を指すアドレスポインタ（９３２）もまた、ポストレジスタ（９２０）内にある。ユーザ受信バッファ（９３３）は、一例としてローカルメモリ（９０４）のユーザのアプリケーション空間に置かれる。メッセージのタグフィールド（９１６）とポストレジスタ（９２０）のタグフィールドとが一致しない場合、当該メッセージはローカルメモリのメッセージバッファ（９４１）で受信・格納される。
【０００９】
上記従来技術の発明では、各メッセージにつき１個のみのポスト受信要求をサポートする受信装置を記述している。また上記の従来技術では、受信ポストレジスタと一致しないメッセージを記録するメッセージバッファも示している。このメッセージバッファは、メッセージプールとみなしてよい。従来技術では、メッセージプールを１個のみサポートしている。
【００１０】
上記従来技術のハードウェアで受信ポストレジスタを使用すれば、一時に１個ずつのメッセージの受信を要求できる。ＭＰＩも含めてほとんどのメッセージ通信ライブラリでは、多数の同時に有効な受信要求と無指定（Ｗｉｌｄｃａｒｄ）受信要求とをサポートしている。
【００１１】
ここで、上記従来技術の発明で示された単一受信ポストレジスタを利用したＭＰＩメッセージ通信ライブラリを作成したとする。この場合、ライブラリはこのレジスタを使用して１個の保留受信要求をポストできるのみであり、しかもこれはかかる要求が無指定（Ｗｉｌｄｃａｒｄ）を使用しない場合にのみ限られる。また保留時間のもっとも長い要求以外の要求をポストしたい場合、ＭＰＩのメッセージの順番付けの規則を犯さないという制約上、かかる要求のポストは、該要求の保留時間より短い保留時間を有する要求がすべて当該メッセージに一致しない場合にのみ可能である。これは、受信時の矛盾を検査するためのソフトウェアのオーバヘッドを増加させる。受信ポストレジスタを使用してメッセージを受信したのち、受信回路は命令処理装置に割り込む必要がある。これは、受信ポストレジスタを使用して、命令処理装置に別な要求をポストさせるためである。結果として、命令処理装置の割り込みが頻発し、ソフトウェアのオーバヘッドが増大するため、命令処理装置の有効処理能力を低下させてしまう。一方、ソフトウェアの発行した受信要求の順序と異なる順序で受信回路が受信したメッセージは、プールに書き込まれる。プールに受信・格納されたこれらのメッセージもまた、命令処理装置によって宛先バッファへと複写されなければならないため、さらに性能が低下することになる。
【００１２】
従来技術のハードウェアを使用したＭＰＩライブラリを実施する別な方法としては、メッセージを実際に転送する前にノード間で制御メッセージを交換するという方法が考えられる。これらの制御メッセージを使用すれば、実際にメッセージが転送される前に受信ポストレジスタを形成することができるため、メッセージデータを宛先バッファに一括して複写する必要がなくなる。しかしながら、この解決法には性能上重大な問題がある。第一に、制御メッセージを転送するためのオーバヘッドによって、メッセージ転送の待ち時間が長くなる。第二に、制御メッセージは、その性質上非同期であるため、これらのメッセージを処理するためには命令処理装置に頻繁に割り込む必要があり、結果的に命令処理装置の有効処理能力が低下する。
【００１３】
さらに、ノード上で動作する通信タスク以外のソフトウェアタスクと、通信タスクとを、メッセージの待機中にスリープ状態に入れたいとする。この場合、受信回路を設定して行なう命令処理装置の割り込みは、特定の一メッセージに対してのみ可能である。メッセージプールへとメッセージを受信・格納するための割り込みを許可する必要がある。割り込み処理のソフトウェアルーチンは、一メッセージが受信回路によって受信されると、その都度、上記の特定のメッセージが受信されたか否かを調べるために、メッセージプールを検査しなければならない。
【００１４】
また、ある単一のノードが使用する通信のコンテキストが複数存在する場合、これら複数の通信コンテキストに属するメッセージを対象として、別個のメッセージプールをそれぞれ割り当てることは不可能である。単一の通信コンテキストにおいて多数のメッセージが送信された場合、すべての通信処理用のプール空間を使い切ってしまう可能性がある。
【００１５】
【発明が解決しようとする課題】
本発明の第１の課題は、同時に保留状態となりうる複数の受信要求をいかにポストするかという問題を解決するとともに、中間的な受信バッファプールからローカルメモリ内の最終宛先バッファへのメッセージデータの不用な複写をなくすことにある。ローカルメモリ内の最終宛先バッファは、メッセージが実際に受信される前に該最終宛先バッファのアドレスが判明している場合、受信要求によって指定される。ローカルメモリ内の領域間におけるデータの複写は、命令処理装置の処理時間の浪費であり、メッセージ転送の待ち時間を増加させる。
【００１６】
本発明の第２の課題は、受信すべきメッセージの指定方法を拡大することによって、無指定（Ｗｉｌｄｃａｒｄ）値を含む複数のパラメータをメッセージに持たせることにある。これによって、何も指定しない受信要求をサポートするメッセージ通信ライブラリを簡単に実現できるとともに、メッセージデータの不用な複写をなくすことができる。
【００１７】
本発明の第３の課題は、受信要求をその発行順に、到着するメッセージに対応させることにある。これによって、メッセージと受信要求との対応を、規定の順序で行なうことを定めたＭＰＩのようなメッセージ通信ライブラリを簡単に実現することができる。
【００１８】
本発明の第４の課題は、複数の通信コンテキストに異なるメッセージプールをいかにしてか割り当てることによって、一通信コンテキストにおけるプールのオーバーフローが、他の通信コンテキストのメッセージプールへの受信に影響を及ぼさないようにするかという問題を解決することにある。
【００１９】
本発明の第５の課題は、命令処理装置が、特定のメッセージの受信、特定の種類のメッセージの受信、もしくは特定の送信元からのメッセージの受信を待つ間に、命令処理装置の不用な割り込みが発生するという問題を解決することにある。不用な割り込みは、命令処理装置の有効処理性能を低下させる。
【００２０】
【課題を解決するための手段】
本発明のデータ転送ネットワークを介したメッセージ通信において、メッセージヘッダは、送信元フィールドと、宛先フィールドと、タグフィールドと、コミュニケータフィールドとを含む。送信元フィールドは、送信ノードを一意に識別する。宛先フィールド、タグフィールド、ならびにコミュニケータフィールドは、送信回路に対して発行されるメッセージ送信要求によって指定される。メッセージは、宛先フィールドによって一意に指定される目標ノードへとネットワークを介して送られる。受信要求が、受信すべきメッセージの送信元フィールド、タグフィールド、コミュニケータフィールドを指定してもよい。送信元フィールドとタグフィールドは、無指定としてもよい。受信要求にはタイムスタンプが記され、それぞれローカルメモリのハッシュテーブルにポストされる。メッセージが到着すると、このハッシュテーブルは受信回路によって検索される。この検索は、経過時間がもっとも長くて有効な受信要求指定、送信元無指定もしくはタグ無指定に対して行なわれ、送信元フィールドもしくはタグフィールドに関してメッセージと一致した指定が確定される。一致するポスト受信要求が検出されると、当該受信要求が実行される。受信要求は、一致するメッセージデータを受信回路が直接書き込むバッファを指定することもできる。この場合、当該受信要求は処理済みとされ、ハッシュテーブルから削除される。もしくは、受信要求は、メッセージをその内部に受信する特定のメッセージプールを指定してもよい。この場合、受信要求は、実行後も有効な持続性受信要求として指定できる。一例として、ソフトウェアは、各コミュニケータ値につき、持続性であって、遠い未来を指すタイムスタンプ値を持ち、無指定送信元フィールドおよび無指定タグフィールドを持つ受信要求をポストする。これらの要求は、他のポスト受信要求のいずれにも一致しないメッセージに対するデフォルト受信要求として作用する。この場合、アプリケーションソフトウェアがメッセージ到着後に発行した特定の受信要求は、ソフトウェアがメッセージプール内のメッセージと照合してもよい。一致したメッセージはアプリケーションへと複写される。
【００２１】
不用な割り込み要求は、次のようにして減少させる。各受信要求に対応するローカルメモリ内の制御データ構造に、割り込み要求ビットフィールドを設ける。このビットフィールドを受信回路に検査させる手段を設け、これによって命令処理装置に割り込むか否かを決定する。
【００２２】
ハードウェア上でポスト受信検索機構を実現する。該機構は、送信すべき制御メッセージの数量を減少させ、割り込み要求に関連した命令処理オーバヘッドを減らすことによって、メッセージの待ち時間を相当程度短縮する。また該機構は、メッセージの到着前に受信要求が発行された場合、データの一括複写動作を不用とする。
【００２３】
各ノードにおけるライブラリソフトウェアは、最初にポスト受信ハッシュテーブル構造をローカルメモリに形成するとともに、持続性であって、遠い未来を指すタイムスタンプ値を持ち、無指定送信元フィールドおよび無指定タグフィールドを持つ受信要求を、各通信コンテキストにおいてポストする。これらのデフォルト受信要求は、他のいずれのポスト受信要求にも一致しないメッセージを、メッセージプールへと受信するために使用される。
【００２４】
いずれかのノードで実行されるアプリケーションソフトウェアは、任意の時点で、通信ライブラリソフトウェアに対して送信要求を発行できる。この場合、ライブラリは、該送信要求と、該要求の通信コンテキストを識別するコミュニケータ値とを、送信回路へと転送する。送信回路はメッセージヘッダを作成する。このメッセージヘッダには、送信要求に基づいた宛先フィールドとタグフィールド、送信ノードを一意に識別する送信元フィールド、ならびにコミュニケータフィールドが含まれる。ついで送信回路は、ヘッダにメッセージデータを付加して、完成したメッセージをネットワークへと送出する。
【００２５】
メッセージは、メッセージヘッダの宛先フィールドによって一意に指定された目標ノードへとネットワークを介して転送される。このネットワークは固定経路アルゴリズムを使用していることに注目されたい。このアルゴリズムによれば、一ノードから送出されたメッセージは、すべて同一の経路を通って他の一ノードへと送信される。これによってメッセージ間の追い越しを防いでいる。
【００２６】
いずれかのノードで実行されるアプリケーションソフトウェアは、任意の時点で、通信ライブラリソフトウェアに対して受信要求を発行できる。この場合、ライブラリはまず、当該通信コンテキストに対応するメッセージプールを検索して、以前に受信したメッセージのなかで該当するものを検出しようとする。該当するメッセージが検出されない場合、ライブラリは、タイムスタンプを記した受信要求をハッシュテーブルにポストする。この要求には、当該受信要求の通信コンテキストを識別するコミュニケータ値と、当該受信要求で指定されたタグフィールドと送信元フィールドの値とが含まれる。送信元フィールドとタグフィールドは、無指定としてもよい。また各受信要求には、該要求の完了時に命令処理装置の割り込みを要求する制御ビットが含まれる。この制御ビットは、受信が完了するまでの任意の時点で変更することができる。
【００２７】
メッセージが到着すると、宛先ノードのポスト受信ハッシュテーブルが受信回路によって検索される。この検索は、経過時間がもっとも長くて有効な受信要求指定、送信元無指定、もしくはタグ無指定に対して行なわれ、送信元フィールドもしくはタグフィールドに関してメッセージと一致した指定が確定される。一例として、以前にポストされた受信要求がメッセージに一致しないとする。この場合、メッセージは、デフォルト受信要求を使用してメッセージプールへと受信・格納される。続いてアプリケーションソフトウェアが受信要求を発行すると、該メッセージは、メッセージプールからアプリケーションへと複写される。他の例として、一致するポスト受信要求が検出されたとする。この場合、当該受信要求は実行され、該要求によって指定された受信バッファは、受信回路によって直接書き込まれる。受信要求の割り込み要求制御ビットが、検査によってセットされていると判明した場合、命令処理装置の割り込みが発生する。
【００２８】
【発明の実施の形態】
本発明の実施例を詳細に説明するに先立ち、ＭＰＩを以下で簡単に要約する。
【００２９】
ＭＰＩの仕様では、アプリケーションソフトウェアプログラムとソフトウェア通信ライブラリとの間のソフトウェアインタフェースを規定する。ＭＰＩソフトウェアライブラリは、アプリケーションソフトウェアに対して、たとえばアプリケーションソフトウェアが呼び出せるソフトウェアサブルーチン一式として提供される。
【００３０】
通信は、たとえば異なるノード上で実行されるソフトウェアの処理間で転送されるメッセージによって実行される。ＭＰＩライブラリソフトウェアのサブルーチンのうち、もっとも原始的なものは送信サブルーチンと受信サブルーチンである。メッセージをあるソフトウェア処理から別なソフトウェア処理へと送信するための要求を発行する場合、送信元の処理は送信サブルーチンを呼び出す。受信側の処理が、メッセージを受信するための要求を発行する場合、受信側の処理は受信サブルーチンを呼び出す必要がある。受信側処理が指定したメッセージに一致するメッセージがすでに送られている場合、受信は直ちに完了する。受信側処理が指定したメッセージに一致するメッセージがまだ送られていない場合、かかるメッセージが到着するまで該受信要求は保留状態に置かれる。
【００３１】
ＭＰＩ仕様によれば、ＭＰＩメッセージは、データ部に加えて「メッセージエンベロープ」を含む。かかるエンベロープは、一定数のフィールドからなり、これらのフィールドはメッセージを識別して選択的に受信するために使用される。これらフィールドには、送信元フィールド、宛先フィールド、タグフィールド、およびコミュニケータフィールドが含まれる。メッセージの送信元は、送信元の存在によって暗黙に決定される。他のフィールドは、送信動作の引数によって指定される。コミュニケータフィールドは、通信動作の通信コンテキストを指定する。各通信コンテキストは、別個な「通信領域」を規定する。メッセージは、それらが送信されたコンテキストにおいてのみ受信され、異なるコンテキストで送られたメッセージは互いに干渉することがない。
【００３２】
ＭＰＩ規格はまた、メッセージ間で追い越しがあってはならないことを定めている。ある送信元が、２個のメッセージを同一の宛先に対して連続して送信した場合であって、いずれのメッセージも同一の受信要求に一致する場合、最初のメッセージが保留とされると、２番目のメッセージはこの動作においては受信できない。また受信側が２個の受信要求を連続してポストした場合であって、いずれの要求も同一のメッセージに一致する場合、最初の受信要求が保留とされると、２番目の要求は当該メッセージによって満たされることがない。
【００３３】
本発明の目的は、ＭＰＩ仕様の定めるインタフェースと同様な、ハードウェアとソフトウェアとの間のインタフェースを有する通信システムを提供することによって、ＭＰＩに適合したソフトウェアライブラリを実施することにある。このライブラリは、ライブラリソフトウェアの待ち時間オーバヘッドと、命令処理装置割り込み要求に起因するオーバヘッドとをほぼ伴わずに、機器インタフェースを使用できるライブラリとして機能する。
【００３４】
本発明の実施例を図１に示す。この実施例は、ネットワーク（２）によって接続された複数のノードからなるコンピュータシステムである。説明を簡単にするため、１個のノード（１）のみを示す。図２に、複数のノード（５０、５１、５２）をネットワーク（２）に接続する方法を示す。この方法によって、任意の複数のノードをネットワーク（２）によって接続することができる。図１のノード（１）は、このシステムを構成するノードのうちのひとつである。他のノードはいずれも、ノード（１）と同様な構造を有する。各ノードは、システムにおいて該ノードを一意に識別するノード番号を有し、また各ノードはシステム内の各通信処理を一意に識別する。
【００３５】
ノード（１）は、命令処理装置ＩＰ（３）と、ローカルメモリ（４）と、ネットワークインタフェースアダプタＮＩＡ（５）とを含む。これらの構成は、バス（６）によって当該ノード内で連係されている。命令処理装置（３）とネットワークインタフェースアダプタ（５）は、バス（６）を介してローカルメモリ（４）へのアクセスを共有する。また命令処理装置（３）は、バス（６）を介して、ネットワークインタフェースアダプタ（５）内の所定のレジスタに直接アクセスできる。ネットワークインタフェースアダプタ（５）から命令処理装置（３）へと至る割り込み要求線（７）が設けられ、これによって、ネットワークインタフェースアダプタ（５）は、命令処理装置（３）のサービスを要求することができる。
【００３６】
ネットワークインタフェースアダプタ（５）は、ネットワーク（２）に送信するための送信ポート接続機構（９）を有する送信回路部（８）と、ネットワーク（２）から受信するための受信ポート接続機構（１１）を有する受信回路部（１０）とを含む。メッセージは送信回路（８）によって組み立てられて、ネットワークへと送出される。かかるメッセージ（１２）の一例を図１に示す。メッセージ（１２）は、メッセージヘッダ部と、データ部（１７）とを有する。メッセージヘッダ部は、宛先ノード番号（ＤＮＮ）フィールド（１３）、送信元ノード番号（ＳＮＮ）フィールド（１４）、コミュニケータ（Ｃｏｍｍ）フィールド（１５）、ならびにタグ（Ｔａｇ）フィールドを含む。ネットワーク（２）は、ＤＮＮフィールド（１３）を使用して、メッセージの転送先を決定する。ＳＮＮフィールド（１４）は、送信元ノードに対応する一意なノード番号を含む。コミュニケータフィールド（１５）は、送信元ノードのソフトウェアが割り当てた値であって、当該メッセージが所属する通信コンテキストを指定する値を含む。タグフィールド（１６）の値は、複数のメッセージを区別するためにアプリケーションソフトウェアによって割り当てられる。
【００３７】
ネットワーク（２）は、パケット交換ネットワークであって、各メッセージのヘッダ部に含まれるＤＮＮフィールドに基づいて、送信回路から適当な受信回路へとメッセージを転送するネットワークである。メッセージは、メッセージ間の追い越しを禁じたＭＰＩ規格に準じて、互いを追い越すことなく転送される。
【００３８】
受信回路（１０）を使用して、当該ノードに対して送られたメッセージをネットワーク（２）から受信する。受信回路（１０）は、入力ポート制御装置（１８と）、受信シーケンサ（１９）と、ハッシュテーブル検索制御装置（２０）と、直接メモリアクセス制御装置ＤＭＡＣ（２１）とを含む。これらの制御装置はバス（６）に接続され、制御／状態信号（２２）によって相互に連係されている。入力ポート制御装置（１８）は、受信ポート接続機構（１１）を介してネットワーク（２）へと接続され、ネットワーク（２）からメッセージを受信するために使用される。直接メモリアクセス制御装置ＤＭＡＣ（２１）は、ローカルメモリ（４）からの読み出しと該メモリへの書き込みとを、バス（６）を介して制御するために使用される。ハッシュ検索制御装置（２０）は、ローカルメモリ（４）内のポスト受信ハッシュテーブル（２３）を検索して、メッセージヘッダのＳＮＮフィールドと、コミュニケータフィールドと、タグフィールドとに一致するエントリを確定するために使用される。受信シーケンサ（１９）は、他の制御装置の動作を監視し、ローカルメモリ（４）内のメモリ構造における取り出しと更新とを制御するとともに、受信回路（１０）が生成した割り込み要求を制御する。
【００３９】
本発明の一面は、メッセージの受信に関する動作に特に関わっている。メッセージを受信するためには、ソフトウェアはローカルメモリ（４）にあらかじめ各種のメモリ構造を生成しなければならない。これらの構造は、受信回路とソフトウェアとの双方によって使用される。ポスト受信要求は、ポスト受信ハッシュテーブル（２３）を使用して行なわれる。このテーブルには、ハッシュテーブルエントリ（以下ではＨＴＥと呼ぶ）が格納される。参照番号（２４）で示すＨＴＥは、有効ＨＴＥの一例である。有効ＨＴＥ（２４）には、ＳＮＮフィールド（２６）と、コミュニケータフィールド（２７）と、タグフィールド（２８）とが含まれる。ＳＮＮフィールド（２６）とタグフィールド（２８）は、無指定（Ｗｉｌｄｃａｒｄ）値を表わす特別な値を含むように、ソフトウェアによってプログラムしてもよい。受信回路（１０）がメッセージを受信すると、ハッシュテーブルが検索されて、メッセージヘッダのＳＮＮフィールドと、コミュニケータフィールドと、タグフィールドとに一致する受信指定を有するＨＴＥが検出される。ＨＴＥ（２４）はまた、受信回路（１０）が、複数の有効なハッシュテーブルエントリを一致したものとして検出した場合に使用される時間フィールド（２９）を有する。この場合、受信回路（１０）は、時間フィールドの値がもっとも古いハッシュテーブルエントリを選択する。参照番号（２４）のＨＴＥはさらに、ポスト受信制御語（ポストＲＣＷと称する）（３１）を指すポインタ（３０）を含む。ポストＲＣＷ（３１）は、受信回路（１０）によって取り出され、メッセージの受信先を指定する。ポストＲＣＷ（３１）は、ローカルメモリ内のデータバッファ（３３）を指すポインタ（３２）を含む。一例として、データポインタ（３３）は、受信要求を発行したアプリケーションのアプリケーション空間（３４）に含まれる。受信回路（１０）は、ＨＴＥ（２４）を更新することによって、ポストＲＣＷ（３１）が使用されていることを示すとともに、メッセージヘッダをポストＲＣＷ（３１）に記録し、メッセージデータをデータバッファ（３３）へと書き込む。他の一例として、参照番号（２５）のＨＴＥは、プール制御語（ＰＣＷと称する）（３６）を指すポインタ（３５）を含む。ＰＣＷ（３６）は、一連の空きプール受信制御語（プールＲＣＷと称する）を指すポインタ（３７）と、データプール（４１）の先頭ポインタ（３９）と末尾ポインタ（４０）とを保持するために使用される。複数のプールＲＣＷは、連鎖の形式をとる。ＰＣＷ（３６）は、連鎖内の最初の空きプールＲＣＷ（３８）を指すために保持されるポインタ（３７）を含む。このプールＲＣＷ（３８）は、別なプールＲＣＷ（４３）を指すポインタ（４２）を含む。メッセージが受信されて、一致するとして検出されたＨＴＥがＰＣＷを指す場合、受信回路は、該ＰＣＷを使用して、メッセージヘッダを記録するための空きプールＲＣＷと、メッセージデータを記録するためのデータプールの空間とを割り当てる。
【００４０】
ソフトウェアはたとえば、使用中の各コミュニケータ値に対して、ＳＮＮ無指定（Ｗｉｌｄｃａｒｄ）とタグ無指定（Ｗｉｌｄｃａｒｄ）とを有する有効ＨＴＥを生成する。これらのＨＴＥはそれぞれ、ＰＣＷを指すポインタを含む。ソフトウェアはまた、各ＰＣＷに対して、一連の空きプールＲＣＷと一データプールとを生成する。これは、一致するポストＲＣＷのないメッセージを、ソフトウェアが受信できるようにすることを目的としている。他のいずれの受信要求にも一致しないメッセージが受信されると、これらのメッセージはデータプールへと受信・格納される。メッセージが実際に受信されたのちに該メッセージの受信を求めて発行されたソフトウェアの要求は、データプールからアプリケーションの受信バッファへとデータを複写することによって処理される。
【００４１】
送信回路と受信回路の説明を続ける前に、メッセージの形式と、メッセージの送信を制御するために使用されるデータ構造の形式と、受信要求をポストするために使用されるデータ構造の形式とについて説明する。これらのデータ構造は、ローカルメモリ（４）内に設けられる。
【００４２】
図４に、本実施例で使用するメッセージ（１００）の詳細な形式を示す。最初のフィールドはＤＮＮフィールド（１０１）である。ネットワーク（２）は、ＤＮＮフィールド（１０１）を使用して、正しい宛先ノードの受信回路へとメッセージを転送する。ＤＮＮフィールド（１０１）は、ＭＰＩメッセージエンベロープの宛先フィールドと同じ機能を有する。ＳＮＮフィールド（１０２）は、受信ノードに対してメッセージ（１００）の送信元を識別する。ＳＮＮフィールド（１０２）は、ＭＰＩメッセージエンベロープの送信元フィールドと同じ機能を有する。コミュニケータフィールド（１０３）の値は、メッセージの送られた通信コンテキストを識別するＭＰＩメッセージエンベロープのコミュニケータ値と同様な意味をもつ値であるとともに、該メッセージを受信するための受信要求の通信コンテキストの値でもある。タグフィールド（１０４）の値は、送信要求によって指定されたＭＰＩメッセージエンベロープのタグ値と同様な意味を持つ値である。ソフトウェアヘッダ（ＷＳＨ）フィールド（１０５）は、送信元処理のライブラリソフトウェア用として確保されたフィールドである。遠隔割り込み要求Ｒビットフィールド（１０６）は、送信元処理のライブラリソフトウェアによって指定される制御ビットである。遠隔割り込み要求ビットＲ（１０６）がセットされると、宛先ノードの受信回路によるメッセージ（１００）の受信時に、受信ノードで命令処理装置（ＩＰ）割り込み要求が発生するように指定される。データ長さ（ＤａｔａＬｅｎ）フィールド（１０７）は、メッセージ（１００）のデータフィールド（１０９）の長さを指定する。ヘッダＣＲＣフィールド（１０８）には、先行するすべてのヘッダフィールドを使用して計算されるＣＲＣエラーチェック値が格納される。データフィールド（１０９）にはメッセージデータが格納される。データＣＲＣ（１１０）には、データフィールド（１０９）のみを使用して計算されるＣＲＣエラーチェック値が格納される。いずれのフィールドをメッセージの先頭にするかをネットワークと受信回路とで決定するために、メッセージヘッダとメッセージデータの２バイト語ごとに、同期ビットフィールド（１１１）が付加される。メッセージヘッダの最初の２バイト語に付加された同期ビット（１１２）のみがセットされ、他の同期ビットフィールドはすべてクリアされる。
【００４３】
メッセージを送信するための要求は、送信制御語（ＴＣＷと称する）の形式でローカルメモリに格納される。複数のＴＣＷを連鎖すると、複数のメッセージの送信が可能になる。これらのＴＣＷは、連鎖と同一の順序で送信回路によって処理される。図５にＴＣＷ（１２０）の詳細な形式を示す。次ポインタ連鎖フィールド（ＮＴＣＷＰｔｒ）（１２１）は、次の連鎖ＴＣＷを指すアドレスポインタを含む。次ＴＣＷ連鎖制御ビット（ＮＣ）（１２２）は、ＮＴＣＷＰｔｒ（１２１）フィールドが有効であって、ＴＣＷ連鎖内の次のＴＣＷを指す場合にセットされる。ＤＮＮフィールド（１２６）、コミュニケータ（Ｃｏｍｍ）フィールド（１２７）、タグ（Ｔａｇ）フィールド（１２８）、ＳＷＨフィールド（１２９）、Ｒフィールド（１３０）、データ長さ（ＤａｔａＬｅｎ）フィールド（１３１）は、送信すべきメッセージヘッダのそれぞれ該当するフィールドを含む。データポインタ（ＤａｔａＰｔｒ）フィールド（１２５）は、送信すべきメッセージデータを指すポインタを含む。割り込み要求ＩＲビットフィールド（１２４）がセットされると、送信動作の完了時に、送信回路が割り込み要求を発行する。ＩＭビットフィールド（１２３）は、割り込み要求機能の動作を制御する。ＩＭビット（１２３）をクリアすると、送信動作の完了時に、ＩＲビット（１２４）が送信回路によって再度読まれる。ＩＭビット（１２３）がセットされると、ＩＲビット（１２４）は再度読まれることはなく、送信回路によるＴＣＷの最初の読み込み時のＩＲビットの値が記憶され、該ビット値が割り込み要求を生成するか否かの決定に使用される。ＴＣＷの状態は、残りのＳフィールド（１３２）、Ｆフィールド（１３３）、Ｉフィールド（１３４）、Ｅフィールド（１３５）ならびにＥＣフィールド（１３６）から構成される。これらのフィールドの書き込みは、送信回路によって２回実行される。すなわち、送信回路がＴＣＷを取り出した直後に１回、メッセージの送信の完了時に１回行なわれる。開始状態Ｓビット（１３２）は、ＴＣＷが最初に取り出されたのちに送信回路によってセットされる。終了状態Ｆビット（１３３）は、送信回路によるＴＣＷの処理が終了した時点でセットされる。割り込み要求状態Ｉビット（１３４）は、Ｆビット（１３３）と同時にセットされるが、これはＩＲビット（１２４）を介して割り込み要求が出された場合にのみ行なわれる。エラー状態Ｅビット（１３５）もＦビット（１３３）と同時にセットされるが、これは送信元によるＴＣＷの処理中にエラーが発生した場合にのみ行なわれる。エラーコードＥＣフィールド（１３６）には、Ｅビット（１３５）のセットと同時に書き込みが行なわれる。ＥＣフィールド（１３６）には、ソフトウェアによってエラーを表わすと解釈されたコードが格納される。ライブラリがローカルメモリ中にＴＣＷを生成したのち、ライブラリは次のいずれかの動作を行なう。すなわち、ライブラリは、ＴＣＷを指すポインタを、送信回路内にあるＮＴＣＷＰｔｒレジスタ（後で説明する）へと書き込む。もしくは、送信回路による他のＴＣＷの処理がすでに行なわれているため該レジスタが使用中である場合は、ライブラリは、ＴＣＷ連鎖内の最後のＴＣＷに当該ＴＣＷを連結する。送信要求を処理する場合、送信回路はＴＣＷを取り出し、ＴＣＷ内の状態フィールドを更新するとともに、送信要求を実行する。ＴＣＷの処理が完了すると、送信回路は、再度状態ビットを更新し、連鎖内に次のＴＣＷがあればこれを取り出す。
【００４４】
ポスト受信要求は、非持続性受信要求と持続性受信要求の２種類に大別される。非持続性受信要求は単一のメッセージを受信するための要求であり、持続性受信要求は任意の複数のメッセージを受信するための要求である。非持続性受信要求は、ポストＲＣＷの形式でローカルメモリに格納され、要求されたメッセージが受信されるとその処理が完了する。複数のメッセージを受信するための持続性受信要求は、ポストＰＣＷの形式でローカルメモリに格納される。持続性受信要求は、一メッセージを受信したのちも有効である。
【００４５】
ネットワークの受信回路にメッセージが到着すると、受信回路はポスト受信ハッシュテーブルを検索して、一致する受信要求を検出しようとする。図６にハッシュテーブルエントリ（１４０）（ＨＴＥと称する）の詳細な形式を示す。ポスト受信要求のメッセージ指定は、ＳＮＮフィールド（１４１）と、コミュニケータ（Ｃｏｍｍ）フィールド（１４２）と、タグ（Ｔａｇ）フィールド（１４３）とから構成される。ＳＮＮフィールド（１４１）には、メッセージの送信元ノード番号か、もしくは無指定の送信元値を表わす特別な値（全ビットがセットされている）かのいずれかが格納される。コミュニケータフィールド（１４２）には、受信コンテキストのコミュニケータ値が格納される。この値は、メッセージの送信コンテキストの値と同一である。受信コンテキストと送信コンテキストのコミュニケータ値は同一でなければならない。タグフィールド（１４３）には、メッセージのタグか、もしくは無指定のタグ値を表わす特別な値（全ビットがセットされている）かのいずれかが格納される。ＲＣＷもしくはＰＣＷの形式の受信要求は、ＨＴＥから始まるこれらＲＣＷもしくはＰＣＷの連鎖を形成することによってポストされる。この場合の受信指定は、要求の指定と同一である。ポインタ（Ｐｔｒ）フィールド（１４４）は、ＲＣＷもしくはＰＣＷを指す連鎖アドレスポインタを含む。連鎖有効ビットＣ（１４５）は、ポインタフィールド（１４４）が有効であることを示す。Ｐビット（１４６）は、ポインタフィールド（１４４）がポストＰＣＷを直接指している場合にセットされ、ポストＲＣＷを指す場合にはクリアされる。時間フィールド（１４８）には、ＲＣＷもしくはＰＣＷがポストされた時間（ポインタフィールド（１４４）によって示される）に対応するタイムスタンプ値が格納される。
【００４６】
特定の受信指定を有するＨＴＥのポスト受信ハッシュテーブル内における格納場所は、２つのステップからなる処理によって決定される。第１のステップでは、ハッシュ機能を使用して受信指定のハッシングが行なわれる。ハッシュ機能は、同一の入力パラメータに対しては常に同一の結果値を発生するが、他の場合にはランダムな結果値を発生する数学的機能である。受信指定のＳＮＮフィールドの値、コミュニケータフィールドの値ならびにタグフィールドの値が、ハッシュ機能に与えられる入力パラメータとなる。出力値、すなわちハッシュテーブル内のＨＴＥの個数の非等価演算の結果は、ハッシュテーブルの基底アドレスから最初の検索点に至るインデックスを構成する。第２のステップでは、これらのＨＴＥが最初の検索点から逐次検索される。検索がハッシュテーブルの上限に達すると、基底アドレスへと戻る。この処理は、当該ＨＴＥが検出されるか、もしくは無効なＨＴＥが検出されるまで行なわれる。無効なＨＴＥが検出された場合、当該ＨＴＥは存在しない。新たなＨＴＥを生成する必要がある場合、検索中に検出された古いＨＴＥ（そのＣビットがクリアされたもの）に重ね書きするか、もしくは検索中に最初に検出された有効なＨＴＥに重ね書きする。この検索手順において注目すべき点は、メッセージに一致する受信指定を有するＨＴＥを検索・確定するわけではなく、特定の受信指定を有するＨＴＥを確定するために検索が行なわれるという点である。
【００４７】
すべての非持続性受信要求は、それぞれに付加された一意なタイムスタンプ値を有する。低いタイムスタンプ値は受信要求が古いことを示し、高いタイムスタンプ値はより新しい受信要求を表わす。持続性受信要求にもタイムスタンプ値が付加されているが、通常このタイムスタンプ値は遠い未来を指す最大値にセットされている。
【００４８】
ポストすべき各受信要求に対応するＲＣＷもしくはＰＣＷは、当該受信要求の受信指定を含むＨＴＥから連鎖を行ない、必要に応じて新たなＨＴＥを形成しなければならない。特定の受信指定に対しては、有効なＨＴＥが１個のみハッシュテーブル内に存在するが、同一の受信指定を有する要求が複数存在する場合もある。後者の場合、ＲＣＷやＰＣＷは、相互に連鎖を行なって、ポストＲＣＷを生成時刻順に繋げた単一の連鎖を形成する。生成時刻のもっとも古いＲＣＷが、連鎖の最後尾でＨＴＥ（もしあればＰＣＷ）に直接付加される。ただし、同一の受信指定を有するＰＣＷを１個以上ポストすることは不可能であり、無意味である。またＰＣＷの後にＲＣＷを連鎖することもできない。受信要求は、ＲＣＷとＰＣＷが連鎖された順序で処理され、もっとも古い要求が最初に処理される。
【００４９】
到着するメッセージに一致する受信指定は、最大４種類存在する。第１の種類は、ＳＮＮフィールド、タグフィールド、コミュニケータフィールドのいずれも一致の場合からなり、第２の種類は、ＳＮＮフィールドは無指定、タグフィールドが一致、コミュニケータフィールドが一致の場合からなり、第３の種類は、ＳＮＮフィールドが一致、タグフィールドは無指定、コミュニケータフィールドが一致の場合からなり、第４の種類は、ＳＮＮフィールドは無指定、タグフィールドも無指定、コミュニケータフィールドが一致の場合からなる。メッセージが到着すると、受信回路は、一致する受信指定を有する４個のＨＴＥをすべて確定しようと試みる。これらのＨＴＥのうち任意の個数が検出されるが、検出された複数のＨＴＥに有効なポインタフィールドを示すＣビットがセットされている場合には、受信回路は、時間フィールドを利用して、もっとも古い保留ポスト受信要求のＨＴＥを、該当するＨＴＥの中から選択する。４個のＨＴＥがいずれも検出されないか、もしくは各ＨＴＥのＣビットがすべてクリアされている場合、一致する受信要求は存在せず、受信回路はエラーを発生させてメッセージを廃棄する。
【００５０】
次に、受信回路は選択されたＨＴＥのＰビットを検査する。Ｐビットがセットされていれば、ポインタフィールドは、持続性受信要求に対応するポストＰＣＷを指している。Ｐビットがクリアされていれば、ポインタフィールドは非持続性受信要求に対応するポストＲＣＷを指している。
【００５１】
ＰＣＷは、ローカルメモリ内のデータ構造であって、２種類の受信プールを管理するために使用される。一方の受信プールは、連鎖された一連のプールＲＣＷである。これらのプールＲＣＷは、ＰＣＷが受信回路によってポストＰＣＷとしてアクセスされる場合に、受信されるメッセージに関する情報を記録するために使用される。他方の受信プールは、データプールである。このプールは、ポストＲＣＷに接続された受信バッファに受信されないメッセージデータを記録するために使用される。単一のＰＣＷは、それぞれ異なる受信指定を有する複数のＨＴＥを使用して複数回ポストしてもよい。これによって、他のいずれのポスト受信要求にも一致しないメッセージを受信するためのデフォルト持続性要求の機能が実現される。対応するバッファを持たないポストＲＣＷをＰＣＷに連係すると、ＰＣＷのデータプールを使用することにより、ポストＲＣＷに一致するメッセージデータを受信することができる。
【００５２】
図７にＰＣＷ（１５０）の詳細な形式を示す。ＰｏｏｌＲＣＷＰｔｒフィールド（１５１）には、空きプールＲＣＷの一連鎖内における最初のプールＲＣＷを指すアドレスポインタが格納される。ＮＣビット（１５２）がセットされると、ＰｏｏｌＲＣＷＰｔｒフィールド（１５１）が有効であることを示す。ＮＣビット（１５２）がクリアされると、ＰｏｏｌＲＣＷＰｔｒフィールド（１５１）が無効であって、空きプールＲＣＷが残っていないことを示す。Ｎビット（１５３）はＲＣＷエラー状態ビットであって、Ｎビットがセットされると、プールＲＣＷが残っていないためエラーが発生したことを示す。Ｗビット（１５４）はＲＣＷ警告状態ビットである。Ｗビットがセットされると、プールＲＣＷの連鎖が短くなりつつあるため、できるだけ早く該連鎖を延長する必要があることを示す。Ｏビット（１５５）はプールエラー状態ビットであって、メッセージデータを記録するデータプール空間が残り少ないためにエラーが発生したことを示す。Ｌビット（１５６）はプール警告状態ビットであって、データプールが残り少ないため、これをできるだけ早く増加させる必要があることを示す。Ｓｅｑフィールド（１５７）は、当該ＰＣＷを使用してこれまでに受信したメッセージの個数を示す。先頭ポインタ（ＨｅａｄＰｔｒ）フィールド（１５８）、末尾ポインタ（ＴａｉｌＰｔｒ）フィールド（１５９）ならびにＬＷＭＰｔｒフィールド（１６０）は、先頭ポインタ、末尾ポインタ、ウォータマークアドレスポインタをそれぞれ有するフィールドである。これらのフィールドは、データプールの管理に使用される。
【００５３】
図１０に空きプールＲＣＷ（２２０）の詳細な形式を示す。ＮＣビット（２２２）がセットされている場合、ＮＰｏｏｌＲＣＷＰｔｒフィールド（２２１）には、プールＲＣＷの連鎖における次のプールＲＣＷを指すアドレスポインタが格納されている。ＮＣビット（２２２）がクリアされていれば、このプールＲＣＷは連鎖内の最後のプールＲＣＷである。メッセージを受信するためにいずれかのプールＲＣＷを使用すると、ＮＰｏｏｌＲＣＷＰｔｒフィールド（２２１）とＮＣビット（２２２）は、ＰＣＷのＰｏｏｌＲＣＷＰｔｒフィールド（１５１）とＮＣビットフィールド（１５２）とにそれぞれ複写される。ＳＷビット（２２３）がソフトウェアによってセットされると、このプールＲＣＷが連鎖の終端の近くにあり、このプールＲＣＷが使用されると警告が出されることを示す。またＳＷビット（２２３）がセットされると、受信の完了時に、受信回路は割り込み要求を発行する。ＩＭビット（２２４）は、割り込み要求機能の動作を制御する。ＩＭビット（２２４）がクリアされると、ＩＲビット（２２５）は、受信の完了時に受信回路によって再度読まれる。ＩＭビット（２２４）がセットされると、ＩＲビット（２２５）は再度読まれることはない。この場合、受信回路によるプールＲＣＷの最初の読み出し時のＩＲビットの値が記憶されて、この値が割り込み要求を発生させるか否かの決定に使用される。受信状態を書き込む格納場所（２２６）は、ゼロに初期化される。
【００５４】
受信回路がプールＲＣＷを取り出すと、このプールＲＣＷは受信メッセージに関する情報によって直ちに更新される。更新されたプールＲＣＷ（２３０）の形式を図１１に示す。ＮＰｏｏｌＰｔｒフィールド（２３１）、ＮＣフィールド（２３２）、ＳＷフィールド（２３３）、ＩＭフィールド（２３４）、ＩＲフィールド（２３５）は受信回路によって書き込まれることはない。Ｓｅｑフィールド（２３６）には、ＰＣＷが取り出された時点のＰＣＷＳｅｑフィールド（１５７）の値が格納される。ＤａｔａＰｔｒフィールド（２３７）には、メッセージデータを受信するために使用されるデータプールから割り当てられたデータバッファを指すポインタが格納される。ＳＮＮフィールド（２３８）、コミュニケータ（Ｃｏｍｍ）フィールド（２３９）、タグ（Ｔａｇ）フィールド（２４０）、ＳＷＨフィールド（２４１）、Ｒフィールド（２４２）、データ長さ（ＤａｔａＬｅｎ）フィールド（２４３）にはそれぞれ、メッセージヘッダからの対応する値が格納される。プールＲＣＷの状態は、残りのＳフィールド（２４４）、Ｂフィールド（２４９）、Ｆフィールド（２４５）、Ｉフィールド（２４６）、Ｅフィールド（２４７）ならびにＥＣフィールド（２４８）から構成される。これらのフィールドは、受信回路によって２回書き込まれる。すなわち、受信回路が他のフィールドを書き込む時点でプールＲＣＷを取り出した直後に１回、メッセージの受信の完了時に１回書き込まれる。Ｓビット（２４４）がセットされると、このプールＲＣＷを使用したメッセージの受信が開始されたことを示す。Ｂフィールド（２４９）は使用されず、その値は不定である。Ｆビット（２４５）は、このプールＲＣＷを使用したメッセージの受信が終了した時点でセットされる。Ｉビット（２４６）は、ＩＲビット（２２５）がすでにセットされていて、割り込み要求が発行されたことを示す。Ｅビット（２４７）は、エラーが発生した場合にセットされる。この場合、ＥＣフィールド（２４８）には、発生したエラーの種類を示すエラーコードが格納される。
【００５５】
図１２にデータプール（２５０）の構成を示す。データプールは、ローカルメモリ内の空き空間からなる連続ブロックであって、メッセージデータの受信に使用される。ＨｅａｄＰｔｒ（２５３）と示されたポインタは、当該ＰＣＷのＨｅａｄＰｔｒフィールド（１５８）にあるデータプールのヘッドポインタに対応している。このポインタは、空き空間ブロックの基底アドレスを指す。このアドレスポインタより低い格納場所には、データプール内にすでに受信されたメッセージデータ（２５２）が格納されている。データプール（２５０）から受信バッファ（２５１）が割り当てられる場合、この受信バッファは、ＨｅａｄＰｔｒ（２５３）の指す基底アドレスに基づいて割り当てられる。ヘッドポインタは、新たなヘッドポインタＮｈｅａｄＰｔｒ（２５４）を生成するために割り当てられたブロックのサイズ分だけ増分される。ＴａｉｌＰｔｒ（２５６）と示されたポインタは、ＰＣＷのＴａｉｌＰｔｒフィールド（１５９）にあるデータプールのポインタに対応している。このポインタは、空き空間ブロックの限界を示す。データプールのサイズを越えるブロックを割り当てようとする試みは、ＴａｉｌＰｔｒ（２５６）の示すデータプールの限界を越えてＮＨｅａｄＰｔｒ（２５４）を増分しようとすることに相当し、この場合エラーが発生する。ＬＷＭＰｔｒ（２５５）と示されたポインタは、ＰＣＷのＬＷＭＰｔｒフィールド（１６０）にあるデータプールのウォータマークポインタに対応している。このポインタは、空き空間ブロックのウォータマークを指す。ＮＨｅａｄＰｔｒ（２５４）が、ＰＣＷのＬＷＭＰｔｒフィールド（１６０）にあるウォータマークポインタを越える場合、データプールの空き空間が残り少ないことを示す警告が出される。ＰＣＷのＬＷＭＰｔｒフィールド（１６０）は、たとえばＰＣＷのＴａｉｌＰｔｒフィールド（１５９）より十分に低く設定される。これによって、警告が出された場合、データプールの空き空間がなくなる前にデータプールを拡張することができる。データプールの空き空間の割り当てに成功した場合、ＰＣＷのＨｅａｄＰｔｒフィールド（１５８）は、ＮＨｅａｄＰｔｒ（２５４）の値によって更新される。空き空間の割り当てに失敗した場合、ＰＣＷのＯビット（１５５）がセットされる。ウォータマークを越えた場合はＬビット（１５６）がセットされる。
【００５６】
図８に保留状態のポストＲＣＷ（１７０）を示す。ＮＰｔｒフィールド（１７１）、ＮＰフィールド（１７３）、ＮＴｉｍｅフィールド（１７６）は、同一の受信指定を有する次に古いポストＲＣＷもしくはＰＣＷに繋がる連鎖のリンクを形成している。これらのフィールドは、ＮＣビット（１７２）がセットされている場合にのみ有効である。ＮＰｔｒフィールド（１７１）には、ＨＴＥに連鎖される次に古いポストＲＣＷまたはＰＣＷを指すアドレスポインタが格納される。ＮＰビット（１７３）がセットされると、次にポストＰＣＷが連鎖されていることを示す。ＮＰビット（１７３）がクリアされている場合、次にポストＲＣＷが連鎖されていることを示す。ＢＥビット（１７４）はバッファイネーブルビットである。ＢＥビット（１７４）がセットされると、ＢｕｆｆＰｔｒフィールド（１８０）とＢｕｆｆＳｉｚｅフィールド（１８１）とが有効であって、対応するデータバッファのアドレスポインタとサイズとをそれぞれ有することを示す。この対応するデータバッファは、要求されたメッセージのメッセージデータが受信されるバッファである。ＢＥビット（１７５）がクリアされている場合、ＰＣＷＰｔｒフィールド（１７９）が有効であって、ＰＣＷのうち、そのデータプールがメッセージの受信に使用されるＰＣＷのアドレスポインタが該フィールドに格納される。
【００５７】
受信回路は、ポストＲＣＷを検出すると、ＮＰｔｒフィールド（１７１）、ＮＣフィールド（１７２）、ＮＰフィールド（１７３）、ＮＴｉｍｅフィールド（１７６）を、ＨＴＥのＰｔｒフィールド（１４４）、Ｃフィールド（１４５）、Ｐフィールド（１４４）、Ｔｉｍｅフィールド（１４８）へとそれぞれ複写し、ＨＶフィールド（１４７）をセットする。これによって、ハッシュテーブルにポストされていた当該ＲＣＷのポストが解除される。これに続くポストＲＣＷもしくはポストＰＣＷがある場合、ＨＴＥは次にこれを指し示す。ポストＲＣＷもしくはポストＰＣＷが存在しない場合、ＨＴＥは有効であるが、示す対象を持たない。注目すべき点は、無効なＨＴＥを検出するとハッシュテーブル検索アルゴリズムが停止するため、ＨＴＥを無効としないことが重要であるとういう点である。これによって、別なＨＴＥの検索中に、他のＨＴＥが検出されるという不具合を防ぐことができる。ＩＲビット（１７８）は割り込み要求ビットである。このビットがセットされると、受信回路は、受信の完了時に割り込み要求を発行する。ＩＭビット（１７７）は、割り込み要求機能の動作を制御する。ＩＭビット（１７７）がクリアされていると、ＩＲビット（１７８）は受信の完了時に受信回路によって再度読まれる。ＩＭビット（１７７）がセットされていると、ＩＲビット（１７８）は再度読まれることがなく、受信回路がＲＣＷを最初に読んだ時点でのＩＲビットの値が記憶され、この値を使用して、割り込み要求を発行するか否かが決定される。受信状態の格納場所（１８２）は、ゼロに初期化される。
【００５８】
受信回路がポストＲＣＷを取り出すと、このポストＲＣＷは受信メッセージに関する情報によって直ちに更新される。更新されたポストＲＣＷ（１９０）の形式を図９に示す。ＮＰｔｒフィールド（１９１）、ＮＣフィールド（１９２）、ＮＰフィールド（１９３）、ＢＥフィールド（１９４）、Ｎｔｉｍｅフィールド（１９５）、ＩＭフィールド（１９７）、ＩＲフィールド（１９８）は、受信回路によって書き込まれることはない。ＢＥビット（１７４）がセットされていれば、Ｓｅｑフィールド（１９９）とＤａｔａＰｔｒフィールド（２００）はいずれも書き込まれず、ＰＣＷＰｔｒフィールド（１７９）とＢｕｆｆＰｔｒフィールド（１８０）は、ソフトウェアによってセットされたままの状態となる。ＢＥビット（１７４）がクリアされていれば、Ｓｅｑフィールド（１９９）が書き込まれ、ＰＣＷが受信回路によって取り出された時点でのＰＣＷのＳｅｑフィールド（１５７）の値がこのフィールド（１９９）に格納される。またＤａｔａＰｔｒフィールド（２００）には、メッセージデータの受信に使用されるデータプールから割り当てられたデータバッファの基底アドレスが書き込まれる。ＳＮＮフィールド（２０１）、Ｃｏｍｍフィールド（２０２）、Ｔａｇフィールド（２０３）、ＳＷＨフィールド（２０４）、Ｒフィールド（２０５）、ＤａｔａＬｅｎフィールド（２０６）には、メッセージヘッダからの対応する値がそれぞれ格納される。残りのＳフィールド（２０７）、Ｂフィールド（２０８）、Ｆフィールド（２０９）、Ｉフィールド（２１０）、Ｅフィールド（２１１）、ＥＣフィールド（２１２）は、受信回路によって２回書き込まれる。すなわち、受信回路が他のフィールドを書き込む時点でポストＲＣＷを取り出した直後に１回、メッセージの受信の完了時に１回書き込まれる。Ｓビット（２０７）がセットされると、このポストＲＣＷを使用したメッセージの受信が開始されたことを示す。Ｂビット（２０８）がセットされるのは、受信回路がポストＲＣＷを取り出した時点で、バッファがＢＥビット（１９４）を介してイネーブルされた場合である。このポストＲＣＷを使用したメッセージの受信が終了すると、Ｆビット（２０９）がセットされる。Ｉビット（２１０）は、ＩＲビット（１７８）がセットされ、割り込み要求が発行されたことを示す。Ｅビット（２１１）は、エラーが発生するとセットされる。この場合、ＥＣフィールド（２１２）には、発生したエラーの種類を示すエラーコードが格納される。
【００５９】
本実施例に関して、ＮＩＡ（ネットワークインタフェースアダプタ）に含まれる回路を以下で説明する。図１３にＮＩＡ（５）の詳細な回路図を示す。ＮＩＡ（５）には、送信回路（３００）と、受信回路（３０１）と、両回路が共有する他の回路とが含まれる。さらに、割り込み要求状態レジスタ（２６５）と、割り込み要求マスクレジスタ（２７７）と、割り込み要求回路（３０４、３０５）と、動作状態レジスタ（２６０）と、保留制御レジスタ（２５７）と、ノード番号レジスタ（２５０）とがＮＩＡ（５）に含まれる。
【００６０】
送信回路（３００）から出力される割り込み要求信号ＩＲＱｓ（３０２）と、受信回路（３０１）から出力される割り込み要求信号ＩＲＱｓ（３０３）とによって、割り込み要求状態レジスタ（２６５）の割り込み要求ビットがセットされる。ＡＮＤゲート（３０４）によって、各割り込み要求ビットと、割り込み要求マスクレジスタ（２７７）内の対応する割り込みマスクビットとの間で論理積演算が行なわれる。これらＡＮＤゲート（３０４）のすべての出力は、ＯＲゲート（３０５）によって論理和がとられ、その結果ＩＰ割り込み要求信号（７）が生成されてＩＰ（命令処理装置）（３）へと送られる。ＩＰ（３）は、バス（６）を介して割り込み要求ビットのいずれもチェックもしくはクリアすることができるとともに、バス（６）を介して割り込みマスクビットをプログラムすることができる。割り込み要求状態レジスタ（２６５）の形式を図１６に示す。割り込みマスクレジスタ（２７７）の形式は、割り込み要求状態レジ
送信回路（３００）から出力される割り込み要求信号ＩＲＱｓ（３０２）と、受信回路（３０１）から出力される割り込み要求信号ＩＲＱｓ（３０３）とによって、割り込み要求状態レジスタ（２６５）の割り込み要求ビットがセットされる。ＡＮＤゲート（３０４）によって、各割り込み要求ビットと、割り込み要求マスクレジスタ（２７７）内の対応する割り込みマスクビットとの間で論理積演算が行なわれる。これらＡＮＤゲート（３０４）のすべての出力は、ＯＲゲート（３０５）によって論理和がとられ、その結果ＩＰ割り込み要求信号（７）が生成されてＩＰ（命令処理装置）（３）へと送られる。ＩＰ（３）は、バス（６）を介して割り込み要求ビットのいずれもチェックもしくはクリアするこスクビットである。この割り込み回路を使用することにより、送信回路（３００）や受信回路（３０１）は、割り込み要求をＩＰへと発行することができる。
【００６１】
割り込み要求状態レジスタ（２６５）の詳細な形式を図１６に示す。各割り込み要求ビットの意味を以下で説明する。ＴＩビット（２６６）は、送信割り込み要求ビットである。ＩＲビット（１２４）をセットしたＴＣＷの処理を送信回路が完了すると、ＴＩビット（２６６）がセットされる。ＴＥビット（２６７）は、送信エラー割り込み要求ビットである。エラーの発生を示すＴＣＷのＥビット（１３５）を送信回路がセットすると、ＴＥビット（２６７）がセットされる。ＲＩビット（２６８）は、受信割り込み要求ビットである。ＩＲビット（１７８）をセットしたポストＲＣＷ、もしくはＩＲビット（２２５）をセットしたプールＲＣＷのいずれかの処理を受信回路が完了した時点で、ＲＩビット（２６８）がセットされる。ＲＥビット（２６９）は、受信エラー割り込み要求ビットである。エラーの発生を示すポストＲＣＷのＥビット（２１１）、もしくはプールＲＣＷのＥビット（２４７）を受信回路がセットすると、ＲＥビット（２６９）がセットされる。ＲＲビット（２７０）は、受信回路によってセットされる遠隔割り込み要求ビットである。受信回路がポストＲＣＷのＦビット（２０９）もしくはプールＲＣＷのＦビット（２４５）をセットした場合であって、受信されたメッセージにＲビット（１０６）がセットされている場合にのみ、ＲＲビット（２７０）はセットされる。ＰＮ（２７１）、ＰＷ（２７２）、ＰＯ（２７３）、ＰＬ（２７４）の各ビットは、それぞれＰＣＷの割り込み要求ビットである。受信回路がＰＣＷのＮビット（１５３）、Ｗビット（１５４）、Ｏビット（１５５）もしくはＬビット（１５６）をそれぞれセットすると、対応するＰＮビット（２７１）、ＰＷビット（２７２）、ＰＯビット（２７３）、ＰＬビット（２７４）が受信回路によってセットされる。ＮＭビット（２７５）は、不一致検出エラー割り込み要求ビットである。受信回路がポストＲＣＷ、プールＲＣＷのいずれも確定できなかった場合、ＮＭビット（２７４）が受信回路によってセットされる。ＣＥ割り込み要求ビット（２７６）は、ヘッダＣＲＣエラービットであって、メッセージヘッダに不正なヘッダＣＲＣが含まれていた場合に受信回路によってセットされる。この場合、メッセージは破棄される。
【００６２】
ノード番号レジスタ（２５０）は、ノードに割り当てられた一意なノード番号を保持するために使用される。このレジスタは、バス（６）を介してＩＰ（命令処理装置）（３）によってプログラムできる。たとえばノード番号レジスタ（２５０）は、システムの初期化においてＩＰによってのみ書き込みが可能である。ノード番号レジスタ（２５０）の出力（３１０）は、送信回路（３００）へと送られる。送信回路（３００）では、この出力（３１０）を使用して、ノードから送られた各メッセージのＳＮＮフィールド（１０２）を格納する。
【００６３】
保留制御レジスタ（２５７）は、バス（６）を介してＩＰ（３）によってプログラムできる。図１４にこのレジスタの形式を示す。保留制御レジスタ（２５７）には２個の制御ビットが含まれる。すなわち、送信保留ビットＴＨ（２５８）と、受信保留ビットＲＨ（２５９）とである。動作状態レジスタ（２６０）は、バス（６）を介してＩＰ（３）によって読み出すことができる。図１５に動作状態レジスタ（２６０）の形式を示す。動作状態レジスタ（２６０）には４個の状態ビットがある。すなわち、送信動作開始ビットＴＳ（２６１）と、送信動作終了ビットＴＦ（２６２）と、受信動作開始ビットＲＳ（２６３）と、受信動作終了ビットＲＦ（２６４）とである。これらのレジスタは、データ構造にアクセスするためのロック機構を形成しており、ＮＩＡとソフトウェアライブラリとの間でアクセスを共有している。
【００６４】
図１３において、保留制御レジスタ（２５７）からのＴＨビットの出力（３４８）は、送信回路（３００）に接続されている。この出力は、送信回路を一時的に保留して、次の送信要求の処理を保留とするために使用される。送信回路（３００）から出力されるＴＳ動作信号（３４９）は、ＴＳビット（２６１）に接続され、また送信回路（３００）からのＴＦ動作信号（３５０）は、ＴＦビット（２６２）に接続される。これらのビットは、送信回路のシーケンサの現在の状態を反映している。保留制御レジスタ（２５７）からのＲＨビットの出力（４２６）は、受信回路へと接続される。この出力は、受信回路を一時的に保留することによって、いずれのメッセージも失わずに別なメッセージの受信の開始を保留にするために使用される。受信回路からのＲＳ動作信号（４２７）はＲＳビット（２６３）に接続され、また受信回路から出されるＲＦ動作信号（４２８）はＲＦビット（２６４）に接続される。これらのビットは、受信回路のシーケンサの現在の状態を反映している。
【００６５】
図１７に送信回路（３００）の詳細な回路図を示す。図１８に示す送信回路の動作のフローを参照しながら、送信回路について以下で説明する。送信シーケンサ（３２０）が送信回路全体を制御する。送信回路の動作は、ＴＨビット（２５８）からのＴＨ保留信号（３４８）を介して保留とすることができる。シーケンサの状態は、ＴＳビット（２６１）とＴＦビット（２６２）とにそれぞれ接続されたＴＳ動作信号（３４９）とＴＦ動作信号（３５０）とを介して、動作状態レジスタ（２６０）に反映される。送信シーケンサ（３２０）は、送信シーケンサ（３２０）と直接メモリアクセス制御装置ＤＭＡＣ（３２１）との間で転送されるＤＭＡ制御信号（３４５）を介して、ＤＭＡＣ（３２１）を制御する。ＤＭＡＣ（３２１）は、バス（６）を制御することによって、送信回路にローカルメモリのＴＣＷの取り出しと更新を行なわせることができるとともに、ローカルメモリからのメッセージデータの取り出しを制御できる。また送信シーケンサは、他の様々な制御信号（３４４）を介してネットワーク出力ポート（３２２）を制御する。ネットワーク出力ポート（３２２）は、送信ヘッダバッファ（３３５）の出力（３５４）との接続を有するとともに、ノード番号レジスタとの接続（３１０）を有し、メッセージヘッダを生成する。またネットワーク出力ポート（３２２）は、ローカルメモリから取り出されたメッセージデータを、バス（６）を介して受信し、これによってメッセージのデータフィールドを形成する。さらにネットワーク出力ポート（３２２）は、各メッセージのヘッダＣＲＣフィールドとデータＣＲＣフィールドを計算して、形成されたメッセージを送信回路のネットワーク接続機構（９）を介してネットワークへと送出する。ＴＣＷ連鎖バッファ（３３１）には、ＮＴＣＷＰｔｒレジスタ（３３２）とＮＣビットレジスタ（３３３）とが含まれている。ＴＣＷ連鎖バッファ（３３１）は、次に処理すべきＴＣＷに関する連鎖情報を保持するために使用される。また、ＮＴＣＷＰｔｒレジスタ（３３２）は、バス（６）を介してＩＰ（命令処理装置）によってアクセスできる。送信シーケンサ（３２０）が次のＴＣＷの処理を開始すると、送信シーケンサは、その他の制御信号（３４４）のうちのいずれか１個をアサートして、ＮＴＣＷＰｔｒレジスタ（３３２）の内容のコピーをＴＣＷＰｔｒレジスタ（３３４）へとラッチする。ＴＣＷＰｔｒレジスタ（３３４）は、現在処理中のＴＣＷを指すアドレスポインタを含む。ＴＣＷＰｔｒレジスタ（３３４）の出力（３５１）は、現在のＴＣＷを判定する場合に、ＤＭＡＣ（３２１）によってＴＣＷのアドレスポインタとして使用される。ＴＣＷは、ローカルメモリ（４）からバス（６）を介して取り出され、その内容は送信回路内のレジスタに格納される。ＴＣＷのＮＴＣＷＰｔｒフィールド（１２１）とＮＣビット（１２２）は、ＮＴＣＷＰｔｒレジスタ（３３２）とＮＣビットレジスタ（３３３）とにそれぞれ格納される。ＴＣＷのＩＭビット（１２３）とＩＲビット（１２４）は、ＩＭビットレジスタ（３２３）とＩＲビットレジスタ（３２４）とにそれぞれ格納される。これらのビットの出力と、ＮＣビットレジスタ（３３３）の出力とで状態入力信号（３４３）が構成され、これらの信号（３４３）は送信シーケンサ（３２０）へと送られる。ＤａｔａＰｔｒレジスタ（３４２）は、ＴＣＷからのＤａｔａＰｔｒフィールド（１２５）を保持するために使用される。送信ヘッダバッファ（３３５）は、ＤＮＮレジスタ（３３６）と、Ｃｏｍｍレジスタ（３３７）と、Ｔａｇレジスタ（３３８）と、ＳＷＨレジスタ（３３９）と、Ｒビットレジスタ（３４０）と、ＤａｔａＬｅｎレジスタ（３４１）とで構成される。これらのレジスタは、ＴＣＷのＤＮＮフィールド（１２６）、Ｃｏｍｍフィールド（１２７）、Ｔａｇフィールド（１２８）、ＳＷＨフィールド（１２９）、Ｒフィールド（１３０）、ＤａｔａＬｅｎフィールド（１３１）をそれぞれ保持するために使用される。またＤａｔａＰｔｒレジスタ（３４２）とＤａｔａＬｅｎレジスタ（３４１）は、ＤＭＡＣ（３２１）への出力接続（３５３）、（３５２）をそれぞれ有しており、これらの接続は、ＤＭＡＣが送信シーケンサによってメッセージデータの取り出しを要求された場合に使用される。ＴＣＷの取り出しの直後と、ＴＣＷの処理の完了時とに、送信回路はＴＣＷの状態フィールドを更新する。送信回路はＴＣＷ状態バッファ（３２５）を有しており、送信シーケンサ（３２０）からの状態出力（３４６）は、ＴＣＷ状態フィールドに書き戻される前にこのバッファ（３２５）に入れられる。ＴＣＷ状態バッファの内容がＴＣＷに書き込まれるとき、ＴＣＷ状態バッファのＳレジスタ（３２６）、Ｆレジスタ（３２７）、Ｉレジスタ（３２８）、Ｅレジスタ（３２９）、ＥＣレジスタ（３３０）は、ＴＣＷのＳフィールド（１３２）、Ｆフィールド（１３３）、Ｉフィールド（１３４）、Ｅフィールド（１３５）、ＥＣフィールド（１３６）へとそれぞれ書き込まれる。
【００６６】
送信回路の動作フローを図１８に示す。電源を投入すると、ＮＩＡ内のすべてのレジスタと状態とがクリアされ、送信シーケンサは開始ステップ（５００）から動作を開始する。ステップ（５０１）において、送信シーケンサは、ＴＨビット（２５８）がクリアされて、ＮＣビット（３３３）がセットされるのを待つ。クリアされたＴＨビット（２５８）は、ソフトウェアライブラリが送信回路によるＴＣＷの処理を妨げないことを示しており、セットされたＮＣビット（３３３）は、次に処理すべきＴＣＷのアドレスがＮＴＣＷＰｔｒレジスタ（３３２）に格納されていることを示す。ステップ（５０２）において、ＴＳビット（２６１）がセットされて、送信回路がＴＣＷの処理を開始したことを示す。ステップ（５０３）において、ＴＣＷＰｔｒレジスタ（３３４）にＮＴＣＷＰｔｒレジスタ（３３２）からのＴＣＷのアドレスが格納されるとともに、Ｆレジスタ（３２７）と、Ｉレジスタ（３２８）と、Ｅレジスタ（３２９）と、ＥＣレジスタ（３３０）とが初期状態へとクリアされて、エラーが発生していないことを示す。ステップ（５０４）において、送信シーケンサ（３２０）は、ＴＣＷＰｔｒレジスタ（３３４）内のＴＣＷアドレスポインタを使用して、送信回路のＤＭＡＣ（３２１）に対してメモリからのＴＣＷの取り出しを要求する。ＴＣＷの内容は、ローカルメモリから取り出されると、送信回路の各レジスタに次のように格納される。すなわち、ＮＴＣＷＰｔｒフィールド（１２１）とＮＣビット（１２２）は、ＮＴＣＷＰｔｒレジスタ（３３２）とＮＣビットレジスタ（３３３）とにそれぞれ格納され、ＩＭビット（１２３）とＩＲビット（１２４）は、ＩＭビットレジスタ（３２３）とＩＲビットレジスタ（３２４）とにそれぞれ格納され、ＤａｔａＰｔｒフィールド（１２５）はＤａｔａＰｔｒレジスタ（３２４）に格納され、ＤＮＮフィールド（１２６）、Ｃｏｍフィールド（１２７）、Ｔａｇフィールド（１２８）、ＳＷＨフィールド（１２９）、Ｒフィールド（１３０）、ＤａｔａＬｅｎフィールド（１３１）は、送信ヘッダバッファ（３３５）のＤＮＮレジスタ（３３６）と、Ｃｏｍレジスタ（３３７）と、Ｔａｇレジスタ（３３８）と、ＳＷＨレジスタ（３３９）と、Ｒレジスタ（３４０）と、ＤａｔａＬｅｎレジスタ（３４１）とにそれぞれ格納される。ステップ（５０５）において、送信シーケンサ（３２０）は、ネットワーク出力ポート（３２２）に対してメッセージの送信開始を命令する。この時点で、ネットワーク出力ポート（３２２）は、ＤＮＮレジスタ（３３６）、ノード番号レジスタ（２５０）、Ｃｏｍレジスタ（３３７）、Ｔａｇレジスタ（３３８）、ＳＷＨレジスタ（３３９）、Ｒレジスタ（３４０）およびＤａｔａＬｅｎレジスタ（３４１）の内容を、この順序で取り出して送信することによって、メッセージヘッダのＤＮＮフィールド（１０１）、ＳＮＮフィールド（１０２）、Ｃｏｍフィールド（１０３）、Ｔａｇフィールド（１０４）、ＳＷＨフィールド（１０５）、Ｒフィールド（１０６）およびＤａｔａＬｅｎフィールド（１０７）をそれぞれ形成する。ステップ（５０６）において、ネットワーク出力ポート（３２２）は、先行するヘッダフィールドから計算されたヘッダＣＲＣフィールド（１０８）を送信する。ステップ（５０７）において、送信シーケンサ（３２０）は、ＤＭＡＣ（３２１）に対して、ＴＣＷ状態バッファ（３２５）のＳレジスタ（３２６）と、Ｆレジスタ（３２７）と、Ｉレジスタ（３２８）と、Ｅレジスタ（３２９）と、ＥＣレジスタ（３３０）とを、ＴＣＷ内のＳフィールドと、Ｆフィールドと、Ｉフィールドと、Ｅフィールドと、ＥＣフィールドとに書き込むことを要求する。書き込みがステップ（５０８）において完了すると、ＴＳビットがクリアされる。ステップ（５０９）において、送信シーケンサ（３２０）は、ＤＭＡＣ（３２１）に対して、ローカルメモリからメッセージデータを取り出すことを要求する。メッセージデータのアドレスと長さは、ＤａｔａＰｔｒレジスタ（３４２）とＤａｔａＬｅｎレジスタ（３４１）にそれぞれ格納されている。データがバス（６）を介してローカルメモリから取り出されると、ネットワーク出力ポート（３２２）は、該データをネットワークへと送信して、メッセージのデータフィールド（１０９）を形成する。すべてのデータの送信が完了すると、ステップ（５１０）において、送信シーケンサはデータＣＲＣフィールド（１１０）をメッセージの終端に付加する。ステップ（５１１）において、送信シーケンサ（３２０）はＩＭビットレジスタ（３２３）の値を検査する。このビットがクリアされていれば、送信シーケンサ（３２０）は、ステップ（５１２）においてＴＦビット（２６２）をセットする。ステップ（５１３）において、送信シーケンサはＤＭＡＣ（３２１）に対して、ＴＣＷからＩＲビット（１２４）をＩＲビットレジスタ（３２４）へと再度取り出すことを要求する。ＩＲビットが再度取り出されるか、もしくはこの取り出しが不用である場合、送信シーケンサはステップ（５１４）へと進み、Ｆレジスタ（３２７）をセットし、Ｉレジスタ（３２８）をＩＲビットレジスタ（３２４）の値へとセットする。ＴＣＷの処理中にエラーが発生した場合、ＥＣレジスタ（３３０）にエラーコードを表わす値がセットされるとともに、Ｅレジスタ（３２９）がセットされる。ステップ（５１５）において、送信シーケンサ（３２０）はＤＭＡＣ（３２１）に対して、ＴＣＷ状態バッファ（３２５）のＳレジスタ、Ｆレジスタ、Ｉレジスタ、Ｅレジスタ、ＥＣレジスタを、それぞれＴＣＷのＳフィールドと、Ｆフィールドと、Ｉフィールドと、Ｅフィールドと、ＥＣフィールドとに再度書き込むことを要求する。ステップ（５１６）において書き込み要求が完了すると、送信シーケンサ（３２０）はＴＣＷＩＲＱ信号（３４７）をアサートする。ＴＣＷＩＲＱ信号（３４７）は、２個のＡＮＤゲート（３５５）、（３５６）によってＴＣＷ状態バッファ（３２５）のＩビット（３２８）とＥビット（３２９）との間で論理積がとられる。これらのＡＮＤゲート（３５５）、（３５６）の出力（３５７）、（３５８）は、ＴＩ割り込み要求ビット（２６６）とＴＥ割り込み要求ビット（２６７）とに接続される。ＴＣＷ内のＩＲビット（１２４）がセットされて割り込みが要求されると、ＴＩ割り込み要求ビット（２６６）がセットされる。この割り込みが、割り込み要求マスクレジスタ（２７７）によってマスクされていなければ、処理装置に接続されている割り込み要求線（７）もアサートされる。同様にして、エラーが発生すると、ＴＣＷ状態バッファ（３２５）のＥレジスタがセットされ、当該割り込みが割り込み要求マスクレジスタ（２７７）によってマスクされていなければ、処理装置へと至る割り込み要求線（７）もアサートされる。ステップ（５１７）において、送信シーケンサはＴＦビット（２６２）をクリアしたのちステップ（５０１）へと戻り、次のＴＣＷの処理に備える。
【００６７】
アプリケーションソフトウェアは、送信ライブラリソフトウェアサブルーチンを呼び出すことによって、単一または複数のメッセージを送信するための要求を発行する。ライブラリソフトウェアは、送信すべき各メッセージに対してＴＣＷを生成し、これらのＴＣＷを繋げてサブ連鎖を形成する。送信回路がすでにＴＣＷの一連鎖を処理している場合、新しいＴＣＷのサブ連鎖は現行の連鎖の末尾に付加される。送信回路が、連鎖の最後のＴＣＷを処理しているか、もしくはアイドル状態にある場合、ライブラリソフトウェアは、新たなＴＣＷの連鎖の処理を開始するように送信回路をプログラムする。送信回路はＴＣＷの処理とメッセージの送信とを、常にＴＣＷ連鎖中の順序に基づいて行なうため、上記の送信命令の待ち行列法を使用すれば、メッセージが送信要求の発行順に送信されることが保証される。ネットワーク上ではメッセージが互いを追い越すことなく転送されるため、送信回路から受信回路へと送られるメッセージは、送信要求の発行順に到着する。
【００６８】
図１９に受信回路（３０１）の詳細な回路図を示す。以下での受信回路の説明は、受信回路の動作フローを表わす図２０、２３、２４、２５、２６と、受信回路内にあるハッシュテーブル検索制御回路とを参照しながら行なう。図２１にハッシュテーブル検索制御回路（３６３）の詳細な回路図を示す。この回路は、図２２に示す該回路の動作フローを参照して説明する。
【００６９】
最初に図１９を参照して受信回路を説明する。受信シーケンサ（３６０）が受信回路全体を制御する。受信ＤＭＡＣ（３６１）は、バス（６）の動作を制御することによって、ローカルメモリ内のＨＴＥ、ポストＲＣＷ、ＰＣＷならびにプールＲＣＷの取り出しと更新とを受信回路に実行させることができるとともに、メッセージデータのローカルバッファへの書き込みを制御することができる。受信シーケンサ（３６０）は、ネットワーク接続機構（１１）を有するネットワーク入力ポート（３６２）を制御して、この機構（１１）を介してメッセージを受信する。ハッシュテーブル検索制御装置（３６３）は、ハッシュテーブル内で、もっとも古いポストＲＣＷまたはＰＣＷであって、一致する受信指定を有するポストＲＣＷまたはＰＣＷを指すＨＴＥを確定する。また受信回路には、多数の他のレジスタ、演算装置、ゲート等が含まれる。これらの構成部品については後で説明する。
【００７０】
受信回路の主要動作フローを図２０に示す。電源が投入されると、ＮＩＡ内のすべてのレジスタの状態は初期化され、ステップ（５２０）から動作が開始される。ステップ（５２１）において、ネットワーク入力ポート（３６２）は、受信ネットワーク接続機構（１１）を介してメッセージヘッダの受信が開始されるのを待つ。ネットワーク入力ポート（３６２）は、メッセージ同期ビット（１１２）によってメッセージヘッダの開始を確認する。ステップ（５２２）において、ネットワーク入力ポート（３６２）は、メッセージヘッダのＳＮＮフィールド（１０２）、Ｃｏｍｍフィールド（１０３）、Ｔａｇフィールド（１０４）、ＳＷＨフィールド（１０５）、Ｒフィールド（１０６）、ＤａｔａＬｅｎフィールド（１０７）を、ＳＮＮレジスタ（３６５）、Ｃｏｍｍレジスタ（３６６）、Ｔａｇレジスタ（３６７）、ＳＷＨレジスタ（４０２）、Ｒレジスタ（４０３）、ＤａｔａＬｅｎレジスタ（４０４）へとそれぞれ転送する。この転送は、これらのレジスタに接続されたメッセージヘッダデータバス（４３５）を使用して行なわれる。ステップ（５２３）において、ネットワーク入力ポート（３６２）はメッセージヘッダのヘッダＣＲＣフィールド（１０８）を検査する。ここでエラーが検出されると、ステップ（５２４）においてヘッダＣＲＣエラー信号（４２９）を介してＣＥ割り込み要求ビット（２７６）がセットされて、メッセージヘッダＣＲＣエラーがソフトウェアに通知される。エラーの通知後、処理はステップ（５２１）へと戻り、ネットワーク入力ポート（３６２）は次のメッセージヘッダの受信開始を待つ。ステップ（５２３）においてエラーが検出されなければ、ネットワーク入力ポート（３６２）は、受信シーケンサ（３６０）に対して、有効なメッセージヘッダの到着を入力ポート制御信号（１４４）を使用して通知する。
【００７１】
受信保留ビットＲＨ（２５９）の状態は、ＲＨ保留信号（４２６）を介して受信シーケンサへと転送される。ステップ（５２５）において、受信シーケンサ（３６０）はＲＨ（２５９）がクリアされるのを待つ。このビットがすでにクリアされている場合か、もしくは該ビットがその後クリアされた場合に、受信シーケンサ（３６０）は、ステップ（５２６）において、ＲＳ動作信号（４２７）をアサートすることによって受信動作開始ビットＲＳ（２６３）をセットする。
【００７２】
ポスト受信要求を保持するために使用される制御構造を、ソフトウェアと受信回路とが同時にアクセスや変更をしないことが重要である。これが仮に行なわれると、動作の整合性が失われることになる。この問題は、ＲＳビット（２６３）とＲＨビット（２５９）を使用することによって避けられる。これらのビットは、ソフトウェアによってバス（６）を介してアクセスできる。ＲＳビット（２６３）は、受信要求をポストするために使用される制御構造のアクセスを受信回路が開始する直前に、受信シーケンサによってセットされる。ＲＳビット（２６３）は受信回路によってクリアされるが、このクリア動作は、メッセージ受信時の必要に応じて、ポストＲＣＷのポストを解除するか、プールＲＣＷを割り当てるか、データプール空間を割り当てるかのいずれかの動作を行なうための制御構造の変更が完了したのちに行なわれる。ＲＨビット（２５９）によって、ソフトウェアは受信回路の動作を一時的に保留することができるため、受信回路によるメッセージの処理は開始されない。これによって受信回路による制御構造へのアクセスを抑制することができる。ＲＨビット（２５９）がセットされていれば、受信回路がＲＳビット（２６３）をセットすることは決してない。ＲＳビットは、セットされたのちできるだけ早い時期に受信回路によってクリアされるが、このクリア動作は、制御構造に対する所要のアクセスが完了してから行なわれる。このように、ＲＨビット（２５９）がセットされたのち、ＲＳビット（２６３）がクリアされるのをソフトウェアが待つとすれば、ＲＨビット（２５９）がクリアされるまで受信回路によって制御構造がアクセスされることはないことがソフトウェア側に対して保証される。ＲＨビット（２５９）とＲＳビット（２６３）をこのように使用することによって、ソフトウェアは、受信回路の動作の整合性を乱すことなく、これらの制御構造を独占的にアクセスし、変更することができる。
【００７３】
ステップ（５２６）において、ＲＳビット（２６３）がセットされると、受信シーケンサ（３６０）はステップ（５２７）へと移行する。ステップ（５２７）において、受信シーケンサ（３６０）は検索要求信号（４１５）をアサートし、この信号はハッシュテーブル検索制御装置（３６３）へと送られる。ハッシュテーブル検索制御装置（３６３）は、メッセージヘッダバッファ（３６４）のＳＮＮレジスタ（３６５）、Ｃｏｍｍレジスタ（３６６）、Ｔａｇレジスタ（３６７）の中の値を、検索用の入力パラメータとして使用する。受信回路の他の構成部品の説明を再開する前に、ハッシュテーブル検索制御装置（３６３）とその動作とについて説明する。
【００７４】
図２１にハッシュテーブル検索制御装置（３６３）の詳細な回路図を示す。この回路は、もっとも古いポストＲＣＷまたはＰＣＷであって、一致する受信指定を有するポストＲＣＷまたはＰＣＷを指すＨＴＥを確定する。このハッシュテーブル検索制御装置の回路図を、該回路の動作フローを示す図２２を参照しながら説明する。
【００７５】
ハッシュテーブル検索制御装置（３６３）は、その機能の実行にあたって、メッセージヘッダバッファ（３６４）の内容と一致する可能性のある受信指定を有する各ＨＴＥを検索し、一致したＨＴＥであってその時点までに判明したもっとも古いＨＴＥに関する情報を保持する。ＨＴＥバッファ（４５７）は、ＭＰｔｒレジスタ（４５８）と、ＭＰレジスタ（４５９）と、ＭＴｉｍｅレジスタ（４６０）とを有し、最も古い一致したＨＴＥのＰｔｒフィールド（１４４）と、Ｐフィールド（１４６）と、Ｔｉｍｅフィールド（１４８）とを含む。このＨＴＥのインデックスは、ＭＩｎｄｅｘレジスタ（４７９）に保持されている。これらのレジスタは、検出（Ｆｏｕｎｄ）信号（４３３）によって有効であることが表わされる。
【００７６】
ハッシュテーブル構成レジスタ（７５１）にはＨＴＢＰｔｒレジスタ（７５２）とサイズＳｉｚｅレジスタ（７５３）とが含まれ、命令処理装置ＩＰ（３）で実行されるソフトウェアからバス（６）を介してプログラムできる。ＨＴＢＰｔｒレジスタ（７５２）はハッシュテーブルの基底アドレスを指定し、Ｓｉｚｅレジスタ（７５３）はハッシュテーブル中のＨＴＥの個数を指定する。本実施例では、説明を簡単にするために、ハッシュテーブル内のＨＴＥの個数を２の累乗に限定している。
【００７７】
メッセージが到着してメッセージヘッダバッファ（３６４）へと格納されると、ステップ（５４０）において、検索要求信号（４１５）によってハッシュテーブル検索シーケンサ（４５０）が起動される。ハッシュテーブル検索シーケンサ（４５０）は、制御信号（４９７）を介して、ハッシュテーブル検索制御装置内のセレクタとラッチの動作を制御するとともに、ＤＭＡ制御信号（４３２）を介して、ＤＭＡＣ（３６１）に対してＨＴＥの取り出しを請求する。各メッセージに一致する４種類の受信指定があり、これらの指定は無指定値を使用する際の４種類の組み合わせに対応する。ハッシュテーブル検索シーケンサ（４５０）は、これら４種類の組み合わせに該当する各ＨＴＥを検索するが、この検索のために、検索対象のＨＴＥの受信指定を選択するためのループカウンタｎを有する。ステップ（５４１）において、ハッシュテーブル検索シーケンサ（４５０）は、ループカウンタｎをゼロに初期化して、検出状態信号（４３３）をクリアする。
【００７８】
ループの第１のステップは、ステップ（５４２）である。ステップ（５４２）において、ＨＴＥの受信指定のうち無指定の組み合わせが選択される。無指定選択信号（４６１，４６２）は、ハッシュテーブル検索シーケンサ（４５０）によって制御され、これらの信号にはｎの値に対応する値が割り当てられる。１または３に等しいｎに対してはＳＮＮ無指定選択信号（４６１）がアサートされ、２または３に等しいｎに対してはＴａｇ無指定選択信号（４６２）がアサートされる。ステップ（５４３）において、検索すべきＨＴＥの最初の検索インデックスが計算される。受信指定は最大３個の構成部分、すなわちＳＮＮ受信指定、Ｃｏｍｍ受信指定、Ｔａｇ受信指定からなる。ＳＮＮ受信指定は、ＳＮＮレジスタ（３６５）の出力（４６３）と、ＳＮＮ無指定選択信号（４６１）とを、ＯＲゲート（４６４）によって論理和演算した結果である。Ｃｏｍｍ受信指定（４６６）は、Ｃｏｍｍレジスタ（３６６）の出力そのものである。Ｔａｇ受信指定（４７０）は、Ｔａｇレジスタ（３６７）の出力（４６８）と、Ｔａｇ無指定選択信号（４６２）とを、ＯＲゲート（４６９）によって論理和演算した結果である。ＳＮＮ受信指定（４６５）とＣｏｍｍ受信指定（４６６）とを合成して、合成ＳＮＮ／Ｃｏｍｍ受信指定（４６７）を生成すると便利である。最初の検出インデックスを生成するには、２種類の受信指定（つまり合成ＳＮＮ／Ｃｏｍｍ受信指定（４６７））とＴａｇ受信指定（４７０）とを、ハッシュ機能回路（４７１）によってハッシングする必要がある。ハッシュ機能回路（４７１）の出力は、セレクタ（４７２）によって選択され、ＡＮＤゲート（４７４）によってこの出力値とマスク値との論理積がとられる。マスク値は、Ｓｉｚｅレジスタ（７５３）の値に基づいてマスク回路（４７３）によって生成され、インデックス値の可能な範囲を限定するために使用される。これによってハッシュテーブルのサイズが限定される。マスク後の値は、インデックスレジスタ（４７５）によってラッチされる。インデックスレジスタ（４７５）は、検査すべき最初のＨＴＥの最初の検索インデックスを保持する。
【００７９】
ステップ（５４４）において、ＨＴＥ検索アルゴリズムの最も内側のループに入る。インデックスレジスタ（４７５）のインデックス値は、セレクタ（４７６）によって選択され、乗算回路（４７７）によってＨＴＥのバイトサイズで乗算され、加算器（４７８）によってＨＴＢＰｔｒレジスタ（７５２）内のハッシュテーブルの基底アドレスへと加算される。こうしてＨＴＥＰｔｒ信号（４３１）が生成される。ついでステップ（５４５）において、ＨＴＥＰｔｒ信号（４３１）は、受信側のＤＭＡＣ（３６１）へと送られる。ハッシュテーブル検索シーケンサ（４５０）と受信側ＤＭＡＣ（３６１）との間で転送されるＤＭＡ制御信号（４３２）を使用して、ローカルメモリからのＨＴＥの読み出しが要求される。バス（６）を介してＨＴＥが到着すると、ＨＴＥのＳＮＮフィールド（１４１）とＣｏｍｍフィールド（１４２）とからなる最初の語が、等値比較器（４８１）によってＳＮＮ／Ｃｏｍｍ受信指定（４６７）と比較される。比較の結果が等値であれば、Ｓ０状態レジスタ（４８２）がセットされ、等値でなければこのレジスタ（４８２）はクリアされる。ＨＴＥのＴａｇフィールド（１４３）からなる第２の語は、別な等価比較器（４８３）によってＴａｇ受信指定（４７０）と比較される。比較の結果が等値であれば、Ｓ１状態レジスタ（４８４）がセットされ、等値でなければこのレジスタ（４８４）はクリアされる。Ｐｔｒ（１４４）、Ｃ（１４５）、Ｐ（１４６）、ＨＶ（１４７）、Ｔｉｍｅ（１４８）の各フィールドからなるＨＴＥの第３と第４の語は、ＨＴＥ読み出しバッファ（４５１）のＰｔｒ（４５２）、ＨＣ（４５３）、Ｐ（４５４）、ＨＶ（４５５）、Ｔｉｍｅ（４５６）の各レジスタにそれぞれラッチされる。
【００８０】
ステップ（５４６）において、ＡＮＤゲート（４８９）が、ＨＶレジスタ（４５５）の出力（ＨＴＥ有効信号（４８６）と称する）と、Ｓ０状態レジスタ（４８２）ならびにＳ１状態レジスタ（４８４）との論理積演算を行なう。ＡＮＤゲート（４８９）の出力は一致信号（４９０）を構成する。この一致信号（４９０）は、ＨＴＥが検出されたこと、該ＨＴＥが有効であって一致する受信指定を有すること、ただし有効なポスト受信要求が該ＨＴＥに連鎖されているか否かは不明であること、を示している。ＯＲゲート（４９３）が、一致信号（４９０）と、ＨＴＥ有効信号（４８６）の反転信号との論理和演算を行なう。この結果、検索終了信号（４９４）が生成されて、ハッシュテーブル検索シーケンサ（４５０）へとこの信号が転送される。ＨＴＥの検索は、検索対象のＨＴＥが検出された時点か、もしくは無効なＨＴＥが検出された時点で終了する。このように検索終了信号（４９４）は、特定の受信指定を有するＨＴＥの検索に関して、これ以上ＨＴＥを取り出す必要のないことを示す。
【００８１】
ステップ（５４７）において、ハッシュテーブル検索シーケンサ（４５０）は検索終了信号（４９４）を検査する。この信号がアサートされていなければ、処理はステップ（５４８）へと進み、次のＨＴＥを取り出して検査する。ステップ（５４８）において、検査すべき次のＨＴＥのインデックスが計算される。ハッシュテーブル検索シーケンサ（４５０）は、増分器（４８０）によって増分されたインデックスレジスタ（４７５）の値を、セレクタ（４７２）を介して選択する。この値は、ＡＮＤゲート（４７４）によって、マスク回路（４７３）からのマスク値でマスクされる。マスクされた値は、再びインデックスレジスタ（４７９）へとラッチされる。インデックスレジスタ（４７９）の値を増分したのちマスクすることによって、ハッシュテーブル内の次のＨＴＥのインデックスが与えられる。ハッシュテーブルのサイズの限界が越えられた場合には、テーブルの先頭へと戻る。処理のフローはステップ（５４４）へと戻り、次のＨＴＥが取り出される。ソフトウェア側では、無効なＨＴＥを少なくとも１個ハッシュテーブルに格納しておく必要がある。これはハッシュテーブル検索シーケンサが無限ループに入ってしまう可能性を防ぐためである。
【００８２】
ステップ（５４７）において検索終了信号（４９４）がアサートされると、処理のフローはステップ（５４９）へと至る。別なＡＮＤゲート（４９１）が、一致信号（４９０）とＨＣビット（４５３）との論理積演算を行なって、一致ポスト信号（４９２）を生成する。比較器（４９５）によってＯｌｄｅｒ信号（４９６）が生成される。Ｔｉｍｅレジスタ（４５６）の値がＭｔｉｍｅレジスタ（４６０）の値より低い場合、Ｏｌｄｅｒ信号（４９６）がアサートされる。これらの信号もハッシュテーブル検索シーケンサ（４５０）へと送られる。ステップ（５５０）において、有効なポスト受信要求についてのＨＴＥが検出されたか、またかかるポスト受信要求がその時点までに検出された最も古いポスト受信要求より古いかが、ハッシュテーブル検索シーケンサ（４５０）によって検査される。一致ポスト信号（４９２）がアサートされる場合であって、検出状態信号（４３３）がアサートされないか、もしくはＯｌｄｅｒ信号（４９６）がアサートされているかのいずれかである場合、有効なポスト受信要求についてのＨＴＥが検出されて該ポスト受信要求がその時点で最も古いことが示される。この場合、ステップ（５５１）において、検出状態信号（４３３）がアサートされ、Ｐｔｒ（４５２）、Ｐ（４５４）、Ｔｉｍｅ（４５６）、Ｉｎｄｅｘ（４７５）の各レジスタの内容が、ＭＰｔｒ（４５８）、ＭＰ（４５９）、Ｍｔｉｍｅ（４６０）、ＭＩｎｄｅｘ（４７９）の各レジスタへとそれぞれ複写される。
【００８３】
処理のフローはステップ（５５２）へと至り、ここでｎの値が１だけ増分される。ステップ（５５３）において、ｎが４未満であって、受信指定が無指定の順列のすべてが検査されたわけではないことが示されると、処理はステップ（５４２）へと戻って、次の受信指定を有するＨＴＥの検索が開始される。
【００８４】
ｎの値が４に等しければ、検索は完了したことになる。ステップ（５５４）において、ハッシュテーブル検索シーケンサ（４５０）は、セレクタ（４７６）を使用してＭｉｎｄｅｘレジスタ（４７９）を選択したのち、検索完了信号（４１６）をアサートする。検出信号（４３３）がすでにアサートされていれば、有効なポスト受信要求についてのＨＴＥがすでに検出されたことを意味しているため、ＨＴＥＰｔｒ信号（４３１）は、最も古くて有効なポスト受信要求についてのＨＴＥのアドレスポインタに対応する。ＭＰｔｒレジスタ（４５８）とＭＰレジスタ（４５９）から送られたＭＰｔｒ信号（４３７）とＭＰ信号（４３６）は、ＨＴＥのＰｔｒフィールド（１４４）とＰフィールド（１４６）とにそれぞれ対応する。ステップ（５５５）において、ハッシュテーブル検出シーケンサ（４５０）は検出完了信号（４１６）をアサートする。この信号は、受信シーケンサ（３６０）に対して、ハッシュテーブル検索制御装置（３６３）が当該検索要求の処理を完了したことを通知する。
【００８５】
ここで受信回路の他の構成部品の説明に戻る。検索完了信号（４１６）がアサートされると、受信回路の処理フローはステップ（５２８）から再開される。ハッシュテーブル検索制御装置（３６３）から送られた検出（Ｆｏｕｎｄ）信号（４３３）が検査される。この検査を行なう場合、ＡＮＤゲート（４３４）が、検出完了信号（４１６）と検出信号（４３３）の反転信号との論理積演算を行なって、その結果をＮＭ割り込み要求ビット（２７５）へと転送する。検索の結果、一致するものが検出できなければ、ステップ（５２９）においてＮＭ割り込み要求ビット（２７５）がセットされる。これによって、有効なポスト受信要求について一致したＨＴＥが検出されなかったことが、ソフトウェア側に通知される。検出信号（４３３）は受信シーケンサ（３６０）にも送られる。この場合も検索により一致するものが検出できなければ、受信シーケンサ（３６０）はＲＳビット（２６３）をステップ（５３０）においてクリアする。処理フローは最初のステップ（５２１）へともどり、ネットワーク入力ポート（３６２）は次のメッセージヘッダの受信開始を待つ。
【００８６】
ＨＴＥが検出されると、処理フローはステップ（５３１）へと進む。ステップ（５３１）において、実行すべき受信動作の種類により、必要に応じてポストＲＣＷもしくはポストＰＣＷの取り出し、ポストＲＣＷのポストの解除、プールＲＣＷの割り当て、データプール空間の割り当て等が行なわれる。ポストＲＣＷもしくはプールＲＣＷは更新されて、メッセージの受信が開始されたことが示される。
【００８７】
このステップ（５３１）は実際はさらに複雑なサブルーチンであって、このサブルーチンの拡大フローを図２３、２４、２５に示す。フローをこれら３図に分割したのは見やすさを考慮したためであって、参照記号のＡ（５７０）、Ｂ（５７１）、Ｃ（５７５）、Ｄ（５７７）、Ｅ（５８７）によって各図の間の繋がりを示す。このサブルーチンの最初のステップはステップ（５６０）である。受信回路は、現在のメッセージの受信に関するさまざまな状態を保持している。これらの状態は、受信状態バッファ（３８２）のＳレジスタ（３８３）と、Ｂレジスタ（３８４）と、Ｆレジスタ（３８５）と、Ｉレジスタ（３８６）と、Ｅレジスタ（３８７）と、ＥＣレジスタ（３８８）とに保持されており、その後受信回路によって、ポストＲＣＷのＳ（２０７）、Ｂ（２０８）、Ｆ（２０９）、Ｉ（２１０）、Ｅ（２１１）、ＥＣ（２１２）の各フィールドにそれぞれ書き込まれる。プールＲＣＷの場合、これらの状態は、Ｓ（２４４）、Ｂ（２４９）、Ｆ（２４５）、Ｉ（２４６）、Ｅ（２４７）、ＥＣ（２４８）の各フィールドにそれぞれ書き込まれる。これによって、メッセージの受信状態がソフトウェアへと通知される。Ｓレジスタ（３８３）は、「１」の値でハードワイヤドされている。これは、受信回路が、ＲＣＷのＳフィールドにセット値以外の値を書き込む必要がまったくないためである。このビットは、受信動作が開始されたことをソフトウェアに通知する。ＢＥビット（１７４）のセットされたポストＲＣＷによって指定されたバッファが、受信動作で使用されると、Ｂレジスタ（３８４）がセットされる。受信動作が終了すると、Ｆレジスタ（３８５）がセットされる。ポストＲＣＷのＩＲビット（１７８）もしくはプールＲＣＷのＩＲビット（２２５）による指定に準じて割り込みが要求される場合、Ｉレジスタ（３８６）がセットされる。Ｅレジスタ（３８７）は、エラー状態が検出されるとセットされる。この場合、検出されたエラーの種類を示すエラーコードがＥＣレジスタ（３８８）にセットされる。ステップ（５６１）において、Ｂ（３８４）、Ｆ（３８５）、Ｉ（３８６）、Ｅ（３８７）、ＥＣ（３８８）の各レジスタは、すべてセット値以外の状態にクリアされる。ステップ（５６２）において、受信シーケンサ（３６０）は、ハッシュテーブル検索制御装置（３６３）から送られたＭＰビット信号（４３６）を検査して、ポストＲＣＷもしくはポストＰＣＷが検出されたか否かを判定する。ここではまず、ＭＰビット（４３６）がクリアされた場合を説明する。これは、検索によって、ポストＲＣＷを指すポインタを含むＨＴＥの一致が検出された場合である。ＭＰビット（４３６）がセットされた場合については後述する。ポストＲＣＷを指すアドレスポインタは、ＭＰｔｒ信号（４３７）を介してハッシュテーブル検索制御装置（３６３）から出力される。このアドレスポインタは、ステップ（５６３）においてＲＣＷＰｔｒレジスタ（３６９）によってラッチされる。このレジスタ（３６９）の出力（４３９）は、受信側ＤＭＡＣ（３６１）へと送られる。次に受信シーケンサ（３６０）は、ステップ（５６４）において、受信側ＤＭＡＣ（３６１）に対して、ＤＭＡ制御信号（４１９）を使用してローカルメモリ（４）からポストＲＣＷを取り出すよう要求する。ポストＲＣＷのデータフィールドは、バス（６）を介して返送される。ポストＲＣＷもしくはプールＲＣＷから読み出されたリンク情報は、次リンクバッファ（３７１）によって一時的に保持される。ポストＲＣＷの場合には、ステップ（５６４）の場合と同様に、次リンクバッファ（３７１）内のＮＰｔｒ（３７２）、ＮＣ（３７３）、ＮＰ（３７４）、ＮＴｉｍｅ（３７６）の各レジスタが、バス（６）を介して読み出された当該ポストＲＣＷの対応するフィールドからそれぞれラッチされる。ＮＨＶレジスタ（３７５）は、ハードワイヤドされた２進値「１」を有しており、この値は変更されない。ポストＲＣＷのＢＥ（１７４）、ＩＭ（１７７）、ＩＲ（１７８）、ＰＣＷＰｔｒ（１７９）、ＢｕｆｆＰｔｒ（１８０）の各フィールドは、ＢＥ（３７８）、ＩＭ（３８０）、ＩＲ（３８１）、ＰＣＷＰｔｒ（３６８）、ＢｕｆｆＰｔｒ（４０７）の各レジスタにそれぞれラッチされる。ポストＲＣＷのＢｕｆｆＳｉｚｅフィールド（１８１）は、レジスタに直接ラッチされず、バス（６）上に到着した時点で比較器（４０５）によってＤａｔａＬｅｎレジスタの出力（４４０）と比較される。比較の結果は、ＣＢレジスタ（４０６）にラッチされる。ＤａｔａＬｅｎレジスタにはメッセージデータフィールドの長さの値が格納されており、この値がポストＲＣＷのＢｕｆＳｉｚｅフィールド（１８１）の値より大きい場合、ＣＢレジスタ（４０６）がセットされる。これによって、ポストＲＣＷのバッファの大きさが不十分であるため、すべてのメッセージデータを格納できないことが示される。
【００８８】
ステップ（５６５）において、ポストＲＣＷのポストが解除される。これは、受信回路が、次のポストＲＣＷもしくはポストＰＣＷに関する連鎖情報をＨＴＥに複写することによって行なわれる。連鎖されたポストＲＣＷやポストＰＣＷがなければ、受信回路は、現在のポストＲＣＷに関するフィールドを無効とすることによってポストの解除を行なう。この場合、受信シーケンサ（３６０）は、受信側のＤＭＡＣ（３６１）に対して、次リンクバッファ（３７１）の内容を、ハッシュテーブル検索制御装置（３６３）からのＨＴＥＰｔｒ出力（４３１）によって示されたＨＴＥへと書き込むことを要求する。ＮＰｔｒ（３７２）、ＮＣ（３７３）、ＮＰ（３７４）、ＮＨＶ（３７５）、ＮＴｉｍｅ（３７６）の各レジスタの値は、ＨＴＥのＰｔｒ（１４４）、Ｃ（１４５）、Ｐ（１４６）、ＨＶ（１４７）、Ｔｉｍｅ（１４８）の各フィールドへとそれぞれ書き込まれる。ＨＶフィールド（１４７）に２進値の「１」を書き込むと、ＨＴＥの有効性を保証する効果がある。ＮＣレジスタ（３７３）がクリアされている場合のように、連鎖されたポスト項がなくても、ハッシュテーブル内の将来の検索において異なるＨＴＥの検出を可能とすることを保証するためには、当該ＨＴＥが有効であることが重要である。連鎖されたポストＲＣＷやポストＰＣＷがない場合であって、ＨＴＥが無効とされた場合は、無効なＨＴＥの取り出し時点で直ちに将来の検索は終了し、一致する有効なＨＴＥの検出は行なわれない。ステップ（５６６）において、ＢＥビット（３７８）の値が受信シーケンサ（３６０）によって検査される。ＢＥビットがセットされていれば、ポストＲＣＷのＢｕｆｆＰｔｒフィールド（１８０）とＢｕｆｆＳｉｚｅフィールド（１８１）が有効であるため、ＤａｔａＰｔｒレジスタ（４０７）とＣＢレジスタ（４０６）も有効である。ここで、ＢＥビット（３７８）がセットされた場合について説明する。ＢＥビット（３７８）がクリアされた場合については後述する。処理のフローはステップ（５６７）へと進む。ステップ（５６７）において、受信状態バッファ（３８２）のＢレジスタ（３８４）が受信シーケンサ（３６０）によってセットされる。これによってＲＣＷのデータバッファが有効であることが示される。ステップ（５６８）において、ＣＢレジスタ（４０６）の値が受信シーケンサによって検査される。ＣＢレジスタ（４０６）がセットされていれば、ＲＣＷのバッファの大きさが不十分であることがわかる。ステップ（５６９）において、受信シーケンサ（３６０）は、受信状態バッファ（３８２）のＥレジスタ（３８７）とＥＣレジスタ（３８８）をセットする。これによって、受信バッファの大きさが不十分であってメッセージデータを格納できなかったため、エラーが発生したことが示される。ＣＢレジスタ（４０６）がセットされたか否かにかかわらず、処理フローはステップ（５８８）へと進む。ステップ（５８８）において、ローカルメモリ（４）内の当該ポストＲＣＷが受信回路によって更新される。受信シーケンサ（３６０）は、受信側ＤＭＡＣ（３６１）に対して、ＰＣＷＰｔｒレジスタ（３６９）によって指定されたポストＲＣＷの更新を要求する。ＳＮＮ（３６５）、Ｃｏｍｍ（３６６）、Ｔａｇ（３６７）、ＳＷＨ（４０２）、Ｒ（４０３）、ＤａｔａＬｅｎ（４０４）の各レジスタ内のメッセージヘッダフィールドの値は、ポストＲＣＷのＳＮＮ（２０１）、Ｃｏｍｍ（２０２）、Ｔａｇ（２０３）、ＳＷＨ（２０４）、Ｒ（２０５）、ＤａｔａＬｅｎ（２０６）の各フィールドへとそれぞれ書き込まれる。受信状態バッファ（３８２）のＳ（３８３）、Ｂ（３８４）、Ｆ（３８５）、Ｉ（３８６）、Ｅ（３８７）、ＥＣ（３８８）の各レジスタは、ポストＲＣＷのＳ（２０７）、Ｂ（２０８）、Ｆ（２０９）、Ｉ（２１０）、Ｅ（２１１）、ＥＣ（２１２）の各フィールドへと書き込まれる。ついで処理フローはステップ（５９４）へと進む。以上で受信開始局面が完了する。先に説明を延期した各状態の説明を以下で終えたのちに、ステップ（５９４）に続く受信回路の処理のフローを説明する。
【００８９】
ステップ（５６６）においてＢＥビット（３７８）がクリアされた場合、処理フローはステップ（５７８）へと進む。この時点では、受信回路はメッセージデータを書き込む場所をまだ決定していない。受信回路がメッセージデータを受信するためには、まずデータプールから空間を割り当てる必要がある。ＰＣＷＰｔｒレジスタには、特定のＰＣＷを指定するポストＲＣＷからのＰＣＷＰｔｒフィールドが格納されている。使用すべきデータプールは、このＰＣＷによって管理される。ＰＣＷＰｔｒレジスタ（３６８）の出力（４３８）は、受信側ＤＭＡＣ（３６１）へと送られる。ステップ（５７８）において、受信シーケンサ（３６０）は受信側ＤＭＡＣ（３６１）に対して、ＰＣＷの取り出しを要求する。このＰＣＷは、バス（６）を介してローカルメモリ（４）から返送される。ＰＣＷのＮ（１５３）、Ｗ（１５４）、Ｏ（１５５）、Ｌ（１５６）、Ｓｅｑ（１５７）の各フィールドは、ＰＣＷ状態バッファ（３８９）のＮ（３９０）、Ｗ（３９１）、Ｏ（３９２）、Ｌ（３９３）、Ｓｅｑ（３９４）の各レジスタによってそれぞれラッチされる。ＰＣＷのＨｅａｄＰｔｒフィールド（１５８）は、ＤａｔａＰｔｒレジスタ（４０７）とＮＨｅａｄＰｔｒレジスタ（４１３）とによってラッチされる。加算器（４０８）は、ＤａｔａＰｔｒレジスタ（４０７）の出力（４４１）とＤａｔａＬｅｎレジスタ（４０４）の出力（４４０）とを加算する。加算器の出力（４０９）は、データプールのヘッドポインタの新しい値となる。比較器（４１０）によって、新しいヘッドポインタの値（４０９）が、ＰＣＷのＬＷＭＰｔｒフィールド（１６０）またはＴａｉｌＰｔｒフィールド（１５９）の値を越えるか否かが検査される。これらのフィールドは、ＰＣＷの異なる語内にあるため、異なる周期でバス（６）上に到着する。比較器（４１０）の出力は、ＣＬレジスタ（４１１）とＣＴレジスタ（４１２）とによってラッチされる。このラッチ動作は、ヘッドポインタの値（４０９）がＬＷＭＰｔｒフィールドの値を越えていれば、ＣＬビット（４１１）がセットされ、ＴａｉｌＰｔｒフィールドの値を越えていればＣＴビット（４１２）がセットされるように行なわれる。ステップ（５７９）において、受信シーケンサ（３６０）は、Ｎ（３９０）、Ｗ（３９１）、Ｏ（３９２）、Ｌ（３９３）の各レジスタの値を、ＰＣＷ書き込み状態バッファ（３９６）のＮＮ（３９７）、ＮＷ（３９８）、ＮＯ（３９９）、ＮＬ（４００）の各レジスタへとそれぞれ複写する。さらに受信シーケンサは、増分器（３９５）を使用してＳｅｑレジスタ（３９４）の値を増分するとともに、この値をＰＣＷ書き込み状態バッファ（３９６）のＮＳｅｑレジスタ（４０１）にラッチする。ＰＣＷ書き込み状態バッファ（３９６）によって、ＰＣＷへの書き込みのバッファリングが行なわれる。ＮＮ（３９７）、ＮＷ（３９８）、ＮＯ（３９９）、ＮＬ（４００）、ＮＳｅｑ（４０１）の各レジスタには、書き込むべきＰＣＷのＮ（１５３）、Ｗ（１５４）、Ｏ（１５５）、Ｌ（１５６）、Ｓｅｑ（１５７）の各フィールドの新しい値がそれぞれ格納される。処理フローは次にステップ（５８２）へと進む。ステップ（５８２）において、受信回路はデータプールの割り当てエラーの有無を検査する。Ｏレジスタ（３９２）がセットされていれば、ＰＣＷのデータプールにはすでにデータプールオーバーフローエラーが発生している。ＣＴレジスタ（４１２）がセットされていれば、現在のメッセージのデータを受信するための空間を割り当てるのに十分なデータプール空間がないことを意味する。いずれの場合でも、データプール空間の割り当ては行なわれない。ステップ（５８３）において、受信シーケンサ（３６０）は、Ｅレジスタ（３８７）とＥＣレジスタ（３８８）とをセットする。これによって、データプール空間の不足が検出されたことと、空間の割り当てが不可能であることとが示される。さらに受信シーケンサ（３６０）はＮＯレジスタ（３９９）をセットする。これによって、ＰＣＷが書き込まれた場合、当該ＰＣＷのＯビットフィールド（１５５）がセットされてデータプールオーバーフローエラーが検出されたことが示される。データプールオーバーフローエラーが検出されなければ、割り当てが成功したことを意味する。ステップ（５８４）において、受信シーケンサ（３６０）は、ＮＨｅａｄＰｔｒレジスタ（４１３）によって、加算器出力（４０９）からのデータプールヘッドポインタ出力の新しい値をラッチする。またデータプールオーバーフローエラーが発生しなかった場合、受信シーケンサ（３６０）はステップ（５８５）においてＣＬレジスタ（４１１）を検査する。ＣＬレジスタ（４１１）がセットされていれば、受信シーケンサはステップ（５８６）において、ＮＬレジスタ（４００）をセットする。これによってヘッドポインタがウォータマークを超過したことが示される。データプール空間の割り当てが成功したか否かにかかわらず、処理フローはステップ（５８９）へと進む。ステップ（５８９）において、ローカルメモリ内のポストＲＣＷが受信回路によって更新される。受信シーケンサ（３６０）は、ＲＣＷＰｔｒレジスタ（３６９）によって指定されたポストＲＣＷの書き込みを、受信側ＤＭＡＣ（３６１）に対して要求する。Ｓｅｑレジスタ（３９４）とＤａｔａＰｔｒレジスタ（４０７）の値は、ポストＲＣＷのＳｅｑフィールド（１９９）とＤａｔａＰｔｒフィールド（２００）とに書き込まれる。ＳＮＮ（３６５）、Ｃｏｍｍ（３６６）、Ｔａｇ（３６７）、ＳＷＨ（４０２）、Ｒ（４０３）、ＤａｔａＬｅｎ（４０４）の各レジスタにあるメッセージヘッダフィールドの値は、ポストＲＣＷのＳＮＮ（２０１）、Ｃｏｍｍ（２０２）、Ｔａｇ（２０３）、ＳＷＨ（２０４）、Ｒ（２０５）、ＤａｔａＬｅｎ（２０６）の各フィールドへとそれぞれ書き込まれる。受信状態バッファ（３８２）のＳ（３８３）、Ｂ（３８４）、Ｆ（３８５）、Ｉ（３８６）、Ｅ（３８７）、ＥＣ（３８８）の各レジスタは、ポストＲＣＷのＳ（２０７）、Ｂ（２０８）、Ｆ（２０９）、Ｉ（２１０）、Ｅ（２１１）、ＥＣ（２１２）の各フィールドへとそれぞれ書き込まれる。ステップ（５９０）において、受信シーケンサ（３６０）は、ＨＴＥ検索制御装置（３６３）からのＭＰ信号（４３６）の値を再度検査する。以上の説明は、ＭＰ信号がクリアされている場合に該当するため、処理フローはステップ（５９２）へと進む。ステップ（５９２）において、ローカルメモリ内のＰＣＷが受信回路によって更新される。受信シーケンサ（３６０）は、ＰＣＷＰｔｒレジスタ（３６８）によって指定されたＰＣＷの書き込みを、受信側のＤＭＡＣ（３６１）に対して要求する。ＰＣＷ書き込み状態バッファ（３９６）内のＮＮ（３９７）、ＮＷ（３９８）、ＮＯ（３９９）、ＮＬ（４００）、ＮＳｅｑ（４０１）の各レジスタの値と、ＮｈｅａｄＰｔｒレジスタ（４１３）の値とが、バス（６）を介して、ＰＣＷのＮ、Ｗ、Ｏ、Ｌ、Ｓｅｑ、ＨｅａｄＰｔｒの各フィールドにそれぞれ書き込まれる。ＰＣＷの書き込み動作が完了すると、受信シーケンサ（３６０）は、ステップ（５９３）においてＰＣＷＩＲＱ信号（４２０）をアサートする。４個のＡＮＤゲート（４２１）が、この信号と、ＮＮ（３９７）、ＮＷ（３９８）、ＮＯ（３９９）、ＮＬ（４００）の各レジスタの出力との論理積をとるとともに、Ｎ（３９０）、Ｗ（３９１）、Ｏ（３９２）、Ｌ（３９３）の反転出力との論理積をそれぞれとる。この結果、４個の出力信号は、ＰＮ（２７１）、ＰＷ（２７２）、ＰＯ（２７３）、ＰＬ（２７４）の各割り込み要求ビットをそれぞれセットする。このため、ＰＣＷのＮ、Ｗ、Ｏ、Ｌの各ビットのうち過去にクリアされていたビットのいずれかを受信回路がセットすると、対応する割り込み要求ビットがセットされる。このビットによって、ＰＣＷに関する警告もしくはエラー状態が存在する場合、かかる警告もしくはエラー状態がソフトウェアに通知される。処理フローはステップ（５９４）へと進み、上記の受信開始局面が完了する。
【００９０】
ここでステップ（５６２）へと戻って、ハッシュテーブル検索処理装置（３６３）からのＭＰ信号がセットされていた場合の受信回路の処理フローを説明する。この場合、検索において、ポストＰＣＷを指すポインタを含むＨＴＥとの一致が検出されて、処理はステップ（５７２）へと進む。当該ＰＣＷを指すポインタは、ＭＰｔｒ信号（４３７）を介してハッシュテーブル検索制御装置（３６３）から出力され、ステップ（５７２）においてＰＣＷＰｔｒレジスタ（３６８）によってラッチされる。ＰＣＷＰｔｒレジスタ（３６８）の出力（４３８）は、受信側のＤＭＡＣ（３６１）へと送られる。ステップ（５７３）において、受信シーケンサは、ＤＭＡＣ（３６１）に対して、ローカルメモリ（４）からポストＰＣＷを取り出すことを要求する。ＰＣＷのデータフィールドはバス（６）を介して返送される。ＰＣＷのＲＣＷＰｔｒフィールドとＣフィールドは、ＲＣＷＰｔｒレジスタ（３６９）とＣビットレジスタ（３７０）とによってラッチされる。ＰＣＷのＮ、Ｗ、Ｏ、Ｌ、Ｓｅｑの各フィールドは、ＰＣＷ状態バッファ（３８９）のＮ（３９０）、Ｗ（３９１）、Ｏ（３９２）、Ｌ（３９３）、Ｓｅｑ（３９４）の各レジスタによってラッチされる。ＰＣＷのＨｅａｄＰｔｒフィールドは、ＤａｔａＰｔｒレジスタ（４０７）とＮＨｅａｄＰｔｒレジスタ（４１３）とによってラッチされる。対応するデータバッファのない上記のＲＣＷの場合と同様に、新しいデータプールヘッドポインタがＬＷＭＰｔｒの値を越えていれば、ＣＬレジスタ（４１１）がセットされ、ＴａｉｌＰｔｒの値を越えていればＣＴレジスタ（４１２）がセットされる。ステップ（５９５）において、受信シーケンサ（３６０）は、Ｎ（３９０）、Ｗ（３９１）、Ｏ（３９２）、Ｌ（３９３）の各レジスタの値を、ＰＣＷ書き込み状態バッファ（３９６）のＮＮ（３９７）、ＮＷ（３９８）、ＮＯ（３９９）、ＮＬ（４００）の各レジスタへとそれぞれ複写する。また受信シーケンサ（３６０）は、増分器（３９５）を使用してＳｅｑレジスタ（３９４）内の値を増分したのち、この値をＰＣＷ書き込み状態バッファ（３９６）のＮＳｅｑレジスタ（４０１）にラッチする。ステップ（５７４）において、受信シーケンサ（３６０）は、プールＰＣＷの取得が可能か否かを検査する。Ｎレジスタ（３９０）がセットされていれば、プールＰＣＷの不足によるエラーがすでに検出されていることを意味する。Ｃレジスタ（３７０）がクリアされていれば、ＰＣＷＰｔｒレジスタ（３６９）にラッチされたＰｏｏｌＲＣＷＰｔｒフィールドが無効であることと、ＰＣＷから連鎖されたプールＲＣＷがないことを意味する。Ｎレジスタ（３９０）がセットされているか、もしくはＣレジスタ（３７０）がクリアされていれば、受信シーケンサ（３６０）はＮＮレジスタ（３９７）をセットし、処理フローはステップ（５９２）へと進む。ステップ（５９２）において、ＰＣＷがローカルメモリに書き戻される。これは、対応するバッファのないポストＲＣＷの受信に関して以前に説明した例と同様である。ただし今回の例では、Ｎレジスタがすでにセットされていなければ、受信回路はＰＣＷのＮビットとＰＮ割り込み要求ビット（２７１）とをセットする。これによってプールＰＣＷの不足によるエラーが示される。ステップ（５７４）の説明に戻り、取得可能なプールＲＣＷがあれば、処理フローはステップ（５８０）へと進む。ステップ（５８０）では、当該プールＲＣＷがローカルメモリ（４）から取り出される。ＲＣＷＰｔｒレジスタ（３６９）にはプールＲＣＷのポインタが格納されている。このレジスタの出力（４３９）は、受信側ＤＭＡＣ（３６１）へと送られる。受信シーケンサ（３６０）は、プールＲＣＷを取り出すことを受信側ＤＭＡＣ（３６１）に対して要求する。このプールＲＣＷはバス（６）を介して到着する。ポストＰＣＷを使用した受信の場合、次リンクバッファ（３７１）を使用して次のプールＲＣＷへのリンクを一時的に保留する。プールＲＣＷのＮＰｏｏｌＲＣＷＰｔｒフィールドとＮＣフィールドは、このバッファのＮＰｔｒレジスタ（３７２）とＮＣレジスタ（３７３）とにそれぞれラッチされる。プールＲＣＷのＳＷ、ＩＭ、ＩＲの各フィールドは、ＳＷ（３７７）、ＩＭ（３８０）、ＩＲ（３８１）の各レジスタにそれぞれラッチされる。ＳＷビットフィールドがセットされたプールＲＣＷは、プールＲＣＷの連鎖が残り少ないことを示す。受信回路がこのようなプールＲＣＷを取り出した場合、受信回路はこの状態をソフトウェアに警告しなければならない。ステップ（５８１）において、ＳＷレジスタ（３７７）がセットされていれば、受信シーケンサはＮＷレジスタ（３９７）をセットする。ＮＷレジスタ（３９７）は後でＰＣＷのＷビットフィールドへと書き戻される。処理フローは次いでステップ（５８２）へと進む。ステップ（５８２）において、受信回路はデータプール割り当てエラーの存在を検査する。これは、対応するバッファのないポストＲＣＷを使用した受信の前述の例と同様である。処理フローは前回の例と同じように進行するが、ステップ（５８９）において、プールＲＣＷが更新される点が異なる。ステップ（５９１）において、ＭＰ信号（４３６）が再度検査される。処理フローのここまでの説明では、この信号がセットされていたことを前提にしてるので、フローはここでステップ（５９１）へと進む。ステップ（５９１）において、ローカルメモリ内のＰＣＷが受信回路によって更新される。受信シーケンサ（３６０）は、受信側ＤＭＡＣ（３６１）に対して、ＰＣＷＰｔｒレジスタ（３６８）によって指されたＰＣＷの書き込みを要求する。ＮＰｔｒレジスタ（３７２）とＮＣレジスタ（３７３）の値は、バス（６）を介してＰＣＷのＰｏｏｌＲＣＷＰｔｒフィールドとＣフィールドとに書き込まれる。ＰＣＷ書き込み状態バッファ（３９６）のＮＮ（３９７）、ＮＷ（３９８）、ＮＯ（３９９）、ＮＬ（４００）、ＮＳｅｑ（４０１）の各レジスタの値と、ＮＨｅａｄＰｔｒレジスタ（４１３）の値は、ＰＣＷのＮ、Ｗ、Ｏ、Ｌ、Ｓｅｑ、ＨｅａｄＰｔｒの各フィールドへとそれぞれ書き込まれる。ＰＣＷ書き込み動作が完了すると、処理フローはステップ（５９３）へと至る。このステップは、対応するバッファのないポストＲＣＷを使用した前述の受信の例ですでに説明した。次に処理フローはステップ（５９４）へと進む。これで上記の受信開始局面が完了する。
【００９１】
ステップ（５９４）へと至る処理のさまざまな変形例をこれまで説明した。処理フローは次に図２０のステップ（５３２）へと戻る。ステップ（５３２）において、受信シーケンサはＲＳビット（２６３）をクリアする。ステップ（５３３）において、受信シーケンサは、プールＲＣＷの不足によるエラーが発生したか否かを再度検査する。ＭＰ信号（４３６）がアサートされていて、Ｎレジスタ（３９０）がセットされているかもしくはＣレジスタ（３７０）がクリアされていれば、プールＲＣＷの不足によるエラーが発生したことを意味する。この場合、処理フローは最初のステップ（５２１）へと戻り、ネットワーク入力ポート（３６２）は次のメッセージヘッダの受信開始を待つ。ステップ（５３３）でエラーが検出されなければ、ＲＣＷＰｔｒレジスタ（３６９）の値は、有効なポストＲＣＷもしくは有効なプールＲＣＷのいずれかを示す。処理フローは次にステップ（５３４）へと進む。ステップ（５３４）において、データがバッファに書き込まれるとともに、最終状態がポストＲＣＷもしくはプールＲＣＷへと書き込まれる。実際にはこのステップはさらに複雑なフローであって、ステップ（６００）から始まるこのフローを図２６に示す。ステップ（６０１）において、受信シーケンサはＥレジスタ（３８７）を検査する。Ｅレジスタ（３８７）がクリアされていれば、ＤａｔａＰｔｒレジスタ（４０７）は有効であって、このレジスタはローカルメモリ（４）内のバッファを指すアドレスポインタを含む。このアドレスポインタで示されたバッファは、ＤａｔａＬｅｎレジスタ（４０４）内のメッセージデータの長さの値を書き込むのに十分なサイズのバッファである。ＤａｔａＰｔｒレジスタ（４０７）の出力（４４１）と、ＤａｔａＬｅｎレジスタ（４０４）の出力（４４０）は、受信側ＤＭＡＣ（３６１）へと送られる。ステップ（６０２）において、受信シーケンサ（３６０）は、受信側ＤＭＡＣ（３６１）に対して、ネットワーク入力ポート（３６２）からのメッセージデータをバス（６）を介してローカルメモリ（４）へと書き込むことを要求する。ステップ（６０３）において書き込み動作が完了した時点で、データＣＲＣエラーがネットワーク入力ポート（３６２）によって検出されると、受信シーケンサ（３６０）はＥレジスタ（３８７）とＥＣレジスタ（３８８）とをセットする。これによってステップ（６０４）においてエラーが発生したことが示される。エラーの有無にかかわらず、処理フローはステップ（６０５）へと進み、このステップで受信の完了局面が開始される。
【００９２】
ソフトウェアは、特定の受信要求の処理が完了した時点で、命令処理装置への割り込み要求を発行するか否かを制御できる。割り込み要求を発行する場合、ソフトウェアは対応するポストＲＣＷもしくはプールＲＣＷのＩＲビットをセットする。このＩＲビットは受信回路によって読まれる。ＩＲビットがセットされていれば、当該受信要求の完了後、割り込み要求が発行される。ソフトウェア側では、受信要求の処理が完了するまで割り込み要求が必要かどうかわからないことが多い。たとえば多重タスクのソフトウェア環境において、ある受信要求の完了を待っているタスクは別な作業を実行できるが、メッセージの処理が終るまでソフトウェアのタスクが実行すべき作業がなければ、このタスクはスリープ状態に入る必要がある。あるタスクがスリープ状態に入れば、他のタスクが命令処理装置の処理能力を利用して別な作業を実行できる。スリープ状態に入る前に、当該タスクはポストＲＣＷまたはプールＲＣＷのＩＲビットをセットする。これによって、受信要求の処理が完了すると、当該タスクはスリープ状態を離脱して作業を続行できる。この場合、ＩＲビットは、受信処理が完了するまでの任意の時点でソフトウェアによって動的にセットできる。これは、受信回路が、受信処理の終了後、ＩＲビットの状態を判定するためにポストＲＣＷもしくはプールＲＣＷを再度読まなければならないことを意味する。残念ながら、受信回路による再度の読み出し要求には時間がかかるため、受信の実際の終了時間を遅らせる可能性がある。このため本発明では、各ポストＲＣＷおよびプールＲＣＷに特別なフィールド（ＩＭビットフィールド）を設けている。このフィールドは、再度の読み出し要求が不用の場合にこれを避けるために使用される。ＩＭビットは、ＩＲフィールドに関する動作状態を制御するビットである。ＩＭビットがソフトウェアによってセットされると、再度の読み出しは実行されず、ポストＲＣＷもしくはプールＲＣＷに対する最初の読み出し要求で得られたＩＲビットが使用される。この場合、ソフトウェアはＩＲビットの状態を動的に変更しない。ＩＭビットがソフトウェアによってクリアされると、受信処理の終了時にＩＲフィールドの値が再度取り出される。ＩＲフィールドの変更を受信回路に知らせるか否かをソフトウェア側で検査できるようにするため、受信回路はＲＦビット（２６４）を備えている。このビットは、バス（６）を介してソフトウェアによってアクセスできる。ポストＲＣＷとプールＲＣＷはそれぞれ、受信回路の読んだＩＲビットの条件を反映するＩビットフィールドを有する。ＲＦビット（２６４）は、ＩＲビットを再度取り出すための再度読み出し要求が発行される前に、受信回路によってセットされる。ＩビットがポストＲＣＷもしくはプールＲＣＷに最終的に書き込まれたのち、ＲＦビット（２６４）はクリアされる。ソフトウェアは、いずれかのポストＲＣＷもしくはプールＲＣＷのＩＲビットをセットしたのち、ＲＦビット（２６４）をポーリングして、このビット（２６４）がクリアされるまで待つ必要がある。ＲＦビット（２６４）がやがてクリアされるか、もしくは該ビットがすでにクリアされている場合、次の２種類の状態のうちいずれかが該当する。第１の状態は、受信要求の処理がまだ完了していない状態であって、受信動作に対応するポストＲＣＷもしくはプールＲＣＷが更新されていない状態である。この場合、ソフトウェアによるＩＲビットの変更がのちほど受信回路に通知される。第２の状態は、受信要求の処理が完了した状態であって、受信動作に対応するポストＲＣＷもしくはプールＲＣＷは最終的に更新されている状態である。この場合、Ｉビットフィールドは、受信回路から見たＩＲビットの状態を反映している。
【００９３】
ステップ（６０５）において、受信シーケンサ（３６０）はＲＦ信号（４２８）をアサートする。この信号はＲＦビット（２６４）をセットする。ステップ（６０６）において、ＩＭレジスタ（３８０）が検査される。このレジスタは、ポストＲＣＷもしくはプールＲＣＷの最初の読み出しでラッチされたＩＭフィールドの値を保持している。ＩＭレジスタ（３８０）がクリアされていれば、受信シーケンサ（３６０）は、受信側ＤＭＡＣ（３６１）に対して、ポストＲＣＷもしくはプールＲＣＷを再度取り出すことを要求する。ＩＲビット（３８５）はＩＲレジスタ（３８１）に再度ラッチされる。次にステップ（６０８）において、受信シーケンサは、Ｆビット（３８５）をセットし、Ｉビット（３８６）をＩＲレジスタ（３８１）の内容にセットする。ステップ（６０９）において、受信シーケンサ（３６０）は、受信側ＤＭＡＣ（３６１）に対して、Ｓ（３８３）、Ｂ（３８４）、Ｆ（３８５）、Ｉ（３８６）、Ｅ（３８７）、ＥＣ（３８８）の各レジスタの内容を、ポストＲＣＷもしくはプールＲＣＷのＳ、Ｂ、Ｆ、Ｉ、Ｅ、ＥＣの各フィールドへとそれぞれ書き込むことを要求する。ステップ（６１０）において、受信シーケンサ（３６０）はＲＣＷＩＲＱ信号（４２２）をアサートする。３個のＡＮＤゲート（４２５、４２４、４２３）が、ＲＣＷＩＲＱ信号（４２２）と、Ｉ（４００）、Ｅ（３９８）、Ｒ（４０３）の各レジスタからの出力との論理積をそれぞれとる。これらゲートの出力信号は、ＲＲ（２７０）、ＲＥ（２６９）、ＲＩ（２６８）の各割り込み要求ビットをそれぞれセットする。このため、受信処理の終了時に、受信回路がＲＣＷのＲビット、Ｅビット、Ｉビットのうちいずれかをセットすると、対応する割り込み要求ビットがセットされる。ステップ（６１１）において、受信回路はＲＦ信号（４２８）のアサートを解除して、ＲＦビット（２６４）をクリアする。ステップ（６１２）において、処理フローは図２０の最初のステップ（５２１）へと戻る。ステップ（６２１）において、入力ポートは次のメッセージヘッダの受信開始を待つ。
【００９４】
以下では、通信ソフトウェアがシステムのノード間においてメッセージをいかに転送するかについて、例を挙げて説明する。ここでは１個のノードのみを説明するが、この説明はシステムの他のノードも同様に該当する。
【００９５】
ソフトウェアは最初に、ローカルメモリ内に必要なデータ構造を形成しなければならない。ソフトウェアはまず、無効なＨＴＥだけから構成されるハッシュテーブルをローカルメモリ内に生成する。各ノードは、アプリケーションソフトウェアの複数のタスクを実行できる。異なるタスクとの通信を区別するため、ここでは上記のＣｏｍｍ（コミュニケータ）フィールドを２分割して、タスク識別フィールドと、コミュニケータ識別フィールドとを形成する。アプリケーションソフトウェアの各タスクをノードで実行するためには、各アプリケーションタスクに使用される通信コンテキストを識別するためのコミュニケータを表わす一連のコミュニケータ値を割り当てる必要がある。アプリケーションソフトウェアの各タスクに対しては、ソフトウェアは、データプール１個と、空きプールＲＣＷＣＷ１個を生成しなければならない。特に限定されないが、アプリケーションソフトウェアの各タスクが、別個のＰＣＷと、別個のデータプールと、別個のプールＰＣＷの連鎖とをそれぞれ使用することが望ましい。理由は、こうすればデータのオーバーフローエラーやプールＰＣＷ不足エラーが、エラーを生じたアプリケーションタスク１個のみに限定されるからである。通信ソフトウェアは次に、送信元無指定と、タグ無指定と、当該アプリケーションタスクに割り当てられたコミュニケータ値とに対応する受信指定を有する有効なＨＴＥを生成することによって、ハッシュテーブルにＰＣＷをポストする。ＰＣＷに対応するＨＴＥ内のＴｉｍｅ（時間）値は最大値にセットしておく。この値は、将来における受信要求、すなわち今後発行される受信要求に対応する値である。ＰＣＷは、アプリケーションソフトウェアのタスクに割り当てられた各コミュニケータ値につき、別個のＨＴＥを使用して同一の方法で複数回ポストする。ＰＣＷのこれらのポスト受信要求は、アプリケーションソフトウェアによって発行された保留状態の受信要求のうちのいずれにも一致しないメッセージに対するデフォルト受信要求として使用される。
【００９６】
メモリ構造の初期化後の任意の時点で、ノード上で実行されるアプリケーションソフトウェアは、通信ライブラリソフトウェアにメッセージを送信するための要求を発行できる。ライブラリソフトウェアは、この要求を、送信回路が実行する送信のためのキューに登録する。メッセージ送信要求をキューに登録するためには、通信ライブラリソフトウェアは、すでに説明したＴＣＷを生成する。このＴＣＷには、送信すべきデータのコミュニケータ（Ｃｏｍｍ）値と、タグ（Ｔａｇ）値と、バッファアドレスとが格納される。次にライブラリソフトウェアは、ＴＣＷのＳビット（１３２）を検査して、先行する送信対象メッセージに対応するＴＣＷが送信回路によって開始されたか否かを調べる。Ｓビット（１３２）がセットされていれば、ソフトウェアは現在のＴＣＷのアドレスを送信回路のＮＴＣＷＰｔｒレジスタ（３３１）にセットするとともに、ＮＣビット（３３３）をセットする。先行するＴＣＷのＳビットがクリアされていれば、ソフトウェアはＮＩＡ（ネットワークインタフェースアダプタ）のＴＨビット（２５８）をセットする。これによって送信回路が別なＴＣＷを開始しないことが保証される。ソフトウェアは次に、ＴＳビット（２６１）のポーリングを行なって、このビットがクリアされるまで待つ。ＴＳビット（２６１）がクリアされると、送信回路が別なＴＣＷを開始しないことが保証される。ソフトウェアは再び先行するＴＣＷのＳビットを検査する。Ｓビットがクリアされていれば、ソフトウェアは現在のＴＣＷを指すポインタをＮＴＣＷＰｔｒフィールド（１２１）へと書き込むとともに、先行するＴＣＷのＮＣビット（１２２）をセットして、ＴＨビット（３３３）をクリアする。先行するＴＣＷのＳビットがこの時点でセットされていれば、ソフトウェアが先行するＴＣＷに現在のＴＣＷを連鎖するにはすでに遅すぎることを意味する。この場合、ソフトウェアは、現在のＴＣＷのアドレスを送信回路のＮＴＣＷＰｔｒレジスタ（３３１）にセットするとともに、ＮＣビット（３３３）をセットしなければならない。ソフトウェアはこのようにして、送信回路がメッセージの送信を完了するまで待たずに、任意の個数のメッセージ送信要求をキューに登録することができる。ソフトウェアが、メッセージの送信が終るまでスリープ状態に入り、送信完了時にスリープ状態から離脱したい場合には、ソフトウェアは任意の時点でＴＣＷのＩＲビットをセットする。こうすれば、送信動作の終了時に処理装置割り込み要求が発行される。送信動作が完了したか否かは、ソフトウェアが対応するＴＣＷのＦビット（１３２）の状態を検査することによって容易に調べることができる。
【００９７】
メモリ構造の初期化後の任意の時点で、ノード上で実行されるアプリケーションソフトウェアは、通信ライブラリソフトウェアに対して受信要求を発行することができる。ライブラリソフトウェアは、受信回路が使用したプールＲＣＷの連鎖を最初に検索する。これらのプールＲＣＷは、各プールＲＣＷのＳビット（２４４）によって容易に識別できる。各Ｓビットは、対応するＰＣＷが使用された場合にはセットされている。これらのプールＲＣＷは、最も古いものから検索しなければならない。これはＭＰＩのメッセージの順序要件を犯さないためである。当該受信要求に一致するＳＮＮフィールドと、コミュニケータフィールドと、タグフィールドとを含むプールＲＣＷがソフトウェアによって検出されると、この要求は満たされる。次にソフトウェアは、プールＲＣＷのＦビット（２４５）がセットされるのを待って受信の完了を確認する。ソフトウェアは、ＤａｔａＰｔｒフィールド（２３７）によって示されたデータをアプリケーションのバッファに複写してもよい。メッセージがプールＲＣＷの連鎖内で検出されない場合、受信側ではポストＲＣＷを生成しなければならない。このポストＲＣＷには、アプリケーション空間内のユーザバッファの指定と、ＰＣＷの有効なポインタとが格納されている必要がある。ポストＲＣＷのＢＥビット（１７４）はクリアされていなければならない。理由は、当該ポストＲＣＷは当初仮にポストされるだけであって、後にバッファがイネーブルされるからである。次にソフトウェアは、受信指定のハッシュ値を計算して、ハッシュテーブル内で該当するＨＴＥを検索する。ＨＴＥが検出されない場合、ソフトウェアがＨＴＥを生成しなければならない。このため、受信側では最初にＲＨビット（２５９）をセットしたのち、ＲＳビット（２６３）がクリアされるまでこのビット（２６３）のポーリングを実行する。これによって、ソフトウェアがハッシュテーブルを変更している間に、受信回路がこのテーブルの検索を開始しないことが保証される。次にソフトウェアは、ＨＴＥをハッシュテーブルへと書き込み、タイムスタンプとポインタをＨＴＥ内のポストＲＣＷへと格納したのち、ＲＨビット（２５９）をクリアする。ＨＴＥが検出されても連鎖としてこれに何も付加されていなければ、ソフトウェアはＲＨビット（２５９）をまずセットしたのち、ＲＳビット（２６３）がクリアされるまでこのビット（２６３）のポーリングを行なう。その後ソフトウェアは、ポストＲＣＷをポストＲＣＷの連鎖の最後に挿入するが、このポストＲＣＷはすべてのポストＰＣＷに先行する必要がある。この動作をソフトウェアが行なう場合、連鎖内の最後のポストＲＣＷのＮＰｔｒ、ＮＣ、ＮＰ、ＮＴｉｍｅの各フィールドを、ポストすべきＲＣＷの対応するフィールドへとそれぞれ複写するとともに、先行するＲＣＷのＮＣ、ＮＰ、ＮＰｔｒ、ＮＴｉｍｅの各フィールドを、現在の受信要求のポストＲＣＷのタイムスタンプとポインタとに対応するようにセットする。ソフトウェアは次に、ＲＨビット（２５９）をクリアして、受信回路の動作を再度イネーブルする。次いでソフトウェアは、前回の検査以降に使用されたすべてのプールＲＣＷのなかから当該受信要求に一致するメッセージを検索する。このメッセージが受信されていなければ、ソフトウェアはＲＣＷのＢＥビット（１７４）をセットしてバッファをイネーブルする。次にソフトウェアはＲＳビット（２６３）のポーリングを行ない、このビットがクリアされるまでポーリングを続ける。ＲＳビット（２６３）がクリアされると、ソフトウェアはＲＣＷのＳビット（２０７）とＢビット（２０８）とを検査して、要求されたメッセージの受信開始前にバッファのイネーブルが成功したかどうかを調べる。ポストＲＣＷを使用したメッセージの受信開始後にバッファがイネーブルされていれば、ライブラリソフトウェアによってデータをアプリケーションバッファへと複写しなければならない。バッファがイネーブルされる前にプールＲＣＷを使用してメッセージが受信されていれば、仮にポストしたＲＣＷのポストの解除を行なう。ソフトウェアが仮ポストＲＣＷのポストを解除するには、前述のように、ソフトウェアは最初にＲＨビット（２５９）をセットしたのち、ＲＳビット（２６３）のポーリングを行ない、このビット（２６３）がクリアされるまでポーリングを続ける。ＲＳビット（２６３）がクリアされると、ソフトウェアは、ＨＴＥもしくはポストＲＣＷの連鎖からＲＣＷを外す。要求されたメッセージに加えて、仮ポストＲＣＷを使用して別なメッセージが受信されると、連鎖から外された仮ポストＲＣＷは使用済みのプールＲＣＷとして扱われる。対応するバッファのない使用済みのポストＲＣＷと、使用済みのプールＲＣＷはそれぞれＳｅｑフィールドを有する。このＳｅｑフィールドは、ＰＣＷのＳｅｑフィールドから複写されたカウント値から得られる。このカウント値は、ＰＣＷが受信回路によって更新される度に、受信回路によって増分される。このため、Ｓｅｑフィールドを使用すると、プールＲＣＷと仮ポストＲＣＷとに受信されたメッセージの相対順序を決定できる。ポストの解除が間に合わなかった使用済みの仮ポストＲＣＷは、使用済みプールＲＣＷの連鎖のなかで、メッセージの受信順序に対応する場所に挿入する。この場合、受信回路の動作を保留にする必要がないことが注目すべき点である。理由は、これらのプールＲＣＷがすでに使用されているためである。任意のアプリケーションタスクを、スリープ状態に入れたのち、受信要求の完了時にスリープ状態から離脱させたい場合、ソフトウェアは、任意の時点でプールＲＣＷもしくはポストＲＣＷのＩＲビットをセットすることによって、対応する受信動作の完了時に処理装置割り込み請求を発行することができる。受信動作が完了したか否かは、対応するポストＲＣＷの状態か、もしくは対応するポストＲＣＷのＦビットのいずれかをソフトウェアが検査することによって容易に調べることができる。
【００９８】
上記の実施例の多数の変形を本発明を使用して実施することができる。以下に例を示す。
【００９９】
送信回路がノード番号レジスタからＳＮＮヘッダフィールドを取り出す代りに、ＳＮＮフィールドをＴＣＷに付加することによって、メッセージヘッダのＳＮＮ（送信元ノード番号）をメッセージごとに命令処理装置によって指定してもよい。このようなシステムは、ノード１個につき複数のアプリケーション処理が実行される場合に有効である。この場合、ＳＮＮを使用してメッセージの送信元処理を識別してもよい。
【０１００】
メッセージヘッダフィールドのうちいずれかを不用とするシステムでは、これらの不用なフィールドを省略してもよい。たとえば、単一の通信コンテキストのみを使用するシステムにおいてはＣｏｍｍフィールドを省略できる。また無指定の使用を必要としないアプリケーションを実行するシステムでは、検索アルゴリズムを簡略化して、ハッシュテーブル内で該当するＨＴＥ１個のみを検索すればよい。
【０１０１】
上記の実施例では、ハッシュテーブルを、到着するメッセージとポスト受信要求との照合の手段として使用している。これに代えて、ポスト受信要求を保持するための連想メモリを使用してもよい。このような連想メモリには、メッセージをメッセージヘッダから識別するための識別フィールドを設けて、メッセージに対応する受信要求をメモリから返送する。こうした実施例も本発明の範囲から逸脱するものではない。
【０１０２】
メッセージを受信要求に照合する際に厳密な順序要件を必要としないソフトウェアを使用するシステムでは、前述の実施例で使用したタイムスタンプフィールドや時間比較器を使用しなくてよい。このような変形例も本発明の範囲から逸脱するものではない。
【０１０３】
また本発明の実施例では、メッセージプールの設置を必ずしも必要としない。受信側のソフトウェアにおいて、受信すべきメッセージが常にあらかじめわかっていれば、受信したメッセージをメッセージプールへと格納する必要はない。このような実施例も本発明の範囲から逸脱しない。
【０１０４】
【発明の効果】
本発明によれば、ポスト受信要求検索機構をハードウェアで実現することにより、ソフトウェアのオーバヘッドを減らすことによってメッセージの待ち時間を大幅に短縮することができるとともに、ＭＰＩ（メッセージ通信インタフェース）規格に準じたメッセージ通信ライブラリを簡単に実現することができる。
【図面の簡単な説明】
【図１】メッセージ通信ネットワークに接続された本発明のノードのブロック図である。
【図２】メッセージ通信ネットワークに接続された多重ノードシステムのブロック図である。
【図３】従来のシステムを示すブロック図である。
【図４】本発明によって送受信されるメッセージの形式を示す図である。
【図５】メッセージの送信を要求するために本発明で使用する送信制御語（ＴＣＷ）の形式を示す図である。
【図６】保留状態の受信要求をポストするために本発明で使用するハッシュテーブルエントリ（ＨＴＥ）の形式を示す図である。
【図７】データプールとプールＲＣＷの連鎖を管理するために本発明で使用するプール制御語（ＰＣＷ）の形式を示す図である。
【図８】メッセージの受信を要求するために本発明で使用するポスト受信制御語（ポストＲＣＷ）の形式を示す図である。
【図９】受信回路によって更新された後のポストＲＣＷの形式を示す図である。
【図１０】保留状態のポストＲＣＷのいずれにも一致しないメッセージを受信するために本発明で使用するプール受信制御語（プールＲＣＷ）の形式を示す図である。
【図１１】保留状態のポストＲＣＷのいずれにも一致しないメッセージの受信時に受信回路によって更新されたプールＲＣＷの形式を示す図である。
【図１２】データプールの形式を示す図である。
【図１３】ネットワークインタフェースアダプタ（ＮＩＡ）の回路図である。
【図１４】ＮＩＡ保留制御レジスタの形式を示す図である。
【図１５】ＮＩＡ動作状態レジスタの形式を示す図である。
【図１６】ＮＩＡ割り込み要求状態レジスタの形式を示す図である。
【図１７】送信回路の回路図である。
【図１８】送信回路の動作を表わすフローチャートである。
【図１９】受信回路の回路図である。
【図２０】受信回路の動作の全体を表わすフローチャートである。
【図２１】ハッシュテーブル検索制御装置の回路図である。
【図２２】ハッシュテーブル検索制御装置の動作を表わすフローチャートである。
【図２３】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図２４】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図２５】メッセージの受信開始に関する受信回路の動作を表わすフローチャートである。
【図２６】メッセージデータの受信とメッセージの受信の終了とに関する受信回路の動作を表わすフローチャートである。
【符号の説明】
１、５０、５１、５２、９０１…ノード、２、９０２…ネットワーク、３、
９０３…命令処理装置、４、９０４…ローカルメモリ、
５、９０５…ＮＩＡ、６、９０６…バス、８、９０８、３００…送信回路、
１０、９１０、３０１…受信回路、１２、９１２…メッセージ、９１９…シーケンサ、９２０…ポストレジスタ
３２０…送信シーケンサ、３２１…送信ＤＭＡＣ
３６０…受信シーケンサ、３６３…ハッシュテーブル検索制御装置、
【図１】
0003697831.tif 000002
【図２】
0003697831.tif 000003
【図３】
0003697831.tif 000004
【図４】
0003697831.tif 000005
【図５】
0003697831.tif 000006
【図６】
0003697831.tif 000007
【図７】
0003697831.tif 000008
【図８】
0003697831.tif 000009
【図９】
0003697831.tif 000010
【図１０】
0003697831.tif 000011
【図１１】
0003697831.tif 000012
【図１２】
0003697831.tif 000013
【図１３】
0003697831.tif 000014
【図１４】
0003697831.tif 000015
【図１５】
0003697831.tif 000016
【図１６】
0003697831.tif 000017
【図１７】
0003697831.tif 000018
【図１８】
0003697831.tif 000019
【図１９】
0003697831.tif 000020
【図２０】
0003697831.tif 000021
【図２１】
0003697831.tif 000022
【図２２】
0003697831.tif 000023
【図２３】
0003697831.tif 000024
【図２４】
0003697831.tif 000025
【図２５】
0003697831.tif 000026
【図２６】
0003697831.tif 000027