(57)【要約】【課題】事前制御通信を行わずにデータ転送を行うこと。【解決手段】本発明の通信システムは、ネットワーク（４００）に接続された第１電子計算機（１００−１）と第２電子計算機（１００−２）とを具備する。電子計算機（１００−１）は、電子計算機（１００−２）の受信命令ＦＩＦＯに受信命令が登録されているか否かに関わらず、データを含むパケットを電子計算機（１００−２）に転送する。電子計算機（１００−１）が事前制御通信を行わずにデータ転送を行うため、受信命令が電子計算機（１００−２）の受信命令ＦＩＦＯに登録されている場合、データ転送の開始から完了までのレイテンシ（実行時間）が低減する。【選択図】図１
2005204089.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続された第１電子計算機と、
前記ネットワークに接続され、データを含むパケットを前記第１電子計算機に転送する第２電子計算機とを具備し、
前記第１電子計算機は、通信装置と、演算装置と、受信バッファと、保持バッファとを備え、
前記通信装置は、
前記演算装置によって受信命令が発行されたときに、前記パケットの前記データを前記受信バッファに書き込む第１受信処理部と、
前記演算装置によって前記受信命令が発行されていないときに、前記パケットの転送を中断するための中断要求を前記第２電子計算機に送信すると共に、前記パケットに関する転送情報を前記保持バッファに登録する第２受信処理部と、
前記演算装置によって次の受信命令が発行されたときに、前記保持バッファに登録された前記転送情報を参照して、前記中断されたパケットの転送を再開するための再開要求を前記第２電子計算機に送信する送信処理部とを備えた
通信システム。
【請求項２】
請求項１に記載された通信システムにおいて、
前記通信装置は、
前記第１受信処理部によって前記受信バッファに書き込まれる前記データのデータ長が、前記受信バッファが保持することができるデータのデータ長を超えるときに、前記中断要求を前記第２電子計算機に送信すると共に、前記転送情報を前記保持バッファに登録する第３受信処理部を更に備えた
通信システム。
【請求項３】
請求項２に記載された通信システムにおいて、
前記転送情報と前記再開要求とは、前記データのうちの、前記第１受信部によって前記受信バッファに書き込まれたデータのデータ長を含み、
前記再開要求は、前記データのうち、前記受信バッファに書き込まれたデータ以外のデータの転送を要求するための情報である
通信システム。
【請求項４】
データを含むパケットを転送する他の電子計算機とネットワークを介して接続された電子計算機であって、
通信装置と、
受信命令保持部と、
受信命令を発行して前記受信命令保持部に登録する演算装置と、
受信バッファと、
保持バッファとを備え、
前記通信装置は、
前記受信命令が前記受信命令保持部に登録されているときに、前記パケットの前記データを前記受信バッファに書き込む第１受信処理部と、
前記受信命令が前記受信命令保持部に登録されていないときに、前記パケットの転送を中断するための中断要求を前記他の電子計算機に送信すると共に、前記パケットに関する転送情報を前記保持バッファに登録する第２受信処理部と、
前記演算装置によって次に発行された受信命令が前記受信命令保持部に登録されているときに、前記保持バッファに登録された前記転送情報を参照して、前記中断されたパケットの転送を再開するための再開要求を前記他の電子計算機に送信する送信処理部とを備えた
電子計算機。
【請求項５】
請求項４に記載された電子計算機において、
前記通信装置は、
前記第１受信処理部によって前記受信バッファに書き込まれる前記データのデータ長が、前記受信バッファが保持することができるデータのデータ長を超えるときに、前記中断要求を前記第２電子計算機に送信すると共に、前記転送情報を前記保持バッファに登録する第３受信処理部を更に備えた
電子計算機。
【請求項６】
請求項５に記載された電子計算機において、
前記転送情報と前記再開要求とは、前記データのうちの、前記第１受信部によって前記受信バッファに書き込まれたデータのデータ長を含み、
前記再開要求は、前記データのうち、前記受信バッファに書き込まれたデータ以外のデータの転送を要求するための情報である
電子計算機。
【請求項７】
データを含むパケットを転送する他の電子計算機とネットワークを介して接続され、演算装置と受信バッファと保持バッファとを備えた電子計算機を使用する通信方法であって、
前記演算装置によって受信命令が発行されたときに、前記パケットの前記データを前記受信バッファに書き込むステップと、
前記演算装置によって前記受信命令が発行されていないときに、前記パケットの転送を中断するための中断要求を前記他の電子計算機に送信すると共に、前記パケットに関する転送情報を前記保持バッファに登録するステップと、
前記演算装置によって次の受信命令が発行されたときに、前記保持バッファに登録された前記転送情報を参照して、前記中断されたパケットの転送を再開するための再開要求を前記他の電子計算機に送信するステップとを具備する
通信方法。
【請求項８】
請求項７に記載された通信方法において、
前記書き込むステップによって前記受信バッファに書き込まれる前記データのデータ長が、前記受信バッファが保持することができるデータのデータ長を超えるときに、前記中断要求を前記第２電子計算機に送信すると共に、前記転送情報を前記保持バッファに登録するステップを更に具備する
通信方法。
【請求項９】
請求項８に記載された通信方法において、
前記転送情報と前記再開要求とは、前記データのうちの、前記第１受信部によって前記受信バッファに書き込まれたデータのデータ長を含み、
前記再開要求は、前記データのうち、前記受信バッファに書き込まれたデータ以外のデータの転送を要求するための情報である
通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット通信を行う通信システムに関する。
【背景技術】
【０００２】
複数の電子計算機が交換網を介して通信する通信システムが知られている。前記通信システム（第１従来例の通信システム）は、交換網と、複数の電子計算機とを具備し、複数の電子計算機の各々は、交換網に接続された通信装置と、演算を行う演算装置と、送信バッファと、受信バッファとを備えている。第１従来例の通信システムは、通信処理として、演算装置が直接データ転送を行うのではなく、演算装置に備えられたプロセスからの命令により通信装置がデータ転送を行うため、演算装置による通信処理の負荷を軽減する。前記第１従来例の通信システムは並列計算機システムとして使用されている。
【０００３】
しかし、前記第１従来例の通信システムは以下のような問題点がある。
送信バッファと受信バッファとが単一である場合、通信装置が通信を行った結果、受信バッファのフルにより後続の受信データが破棄される。受信バッファのフルとは、相手の電子計算機からのパケット（受信パケット）に含まれるデータ（受信データ）の長さが、受信バッファ長（受信バッファが保持することができるデータの長さ）を超えることを表す。
演算装置に備えられた複数のプロセスが同時に同一の通信装置を利用して通信する場合、送信時に送信データを通信装置の送信バッファにコピーし、受信時には通信装置の受信バッファから受信データをプロセスの受信バッファにコピーするため、２度のコピーによるオーバヘッドが発生する。
【０００４】
第１従来例の通信システムの問題を解決するため、プロセスがバッファのコピーなしに通信を行う、いわゆる、ゼロ・コピー通信を行う通信システム（第２従来例の通信システム）が知られている。前記第２従来例の通信システムは、オーバヘッドを低減する。第２従来例の通信システムでは、通信装置がプロセス毎に送信バッファおよび受信バッファを備えている。通信装置を利用するプロセスが送信データへのポインタを通信装置に通知し、通信装置はプロセスから通知されたポインタからデータを取りだし、コピーする事なく交換網にデータを送信する。データを交換網から受信した通信装置は、あらかじめプロセスから通知されている受信バッファにデータを書き込む。これにより、第２従来例の通信システムでは、受信時に通信装置専用の受信バッファからプロセスの受信バッファへのコピーにより発生するオーバヘッドを回避することができる。前記通信装置への受信バッファの登録（準備）を受信命令の発行と呼び、プロセスが新規にデータの受信待ちを実行するたびに、通信装置に受信命令が発行される。受信命令が発行されたときに、通信装置は、受信バッファを使用することができる。
【０００５】
第１従来例の通信システム、第２従来例の通信システムを含む従来の通信システムに関連する技術が、特開平８−１８０００１号公報（特許文献１）、特開２００２−２２９９６３号公報（特許文献２）、特開平４−１１６７４７号公報（特許文献３）、特開２００２−２０７６７６号公報（特許文献４）、特開２０００−３２２３０９号公報（特許文献５）、特開２００１−２８２７０７号公報（特許文献６）、特開平９−２７０８２１号公報（特許文献７）に開示されている。
特に、特許文献１に記載された通信方式（第３従来例の通信システム）では、プロセスが通信装置にデータ転送を指示し、プロセスの送信バッファから直接宛先のプロセスの受信バッファにデータを書き込む通信装置が開示されている。宛先のプロセスとは、相手先の電子計算機である宛先計算機のプロセスである。
特許文献１に示されるように、第３従来例の通信システムでは、ゼロコピー通信を行う。第３従来例の通信システムでは、送信側のプロセスが通信装置に送信バッファを登録し、受信側のプロセスが通信装置に受信バッファを登録し、通信装置が送信バッファから直接受信バッファにデータを転送することにより、通信時間を短縮する。
【０００６】
ただし、第３従来例の通信システムでは、データ転送の通信相手（宛先計算機）が必ず受信バッファあるいは、受信パケットの処理を定義していることが必要で、予め通信する相互のプロセス間で通信し、次のデータ転送により受信側での処理を準備しておく必要がある。
また、一般的なＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）ライブラリを使用し、直接通信相手のメモリに書き込むデータ転送機能を有する通信装置の動作は下記の様になる。
プロセス間で制御通信用回線を開く（ステップ１）。
送り元の電子計算機（送り元計算機）の送信側のプロセス（送信プロセス）は、前記通信装置から制御通信用回線を介して（経由して）、送信データを送信するための送信要求を宛先計算機の受信側のプロセス（受信プロセス）に通知する（ステップ２）。
宛先計算機の受信プロセスは、前記通信装置により受信された送信要求を確認し、前記受信バッファを前記通信装置に登録する（受信命令を発行する）（ステップ３）。
宛先計算機の受信プロセスは、前記通信装置から制御通信用回線を経由して、受信準備完了通知を送り元計算機の送信プロセスに通知する（ステップ４）。
送り元計算機の送信プロセスは、前記通信装置により受信された受信準備完了通知を確認し、データを転送する（ステップ５）。
ステップ１から５に示したように、第３従来例の通信システムでは、宛先計算機の受信バッファが未登録であるときにデータ転送が行われないように、宛先計算機の受信プロセスが前記受信バッファを準備するために、データ転送以外の通信（送信要求、受信準備完了通知）をした後に、実際のデータ転送が行われる。
【０００７】
従来の通信システム（第２従来例の通信システム、第３従来例の通信システム）において、送り元計算機がデータ転送を開始する以前に、宛先計算機の受信プロセスは、前記受信バッファを前記通信装置に登録しなければならない。宛先計算機の受信バッファを前記通信装置に事前に登録するために、宛先計算機の受信プロセスは前記通信装置に対して事前に受信命令を発行する。事前に受信命令を発行するためには、送り元計算機の送信プロセスと宛先計算機の受信プロセスとの間において、データ転送（データ通信）を行う前に、受信バッファを準備（登録）するための事前制御通信が行われなければならない。
事前制御通信としては、送り元計算機、宛先計算機に専用の制御バッファを設け、送り元計算機と宛先計算機とは制御バッファを介した通信により相互の同期をとり、送り元計算機がデータを送信する以前に、宛先計算機の受信プロセスが受信命令を発行しておくことが一般的である。すなわち、事前制御通信によって、送り元計算機が、宛先計算機の受信バッファを準備（登録）するための要求を宛先計算機に行い、宛先計算機の受信プロセスが、前記受信バッファを準備した後に、データ転送の要求を送り元計算機に行う。このように、従来の通信システムでは、データ転送（データ転送の開始から完了）を行う前に事前制御通信が行われるために、事前制御通信を開始してからデータ転送の完了までのレイテンシ（実行時間）データ転送の開始から完了までのレイテンシが大きくなる問題がある。
【０００８】
【特許文献１】特開平８−１８０００１号公報
【特許文献２】特開２００２−２２９９６３号公報
【特許文献３】特開平４−１１６７４７号公報
【特許文献４】特開２００２−２０７６７６号公報
【特許文献５】特開２０００−３２２３０９号公報
【特許文献６】特開２００１−２８２７０７号公報
【特許文献７】特開平９−２７０８２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
計算機の演算性能が急激に向上しているにもかかわらず、計算機間の通信性能の向上は緩慢であるため、複数の計算機により構成され、計算機同士が相互に通信するシステムにおいて、計算機の演算性能よりも先に、通信速度がボトルネックとなり、システム性能を制限することが多くなっている。特に、演算処理を複数の計算機に分散し、相互に同期して動作している場合、データを相手に送信し、相手の計算機がデータを受信するまでは演算処理を実施できないため、演算処理性能が低下する。すなわち、通信が相手に届くまでの時間であるレイテンシがシステムの演算性能に大きな影響を与えている。
したがって、システム性能を向上させるためには、計算機がより長い時間演算処理を実行するため、通信のレイテンシを短縮することが必要である。
さらに、通信する複数の装置間における通信の確認のための事前通信、受信完了確認通信の時間が大きいため、データ通信以外の事前通信、受信完了確認等の通信を削除することが必要となる。
本発明の目的は、事前制御通信回数を削減、あるいは全く行わずにデータ転送を行うことができる通信システムを提供することにより、通信システムのレイテンシを低減することにある。
【課題を解決するための手段】
【００１０】
以下に、［発明を実施するための最良の形態］で使用する番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］の記載との対応関係を明らかにするために付加されたものであるが、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１１】
本発明の通信システムは、ネットワークに接続された第１電子計算機と第２電子計算機とを具備する。ネットワークは、実施の形態で説明される交換網（４００）に対応する。第１電子計算機は、例えば、実施の形態で説明される電子計算機（１００−２）であり、第１電子計算機は、例えば、実施の形態で説明される電子計算機（１００−１）である。
電子計算機（１００−１）と電子計算機（１００−２）は、通信装置（３００）と、演算装置（１１０）と、受信命令保持部（２１２）と、受信バッファ（２２２）と、保持バッファとを備えている。保持バッファは、実施の形態で説明される遠隔命令ＦＩＦＯ（２１３）である。演算装置（１１０）は、受信プロセス（１１１）を備えている。受信命令保持部は、実施の形態で説明される受信命令ＦＩＦＯ（２１２）である。受信プロセス（１１１）は、受信命令（５１０）を発行して受信命令ＦＩＦＯ（２１２）に登録する。
電子計算機（１００−２）の通信装置（３００）は、第１受信処理部と、第２受信処理部と、送信処理部とを備えている。第１受信処理部と第２受信処理部と送信処理部とは、実施の形態で説明されるコンテキスト処理部（３４１）である。
電子計算機（１００−１）は、電子計算機（１００−２）の受信命令ＦＩＦＯ（２１２）に受信命令（５１０）が登録されているか否かに関わらず、データを含むパケットを電子計算機（１００−２）に転送する。前記パケットは、実施の形態で説明されるデータ送信パケット（６００）である。
【００１２】
受信命令（５１０）が電子計算機（１００−２）の受信命令ＦＩＦＯ（２１２）に登録されているときに、電子計算機（１００−２）がデータ送信パケット（６００）を受け取った場合、電子計算機（１００−２）のコンテキスト処理部（３４１）は、データ送信パケット（６００）のデータを受信バッファ（２２２）に書き込む。
このように、本発明の通信システムによれば、電子計算機（１００−１）は、電子計算機（１００−２）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット（６００）を転送することができる（データ転送を行うことができる）。
本発明の通信システムによれば、電子計算機（１００−１）が事前制御通信を行わずにデータ転送を行うため、受信命令（５１０）が電子計算機（１００−２）の受信命令ＦＩＦＯ（２１２）に登録されている場合、データ転送の開始から完了までのレイテンシ（実行時間）は、従来の技術で説明されたような事前制御通信を開始してからデータ転送の完了までのレイテンシ（実行時間）よりも低減する。
【００１３】
受信命令（５１０）が電子計算機（１００−２）の受信命令ＦＩＦＯ（２１２）に登録されていないときに、電子計算機（１００−２）がデータ送信パケット（６００）を受け取った場合、電子計算機（１００−２）のコンテキスト処理部（３４１）は、データ送信パケット（６００）の転送を中断するための中断要求（６１０）を電子計算機（１００−１）に送信すると共に、データ送信パケット（６００）に関する転送情報を遠隔命令ＦＩＦＯ（２１３）に登録する。転送情報とは、実施の形態で説明される遠隔命令（６４０）であり、遠隔命令（６４０）には、データ送信パケット（６００）のヘッダの一部が記載される。中断要求とは、実施の形態で説明される中断要求パケット（６１０）である。中断要求を受け取った電子計算機（１００−１）は、電子計算機（１００−２）からの中断要求パケット（６１０）に応じて、データ送信パケット（６００）の転送を中断する。
このように、本発明の通信システムによれば、電子計算機（１００−２）が受け取れない無駄なデータ転送を早期に抑止し、交換網（４００）を流れる無駄なデータを低減することができる。
【００１４】
電子計算機（１００−２）の受信プロセス（１１１）によって次に発行された受信命令（５１０）が電子計算機（１００−２）の受信命令ＦＩＦＯ（２１２）に登録されているときに、電子計算機（１００−２）がデータ送信パケット（６００）を受け取った場合、電子計算機（１００−２）のコンテキスト処理部（３４１）は、遠隔命令ＦＩＦＯ（２１３）に登録された遠隔命令（６４０）を参照して、中断されたデータ送信パケット（６００）の転送を再開するための再開要求を電子計算機（１００−１）に送信する。再開要求とは、実施の形態で説明される再開要求パケット（６３０）である。再開要求パケットを受け取った電子計算機（１００−１）は、電子計算機（１００−２）からの再開要求パケット（６３０）に応じて、電子計算機（１００−２）に対してデータ送信パケット（６００）の転送を再開する（データ転送を行う）。
このように、本発明の通信システムによれば、電子計算機（１００−１）は、電子計算機（１００−２）が受け取れないデータのみを再度転送すればよいため、電子計算機（１００−２）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット（６００）を転送することができる（データ転送を行うことができる）。
【００１５】
電子計算機（１００−２）の通信装置（３００）は、第３受信処理部を更に備えている。第３受信処理部は、上記のコンテキスト処理部（３４１）である。
電子計算機（１００−２）がデータ送信パケット（６００）を受け取ったときに、受信バッファ（２２２）に書き込まれるデータ送信パケット（６００）のデータのデータ長が、受信バッファ（２２２）が保持することができるデータのデータ長を超える場合、電子計算機（１００−２）のコンテキスト処理部（３４１）は、中断要求パケット（６１０）を電子計算機（１００−１）に送信すると共に、遠隔命令（６４０）を作成し、電子計算機（１００−２）の遠隔命令ＦＩＦＯ（２１３）に登録する。
遠隔命令（６４０）と再開要求パケット（６３０）は、電子計算機（１００−１）からのデータ送信パケット（６００）のデータ中の、受信バッファ（２２２）に書き込まれたデータのデータ長（受信済みデータ長）を含ませた場合、再開要求パケット（６３０）は、電子計算機（１００−１）からのデータ送信パケット（６００）のデータのうち、受信バッファ（２２２）に書き込まれたデータ以外のデータの転送を要求するための情報（パケット）である。
本発明の通信システムによれば、電子計算機（１００−１）は、再開要求パケット（６３０）に含まれる受信済みデータ長を参照して、先にデータ送信パケット（６００）にて転送したデータのデータ長のうちの、受信済みデータ長以外のデータ長を有するデータ（残りデータ）を電子計算機（１００−２）に転送する。未受信の残データのみを送信要求する本発明の通信システムによれば、全データを再送する場合に比べ、電子計算機（１００−１）から電子計算機（１００−２）へのデータ転送時間が短縮できる。
【発明の効果】
【００１６】
本発明の通信システムでは、従来の技術で説明されたような事前制御通信を行わずに、パケットを転送することができるため、データ転送の開始から完了までのレイテンシ（実行時間）が、従来の技術で説明されたような事前制御通信を開始してからデータ転送の完了までのレイテンシ（実行時間）よりも低減する。
【発明を実施するための最良の形態】
【００１７】
図１は、本発明の通信システムの構成を示すブロック図である。本発明の通信システムは、複数の電子計算機（コンピュータ）と、ネットワークである交換網４００とを具備する。交換網４００には、複数の電子計算機が接続されている。複数の電子計算機を電子計算機１００−１、１００−２、１００−３とする。
電子計算機１００−１、１００−２、１００−３は、演算を行う演算装置１１０と、制御装置１２０と、主記憶装置２００と、通信装置３００とを備えている。演算装置１１０としては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が例示される。制御装置１２０は、演算装置１１０と主記憶装置２００と通信装置３００とを接続するためのインターフェースとして働く。主記憶装置２００は、データ、命令、電子計算機を識別する計算機番号を保持する。通信装置３００は、演算装置１１０からの指示により、交換網４００を介して通信を行う。
電子計算機１００−１、１００−２、１００−３の構成は同じである。
【００１８】
本発明の通信システムでは、送り元計算機（例えば電子計算機１００−１）は、宛先計算機（例えば電子計算機１００−２）に対して、従来の技術で説明されたような事前制御通信を行わずに、パケットを転送することができる（データ転送を行うことができる）。その結果、データ転送の開始から完了までのレイテンシ（実行時間）は、従来の技術で説明されたような事前制御通信を開始してからデータ転送の完了までのレイテンシ（実行時間）よりも低減する。添付図面を参照して、本発明による通信システムの実施の形態を以下に説明する。
【００１９】
図２は、本発明の通信システムにおける電子計算機１００−１、１００−２、１００−３の通信装置３００の構成を示すブロック図である。
通信装置３００は、送信部３２０と、受信部３４０と、メモリ制御部３１０とを備えている。メモリ制御部３１０は、送信部３２０と受信部３４０からのメモリアクセスを制御装置１２０に転送し、前記メモリアクセスの応答をそれぞれ前記送信部３２０、受信部３４０に返却し、制御装置１２０を経由する演算装置１１０からの通信装置３００へのアクセスを仲介する。送信部３２０は、メモリ制御部３１０を経由した演算装置１１０からの通信命令実行指示により、パケットを生成し、交換網４００へパケットを送信する。受信部３４０は、交換網４００からのパケットを受信し、受信したパケットに応じて受信パケットを処理する。
【００２０】
通信装置３００の送信部３２０について説明する。送信部３２０は、命令処理部３２２と、パケット送信部３２１とを備えている。命令処理部３２２はレジスタ３２２’（後述）を備えている。
命令処理部３２２は、主記憶装置２００から送信命令を取り出して解析し、受信部３４０からの制御パケット（送信中断要求パケット、データ要求パケット、受付パケット）を受け取り、送信命令を処理する。
パケット送信部３２１は、命令処理部３２２からの指示とメモリ制御部３１０から受け取る送信データとに基づいてデータ送信パケットを生成して交換網４００に送信する。
【００２１】
通信装置３００の受信部３４０について説明する。受信部３４０は、パケット受信部３４２と、コンテキスト処理部３４１とを備えている。コンテキスト処理部３４１はレジスタ３４１’（後述）を備えている。
パケット受信部３４２は、交換網４００から受信データを含む受信パケットを受信した場合、データパケットを受信した旨をコンテキスト処理部３４１に通知する。パケット受信部３４２は、受信パケット内の受信データをライトする指示をコンテキスト処理部３４１から受け取り、受信データを主記憶装置２００にライトする。
パケット受信部３４２が交換網４００から送信中断要求パケット、データ要求パケット、受付パケットのいずれかの制御パケットを受信した場合、受信パケットをコンテキスト処理部３４１に転送する。
コンテキスト処理部３４１は、パケット受信部３４２からデータパケット受信の通知を受けた後、受信パケットに対応するコンテキスト（後述）を主記憶装置２００から読み出す。コンテキスト処理部３４１は、主記憶装置２００から読み出したコンテキストに応じて、受信パケット内の受信データを主記憶装置２００へライトすることをパケット受信部３２２に指示し、コンテキストの更新のために主記憶装置２００へコンテキストを書き戻す処理を行う。
コンテキスト処理部３４１がパケット受信部３４２から制御パケットを受け付けた場合、コンテキスト処理部３４１は前記制御パケットを命令処理部３２２に転送する。
【００２２】
図３は、本発明の通信システムにおける電子計算機１００−１、１００−２、１００−３の演算装置１１０の構成を示すブロック図である。
演算装置１１０は、演算装置１１０が実行するための複数のプロセスと、通信装置用のドライバソフトウェア１１３とを備えている。複数のプロセスは、データを送信あるいは受信するコンピュータプログラムである計算機毎に異なる任意の数であるＮ個のプロセスが存在する。通信装置３００を経由してデータを送信している時、前記プロセスを送信プロセスと呼び、通信装置を経由してデータを受信している時、前記プロセスを受信プロセスと呼び、任意のプロセスが状況により送信プロセス、あるいは受信プロセスと呼ばれる場合がある。
ドライバソフトウェア１１３は、１〜Ｎ個の固有の接続番号を有する。１〜Ｎ個の接続番号は、プロセス１１１が通信するための識別番号であり、１〜Ｎ個の接続番号を接続番号“１”〜接続番号“Ｎ”と称する。
通信装置用のドライバソフトウェア１１３は、初期時に、接続番号“１”〜接続番号“Ｎ”をプロセス１１１に与える（設定する）。接続番号“１”のプロセス１１１〜接続番号“Ｎ”のプロセス１１１をそれぞれプロセス１１１−１、１１１−２、…、１１１−Ｎと称する。
【００２３】
送り元計算機の送信プロセス１１１−Ｊ（Ｊ＝１、２、…、Ｎ）と宛先計算機の受信プロセス１１１−Ｋ（Ｋ＝１、２、…、Ｎ）は、送り元計算機のプロセス１１１−Ｊが前記通信装置３００を用いて送信データと共に宛先接続番号“Ｋ”に送信した時、宛先計算機の通信装置３００（受信部３４０）は、送り元計算機からの宛先接続番号“Ｋ”により、宛先計算機の受信プロセス１１１−Ｋを特定する（後述）。送り元計算機は、電子計算機１００−１、１００−２、１００−３のうちの１つの電子計算機であり、宛先計算機は、電子計算機１００−１、１００−２、１００−３のうちの送り元計算機以外の１つの電子計算機である。
【００２４】
図４は、本発明の通信システムにおける電子計算機１００−１、１００−２、１００−３の主記憶装置２００の構成を示すブロック図である。
主記憶装置２００には、送信命令ＦＩＦＯ２１１と、受信命令ＦＩＦＯ２１２と、遠隔命令ＦＩＦＯ２１３と、コンテキストテーブル２０１と、送信バッファ２２１と、受信バッファ２２２と、転送長レジスタ２３１と、転送アドレスレジスタ２３２とが格納されている。
【００２５】
送信バッファ２２１は、それぞれのプロセス固有の送信バッファ２２１−１〜２２１−Ｎを含む。あるプロセス１１１−Ｊ（Ｊは任意）はプロセスのアドレス空間の任意のアドレスを送信バッファに使用可能であり、かつ複数の送信バッファを保持可能であるが、説明の簡素化のため、プロセス１１１−Ｊの送信バッファを２２１−Ｊとして以下を説明する。
受信バッファ２２２は、それぞれのプロセス固有の受信バッファ２２２−１〜２２２−Ｎを含む。あるプロセス１１１−Ｊ（Ｊは任意）はプロセスのアドレス空間の任意のアドレスを受信バッファに使用可能であり、かつ複数の受信バッファを保持可能であるが、説明の簡素化のため、プロセス１１１−Ｊの受信バッファを２２２−Ｊとして以下を説明する。
転送長レジスタ２３１は、固有の転送長レジスタ２３１−１〜２３１−Ｎを含む。
転送アドレスレジスタ２３２は、固有の転送アドレスレジスタ２３２−１〜２３２−Ｎを含む。
【００２６】
送信命令ＦＩＦＯ２１１は、それぞれのプロセス固有の送信命令ＦＩＦＯ２１１−１〜２１１−Ｎを含む。送信命令ＦＩＦＯ２１１−Ｊ（Ｊ＝１、２、…、Ｎ）は、プロセス１１１−Ｊにより使用されるＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）構造の制御データである。プロセス１１１−Ｊは、通信装置３００を使用して送信データを送信する。前記プロセス１１１−Ｊは、送信データを送信バッファ２２１−Ｊに登録し、前記送信データを通信装置３００が送信するための送信命令を発行する（送信命令ＦＩＦＯ２１１−Ｊに登録する）。送信バッファ２２１−Ｊのアドレスは、プロセス１１１−Ｊが送信命令を発行した際に（送信命令を送信命令ＦＩＦＯ２１１−Ｊに登録した際に）指定される。
受信命令ＦＩＦＯ２１２は、それぞれのプロセス固有の受信命令ＦＩＦＯ２１２−１〜２１２−Ｎを含む。受信命令ＦＩＦＯ２１２−Ｊ（Ｊ＝１、２、…、Ｎ）は、プロセス１１１−Ｊにより使用されるＦＩＦＯ構造の制御データである。プロセス１１１−Ｊは、通信装置３００を使用して受信データを受信する。前記プロセス１１１−Ｊは、受信データを通信装置３００が受信するための受信命令を発行する（受信命令ＦＩＦＯ２１２−Ｊに登録する）。プロセス１１１−Ｊが受信命令を発行した際に、通信装置３００への受信バッファ２２２−Ｊの登録（準備）が行われ、通信装置３００は、受信バッファ２２２−Ｊを使用することができる。受信バッファ２２２−Ｊのアドレスは、プロセス１１１−Ｊが受信命令を発行した際に（受信命令を受信命令ＦＩＦＯ２１２−Ｊに登録した際に）指定される。
【００２７】
遠隔命令ＦＩＦＯ２１３は、遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎを含む。遠隔命令ＦＩＦＯ２１３−Ｊ（Ｊ＝１、２、…、Ｎ）は、通信装置３００内のコンテキスト処理部３４１により使用されるＦＩＦＯ構造の制御データであり、交換網４００を介した遠隔計算機（後述）からの通信を一時的に保持する保持バッファである。通信装置３００は、接続番号毎に１つの遠隔命令ＦＩＦＯ２１３−Ｊを使用する。
コンテキストテーブル２０１は、それぞれのプロセス固有のコンテキストテーブル２０１−１〜２０１−Ｎを含む。コンテキストテーブル２０１−Ｊ（Ｊ＝１、２、…、Ｎ）は、コンテキスト処理部３４１により使用され、交換網４００を介した遠隔計算機との通信状態を保持する制御テーブルである。通信装置３００は、接続番号毎に１つのコンテキスト（後述）を使用する。
【００２８】
ここで、通信装置３００は、図示しない通信装置専用メモリを更に備え、通信装置専用メモリにはデータ構造が格納される場合がある。データ構造は、制御データ（送信命令ＦＩＦＯ２１１、受信命令ＦＩＦＯ２１２）、バッファ｛送信バッファ２２１、受信バッファ２２２、遠隔命令ＦＩＦＯ２１３（保持バッファ）｝、コンテキストテーブル２０１、レジスタ（転送長レジスタ２３１、転送アドレスレジスタ２３２）の少なくとも１つを含む。通信装置３００が通信装置専用メモリを備えているため、通信装置３００は、通信装置専用メモリに高速アクセス可能である。上記のデータ構造を高速アクセス可能な通信装置専用メモリ上に設けることにより、データ転送のレイテンシおよび転送帯域を向上させる。ただし、演算装置１１０が通信装置専用メモリに直接アクセスすることを可能にするために、通信装置専用メモリを演算装置１１０が使用するアドレス空間の一部としてアクセス可能とする必要がある。
【００２９】
図５は、本発明の通信システムにおける送信命令５００を示す。演算装置１１０（プロセス１１１−Ｊ）が送信データを送信するために、プロセス１１１−Ｊが主記憶装置２００（送信命令ＦＩＦＯ２１１−Ｊ）に送信命令５００を書き込み、送信部３２０の命令処理部３２２が送信命令５００を読み出す。
送信命令５００は、送信命令であることを示す送信タイプ欄５０１と、宛先の計算機番号を示す宛先計算機番号欄５０２と、宛先接続番号を示す接続番号欄５０３と、送信バッファの開始アドレスを示す送信バッファ開始アドレス欄５０４と、送信するデータの長さを示す転送長欄５０５から構成される。
【００３０】
プロセス１１１−Ｊが送信命令５００を送信命令ＦＩＦＯ２１１−Ｊに登録する時、プロセス１１１−Ｊによって、送信タイプ欄５０１に、送信命令であることを示す送信タイプを書き込む。宛先計算機番号欄５０２に、宛先計算機を識別する計算機番号として宛先計算機番号を書き込む。接続番号欄５０３に、宛先計算機内の宛先プロセスを識別する接続番号を書き込む。送信バッファ開始アドレス欄５０４に、送信データを保持する送信バッファ２２１−Ｊの先頭のアドレスである送信バッファ開始アドレスを書き込む。転送長欄５０５に、送信データの長さを示すデータ長である転送長を書き込む。
【００３１】
送信命令ＦＩＦＯ２１１−Ｊの管理について説明する。
通信装置３００の命令処理部３２２内のレジスタ３２２’は、接続番号毎に、主記憶装置２００上の送信命令ＦＩＦＯ２１１−１〜２１１−ＮはそれぞれＭ個の送信命令を登録することが可能であるリングバッファ構造のＦＩＦＯであり、各命令を０からＭ−１までの命令番号で識別する。前記Ｍは送信命令ＦＩＦＯ２１１−１〜２１１−Ｎそれぞれの最大命令数である。前記送信命令ＦＩＦＯ２１１−１〜２１１−Ｎのライト・ポインタは、プロセス１１１−１〜１１１−Ｎのそれぞれが次に送信命令を登録する命令番号を示し、前記プロセス１１１が送信命令５００を１個登録する毎に＋１加算する。ただし、前記ライト・ポインタへ＋１加算時にライト・ポインタの値がＭを超える場合にはライト・ポインタが回り込み“１”に設定される。送信命令ＦＩＦＯ２１１−１〜２１１−Ｎのリード・ポインタは、命令処理部３２２が次に実行する送信命令５００の命令番号を示し、命令処理部３２２が前記送信命令ＦＩＦＯ２１１−１〜２１１−Ｎから命令を取り出す毎に＋１だけ加算する。ただし、前記リード・ポインタへ＋１加算時にリード・ポインタの値がＭを超える場合にはリード・ポインタが回り込み“１”に設定される。
通信装置用のドライバソフトウェア１１３は、主記憶装置２００上の送信命令ＦＩＦＯ２１１−１〜２１１−Ｎの先頭アドレスと、送信命令ＦＩＦＯ２１１内の最大命令数とを、初期設定時に命令処理部３２２内のレジスタ３２２’に予め設定する。
【００３２】
送信プロセス１１１−１〜１１１−Ｎは、送信命令５００を主記憶装置２００（送信命令ＦＩＦＯ２１１−１〜２１１−Ｎ）に１個追加（登録）する毎に、命令処理部３２２内の送信命令ＦＩＦＯ２１１−１〜２１１−Ｎのライト・ポインタを１だけ加算する。
命令処理部３２２は、送信命令ＦＩＦＯ２１１−Ｊ（１、２、…、Ｎ）のライト・ポインタと送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタとを比較する。命令処理部３２２は、比較の結果、差分があれば送信命令５００が追加されたと判断し、送信命令ＦＩＦＯ２１１−Ｊの先頭アドレスから送信命令ＦＩＦＯ２１１−Ｊのリード・ポイントの示す命令番号の送信命令５００を主記憶装置２００上の送信命令ＦＩＦＯ２１１−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出して、前記送信命令５００を実行する。
命令処理部３２２は、１つの送信命令５００を実行する毎に、命令処理部３２２内の送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタを１だけ加算する。命令処理部３２２は、送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタを１だけ加算した後も送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタと送信命令ＦＩＦＯ２１１−Ｊのライト・ポインタとの値が異なっていた場合、すなわち差分がある場合、送信命令ＦＩＦＯ２１１−Ｊのリード・ポイントにより、次の送信命令５００を主記憶装置２００上の送信命令ＦＩＦＯ２１１−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出して、前記送信命令５００を実行する。前記送信命令取り出し、および実行は、送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタと送信命令ＦＩＦＯライト・ポインタとの差分がなくなるまで実行される。
【００３３】
制御装置１２０は、演算装置１１０内のプロセス１１１−１〜１１１−Ｎからの主記憶装置２００内へ送信命令５００の書き込み、送信データの書き込み、および演算装置１１０上の各プロセスによる主記憶装置２００への書き込みと読み込みと、送信部３２０からの送信命令の読み出し、送信データの読み出し、および受信部３４０からの主記憶装置２００への書き込みおよび読み出しの要求を受付け、主記憶装置２００への書き込みと読み出しを実行する。
【００３４】
図６は、本発明の通信システムにおけるデータ送信パケット６００を示す。演算装置１１０内の送信プロセス１１１−Ｊが送信データを送信するために、送信部３２０のパケット送信部３２１が送信データを含むデータ送信パケット６００を生成して交換網４００に送信する。
命令処理部３２２は、主記憶装置２００上の送信命令ＦＩＦＯ２１１−Ｊから送信命令５００を取り出し、送信命令５００の送信バッファ開始アドレス欄５０４に書き込まれた送信バッファ開始アドレスによって送信バッファ２２１−Ｊから送信データを読み出してパケット送信部３２１に転送する指示を、メモリ制御部３１０に発行する。前記指示を受けたメモリ制御部３１０は、制御装置１２０を介して主記憶装置２００上の送信バッファ２２１−Ｊから送信データを取りだし、パケット送信部３２１に転送する。
パケット送信部３２１は、メモリ制御部３１０から受け取った送信データを予め決められたパケット（データ送信パケット６００）の長さに分割し、データ送信パケット６００のそれぞれに連続のパケット番号を付加する。前記パケット番号は、１つの送信命令の最初のパケットは０番のパケット番号、その後は１、２、３、…、Ｎ番の連続するパケット番号である。
【００３５】
前記データ送信パケット６００は、送信タイプ欄６０１と、宛先計算機番号欄６０２と、送り元計算機番号欄６０３と、接続番号欄６０４と、送信命令番号欄６０５と、パケット番号欄６０６と、データ長欄６０７と、データ欄６０７とを含む。
データ送信パケット６００のデータ欄６０８以外の部分をパケット・ヘッダと呼び、パケットの制御に使用される。
【００３６】
データ送信パケット６００を生成するときに、パケット送信部３２１によって、送信タイプ欄６０１には、データ送信パケット６００であることを示す送信タイプが書き込まれる。宛先計算機番号欄６０２には、宛先計算機を識別する宛先計算機番号が書き込まれる。送り元計算機番号欄６０３には、送り元計算機を識別する計算機番号として送り元計算機番号が書き込まれる。接続番号欄６０４には、宛先計算機内の宛先プロセスを識別する接続番号が書き込まれる。送信命令番号欄６０５には、同時に同一宛先計算機にパケットを送信している送信命令のそれぞれを識別する送信命令番号が書き込まれる。パケット番号欄６０６には、同一送信命令により生成された複数のパケットを識別するパケット番号が書き込まれる。データ長欄６０７には、データ送信パケット６００に組み込まれたデータの長さを示すデータ長が書き込まれる。データ欄６０８には、送信バッファ２２１−Ｊから読み出された送信データが書き込まれる。
【００３７】
ここで、送信命令番号は、受信命令ＦＩＦＯ２１２−１〜２１２−Ｎに登録されてから順に実行される送信命令５００から、特定の送信命令５００（データ送信パケット６００が今生成されたときの送信命令５００）を識別するための識別番号であり、命令処理部３２２が命令毎に付加する番号である。命令処理部３２２は、次命令の送信命令番号をレジスタ３２２’に保持し、新規に送信命令番号を取り出す時に、次命令の送信命令番号を１だけ加算することにより、送信命令毎に異なる送信命令番号を付加する。
パケット番号は、データ（送信データ）が予め決められたパケット（データ送信パケット６００）の長さに分割されたときに、同一の送信命令５００（上記の特定の送信命令５００）で生成されたデータ送信パケット６００のうちの何番目のデータ送信パケット６００であるかを示す番号である。
パケット分割の例を以下に示す。
パケット送信部３２１が実施するパケット分割（データ送信パケット６００の分割）において、最大パケット長が１０００バイト、かつ送信命令５００の転送長が３５００バイトの場合、パケット送信部３２１は、３つの１０００バイトのデータを持ったデータ送信パケット６００と、１つの５００バイトのデータを持ったデータ送信パケット６００を生成し、交換網４００に送信する。
【００３８】
図７は、本発明の通信システムにおける受信命令５１０を示す。演算装置１１０（プロセス１１１−Ｊ）が受信データを受信するために、プロセス１１１−Ｊが主記憶装置２００（受信命令ＦＩＦＯ２１２−Ｊ）に受信命令５１０を書き込み、受信部３４０のコンテキスト処理部３４１が受信命令５１０を読み出す。
受信命令５１０は、受信タイプ欄５１１と、送り元計算機番号欄５１２と、接続番号欄５１３と、受信バッファ開始アドレス欄５１４と、受信バッファ長欄５１５から構成される。
プロセス１１１―Ｊが、受信命令５１０を受信命令ＦＩＦＯに登録するときに、受信タイプ欄５１１に、受信命令であることを示す受信タイプを書き込む。送り元計算機番号欄５１２には、送り元計算機を識別する送り元計算機番号を書き込む。接続番号欄５１３に、受信プロセス１１１−Ｊを識別する接続番号を書き込む。受信バッファ開始アドレス欄５１４に、受信された受信データを保持する受信バッファ２２２−Ｊの先頭のアドレス（受信バッファ開始アドレス）を書き込む。受信バッファ長欄５１５に、受信バッファ２２２−Ｊが保持することができるデータの長さを表す受信バッファ長を書き込む。
【００３９】
受信命令ＦＩＦＯ２１２−Ｊの管理について説明する。
通信装置３００のコンテキスト処理部３４１内のレジスタ３４１’は、接続番号毎に、主記憶装置２００上の受信命令ＦＩＦＯ２１２−１〜２１２−Ｎの先頭アドレスと、受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのリード・ポインタと、受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのライト・ポインタとを保持する。それぞれの受信命令ＦＩＦＯに登録可能な命令数をＭとし、受信命令ＦＩＦＯの各エントリに、最初のエントリの命令を０番、次を１番、…、最後をＭ−１番とした番号命令を付加する。
受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのライト・ポインタは、演算装置１１０（プロセス１１１−１〜１１１−Ｎ）が次に登録する命令番号を示す。受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのリード・ポインタはコンテキスト処理部３４１が次に実行する命令番号を表す。
通信装置用のドライバソフトウェア１１３は、主記憶装置２００上の受信命令ＦＩＦＯ２１２−１〜２１２−Ｎの先頭アドレスと、受信命令ＦＩＦＯ２１２内の最大命令数とを、初期設定時にコンテキスト処理部３４１内のレジスタ３４１’に予め設定する。受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのリード・ポインタは、コンテキスト処理部３４１が受信命令を１個処理する毎に１ずつ加算し、受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのライト・ポインタは、受信プロセス１１１−１〜１１１−Ｎが受信命令を１個登録する毎に１ずつ加算される。受信命令ＦＩＦＯ２１２−１〜２１２−Ｎのリード・ポインタ、ライト・ポインタは、１だけ加算された時に受信命令ＦＩＦＯの最後の命令番号を越えた場合、“０”になる。
【００４０】
コンテキスト処理部３４１は、受信命令ＦＩＦＯ２１２−Ｊ（１、２、…、Ｎ）のライト・ポインタと受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタとを比較する。コンテキスト処理部３４１は、比較の結果、差分があれば受信命令５１０が追加されたと判断し、受信命令ＦＩＦＯ２１２−Ｊの先頭アドレスから受信命令ＦＩＦＯ２１２−Ｊのリード・ポイントの指し示す受信命令５１０を主記憶装置２００上の受信命令ＦＩＦＯ２１２−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出し、前記受信命令５１０を実行する。
コンテキスト処理部３４１は、１つの受信命令５１０を実行する毎に、コンテキスト処理部２４１内の受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタを１だけ加算する。コンテキスト処理部３４１は、受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタを１だけ加算した後も受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタと受信命令ＦＩＦＯ２１２−Ｊのライト・ポインタとの値が異なっていた場合（差分がある場合）、受信命令ＦＩＦＯ２１２−Ｊのリード・ポイントにより、次の受信命令５１０を主記憶装置２００上の受信命令ＦＩＦＯ２１２−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出し、前記受信命令５１０を実行する。前記受信命令取り出し処理は、受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタと受信命令ＦＩＦＯ２１２−Ｊのライト・ポインタとの差分がなくなるまで実行される。
【００４１】
図８は、本発明の通信システムにおけるコンテキスト７００を示す。受信部３４０が交換網４００からパケットを受信した時に受信部３４０の動作を決定するための、コンテキスト処理部３４１が管理するコンテキスト７００を詳細に説明する。
コンテキスト７００は、接続番号毎に存在し、パケット受信部３４２によってデータ送信パケット６００が受信された時にデータ送信パケット６００内の接続番号欄６０４の値により参照され、コンテキスト処理部３４１に取り込まれる。コンテキスト７００は、受信命令処理中フラグ欄７０１と、送信命令番号欄７０２と、最終受信パケット番号欄７０３と、処理中受信命令の受信済みデータ長欄７０４と、送信中断済みフラグ７０５と、処理中受信命令欄７１０とを含む。
処理中受信命令欄７１０は、受信部３４０が処理中の受信命令５１０の一部を保持し、処理中受信命令の受信タイプ欄７１１と、処理中受信命令の受信バッファ開始アドレス欄７１２と、処理中受信命令のバッファ長欄７１３とを含む。
【００４２】
コンテキスト７００は、コンテキストテーブル２０１−１〜２０１−Ｎに格納されている。コンテキストテーブル２０１−Ｊ（Ｊ＝１、２、…、Ｎ）内のコンテキスト７００は、接続番号“Ｊ”用のコンテキストである。
パケット受信部３４２がデータ送信パケット６００を受信した時に、パケット受信部３４２は、コンテキスト処理部３４１にデータ送信パケット６００のパケット・ヘッダを転送する。
パケットヘッダを受け取ったコンテキスト処理部３４１は、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号“Ｊ”により、コンテキストテーブル２０１−Ｊを参照し、対応するコンテキスト７００を取り込む。
【００４３】
図１６を用いて、パケット受信部３４２が交換網４００からデータ送信パケット６００を受信し、コンテキスト処理部３４１にパケット・ヘッダを送信し、コンテキスト処理部３４１がコンテキスト７００を取り込んだ後の処理を詳細に説明する。
ここで、図中の“不問”とは、全く動作に影響を与えないことをいい、図中の“十分”とは、受信バッファ２２２−Ｊが受信したデータ送信パケット６００の全データを書き込むに十分なだけの残受信バッファ長がある場合をいい、図中の“不十分”とは、受信バッファ２２２−Ｊが受信したデータ送信パケット６００の全データを書き込むに十分なだけの残受信バッファ長がない場合をいい、受信バッファフル（あるいは受信バッファのフル）と表す場合もある。
【００４４】
前記パケット・ヘッダを受け取ったコンテキスト処理部３４１は、コンテキスト７００内のパケット処理中フラグ７０１（図中、処理中７０１）および中断済みフラグ７０５（図中、中断済み７０５）のコンテキストの状態と、前記パケットの接続番号６０４に対応する受信命令の有り・無し、および残受信バッファ長の十分・不十分の受信命令の状態とから、コンテキストおよびパケットの処理を決定する。前記状態としては、図中のケース名“ケースＡ１”、“ケースＡ２”、“ケースＲ１”、“ケースＲ２”、“ケースＲ３”、“ケースＤ１”が挙げられる。
【００４５】
ケースＡ１においては、パケット処理中フラグ７０１の値が非処理中を示す“０”、前記パケットに対応する受信命令５１０が存在し、残受信バッファ長が十分である場合を示す。ケースＡ１の場合、前記コンテキストの処理は、“作成”を表し、前記パケットの処理は、“データ処理”を表す。
前記パケット処理中フラグ７０１の値が“０”の場合の残受信バッファ長は前記受信命令５１０内の受信バッファ長５１５である。前記パケット処理中フラグ７０１の値が“１”の場合の残受信バッファ長は前記受信命令５１０内の受信バッファ長５１５からコンテキスト７００内の処理中命令の受信済みデータ長７０４を引いたものである。
前記パケット処理中フラグ７０１の値の初期値は“０”であり、通信装置３００および通信装置用のドライバソフトウェア１１３の初期化後の前記パケット処理中フラグ７０１は“０”であり、また、送信命令の全パケットの処理が完了した後に前記パケット処理中フラグ７０１を“０”にクリアする。
ケースＡ１において、コンテキスト処理部３４１は、前記受信ＦＩＦＯ２１２から先頭の受信命令５１０を取り出し、コンテキスト７００内の処理中受信命令７１０に登録し、前記受信命令処理フラグ７０１に処理中を示す“１”を書き込み、送信命令番号欄７０２に、前記パケット６００の送信命令番号欄６０５に記載された送信命令番号を書き込み、最終受信パケット番号欄７０３に、前記パケット６００のパケット番号欄６０６に記載されたパケット番号を書き込み、処理中受信命令の受信済みデータ長欄７０４に、前記パケット６００のデータ長欄６０７に記載されたデータ長を書き込み、送信中断済みフラグ７０５に非中断を示す“０”を書き込む。
【００４６】
ケースＡ２においては、パケット処理中フラグ７０１の値が処理中を示す“１”、送信中断済みフラグ７０５の値が非中断を示す“０”、残受信バッファ長が十分である場合を示す。ケースＡ２の場合、前記コンテキストの処理は、“更新”を表し、前記パケットの処理は、“データ処理”を表す。
ケースＡ２において、コンテキスト処理部３４１は、受信命令処理フラグ７０１、送信命令番号欄７０２は更新せず、最終受信パケット番号欄７０３に、前記パケット６００のパケット番号欄６０６に記載されたパケット番号を書き込み、送信中断済みフラグ７０５に非中断を示す“０”を書き込む。
【００４７】
ケースＡ１、Ａ２において、前記パケット６００のデータ長６０７が“０”でなかった場合、受信命令５１０ないの受信バッファ開始アドレス５１４にコンテキスト７００内の処理中受信命令の受信済みデータ長７０４を加算したアドレスをパケット受信部３４２に転送し、前記パケット内のデータ６０８を主記憶装置２００へライトすることを指示し、前記パケット６００のデータ長６０７が“０”であった場合、送信命令の最終データであり、送信部３２０へ受付パケットを転送し、コンテキスト７００内の受信命令処理中フラグ７０１を“０”にクリアする。
【００４８】
ケースＲ１においては、パケット処理中フラグ７０１の値が非処理中を示す“０”、前記パケットに対応する受信命令５１０が存在し、残受信バッファ長が不十分（受信バッファフル）である場合を示す。ケースＲ１の場合、前記コンテキストの処理は、“作成し、中断”を表し、前記パケットの処理は、“遠隔命令作成”を表す。
ケースＲ１において、コンテキスト処理部３４１は、前記受信ＦＩＦＯ２１２から先頭の受信命令５１０を取り出し、コンテキスト７００内の処置中受信命令７１０に登録し、前記受信命令処理フラグ７０１に処理中を示す“１”を書き込み、送信命令番号欄７０２に、前記パケット６００の送信命令番号欄６０５に記載された送信命令番号を書き込み、最終受信パケット番号欄７０３にパケット未受信であることを示す“０”を書き込み、処理中受信命令の受信済みデータ長欄７０４に“０”を書き込み、送信中断済みフラグ７０５に中断済みである“１”を書き込み、送り元計算機の送信部３２０に受信を中断したことを通知するために、自計算機の送信部３２０へ中断要求パケットを転送する。
【００４９】
ケースＲ２においては、パケット処理中フラグ７０１の値が非処理中を示す“０”である場合を示す。ケースＲ２の場合、前記コンテキストの処理は、“作成し、中断”を表し、前記パケットの処理は、“遠隔命令作成”を表す。
ケースＲ２において、コンテキスト処理部３４１は、受信命令処理フラグ７０１に処理中を示す“１”を書き込み、送信命令番号欄７０２に、前記パケット６００の送信命令番号欄６０５に記載された送信命令番号を書き込み、最終受信パケット番号欄７０３にパケット未受信であることを示す“０”を書き込み、処理中受信命令の受信済みデータ長欄７０４に“０”を書き込み、送信中断済みフラグ７０５に中断済みである“１”を書き込み、送り元計算機の送信部３２０に受信を中断したことを通知するために、自計算機の送信部３２０へ中断要求パケットを転送する。
【００５０】
ケースＲ３においては、パケット処理中フラグ７０１の値が処理中を示す“１”、送信中断済みフラグ７０５の値が非中断を示す“０”、残受信バッファ長が不十分（受信バッファフル）である場合を示す。ケースＲ３の場合、前記コンテキストの処理は、“中断”を表し、前記パケットの処理は、“遠隔命令作成”を表す。
ケースＲ３において、コンテキスト処理部３４１は、受信命令処理フラグ７０１と、送信命令番号欄７０２と、最終受信パケット番号欄７０３は更新せず、送信中断済みフラグ７０５に中断済みである“１”を書き込み、送り元計算機の送信部３２０に受信を中断したことを通知するために、自計算機の送信部３２０へ中断要求パケットを転送する。
【００５１】
ケースＲ１、Ｒ２、Ｒ３において、コンテキスト処理部３４１は、遠隔命令（後述）を作成し、前記パケットの接続番号６０４用の遠隔命令ＦＩＦＯに登録する。
【００５２】
ケースＤ１においては、パケット処理中フラグ７０１の値が処理中を示す“１”、送信中断済みフラグ７０５の値が中断を示す“１”、である場合を示す。ケースＤ１の場合、前記コンテキストの処理は、“更新なし”を表し、前記パケットの処理は、“破棄”を表す。
ケースＤ１において、コンテキスト処理部３４１は、前記パケット６００を破棄する。
【００５３】
次に、宛先計算機のコンテキスト処理部３４１がデータ送信パケット６００に応じて、前記パケット６００の送り元計算機に返信する返信パケットである、中断要求パケット、受付パケットを説明する。
【００５４】
図９（ａ）は、本発明の通信システムにおける中断要求パケット６１０を示す。
中断要求パケット６１０は、中断要求タイプ欄６１１と、宛先計算機番号欄６１２と、送り元計算機番号欄６１３と、接続番号欄６１４と、送信命令番号欄６１５とから構成される。
コンテキスト処理部３４１が中断要求パケット６１０を生成するとき、中断要求タイプ欄６１１に、送信中断を要求することを示す中断要求タイプを書き込み、宛先計算機番号欄６１２に、データ送信パケット６００の宛先計算機番号欄６０２に記載された宛先計算機番号を書き込み、送り元計算機番号欄６１３に、データ送信パケット６００の送り元計算機番号欄６０３に記載された送り元計算機番号を書き込み、接続番号欄６１４に、データ送信パケット６００の接続番号欄６０４に記載された接続番号を書き込み、送信命令番号欄６１５に、データ送信パケット６００の送信命令番号欄６０５に記載された送信命令番号を書き込む。
【００５５】
また、前記中断要求パケットのもう一つの実施例として、前記中断要求パケット６１０に受信済みデータ長を追加し、後述する転送再開時に受信を中断したデータから再度送信する場合の中断要求パケットの生成方法を以下に示す。
前記中断要求パケット６１０は、前記中断要求タイプ欄６１１と、前記宛先計算機番号欄６１２と、前記送り元計算機番号欄６１３と、前記接続番号欄６１４と、前記送信命令番号欄６１５と、受信データ長欄６１６から構成される。コンテキスト処理部３４１は、前記コンテキスト７００の処理中受信命令のバッファ長７１３から処理中受信命令の受信済みデータ長７０４を引いた値である残受信バッファ長を計算し、交換網４００から受信したパケットのデータ長６０７が前記残受信バッファ長より大きい場合に受信バッファフルを検出し、中断要求パケット６１０の受信データ長欄６１６に、データ送信パケット６００のデータ長欄６０７に記載されたデータ長を書き込み、受信バッファ２２２−Ｊに書き込まれたデータのデータ長を中断要求パケット６１０によって通知する。
【００５６】
図１０は、本発明の通信システムにおける受付パケット６２０を示す。
コンテキスト処理部３４１は、データ送信パケット６００を受信したパケット受信部３４２からパケット・ヘッダを受け取ったときに、主記憶装置２００のコンテキストテーブル２０１−１〜２０１−Ｎから、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号“Ｊ”に対応するコンテキスト７００を取り出す。
前記コンテキスト７００の受信命令処理中フラグ欄７０１には受信命令処理中フラグ、送信中断済みフラグ欄７０５には送信中断済みフラグの両方がセットされておらず（“０”であり）、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号“Ｊ”に対応する受信命令ＦＩＦＯ２１２−Ｊには受信命令５１０が登録されている場合、コンテキスト処理部３４１は、データ送信パケット６００に対する返信パケットとして受付パケット６２０を、送信部３２０を経由して送り元計算機に送信すると共に、受信命令書込指示をパケット受信部３４２に送信する。パケット受信部３４２は、受信命令書込指示に応じて、データ送信パケット６００のデータ欄６０８に記載されたデータ（受信データ）を受信バッファ２２２−Ｊに書き込む。
【００５７】
受付パケット６２０は、受付タイプ欄６２１と、宛先計算機番号欄６２１と、送り元計算機番号欄６２３と、接続番号欄６２４と、送信命令番号欄６２５とを含む。
コンテキスト処理部３４１は、受付タイプ欄６２１に受付パケットであることを示す受付タイプを書き込み、宛先計算機番号欄６２１にデータ送信パケット６００の宛先計算機番号欄６０２に記載された宛先計算機番号を書き込み、送り元計算機番号欄６２３には、データ送信パケット６００の送り元計算機番号欄６０３に記載された送り元計算機番号を書き込み、接続番号欄６２４には、データ送信パケット６００の接続番号欄６０４に記載された接続番号を書き込み、送信命令番号欄６２５には、データ送信パケット６００の送信命令番号欄６０５に記載された送信命令番号を書き込み、受付パケット６２０を生成する。
【００５８】
受信命令５１０をコンテキスト処理部３４１に発行するときの受信命令ＦＩＦＯ２１２−Ｊの管理について説明する。
演算装置１１０で動作中の受信プロセス１１１−Ｊが受信命令５１０をコンテキスト処理部３４１に発行する時、受信プロセス１１１−Ｊは、自身が使用している主記憶装置２００上の受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０を追加し、コンテキスト処理部３４１内の（レジスタ３４１’が保持する）受信命令ＦＩＦＯ２１２−Ｊのライト・ポインタに、追加した受信命令５１０の数だけ加算する。
コンテキスト処理部３４１は、受信命令ＦＩＦＯ２１２−Ｊのライト・ポインタと受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタとを比較する。コンテキスト処理部３４１は、比較の結果、差分があれば受信命令５１０が追加されたと判断し、主記憶装置２００のコンテキストテーブル２０１−１〜２０１−Ｎから、接続番号“Ｊ”に対応するコンテキスト７００を取り出す。
前記コンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“１”であり、送信中断済みフラグ欄７０５の送信中断済みフラグが“０”である場合、コンテキスト処理部３４１は、前記受信命令５１０に対応するデータ送信パケット６００を受け取るまで待つ。
一方、送信中断済みフラグ欄７０５の送信中断済みフラグが“１”である場合、コンテキスト処理部３４１は、接続番号“Ｊ”に対応する遠隔命令ＦＩＦＯ２１３−Ｊから遠隔命令（第１遠隔命令、第２遠隔命令）を取り出し、再開要求パケット（後述）を作成し、送信部３２０を経由して後述する再開要求パケットを交換網４００に送信する。
【００５９】
図１１（ａ）は、本発明の通信システムにおける遠隔命令６４０を示す。コンテキスト処理部３４１がパケット受信部３４２から受け取ったパケット・ヘッダに基づいて遠隔命令６４０を生成し、主記憶装置２００上の遠隔命令ＦＩＦＯ２１３に登録する。
遠隔命令６４０は、遠隔命令タイプ欄６４１と、宛先計算機番号欄６４２と、送り元計算機番号欄６４３と、接続番号欄６４４と、送信命令番号欄６４５とから構成される。
コンテキスト処理部３４１が遠隔命令６４０を生成するとき、遠隔命令タイプ欄６４１に、遠隔命令であることを示す遠隔命令タイプを書き込み、宛先計算機番号欄６４２に、データ送信パケット６００の宛先計算機番号欄６０２に記載された宛先計算機番号を書き込み、送り元計算機番号欄６４３に、データ送信パケット６００の送り元計算機番号欄６０３に記載された送り元計算機番号を書き込み、接続番号欄６４４に、データ送信パケット６００の接続番号欄６０４に記載された接続番号を書き込み、送信命令番号欄６４５に、データ送信パケット６００の送信命令番号欄６０５に記載された送信命令番号を書き込む。
【００６０】
コンテキスト処理部３４１が遠隔命令６４０を生成するときに、受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０が登録されているが、受信バッファ２２２−Ｊのフルを検出した場合、コンテキスト処理部３４１は、図１１（ｂ）に示されるように、遠隔命令６４０に受信済みデータ長欄６４６を追加する。コンテキスト処理部３４１は、受信済みデータ長欄６４６に、データ送信パケット６００のデータ長欄６０７に記載されたデータ長を受信済みデータ長として書き込む。
【００６１】
上述したように、通信装置３００は、接続番号毎に主記憶装置２００上の遠隔命令ＦＩＦＯ２１３−Ｊ（保持バッファ）を使用する（図４参照）。
通信装置３００のコンテキスト処理部３４１内のレジスタ３４１’は、接続番号毎に、主記憶装置２００上の遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎの先頭アドレスへのポインタと、遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのリード・ポインタと、遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのライト・ポインタとを保持する。遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのライト・ポインタは、コンテキスト処理部３４１が自身に命令する遠隔命令６４０の数（命令数；０、１、２、…）を表す。遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのライト・ポインタは、コンテキスト処理部３４１が実行した遠隔命令６４０の数（命令数；０、１、２、…）を表す。
通信装置用のドライバソフトウェア１１３は、初期設定時に、主記憶装置２００上の遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎの先頭アドレスへのポインタとして初期値をコンテキスト処理部３４１内のレジスタ３４１’に予めに設定し、遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎ内の最大命令数を前記レジスタ３４１’に予めに設定する。通信装置用のドライバソフトウェア１１３は、前記初期設定時に、遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのリード・ポインタと、遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのライト・ポインタとを“０”にする。遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのリード・ポインタ、ライト・ポインタは、最大命令数を越えた場合、“０”になる。
【００６２】
コンテキスト処理部３４１は、遠隔命令６４０を主記憶装置２００（遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎ）に１個追加（登録）する毎に、コンテキスト処理部３４１内の遠隔命令ＦＩＦＯ２１３−１〜２１３−Ｎのライト・ポインタを１だけ加算する。
コンテキスト処理部３４１は、遠隔命令ＦＩＦＯ２１３−Ｊ（１、２、…、Ｎ）のライト・ポインタと受信命令ＦＩＦＯ２１２−Ｊのリード・ポインタとを比較する。コンテキスト処理部３４１は、比較の結果、差分があれば遠隔命令６４０が追加されたと判断し、遠隔命令ＦＩＦＯ２１３−Ｊの先頭アドレスから遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポイントの数だけ進んだ位置の遠隔命令６４０の次の遠隔命令６４０を主記憶装置２００上の遠隔命令ＦＩＦＯ２１３−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出して、前記遠隔命令６４０を実行する。
コンテキスト処理部３４１は、１つの遠隔命令６４０を実行する毎に、コンテキスト処理部２４１内の遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポインタを１だけ加算する。コンテキスト処理部３４１は、遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポインタを１だけ加算した後も遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポインタと遠隔命令ＦＩＦＯ２１３−Ｊのライト・ポインタとの値が異なっていた場合（差分がある場合）、遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポイントにより、次の遠隔命令６４０を主記憶装置２００上の遠隔命令ＦＩＦＯ２１３−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出して、前記遠隔命令６４０を実行する。前記処理は、遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポインタと遠隔命令ＦＩＦＯ２１３−Ｊのライト・ポインタとの差分がなくなるまで実行される。
【００６３】
図１２（ａ）は、本発明の通信システムにおける再開要求パケット６３０を示す。演算装置１１０上で動作している受信プロセス１１１−Ｊは、受信命令５１０をコンテキスト処理部３４１に発行し、コンテキスト処理部３４１は、主記憶装置２００のコンテキストテーブル２０１−１〜２０１−Ｎから接続番号“Ｊ”に対応するコンテキスト７００を取り出す。コンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグが“１”である場合、コンテキスト処理部３４１は、遠隔命令ＦＩＦＯ２１３−Ｊから遠隔命令６４０を取り出し、遠隔命令６４０に基づいて再開要求パケット６３０を生成し、送信部３２０を経由して再開要求パケット６３０を交換網４００に送信する。
【００６４】
再開要求パケット６３０は、再開要求タイプ欄６３１と、宛先計算機番号６３２と、送り元計算機番号欄６３３と、接続番号欄６３４と、送信命令番号欄６３５とを含む。
コンテキスト処理部３４１は、再開要求パケット６３０を生成するとき、再開要求タイプ欄６３１に、再開要求を示す再開要求タイプを書き込み、宛先計算機番号６３２に、遠隔命令６４０の宛先計算機番号欄６４２に記載された宛先計算機番号を書き込み、送り元計算機番号欄６３３に、遠隔命令６４０の送り元計算機番号欄６４３に記載された送り元計算機番号を書き込み、接続番号欄６３４に、遠隔命令６４０の接続番号欄６４４に記載された接続番号を書き込み、送信命令番号欄６３５に、遠隔命令６４０の送信命令番号欄６４５に記載された送信命令番号を書き込む。
【００６５】
コンテキスト処理部３４１は、受信バッファ２２２−Ｊのフルによって送信（転送）の中断を実施しているときに前記転送を再開する場合（再開要求パケット６３０を送信する場合）、図１２（ｂ）に示されるように、再開要求パケット６３０に受信済みデータ長欄６３６を追加する。コンテキスト処理部３４１は、受信済みデータ長欄６３６に、遠隔命令６４０の受信済みデータ長欄６４６に記載された受信済みデータ長を書き込む。
【００６６】
次に、本発明の通信システムの動作として、パケット送信実行処理、パケット受信実行処理、受信命令実行処理について説明する。ここで、送り元計算機を電子計算機１００−１とし、宛先計算機を電子計算機１００−２とする。
【００６７】
図１３は、本発明の通信システムの動作であるパケット送信実行処理（ステップＳ１〜Ｓ１３）を示すフローチャートである。
電子計算機１００−１の演算装置１１０上の送信プロセス１１１−Ｊが、主記憶装置２００（送信命令ＦＩＦＯ２１１−Ｊ）に送信命令５００を書き込み（登録し）、電子計算機１００−１の送信部３２０の命令処理部３２２内の（レジスタ３２２’が保持する）送信命令ＦＩＦＯ２１１−Ｊのライト・ポインタに前記送信命令５００の数だけ加算したとき、電子計算機１００−１の送信部３２０は、パケット送信実行処理を行う。
【００６８】
まず、送信部３２０は、送信命令取り出し処理を行う（ステップＳ１）。
送信命令ＦＩＦＯ２１１−Ｊのライト・ポインタが更新されたことにより、送信命令ＦＩＦＯ２１１−Ｊのライト・ポインタと送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタとに差分が発生するため、命令処理部３２２は、送信命令ＦＩＦＯ２１１−Ｊの先頭アドレスから送信命令ＦＩＦＯ２１１−Ｊのリード・ポイントの数だけ進んだ位置の送信命令５００の次の送信命令５００を主記憶装置２００上の送信命令ＦＩＦＯ２１１−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出して、命令処理部３２２内の送信命令ＦＩＦＯ２１１−Ｊのリード・ポインタに送信命令５００を取り出した数だけ加算する。
【００６９】
次に、送信部３２０は、転送長・転送アドレス設定処理を行う（ステップＳ２）。
命令処理部３２２は、取り出した送信命令５００により、主記憶装置２００上の上記の転送長レジスタ２３１−Ｊに、送信命令５００の転送長欄５０５に記載された転送長を設定し、主記憶装置２００上の上記の転送アドレスレジスタ２３２−Ｊに、送信命令５００の送信バッファ開始アドレス欄５０４に記載された送信バッファ開始アドレスを設定し、送信命令５００に対応するＡＣＫフラグをクリアする。ＡＣＫフラグは、セットを示す“１”、又は、クリアを示す“０”で表され、命令処理部３２２のレジスタ３２２’に設定されている。
【００７０】
次に、送信部３２０は、送信データ取り出し処理を行う（ステップＳ３）。
命令処理部３２２は、主記憶装置２００上の転送アドレスレジスタ２３２−Ｊに設定された送信バッファ開始アドレスから、交換網４００上で最大の１パケットのデータ長を越えず、転送長レジスタ２３１−Ｊに設定された転送長を超えない最大のデータ長のデータを送信データとして送信バッファ２２１−Ｊから取り出して（読み出して）パケット送信部３２１に転送するように、メモリ制御部３１０に指示する。すなわち、主記憶装置２００から読み出されるデータ長は、Ｍｉｎ（１パケットの最大データ長、転送長レジスタ２３１−Ｊに設定された転送長）となる。ただし、Ｍｉｎ（ａ、ｂ）は、ａ＆ｌｔ；＝ｂの場合にａ、ａ＆ｇｔ；ｂの場合にｂの値となる関数である。例えば、転送長レジスタ２３１−Ｊに設定された転送長が１００バイト、１パケットの最大データ長が２５６バイトの場合、主記憶装置２００から取り出されるデータのデータ長はＭｉｎ（１００、２５６）バイト、すなわち１００バイトとなる。
【００７１】
次に、送信部３２０は、パケット生成処理を行う（ステップＳ４）。
パケット送信部３２１は、データ送信パケット６００を生成するために、データ送信パケット６００の各欄に必要事項を書き込む。パケット送信部３２１は、送信タイプを送信タイプ欄６０１に書き込み、宛先計算機（電子計算機１００−２）を識別する宛先計算機番号を宛先計算機番号欄６０２に書き込み、送り元計算機（電子計算機１００−１）を識別する送り元計算機番号を送り元計算機番号欄６０３に書き込む。更に、パケット送信部３２１は、宛先プロセス（宛先計算機の受信プロセス）を識別する接続番号を接続番号欄６０４に書き込み、特定の送信命令５００（データ送信パケット６００が今生成されたときの送信命令５００）を識別するための送信命令番号を送信命令番号欄６０５に書き込む。更に、パケット送信部３２１は、送信データが予め決められたパケット（データ送信パケット６００）の長さに分割されたときに、同一の送信命令５００（上記の特定の送信命令５００）で生成された前記データ送信パケット６００が前記送信命令５００の何番目のデータ送信パケット６００であるかを示すパケット番号をパケット番号欄６０６に書き込む。更に、パケット送信部３２１は、データ送信パケット６００に組み込まれた送信データの長さを示すデータ長をデータ長欄６０７に書き込み、送信バッファ２２１−Ｊから読み出された送信データをデータ欄６０８に書き込む。
【００７２】
次に、送信部３２０は、パケット送信処理を行う（ステップＳ５）。
パケット送信部３２１は、生成されたデータ送信パケット６００を交換網４００に送信する。このように、電子計算機１００−１（送り元計算機）は、電子計算機１００−２（宛先計算機）の受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０が登録されているか否かに関わらず、データ送信パケット６００を電子計算機１００−２に転送する。
このため、本発明の通信システムによれば、電子計算機１００−１（送り元計算機）は、電子計算機１００−２（宛先計算機）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット６００を転送することができる（データ転送を行うことができる）。
【００７３】
次に、送信部３２０は、転送長レジスタ、転送アドレスレジスタ更新処理を行う（ステップＳ６）。
命令処理部３２２は、転送長レジスタ２３１−Ｊに設定された転送長から、パケット送信部３２１によりデータ送信パケット６００が送信（転送）されたときのデータ長を減算する。同時に、命令処理部３２２は、転送アドレスレジスタ２３２−Ｊに設定された送信バッファ開始アドレスに、データ送信パケット６００が送信（転送）されたときのデータ長を加算する。
【００７４】
次に、送信部３２０は、中断要求確認処理を行う（ステップＳ７）。
受信部３４０のパケット受信部３４２で受信されたデータ送信パケット６００以外のパケットがコンテキスト処理部３４１を経由して命令処理部３２２に転送されたとき、命令処理部３２２は、パケット送信部３２１が送信（転送）したデータ送信パケット６００の送信命令番号欄５０５に記載された送信命令番号と一致する送信命令番号を含む中断要求パケット６１０を受信部３４０（パケット受信部３４２）が受信したかを確認する。
受信部３４０（パケット受信部３４２）が中断要求パケット６１０を受信していない場合（ステップＳ７−ＮＯ）、送信部３２０は、受付パケット受信（ステップＳ１０）を行う。
受信部３４０（パケット受信部３４２）が中断要求パケット６１０を受信した場合（ステップＳ７−ＹＥＳ）、命令処理部３２２は、電子計算機１００−２（宛先計算機）からの中断要求パケット６１０に応じて、データ送信パケット６００の転送を中断し、送信部３２０は、再開要求受信待ち処理（ステップＳ８）を行う。
このように、本発明の通信システムによれば、電子計算機１００−２（宛先計算機）が受け取れない無駄なデータ転送を早期に抑止し、交換網４００を流れる無駄なデータを低減することができる。
【００７５】
再開要求受信待ち処理（ステップＳ８）を説明する。
命令処理部３２２は、パケット送信部３２１が送信（転送）したデータ送信パケット６００の送信命令番号欄５０５に記載された送信命令番号と一致する送信命令番号を含む再開要求パケット６３０を受信部３４０（パケット受信部３４２）が受信するまで待つ。
【００７６】
再開要求パケット６３０を受信した場合（ステップＳ８−ＹＥＳ）、送信部３２０は、転送長・転送アドレス再設定処理（ステップＳ９）を行う。前記転送長・転送アドレス再設定処理には、第１転送長・転送アドレス再設定処理と、第２転送長・転送アドレス再設定処理とが含まれる。第１転送長・転送アドレス再設定処理とは、再開要求パケット６３０による再開要求時に送信データの全てを送信（転送）する処理である。第２転送長・転送アドレス再設定処理とは、再開要求パケット６３０による再開要求時に、送信データのうち、宛先計算機（電子計算機１００−２）が既に受信したデータ以外のデータ（残りデータ）を送信（転送）する処理である。
【００７７】
第１転送長・転送アドレス再設定処理では、命令処理部３２２は、先に取り出した送信命令５００により、主記憶装置２００上の転送長レジスタ２３１−Ｊに、送信命令５００の転送長欄５０５に記載された転送長を設定し、主記憶装置２００上の転送アドレスレジスタ２３２−Ｊに、送信命令５００の送信バッファ開始アドレス欄５０４に記載された送信バッファ開始アドレスを設定する。
【００７８】
第２転送長・転送アドレス再設定処理では、命令処理部３２２は、第１転送長・転送アドレス再設定処理を実行した後、転送長レジスタ２３１−Ｊに設定された転送長から、再開要求パケット６３０の受信済みデータ長欄６３６に記載された受信済みデータ長を減算する。同時に、命令処理部３２２は、転送アドレスレジスタ２３２−Ｊに設定された送信バッファ開始アドレスに、受信済みデータ長を加算する。
【００７９】
送信部３２０は、転送長・転送アドレス再設定処理（ステップＳ９）を行った後、再度、送信データ取り出し処理を行う（ステップＳ３）。
本発明の通信システムによれば、電子計算機１００−１（送り元計算機）は、電子計算機１００−２（宛先計算機）が受け取れないデータのみを再度転送すればよいため、電子計算機１００−２（宛先計算機）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット６００を転送することができる（データ転送を行うことができる）。
本発明の通信システムによれば、電子計算機１００−１（送り元計算機）は、再開要求パケット６３０に含まれる受信済みデータ長を参照して、先にデータ送信パケット６００にて転送したデータのデータ長のうちの、受信済みデータ長以外のデータ長を有するデータ（上記の残りデータ）を電子計算機１００−２（宛先計算機）に転送すればよい。このため、本発明の通信システムによれば、前記残りデータを電子計算機１００−１（送り元計算機）から電子計算機１００−２（宛先計算機）に転送するときの転送時間は、例えば、先に転送したデータを電子計算機１００−１（送り元計算機）から電子計算機１００−２（宛先計算機）に始めから転送した場合の転送時間よりも短くなる。
【００８０】
受付パケット受信処理（ステップＳ１０）を説明する。
命令処理部３２２は、パケット送信部３２１が送信（転送）したデータ送信パケット６００の送信命令番号欄５０５に記載された送信命令番号と一致する送信命令番号を含む受付パケット６２０を受信部３４０（パケット受信部３４２）が受信したかを確認する。
受信部３４０（パケット受信部３４２）が受付パケット６２０を受信した場合（ステップＳ１０−ＹＥＳ）、送信部３２０は、ＡＣＫフラグ・セット処理（ステップＳ１１）を行う。
受信部３４０（パケット受信部３４２）が受付パケット６２０を受信していない場合（ステップＳ１０−ＮＯ）、送信部３２０は、残転送長確認処理（ステップＳ１２）を行う。
【００８１】
ＡＣＫフラグ・セット処理（ステップＳ１１）を説明する。
命令処理部３２２は、受信部３４０からの受付パケット６２０により、送信命令５００に対応するＡＣＫフラグ“１”をセットする。前記セットされたＡＣＫフラグは、送り元計算機（電子計算機１００−１）からの送信命令５００（データ送信パケット６００）に対して、宛先計算機（電子計算機１００−２）から受付パケット６２０を受信したことを示す。
【００８２】
残転送長確認処理（ステップＳ１２）を説明する。
命令処理部３２２は、主記憶装置２００上の転送長レジスタ２３１−Ｊに設定された転送長が０以下であるか確認する。
転送長レジスタ２３１−Ｊに設定された転送長が０以下であれば、送信部３２０は、ＡＣＫフラグ確認処理（ステップＳ１３）を行う。
転送長レジスタ２３１−Ｊに設定された転送長が０より大きければ、送信部３２０は、再度、送信データ取り出し処理を行う（ステップＳ３）を行う。
【００８３】
ＡＣＫフラグ確認処理（ステップＳ１３）を説明する。
命令処理部３２２は、送信命令５００に対応するＡＣＫフラグがセットされているか（“１”であるか）確認する。
送信命令５００に対応するＡＣＫフラグがセットされている場合、送信部３２０は、パケット送信実行処理を完了する。
送信命令５００に対応するＡＣＫフラグがクリアである場合、送信部３２０は、再度、中断要求確認処理を行う（ステップＳ７）を行う。
【００８４】
図１４は、本発明の通信システムの動作であるパケット受信実行処理（ステップＳ２１〜Ｓ３３）を示すフローチャートである。
電子計算機１００−２の受信部３４０のパケット受信部３４２が、交換網４００を介して電子計算機１００−１（送り元計算機）から送信されたパケットを受信したとき、電子計算機１００−２（宛先計算機）の受信部３４０は、パケット受信実行処理を行う。
【００８５】
まず、受信部３４０は、パケット判別処理を行う（ステップＳ２１）。
受信部３４０のパケット受信部３４２は、受信した受信パケットがデータ送信パケット６００であるか判別する。パケット受信部３４２は、受信パケットがデータ送信パケット６００である場合、受信パケット（データ送信パケット６００）の送信タイプ欄６０１に記載された送信タイプにより確認する。
受信パケットがデータ送信パケット６００ではない場合、受信部３４０は、送信部通知処理（ステップＳ２２）を実行する。
受信パケットがデータ送信パケット６００である場合、受信部３４０は、コンテキストロード処理（ステップＳ２３）を実行する。
【００８６】
送信部通知処理（ステップＳ２２）を説明する。
パケット受信部３４２は、受信パケットがデータ送信パケット６００ではないため、コンテキスト処理部３４１を経由して、送信部３２０の命令処理部３２２に前記パケットを転送する。受信部３４０は、送信部通知処理を行った後、パケット受信実行処理を完了する。
【００８７】
コンテキストロード処理（ステップＳ２３）を説明する。
受信パケット（データ送信パケット６００）である場合、パケット受信部３４２は、前記受信パケット（受信パケット６００とする）のパケット・ヘッダをコンテキスト処理部３４１に転送する。コンテキスト処理部３４１は、主記憶装置２００のコンテキストテーブル２０１−１〜２０１−Ｎから、パケット・ヘッダの接続番号欄６０４に記載された接続番号“Ｊ”に対応するコンテキスト７００を取り出す（ロードする）。
【００８８】
次に、受信部３４０は、受信命令確認処理（ステップＳ２４）を行う。
【００８９】
ケースＡ２の場合、即ち、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“１”であり、送信中断済みフラグ欄７０５の送信中断済みフラグが“０”であり、残受信バッファ長が十分である場合、コンテキスト処理部３４１は、前記受信命令５１０に対応する受信パケット（データ送信パケット６００）を受け取るまで待つ。前記受信パケット６００を受け取ったとき（ステップＳ２４−ＮＯ）、コンテキスト処理部３４１は、第１パケット確認処理（ステップＳ２５）を行う。
【００９０】
ケースＡ１の場合、即ち、前記ロードされたコンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグが“０”であり、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号“Ｊ”に対応する受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０が登録され、残受信バッファ長が十分である場合（ステップＳ２４−ＮＯ）、コンテキスト処理部３４１は、第１パケット確認処理（ステップＳ２５）を行う。
【００９１】
ケースＲ２の場合、即ち、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“０”であり、前記コンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグが“０”であり、パケット・ヘッダ内の接続番号欄６０４に記載された値“Ｊ”に対応する受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０が登録されていない場合（ステップＳ２４−ＹＥＳ）、コンテキスト処理部３４１は、遠隔命令ストア処理（ステップＳ３２）を行う。
【００９２】
ケースＲ１の場合、即ち、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“０”であり、前記コンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグが“０”であり、パケット・ヘッダ内の接続番号欄６０４に記載された値“Ｊ”に対応する受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０が登録されているが、残受信バッファ長が不十分（受信バッファフル）である場合（ステップＳ２４−ＹＥＳ）、コンテキスト処理部３４１は、遠隔命令ストア処理（ステップＳ３２）を行う。
【００９３】
ケースＲ３の場合、即ち、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“１”であり、前記コンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグが“０”であり、残受信バッファ長が不十分（受信バッファフル）である場合（ステップＳ２４−ＹＥＳ）、コンテキスト処理部３４１は、遠隔命令ストア処理（ステップＳ３２）を行う。
【００９４】
なお、ケースＤ１の場合、即ち、前記ロードされたコンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグが“１”であり、送信中断済みフラグ欄７０５の送信中断済みフラグが“１”である場合、受信部３４０のコンテキスト処理部３４１は、前記受信パケット６００を破棄する。
【００９５】
第１パケット確認処理（ステップＳ２５）を説明する。
【００９６】
前記ケースＡ２では、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“１”であるため、同一の送信命令５００（上述の特定の送信命令５００）で生成された受信パケット６００のうちの１番目の受信パケット（第１パケット）ではない（ステップＳ２５−ＮＯ）。すなわち、パケット・ヘッダ内のパケット番号欄６０６に記載されたパケット番号が最初のパケット番号ではなく、受信部３４０は、後続の受信パケット６００を待っている状態であり、受信部３４０は、受信データストア処理（ステップＳ２８）を行う。
【００９７】
前記ケースＡ１では、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグが“０”であるため、同一の送信命令５００（上述の特定の送信命令５００）で生成された受信パケット６００のうちの１番目の受信パケット（第１パケット）である（ステップＳ２５−ＹＥＳ）。すなわち、パケット・ヘッダ内のパケット番号欄６０６に記載されたパケット番号が最初のパケット番号を表し、受信部３４０は、受信命令取り出し処理（ステップＳ２６）を行う。
【００９８】
受信命令取り出し処理（ステップＳ２６）を説明する。
受信部３４０のコンテキスト処理部３４１は、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号“Ｊ”に一致する受信命令ＦＩＦＯ２１２−Ｊを参照し、前記受信命令ＦＩＦＯ２１２−Ｊに登録された受信命令５１０を取り出す。コンテキスト処理部３４１は、前記受信命令５１０の受信タイプ欄５１１、受信バッファ開始アドレス欄５１４、受信バッファ長欄５１５に、前記ロードされたコンテキスト７００の処理中受信命令欄７１０の受信タイプ欄７１１、受信バッファ開始アドレス欄７１２、受信バッファ長欄７１３に記載された内容を書き込む（更新する）。コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１に受信命令処理中フラグ“１”をセットする。コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の送信命令番号欄７０２に、パケット・ヘッダ内の送信命令番号欄６０５に記載された送信命令番号を書き込む（更新する）。コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の最終受信パケット番号欄７０３に、パケット・ヘッダ内のパケット番号欄６０６に記載されたパケット番号を書き込む（更新する）。コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の処理中受信命令の受信済みデータ長欄７０４に“０”を書き込む（設定する）。前記ステップでは、前記ロードされたコンテキスト７００の送信中断済みフラグ欄７０５には、“０”が書き込まれているため（送信中断済みフラグがセットされていないため）、更新しない。
【００９９】
次に、受信部３４０は、受付パケット送信処理（ステップＳ２７）を行う。
受信部３４０のコンテキスト処理部３４１は、受信パケット６００に対する返信パケットとして受付パケット６２０を生成したとき、受付タイプを受付タイプ欄６２１に書き込み、パケット・ヘッダ内の宛先計算機番号欄６０２に記載された宛先計算機番号を宛先計算機番号欄６２１に書き込み、パケット・ヘッダ内の送り元計算機番号欄６０３に記載された送り元計算機番号を送り元計算機番号欄６２３に書き込み、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号を接続番号欄６２４に書き込み、パケット・ヘッダ内の送信命令番号欄６０５に記載された送信命令番号を送信命令番号欄６２５に書き込む。コンテキスト処理部３４１は、前記受付パケット６２０を、送信部３２０を経由して送り元計算機（電子計算機１００−１）に送信する。その後、受信部３４０は、受信データストア処理（ステップＳ２８）を行う。
【０１００】
受信データストア処理（ステップＳ２８）を説明する。
コンテキスト処理部３４１は、受信命令書込指示をパケット受信部３４２に送信する。パケット受信部３４２は、受信命令書込指示に応じて、受信パケット６００のデータ欄６０８に記載されたデータ（受信データ）を受信バッファ２２２−Ｊにストアする（書き込む／登録する）。
コンテキスト７００の処理中受信命令のバッファ長欄７１３に記載されたバッファ長をＢＬＥＮとし、コンテキスト７００の処理中受信命令の受信済みデータ長欄７０４に記載されたデータ長をＲＬＥＮとし、受信パケット６００のデータ長欄６０７に記載されたデータ長をＰＬＥＮとした場合、主記憶装置２００上の受信バッファ２２２−Ｊに書き込むデータサイズＷＬＥＮは、数１により決定される。
【０１０１】
【数１】
2005204089.tif 000003
【０１０２】
パケット受信部３４２は、受信パケット６００のデータ欄６０８に記載されたデータ（受信データ）を、コンテキスト７００の処理中受信命令の受信バッファ開始アドレス７１２にＲＬＥＮを加算したアドレスにＷＬＥＮの指定する長さだけ書き込む。
【０１０３】
次に、受信部３４０は、最終パケット確認処理（ステップＳ２９）を行う。
受信部３４０のコンテキスト処理部３４１は、受信パケット６００のデータ長欄６０７に記載されたデータ長が０であるか確認する。
前記データ長が０である場合（ステップＳ２９−ＹＥＳ）、前記受信パケット（データ送信パケット６００）は、同一の送信命令５００（上述の特定の送信命令５００）で生成された受信パケット６００のうちの最後の受信パケット（最終パケット）であるため、受信部３４０は、受信命令完了処理（ステップＳ３０）を行う。
前記データ長が０ではない場合（ステップＳ２９−ＮＯ）、前記受信パケット（データ送信パケット６００）は、同一の送信命令５００（上述の特定の送信命令５００）で生成された受信パケット６００のうちの最後の受信パケット（最終パケット）ではないため、受信部３４０は、コンテキスト書き戻し（ステップＳ３１）を行う。
【０１０４】
受信命令完了処理（ステップＳ３０）を説明する。
コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の受信命令処理中フラグ欄７０１の受信命令処理中フラグをクリアにする。すなわち、受信命令処理中フラグ欄７０１に“０”を書き込む（設定する）。
【０１０５】
コンテキスト書き戻し（ステップＳ３１）を説明する。
コンテキスト処理部３４１は、主記憶装置２００のコンテキストテーブル２０１−Ｊに、前記ロードされたコンテキスト７００を書き戻し、受信部３４０は、パケット受信実行処理を完了する。
【０１０６】
本発明の通信システムによれば、電子計算機１００−１（送り元計算機）が事前制御通信を行わずにデータ転送を行うため、データ転送の開始から完了までのレイテンシ（実行時間）は、従来の技術で説明されたような事前制御通信を開始してからデータ転送の完了までのレイテンシ（実行時間）よりも低減する。
【０１０７】
遠隔命令ストア処理（ステップＳ３２）を説明する。
前記ケースＲ１、Ｒ２、Ｒ３において、コンテキスト処理部３４１は、遠隔命令６４０を生成するとき、遠隔命令タイプを遠隔命令タイプ欄６４１に書き込み、パケット・ヘッダ内の宛先計算機番号欄６０２に記載された宛先計算機番号を宛先計算機番号欄６４２に書き込み、パケット・ヘッダ内の送り元計算機番号欄６０３に記載された送り元計算機番号を送り元計算機番号欄６４３に書き込み、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号を接続番号欄６４４に書き込み、パケット・ヘッダ内の送信命令番号欄６０５に記載された送信命令番号を送信命令番号欄６４５に書き込む。
受信命令ＦＩＦＯ２１２−Ｊに受信命令５１０が登録されているが、受信バッファ２２２−Ｊのフルを検出した場合、コンテキスト処理部３４１は、パケット・ヘッダ内のデータ長欄６０７に記載されたデータ長を受信済みデータ長として受信済みデータ長欄６４６に書き込む。
【０１０８】
次に、受信部３４０は、中断要求パケット送信処理（ステップＳ３３）を行う。
前記ケースＲ１、Ｒ２、Ｒ３において、コンテキスト処理部３４１は、受信パケット６００に対する返信パケットとして中断要求パケット６１０を生成するとき、中断要求タイプを中断要求タイプ欄６１１に書き込み、パケット・ヘッダ内の宛先計算機番号欄６０２に記載された宛先計算機番号を宛先計算機番号欄６１２に書き込み、パケット・ヘッダ内の送り元計算機番号欄６０３に記載された送り元計算機番号を送り元計算機番号欄６１３に書き込み、パケット・ヘッダ内の接続番号欄６０４に記載された接続番号を接続番号欄６１４に書き込み、パケット・ヘッダ内の送信命令番号欄６０５に記載された送信命令番号を送信命令番号欄６１５に書き込む。
【０１０９】
前記ケースＲ１において、コンテキスト処理部３４１は、前記中断要求パケット６１０を、送信部３２０を経由して送り元計算機（電子計算機１００−１）に送信すると同時に、受信ＦＩＦＯ２１２から先頭の受信命令５１０を取り出し、コンテキスト７００の処置中受信命令欄７１０に登録し、受信命令処理フラグ欄７０１に受信命令処理フラグ“１”をセットし、送信命令番号欄７０２に、パケット・ヘッダ内の送信命令番号欄６０５に記載された送信命令番号を書き込み、最終受信パケット番号欄７０３にパケット未受信であることを示す“０”を書き込み、処理中受信命令の受信済みデータ長欄７０４に“０”を書き込み、送信中断済みフラグ欄７０５に送信中断済みフラグ“１”をセットし、パケット受信実行処理を完了する。
【０１１０】
前記ケースＲ２において、コンテキスト処理部３４１は、前記中断要求パケット６１０を前記送り元計算機（電子計算機１００−１）に送信すると同時に、受信命令処理フラグ欄７０１に受信命令処理フラグ“１”をセットし、送信命令番号欄７０２に、パケット・ヘッダ内の送信命令番号欄６０５に記載された送信命令番号を書き込み、最終受信パケット番号欄７０３にパケット未受信であることを示す“０”を書き込み、処理中受信命令の受信済みデータ長欄７０４に“０”を書き込み、送信中断済みフラグ欄７０５に送信中断済みフラグ“１”をセットし、パケット受信実行処理を完了する。
【０１１１】
前記ケースＲ３において、コンテキスト処理部３４１は、前記中断要求パケット６１０を前記送り元計算機（電子計算機１００−１）に送信すると同時に、受信命令処理フラグ欄７０１と送信命令番号欄７０２と最終受信パケット番号欄７０３とを更新せずに、送信中断済みフラグ欄７０５に送信中断済みフラグ“１”をセットし、パケット受信実行処理を完了する。
【０１１２】
本発明の通信システムによれば、電子計算機１００−２（宛先計算機）は、データ送信パケット６００の転送を中断するための中断要求パケット６１０を送信するため、電子計算機１００−２（宛先計算機）が受け取れない無駄なデータ転送を早期に抑止し、交換網４００を流れる無駄なデータを低減することができる。
【０１１３】
図１５は、本発明の通信システムの動作である受信命令実行処理（ステップＳ４１〜Ｓ４５）を示すフローチャートである。演算装置１１０上の受信プロセス１１１−Ｊが、主記憶装置２００（受信命令ＦＩＦＯ２１２−Ｊ）に受信命令５１０を書き込み（登録し）、コンテキスト処理部３４１内の（レジスタ３４１’が保持する）受信命令ＦＩＦＯ２１２−Ｊのライト・ポインタに前記送信命令５００の数だけ加算したとき、受信命令実行処理が受信部３４０（コンテキスト処理部３４１）により行われる。
【０１１４】
まず、コンテキスト処理部３４１は、コンテキストロード処理を行う（ステップＳ４１）。
コンテキスト処理部３４１は、受信命令ＦＩＦＯ２１２−Ｊに登録された受信命令５１０により、コンテキストテーブル２０１−１〜２０１−Ｎを参照して、コンテキスト７００−Ｊを取り出す（ロードする）。
【０１１５】
次に、コンテキスト処理部３４１は、中断命令確認処理を行う（ステップＳ４２）。
コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の送信中断済みフラグ欄７０５に送信中断済みフラグ“１”がセットされているか確認する。
送信中断済みフラグ“１”がセットされていた場合、コンテキスト処理部３４１は、遠隔命令取り出し処理（ステップＳ４３）を行う。
送信中断済みフラグがセットされていなかった（“０”であった）場合、コンテキスト処理部３４１は、再開要求処理（ステップＳ４５）を行う。
【０１１６】
遠隔命令取り出し処理（ステップＳ４３）を説明する。
遠隔命令ＦＩＦＯ２１３−Ｊのライト・ポインタが更新されたことにより、遠隔命令ＦＩＦＯ２１３−Ｊのライト・ポインタと遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポインタとに差分が発生するため、コンテキスト処理部３４１は、遠隔命令ＦＩＦＯ２１３−Ｊの先頭アドレスから遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポイントの数だけ進んだ位置の遠隔命令６４０の次の遠隔命令６４０を主記憶装置２００上の遠隔命令ＦＩＦＯ２１３−Ｊから制御装置１２０、メモリ制御部３１０を経由して取り出して、コンテキスト処理部３４１内の遠隔命令ＦＩＦＯ２１３−Ｊのリード・ポインタに遠隔命令６４０を取り出した数だけ加算する。
【０１１７】
次に、コンテキスト処理部３４１は、コンテキスト書き出し処理を行う（ステップＳ４４）。
コンテキスト処理部３４１は、前記ロードされたコンテキスト７００の送信中断済みフラグ欄７０５の送信中断済みフラグをクリアにする。すなわち、送信中断済みフラグ欄７０５に“０”を書き込む（設定する）。コンテキスト処理部３４１は、主記憶装置２００のコンテキストテーブル２０１−Ｊに、前記ロードされたコンテキスト７００を書き戻す。
【０１１８】
再開要求処理（ステップＳ４５）を説明する。
コンテキスト処理部３４１は、取り出した遠隔命令６４０により、再開要求パケット６３０を生成したとき、再開要求タイプを再開要求タイプ欄６３１に書き込み、遠隔命令６４０の宛先計算機番号欄６４２に記載された宛先計算機番号を宛先計算機番号６３２に書き込み、遠隔命令６４０の送り元計算機番号欄６４３に記載された送り元計算機番号を送り元計算機番号欄６３３に書き込み、遠隔命令６４０の接続番号欄６４４に記載された接続番号を接続番号欄６３４に書き込み、遠隔命令６４０の送信命令番号欄６４５に記載された送信命令番号を送信命令番号欄６３５に書き込む。
コンテキスト処理部３４１は、受信バッファ２２２−Ｊのフルによって送信（転送）の中断を実施しているときに前記転送を再開する場合、遠隔命令６４０の受信済みデータ長欄６４６に記載された受信済みデータ長を受信済みデータ長欄６３６に書き込む。
コンテキスト処理部３４１は、前記再開要求パケット６３０を、送信部３２０を経由して交換網４００に送信する。
コンテキスト処理部３４１は、再開要求処理を行った後、受信命令実行処理を完了する。
【０１１９】
このように、本発明の通信システムによれば、電子計算機１００−２（宛先計算機）は、中断されたデータ送信パケット６００の転送を再開するための再開要求パケット６３０を送信するため、電子計算機１００−１（送り元計算機）は、電子計算機１００−２（宛先計算機）が受け取れないデータのみを再度転送すればよい。このため、本発明の通信システムによれば、電子計算機１００−２（宛先計算機）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット６００を転送することができる（データ転送を行うことができる）。
【０１２０】
再開要求パケット６３０に、電子計算機１００−１（送り元計算機）からのデータ送信パケット６００のデータのうちの、受信バッファ２２２−Ｊに書き込まれたデータのデータ長（受信済みデータ長）が含まれる場合、再開要求パケット６３０は、電子計算機１００−１（送り元計算機）からのデータ送信パケット６００のデータのうち、受信バッファ２２２に書き込まれたデータ以外のデータの転送を要求するための情報（パケット）である。このように、本発明の通信システムによれば、電子計算機１００−１（送り元計算機）は、再開要求パケット６３０に含まれる受信済みデータ長を参照して、先にデータ送信パケット６００にて転送したデータのデータ長のうちの、受信済みデータ長以外のデータ長を有するデータ（上記の残りデータ）を電子計算機１００−２（宛先計算機）に転送すればよい。このため、本発明の通信システムによれば、前記残りデータを電子計算機１００−１（送り元計算機）から電子計算機１００−２（宛先計算機）に転送するときの転送時間は、例えば、先に転送したデータを電子計算機１００−１（送り元計算機）から電子計算機１００−２（宛先計算機）に始めから転送した場合の転送時間よりも短くなる。
【０１２１】
以上の説明により、本発明の通信システムによれば、電子計算機１００−１（送り元計算機）は、電子計算機１００−２（宛先計算機）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット６００を転送することができる（データ転送を行うことができる）。
【０１２２】
本発明の通信システムによれば、電子計算機１００−１（送り元計算機）が事前制御通信を行わずにデータ転送を行うため、データ転送の開始から完了までのレイテンシ（実行時間）は、従来の技術で説明されたような事前制御通信を開始してからデータ転送の完了までのレイテンシ（実行時間）よりも低減する。
【０１２３】
本発明の通信システムによれば、電子計算機１００−２（宛先計算機）は、データ送信パケット６００の転送を中断するための中断要求パケット６１０を送信するため、電子計算機１００−２（宛先計算機）が受け取れない無駄なデータ転送を早期に抑止し、交換網４００を流れる無駄なデータを低減することができる。
【０１２４】
このように、本発明の通信システムによれば、電子計算機１００−２（宛先計算機）は、中断されたデータ送信パケット６００の転送を再開するための再開要求パケット６３０を送信するため、電子計算機１００−１（送り元計算機）は、電子計算機１００−２（宛先計算機）が受け取れないデータのみを再度転送すればよい。このため、本発明の通信システムによれば、電子計算機１００−２（宛先計算機）に対して、従来の技術で説明されたような事前制御通信を行わずに、データ送信パケット６００を転送することができる（データ転送を行うことができる）。
【０１２５】
再開要求パケット６３０に、電子計算機１００−１（送り元計算機）からのデータ送信パケット６００のデータのうちの、受信バッファ２２２−Ｊに書き込まれたデータのデータ長（受信済みデータ長）が含まれる場合、再開要求パケット６３０は、電子計算機１００−１（送り元計算機）からのデータ送信パケット６００のデータのうち、受信バッファ２２２に書き込まれたデータ以外のデータの転送を要求するための情報（パケット）である。このように、本発明の通信システムによれば、電子計算機１００−１（送り元計算機）は、再開要求パケット６３０に含まれる受信済みデータ長を参照して、先にデータ送信パケット６００にて転送したデータのデータ長のうちの、受信済みデータ長以外のデータ長を有するデータ（上記の残りデータ）を電子計算機１００−２（宛先計算機）に転送すればよい。このため、本発明の通信システムによれば、前記残りデータを電子計算機１００−１（送り元計算機）から電子計算機１００−２（宛先計算機）に転送するときの転送時間は、例えば、先に転送したデータを電子計算機１００−１（送り元計算機）から電子計算機１００−２（宛先計算機）に始めから転送した場合の転送時間よりも短くなる。
【図面の簡単な説明】
【０１２６】
【図１】図１は、本発明の通信システムの構成を示すブロック図である。
【図２】図２は、本発明の通信システムにおける電子計算機の通信装置の構成を示すブロック図である。
【図３】図３は、本発明の通信システムにおける電子計算機の演算装置の構成を示すブロック図である。
【図４】図４は、本発明の通信システムにおける電子計算機の主記憶装置の構成を示すブロック図である。
【図５】図５は、本発明の通信システムにおける送信命令を示す。
【図６】図６は、本発明の通信システムにおけるデータ送信パケットを示す。
【図７】図７は、本発明の通信システムにおける受信命令を示す。
【図８】図８は、本発明の通信システムにおけるコンテキストを示す。
【図９】図９（ａ）、（ｂ）は、本発明の通信システムにおける中断要求パケットを示す。
【図１０】図１０は、本発明の通信システムにおける受付パケットを示す。
【図１１】図１１（ａ）、（ｂ）は、本発明の通信システムにおける遠隔命令を示す。
【図１２】図１２（ａ）、（ｂ）は、本発明の通信システムにおける再開要求パケットを示す。
【図１３】図１３は、本発明の通信システムの動作であるパケット送信実行処理を示すフローチャートである。
【図１４】図１４は、本発明の通信システムの動作であるパケット受信実行処理を示すフローチャートである。
【図１５】図１５は、本発明の通信システムの動作である受信命令実行処理を示すフローチャートである。
【図１６】図１６は、本発明の通信システムにおいてコンテキスト処理部がコンテキストを取り込んだ後の処理を説明するための図である。
【符号の説明】
【０１２７】
１００−１  電子計算機
１００−２  電子計算機
１００−３  電子計算機
１１０    演算装置
１１１、１１１−１〜１１１−Ｎ    プロセス
１１３    ドライバソフトウェア
１２０    制御装置
２００    主記憶装置
２０１    コンテキストテーブル
２１１、２１１−１〜２１１−Ｎ    送信命令ＦＩＦＯ
２１２、２１２−１〜２１２−Ｎ    受信命令ＦＩＦＯ
２１３、２１３−１〜２１３−Ｎ    遠隔命令ＦＩＦＯ
２２１、２２１−１〜２２１−Ｎ    送信バッファ
２２２、２２２−１〜２２２−Ｎ    受信バッファ
２３１    転送長レジスタ
２３２    転送アドレスレジスタ
３００    通信装置
３１０    メモリ制御部
３２０    送信部
３２１    パケット送信部
３２２    命令処理部
３２２’  レジスタ
３４０    受信部
３４１    コンテキスト処理部
３４１’  レジスタ
３４２    パケット受信部
４００    交換網
５００    送信命令
５０１    送信タイプ欄
５０２    宛先計算機番号欄
５０３    接続番号欄
５０４    送信バッファ開始アドレス欄
５０５    転送長欄
５１０    受信命令
５１１    受信タイプ欄
５１２    宛先計算機番号欄
５１３    接続番号欄
５１４    受信バッファ開始アドレス欄
５１５    受信バッファ長欄
６００    データ送信パケット
６０１    送信タイプ欄
６０２    宛先計算機番号欄
６０３    送り元計算機番号欄
６０４    接続番号欄
６０５    送信命令番号欄
６０６    パケット番号欄
６０７    データ長欄
６０８    データ欄
６１０    中断要求パケット
６１１    中断要求タイプ欄
６１２    宛先計算機番号欄
６１３    送り元計算機番号欄
６１４    接続番号欄
６１５    送信命令番号欄
６１６    受信データ長欄
６２０    受付パケット
６２１    受付タイプ欄
６２２    宛先計算機番号欄
６２３    送り元計算機番号欄
６２４    接続番号欄
６２５    送信命令番号欄
６３０    再開要求パケット
６３１    再開要求タイプ欄
６３２    宛先計算機番号欄
６３３    送り元計算機番号欄
６３４    接続番号欄
６３５    送信命令番号欄
６３６    受信済みデータ長欄
６４０    遠隔命令
６４１    遠隔命令タイプ欄
６４２    宛先計算機番号欄
６４３    送り元計算機番号欄
６４４    接続番号欄
６４５    送信命令番号欄
６４６    受信済みデータ長欄
７００    コンテキスト
７０１    受信命令処理中フラグ欄
７０２    送信命令番号欄
７０３    最終受信パケット番号欄
７０４    処理中受信命令の受信済みデータ長欄
７０５    送信中断済みフラグ欄
７１０    処理中受信命令欄
７１１    処理中受信命令の受信タイプ欄
７１２    処理中受信命令の受信バッファ開始アドレス欄
７１３    処理中受信命令のバッファ長欄
【図１】
2005204089.tif 000004
【図２】
2005204089.tif 000005
【図３】
2005204089.tif 000006
【図４】
2005204089.tif 000007
【図５】
2005204089.tif 000008
【図６】
2005204089.tif 000009
【図７】
2005204089.tif 000010
【図８】
2005204089.tif 000011
【図９】
2005204089.tif 000012
【図１０】
2005204089.tif 000013
【図１１】
2005204089.tif 000014
【図１２】
2005204089.tif 000015
【図１３】
2005204089.tif 000016
【図１４】
2005204089.tif 000017
【図１５】
2005204089.tif 000018
【図１６】
2005204089.tif 000019