(57)【要約】【課題】データブロックを元の複数のデータに復元する処理に必要となるハードウェアの規模を小さくし、かつ高い受信性能を実現する。【解決手段】パケット処理装置は、通信回線から受信したパケットの処理を行って処理結果のデータを出力するパケット処理部１１４と、パケット処理部１１４から出力された複数のデータを連結してデータブロックを生成するデータ結合部１２０と、データ結合部１２０によって生成されたデータブロックをデータ用メモリ１１５にＤＭＡ転送する結合データ転送部１２１とを備える。結合データ転送部１２１は、データブロック内の各データの先頭の、データ用メモリ１１５上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタ１２１０に書き込む。【選択図】  図１１
2020178303.tif 000002
【特許請求の範囲】
【請求項１】
通信回線から受信したパケットの処理を行って処理結果のデータを出力するように構成されたパケット処理部と、
前記パケット処理部から出力された複数のデータを連結してデータブロックを生成するように構成されたデータ結合部と、
前記パケット処理部から出力されたデータを格納するように構成されたデータ用メモリと、
前記データ結合部によって生成されたデータブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込むように構成された結合データ転送部とを備え、
前記結合データ転送部は、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込むことを特徴とするパケット処理装置。
【請求項２】
通信回線から受信したパケットの処理を行って処理結果のデータを出力するように構成されたパケット処理部と、
前記パケット処理部から出力された複数のデータを連結してデータブロックを生成するように構成されたデータ結合部と、
前記パケット処理部から出力されたデータを格納するように構成されたデータ用メモリと、
前記データ結合部によって生成されたデータブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込むように構成された結合データ転送部とを備え、
前記結合データ転送部は、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスを決定し、このアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込み、前記データブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込むことを特徴とするパケット処理装置。
【請求項３】
請求項１または２記載のパケット処理装置において、
前記結合データ転送部は、前記データブロック内の各データのデータ長を示す受信データサイズの情報を前記ディスクリプタに書き込むことを特徴とするパケット処理装置。
【請求項４】
請求項１乃至３のいずれか１項に記載のパケット処理装置において、
前記データ用メモリに格納されたデータを読み出す処理部をさらに備え、
前記処理部は、前記ディスクリプタに書き込まれた情報に基づいて前記データ用メモリからデータを読み出して処理を施すことを特徴とするパケット処理装置。
【請求項５】
通信回線から受信したパケットの処理を行って処理結果のデータを出力する第１のステップと、
前記第１のステップで得られた複数のデータを連結してデータブロックを生成する第２のステップと、
前記第１のステップで得られたデータに対して処理を施す処理部がデータの読み出しを行うデータ用メモリに対して、前記データブロックをＤＭＡ転送するか、またはプロセッサによって書き込む第３のステップと、
前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む第４のステップとを含むことを特徴とするパケット処理方法。
【請求項６】
通信回線から受信したパケットの処理を行って処理結果のデータを出力する第１のステップと、
前記第１のステップで得られた複数のデータを連結してデータブロックを生成する第２のステップと、
前記第１のステップで得られたデータに対して処理を施す処理部がデータの読み出しを行うデータ用メモリに対して、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスを決定する第３のステップと、
前記アドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む第４のステップと、
前記データブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込む第５のステップとを含むことを特徴とするパケット処理方法。
【請求項７】
請求項５または６記載のパケット処理方法において、
前記データブロック内の各データのデータ長を示す受信データサイズの情報を前記ディスクリプタに書き込むステップをさらに含むことを特徴とするパケット処理方法。
【請求項８】
請求項５乃至７のいずれか１項に記載のパケット処理方法において、
前記ディスクリプタに書き込まれた情報に基づいて前記データ用メモリからデータを読み出して処理を施すステップをさらに含むことを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置およびパケット処理方法に係り、特に、通信システムの中で、パケットデータの転送処理を行うパケット処理装置およびパケット処理方法に関するものである。
【背景技術】
【０００２】
図３５は従来のパケット処理装置の構成を示すブロック図である。パケット処理装置は、通信回線からパケットを受信する回線対応部１００と、通信回線から受信したパケットが格納されるパケットメモリ１０１と、通信回線から受信したパケットをパケットメモリ１０１に転送するパケット転送部１０２と、パケットメモリ１０１からパケットを読み出す受信処理部１０３と、パケットに対してプロトコル処理を行うプロトコル処理部１０４とを備えている。
【０００３】
このパケット処理装置では、通信回線（不図示）と接続された回線対応部１００へのパケットの到着を契機として、パケット転送部１０２がＤＭＡ（Direct Memory Access）を用いたデータ転送を行い、到着したパケットをパケットメモリ１０１に格納する。同時に、パケット転送部１０２は、パケットを受信したことをパケット処理装置のプロセッサ（不図示）に通知するためにハードウェア割り込みを発生させ、受信処理部１０３の起動要求を行う。
【０００４】
パケット転送部１０２は、パケット処理装置のプロセッサが実行するソフトウェアによって構築されるデータ構造体であるディスクリプタ１０２０と、ハードウェアであるＤＭＡコントローラ１０２１とから構成される。図３６はディスクリプタ１０２０の概要を説明する図である。
【０００５】
図３６の例では、パケットメモリ１０１にＮ個のパケットが格納される場合を示している。この場合、パケット処理装置のプロセッサは、Ｎ個のパケットの各々に対応するアドレスやフラグをディスクリプタ１０２０に設定する。プロセッサは、受信したパケットをパケットメモリ１０１へ書き込む際の先頭アドレスＡ＃１〜Ａ＃Ｎをディスクリプタ１０２０に予め設定しておく。通常、同時に設定できるアドレスの数は予め決まっており、使用されるアドレスの順番も決まっている。
【０００６】
プロセッサは、設定したアドレスＡ＃１〜Ａ＃Ｎが有効か否かを示すフラグＡＦ＃１〜ＡＦ＃Ｎのセット／リセットをディスクリプタ１０２０に対して行う。アドレスＡ＃１〜Ａ＃Ｎの設定後、プロセッサがフラグＡＦ＃１〜ＡＦ＃Ｎを有効にすると、パケットメモリ１０１へのパケットの書き込みが可能となる。
【０００７】
また、ディスクリプタ１０２０には、設定されたアドレスＡ＃１〜Ａ＃Ｎへのパケットの書き込みが完了したか否かを示す受信完了フラグＷＦ＃１〜ＷＦ＃Ｎと、設定されたアドレスＡ＃１〜Ａ＃Ｎへの書き込みが行われたパケットのパケット長を示す受信データサイズＬ＃１〜Ｌ＃Ｎとが設定される。
【０００８】
図３７はＤＭＡコントローラ１０２１の動作を説明するフローチャートである。最初に、ＤＭＡコントローラ１０２１は、ディスクリプタ１０２０の読出および書込の順を示す変数ｎを１に初期化し（図３７ステップＳ１００）、ｎ＝１番目のフラグＡＦ＃１をディスクリプタ１０２０から読み出す（図３７ステップＳ１０１）。
【０００９】
ＤＭＡコントローラ１０２１は、先頭アドレスが有効であることをフラグＡＦ＃１が示している場合（図３７ステップＳ１０２においてｙｅｓ）、ｎ＝１番目の先頭アドレスＡ＃１をディスクリプタ１０２０から読み出し（図３７ステップＳ１０３）、対応するｎ＝１番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃１から始まる領域に書き込む（図３７ステップＳ１０４）。
【００１０】
パケットの書き込み完了後、ＤＭＡコントローラ１０２１は、ｎ＝１番目のパケットのパケット長を示す受信データサイズＬ＃１と、パケットの書き込みが完了したことを示す受信完了フラグＷＦ＃１とをディスクリプタ１０２０に書き込む（図３７ステップＳ１０５）。
また、パケットの書き込みが完了したことをパケット処理装置のプロセッサ（不図示）に通知するためにハードウェア割り込みを発生させ、受信処理部１０３の起動要求を行う。
【００１１】
そして、ＤＭＡコントローラ１０２１は、変数ｎがＮと等しいかどうかを判定する（図３７ステップＳ１０６）。ＤＭＡコントローラ１０２１は、変数ｎがＮに達していない場合（ステップＳ１０６においてｎｏ）、変数ｎを１増やし（図３７ステップＳ１０７）、ステップＳ１０１に戻る。また、ＤＭＡコントローラ１０２１は、変数ｎがＮに達した場合（ステップＳ１０６においてｙｅｓ）、ステップＳ１００に戻る。こうして、Ｎ個のパケットが順番にパケットメモリ１０１に転送される。
【００１２】
次に、起動した受信処理部１０３は、パケットメモリ１０１に転送された受信パケットをプロトコル処理部１０４へ受渡す。同時に、受信処理部１０３は、プロトコル処理部１０４へ受け渡したパケットメモリ分を補充するために、パケット処理装置が持つメモリから新たなパケットメモリ１０１の領域を確保する。
受信パケットが受け渡されたプロトコル処理部１０４は、必要なプロトコル処理が終了するとパケットメモリ１０１の領域を解放する。
【００１３】
以上のような一般的な受信処理では、特に、小さいパケットが高頻度に到着した場合、ハードウェアの割り込みの数が増大するために、パケット処理装置のプロセッサが高負荷となり、受信性能が低下することが知られている。また、ＤＭＡ転送が起動される回数が増加するために、ＤＭＡ転送制御に伴うオーバーヘッドのために受信性能が低下することが知られている。
【００１４】
このような問題に対処するために、回線対応部において設定された閾値に達するまで、複数の小さいパケットを１つの大きな結合パケットに纏め、結合パケットのサイズが閾値に到達することを契機として、一括してパケットメモリへ結合パケットをＤＭＡ転送する技術が提案されている（特許文献１参照）。
【００１５】
このような、複数の小さなパケットを１つの結合パケットに纏めて転送するＤＭＡ転送方式（以降、纏めＤＭＡ転送）を用いることにより、パケット処理装置に小さなパケットが到着した場合でも、ハードウェア割り込みの回数を減少させることができ、またＤＭＡ転送のオーバーヘッドを削減することができるので、高速な受信処理を行うことができる。
【００１６】
図３８は特許文献１に開示された従来のパケット処理装置の構成を示すブロック図である。このパケット処理装置は、回線対応部１００と、パケットメモリ１０１と、結合パケット転送部１０２ａと、受信処理部１０３と、プロトコル処理部１０４と、受信バッファ１０５と、パケット結合部１０６と、結合閾値制御部１０７とを備えている。
【００１７】
図３８に示したパケット処理装置では、パケット結合部１０６は、回線対応部１００において受信されたパケットをパケット結合用の受信バッファ１０５に転送する。このとき、パケット結合部１０６は、回線対応部１００において受信されたパケットと受信バッファ１０５中に既に格納されているパケットとが結合され、１つの結合パケットになるように、パケットを受信バッファ１０５に格納する。そして、パケット結合部１０６は、受信バッファ１０５中の結合パケットの大きさが、結合閾値制御部１０７にあらかじめ設定された閾値を超えると、結合パケットのパケットメモリ１０１への転送要求を発行する。
【００１８】
図３５の場合と同様に、結合パケット転送部１０２ａは、ディスクリプタ１０２０ａと、ＤＭＡコントローラ１０２１ａとから構成される。図３９はディスクリプタ１０２０ａの概要を説明する図である。図３９の例では、パケットメモリ１０１にＮ個の結合パケットが格納される場合を示している。この場合、パケット処理装置のプロセッサは、Ｎ個の結合パケットの各々に対応するアドレスやフラグをディスクリプタ１０２０ａに設定する。
【００１９】
プロセッサは、結合パケットをパケットメモリ１０１へ書き込む際の先頭アドレスＡＤ＃１〜ＡＤ＃Ｎをディスクリプタ１０２０ａに予め設定しておく。通常、同時に設定できるアドレスの数は予め決まっており、使用されるアドレスの順番も決まっている。
【００２０】
プロセッサは、設定したアドレスＡＤ＃１〜ＡＤ＃Ｎが有効か否かを示すフラグＡＤＦ＃１〜ＡＤＦ＃Ｎのセット／リセットをディスクリプタ１０２０ａに対して行う。アドレスＡＤ＃１〜ＡＤ＃Ｎの設定後、プロセッサがフラグＡＤＦ＃１〜ＡＤＦ＃Ｎを有効にすると、パケットメモリ１０１への結合パケットの書き込みが可能となる。
【００２１】
また、ディスクリプタ１０２０ａには、設定されたアドレスＡＤ＃１〜ＡＤ＃Ｎへの結合パケットの書き込みが完了したか否かを示す受信完了フラグＷＤＦ＃１〜ＷＤＦ＃Ｎと、設定されたアドレスＡ＃１〜Ａ＃Ｎへの書き込みが行われた結合パケットの長さ（結合したパケットのパケット長の合計値）を示す受信データサイズＬＤ＃１〜ＬＤ＃Ｎとが設定される。
【００２２】
図４０はＤＭＡコントローラ１０２１ａの動作を説明するフローチャートである。最初に、ＤＭＡコントローラ１０２１ａは、ディスクリプタ１０２０ａの読出および書込の順を示す変数ｎを１に初期化し（図４０ステップＳ２００）、ｎ＝１番目のフラグＡＤＦ＃１をディスクリプタ１０２０ａから読み出す（図４０ステップＳ２０１）。
【００２３】
ＤＭＡコントローラ１０２１ａは、先頭アドレスが有効であることをフラグＡＤＦ＃１が示している場合（図４０ステップＳ２０２においてｙｅｓ）、ｎ＝１番目の先頭アドレスＡＤ＃１をディスクリプタ１０２０ａから読み出し（図４０ステップＳ２０３）、対応するｎ＝１番目の結合パケットをパケットメモリ１０１の先頭アドレスＡＤ＃１から始まる領域に書き込む（図４０ステップＳ２０４）。
【００２４】
結合パケットの書き込み完了後、ＤＭＡコントローラ１０２１ａは、ｎ＝１番目の結合パケットの長さを示す受信データサイズＬＤ＃１と、結合パケットの書き込みが完了したことを示す受信完了フラグＷＤＦ＃１とをディスクリプタ１０２０ａに書き込む（図４０ステップＳ２０５）。
また、結合パケットの書き込みが完了したことをパケット処理装置のプロセッサ（不図示）に通知するためにハードウェア割り込みを発生させ、受信処理部１０３の起動要求を行う。
【００２５】
そして、ＤＭＡコントローラ１０２１ａは、変数ｎがＮと等しいかどうかを判定する（図４０ステップＳ２０６）。ＤＭＡコントローラ１０２１ａは、変数ｎがＮに達していない場合（ステップＳ２０６においてｎｏ）、変数ｎを１増やし（図４０ステップＳ２０７）、ステップＳ２０１に戻る。また、ＤＭＡコントローラ１０２１ａは、変数ｎがＮに達した場合（ステップＳ２０６においてｙｅｓ）、ステップＳ２００に戻る。こうして、Ｎ個の結合パケットが順番にパケットメモリ１０１に転送される。
【００２６】
結合パケット転送部１０２ａ（ＤＭＡコントローラ１０２１ａ）からの起動要求に応じて起動した受信処理部１０３は、パケットメモリ１０１に転送された結合パケットをプロトコル処理部１０４へと渡す。
【００２７】
図３８に示した構成によって、受信処理の起動要求が、複数のパケットが結合した結合パケットが転送される度に行われるようになるため、受信処理部１０３の起動回数が減少し、パケット処理装置のプロセッサの負荷が軽減される。また、ＤＭＡ転送制御の回数も減少するためにオーバーヘッドの割合が低くなり、高い受信性能を発揮することが可能となる。
【００２８】
ただし、図３８に示した構成では、結合パケットをプロトコル処理部１０４において元の複数のパケットに復元する必要がある。この復元処理をプロトコル処理部１０４のハードウェアで実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６からプロトコル処理部１０４に通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。また、復元処理に必要な情報をパケットメモリ１０１等に保持しておく必要がある。
【００２９】
また、復元処理を受信処理部１０３等のソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から受信処理部１０３に通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めＤＭＡ転送による受信性能の向上が抑制されるという課題もある。
【００３０】
図４１はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図３８のパケット処理装置の受信処理部１０３とプロトコル処理部１０４との間に、結合パケットを元の複数のパケットに復元する結合パケット分離部１０８を挿入したものである。
【００３１】
パケットの復元処理をプロトコル処理部１０４のハードウェアで実現する場合と同様に、結合パケット分離部１０８をハードウェアで実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から結合パケット分離部１０８まで通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。
【００３２】
また、結合パケット分離部１０８をソフトウェアで実現することも可能であるが、上記と同様に、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から結合パケット分離部１０８に通知する手段が必要となり、そのためにパケット結合部１０６等のハードウェアの規模が大きくなるという課題がある。また、ソフトウェアで復元処理を行うため、ソフトウェアによる処理が増加し、プロセッサの負荷が上がり、その結果として、纏めＤＭＡ転送による受信性能の向上が抑制されるという課題もある。
【００３３】
図４２はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図４１のパケット処理装置において、通信回線から受信したパケットの処理を行って処理結果のデータを出力するパケット処理部１１４を設け、パケットメモリ１０１と結合パケット転送部１０２ａと受信処理部１０３とプロトコル処理部１０４と受信バッファ１０５とパケット結合部１０６と結合パケット分離部１０８とを、それぞれパケットから抽出したデータのためのデータ用メモリ１１５と結合データ転送部１０２ｂと受信処理部１１７とデータ処理部１１６と受信バッファ１１８とデータ結合部１２０と結合データ分離部１０８ｂに置き換えたものである。
【００３４】
データ結合部１２０は、パケット処理部１１４が出力したデータをデータ結合用の受信バッファ１１８に転送する。このとき、データ結合部１２０は、パケット処理部１１４が出力したデータと受信バッファ１１８中に既に格納されているデータとを連結して１つのデータブロックになるように、データを受信バッファ１１８に格納する。
結合データ転送部１０２ｂは、データ結合部１２０によって生成されたデータブロックをデータ用メモリ１１５にＤＭＡ転送する。
【００３５】
受信処理部１１７は、データ用メモリ１１５に転送されたデータブロックを結合データ分離部１０８ｂへ受渡す。結合データ分離部１０８ｂは、データブロックを元の複数のデータに復元する。データ処理部１１６は、結合データ分離部１０８ｂによって復元されたデータに必要な処理を施す。
【００３６】
図４２に示した構成では、結合したデータを結合データ分離部１０８ｂにおいて元の複数のデータに復元する必要がある。この復元処理を結合データ分離部１０８ｂのハードウェアで実現しようとすると、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ結合部１２０から結合データ分離部１０８ｂに通知する手段が必要となり、そのためにデータ結合部１２０等のハードウェアの規模が大きくなるという課題がある。また、複数のデータブロック（転送単位）分に対応する情報（データ毎のサイズ等）をデータ用メモリ１１５等に保持しておく必要がある。
また、結合データ分離部１０８ｂをソフトウェアで実現することも可能であるが、データ結合を行わない場合よりもソフトウエアの処理が増えるという課題がある。
【００３７】
図４３はパケット処理装置の別の構成を示すブロック図である。このパケット処理装置は、図３８、図４１のパケット処理装置の結合パケット転送部１０２ａの代わりに、ソフトウェアによる結合パケット書き込み部１０９を設けたものである。ＤＭＡ転送を用いないパケット処理装置においても、ソフトウェアにより複数のパケットを纏めてパケットメモリ１０１に書き込むこと（以降、纏め書き込み）によりパケットメモリ１０１への書き込みの実効スループットが向上する場合（パケットメモリ１０１がＤＲＡＭで構成されている場合等）がある。このように、纏め書き込みを行うパケット処理装置においても、結合パケットを元の複数のパケットに復元する際に上記と同様の問題がある。
【００３８】
また、図４３の処理の全て（パケットメモリ１０１内と回線対応部１００内のハードウェア処理を除く）をソフトウェアで行う場合、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケットメモリ１０１等に保存する必要があり、纏め書き込みを行わない場合と比較して、パケットメモリ１０１等の容量（書き込み可能なビット数）を大きくする必要があるという課題が有る。
【先行技術文献】
【特許文献】
【００３９】
【特許文献１】特許第４４６８３３２号公報
【発明の概要】
【発明が解決しようとする課題】
【００４０】
本発明は、前記従来技術の問題点を解決するためになされたものであり、本発明の目的は、ハードウェアによる纏めＤＭＡ転送、もしくはソフトウェアによる纏め書き込みを用いるパケット処理装置において、複数のデータが結合したデータブロックを元の複数のデータに復元する処理に必要となるハードウェアの規模を小さくし、かつ纏めＤＭＡ転送もしくは纏め書き込みの効果による高い受信性能を実現することが可能となる技術を提供することにある。
【課題を解決するための手段】
【００４１】
本発明のパケット処理装置は、通信回線から受信したパケットの処理を行って処理結果のデータを出力するように構成されたパケット処理部と、前記パケット処理部から出力された複数のデータを連結してデータブロックを生成するように構成されたデータ結合部と、前記パケット処理部から出力されたデータを格納するように構成されたデータ用メモリと、前記データ結合部によって生成されたデータブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込むように構成された結合データ転送部とを備え、前記結合データ転送部は、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込むことを特徴とするものである。
【００４２】
また、本発明のパケット処理装置は、通信回線から受信したパケットの処理を行って処理結果のデータを出力するように構成されたパケット処理部と、前記パケット処理部から出力された複数のデータを連結してデータブロックを生成するように構成されたデータ結合部と、前記パケット処理部から出力されたデータを格納するように構成されたデータ用メモリと、前記データ結合部によって生成されたデータブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込むように構成された結合データ転送部とを備え、前記結合データ転送部は、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスを決定し、このアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込み、前記データブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込むことを特徴とするものである。
【００４３】
また、本発明のパケット処理装置の１構成例において、前記結合データ転送部は、前記データブロック内の各データのデータ長を示す受信データサイズの情報を前記ディスクリプタに書き込むことを特徴とするものである。
また、本発明のパケット処理装置の１構成例は、前記データ用メモリに格納されたデータを読み出す処理部をさらに備え、前記処理部は、前記ディスクリプタに書き込まれた情報に基づいて前記データ用メモリからデータを読み出して処理を施すことを特徴とするものである。
【００４４】
また、本発明のパケット処理方法は、通信回線から受信したパケットの処理を行って処理結果のデータを出力する第１のステップと、前記第１のステップで得られた複数のデータを連結してデータブロックを生成する第２のステップと、前記第１のステップで得られたデータに対して処理を施す処理部がデータの読み出しを行うデータ用メモリに対して、前記データブロックをＤＭＡ転送するか、またはプロセッサによって書き込む第３のステップと、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む第４のステップとを含むことを特徴とするものである。
【００４５】
また、本発明のパケット処理方法は、通信回線から受信したパケットの処理を行って処理結果のデータを出力する第１のステップと、前記第１のステップで得られた複数のデータを連結してデータブロックを生成する第２のステップと、前記第１のステップで得られたデータに対して処理を施す処理部がデータの読み出しを行うデータ用メモリに対して、前記データブロック内の各データの先頭の、前記データ用メモリ上におけるアドレスを決定する第３のステップと、前記アドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む第４のステップと、前記データブロックを前記データ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込む第５のステップとを含むことを特徴とするものである。
【発明の効果】
【００４６】
本発明によれば、結合データ転送部は、データ結合部によって生成されたデータブロックをデータ用メモリにＤＭＡ転送するか、またはプロセッサによって書き込み、データブロック内の各データの先頭の、データ用メモリ上におけるアドレスの情報を、予め定められたメモリ上のデータ領域であるディスクリプタに書き込む。本発明の結合データ転送部を備えたパケット処理装置によれば、従来技術の構成と比較して、複数のデータが結合したデータブロックを元の複数のデータに復元する処理に必要となるハードウェアの規模を小さくすることができ、かつ纏めＤＭＡ転送もしくは纏め書き込みの効果による高い受信性能を実現することが可能となる。
【００４７】
また、本発明では、結合データ転送部が、データブロック内の各データの先頭の、データ用メモリ上におけるアドレスを決定し、このアドレスの情報をディスクリプタに書き込むことにより、従来技術の構成と比較して、データ用メモリ内に確保が必要なデータブロック用のバッファ領域のサイズを小さくすることができる。
【００４８】
なお、従来の図４２の構成で、複数のデータが結合したデータブロックを元の複数のデータに復元する処理をソフトウエアで実装した場合と比較すると、本発明の構成で複数のデータが結合したデータブロックを元の複数のデータに復元する処理をハードウエアで行う場合、１データの処理に必要となるプロセッサの処理が軽くなるため、受信性能が向上する（単位時間に処理できるデータの数が増加する）という効果がある。また、１データの処理に必要となるプロセッサの消費電力が小さくなるという効果もある。
【図面の簡単な説明】
【００４９】
【図１】図１は、本発明の第１の参考例に係るパケット処理装置の構成を示すブロック図である。
【図２】図２は、本発明の第１の参考例に係るパケット処理装置のディスクリプタの概要を説明する図である。
【図３】図３は、本発明の第１の参考例に係るパケット処理装置の転送管理部の動作を説明するフローチャートである。
【図４】図４は、本発明の第１の参考例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図５】図５は、本発明の第１の参考例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図６】図６は、本発明の第１の参考例に係るパケット処理装置の受信処理部の動作を説明するフローチャートである。
【図７】図７は、本発明の第２の参考例に係るパケット処理装置の構成を示すブロック図である。
【図８】図８は、本発明の第２の参考例に係るパケット処理装置のディスクリプタの概要を説明する図である。
【図９】図９は、本発明の第２の参考例に係るパケット処理装置の結合パケット転送部の動作を説明するフローチャートである。
【図１０】図１０は、本発明の第２の参考例に係るパケット処理装置の結合パケット転送部の動作を説明するフローチャートである。
【図１１】図１１は、本発明の第１の実施例に係るパケット処理装置の構成を示すブロック図である。
【図１２】図１２は、本発明の第１の実施例に係るパケット処理装置の転送管理部の動作を説明するフローチャートである。
【図１３】図１３は、本発明の第１の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図１４】図１４は、本発明の第１の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図１５】図１５は、本発明の第１の実施例に係るパケット処理装置の受信処理部の動作を説明するフローチャートである。
【図１６】図１６は、本発明の第２の実施例に係るパケット処理装置の構成を示すブロック図である。
【図１７】図１７は、本発明の第２の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図１８】図１８は、本発明の第２の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図１９】図１９は、本発明の第３の実施例に係るパケット処理装置の構成を示すブロック図である。
【図２０】図２０は、本発明の第３の実施例に係るパケット処理装置のディスクリプタの概要を説明する図である。
【図２１】図２１は、本発明の第３の実施例に係るパケット処理装置の転送管理部の動作を説明するフローチャートである。
【図２２】図２２は、本発明の第３の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図２３】図２３は、本発明の第３の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図２４】図２４は、本発明の第３の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図２５】図２５は、本発明の第３の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図２６】図２６は、本発明の第３の実施例に係るパケット処理装置の受信処理部の動作を説明するフローチャートである。
【図２７】図２７は、本発明の第３の実施例に係るパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図２８】図２８は、本発明の第４の実施例に係るパケット処理装置の構成を示すブロック図である。
【図２９】図２９は、本発明の第４の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図３０】図３０は、本発明の第４の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図３１】図３１は、本発明の第４の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図３２】図３２は、本発明の第４の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図３３】図３３は、本発明の第４の実施例に係るパケット処理装置の結合データ転送部の動作を説明するフローチャートである。
【図３４】図３４は、本発明の第１〜第４の実施例に係るパケット処理装置を実現するコンピュータの構成例を示すブロック図である。
【図３５】図３５は、従来のパケット処理装置の構成を示すブロック図である。
【図３６】図３６は、図３５のパケット処理装置のディスクリプタの概要を説明する図である。
【図３７】図３７は、図３５のパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図３８】図３８は、従来のパケット処理装置の別の構成を示すブロック図である。
【図３９】図３９は、図３８のパケット処理装置のディスクリプタの概要を説明する図である。
【図４０】図４０は、図３８のパケット処理装置のＤＭＡコントローラの動作を説明するフローチャートである。
【図４１】図４１は、従来のパケット処理装置の別の構成を示すブロック図である。
【図４２】図４２は、従来のパケット処理装置の別の構成を示すブロック図である。
【図４３】図４３は、従来のパケット処理装置の別の構成を示すブロック図である。
【発明を実施するための形態】
【００５０】
［第１の参考例］
以下、本発明の基礎となる参考例について説明する。なお、参考例および実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。図１は、本発明の第１の参考例に係るパケット処理装置の構成を示すブロック図である。
【００５１】
図１のパケット処理装置は、図３８の構成と同様に、通信回線（不図示）と接続され、通信回線からデータを受信する回線対応部１００と、通信回線から受信したパケットが格納されるパケットメモリ１０１と、パケットメモリ１０１に格納されたパケットをプロトコル処理部１０４へ渡す受信処理部１０３と、パケットのプロトコル処理を行うプロトコル処理部１０４と、パケット結合用の受信バッファ１０５と、結合パケットの大きさを規制する閾値があらかじめ設定された結合閾値制御部１０７と、通信回線から受信した複数のパケットを受信バッファ１０５において連結して１つの結合パケットを生成するパケット結合部１１０と、パケット結合部１１０によって生成された結合パケットをパケットメモリ１０１にＤＭＡ転送する結合パケット転送部１１１と、予め定められたメモリ上のデータ領域であるディスクリプタ１１１０の初期設定を行う転送管理部１１２とから構成される。なお、転送管理部１１２については、受信処理部１０３の一部として構成しても良い。
【００５２】
このうち、回線対応部１００とパケット結合用の受信バッファ１０５と結合閾値制御部１０７とは、図３８の構成と同等である。
【００５３】
パケット結合部１１０は、回線対応部１００において受信されたパケットをパケット結合用の受信バッファ１０５に転送する。このとき、パケット結合部１１０は、回線対応部１００において受信されたパケットと受信バッファ１０５中に既に格納されているパケットとを連結して１つの結合パケットになるように、パケットを受信バッファ１０５に格納する。そして、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが、結合閾値制御部１０７に設定された閾値を超えると、結合パケットのパケットメモリ１０１への転送要求を発行する。
【００５４】
なお、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが閾値を超える前に、タイムアウト（パケット間の受信間隔が予め定められた期間を超えた場合等）が発生した場合に、転送要求を発行するようにしてもよい。
【００５５】
さらに、パケット結合部１１０は、受信バッファ１０５において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズとを結合パケット転送部１１１に対して通知する。
【００５６】
結合パケット転送部１１１は、ＤＭＡコントローラ１１１１から構成される。結合パケット転送部１１１は、結合パケットを１度のＤＭＡ転送により、パケットメモリ１０１に転送し、ハードウェア割り込みを発生させて受信処理部１０３の起動要求を発行する。
なお、パケット処理装置のプロセッサ（不図示）へのハードウェア割り込みの発生を行わないようにしてもよい。
【００５７】
また、結合パケット転送部１１１は、パケット結合部１１０から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、転送管理部１１２（プロセッサが実行するソフトウェア）がパケット毎に用意したディスクリプタ１１１０にサイズ等を書き込む。ディスクリプタ１１１０の構成と結合パケット転送部１１１の動作の詳細については後述する。
【００５８】
受信処理部１０３は、起動要求を検知すると、パケット毎に用意されているディスクリプタ１１１０に書き込まれているアドレス情報とサイズの情報とに基づいてパケットメモリ１０１内のパケットを読み出してプロトコル処理部１０４へ渡す。この受信処理部１０３の動作は、図３５の構成の動作と同等である。
【００５９】
プロトコル処理部１０４は、受信処理部１０３から受け取ったパケットに対して必要なプロトコル処理を行う。そして、プロトコル処理部１０４は、必要なプロトコル処理が終了すると、受信処理部１０３から渡されたパケットが格納されていたパケットメモリ１０１の領域を解放する。このプロトコル処理部１０４の動作は、図３５の構成の動作と同等である。
必要なプロトコル処理が終了し、受信処理部１０３から渡されたパケットが格納されていたパケットメモリ１０１の領域が開放されたことをもって、後述する図６のＳ５０３における処理終了と判断する。
【００６０】
なお、受信処理部１０３とプロトコル処理部１０４と転送管理部１１２とは、汎用のパーソナルコンピュータやワークステーション上で動作するソフトウェアで実現することもできるし、プログラムと協調して動作するＦＰＧＡ（Field Programmable Gate Array）等のハードウェアで実現することも可能である。
パケットメモリ１０１は、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリとして構成可能である。
【００６１】
回線対応部１００と結合閾値制御部１０７とパケット結合部１１０とは、通信機器あるいは通信ボード上のＦＰＧＡ等により構成可能である。
受信バッファ１０５は、通信機器あるいは通信ボード上のＦＰＧＡ等が持つ記憶領域や、ＦＩＦＯ（First In,First Out）等の記憶回路により構成可能である。
【００６２】
図２に本実施例の結合パケット転送部１１１が使用するディスクリプタ１１１０の構成例を示す。一般的に、受信処理用のパケットメモリ１０１のアドレス等を記録するデータ構造体がディスクリプタ１１１０と呼ばれている。図２の例では、パケットメモリ１０１にＮ個のパケットが格納される場合を示している。
【００６３】
図２のディスクリプタ１１１０は、受信したパケットの書き込み先の先頭アドレスＡ＃１〜Ａ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎが有効か否かを示す有効フラグＡＦ＃１〜ＡＦ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎへの書き込みが行われたパケットのパケット長を示す受信データサイズＬ＃１〜Ｌ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎへのパケットの書き込みが完了したか否かを示す受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを、複数（Ｎ組）書き込み可能なデータ構造体となっている。このディスクリプタ１１１０の構成は、図３５の構成で一般的に用いられている受信処理用のディスクリプタ１０２０の構成と同等である。
【００６４】
ディスクリプタ１１１０は、実体としては、パケットメモリ１０１と同様に、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリ内に配置される。
なお、ディスクリプタ１１１０をパケットメモリ１０１と同じメモリ内に配置することも可能であるが、その場合、どちらの用途に使用するのかをメモリ内のアドレスにより分けることができる。
【００６５】
ここで、従来のディスクリプタ１０２０を用いた従来のＤＭＡ転送の動作例を、図３６と図３７を用いて再度詳細に説明する。
まず、パケット処理装置のプロセッサは、パケットの書き込み先の先頭アドレスＡ＃１〜Ａ＃Ｎを決定してディスクリプタ１０２０に書き込み、さらに、その先頭アドレスＡ＃１〜Ａ＃Ｎが有効か否かを示す有効フラグＡＦ＃１〜ＡＦ＃Ｎを「無効」から「有効」に書き換える。
【００６６】
なお、ディスクリプタ１０２０には、先頭アドレスの情報等を書き込む領域がＮ組あるが、書き込む順番は予め決められている。例えば図３６の例では、プロセッサは、１番目の先頭アドレスＡ＃１、２番目の先頭アドレスＡ＃２、・・・・、Ｎ番目の先頭アドレスＡ＃Ｎと順番に書き込む。
【００６７】
一通り書き込んだ後に、再び１番目のパケットの転送が可能になったときには、１番目の先頭アドレスＡ＃１から順番にディスクリプタ１０２０に書き込むようにすればよい。先頭アドレスＡ＃ｎ（ｎは１〜Ｎ）の書き込みが可能か否かは、例えば先頭アドレスＡ＃ｎに対応する有効フラグＡＦ＃ｎが「無効」であれば可能と判断すればよい。
【００６８】
次に、ＤＭＡコントローラ１０２１は、ディスクリプタ１０２０の有効フラグＡＦ＃ｎを確認して、先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図３７ステップＳ１０２においてｙｅｓ）、先頭アドレスＡ＃ｎをディスクリプタ１０２０から読み出し（図３７ステップＳ１０３）、対応するｎ番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込む（図３７ステップＳ１０４）。
【００６９】
このＤＭＡ転送完了後、ＤＭＡコントローラ１０２１は、ｎ番目のパケットのパケット長を示す受信データサイズＬ＃ｎをディスクリプタ１０２０に書き込むと共に、ディスクリプタ１０２０に設定されている、ｎ番目のパケットの書き込みが完了したことを示す受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図３７ステップＳ１０５）。
【００７０】
上記のとおりディスクリプタ１０２０には、有効フラグＡＦ＃１〜ＡＦ＃Ｎの領域がＮ個（組）あるが、有効フラグＡＦ＃１〜ＡＦ＃Ｎを確認する順番は予め決められている。例えば、図３６、図３７の例では、ＤＭＡコントローラ１０２１は、１番目の有効フラグＡＦ＃１、２番目の有効フラグＡＦ＃２、・・・・、Ｎ番目の有効フラグＡＦ＃Ｎと順番に確認する。一通り確認が終わった後には、再び１番目の有効フラグＡＦ＃１から順番に確認する。
【００７１】
ディスクリプタ１０２０には、受信データサイズＬ＃１〜Ｌ＃Ｎと受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを書き込む領域もＮ組用意されている。ＤＭＡコントローラ１０２１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることが確認されたｎ番目の有効フラグＡＦ＃ｎに対応する番号の領域に、受信データサイズＬ＃ｎと受信完了フラグＷＦ＃ｎとを書き込む。
【００７２】
次に、パケット処理装置のプロセッサは、定期的にディスクリプタ１０２０の受信完了フラグＷＦ＃ｎを確認して、受信完了フラグＷＦ＃ｎが「完了」を示している場合には、対応するｎ番目の先頭アドレスＡ＃ｎの情報と受信データサイズＬ＃ｎの情報とを用いて、パケットメモリ１０１からｎ番目のパケットを読み出し、必要な処理（例えばプロトコル処理）を行う。
【００７３】
そして、プロセッサは、処理が終わったｎ番目のパケットに対応する、ディスクリプタ１０２０のｎ番目の有効フラグＡＦ＃ｎを「有効」から「無効」に書き換えると共に、ディスクリプタ１０２０のｎ番目の受信完了フラグＷＦ＃ｎを「完了」から「未了」に書き換える。
【００７４】
ディスクリプタ１０２０には、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎの領域がＮ個（組）あるが、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する順番は予め決められている。例えば、図３６、図３７の例では、プロセッサは、１番目の受信完了フラグＷＦ＃１、２番目の受信完了フラグＷＦ＃２、・・・・、Ｎ番目の受信完了フラグＷＦ＃Ｎと順番に確認する。一通り確認が終わった後には、再び１番目の受信完了フラグＷＦ＃１から順番に確認する。
【００７５】
なお、上記の動作でＤＭＡコントローラ１０２１がＤＭＡ転送完了後にプロセッサに対して割り込み処理要求を行うようにし、プロセッサが定期的に受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する代わりに、プロセッサがＤＭＡコントローラ１０２１からの割り込み処理要求を受信したときに受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認するようにしてもよい。
【００７６】
次に、図２の構成のディスクリプタ１１１０を用いた本実施例の動作例を図１〜図６を用いて説明する。図３は転送管理部１１２の動作を説明するフローチャート、図４、図５はＤＭＡコントローラ１１１１の動作を説明するフローチャート、図６は受信処理部１０３の動作を説明するフローチャートである。
【００７７】
最初に、転送管理部１１２（プロセッサが実行するソフトウェア）は、パケット処理装置の初期設定として、Ｎ個の各パケットの先頭データの、パケットメモリ１０１上におけるアドレス、すなわち各パケットの書き込み先の先頭アドレスＡ＃ｎ（ｎは１〜Ｎ）を決定してディスクリプタ１０２０に書き込む（図３ステップＳ３００）。さらに、転送管理部１１２は、その先頭アドレスＡ＃ｎが有効か否かを示す有効フラグＡＦ＃ｎを「無効」から「有効」に書き換える（図３ステップＳ３０１）。
【００７８】
ディスクリプタ１１１０には、先頭アドレスの情報等を書き込む領域がＮ組用意されているが、書き込む順番は予め決められている。例えば図２の例では、転送管理部１１２は、１番目の先頭アドレスＡ＃１、２番目の先頭アドレスＡ＃２、・・・・、Ｎ番目の先頭アドレスＡ＃Ｎと順番に書き込む。
【００７９】
一通り書き込んだ後に、再び１番目のパケットの転送が可能になったときには、１番目の先頭アドレスＡ＃１から順番にディスクリプタ１１１０に書き込むようにすればよい。先頭アドレスＡ＃ｎの書き込みが可能か否かは、例えば先頭アドレスＡ＃ｎに対応する有効フラグＡＦ＃ｎが「無効」であれば可能と判断すればよい。なお、この動作は従来技術と同等である。
【００８０】
最初に、結合パケット転送部１１１内のＤＭＡコントローラ１１１１は、ディスクリプタ１１１０の読出および書込の順を示す変数ｎを１に初期化する（図４ステップＳ４００）。
そして、ＤＭＡコントローラ１１１１は、パケット結合部１１０から転送要求が発行されると、ディスクリプタ１１１０のｎ番目の有効フラグＡＦ＃ｎを確認する（図４ステップＳ４０１）。
【００８１】
ＤＭＡコントローラ１１１１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図４ステップＳ４０２においてｙｅｓ）、パケット結合部１１０からの情報（結合したパケットの数と各パケットのサイズ）を確認して、パケットメモリ１０１に転送すべきデータが、結合されていない単体のパケットか結合パケットかを確認する（図４ステップＳ４０３）。
【００８２】
ＤＭＡコントローラ１１１１は、パケットメモリ１０１に転送すべきデータが結合パケットではない場合（結合したパケットの数が１の場合）、対応する有効フラグＡＦ＃ｎが「有効」であることを確認したｎ番目の先頭アドレスＡ＃ｎをディスクリプタ１１１０から読み出し（図４ステップＳ４０４）、対応するｎ番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込むＤＭＡ転送を行う（図４ステップＳ４０５）。
【００８３】
このＤＭＡ転送の完了後、ＤＭＡコントローラ１１１１は、ｎ番目のパケットのパケット長を示す受信データサイズＬ＃ｎをディスクリプタ１１１０に書き込むと共に、ディスクリプタ１１１０に設定されている、ｎ番目のパケットの書き込みが完了したことを示す受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図４ステップＳ４０６）。
【００８４】
ＤＭＡコントローラ１１１１は、変数ｎがＮと等しいかどうかを判定する（図４ステップＳ４０７）。ＤＭＡコントローラ１１１１は、変数ｎがＮに達していない場合（ステップＳ４０７においてｎｏ）、変数ｎを１増やし（図４ステップＳ４０８）、ステップＳ４０１に戻る。また、ＤＭＡコントローラ１１１１は、変数ｎがＮに達した場合（ステップＳ４０７においてｙｅｓ）、ステップＳ４００に戻る。
【００８５】
上記のとおりディスクリプタ１１１０には、有効フラグＡＦ＃１〜ＡＦ＃Ｎの領域がＮ個（組）用意されているが、有効フラグＡＦ＃１〜ＡＦ＃Ｎを確認する順番は予め決められている。例えば、図２、図４の例では、ＤＭＡコントローラ１１１１は、１番目の有効フラグＡＦ＃１、２番目の有効フラグＡＦ＃２、・・・・、Ｎ番目の有効フラグＡＦ＃Ｎと順番に確認する。一通り確認が終わった後、ＤＭＡコントローラ１１１１は、変数ｎを１に初期化し（ステップＳ４００）、再び１番目の有効フラグＡＦ＃１から順番に確認する。
【００８６】
ディスクリプタ１１１０には、受信データサイズＬ＃１〜Ｌ＃Ｎと受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを書き込む領域もＮ組用意されている。ＤＭＡコントローラ１１１１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることが確認されたｎ番目の有効フラグＡＦ＃ｎに対応する番号の領域に、受信データサイズＬ＃ｎと受信完了フラグＷＦ＃ｎとを書き込む。
【００８７】
また、ＤＭＡコントローラ１１１１は、パケットメモリ１０１に転送すべきデータが結合パケットの場合（結合したパケットの数ｋが２以上の場合）、結合したパケットの数ｋを確認し（図５ステップＳ４０９）、ディスクリプタ１１１０内の「ｋ−１」個の有効フラグＡＦ＃（ｎ＋１）〜ＡＦ＃（ｎ＋ｋ−１）を確認する（図５ステップＳ４１０）。ここで、「ｋ−１」個の有効フラグを確認する理由は、ｎ番目の有効フラグＡＦ＃ｎを既にステップＳ４０２で確認しているからである。
【００８８】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１１１１は、ＡＦ＃１からＡＦ＃（ｋ−１）までの有効フラグを確認すればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１１１１は、ＡＦ＃（ｎ＋１）からＡＦ＃ＮまでとＡＦ＃１からＡＦ＃（ｋ−１−（Ｎ−ｎ））までの有効フラグを確認すればよい。
【００８９】
ＤＭＡコントローラ１１１１は、ステップＳ４０２，Ｓ４１０の処理により、確認したｋ個の有効フラグが全て「有効」の場合（ステップＳ４１０においてｙｅｓ）、確認したｋ個の有効フラグの中で最初の有効フラグＡＦ＃ｎに対応するｎ番目の先頭アドレスＡ＃ｎをディスクリプタ１１１０から読み出し（図５ステップＳ４１１）、対応する結合パケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込むＤＭＡ転送を行う（図５ステップＳ４１２）。
【００９０】
このＤＭＡ転送の完了後、ＤＭＡコントローラ１１１１は、パケット結合部１１０から通知された情報（結合した各パケットのサイズ）に基づいて、パケットメモリ１０１にＤＭＡ転送した結合パケットを構成する各パケットのパケット長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１１１０に書き込む（図５ステップＳ４１３）。
【００９１】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１１１１は、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズをディスクリプタ１１１０に書き込むようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１１１１は、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズをディスクリプタ１１１０に書き込むようにすればよい。
【００９２】
続いて、ＤＭＡコントローラ１１１１は、ディスクリプタ１１１０内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、結合パケットを構成するｋ個のパケットのうち、初めの「ｋ−１」個のパケットのパケット長に応じて書き換える（図５ステップＳ４１４）。
【００９３】
具体的には、ＤＭＡコントローラ１１１１は、先頭アドレスＡ＃（ｎ＋１）については、先頭アドレスＡ＃ｎと、結合パケットを構成するｋ個のパケットのうち１番目のパケットのパケット長（受信データサイズＬ＃ｎが示す値）とを足した値に書き換える。また、ＤＭＡコントローラ１１１１は、先頭アドレスＡ＃（ｎ＋ｋ−１）については、先頭アドレスＡ＃（ｎ＋ｋ−２）と、結合パケットを構成するｋ個のパケットのうち「ｋ−１」番目のパケットのパケット長（受信データサイズＬ＃（ｎ＋ｋ−２）が示す値）とを足した値に書き換える。
【００９４】
このように、ＤＭＡコントローラ１１１１は、先頭アドレスＡ＃ｉを書き換える場合、１つ前の先頭アドレスＡ＃（ｉ−１）と、結合パケットを構成するパケットのうち「ｉ−１」番目のパケットのパケット長とを足した値に書き換えるようにすればよい。
【００９５】
次に、ＤＭＡコントローラ１１１１は、パケットメモリ１０１にＤＭＡ転送した結合パケットを構成する各パケットに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「未了」から「完了」に書き換える（図５ステップＳ４１５）。
【００９６】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１１１１は、受信完了フラグＷＦ＃ｎと、ＷＦ＃１からＷＦ＃（ｋ−１）までの受信完了フラグとを「未了」から「完了」に書き換えるようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１１１１は、受信完了フラグＷＦ＃ｎと、ＷＦ＃（ｎ＋１）からＷＦ＃ＮまでとＷＦ＃１からＷＦ＃（ｋ−１−（Ｎ−ｎ））までの受信完了フラグとを「完了」に書き換えるようにすればよい。
【００９７】
そして、ＤＭＡコントローラ１１１１は、ｎ＋ｋ＞Ｎが成立するかどうかを確認し（図５ステップＳ４１６）、ｎ＋ｋがＮより大きい場合は、変数ｎをｎ＝ｎ＋ｋ−Ｎとし（図５ステップＳ４１７）とし、ステップＳ４０１に戻る。また、ＤＭＡコントローラ１１１１は、ｎ＋ｋがＮ以下の場合は、変数ｎをｎ＝ｎ＋ｋとし（図５ステップＳ４１８）とし、ステップＳ４０１に戻る。
【００９８】
こうして、本実施例のＤＭＡ転送では、ｋ個のパケットが連結された結合パケットを纏めてパケットメモリ１０１に転送し、ディスクリプタ１１１０の先頭アドレスの情報を一部書き換えることにより、パケット処理装置のプロセッサ（受信処理部１０３とプロトコル処理部１０４）に対して各パケットの先頭が書き込まれたアドレスを通知するようにしている。
【００９９】
受信処理部１０３（プロセッサが実行するソフトウェア）は、定期的にディスクリプタ１１１０の受信完了フラグＷＦ＃ｎ（ｎは１〜Ｎ）を確認して、受信完了フラグＷＦ＃ｎが「完了」を示している場合（図６ステップＳ５０１においてｙｅｓ）、対応するｎ番目の先頭アドレスＡ＃ｎの情報と受信データサイズＬ＃ｎの情報とに基づいてパケットメモリ１０１からｎ番目のパケットを読み出してプロトコル処理部１０４へ渡す（図６ステップＳ５０２）。
【０１００】
プロトコル処理部１０４で必要な処理が行われた後に（図６ステップＳ５０３においてｙｅｓ）、受信処理部１０３（プロセッサが実行するソフトウェア）は、プロトコル処理が終わったｎ番目のパケットに対応する、ディスクリプタ１１１０のｎ番目の有効フラグＡＦ＃ｎを「有効」から「無効」に書き換えると共に、ディスクリプタ１１１０のｎ番目の受信完了フラグＷＦ＃ｎを「完了」から「未了」に書き換える（図６ステップＳ５０４）。
【０１０１】
ディスクリプタ１１１０には、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎの領域がＮ個（組）あるが、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する順番は予め決められている。例えば、受信処理部１０３（プロセッサが実行するソフトウェア）は、１番目の受信完了フラグＷＦ＃１、２番目の受信完了フラグＷＦ＃２、・・・・、Ｎ番目の受信完了フラグＷＦ＃Ｎと順番に確認する。一通り確認が終わった後には、再び１番目の受信完了フラグＷＦ＃１から順番に確認する。
【０１０２】
なお、定期的にディスクリプタ１１１０の受信完了フラグＷＦ＃ｎを確認する代わりに、ＤＭＡ転送の完了後にＤＭＡコントローラ１１１１がプロセッサに対して割り込み処理要求を発行し、この割り込み処理要求に応じて受信処理部１０３（プロセッサが実行するソフトウェア）が、ディスクリプタ１１１０の受信完了フラグＷＦ＃ｎ（ｎは１〜Ｎ）を確認するようにしてもよい。
【０１０３】
以上のプロセッサ（ソフトウェア）の動作は図３５の構成の従来技術のプロセッサ（ソフトウェア）の動作と同等であり、結合パケットを元の複数のパケットに復元する処理を受信処理用のソフトウェアで実現する必要はない。すなわち、受信処理部１０３とプロトコル処理部１０４とは、本参考例のように結合パケットがパケットメモリ１０１に書き込まれる場合でも、従来と同じ処理を行えばよい。
【０１０４】
以上に説明したように、本参考例のパケット処理装置は、纏めＤＭＡ転送を実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ１１１０に書き込む手段（ＤＭＡコントローラ１１１１）を内蔵する結合パケット転送部１１１を備えている。ＤＭＡコントローラ１１１１はハードウェアで実装可能なので、復元処理のソフトウェアでの実行を不要とし、かつ、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０１０５】
なお、従来の図３８の構成、もしくは図４１の構成のパケット処理装置において、結合パケットを元の複数のパケットに復元する処理をプロセッサ（ソフトウェア）で実行する場合と比較すると、本参考例では、復元処理をプロセッサ（ソフトウェア）で行う必要がなくなるので、１パケットの処理に必要となるプロセッサの処理が軽くなり、受信性能が向上する（単位時間に処理できるパケットの数が増加する）という効果がある。また、本参考例では、１パケットの処理に必要となるプロセッサの消費電力が小さくなるという効果もある。
【０１０６】
また、本参考例では、図３５の構成の受信処理部１０３およびプロトコル処理部１０４用のソフトウェアをそのまま本参考例のパケット処理装置で使用することができる。これは、ハードウェア（ＤＭＡコントローラ１１１１）を変えるだけで、纏めＤＭＡによる受信性能の向上が実現できることを示している。
【０１０７】
なお、本参考例では、プロセッサ（ソフトウェア）が用意するパケットメモリ１０１上のアドレス領域を複数のパケットで共有するので、共有する全てのパケットの受信処理（プロトコル処理部１０４への転送）が完了するまでそのアドレス領域は再利用できない。
【０１０８】
また、転送管理部１１２（プロセッサが実行するソフトウェア）は、結合パケットの最大サイズの書き込みが可能なサイズのアドレス領域を用意してディスクリプタ１１１０に設定する必要が有る。結合パケットの最大サイズは、結合閾値制御部１０７に設定される閾値に許容最大パケット長を足した値となる。
【０１０９】
また、本参考例のパケット処理装置で纏めＤＭＡ転送を正常に行うため、転送管理部１１２（プロセッサが実行するソフトウェア）は、事前に、パケットメモリ１０１内に、Ｎ×ＤＢ＿ｍｕｘ（ＤＢ＿ｍｕｘは結合パケットの最大サイズ）のバッファ領域を確保しておく必要がある。この領域確保は、図３８の構成の場合と同等である。
【０１１０】
例えば、本参考例において、上記のバッファ領域をパケットメモリ１０１内の連続した領域で用意する場合、このバッファ領域の先頭アドレスは、転送管理部１１２（プロセッサが実行するソフトウェア）が設定する、図２中の先頭アドレスＡ＃１である。一方、バッファ領域の最終アドレスは、先頭アドレスＡ＃１＋（Ｎ×ＤＢ＿ｍｕｘ）−１となる。この場合、転送管理部１１２（プロセッサが実行するソフトウェア）が設定する、図２中の先頭アドレスＡ＃Ｎは、先頭アドレスＡ＃１＋（Ｎ−１）×ＤＢ＿ｍｕｘである。
【０１１１】
このような領域確保により、結合パケットのＤＭＡ転送の転送先アドレスがＡ＃Ｎとなった場合でも、このアドレスＡ＃Ｎから上記のバッファ領域の最終アドレスまでＤＢ＿ｍｕｘ分の領域がパケットメモリ１０１に確保されているので、結合パケットをこのＤＢ＿ｍｕｘ分の連続した領域に確実に書き込むことができる。
【０１１２】
仮に、アドレスＡ＃Ｎからバッファ領域の最終アドレスまでの領域がＤＢ＿ｍｕｘより小さい場合、書き込むべき結合パケットの一部を本来書き込んではいけない領域に書き込んでしまうケースが発生することになる。
【０１１３】
また、パケットメモリ１０１内に確保するバッファ領域を連続した領域ではなく、例えばＮ個の領域に非連続で用意する場合、ＤＢ＿ｍｕｘ分の領域をあらかじめＮ個用意し、それぞれの領域の先頭アドレスをＡ＃１〜Ａ＃Ｎとして転送管理部１１２（プロセッサが実行するソフトウェア）で設定することにより、結合パケットをＤＢ＿ｍｕｘ分の連続した領域に確実に書き込むことができ、本来書き込んではいけない領域に書き込んでしまうような不具合は発生しない。
【０１１４】
本参考例のパケット処理装置では、ＤＭＡ転送後にＤＭＡコントローラ１１１１がディスクリプタ１１１０の情報（先頭アドレス、受信データサイズ、受信完了フラグ）を書き換えることにより、ソフトウェアでの復元処理を不要としている。
【０１１５】
復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図４１の結合パケット分離部１０８のハードウェアで実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図４１の結合パケット分離部１０８に通知する手段が必要となる。
【０１１６】
また、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図４１の結合パケット分離部１０８のハードウェアで実現しようとすると、ＤＭＡ転送完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０１１７】
これに対して、本参考例のパケット処理装置では、１つの結合パケットのＤＭＡ転送が完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図４１の結合パケット分離部１０８のハードウェアで実現する場合と比較して、本参考例の方がハードウェアの規模が小さい。
【０１１８】
また、復元処理に必要な情報をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図４１の結合パケット分離部１０８に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。具体的には、結合された各パケットのサイズを通知するために、例えば各パケットの前にパケットサイズ等を書き込んだヘッダを付与して付加ヘッダをパケットデータと共にＤＭＡ転送する方法が考えられる。
【０１１９】
しかし、復元処理に必要な情報を結合パケットの中に書き込む場合、ＤＭＡ転送に使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの転送に使用できる実効帯域が小さくなり、その結果、ＤＭＡ転送の性能が劣化してしまうという問題が発生する。
本参考例のパケット処理装置では、復元処理に必要な情報を結合パケットに書き込む必要がないので、上記のような実効帯域の劣化は起こらない。
【０１２０】
本参考例では、結合パケット転送部１１１をハードウェアで実現する例を示したが、受信処理に使用するプロセッサとは別のプロセッサとソフトウェアにより結合パケット転送部１１１の少なくとも一部の処理を実装することも可能である。このように結合パケット転送部１１１の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケットを元の複数のパケットに復元する処理を受信処理部１０３もしくはプロトコル処理部１０４で行う必要がなくなるので、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０１２１】
また、結合パケット転送部１１１の少なくとも一部の処理をソフトウェアで実現する場合でも、結合パケット転送部１１１をハードウェアで実現する場合と同様に、結合パケットを元の複数のパケットに復元する処理に必要となるハードウェアの規模が小さくなる効果（複数の結合パケット分の情報を保持する必要がないことによる効果）、およびパケットデータの転送に使用できる実効帯域の劣化が起こらない効果（復元処理に必要な情報を結合パケットの中に加えないことによる効果）を得ることができる。
【０１２２】
本参考例の変形として、ディスクリプタ１１１０に、先頭アドレスの書き換えを行ったか否かを示す書き換え実行フラグの領域を追加してもよい。例えば、先頭アドレスＡ＃１〜Ａ＃Ｎの初期設定を行う転送管理部１１２を実装しているプロセッサがキャッシュメモリを持っている場合、ディスクリプタ１１１０に書き込んだ先頭アドレスＡ＃１〜Ａ＃Ｎがキャッシュメモリ内にコピーされる。
【０１２３】
しかし、ＤＭＡコントローラ１１１１によりディスクリプタ１１１０内の先頭アドレスが書き換えられたときに、転送管理部１１２を実装しているプロセッサのキャッシュメモリ内の該当の情報は書き換えが行われない場合がある。このような場合でも、プロセッサが、キャッシュメモリ内の情報ではなく、ディスクリプタ１１１０内の情報を読み出すために、書き換え実行フラグを参照することができる。
【０１２４】
具体的には、プロセッサは、書き換え実行フラグを参照した結果、ディスクリプタ１１１０内の先頭アドレスが書き換えられていないと判断した場合、キャッシュメモリ内の情報を読み出して使用し、ディスクリプタ１１１０内の先頭アドレスが書き換えられたと判断した場合、一時的にキャッシュを無効にしてディスクリプタ１１１０内の先頭アドレスを直接読み出して使用すればよい。
【０１２５】
結合パケット転送部１１１は、図５のステップＳ４１４の処理でディスクリプタ１１１０内の先頭アドレスを書き換えたときに、ディスクリプタ１１１０内の対応する書き換え実行フラグを、「書き換え未実行」から「書き換え実行」に書き換えるようにすればよい。
【０１２６】
また、本参考例の別の変形例として、転送管理部１１２（プロセッサが実行するソフトウェア）が書き込む先頭アドレスの領域とは別に、ＤＭＡコントローラ１１１１が変更後の先頭アドレスを書き込む領域をディスクリプタ１１１０に用意してもよい。この場合、受信処理部１０３（プロセッサが実行するソフトウェア）は、変更後の先頭アドレスが書き込まれた領域を参照することになる。また、図５のステップＳ４１４で説明した処理は、先頭アドレスの書き換えではなく、変更後の先頭アドレスを書き込む処理となる。
【０１２７】
また、本参考例において、ＤＭＡコントローラ１１１１とそれぞれのＤＭＡコントローラ１１１１に対応するディスクリプタ１１１０とを複数搭載する構成としてもよい。また、パケット結合部１１０においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成としてもよい。
【０１２８】
パケットの種類別にＤＭＡコントローラ１１１１とディスクリプタ１１１０とを用意し、パケットの種類に応じて複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
【０１２９】
また、本参考例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成としてもよいし、バーチャルマシン毎に複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成としてもよい。
【０１３０】
ＣＰＵコア毎もしくはバーチャルマシン毎に複数のＤＭＡコントローラ１１１１と複数のディスクリプタ１１１０とを使い分ける構成とすることにより、ＤＭＡコントローラ等が１個のみの場合と比較して、ソフトウェアによる受信処理の性能を向上させることができる。
【０１３１】
［第２の参考例］
次に、本発明の第２の参考例について説明する。第１の参考例では、ＤＭＡ転送を用いる場合を前提として説明したが、ＤＭＡ転送を用いないパケット処理装置においても、複数のパケットを連結した結合パケットを纏めてパケットメモリに書き込む纏め書き込みにより、パケットメモリへの書き込みの実効スループットが大きくなる場合がある（例えばパケットメモリがＤＲＡＭ（Dynamic Random Access Memory）で構成されている場合等）。
【０１３２】
図７は本発明の第２の参考例に係るパケット処理装置の構成を示すブロック図である。図７のパケット処理装置は、回線対応部１００と、パケットメモリ１０１と、受信処理部１０３と、プロトコル処理部１０４と、受信バッファ１０５と、結合閾値制御部１０７と、パケット結合部１１０と、転送管理部１１２と、結合パケット転送部１１３とから構成される。
【０１３３】
図７の構成と図１の構成の違いは、図１における転送手段を、パケット処理装置のプロセッサ（ソフトウェア）による書き込み手段に置き換えた点である。つまり、本参考例は、図１の結合パケット転送部１１１を、ソフトウェアによる結合パケット転送部１１３に置き換えたものである。
【０１３４】
回線対応部１００とパケットメモリ１０１と受信処理部１０３とプロトコル処理部１０４と受信バッファ１０５と結合閾値制御部１０７と転送管理部１１２とは、図１の構成と同等である。
【０１３５】
図７のパケット結合部１１０は、回線対応部１００において受信されたパケットをパケット結合用の受信バッファ１０５に転送する。このとき、パケット結合部１１０は、回線対応部１００において受信されたパケットと受信バッファ１０５中に既に格納されているパケットとを結合して１つの結合パケットになるように、パケットを受信バッファ１０５に格納する。そして、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが、結合閾値制御部１０７に設定された閾値を超えると、結合パケットのパケットメモリ１０１への転送要求を発行する。
【０１３６】
なお、パケット結合部１１０は、受信バッファ１０５中の結合パケットの大きさが閾値を超える前に、タイムアウト（パケット間の間隔が予め定められた期間を超えた場合等）が発生した場合に、転送要求を発行するようにしてもよい。
さらに、パケット結合部１１０は、受信バッファ１０５において結合したパケットの数と各パケットのサイズとを記録し、結合パケットの転送要求を発行する際に、結合したパケットの数と各パケットのサイズの情報を結合パケット転送部１１３に対して通知する。
【０１３７】
結合パケット転送部１１３（プロセッサが実行するソフトウェア）は、複数のパケットが結合された結合パケットをパケットメモリ１０１に書き込み、受信処理部１０３の起動要求を行なう。また、結合パケット転送部１１３（プロセッサが実行するソフトウェア）は、パケット結合部１１０から通知された、結合したパケットの数と各パケットのサイズの情報を用いて、転送管理部１１２（プロセッサが実行するソフトウェア）がパケット毎に用意したディスクリプタ１１３０にサイズ等の情報を書き込む。
【０１３８】
図８に示すように、ディスクリプタ１１３０の構成は、第１の参考例のディスクリプタ１１１０の構成と同等である。ただし、本参考例では、結合パケット転送部１１１の代わりに、結合パケット転送部１１３（プロセッサが実行するソフトウェア）がディスクリプタ１１３０への書き込みを行うという違いがある。
【０１３９】
図９、図１０は結合パケット転送部１１３（プロセッサが実行するソフトウェア）の動作を説明するフローチャートである。最初に、結合パケット転送部１１３は、変数ｎを１に初期化し（図９ステップＳ６００）、パケット結合部１１０から転送要求が発行された後に、ディスクリプタ１１３０の有効フラグＡＦ＃ｎを確認する（図９ステップＳ６０１）。
【０１４０】
結合パケット転送部１１３は、先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図９ステップＳ６０２においてｙｅｓ）、パケット結合部１１０からの情報を確認して、パケットメモリ１０１に転送すべきデータが単体のパケットか結合パケットかを確認する（図９ステップＳ６０３）。
【０１４１】
結合パケット転送部１１３は、パケットメモリ１０１に転送すべきデータが結合パケットではない場合、有効フラグＡＦ＃ｎが「有効」であることを確認した先頭アドレスＡ＃ｎをディスクリプタ１１３０から読み出し（図９ステップＳ６０４）、対応するｎ番目のパケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込む（図９ステップＳ６０５）。
【０１４２】
この書き込み完了後、結合パケット転送部１１３は、受信データサイズＬ＃ｎをディスクリプタ１１３０に書き込むと共に、ディスクリプタ１１３０に設定されている受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図９ステップＳ６０６）。以上のステップＳ６００〜Ｓ６０６およびステップＳ６０７，Ｓ６０８の処理は、図４のステップＳ４００〜Ｓ４０８の処理と同等である。
【０１４３】
また、結合パケット転送部１１３は、パケットメモリ１０１に転送すべきデータが結合パケットの場合、結合したパケットの数ｋを確認し（図１０ステップＳ６０９）、ディスクリプタ１１３０内の「ｋ−１」個の有効フラグＡＦ＃（ｎ＋１）〜ＡＦ＃（ｎ＋ｋ−１）を確認する（図１０ステップＳ６１０）。
【０１４４】
結合パケット転送部１１３は、確認したｋ個の有効フラグが全て「有効」の場合（ステップＳ６１０においてｙｅｓ）、確認したｋ個の有効フラグの中で最初の有効フラグＡＦ＃ｎに対応する先頭アドレスＡ＃ｎをディスクリプタ１１３０から読み出し（図１０ステップＳ６１１）、対応する結合パケットをパケットメモリ１０１の先頭アドレスＡ＃ｎから始まる領域に書き込む（図１０ステップＳ６１２）。
【０１４５】
この書き込み完了後、結合パケット転送部１１３は、パケットメモリ１０１に書き込んだ結合パケットを構成する各パケットのパケット長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）をディスクリプタ１１３０に書き込む（図１０ステップＳ６１３）。
【０１４６】
続いて、結合パケット転送部１１３は、ディスクリプタ１１３０内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、結合パケットを構成するｋ個のパケットのうち、初めの「ｋ−１」個のパケットのパケット長に応じて書き換える（図１０ステップＳ６１４）。
【０１４７】
次に、結合パケット転送部１１３は、パケットメモリ１０１に書き込んだ結合パケットを構成する各パケットに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「未了」から「完了」に書き換える（図１０ステップＳ６１５）。
【０１４８】
以上のステップＳ６０９〜Ｓ６１５およびステップＳ６１６〜Ｓ６１８の処理は、図５のステップＳ４０９〜Ｓ４１８の処理と同等である。ステップＳ６１０，Ｓ６１３，Ｓ６１５において、ｎ＝Ｎ、またはｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ステップＳ４１０，Ｓ４１３，Ｓ４１５で説明した処理を実行すればよい。
【０１４９】
こうして、本参考例のパケット処理装置は、纏め書き込みを実現することができ、かつ結合パケットを元の複数のパケットに復元するための情報をディスクリプタ１１３０に書き込む手段（結合パケット転送部１１３）を備えている。本参考例によれば、復元処理の受信処理部１０３、プロトコル処理部１０４、もしくは、図４１の結合パケット分離部１０８での実行を不要とすることができ、かつ、纏め書き込みの効果による高い受信性能を実現することが可能となる。
【０１５０】
また、本参考例では、図３５の構成の受信処理部１０３およびプロトコル処理部１０４用のソフトウェアをそのまま本参考例のパケット処理装置で使用することができる。
なお、本参考例のパケット処理装置で図９、図１０で説明した纏め書き込みを正常に行うため、転送管理部１１２（プロセッサが実行するソフトウェア）は、事前に、パケットメモリ１０１内に、Ｎ×ＤＢ＿ｍｕｘ（ＤＢ＿ｍｕｘは結合パケットの最大サイズ）のバッファ領域を確保しておく必要がある。この領域確保は、図３８および図１の構成の場合と同等である。
【０１５１】
本参考例のパケット処理装置では、纏め書き込み完了後に結合パケット転送部１１３がディスクリプタ１１３０の情報（先頭アドレス、受信データサイズ、受信完了フラグ）を書き換えることにより、復元処理を不要としている。
【０１５２】
復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図４３の結合パケット分離部１０８で実現しようとすると、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図４３の結合パケット分離部１０８に通知する手段が必要となる。
【０１５３】
また、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図４３の結合パケット分離部１０８で実現しようとすると、纏め書き込み完了後、受信処理が起動されるまで、場合によっては複数の結合パケット分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０１５４】
これに対して、本参考例のパケット処理装置では、１つの結合パケットの纏め書き込みが完了した時点で結合パケットの復元処理は終わっているので、複数の結合パケット分の情報を保持する必要がない。したがって、復元処理を受信処理部１０３、プロトコル処理部１０４、もしくは図４３の結合パケット分離部１０８で実現する場合と比較して、本参考例の方がハードウェアの規模が小さい。これは、結合パケットを元の複数のパケットに復元する処理をソフトウェアで実装する場合で比較しても同じである。
【０１５５】
例えば、図４３の構成でパケットメモリ１０１と回線対応部１００以外の構成をすべてソフトウェアで実現した場合、複数の結合パケット分の復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケットメモリ１０１等に保持しておく必要がある。
【０１５６】
これに対して、本参考例の構成でパケットメモリ１０１と回線対応部１００以外の構成をすべてソフトウェアで実現した場合は、複数の結合パケット分の情報（結合したパケットの数、パケット毎のサイズ）を保持する必要がない。すなわち、１つの結合パケット分のみの復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）をパケットメモリ１０１等に保持しておくだけでよい。
【０１５７】
つまり、本参考例の構成は、図４３の構成と比較して、復元処理に必要な情報（結合したパケットの数、パケット毎のサイズ）の保持に使用するパケットメモリ１０１等の容量（書き込み可能なビット数）が小さくてもよいことになり、必要となるハードウェアの規模を削減することができる。
【０１５８】
また、復元処理に必要な情報をパケット結合部１０６から受信処理部１０３、プロトコル処理部１０４、もしくは図４３の結合パケット分離部１０８に通知する手段として、復元処理に必要な情報を結合パケットの中に書き込むことも可能である。具体的には、結合された各パケットのサイズを通知するために、例えば各パケットの前にパケットサイズ等を書き込んだヘッダを付与して付加ヘッダをパケットデータと共に書き込みする方法が考えられる。しかし、この場合、纏め書き込みに使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のパケットデータの書き込みに使用できる実効帯域が小さくなり、その結果、纏め書き込みの性能が劣化する。
【０１５９】
本参考例のパケット処理装置では、復元処理に必要な情報を、パケットメモリ１０１ではなく、パケットメモリ１０１が接続されているバスを使用しない別のメモリ（パケット結合部１１０からの書き込みと結合パケット転送部１１３からの読み出しだけが可能であれば良い）に保持することができ、上記のような実効帯域の劣化は起こらない。
【０１６０】
第１の参考例と同様に、本参考例の変形として、ディスクリプタ１１３０に、先頭アドレスの書き換えを行ったか否かを示す書き換え実行フラグの領域を追加してもよい。この場合、結合パケット転送部１１３は、図１０のステップＳ６１４の処理でディスクリプタ１１３０内の先頭アドレスを書き換えたときに、ディスクリプタ１１３０内の対応する書き換え実行フラグを、「書き換え未実行」から「書き換え実行」に書き換えるようにすればよい。
【０１６１】
また、第１の参考例と同様に、転送管理部１１２（プロセッサが実行するソフトウェア）が書き込む先頭アドレスの領域とは別に、結合パケット転送部１１３が変更後の先頭アドレスを書き込む領域をディスクリプタ１１３０に用意してもよい。
【０１６２】
また、本参考例において、パケット結合部１１０においてパケットの種類を判定して同じ種類のパケットを結合パケットとして纏める構成としてもよいし、パケットの種類に応じて複数のディスクリプタ１１３０を使い分ける構成としてもよい。パケットの種類別にディスクリプタ１１３０を用意し、パケットの種類に応じて複数のディスクリプタ１１３０を使い分ける構成とすると、パケットの種類毎に異なる受信処理を行うことが容易になる。
【０１６３】
また、本参考例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のディスクリプタ１１３０を使い分ける構成としてもよいし、バーチャルマシン毎に複数のディスクリプタ１１３０を使い分ける構成としてもよい。ＣＰＵコア毎もしくはバーチャルマシン毎に複数のディスクリプタ１１３０を使い分ける構成とすることにより、ディスクリプタ１１３０が１個のみの場合と比較して、ソフトウェアによる書き込み処理および読み出し処理の性能が向上する。
【０１６４】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。第１、第２の参考例では、受信したパケットをパケットメモリに転送する場合を前提として説明したが、本発明は、パケット処理装置において、受信したパケットをパケットメモリに転送する代わりに、受信したパケットに対して何らかの処理を行った結果のデータをメモリに転送する場合に、複数の処理結果のデータを連結して纏めＤＭＡ転送もしくは纏め書き込みを行うものである。
【０１６５】
図１１は、本発明の第１の実施例に係るパケット処理装置の構成を示すブロック図である。図１１のパケット処理装置は、通信回線（不図示）と接続され、通信回線からデータを受信する回線対応部１００と、通信回線から受信したパケットの処理を行って処理結果のデータを出力するパケット処理部１１４と、パケット処理部１１４から出力されたデータが格納されるデータ用メモリ１１５と、データ用メモリ１１５に格納されたデータに対して処理を施すデータ処理部１１６と、データ用メモリ１１５に格納されたデータをデータ処理部１１６へ渡す受信処理部１１７と、データ結合用の受信バッファ１１８と、データブロックの大きさを規制する閾値があらかじめ設定された結合閾値制御部１１９と、パケット処理部１１４から出力された複数のデータを連結してデータブロックを生成するデータ結合部１２０と、データ結合部１２０によって生成されたデータブロックをデータ用メモリ１１５にＤＭＡ転送する結合データ転送部１２１と、予め定められたメモリ上のデータ領域であるディスクリプタ１２１０の初期設定を行う転送管理部１２２とから構成される。なお、転送管理部１２２については、受信処理部１１７の一部として構成しても良い。
【０１６６】
図１１の構成と図１の構成の違いは、パケット処理部１１４を追加し、パケットメモリ１０１、受信処理部１０３、プロトコル処理部１０４、受信バッファ１０５、結合閾値制御部１０７、パケット結合部１１０、結合パケット転送部１１１、転送管理部１１２を、それぞれデータ用メモリ１１５、受信処理部１１７、データ処理部１１６、受信バッファ１１８、結合閾値制御部１１９、データ結合部１２０、結合データ転送部１２１、転送管理部１２２に置き換えた点である。
回線対応部１００は、図１の構成と同等である。
【０１６７】
パケット処理部１１４は、回線対応部１００が出力するパケットに対して処理を行って処理結果のデータを出力する。ここでの処理の内容は、例えば、パケット長が予め規定されていたサイズを超えていた場合にパケットの先頭から既定サイズ分のデータを抽出して出力する処理や、ＩＰ（Internet Protocol）ヘッダ等の特定のデータを抽出して出力する処理や、パケット種別毎にパケット数をカウントアップして更新されたカウンタの情報を出力する処理等、さまざまな処理が考えられる。
【０１６８】
データ結合部１２０は、パケット処理部１１４が出力したデータをデータ結合用の受信バッファ１１８に転送する。このとき、データ結合部１２０は、パケット処理部１１４が出力したデータと受信バッファ１１８中に既に格納されているデータとを連結して１つのデータブロックになるように、データを受信バッファ１１８に格納する。そして、データ結合部１２０は、受信バッファ１１８中のデータブロックの大きさが、結合閾値制御部１１９に設定された閾値を超えると、データブロックのデータ用メモリ１１５への転送要求を発行する。
【０１６９】
なお、データ結合部１２０は、受信バッファ１１８中のデータブロックの大きさが閾値を超える前に、タイムアウト（パケット間の受信間隔が予め定められた期間を超えた場合等）が発生した場合に、転送要求を発行するようにしてもよい。
【０１７０】
さらに、データ結合部１２０は、受信バッファ１１８において結合したデータの数と各データのサイズとを記録し、データブロックの転送要求を発行する際に、結合したデータの数と各データのサイズとを結合データ転送部１２１に対して通知する。
【０１７１】
なお、パケット処理部１１４が出力するデータのサイズが予め決まっている一定値（パケット毎に変化しない）の場合は、データのサイズの通知を省略することが可能であるが、その場合でも、タイムアウトによる転送が発生した場合等では、結合したデータの数の通知が必要である。
【０１７２】
結合データ転送部１２１は、ＤＭＡコントローラ１２１１から構成される。結合データ転送部１２１は、複数のデータが結合されたデータブロックを１度のＤＭＡ転送により、データ用メモリ１１５に転送し、ハードウェア割り込みを発生させて受信処理部１１７の起動要求を発行する。
なお、パケット処理装置のプロセッサ（不図示）へのハードウェア割り込みの発生を行わないようにしてもよい。
【０１７３】
また、結合データ転送部１２１は、データ結合部１２０から通知された、結合したデータの数と各データのサイズの情報を用いて、転送管理部１２２（プロセッサが実行するソフトウェア）がデータ毎に用意したディスクリプタ１２１０にサイズ等を書き込む。ディスクリプタ１２１０の構成は、図２のディスクリプタ１１１０の説明において「パケット」を「データ」に置き換えたものに相当する。したがって、以下の説明では図２の符号を用いて説明する。
【０１７４】
受信処理部１１７は、起動要求を検知すると、データ毎に用意されているディスクリプタ１２１０に書き込まれているアドレス情報とサイズの情報とに基づいてデータ用メモリ１１５内のデータを読み出してデータ処理部１１６へ渡す。同時に、受信処理部１１７は、データ処理部１１６へ渡したデータ用メモリ分を補充するために、パケット処理装置が持つメモリから新たなデータ用メモリ１１５の領域を確保する。この受信処理部１１７の動作は、図４２の構成の動作と同等であり、図４２の構成で必要であった結合データ分離部１０８ｂの実装は不要である（複数のデータが結合したデータブロックを元の複数のデータに復元する処理は結合データ転送部１２１で行う）。
【０１７５】
データ処理部１１６は、受信処理部１１７から受け取ったデータに対して必要な処理を行う。そして、データ処理部１１６は、必要な処理が終了すると、受信処理部１１７から渡されたデータが格納されていたデータ用メモリ１１５の領域を解放する。
【０１７６】
なお、受信処理部１１７とデータ処理部１１６と転送管理部１２２は、汎用のパーソナルコンピュータやワークステーション上で動作するソフトウェアで実現することもできるし、プログラムと協調して動作するＦＰＧＡ等のハードウェアで実現することも可能である。
データ用メモリ１１５は、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリとして構成可能である。
【０１７７】
回線対応部１００とパケット処理部１１４と結合閾値制御部１１９とデータ結合部１２０と結合データ転送部１２１とは、通信機器あるいは通信ボード上のＦＰＧＡ等により構成可能である。
受信バッファ１１８は、通信機器あるいは通信ボード上のＦＰＧＡ等が持つ記憶領域や、ＦＩＦＯ等の記憶回路により構成可能である。
【０１７８】
次に、ディスクリプタ１２１０を用いた本実施例の動作例を図１１〜図１５を用いて説明する。図１２は転送管理部１２２の動作を説明するフローチャート、図１３、図１４はＤＭＡコントローラ１２１１の動作を説明するフローチャート、図１５は受信処理部１１７の動作を説明するフローチャートである。
【０１７９】
最初に、転送管理部１２２（プロセッサが実行するソフトウェア）は、パケット処理装置の初期設定として、Ｎ個の各データの先頭部の、データ用メモリ１１５上におけるアドレス、すなわち各データの書き込み先の先頭アドレスＡ＃ｎ（ｎは１〜Ｎ）を決定してディスクリプタ１２１０に書き込む（図１２ステップＳ３００ａ）。さらに、転送管理部１２２は、その先頭アドレスＡ＃ｎが有効か否かを示す有効フラグＡＦ＃ｎを「無効」から「有効」に書き換える（図１２ステップＳ３０１ａ）。ディスクリプタ１１１０と同様に、ディスクリプタ１２１０には、先頭アドレスの情報等を書き込む領域がＮ組用意されている。
【０１８０】
最初に、結合データ転送部１２１内のＤＭＡコントローラ１２１１は、ディスクリプタ１２１０の読出および書込の順を示す変数ｎを１に初期化する（図１３ステップＳ４００ａ）。
そして、ＤＭＡコントローラ１２１１は、データ結合部１２０から転送要求が発行されると、ディスクリプタ１２１０のｎ番目の有効フラグＡＦ＃ｎを確認する（図１３ステップＳ４０１ａ）。
【０１８１】
ＤＭＡコントローラ１２１１は、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図１３ステップＳ４０２ａにおいてｙｅｓ）、データ結合部１２０からの情報（結合したデータの数と各データのサイズ）を確認して、データ用メモリ１１５に転送すべきデータが、結合されていない単体のデータかデータブロックかを確認する（図１３ステップＳ４０３ａ）。
【０１８２】
ＤＭＡコントローラ１２１１は、データ用メモリ１１５に転送すべきデータがデータブロックではない場合（結合したデータの数が１の場合）、対応する有効フラグＡＦ＃ｎが「有効」であることを確認したｎ番目の先頭アドレスＡ＃ｎをディスクリプタ１２１０から読み出し（図１３ステップＳ４０４ａ）、対応するｎ番目のデータをデータ用メモリ１１５の先頭アドレスＡ＃ｎから始まる領域に書き込むＤＭＡ転送を行う（図１３ステップＳ４０５ａ）。
【０１８３】
このＤＭＡ転送の完了後、ＤＭＡコントローラ１２１１は、ｎ番目のデータのデータ長を示す受信データサイズＬ＃ｎをディスクリプタ１２１０に書き込むと共に、ディスクリプタ１２１０に設定されている、ｎ番目のデータの書き込みが完了したことを示す受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図１３ステップＳ４０６ａ）。
【０１８４】
ＤＭＡコントローラ１２１１は、変数ｎがＮと等しいかどうかを判定する（図１３ステップＳ４０７ａ）。ＤＭＡコントローラ１２１１は、変数ｎがＮに達していない場合（ステップＳ４０７ａにおいてｎｏ）、変数ｎを１増やし（図１３ステップＳ４０８ａ）、ステップＳ４０１ａに戻る。また、ＤＭＡコントローラ１２１１は、変数ｎがＮに達した場合（ステップＳ４０７ａにおいてｙｅｓ）、ステップＳ４００ａに戻る。
【０１８５】
第１の参考例と同様に、有効フラグＡＦ＃１〜ＡＦ＃Ｎを確認する順番は予め決められている。例えば、図２、図１３の例では、ＤＭＡコントローラ１２１１は、１番目の有効フラグＡＦ＃１、２番目の有効フラグＡＦ＃２、・・・・、Ｎ番目の有効フラグＡＦ＃Ｎと順番に確認する。一通り確認が終わった後、ＤＭＡコントローラ１２１１は、変数ｎを１に初期化し（ステップＳ４００ａ）、再び１番目の有効フラグＡＦ＃１から順番に確認する。
【０１８６】
また、ＤＭＡコントローラ１２１１は、データ用メモリ１１５に転送すべきデータがデータブロックの場合（結合したデータの数ｋが２以上の場合）、結合したデータの数ｋを確認し（図１４ステップＳ４０９ａ）、ディスクリプタ１２１０内の「ｋ−１」個の有効フラグＡＦ＃（ｎ＋１）〜ＡＦ＃（ｎ＋ｋ−１）を確認する（図１４ステップＳ４１０ａ）。
【０１８７】
第１の参考例と同様に、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１は、ＡＦ＃１からＡＦ＃（ｋ−１）までの有効フラグを確認すればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１は、ＡＦ＃（ｎ＋１）からＡＦ＃ＮまでとＡＦ＃１からＡＦ＃（ｋ−１−（Ｎ−ｎ））までの有効フラグを確認すればよい。
【０１８８】
ＤＭＡコントローラ１２１１は、ステップＳ４０２ａ，Ｓ４１０ａの処理により、確認したｋ個の有効フラグが全て「有効」の場合（ステップＳ４１０ａにおいてｙｅｓ）、確認したｋ個の有効フラグの中で最初の有効フラグＡＦ＃ｎに対応するｎ番目の先頭アドレスＡ＃ｎをディスクリプタ１２１０から読み出し（図１４ステップＳ４１１ａ）、対応するデータブロックをデータ用メモリ１１５の先頭アドレスＡ＃ｎから始まる領域に書き込むＤＭＡ転送を行う（図１４ステップＳ４１２ａ）。
【０１８９】
このＤＭＡ転送の完了後、ＤＭＡコントローラ１２１１は、データ結合部１２０から通知された情報（結合した各データのサイズ）に基づいて、データ用メモリ１１５にＤＭＡ転送したデータブロックを構成する各データのデータ長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１２１０に書き込む（図１４ステップＳ４１３ａ）。
【０１９０】
第１の参考例と同様に、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１は、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズをディスクリプタ１２１０に書き込むようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１は、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズをディスクリプタ１２１０に書き込むようにすればよい。
【０１９１】
続いて、ＤＭＡコントローラ１２１１は、ディスクリプタ１２１０内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、データブロックを構成するｋ個のデータのうち、初めの「ｋ−１」個のデータのデータ長に応じて書き換える（図１４ステップＳ４１４ａ）。
【０１９２】
具体的には、ＤＭＡコントローラ１２１１は、先頭アドレスＡ＃（ｎ＋１）については、先頭アドレスＡ＃ｎと、データブロックを構成するｋ個のデータのうち１番目のデータのデータ長（受信データサイズＬ＃ｎが示す値）とを足した値に書き換える。また、ＤＭＡコントローラ１２１１は、先頭アドレスＡ＃（ｎ＋ｋ−１）については、先頭アドレスＡ＃（ｎ＋ｋ−２）と、データブロックを構成するｋ個のデータのうち「ｋ−１」番目のデータのデータ長（受信データサイズＬ＃（ｎ＋ｋ−２）が示す値）とを足した値に書き換える。
【０１９３】
このように、ＤＭＡコントローラ１２１１は、先頭アドレスＡ＃ｉを書き換える場合、１つ前の先頭アドレスＡ＃（ｉ−１）と、データブロックを構成するデータのうち「ｉ−１」番目のデータのデータ長とを足した値に書き換えるようにすればよい。
【０１９４】
次に、ＤＭＡコントローラ１２１１は、データ用メモリ１１５にＤＭＡ転送したデータブロックを構成する各データに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「未了」から「完了」に書き換える（図１４ステップＳ４１５ａ）。
【０１９５】
第１の参考例と同様に、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１は、受信完了フラグＷＦ＃ｎと、ＷＦ＃１からＷＦ＃（ｋ−１）までの受信完了フラグとを「未了」から「完了」に書き換えるようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１は、受信完了フラグＷＦ＃ｎと、ＷＦ＃（ｎ＋１）からＷＦ＃ＮまでとＷＦ＃１からＷＦ＃（ｋ−１−（Ｎ−ｎ））までの受信完了フラグとを「完了」に書き換えるようにすればよい。
【０１９６】
そして、ＤＭＡコントローラ１２１１は、ｎ＋ｋ＞Ｎが成立するかどうかを確認し（図１４ステップＳ４１６ａ）、ｎ＋ｋがＮより大きい場合は、変数ｎをｎ＝ｎ＋ｋ−Ｎとし（図１４ステップＳ４１７ａ）とし、ステップＳ４０１ａに戻る。また、ＤＭＡコントローラ１２１１は、ｎ＋ｋがＮ以下の場合は、変数ｎをｎ＝ｎ＋ｋとし（図１４ステップＳ４１８ａ）とし、ステップＳ４０１ａに戻る。
【０１９７】
こうして、本実施例のＤＭＡ転送では、ｋ個のデータが連結されたデータブロックを纏めてデータ用メモリ１１５に転送し、ディスクリプタ１２１０の先頭アドレスの情報を一部書き換えることにより、パケット処理装置のプロセッサ（受信処理部１１７とデータ処理部１１６）に対して各データの先頭が書き込まれたアドレスを通知するようにしている。
【０１９８】
受信処理部１１７（プロセッサが実行するソフトウェア）は、定期的にディスクリプタ１２１０の受信完了フラグＷＦ＃ｎ（ｎは１〜Ｎ）を確認して、受信完了フラグＷＦ＃ｎが「完了」を示している場合（図１５ステップＳ５０１ａにおいてｙｅｓ）、対応するｎ番目の先頭アドレスＡ＃ｎの情報と受信データサイズＬ＃ｎの情報とに基づいてデータ用メモリ１１５からｎ番目のデータを読み出してデータ処理部１１６へ渡す（図１５ステップＳ５０２ａ）。
【０１９９】
データ処理部１１６で必要な処理が行われた後に（図１５ステップＳ５０３ａにおいてｙｅｓ）、受信処理部１１７（プロセッサが実行するソフトウェア）は、処理が終わったｎ番目のデータに対応する、ディスクリプタ１２１０のｎ番目の有効フラグＡＦ＃ｎを「有効」から「無効」に書き換えると共に、ディスクリプタ１２１０のｎ番目の受信完了フラグＷＦ＃ｎを「完了」から「未了」に書き換える（図１５ステップＳ５０４ａ）。
【０２００】
第１の参考例と同様に、ディスクリプタ１２１０には、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎの領域がＮ個（組）あるが、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する順番は予め決められている。
【０２０１】
なお、定期的にディスクリプタ１２１０の受信完了フラグＷＦ＃ｎを確認する代わりに、ＤＭＡ転送の完了後にＤＭＡコントローラ１２１１がプロセッサに対して割り込み処理要求を発行し、この割り込み処理要求に応じて受信処理部１１７（プロセッサが実行するソフトウェア）が、ディスクリプタ１２１０の受信完了フラグＷＦ＃ｎ（ｎは１〜Ｎ）を確認するようにしてもよい。
【０２０２】
以上に説明したように、本実施例のパケット処理装置は、纏めＤＭＡ転送を実現することができ、かつデータブロックを元の複数のデータに復元するための情報をディスクリプタ１２１０に書き込む手段（ＤＭＡコントローラ１２１１）を内蔵する結合データ転送部１２１を備えている。ＤＭＡコントローラ１２１１はハードウェアで実装可能なので、復元処理のソフトウェアでの実行を不要とし、かつ、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０２０３】
なお、従来の図４２の構成のパケット処理装置において、複数のデータが結合したデータブロックを元の複数のデータに復元する処理をプロセッサ（ソフトウェア）で実行する場合と比較すると、本実施例では、復元処理をプロセッサ（ソフトウェア）で行う必要がなくなるので、１データの処理（１パケット分の処理）に必要となるプロセッサの処理が軽くなり、受信性能が向上する（単位時間に処理できるデータの数が増加する）という効果がある。また、本実施例では、１データの処理（１パケット分の処理）に必要となるプロセッサの消費電力が小さくなるという効果もある。
【０２０４】
また、本実施例では、図４２の構成の受信処理部１１７およびデータ処理部１１６用のソフトウェアをそのまま本実施例のパケット処理装置で使用することができる。これは、ハードウェア（ＤＭＡコントローラ１２１１）を変えるだけで、纏めＤＭＡによる受信性能の向上が実現できることを示している。
【０２０５】
復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂのハードウェアで実現しようとすると、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段が必要となる。
【０２０６】
また、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂのハードウェアで実現しようとすると、ＤＭＡ転送完了後、受信処理が起動されるまで、場合によっては複数のデータブロック分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０２０７】
これに対して、本実施例のパケット処理装置では、１つのデータブロックのＤＭＡ転送が完了した時点でデータブロックの復元処理は終わっているので、複数のデータブロック分の情報を保持する必要がない。したがって、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂのハードウェアで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。
【０２０８】
また、復元処理に必要な情報をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段として、復元処理に必要な情報をデータブロックの中に書き込むことも可能である。具体的には、結合された各データのサイズを通知するために、例えば各データの前にデータサイズ等を書き込んだヘッダを付与して付加ヘッダをデータと共にＤＭＡ転送する方法が考えられる。
【０２０９】
しかし、復元処理に必要な情報をデータブロックの中に書き込む場合、ＤＭＡ転送に使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のデータの転送に使用できる実効帯域が小さくなり、その結果、ＤＭＡ転送の性能が劣化してしまうという問題が発生する。
本実施例のパケット処理装置では、復元処理に必要な情報をデータブロックに書き込む必要がないので、上記のような実効帯域の劣化は起こらない。
【０２１０】
本実施例では、結合データ転送部１２１をハードウェアで実現する例を示したが、受信処理に使用するプロセッサとは別のプロセッサとソフトウェアにより結合データ転送部１２１の少なくとも一部の処理を実装することも可能である。このように結合データ転送部１２１の少なくとも一部の処理をソフトウェアで実現する場合でも、データブロックを元の複数のデータに復元する処理を受信処理部１１７もしくはデータ処理部１１６で行う必要がなくなるので、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０２１１】
また、結合データ転送部１２１の少なくとも一部の処理をソフトウェアで実現する場合でも、結合データ転送部１２１をハードウェアで実現する場合と同様に、データブロックを元の複数のデータに復元する処理に必要となるハードウェアの規模が小さくなる効果（複数のデータブロック分の情報を保持する必要がないことによる効果）、およびデータの転送に使用できる実効帯域の劣化が起こらない効果（復元処理に必要な情報をデータブロックの中に加えないことによる効果）を得ることができる。
【０２１２】
また、本実施例において、ＤＭＡコントローラ１２１１とそれぞれのＤＭＡコントローラ１２１１に対応するディスクリプタ１２１０とを複数搭載する構成としてもよい。また、データ結合部１２０においてデータの種類を判定して同じ種類のデータをデータブロックとして纏める構成としてもよいし、データの種類に応じて複数のＤＭＡコントローラ１２１１と複数のディスクリプタ１２１０とを使い分ける構成としてもよい。
【０２１３】
データの種類別にＤＭＡコントローラ１２１１とディスクリプタ１２１０とを用意し、データの種類に応じて複数のＤＭＡコントローラ１２１１と複数のディスクリプタ１２１０とを使い分ける構成とすると、データの種類毎に異なる受信処理を行うことが容易になる。
【０２１４】
また、本実施例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のＤＭＡコントローラ１２１１と複数のディスクリプタ１２１０とを使い分ける構成としてもよいし、バーチャルマシン毎に複数のＤＭＡコントローラ１２１１と複数のディスクリプタ１２１０とを使い分ける構成としてもよい。
【０２１５】
ＣＰＵコア毎もしくはバーチャルマシン毎に複数のＤＭＡコントローラ１２１１と複数のディスクリプタ１２１０とを使い分ける構成とすることにより、ＤＭＡコントローラ等が１個のみの場合と比較して、ソフトウェアによる受信処理の性能を向上させることができる。
【０２１６】
［第２の実施例］
次に、本発明の第２の実施例について説明する。図１６は本発明の第２の実施例に係るパケット処理装置の構成を示すブロック図である。図１６のパケット処理装置は、回線対応部１００と、パケット処理部１１４と、データ用メモリ１１５と、データ処理部１１６と、受信処理部１１７と、受信バッファ１１８と、結合閾値制御部１１９と、データ結合部１２０と、転送管理部１２２と、結合データ転送部１２３とから構成される。
【０２１７】
図１６の構成と図１１の構成の違いは、図１１における転送手段を、パケット処理装置のプロセッサ（ソフトウェア）による書き込み手段に置き換えた点である。つまり、本実施例は、図１１の結合データ転送部１２１を、ソフトウェアによる結合データ転送部１２３に置き換えたものである。
【０２１８】
回線対応部１００とデータ用メモリ１１５とデータ処理部１１６と受信処理部１１７と受信バッファ１１８と結合閾値制御部１１９と転送管理部１２２とは、図１１の構成と同等である。
【０２１９】
図１６のデータ結合部１２０は、パケット処理部１１４が出力したデータをデータ結合用の受信バッファ１１８に転送する。このとき、データ結合部１２０は、パケット処理部１１４が出力したデータと受信バッファ１１８中に既に格納されているデータとを結合して１つのデータブロックになるように、データを受信バッファ１１８に格納する。そして、データ結合部１２０は、受信バッファ１１８中のデータブロックの大きさが、結合閾値制御部１１９に設定された閾値を超えると、データブロックのデータ用メモリ１１５への転送要求を発行する。
【０２２０】
なお、データ結合部１２０は、受信バッファ１１８中のデータブロックの大きさが閾値を超える前に、タイムアウト（パケット間の間隔が予め定められた期間を超えた場合等）が発生した場合に、転送要求を発行するようにしてもよい。
さらに、データ結合部１２０は、受信バッファ１１８において結合したデータの数と各データのサイズとを記録し、データブロックの転送要求を発行する際に、結合したデータの数と各データのサイズの情報を結合データ転送部１２３に対して通知する。
【０２２１】
なお、パケット処理部１１４が出力するデータのサイズが予め決まっている一定値（パケット毎に変化しない）の場合は、データのサイズの通知を省略することが可能であるが、その場合でも、タイムアウトによる転送が発生した場合等では、結合したデータの数の通知が必要である。
【０２２２】
結合データ転送部１２３（プロセッサが実行するソフトウェア）は、複数のデータが結合されたデータブロックをデータ用メモリ１１５に書き込み、受信処理部１１７の起動要求を行なう。また、結合データ転送部１２３（プロセッサが実行するソフトウェア）は、データ結合部１２０から通知された、結合したデータの数と各データのサイズの情報を用いて、転送管理部１２２（プロセッサが実行するソフトウェア）がデータ毎に用意したディスクリプタ１２３０にサイズ等の情報を書き込む。
【０２２３】
ディスクリプタ１２３０の構成は、第１の実施例のディスクリプタ１２１０の構成と同等である。ただし、本実施例では、結合データ転送部１２１の代わりに、結合データ転送部１２３（プロセッサが実行するソフトウェア）がディスクリプタ１２３０への書き込みを行うという違いがある。
【０２２４】
図１７、図１８は結合データ転送部１２３（プロセッサが実行するソフトウェア）の動作を説明するフローチャートである。最初に、結合データ転送部１２３は、変数ｎを１に初期化し（図１７ステップＳ６００ａ）、データ結合部１２０から転送要求が発行された後に、ディスクリプタ１２３０の有効フラグＡＦ＃ｎを確認する（図１７ステップＳ６０１ａ）。
【０２２５】
結合データ転送部１２３は、先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示している場合（図１７ステップＳ６０２ａにおいてｙｅｓ）、データ結合部１２０からの情報を確認して、データ用メモリ１１５に転送すべきデータが単体のデータかデータブロックかを確認する（図１７ステップＳ６０３ａ）。
【０２２６】
結合データ転送部１２３は、データ用メモリ１１５に転送すべきデータがデータブロックではない場合、有効フラグＡＦ＃ｎが「有効」であることを確認した先頭アドレスＡ＃ｎをディスクリプタ１２３０から読み出し（図１７ステップＳ６０４ａ）、対応するｎ番目のデータをデータ用メモリ１１５の先頭アドレスＡ＃ｎから始まる領域に書き込む（図１７ステップＳ６０５ａ）。
【０２２７】
この書き込み完了後、結合データ転送部１２３は、受信データサイズＬ＃ｎをディスクリプタ１２３０に書き込むと共に、ディスクリプタ１２３０に設定されている受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換える（図１７ステップＳ６０６ａ）。以上のステップＳ６００ａ〜Ｓ６０６ａおよびステップＳ６０７ａ，Ｓ６０８ａの処理は、図１３のステップＳ４００ａ〜Ｓ４０８ａの処理と同等である。
【０２２８】
また、結合データ転送部１２３は、データ用メモリ１１５に転送すべきデータがデータブロックの場合、結合したデータの数ｋを確認し（図１８ステップＳ６０９ａ）、ディスクリプタ１２３０内の「ｋ−１」個の有効フラグＡＦ＃（ｎ＋１）〜ＡＦ＃（ｎ＋ｋ−１）を確認する（図１８ステップＳ６１０ａ）。
【０２２９】
結合データ転送部１２３は、確認したｋ個の有効フラグが全て「有効」の場合（ステップＳ６１０ａにおいてｙｅｓ）、確認したｋ個の有効フラグの中で最初の有効フラグＡＦ＃ｎに対応する先頭アドレスＡ＃ｎをディスクリプタ１２３０から読み出し（図１８ステップＳ６１１ａ）、対応するデータブロックをデータ用メモリ１１５の先頭アドレスＡ＃ｎから始まる領域に書き込む（図１８ステップＳ６１２ａ）。
【０２３０】
この書き込み完了後、結合データ転送部１２３は、データ用メモリ１１５に書き込んだデータブロックを構成する各データのデータ長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）をディスクリプタ１２３０に書き込む（図１８ステップＳ６１３ａ）。
【０２３１】
続いて、結合データ転送部１２３は、ディスクリプタ１２３０内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、データブロックを構成するｋ個のデータのうち、初めの「ｋ−１」個のデータのデータ長に応じて書き換える（図１８ステップＳ６１４ａ）。
【０２３２】
次に、結合データ転送部１２３は、データ用メモリ１１５に書き込んだデータブロックを構成する各データに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「未了」から「完了」に書き換える（図１８ステップＳ６１５ａ）。
【０２３３】
以上のステップＳ６０９ａ〜Ｓ６１５ａおよびステップＳ６１６ａ〜Ｓ６１８ａの処理は、図１４のステップＳ４０９ａ〜Ｓ４１８ａの処理と同等である。ステップＳ６１０ａ，Ｓ６１３ａ，Ｓ６１５ａにおいて、ｎ＝Ｎ、またはｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ステップＳ４１０ａ，Ｓ４１３ａ，Ｓ４１５ａで説明した処理を実行すればよい。
【０２３４】
こうして、本実施例のパケット処理装置は、纏め書き込みを実現することができ、かつデータブロックを元の複数のデータに復元するための情報をディスクリプタ１２３０に書き込む手段（結合データ転送部１２３）を備えている。本実施例によれば、復元処理の受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂでの実行を不要とすることができ、かつ、纏め書き込みの効果による高い受信性能を実現することが可能となる。
【０２３５】
また、本実施例では、図４２の構成の受信処理部１１７およびデータ処理部１１６用のソフトウェアをそのまま本実施例のパケット処理装置で使用することができる。
復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂで実現しようとすると、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは、図４２の結合データ分離部１０８ｂに通知する手段が必要となる。
【０２３６】
また、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂで実現しようとすると、纏め書き込み完了後、受信処理が起動されるまで、場合によっては複数のデータブロック分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０２３７】
これに対して、本実施例のパケット処理装置では、１つのデータブロックの纏め書き込みが完了した時点でデータブロックの復元処理は終わっているので、複数のデータブロック分の情報を保持する必要がない。したがって、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。これは、データブロックを元の複数のデータに復元する処理をソフトウェアで実装する場合で比較しても同じである。
【０２３８】
例えば、図４２の構成でデータ用メモリ１１５と回線対応部１００以外の構成をすべてソフトウェアで実現した場合、複数のデータブロック分の復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ用メモリ１１５等に保持しておく必要がある。
【０２３９】
これに対して、本実施例の構成でデータ用メモリ１１５と回線対応部１００以外の構成をすべてソフトウェアで実現した場合は、複数のデータブロック分の情報（結合したデータの数、データ毎のサイズ）を保持する必要がない。すなわち、１つのデータブロック分のみの復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ用メモリ１１５等に保持しておくだけでよい。
【０２４０】
つまり、本実施例の構成は、図４２の構成と比較して、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）の保持に使用するデータ用メモリ１１５等の容量（書き込み可能なビット数）が小さくてもよいことになり、必要となるハードウェアの規模を削減することができる。
【０２４１】
また、復元処理に必要な情報をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段として、復元処理に必要な情報をデータブロックの中に書き込むことも可能である。具体的には、結合された各データのサイズを通知するために、例えば各データの前にデータサイズ等を書き込んだヘッダを付与して付加ヘッダをデータと共に書き込みする方法が考えられる。しかし、この場合、纏め書き込みに使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のデータの書き込みに使用できる実効帯域が小さくなり、その結果、纏め書き込みの性能が劣化する。
【０２４２】
本実施例のパケット処理装置では、復元処理に必要な情報を、データ用メモリ１１５ではなく、データ用メモリ１１５が接続されているバスを使用しない別のメモリ（データ結合部１２０からの書き込みと結合データ転送部１２３からの読み出しだけが可能であれば良い）に保持することができ、上記のような実効帯域の劣化は起こらない。
【０２４３】
また、本実施例において、データ結合部１２０においてデータの種類を判定して同じ種類のデータをデータブロックとして纏める構成としてもよいし、データの種類に応じて複数のディスクリプタ１２３０を使い分ける構成としてもよい。データの種類別にディスクリプタ１２３０を用意し、データの種類に応じて複数のディスクリプタ１２３０を使い分ける構成とすると、データの種類毎に異なる受信処理を行うことが容易になる。
【０２４４】
また、本実施例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のディスクリプタ１２３０を使い分ける構成としてもよいし、バーチャルマシン毎に複数のディスクリプタ１２３０を使い分ける構成としてもよい。ＣＰＵコア毎もしくはバーチャルマシン毎に複数のディスクリプタ１２３０を使い分ける構成とすることにより、ディスクリプタ１２３０が１個のみの場合と比較して、ソフトウェアによる書き込み処理および読み出し処理の性能が向上する。
【０２４５】
［第３の実施例］
次に、本発明の第３の実施例について説明する。図１９は、本発明の第３の実施例に係るパケット処理装置の構成を示すブロック図である。図１９のパケット処理装置は、回線対応部１００と、パケット処理部１１４と、データ用メモリ１１５と、データ処理部１１６と、受信処理部１１７と、受信バッファ１１８と、結合閾値制御部１１９と、データ結合部１２０と、結合データ転送部１２１ａと、転送管理部１２２ａとから構成される。
【０２４６】
図１９における、回線対応部１００、パケット処理部１１４、データ用メモリ１１５、データ処理部１１６、受信処理部１１７、受信バッファ１１８、結合閾値制御部１１９、データ結合部１２０は、図１１の構成と同等である。
【０２４７】
図１９の結合データ転送部１２１ａは、ＤＭＡコントローラ１２１１ａから構成される。結合データ転送部１２１ａは、複数のデータが結合されたデータブロックを１度のＤＭＡ転送により、データ用メモリ１１５に転送し、ハードウェア割り込みを発生させて受信処理部１１７の起動要求を発行する。
なお、パケット処理装置のプロセッサ（不図示）へのハードウェア割り込みの発生を行わないようにしてもよい。
【０２４８】
また、結合データ転送部１２１ａは、データ結合部１２０から通知された、結合したデータの数と各データのサイズの情報を用いて、転送管理部１２２ａ（プロセッサが実行するソフトウェア）がデータ毎に用意したディスクリプタ１２１０ａにサイズ等を書き込む。
【０２４９】
図２０に本実施例の結合データ転送部１２１ａが使用するディスクリプタ１２１０ａの構成例を示す。図２０の例では、データ用メモリ１１５にＮ個のデータが格納される場合を示している。
【０２５０】
図２０のディスクリプタ１２１０ａは、受信したデータの書き込み先の先頭アドレスＡ＃１〜Ａ＃Ｎと、先頭アドレスＡ＃１〜Ａ＃Ｎが有効か否かを示す有効フラグＡＦ＃１〜ＡＦ＃Ｎと、受信したデータのデータ長を示す受信データサイズＬ＃１〜Ｌ＃Ｎと、データ用メモリ１１５からのデータの読み出しが完了したか否かを示す受信完了フラグＷＦ＃１〜ＷＦ＃Ｎとを、複数（Ｎ組）書き込み可能なデータ構造体となっている。
【０２５１】
ディスクリプタ１２１０ａは、実体としては、データ用メモリ１１５と同様に、パーソナルコンピュータ、通信機器あるいは通信ボード上のメモリ内に配置される。
なお、ディスクリプタ１２１０ａをデータ用メモリ１１５と同じメモリ内に配置することも可能であるが、その場合、どちらの用途に使用するのかをメモリ内のアドレスにより分けることができる。
【０２５２】
次に、図２０の構成のディスクリプタ１２１０ａを用いた本実施例の動作例を図１９〜図２７を用いて説明する。図２１は転送管理部１２２ａの動作を説明するフローチャート、図２２〜図２５、図２７はＤＭＡコントローラ１２１１ａの動作を説明するフローチャート、図２６は受信処理部１１７の動作を説明するフローチャートである。
【０２５３】
最初に、転送管理部１２２ａ（プロセッサが実行するソフトウェア）は、パケット処理装置の初期設定として、データ用メモリ１１５内にデータブロック用のバッファ領域として連続した領域を確保し（図２１ステップＳ７００）、このバッファ領域の先頭アドレスＡ０と容量（サイズ）Ｃ０を示す情報とを制御用レジスタ１２４に書き込む（図２１ステップＳ７０１）。制御用レジスタ１２４は、例えばプロセッサ内に設けられる。
【０２５４】
なお、制御用レジスタ１２４は、１個（組）だけでも問題無いが、複数用意しておくことも可能である。制御用レジスタ１２４を複数設ける場合、データの書き込みに使用する順番は予め決めておく。また、制御用レジスタ１２４の設定は、初期設定時に行うものとし、動作中の設定変更は行わないものとする。
【０２５５】
次に、転送管理部１２２ａは、ディスクリプタ１２１０ａの初期設定として、先頭アドレスＡ＃ｎ（ｎは１〜Ｎ）が有効か否かを示す有効フラグＡＦ＃ｎを全て「無効」とし（図２１ステップＳ７０２）、データ用メモリ１１５からのデータの読み出しが完了したことを示す受信完了フラグＷＦ＃ｎを全て「完了」とする（図２１ステップＳ７０３）。
【０２５６】
結合データ転送部１２１ａ内のＤＭＡコントローラ１２１１ａは、データ結合部１２０から転送要求が発行されると、上記の初期設定後の最初の転送要求の場合、転送管理部１２２ａが設定した先頭アドレスＡ０と容量（サイズ）Ｃ０とを制御用レジスタ１２４から読み出す（図２２ステップＳ８００）。そして、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５へのデータの転送に使用するためのライトポインタＷＰの初期値として、ステップＳ８００で読み出した先頭アドレスＡ０を設定する（図２２ステップＳ８０１）。すなわち、本実施例では、制御用レジスタ１２４の設定からデータ用メモリ１１５内の書き込み可能なバッファ領域のアドレスの範囲を計算し、書き込み可能なバッファ領域をリングバッファとして使用する。
【０２５７】
続いて、ＤＭＡコントローラ１２１１ａは、ディスクリプタ１２１０ａの読出および書込の順を示す変数ｎを１に初期化する（図２２ステップＳ８０２）。
ＤＭＡコントローラ１２１１ａは、データ結合部１２０からの情報を確認して、データ用メモリ１１５に転送すべきデータが、結合されていない単体のデータかデータブロックかを確認し、結合したデータの数ｋを確認する（図２２ステップＳ８０３）。上記のとおり、結合したデータの数ｋは、データ結合部１２０から通知される情報に含まれている（結合していない場合はｋ＝１）。そして、ＤＭＡコントローラ１２１１ａは、ディスクリプタ１２１０ａ内のｋ個の受信完了フラグＷＦ＃ｎ〜ＷＦ＃ｎ（ｎ＋ｋ−１）を確認する（図２２ステップＳ８０４）。
【０２５８】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、ＷＦ＃ＮとＷＦ＃１からＷＦ＃（ｋ−１）までの受信完了フラグを確認すればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、ＷＦ＃ｎからＷＦ＃ＮまでとＷＦ＃１からＷＦ＃（ｋ−１−（Ｎ−ｎ））までの受信完了フラグを確認すればよい。
【０２５９】
ＤＭＡコントローラ１２１１ａは、ステップＳ８０４の処理により、確認したｋ個の受信完了フラグが全て「完了」の場合（ステップＳ８０４においてｙｅｓ）、データ用メモリ１１５内のデータブロック用のバッファ領域の残容量ＣＲとデータ用メモリ１１５に転送すべきデータのサイズＣＤとを比較する（図２２ステップＳ８０５）。データ用メモリ１１５に転送すべきデータが結合されていない単体のデータの場合には、単体のデータのサイズを残容量ＣＲと比較し、データ用メモリ１１５に転送すべきデータがデータブロックの場合には、データブロックのサイズを残容量ＣＲと比較する。上記のとおり、データ用メモリ１１５に転送すべきデータのサイズＣＤは、データ結合部１２０から通知される。
【０２６０】
この比較の際に、ＤＭＡコントローラ１２１１ａは、ライトポインタＷＰとリードポインタＲＰに基づいて、データ用メモリ１１５内のデータブロック用のバッファ領域の残容量ＣＲを算出する。具体的には、ＤＭＡコントローラ１２１１ａは、初期状態（ライトポインタＷＰ＝リードポインタＲＰ）の場合、ステップＳ８００において制御用レジスタ１２４から読み出した容量（サイズ）Ｃ０の値をそのまま残容量ＣＲとする。
【０２６１】
また、ＤＭＡコントローラ１２１１ａは、ライトポインタＷＰ＞リードポインタＲＰの場合、Ｃ０−ＷＰ＋ＲＰを残容量ＣＲとし、ライトポインタＷＰ＜リードポインタＲＰの場合、ＲＰ−ＷＰを残容量ＣＲとする。また、ＤＭＡコントローラ１２１１ａは、初期状態以外で、ライトポインタＷＰ＝リードポインタＲＰの場合、０もしくはＣ０を残容量ＣＲとする。具体的には、ライトポインタＷＰ＞リードポインタＲＰの状態からライトポインタＷＰ＝リードポインタＲＰに遷移した場合はリードポインタが更新されたと判断して、残容量ＣＲをＣ０とし、ライトポインタＷＰ＜リードポインタＲＰの状態からライトポインタＷＰ＝リードポインタＲＰに遷移した場合はライトポインタが更新されたと判断して、残容量ＣＲを０とする。
【０２６２】
なお、上記のとおりディスクリプタ１２１０ａには、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎの領域がＮ個（組）用意されているが、受信完了フラグＷＦ＃１〜ＷＦ＃Ｎを確認する順番は予め決められている。例えば、図２０、図２２の例では、ＤＭＡコントローラ１２１１ａは、ｎ番目の受信完了フラグＷＦ＃ｎ、（ｎ＋１）番目の受信完了フラグＷＦ＃（ｎ＋１）、・・・・、Ｎ番目の受信完了フラグＷＦ＃Ｎと順番に確認する（ステップＳ８０４）。Ｎ番目の受信完了フラグＷＦ＃Ｎの確認を行った後、ｋ組分の確認が終わっていない場合は、１番目の受信完了フラグＷＦ＃１から順番に確認を行う。
【０２６３】
ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５内のデータブロック用のバッファ領域の残容量ＣＲがデータ用メモリ１１５に転送すべきデータのサイズＣＤより小さい場合（ステップＳ８０５においてｙｅｓ）、ステップＳ８０４に戻る。このバッファ領域の残容量ＣＲがデータサイズＣＤより小さい状態は、ソフトウェアによるデータ用メモリ１１５からのデータの読み出しにより、バッファ領域の残容量ＣＲが回復すると解消する。
【０２６４】
また、ＤＭＡコントローラ１２１１ａは、バッファ領域の残容量ＣＲがデータ用メモリ１１５に転送すべきデータのサイズＣＤ以上の場合（ステップＳ８０５においてｎｏ）、ライトポインタＷＰに、データ用メモリ１１５に転送すべきデータのサイズＣＤを加算した値（ＷＰ＋ＣＤ）と、所定の上限値とを比較する（図２３ステップＳ８０６）。ここで、上限値は、データ用メモリ１１５内のバッファ領域の先頭アドレスＡ０に、このバッファ領域の容量Ｃ０を加算した値（Ａ０＋Ｃ０）である。
【０２６５】
ＤＭＡコントローラ１２１１ａは、ライトポインタＷＰにデータのサイズＣＤを加算した値（ＷＰ＋ＣＤ）が、上限値（Ａ０＋Ｃ０）より小さい場合（ステップＳ８０６においてｙｅｓ）、データ結合部１２０から通知された情報（結合した各データのサイズ）に基づいて、データ用メモリ１１５に転送すべきデータを構成するｋ個のデータのデータ長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１２１０ａに書き込む（図２３ステップＳ８０７）。
【０２６６】
続いて、ＤＭＡコントローラ１２１１ａは、ｎ番目の先頭アドレスＡ＃ｎの値として、ライトポインタＷＰの値をディスクリプタ１２１０ａに書き込む（図２３ステップＳ８０８）。さらに、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータが、結合されていない単体のデータ（ｋ＝１）の場合（図２３ステップＳ８０９においてｎｏ）、図２４のステップＳ８１２に遷移する。
【０２６７】
また、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータがデータブロックの場合（ステップＳ８０９においてｙｅｓ）、ディスクリプタ１２１０ａ内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、データブロックを構成するｋ個のデータのうち、初めの「ｋ−１」個のデータのデータ長に応じて書き込む（図２３ステップＳ８１１）。
【０２６８】
具体的には、ＤＭＡコントローラ１２１１ａは、先頭アドレスＡ＃（ｎ＋１）については、先頭アドレスＡ＃ｎと、データブロックを構成するｋ個のデータのうち１番目のデータのデータ長（受信データサイズＬ＃ｎが示す値）とを足した値を書き込む。また、ＤＭＡコントローラ１２１１ａは、先頭アドレスＡ＃（ｎ＋ｋ−１）については、先頭アドレスＡ＃（ｎ＋ｋ−２）と、データブロックを構成するｋ個のデータのうち「ｋ−１」番目のデータのデータ長（受信データサイズＬ＃（ｎ＋ｋ−２）が示す値）とを足した値を書き込む。
【０２６９】
このように、ＤＭＡコントローラ１２１１ａは、先頭アドレスＡ＃ｉを書き込む場合、１つ前の先頭アドレスＡ＃（ｉ−１）と、データブロックを構成するデータのうち「ｉ−１」番目のデータのデータ長とを足した値を書き込むようにすればよい。
【０２７０】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズをディスクリプタ１２１０ａに書き込むと共に、先頭アドレスＡ＃ｎと、Ａ＃１からＡ＃（ｋ−１）までの先頭アドレスをディスクリプタ１２１０ａに書き込むようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズをディスクリプタ１２１０ａに書き込むと共に、先頭アドレスＡ＃ｎと、Ａ＃（ｎ＋１）からＡ＃ＮまでとＡ＃１からＡ＃（ｋ−１−（Ｎ−ｎ））までの先頭アドレスをディスクリプタ１２１０ａに書き込むようにすればよい。
【０２７１】
次に、ＤＭＡコントローラ１２１１ａは、ライトポインタＷＰをデータ用メモリ１１５の転送先の先頭アドレスとして、データ用メモリ１１５に転送すべきデータ（単体のデータまたはデータブロック）を、データ用メモリ１１５の転送先の先頭アドレスから始まるバッファ領域に書き込むＤＭＡ転送を行う（図２４ステップＳ８１２）。すなわち、データ用メモリ１１５内のバッファ領域の先頭アドレスＡ０に、このバッファ領域の容量Ｃ０を加算した値（Ａ０＋Ｃ０）が、ライトポインタＷＰにデータのサイズＣＤを加算した値（ＷＰ＋ＣＤ）より大きい場合、ライトポインタＷＰを転送先の先頭アドレスとしてＤＭＡ転送を行う。
【０２７２】
そして、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータ（単体のデータまたはデータブロック）のサイズをライトポインタＷＰに加算する（図２４ステップＳ８１３）。具体的には、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータが、結合されていない単体のデータ（ｋ＝１）の場合、当該データのデータ長（受信データサイズＬ＃ｎが示す値）をライトポインタＷＰに加算する。また、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータがデータブロックの場合、受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）をライトポインタＷＰに加算する。
【０２７３】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズをライトポインタＷＰに加算すればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズをライトポインタＷＰに加算すればよい。
【０２７４】
次に、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータを構成する各データに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「完了」から「未了」に書き換える（図２４ステップＳ８１４）。さらに、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータを構成する各データに対応する有効フラグＡＦ＃ｎ〜ＡＦ＃（ｎ＋ｋ−１）を「無効」から「有効」に書き換える（図２４ステップＳ８１５）。
【０２７５】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信完了フラグＷＦ＃ｎと、ＷＦ＃１からＷＦ＃（ｋ−１）までの受信完了フラグとを「完了」から「未了」に書き換えると共に、有効フラグＡＦ＃ｎと、ＡＦ＃１からＡＦ＃（ｋ−１）までの有効フラグとを「無効」から「有効」に書き換えるようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信完了フラグＷＦ＃ｎと、ＷＦ＃（ｎ＋１）からＷＦ＃ＮまでとＷＦ＃１からＷＦ＃（ｋ−１−（Ｎ−ｎ））までの受信完了フラグとを「未了」に書き換えると共に、有効フラグＡＦ＃ｎと、ＡＦ＃（ｎ＋１）からＡＦ＃ＮまでとＡＦ＃１からＡＦ＃（ｋ−１−（Ｎ−ｎ））までの有効フラグとを「有効」に書き換えるようにすればよい。
【０２７６】
そして、ＤＭＡコントローラ１２１１ａは、ｎ＋ｋ＞Ｎが成立するかどうかを確認し（図２４ステップＳ８１６）、ｎ＋ｋがＮより大きい場合は、変数ｎをｎ＝ｎ＋ｋ−Ｎとし（図２４ステップＳ８１７）とし、ステップＳ８０３に戻る。また、ＤＭＡコントローラ１２１１ａは、ｎ＋ｋがＮ以下の場合は、変数ｎをｎ＝ｎ＋ｋとし（図２４ステップＳ８１８）とし、ステップＳ８０３に戻る。
【０２７７】
一方、ＤＭＡコントローラ１２１１ａは、ライトポインタＷＰに、データ用メモリ１１５に転送すべきデータのサイズＣＤを加算した値（ＷＰ＋ＣＤ）が、上限値（Ａ０＋Ｃ０）以上の場合（ステップＳ８０６においてｎｏ）、データのサイズＣＤと、リードポインタＲＰからデータ用メモリ１１５内のバッファ領域の先頭アドレスＡ０を減算した値（ＲＰ−Ａ０）とを比較する（図２３ステップＳ８１９）。
【０２７８】
ＤＭＡコントローラ１２１１ａは、データのサイズＣＤが、減算値（ＲＰ−Ａ０）より小さい場合（ステップＳ８１９においてｙｅｓ）、データ結合部１２０から通知された情報（結合した各データのサイズ）に基づいて、データ用メモリ１１５に転送すべきデータを構成するｋ個のデータのデータ長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１２１０ａに書き込む（図２５ステップＳ８２０）。
【０２７９】
続いて、ＤＭＡコントローラ１２１１ａは、ｎ番目の先頭アドレスＡ＃ｎの値として、データ用メモリ１１５内のバッファ領域の先頭アドレスＡ０の値をディスクリプタ１２１０ａに書き込む（図２５ステップＳ８２１）。さらに、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータが、結合されていない単体のデータ（ｋ＝１）の場合（図２５ステップＳ８２２においてｎｏ）、図２５ステップＳ８２５に遷移する。
【０２８０】
また、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータがデータブロックの場合（ステップＳ８２２においてｙｅｓ）、ディスクリプタ１２１０ａ内の「ｋ−１」個の先頭アドレスＡ＃（ｎ＋１）〜Ａ＃（ｎ＋ｋ−１）を、データブロックを構成するｋ個のデータのうち、初めの「ｋ−１」個のデータのデータ長に応じて書き込む（図２５ステップＳ８２４）。
【０２８１】
具体的には、ＤＭＡコントローラ１２１１ａは、先頭アドレスＡ＃（ｎ＋１）については、先頭アドレスＡ＃ｎと、データブロックを構成するｋ個のデータのうち１番目のデータのデータ長（受信データサイズＬ＃ｎが示す値）とを足した値を書き込む。また、ＤＭＡコントローラ１２１１ａは、先頭アドレスＡ＃（ｎ＋ｋ−１）については、先頭アドレスＡ＃（ｎ＋ｋ−２）と、データブロックを構成するｋ個のデータのうち「ｋ−１」番目のデータのデータ長（受信データサイズＬ＃（ｎ＋ｋ−２）が示す値）とを足した値を書き込む。このように、ＤＭＡコントローラ１２１１ａは、先頭アドレスＡ＃ｉを書き込む場合、１つ前の先頭アドレスＡ＃（ｉ−１）と、データブロックを構成するデータのうち「ｉ−１」番目のデータのデータ長とを足した値を書き込むようにすればよい。
【０２８２】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズをディスクリプタ１２１０ａに書き込むと共に、先頭アドレスＡ＃ｎと、Ａ＃１からＡ＃（ｋ−１）までの先頭アドレスをディスクリプタ１２１０ａに書き込むようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズをディスクリプタ１２１０ａに書き込むと共に、先頭アドレスＡ＃ｎと、Ａ＃（ｎ＋１）からＡ＃ＮまでとＡ＃１からＡ＃（ｋ−１−（Ｎ−ｎ））までの先頭アドレスをディスクリプタ１２１０ａに書き込むようにすればよい。
【０２８３】
次に、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータ（単体のデータまたはデータブロック）を、データ用メモリ１１５の先頭アドレスＡ０から始まるバッファ領域に書き込むＤＭＡ転送を行う（図２５ステップＳ８２５）。すなわち、「Ａ０＋Ｃ０−ＷＰ」がデータ用メモリ１１５に転送すべきデータのサイズＣＤより小さく、バッファ領域の先頭アドレスＡ０からリードポインタＲＰまでの容量が転送データのサイズＣＤより大きい場合、ライトポインタＷＰの代わりに、データ用メモリ１１５の先頭アドレスＡ０を転送先の先頭アドレスとしてＤＭＡ転送を行う。
【０２８４】
そして、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータ（単体のデータまたはデータブロック）のサイズを、データ用メモリ１１５のバッファ領域の先頭アドレスＡ０に加算した値を、ライトポインタＷＰの新たな値として更新する（図２５ステップＳ８２６）。具体的には、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータが、結合されていない単体のデータ（ｋ＝１）の場合、当該データのデータ長（受信データサイズＬ＃ｎが示す値）を先頭アドレスＡ０に加算した値を、ライトポインタＷＰの新たな値とする。また、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５に転送すべきデータがデータブロックの場合、受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を先頭アドレスＡ０に加算した値を、ライトポインタＷＰの新たな値とする。
【０２８５】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃１からＬ＃（ｋ−１）までの受信データサイズを先頭アドレスＡ０に加算した値を、ライトポインタＷＰの新たな値とすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信データサイズＬ＃ｎと、Ｌ＃（ｎ＋１）からＬ＃ＮまでとＬ＃１からＬ＃（ｋ−１−（Ｎ−ｎ））までの受信データサイズを先頭アドレスＡ０に加算した値を、ライトポインタＷＰの新たな値とすればよい。
【０２８６】
次に、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータを構成する各データに対応する受信完了フラグＷＦ＃ｎ〜ＷＦ＃（ｎ＋ｋ−１）を「完了」から「未了」に書き換える（図２５ステップＳ８２７）。さらに、ＤＭＡコントローラ１２１１ａは、データ用メモリ１１５にＤＭＡ転送したデータを構成する各データに対応する有効フラグＡＦ＃ｎ〜ＡＦ＃（ｎ＋ｋ−１）を「無効」から「有効」に書き換える（図２５ステップＳ８２８）。
【０２８７】
なお、ｎ＝Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信完了フラグＷＦ＃ｎと、ＷＦ＃１からＷＦ＃（ｋ−１）までの受信完了フラグとを「完了」から「未了」に書き換えると共に、有効フラグＡＦ＃ｎと、ＡＦ＃１からＡＦ＃（ｋ−１）までの有効フラグとを「無効」から「有効」に書き換えるようにすればよい。また、ｎ＜Ｎかつｎ＋ｋ−１＞Ｎの場合、ＤＭＡコントローラ１２１１ａは、受信完了フラグＷＦ＃ｎと、ＷＦ＃（ｎ＋１）からＷＦ＃ＮまでとＷＦ＃１からＷＦ＃（ｋ−１−（Ｎ−ｎ））までの受信完了フラグとを「未了」に書き換えると共に、有効フラグＡＦ＃ｎと、ＡＦ＃（ｎ＋１）からＡＦ＃ＮまでとＡＦ＃１からＡＦ＃（ｋ−１−（Ｎ−ｎ））までの有効フラグとを「有効」に書き換えるようにすればよい。
【０２８８】
そして、ＤＭＡコントローラ１２１１ａは、ｎ＋ｋ＞Ｎが成立するかどうかを確認し（図２５ステップＳ８２９）、ｎ＋ｋがＮより大きい場合は、変数ｎをｎ＝ｎ＋ｋ−Ｎとし（図２５ステップＳ８３０）とし、ステップＳ８０３に戻る。また、ＤＭＡコントローラ１２１１ａは、ｎ＋ｋがＮ以下の場合は、変数ｎをｎ＝ｎ＋ｋとし（図２５ステップＳ８３１）とし、ステップＳ８０３に戻る。
【０２８９】
こうして、本実施例のＤＭＡ転送では、ｋ個のデータが連結されたデータブロックを纏めてデータ用メモリ１１５に転送し、ディスクリプタ１２１０ａの先頭アドレスの情報をＤＭＡコントローラ１２１１ａが書き込むことにより、パケット処理装置のプロセッサ（受信処理部１１７とデータ処理部１１６）に対して各データの先頭が書き込まれたアドレスを通知するようにしている。
なお、ＤＭＡコントローラ１２１１ａは、以下の受信処理部１１７等（プロセッサが実行するソフトウェア）の処理に対応してリードポインタＲＰの更新処理も行うが、このリードポインタＲＰの更新処理の詳細は後述する。
【０２９０】
受信処理部１１７（プロセッサが実行するソフトウェア）は、定期的にディスクリプタ１２１０ａの有効フラグＡＦ＃ｎ（ｎは１〜Ｎ）を確認して、有効フラグＡＦ＃ｎが「有効」を示している場合（図２６ステップＳ９０１においてｙｅｓ）、対応するｎ番目の先頭アドレスＡ＃ｎの情報と受信データサイズＬ＃ｎの情報とに基づいてデータ用メモリ１１５からｎ番目のデータを読み出してデータ処理部１１６へ渡す（図２６ステップＳ９０２）。
【０２９１】
データ処理部１１６で必要な処理が行われた後に（図２６ステップＳ９０３においてｙｅｓ）、受信処理部１１７（プロセッサが実行するソフトウェア）は、処理が終わったｎ番目のデータに対応する、ディスクリプタ１２１０ａのｎ番目の受信完了フラグＷＦ＃ｎを「未了」から「完了」に書き換えると共に、ディスクリプタ１２１０ａのｎ番目の有効フラグＡＦ＃ｎを「有効」から「無効」に書き換える（図２６ステップＳ９０４）。
第１の実施例と同様に、ディスクリプタ１２１０ａには、有効フラグＡＦ＃１〜ＡＦ＃Ｎの領域がＮ個（組）あるが、有効フラグＡＦ＃１〜ＡＦ＃Ｎを確認する順番は予め決められている。
【０２９２】
なお、定期的にディスクリプタ１２１０ａの有効フラグＡＦ＃ｎを確認する代わりに、ＤＭＡ転送の完了後にＤＭＡコントローラ１２１１ａがプロセッサに対して割り込み処理要求を発行し、この割り込み処理要求に応じて受信処理部１１７（プロセッサが実行するソフトウェア）が、ディスクリプタ１２１０ａの有効フラグＡＦ＃ｎ（ｎは１〜Ｎ）を確認するようにしてもよい。
【０２９３】
次に、ＤＭＡコントローラ１２１１ａによるリードポインタＲＰの更新処理について説明する。最初に、ＤＭＡコントローラ１２１１ａは、リードポインタＲＰの初期値として、データ用メモリ１１５のデータブロック用のバッファ領域の先頭アドレスＡ０を設定する（図２７ステップＳ８４０）。また、ＤＭＡコントローラ１２１１ａは、有効フラグの確認順を示す変数ｎを１に初期化する（図２７ステップＳ８４１）。なお、この変数ｎと図２２〜図２５の変数ｎとは同じ値であるから、ステップＳ８４１はステップＳ８０２と同じ処理である。
【０２９４】
ＤＭＡコントローラ１２１１ａは、図２２〜図２５の処理中に、ディスクリプタ１２１０ａのｎ番目の有効フラグＡＦ＃ｎを定期的に確認する（図２７ステップＳ８４２）。ＤＭＡコントローラ１２１１ａは、ｎ番目の先頭アドレスＡ＃ｎが「有効」であることを有効フラグＡＦ＃ｎが示していることを検出した後（図２７ステップＳ８４３においてｙｅｓ）、このｎ番目の先頭アドレスＡ＃ｎに対応するディスクリプタ１２１０ａのｎ番目の受信完了フラグＷＦ＃ｎを確認する（図２７ステップＳ８４４）。
【０２９５】
ＤＭＡコントローラ１２１１ａは、ディスクリプタ１２１０ａのｎ番目の受信完了フラグＷＦ＃ｎが「完了」を示している場合（図２７ステップＳ８４５においてｙｅｓ）、ｎ番目の先頭アドレスＡ＃ｎにｎ番目の受信データサイズＬ＃ｎを加算した値を、リードポインタＲＰの新たな値として更新する（図２７ステップＳ８４６）。
また、有効フラグＡＦ＃ｎがプロセッサが実行するソフトウェアにより「無効」に書き換えられていない場合はＤＭＡコントローラ１２１１ａが「無効」に更新する（図２７ステップＳ８４７）。
【０２９６】
ＤＭＡコントローラ１２１１ａは、変数ｎがＮと等しいかどうかを判定する（図２７ステップＳ８４８）。ＤＭＡコントローラ１２１１ａは、変数ｎがＮに達していない場合（ステップＳ８４８においてｎｏ）、変数ｎを１増やし（図２７ステップＳ８４９）、ステップＳ８４２に戻る。また、ＤＭＡコントローラ１２１１ａは、変数ｎがＮに達した場合（ステップＳ８４８においてｙｅｓ）、変数ｎを１とし（図２７ステップＳ８５０）、ステップＳ８４２に戻る。
【０２９７】
なお、受信完了フラグＷＦ＃ｎが「完了」になるのは、図２６の受信処理部１１７の動作によるものである。
また、以上に説明したリードポインタＲＰは、ＤＭＡコントローラ１２１１ａがデータ用メモリ１１５内のデータブロック用のバッファ領域の残容量の計算等に使用するためのものであり、ソフトウェアによる読み出し時等の使用は想定していない。
【０２９８】
以上に説明したように、本実施例のパケット処理装置は、纏めＤＭＡ転送を実現することができ、かつデータブロックを元の複数のデータに復元するための情報をディスクリプタ１２１０ａに書き込む手段（ＤＭＡコントローラ１２１１ａ）を内蔵する結合データ転送部１２１ａを備えている。ＤＭＡコントローラ１２１１ａはハードウェアで実装可能なので、復元処理のソフトウェアでの実行を不要とし、かつ、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０２９９】
なお、従来の図４２の構成のパケット処理装置において、複数のデータが結合したデータブロックを元の複数のデータに復元する処理をプロセッサ（ソフトウェア）で実行する場合と比較すると、本実施例では、復元処理をプロセッサ（ソフトウェア）で行う必要がなくなるので、１データの処理（１パケット分の処理）に必要となるプロセッサの処理が軽くなり、受信性能が向上する（単位時間に処理できるデータの数が増加する）という効果がある。また、本実施例では、１データの処理（１パケット分の処理）に必要となるプロセッサの消費電力が小さくなるという効果もある。
【０３００】
また、従来の図４２の構成で、纏めＤＭＡ転送を正常に行うためには、ソフトウェアによって事前に、データ用メモリ１１５内に、Ｎ×ＤＢ＿ｍｕｘ（ＤＢ＿ｍｕｘはデータブロックの最大サイズ）のバッファ領域を確保しておく必要がある。これに対して、本実施例のパケット処理装置では、より小さいバッファ領域で纏めＤＭＡ転送を正常に行うことができる。
【０３０１】
上記のデータブロックの最大サイズＤＢ＿ｍｕｘは、結合閾値制御部１１９に設定される閾値に許容最大データ長を足した値となる。したがって、例えば閾値を５００Ｂｙｔｅ、許容最大データ長を２０００Ｂｙｔｅ、Ｎを１０とすると、従来の図４２の構成でデータ用メモリ１１５内に確保が必要なバッファ領域のサイズは、１０×２５００＝２５０００Ｂｙｔｅとなる。
【０３０２】
本実施例のパケット処理装置でデータ用メモリ１１５内に確保が必要なバッファ領域のサイズは、Ｎに依存せず、データブロックの最大サイズＤＢ＿ｍｕｘとなる。すなわち、本実施例のパケット処理装置でデータ用メモリ１１５内に確保が必要なバッファ領域のサイズは、上記と同じ条件で、２５００Ｂｙｔｅとなる。このようにバッファ領域のサイズを小さくできるのは、バッファ領域の残容量ＣＲが小さい場合に残容量ＣＲが必要な量になるまでＤＭＡ転送を待たせる機能（図２２のステップＳ８０５、図２３のステップＳ８１９）の実装による効果である。
【０３０３】
したがって、本実施例では、データ用メモリ１１５内に確保するバッファ領域のサイズが小さいと、ソフトウェアによるデータ用メモリ１１５からのデータの読み出しが完了するまで次のＤＭＡ転送が待たされる確率が高くなる。
ここで、本実施例のパケット処理装置でデータ用メモリ１１５内に確保するバッファ領域のサイズを従来の図４２の構成で必要なサイズと同じサイズにした場合に無駄となる領域の量を比較する。
【０３０４】
上記のように閾値を５００Ｂｙｔｅ、許容最大データ長を２０００Ｂｙｔｅ、Ｎを１０とした場合、実際にデータ用メモリ１１５に転送されるデータブロックのサイズは５０１Ｂｙｔｅ〜２５００Ｂｙｔｅとなる。つまり、従来の図４２の構成では、各データブロックのサイズをＳとしたとき、（２５００−Ｓ）を１０個のデータブロック分加算した領域が無駄になる。これは、データブロックのサイズＳの平均が仮に１５００Ｂｙｔｅだとすると、２５０００Ｂｙｔｅの内１００００Ｂｙｔｅ分の領域が無駄になっていることを示している。
【０３０５】
本実施例の構成でデータ用メモリ１１５内に確保するバッファ領域のサイズを２５０００Ｂｙｔｅとした場合、２５０００Ｂｙｔｅが連続した領域で確保され、複数のデータブロックを連続した領域に書き込むことが可能な構成となっている。したがって、本実施例で無駄になるのは、最大でデータブロックの最大サイズ２５００Ｂｙｔｅから１Ｂｙｔｅを引いた値、すなわち、２４９９Ｂｙｔｅのみとなる。この値は、データブロックのサイズＳの平均が（２５０００−２４９９）／１０＝２２５０．１より小さい場合、Ｎを１１以上にすれば、１１個以上のデータブロックを同じ容量（２５０００Ｂｙｔｅ）のバッファに書き込めることを示している。従来の図４２の構成で１１個以上のデータブロックを書き込むためにはＮを１１以上にし、かつ２７５００Ｂｙｔｅ以上のバッファ領域が必要である。
【０３０６】
したがって、本実施例のパケット処理装置でデータ用メモリ１１５内に確保するバッファ領域のサイズを従来の図４２の構成で必要なサイズと同じサイズにした場合、従来の図４２の構成の場合より、無駄になる領域が小さくなり、より多数のデータブロックを同じサイズのバッファ領域に書き込むことが可能となる場合もある。
【０３０７】
また、データブロックのサイズＳの平均を仮に１５００Ｂｙｔｅ、バッファ領域に書き込むデータブロックの最大数を１０だとして、本実施例のパケット処理装置でデータ用メモリ１１５内に確保すべきバッファ領域のサイズを計算すると、１５００×１０＝１５０００Ｂｙｔｅとなり、従来の図４２の構成で必要なサイズ（２５０００Ｂｙｔｅ）より小さくなる。
【０３０８】
なお、本実施例の構成では、データ用メモリ１１５のバッファ領域に書き込むデータブロックの最大数とディスクリプタ１２１０ａのＮを独立に決定することができる。上記のようにバッファ領域に書き込むデータブロックの最大数によりバッファ領域のサイズを決め、Ｎはバッファ領域に書き込むデータの最大数とすれば良い。ただし、実際にバッファ領域に書き込めるデータの最大数は、格納するデータのサイズとバッファ領域のサイズに依存するので、Ｎもしくはそれより小さい値となる。仮に、データブロックのサイズＳの平均が１５００Ｂｙｔｅ、結合したデータの数ｋの平均が２個、バッファ領域に書き込むデータブロックの最大数を１０だとすると、バッファ領域のサイズを１５００×１０＝１５０００Ｂｙｔｅ、Ｎを２×１０＝２０とするのが望ましい。
【０３０９】
複数のデータが結合したデータブロックを元の複数のデータに復元する処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂのハードウェアで実現しようとすると、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段が必要となる。
【０３１０】
また、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂのハードウェアで実現しようとすると、ＤＭＡ転送完了後、受信処理が起動されるまで、場合によっては複数のデータブロック分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０３１１】
これに対して、本実施例のパケット処理装置では、１つのデータブロックのＤＭＡ転送が完了した時点でデータブロックの復元処理は終わっているので、複数のデータブロック分の情報を保持する必要がない。したがって、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂのハードウェアで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。
【０３１２】
また、復元処理に必要な情報をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段として、復元処理に必要な情報をデータブロックの中に書き込むことも可能である。しかし、復元処理に必要な情報をデータブロックの中に書き込む場合、ＤＭＡ転送に使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のデータの転送に使用できる実効帯域が小さくなり、その結果、ＤＭＡ転送の性能が劣化してしまうという問題が発生する。
本実施例のパケット処理装置では、復元処理に必要な情報をデータブロックに書き込む必要がないので、上記のような実効帯域の劣化は起こらない。
【０３１３】
本実施例では、結合データ転送部１２１ａをハードウェアで実現する例を示したが、受信処理に使用するプロセッサとは別のプロセッサとソフトウェアにより結合データ転送部１２１ａの少なくとも一部の処理を実装することも可能である。このように結合データ転送部１２１ａの少なくとも一部の処理をソフトウェアで実現する場合でも、データブロックを元の複数のデータに復元する処理を受信処理部１１７もしくはデータ処理部１１６で行う必要がなくなるので、纏めＤＭＡ転送の効果による高い受信性能を実現することが可能となる。
【０３１４】
また、結合データ転送部１２１ａの少なくとも一部の処理をソフトウェアで実現する場合でも、結合データ転送部１２１ａをハードウェアで実現する場合と同様に、データブロックを元の複数のデータに復元する処理に必要となるハードウェアの規模が小さくなる効果（複数のデータブロック分の情報を保持する必要がないことによる効果）、およびデータの転送に使用できる実効帯域の劣化が起こらない効果（復元処理に必要な情報をデータブロックの中に加えないことによる効果）を得ることができる。
【０３１５】
本実施例の変形として、ＤＭＡコントローラ１２１１ａとそれぞれのＤＭＡコントローラ１２１１ａに対応するディスクリプタ１２１０ａとを複数搭載する構成としてもよい。また、データ結合部１２０においてデータの種類を判定して同じ種類のデータをデータブロックとして纏める構成としてもよいし、データの種類に応じて複数のＤＭＡコントローラ１２１１ａと複数のディスクリプタ１２１０ａとを使い分ける構成としてもよい。
【０３１６】
データの種類別にＤＭＡコントローラ１２１１ａとディスクリプタ１２１０ａとを用意し、データの種類に応じて複数のＤＭＡコントローラ１２１１ａと複数のディスクリプタ１２１０ａとを使い分ける構成とすると、データの種類毎に異なる受信処理を行うことが容易になる。
【０３１７】
また、本実施例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のＤＭＡコントローラ１２１１ａと複数のディスクリプタ１２１０ａとを使い分ける構成としてもよいし、バーチャルマシン毎に複数のＤＭＡコントローラ１２１１ａと複数のディスクリプタ１２１０ａとを使い分ける構成としてもよい。
【０３１８】
ＣＰＵコア毎もしくはバーチャルマシン毎に複数のＤＭＡコントローラ１２１１ａと複数のディスクリプタ１２１０ａとを使い分ける構成とすることにより、ＤＭＡコントローラ等が１個のみの場合と比較して、ソフトウェアによる受信処理の性能を向上させることができる。
【０３１９】
［第４の実施例］
次に、本発明の第４の実施例について説明する。図２８は、本発明の第４の実施例に係るパケット処理装置の構成を示すブロック図である。図２８のパケット処理装置は、回線対応部１００と、パケット処理部１１４と、データ用メモリ１１５と、データ処理部１１６と、受信処理部１１７と、受信バッファ１１８と、結合閾値制御部１１９と、データ結合部１２０と、転送管理部１２２ａと、結合データ転送部１２３ａとから構成される。
【０３２０】
図２８の構成と図１９の構成の違いは、図１９における転送手段を、パケット処理装置のプロセッサ（ソフトウェア）による書き込み手段に置き換えた点である。つまり、本実施例は、図１９の結合データ転送部１２１ａを、ソフトウェアによる結合データ転送部１２３ａに置き換えたものである。
【０３２１】
回線対応部１００とデータ用メモリ１１５とデータ処理部１１６と受信処理部１１７と受信バッファ１１８と結合閾値制御部１１９と転送管理部１２２ａと制御用レジスタ１２４は、図１９の構成と同等である。データ結合部１２０は、図１１の構成と同等である。
【０３２２】
結合データ転送部１２３ａ（プロセッサが実行するソフトウェア）は、複数のデータが結合されたデータブロックをデータ用メモリ１１５に書き込み、受信処理部１１７の起動要求を行なう。また、結合データ転送部１２３ａは、データ結合部１２０から通知された、結合したデータの数と各データのサイズの情報を用いて、転送管理部１２２ａ（プロセッサが実行するソフトウェア）がデータ毎に用意したディスクリプタ１２３０ａにサイズ等の情報を書き込む。
【０３２３】
ディスクリプタ１２３０ａの構成は、第３の実施例のディスクリプタ１２１０ａの構成と同等である。ただし、本実施例では、結合データ転送部１２１ａの代わりに、結合データ転送部１２３ａ（プロセッサが実行するソフトウェア）がディスクリプタ１２３０ａへの書き込みを行うという違いがある。
【０３２４】
図２９〜図３３は結合データ転送部１２３ａ（プロセッサが実行するソフトウェア）の動作を説明するフローチャートである。結合データ転送部１２３ａは、データ結合部１２０から転送要求が発行されると、初期設定後の最初の転送要求の場合、転送管理部１２２ａが設定した先頭アドレスＡ０と容量（サイズ）Ｃ０とを制御用レジスタ１２４から読み出す（図２９ステップＳ１０００）。そして、結合データ転送部１２３ａは、ライトポインタＷＰの初期値として先頭アドレスＡ０を設定する（図２９ステップＳ１００１）。
【０３２５】
続いて、結合データ転送部１２３ａは、ステップＳ８０２〜Ｓ８０６と同等のステップＳ１００２〜Ｓ１００６の処理を行う。結合データ転送部１２３ａは、ライトポインタＷＰにデータのサイズＣＤを加算した値（ＷＰ＋ＣＤ）が、上限値（Ａ０＋Ｃ０）より小さい場合（図３０ステップＳ１００６においてｙｅｓ）、データ結合部１２０から通知された情報（結合した各データのサイズ）に基づいて、データ用メモリ１１５に転送すべきデータを構成するｋ個のデータのデータ長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１２３０ａに書き込む（図３０ステップＳ１００７）。
【０３２６】
図３０のステップＳ１００８〜Ｓ１０１１の処理は、図２３のステップＳ８０８〜Ｓ８１１の処理と同等である。
次に、結合データ転送部１２３ａは、ライトポインタＷＰをデータ用メモリ１１５の転送先の先頭アドレスとして、データ用メモリ１１５に転送すべきデータ（単体のデータまたはデータブロック）を、データ用メモリ１１５の転送先の先頭アドレスから始まるバッファ領域に書き込む（図３１ステップＳ１０１２）。
【０３２７】
図３１のステップＳ１０１３〜Ｓ１０１８の処理は、図２４のステップＳ８１３〜Ｓ８１８の処理と同等である。結合データ転送部１２３ａは、ステップＳ１０１７またはＳ１０１８の処理後、ステップＳ１００３に戻る。
【０３２８】
また、結合データ転送部１２３ａは、ライトポインタＷＰに、データ用メモリ１１５に転送すべきデータのサイズＣＤを加算した値（ＷＰ＋ＣＤ）が、上限値（Ａ０＋Ｃ０）以上の場合（図３０ステップＳ１００６においてｎｏ）、データのサイズＣＤと、リードポインタＲＰからデータ用メモリ１１５内のバッファ領域の先頭アドレスＡ０を減算した値（ＲＰ−Ａ０）とを比較する（図３０ステップＳ１０１９）。
【０３２９】
結合データ転送部１２３ａは、データのサイズＣＤが、減算値（ＲＰ−Ａ０）より小さい場合（ステップＳ１０１９においてｙｅｓ）、データ結合部１２０から通知された情報（結合した各データのサイズ）に基づいて、データ用メモリ１１５に転送すべきデータを構成するｋ個のデータのデータ長を示す受信データサイズＬ＃ｎ〜Ｌ＃（ｎ＋ｋ−１）を、ディスクリプタ１２３０ａに書き込む（図３２ステップＳ１０２０）。
【０３３０】
図３２のステップＳ１０２１〜Ｓ１０２４の処理は、図２５のステップＳ８２１〜Ｓ８２４の処理と同等である。
次に、結合データ転送部１２３ａは、データ用メモリ１１５に転送すべきデータ（単体のデータまたはデータブロック）を、データ用メモリ１１５の先頭アドレスＡ０から始まるバッファ領域に書き込む（図３２ステップＳ１０２５）。
【０３３１】
図３２のステップＳ１０２６〜Ｓ１０３１の処理は、図２５のステップＳ８２６〜Ｓ８３１の処理と同等である。結合データ転送部１２３ａは、ステップＳ１０３０またはＳ１０３１の処理後、ステップＳ１００３に戻る。
【０３３２】
次に、結合データ転送部１２３ａによるリードポインタＲＰの更新処理について説明する。最初に、結合データ転送部１２３ａは、リードポインタＲＰの初期値として、データ用メモリ１１５のデータブロック用のバッファ領域の先頭アドレスＡ０を設定する（図３３ステップＳ１０４０）。また、結合データ転送部１２３ａは、有効フラグの確認順を示す変数ｎを１に初期化する（図３３ステップＳ１０４１）。なお、この変数ｎと図２９〜図３２の変数ｎとは同じ値であるから、ステップＳ１０４１はステップＳ１００２と同じ処理である。
図３３のステップＳ１０４２〜Ｓ１０５０の処理は、図２７のステップＳ８４２〜Ｓ８５０の処理と同等である。
【０３３３】
こうして、本実施例のパケット処理装置は、纏め書き込みを実現することができ、かつ複数のデータが結合したデータブロックを元の複数のデータに復元するための情報をディスクリプタ１２３０ａに書き込む手段（結合データ転送部１２３ａ）を備えている。本実施例によれば、復元処理の受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂでの実行を不要とすることができ、かつ、纏め書き込みの効果による高い受信性能を実現することが可能となる。
【０３３４】
また、従来の図４２の構成で、纏め書き込みを正常に行うためには、受信処理用（読み出し処理用）のソフトウェアによって事前に、データ用メモリ１１５内に、Ｎ×ＤＢ＿ｍｕｘ（ＤＢ＿ｍｕｘはデータブロックの最大サイズ）のバッファ領域を確保しておく必要がある。
これに対して、本実施例のパケット処理装置では、図１９の構成と同様に、より小さいバッファ領域で纏め書き込みを正常に行うことができる。
【０３３５】
本実施例のパケット処理装置では、結合データ転送部１２３ａがディスクリプタ１２３０ａの情報（先頭アドレス、受信データサイズ、受信完了フラグ）を書き込むことにより、復元処理を不要としている。
【０３３６】
復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂで実現しようとすると、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段が必要となる。
【０３３７】
また、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂで実現しようとすると、纏め書き込み完了後、受信処理が起動されるまで、場合によっては複数のデータブロック分の復元処理に必要な情報を保持しておく必要があることを考慮しなければならない。
【０３３８】
これに対して、本実施例のパケット処理装置では、１つのデータブロックの纏め書き込みが完了した時点でデータブロックの復元処理は終わっているので、複数のデータブロック分の情報を保持する必要がない。したがって、復元処理を受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂで実現する場合と比較して、本実施例の方がハードウェアの規模が小さい。これは、データブロックを元の複数のデータに復元する処理をソフトウェアで実装する場合で比較しても同じである。
【０３３９】
例えば、図４２の構成でデータ用メモリ１１５と回線対応部１００以外の構成をすべてソフトウェアで実現した場合、データ用メモリ１１５への書き込みの処理と、復元処理を含む受信処理とを異なるプロセッサ（もしくはバーチャルマシン等）に実装すると、データ用メモリ１１５への書き込み完了後、受信処理が起動されるまで、場合によっては複数のデータブロック分の復元処理に必要な情報を保持しておく必要があるため、複数のデータブロック分の復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ用メモリ１１５等に保持しておく必要がある。
【０３４０】
これに対して、本実施例の構成でデータ用メモリ１１５と回線対応部１００以外の構成をすべてソフトウェアで実現した場合は、データ用メモリ１１５への書き込みの処理と、復元処理を含まない受信処理とを異なるプロセッサ（もしくはバーチャルマシン等）に実装した場合でも、データ用メモリ１１５への書き込みの処理と復元処理を同じプロセッサ（もしくはバーチャルマシン等）に実装することにより、複数のデータブロック分の情報（結合したデータの数、データ毎のサイズ）を保持する必要がない、すなわち、１つのデータブロック分のみの復元処理に必要な情報（結合したデータの数、データ毎のサイズ）をデータ用メモリ１１５等に保持しておくだけでよい。
【０３４１】
つまり、本実施例の構成は、図４２の構成と比較して、復元処理に必要な情報（結合したデータの数、データ毎のサイズ）の保持に使用するデータ用メモリ１１５等の容量（書き込み可能なビット数）が小さくてもよいことになり、必要となるハードウェアの規模を削減することができる。
【０３４２】
また、復元処理に必要な情報をデータ結合部１２０から受信処理部１１７、データ処理部１１６、もしくは図４２の結合データ分離部１０８ｂに通知する手段として、復元処理に必要な情報をデータ用メモリ１１５に書き込むことも可能である。しかし、この場合、纏め書き込みに使用するバスの帯域の一部を、復元処理に必要な情報で占有してしまうことになるので、本来のデータの書き込みに使用できる実効帯域が小さくなり、その結果、纏め書き込みの性能が劣化する。
【０３４３】
本実施例のパケット処理装置では、復元処理に必要な情報を、データ用メモリ１１５ではなく、データ用メモリ１１５が接続されているバスを使用しない別のメモリ（データ結合部１２０からの書き込みと結合データ転送部１２３ａからの読み出しだけが可能であれば良い）に保持することができ、上記のような実効帯域の劣化は起こらない。
【０３４４】
第３の実施例と同様に、本実施例の変形として、データ結合部１２０においてデータの種類を判定して同じ種類のデータをデータブロックとして纏める構成としてもよいし、データの種類に応じて複数のディスクリプタ１２３０ａを使い分ける構成としてもよい。データの種類別にディスクリプタ１２３０ａを用意し、データの種類に応じて複数のディスクリプタ１２３０ａを使い分ける構成とすると、データの種類毎に異なる受信処理を行うことが容易になる。
【０３４５】
また、本実施例において、複数のＣＰＵコアを内蔵するプロセッサのコア毎に複数のディスクリプタ１２３０ａを使い分ける構成としてもよいし、バーチャルマシン毎に複数のディスクリプタ１２３０ａを使い分ける構成としてもよい。ＣＰＵコア毎もしくはバーチャルマシン毎に複数のディスクリプタ１２３０ａを使い分ける構成とすることにより、ディスクリプタ１２３０ａが１個のみの場合と比較して、ソフトウェアによる書き込み処理および読み出し処理の性能が向上する。
【０３４６】
第２の実施例、及び、第４の実施例のパケット処理装置において、データ用メモリ１１５と転送管理部１２２，１２２ａとデータ処理部１１６と受信処理部１１７と結合データ転送部１２３，１２３ａとは、プロセッサ、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。また、上記のとおり、結合データ転送部１２１，１２１ａの一部の処理をコンピュータで実現することも可能である。
【０３４７】
コンピュータの構成例を図３４に示す。コンピュータは、ＣＰＵ（Central Processing Unit）２００と、記憶装置２０１と、インターフェース装置（以下、Ｉ／Ｆと略する）２０２とを備えている。このようなコンピュータにおいて、本発明のパケット処理方法を実現させるためのプログラムは記憶装置２０１に格納される。ＣＰＵ２００は、記憶装置に格納されたプログラムに従って第２の実施例、及び、第４の実施例で説明した処理を実行する。
【産業上の利用可能性】
【０３４８】
本発明は、通信データのプロトコル処理や転送処理等を行う技術に適用することができる。
【符号の説明】
【０３４９】
１００…回線対応部、１１４…パケット処理部、１１５…データ用メモリ、１１６…データ処理部、１１７…受信処理部、１１８…受信バッファ、１１９…結合閾値制御部、１２０…データ結合部、１２１，１２１ａ，１２３，１２３ａ…結合データ転送部、１２２，１２２ａ…転送管理部、１２４…制御用レジスタ、１２１０，１２１０ａ，１２３０，１２３０ａ…ディスクリプタ、１２１１，１２１１ａ…ＤＭＡコントローラ。
【図１】
2020178303.tif 000003
【図２】
2020178303.tif 000004
【図３】
2020178303.tif 000005
【図４】
2020178303.tif 000006
【図５】
2020178303.tif 000007
【図６】
2020178303.tif 000008
【図７】
2020178303.tif 000009
【図８】
2020178303.tif 000010
【図９】
2020178303.tif 000011
【図１０】
2020178303.tif 000012
【図１１】
2020178303.tif 000013
【図１２】
2020178303.tif 000014
【図１３】
2020178303.tif 000015
【図１４】
2020178303.tif 000016
【図１５】
2020178303.tif 000017
【図１６】
2020178303.tif 000018
【図１７】
2020178303.tif 000019
【図１８】
2020178303.tif 000020
【図１９】
2020178303.tif 000021
【図２０】
2020178303.tif 000022
【図２１】
2020178303.tif 000023
【図２２】
2020178303.tif 000024
【図２３】
2020178303.tif 000025
【図２４】
2020178303.tif 000026
【図２５】
2020178303.tif 000027
【図２６】
2020178303.tif 000028
【図２７】
2020178303.tif 000029
【図２８】
2020178303.tif 000030
【図２９】
2020178303.tif 000031
【図３０】
2020178303.tif 000032
【図３１】
2020178303.tif 000033
【図３２】
2020178303.tif 000034
【図３３】
2020178303.tif 000035
【図３４】
2020178303.tif 000036
【図３５】
2020178303.tif 000037
【図３６】
2020178303.tif 000038
【図３７】
2020178303.tif 000039
【図３８】
2020178303.tif 000040
【図３９】
2020178303.tif 000041
【図４０】
2020178303.tif 000042
【図４１】
2020178303.tif 000043
【図４２】
2020178303.tif 000044
【図４３】
2020178303.tif 000045