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