(57)【特許請求の範囲】
【請求項１】
受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理するリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
前記リストの先頭から所定範囲内に番号のある待ち行列に関する状態変数だけを一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記リスト手段の先頭から取り出された番号の待ち行列からパケットを送出し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有するノード装置。
【請求項２】
前記制御手段は、前記リスト手段の先頭から取り出された待ち行列からパケットを送出するときに更新した前記状態変数から、該待ち行列がまだパケットを送信可能な状態であれば前記リスト手段に該待ち行列の番号を追加し、
前記状態変数一時保存手段は、前記制御手段が前記リスト手段から番号を取り出したとき、前記リスト手段の先頭から前記所定範囲となった待ち行列に関する状態変数を新たに保存し、また、前記リスト手段に待ち行列の番号が追加されたとき、前記リスト手段内の番号の数が前記所定範囲内であれば、該待ち行列に関する状態変数を保存する、請求項１記載のノード装置。
【請求項３】
受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理するリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
所定数以下の待ち行列に関する状態変数を一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記状態変数一時保存手段に状態変数が保存されている各待ち行列の番号を、前記リスト手段の代わりに保持する少なくとも１つの送信候補手段と、
前記送信候補手段に保持されている番号の待ち行列のうち、パケットを送信可能なものからパケットを送出し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有するノード装置。
【請求項４】
前記状態変数一時保存手段は、該状態変数一時保存手段に空きが生じると、前記リスト手段の先頭にある番号の待ち行列に関する状態変数を新たに保存し、また、新たに、パケットを送信可能な状態となった待ち行列があるときに前記状態変数一時保存手段に空きがあれば、該待ち行列に関する状態変数を新たに保存し、
前記制御手段は、いずれかの待ち行列からパケットを送出したときに更新した状態変数から、該待ち行列がまだパケットを送信可能な状態の場合、前記リスト手段が空ならば、該状態変数を前記状態変数一時保存手段に戻し、前記リスト手段が空でなければ、該状態変数を前記状態変数保存手段へ戻す、請求項１〜３のいずれか１項に記載のノード装置。
【請求項５】
前記パケットは、その属性に応じて、いずれかの待ち行列に格納され、
前記状態変数は、前記属性と関連付けて各待ち行列に付与されたウエイトあるいは帯域と、該待ち行列から送出されたパケットとから算出される、該待ち行列から送出可能なパケット数、あるいは該待ち行列からパケットとして送出可能なデータ量である、請求項１〜４のいずれか１項に記載されたノード装置。
【請求項６】
前記待ち行列は、少なくとも１つのパケットを格納しており、前記状態変数によりパケットの送出が許容されているとき、パケットを送出可能な状態である、請求項５記載のノード装置。
【請求項７】
前記リスト手段が複数のリストからなる、請求項１〜６のいずれか１項に記載のノード装置。
【請求項８】
前記リスト手段内の複数のリストが巡回的に選択される、請求項７記載のノード装置。
【請求項９】
前記リスト手段内の複数のリストが、番号が書き込まれるときには格納されている待ち行列の数の少ないものが選択され、番号が取り出されるときには格納されている待ち行列の数の多いものが選択される、請求項７記載のノード装置。
【請求項１０】
待ち行列の番号が、該待ち行列に割り当てられた帯域から判断されたパケットを送出すべき時刻毎に、記録されるカレンダ手段をさらに有し、
前記制御手段が、前記カレンダ手段において現在の時刻にパケットを送出すべきとされる待ち行列の番号を該カレンダ手段から前記リスト手段に移す、請求項１〜９のいずれか１項に記載のノード装置。
【請求項１１】
受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理する第１のリスト手段と、
送信待ちの状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理する第２のリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
前記第１のリストの先頭から所定範囲内に番号のある待ち行列に関する状態変数を一時的に保存し、さらに、前記第１のリストに前記所定範囲を満たす待ち行列の番号がないとき、足りない分を前記第２のリストの先頭からとって一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記第１のリストの先頭から取り出された番号の待ち行列からパケットを送出し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有するノード装置。
【請求項１２】
前記制御手段は、前記リスト手段の先頭から取り出された待ち行列からパケットを送出するときに更新した前記状態変数から、該待ち行列がまだパケットを送信可能な状態であれば前記第１のリスト手段に該待ち行列の番号を追加し、該待ち行列が送信待ちの状態であれば前記第２のリスト手段に該待ち行列の番号を追加し、
前記状態変数一時保存手段は、前記制御手段が前記第１のリスト手段から番号を取り出したとき、前記第１のリスト手段の先頭から前記所定範囲となった待ち行列に関する状態変数を新たに保存し、また、前記第１のリスト手段に待ち行列の番号が追加されたとき、前記第１のリスト手段内の番号の数が前記所定範囲内であれば、該待ち行列に関する状態変数を保存し、また、前記第２のリスト手段に待ち行列の番号が追加されたとき、前記第１のリスト手段内の番号数と前記第２のリスト手段内の番号の数との和が前記所定範囲内であれば、該待ち行列に関する状態変数を保存する、請求項１１記載のノード装置。
【請求項１３】
受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順番を管理する第１のリスト手段と、
送信待ちの状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理する第２のリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
所定数以下の待ち行列に関する状態変数を一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記状態変数一時保存手段に状態変数が保存されている各待ち行列の番号を、前記第１または第２のリスト手段の代わりに保持する少なくとも１つの送信候補手段と、
前記送信候補手段に保持されている番号の待ち行列のうち、パケットを送信可能なものからパケットを送信し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有するノード装置。
【請求項１４】
状態変数一時保存手段は、該状態変数一時保存手段に空きが生じると、前記第１のリスト手段の先頭にある番号の待ち行列に関する状態変数を新たに保存し、前記第１のリスト手段が空ならば、前記第２のリスト手段の先頭にある番号の待ち行列に関する状態変数を新たに保存し、また、新たに、パケットを送信可能な状態あるいは送信待ちの状態となった待ち行列があるときに前記状態変数一時保存手段に空きがあれば、該待ち行列に関する状態変数を新たに保存し、
前記制御手段は、いずれかの待ち行列からパケットを送出したときに更新した状態変数から、該待ち行列がパケットを送信可能な状態の場合、前記第１のリスト手段が空ならば、該状態変数を前記状態変数一時保存手段に戻し、前記第１のリスト手段が空でなければ、該状態変数を前記状態変数保存手段へ戻し、また、いずれかの待ち行列からパケットを送出したときに更新した状態変数から、該待ち行列が送信待ちの状態の場合、前記第１および第２のリスト手段が空ならば、該状態変数を前記状態変数一時保存手段へ戻し、前記第１または第２のリスト手段が空でなければ、該状態変数を前記状態変数保存手段へ戻す、請求項１３記載のノード装置。
【請求項１５】
前記パケットは、その属性に応じて、いずれかの待ち行列に格納され、
前記状態変数は、前記属性と関連付けて各待ち行列に付与されたウエイトあるいは帯域と、該待ち行列から送出されたパケットとから算出される、該待ち行列から送出可能なパケット数、あるいは該待ち行列からパケットとして送出可能なデータ量である、請求項１１〜１４のいずれか１項に記載のノード装置。
【請求項１６】
前記待ち行列は、少なくとも１つのパケットを格納しており、前記状態変数によりパケットの送出が許容されているとき、パケットを送出可能な状態である、請求項１５記載のノード装置。
【請求項１７】
前記待ち行列は、少なくとも１つのパケットを格納しているが、前記状態変数からパケットを送信可能でないとき、送信待ちの状態である、請求項１５または１６に記載のノード装置。
【請求項１８】
前記第１および第２のリスト手段が、それぞれ複数のリストからなる、請求項１１〜１７のいずれか１項に記載のノード装置。
【請求項１９】
前記第１および第２のリスト手段内の複数のリストは、それぞれ巡回的に選択される、請求項１８記載のノード装置。
【請求項２０】
前記第１および第２のリスト手段内の複数のリストは、それぞれ、番号が書き込まれるときには格納されている待ち行列の数の少ないものが選択され、番号が取り出されるときには格納されている待ち行列の数の多いものが選択される、請求項１８記載のノード装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、受信したパケットあるいはセルをその属性に基づいていずれかの待ち行列へと格納し、各待ち行列に設定された送出条件に基づいてパケットの送出を制御するルータあるいはスイッチ等のノード装置に関し、特に、非常に多くの待ち行列から高速でパケットを送出するノード装置に関する。
【０００２】
【従来の技術】
パケット通信では可変長のパケットにより通信が行われ、ＡＴＭ通信では固定長のセルにより通信が行われる。そして、これらパケットおよびセルには、その中に含まれる情報等によりそれぞれ属性が与えられている。ルータやスイッチは、パケットやセルをその属性に応じて処理する。
【０００３】
以下、本明細書では簡単化のため、ルータまたはスイッチ等のノード装置を単にノード装置と称し、パケットまたはセルを単にパケットと称することとする。
【０００４】
一般に、ノード装置は、パケットの属性に対応する複数の待ち行列を有しており、各待ち行列には送出条件が設定されている。ノード装置は、受信したパケットをその属性に応じて、いずれかの待ち行列に格納し、各待ち行列に設定された送出条件に従って送出する。待ち行列は、キューとも呼ばれる。
【０００５】
従来のパケット送出制御方法として、Ｗｅｉｇｈｔｅｄ  Ｒｏｕｎｄ  Ｒｏｂｉｎ方式（Ｍ．Ｋａｔａｖｅｎｉｓ他，"Ｗｅｉｇｈｔｅｄ  ｒｏｕｎｄ−ｒｏｂｉｎ  ｃｅｌｌ  ｍｕｌｔｉｐｌｅｘｉｎｇ  ａ  ｇｅｎｅｒａｌ−ｐｕｒｐｏｓｅ  ＡＴＭ  ｓｗｉｔｃｈ  ｃｈｉｐ"，ＩＥＥＥ  Ｊｏｕｒｎａｌｓ  ｏｎ  Ｓａｌｅｃｔｅｃ  Ａｒｅａｓ  ｉｎ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ，Ｃｏｌ．９，Ｎｏ．８，１９９１、以下ＷＲＲ方式と称す）がある。ＷＲＲ方式では、各待ち行列に重みが設定され、設定された重みの比に従って各待ち行列からパケットが送出される。
【０００６】
ＷＲＲ方式のノード装置には待ち行列毎にウエイトが設定されている。ウエイトは各待ち行列に与えられた重みである。各待ち行列は、回線の帯域をウエイトに応じて分け合ってパケットを送出する。また、ＷＲＲ方式のノード装置は、待ち行列毎のカウンタを持っている。各カウンタには、それぞれに対応した待ち行列から送出可能なパケットの数が記録されている。カウンタの初期値はウエイトの値である。また、各待ち行列には巡回順所が定めれている。
【０００７】
本方式では、ノード装置は、１つ以上のパケットが格納されており、かつカウンタが１以上の待ち行列を巡回順序に従って探す。ノード装置は、１つ以上のパケットが格納されておりかつカウンタが１以上の待ち行列を見つけると、その待ち行列から１つのパケットを送出し、そのカウンタを１つ減じる。そして、ノード装置は、パケットを送出した待ち行列の次の待ち行列から巡回順序に従って、再度、１つ以上のパケットが格納されておりかつカウンタが１以上の待ち行列を探す。
【０００８】
待ち行列を一巡しても、１つ以上のパケットが格納されておりかつカウンタが１以上の待ち行列、すなわちパケットを送出可能な待ち行列がなければ、ノード装置は、全ての待ち行列のカウンタを初期値、すなわちウエイトの値に戻した後に再び処理を開始する。カウンタを初期値に戻す動作を、以下リセット動作と称する。
【０００９】
したがって、ＷＲＲ方式では、１つの待ち行列だけがパケットを送出可能なとき、その待ち行列からパケットが送出されると、その後ノード装置は他の全ての待ち行列についてパケットの送出が可能か否か検査する。ノード装置は、１つのパケットを送出するために、最大で、全ての待ち行列を検査する必要がある。その処理量は待ち行列数に比例するので、待ち行列数が多くなれば、ノード装置のパケット処理速度を上げることができなくなる。
【００１０】
ＷＲＲ方式においてパケット処理を高速化するための第１の従来方法が、特開２００１−０５３７９８号公報に記載されている。特開２００１−０５３７９８号公報に記載された方法では、連想メモリ（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ；ＣＡＭ）がノード装置に備えられ、パケットの送出が可能な待ち行列の選択に利用される。連想メモリには各待ち行列の状態が記録されており、検索語と一致する待ち行列を高速に検索することができる。ノード装置は、パケットを送出可能な状態を示す検索語で連想メモリを検索することにより、次にパケットを送出する待ち行列を見つける。
【００１１】
本方法のノード装置は、待ち行列数に関係なく、常に一定時間で、高速に、パケットの送出が可能な待ち行列を検索できるので、待ち行列の数が多い場合の高速処理に有効である。
【００１２】
ＷＲＲ方式においてパケット処理を高速化するための第２の従来方法が、特開平１１−０４１３１６号公報に記載されている。特開平１１−０４１３１６号公報に記載された方法では、ノード装置は、第１および第２のリストを管理している。第１のリストは、パケットを送出可能な待ち行列、すなわちカウンタが１以上でかつ１つ以上のパケットが格納されている待ち行列の番号を管理する。第２のリストは、１つ以上のパケットが格納されているが、カウンタがゼロであるためパケットを送出できないでいる待ち行列の番号を管理する。
【００１３】
ノード装置は、第１のリストの先頭にある待ち行列の番号を取りだし、その番号の待ち行列からパケットを送出する。パケットを送出した待ち行列がまだパケットを送出可能な状態のとき、ノード装置は、その待ち行列の番号を第１のリストの最後に追加する。また、パケットを送出した待ち行列にまだパケットが残っているが、カウンタがゼロになったとき、ノード装置は、その待ち行列を第２のリストに追加する。また、パケットを送出した待ち行列のカウンタがゼロになると、ノード装置は、その待ち行列をいずれのリストにも追加しない。
【００１４】
そして、ノード装置は、パケットを送出可能な待ち行列がなくなったとき、すなわち第１のリストが空になったとき、全ての待ち行列のカウンタに対してリセット動作を行い、第２のリスト内の待ち行列番号を全て第１のリストに追加して、再びパケット処理を開始する。
【００１５】
第３の従来方法として、従来の他のパケット送出制御方法であるＤｅｆｉｃｉｔ  Ｒｏｕｎｄ  Ｒｏｂｉｎ方式（Ｍ．Ｓｈｒｅｅｄｈａｒ  ａｎｄ  Ｇ．Ｖａｒｇｈｅｓｅ，Ｅｆｆｉｃｉｅｎｔ  Ｆａｉｒ  Ｑｕｅｕｅｉｎｇ  ｕｓｉｎｇＤｅｆｉｃｉｔ  Ｒｏｕｎｄ  Ｒｏｂｉｎ，ＩＥＥＥ／ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｎｅｔｗｏｒｋｉｎｇ、以下ＤＲＲ方式と称す）がある。ＤＲＲ方式は、ノード装置がウェイトとカウンタを有する点ではＷＲＲ方式と同様である。
【００１６】
しかし、ＤＲＲ方式は、各待ち行列からパケットを１つずつ巡回的に送出するＷＲＲ方式と異なり、１つの待ち行列の送出可能なパケットが連続して送出される。また、ＤＲＲ方式では、カウンタの値は、送出可能な、パケットのデータ量（例えば、バイト）である点でＷＲＲ方式と異なる。また、ウェイトもデータ量の単位で定められる。さらに、カウンタのリセット動作では、カウンタにウエイトが加算される。
【００１７】
そのため、ノード装置は、上述された第１のリストを管理している。そして、ノード装置は、第１のリストの先頭にある待ち行列の番号を取り出し、その番号の待ち行列に格納されているパケットが無くなるか、あるいはカウンタの値が先頭パケットのパケット長よりも小さくなるまで、連続してパケットを送出する。ノード装置は、１つのパケットを送出すると、そのパケット長をカウンタから減算する。
【００１８】
ノード装置は、１つの待ち行列からパケットを送信可能なだけ送信すると、その待ち行列のカウンタに対してリセット動作を行った後、その待ち行列に１つ以上のパケットが蓄積されていれば、その待ち行列を第１のリストの最後に追加する。
【００１９】
従来のさらに他のパケット送出制御方法では、ＷＲＲ方式やＤＲＲ方式のようにカウンタは用いられず、送信時刻が用いられる。その一例として、Ｗｅｉｇｈｔｅｄ  Ｆａｉｒ  Ｑｕｅｕｅｉｎｇ方式（Ａ．Ｋ．Ｐａｒｅｋｈ  ａｎｄ  Ｒ．Ｇ．Ｇａｌｌａｇｅｒ，Ａ  Ｇｅｎｅｒａｌｉｚｅｄ  ｐｒｏｃｅｓｓｏｒ  ｓｈａｒｉｎｇ  ａｐｐｒｏａｃｈ  ｔｏ  ｆｌｏｗ  ｃｏｎｔｒｏｌ  ｉｎ  ｉｎｔｅｇｒａｔｅｄ  ｓｅｒｖｉｃｅｓ  ｎｅｔｗｏｒｋｓ  ‐  Ｔｈｅ  ｓｉｎｇｌｅ  ｎｏｄｅ  ｃａｓｅ，ＩＥＥＥ  ＩＮＦＯＣＯＭ９２，Ｖｏｌ２，１９９２、以下ＷＦＱ方式と称す）や、ＷＦＱ方式から派生した様々な方式がある。
【００２０】
ＷＦＱ方式では、ノード装置は、各待ち行列から最後に送出されたパケットの仮想的な送信終了時刻を記録しており、最も送信終了時刻が早い待ち行列から順番にパケットを送出する。したがって、ＷＦＱ方式では、ノード装置は、パケットを送出するとき、全ての待ち行列の中から最も送信終了時刻の早いものを探す必要がある。送信終了時刻の最も早い待ち行列を探す処理の計算量は、通常、待ち行列数に比例する。したがって、待ち行列数が多くなれば、ノード装置のパケット処理速度を上げることができなくなる。
【００２１】
ＷＦＱ方式においてパケット処理を高速化した従来方法は、パケットの送信予定を示すカレンダが用いられる。なお、このカレンダは、タイムホイールや、その他の様々な呼び方で呼ばれる。カレンダは複数のエントリを含む。各エントリはそれぞれ時刻を示すテーブルであり、時系列に並んでいる。各エントリには、それに対応した時刻にパケットを送信する予定の待ち行列の番号が記録されている。
【００２２】
ノード装置は、送信終了時刻に基づいてカレンダを作成し、パケットを送信するときにそのカレンダを用いる。各待ち行列の送信時刻に対応したエントリには、その待ち行列の番号が記されている。パケットを送出するとき、ノード装置は、カレンダのエントリを時系列順に読み出すことにより、パケットを送出する待ち行列を得る。これにより、ノード装置は、パケットを送出するとき、全ての待ち行列の中から最も送信終了時間の早いものを見つけるのに、待ち行列の数に比例した大量の処理を行う必要がない。
【００２３】
また、ＷＦＱ方式に類似した様々な方式が提案されており、その一例である第４の従来方法が特開２０００−１８３９５９号公報に記載されている。特開２０００−１８３９５９号公報に記載されている方法によれば、ノード装置は、カレンダの各エントリに、そのエントリに対応した時刻にパケットを送信する待ち行列を記録する。その際、ノード装置は、各エントリに複数の待ち行列をリスト形式で記録することができる。
【００２４】
【発明が解決しようとする課題】
第１の従来方式では、ノード装置は連想メモリを持つ必要がある。連想メモリは通常のメモリに比べて非常に高価なため、第１の従来方式のノード装置のコストは非常に高くなっていた。また、第１の従来方式のノード装置は、連想メモリの他にカウンタなどのために通常のメモリをも持つ必要があり、そのため、さらにコストが上がっていた。
【００２５】
第２の従来方式では、第１または第２のリストは図１４のように、各データがポインタで連結された構造をとるのが一般的である。この構造では、直前のポインタが読み出されるまで、次のポインタを読出すことができない。そのため、ノード装置は、ポインタの読み出し間隔よりも、パケットの送信間隔を短くすることはできない。したがって、第２の従来方式によれば、超高速回線に適用可能なノード装置を作れなかった。
【００２６】
また、第３の従来方式においても、ノード装置は、リストで待ち行列番号を管理するので、第２の従来方式と同様に超高速回線に適用することはできなかった。
【００２７】
第２の従来方式のノード装置において、待ち行列の番号を記録するリストを、図１５に示されたように待ち行列番号を順番に並べたテーブルで管理すると、前の待ち行列の番号の読み出し前に次の待ち行列の番号を読み出せるため、高速化が可能である。しかし、リストの数だけテーブルが必要なので、第２の従来方式のノード装置のように複数のリストを管理するには大きなメモリが必要であった。
【００２８】
第４の従来方式では、ノード装置は、送信時刻毎に待ち行列番号をリストで管理している。そのため、各データがポインタで連結された一般的な構造でリストを管理すると、メモリから待ち行列番号を読み出すのにかかる時間よりも、パケット送出間隔を短くできず、ノード装置は高速回線に対応できない。
【００２９】
第２〜第４の従来方式では、ノード装置は、リストから待ち行列の番号を取り出し、取その番号の待ち行列に関する状態変数を読み出した後に、パケットを送信する。パケットを送信すると、ノード装置は状態変数を更新し、その結果に従って待ち行列の番号を適切なリストに再び追加する。メモリからのデータの読み出しは、他の処理に比べて時間がかかるため、状態変数のメモリからの読み出しがノード装置の高速化を妨げていた。
【００３０】
本発明の目的は、その属性により多数の待ち行列に分配したパケットを、各待ち行列に設定された送出条件に従って送出する制御を高速で行うノード装置を提供することである。
【００３１】
【課題を解決するための手段】
上記目的を達成するために、本発明のノード装置は、受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理するリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
前記リストの先頭から所定範囲内に番号のある待ち行列に関する状態変数だけを一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記リスト手段の先頭から取り出された番号の待ち行列からパケットを送出し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有している。
【００３２】
したがって、本発明のノード装置は、リスト手段の先頭付近の待ち行列の状態変数を状態変数保存手段から、それよりデータ量の小さい状態変数一時保存手段に先読みしているので、パケットを送出するときに、状態変数に関する処理を高速で行うことができる。
【００３３】
なお、前記制御手段は、前記リスト手段の先頭から取り出された待ち行列からパケットを送出するときに更新した前記状態変数から、該待ち行列がまだパケットを送信可能な状態であれば前記リスト手段に該待ち行列の番号を追加し、
前記状態変数一時保存手段は、前記制御手段が前記リスト手段から番号を取り出したとき、前記リスト手段の先頭から前記所定範囲となった待ち行列に関する状態変数を新たに保存し、また、前記リスト手段に待ち行列の番号が追加されたとき、前記リスト手段内の番号の数が前記所定範囲内であれば、該待ち行列に関する状態変数を保存してもよい。
【００３４】
したがって、本発明のノード装置は、待ち行列の状態変数を状態変数保存手段から状態変数一時保存手段に常時先読みしている状態となるので、パケットを送出するときに、状態変数に関する処理を高速で行うことができる。
【００３５】
本発明の他のノード装置は、受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理するリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
所定数以下の待ち行列に関する状態変数を一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記状態変数一時保存手段に状態変数が保存されている各待ち行列の番号を、前記リスト手段の代わりに保持する少なくとも１つの送信候補手段と、
前記送信候補手段に保持されている番号の待ち行列のうち、パケットを送信可能なものからパケットを送出し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有している。
【００３６】
なお、前記状態変数一時保存手段は、該状態変数一時保存手段に空きが生じると、前記リスト手段の先頭にある番号の待ち行列に関する状態変数を新たに保存し、また、新たに、パケットを送信可能な状態となった待ち行列があるときに前記状態変数一時保存手段に空きがあれば、該待ち行列に関する状態変数を新たに保存し、
前記制御手段は、いずれかの待ち行列からパケットを送出したときに更新した状態変数から、該待ち行列がまだパケットを送信可能な状態の場合、前記リスト手段が空ならば、該状態変数を前記状態変数一時保存手段に戻し、前記リスト手段が空でなければ、該状態変数を前記状態変数保存手段へ戻してもよい。
【００３７】
また、前記パケットが、その属性に応じて、いずれかの待ち行列に格納され、
前記状態変数は、前記属性と関連付けて各待ち行列に付与されたウエイトあるいは帯域と、該待ち行列から送出されたパケットとから算出される、該待ち行列から送出可能なパケット数、あるいは該待ち行列からパケットとして送出可能なデータ量であってもよい。
【００３８】
また、前記待ち行列は、少なくとも１つのパケットを格納しており、前記状態変数によりパケットの送出が許容されているとき、パケットを送出可能な状態であるとしてよい。
【００３９】
また、前記リスト手段が複数のリストからなってもよい。
【００４０】
その場合、前記リスト手段内の複数のリストが巡回的に選択されてもよい。
【００４１】
また、前記リスト手段内の複数のリストが、番号が書き込まれるときには格納されている待ち行列の数の少ないものが選択され、番号が取り出されるときには格納されている待ち行列の数の多いものが選択されてもよい。
【００４２】
したがって、本発明のノード装置は、リスト手段が複数のリストに分離されているので、各リストのデータがポインタで連結された構造であっても、待ち行列番号をポインタの読み出し時間より短い間隔で読出すことが可能である。
【００４３】
なお、待ち行列の番号が、該待ち行列に割り当てられた帯域から判断されたパケットを送出すべき時刻毎に、記録されるカレンダ手段をさらに有し、
前記制御手段が、前記カレンダ手段において現在の時刻にパケットを送出すべきとされる待ち行列の番号を該カレンダ手段から前記リスト手段に移してもよい。
【００４４】
本発明のさらに他のノード装置は、受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理する第１のリスト手段と、送信待ちの状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理する第２のリスト手段と、全ての待ち行列に関する状態変数を保存する状態変数保存手段と、前記第１のリストの先頭から所定範囲内に番号のある待ち行列に関する状態変数を一時的に保存し、さらに、前記第１のリストに前記所定範囲を満たす待ち行列の番号がないとき、足りない分を前記第２のリストの先頭からとって一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、前記第１のリストの先頭から取り出された番号の待ち行列からパケットを送出し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有している。
【００４５】
なお、前記制御手段は、前記リスト手段の先頭から取り出された待ち行列からパケットを送出するときに更新した前記状態変数から、該待ち行列がまだパケットを送信可能な状態であれば前記第１のリスト手段に該待ち行列の番号を追加し、該待ち行列が送信待ちの状態であれば前記第２のリスト手段に該待ち行列の番号を追加し、
前記状態変数一時保存手段は、前記制御手段が前記第１のリスト手段から番号を取り出したとき、前記第１のリスト手段の先頭から前記所定範囲となった待ち行列に関する状態変数を新たに保存し、また、前記第１のリスト手段に待ち行列の番号が追加されたとき、前記第１のリスト手段内の番号の数が前記所定範囲内であれば、該待ち行列に関する状態変数を保存し、また、前記第２のリスト手段に待ち行列の番号が追加されたとき、前記第１のリスト手段内の番号数と前記第２のリスト手段内の番号の数との和が前記所定範囲内であれば、該待ち行列に関する状態変数を保存してもよい。
【００４６】
本発明のさらに他のノード装置は、受信されたパケットを複数の待ち行列のいずれかに格納し、前記各待ち行列がパケットを送信可能な状態であるか否かを、前記待ち行列毎の状態変数により判断し、パケットを送信可能な状態の前記待ち行列から前記パケットを送出するノード装置であって、
パケットを送信可能な状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順番を管理する第１のリスト手段と、
送信待ちの状態の待ち行列の番号が書き込まれ、該番号の書き込まれた順序を管理する第２のリスト手段と、
全ての待ち行列に関する状態変数を保存する状態変数保存手段と、
所定数以下の待ち行列に関する状態変数を一時的に保存する、前記状態変数保存手段よりもデータ量の少ない状態変数一時保存手段と、
前記状態変数一時保存手段に状態変数が保存されている各待ち行列の番号を、前記第１または第２のリスト手段の代わりに保持する少なくとも１つの送信候補手段と、
前記送信候補手段に保持されている番号の待ち行列のうち、パケットを送信可能なものからパケットを送信し、前記状態変数一時保存手段にある該待ち行列の状態変数を更新する制御手段を有している。
【００４７】
なお、状態変数一時保存手段は、該状態変数一時保存手段に空きが生じると、前記第１のリスト手段の先頭にある番号の待ち行列に関する状態変数を新たに保存し、前記第１のリスト手段が空ならば、前記第２のリスト手段の先頭にある番号の待ち行列に関する状態変数を新たに保存し、また、新たに、パケットを送信可能な状態あるいは送信待ちの状態となった待ち行列があるときに前記状態変数一時保存手段に空きがあれば、該待ち行列に関する状態変数を新たに保存し、
前記制御手段は、いずれかの待ち行列からパケットを送出したときに更新した状態変数から、該待ち行列がパケットを送信可能な状態の場合、前記第１のリスト手段が空ならば、該状態変数を前記状態変数一時保存手段に戻し、前記第１のリスト手段が空でなければ、該状態変数を前記状態変数保存手段へ戻し、また、いずれかの待ち行列からパケットを送出したときに更新した状態変数から、該待ち行列が送信待ちの状態の場合、前記第１および第２のリスト手段が空ならば、該状態変数を前記状態変数一時保存手段へ戻し、前記第１または第２のリスト手段が空でなければ、該状態変数を前記状態変数保存手段へ戻してもよい。
【００４８】
また、前記パケットは、その属性に応じて、いずれかの待ち行列に格納され、
前記状態変数は、前記属性と関連付けて各待ち行列に付与されたウエイトあるいは帯域と、該待ち行列から送出されたパケットとから算出される、該待ち行列から送出可能なパケット数、あるいは該待ち行列からパケットとして送出可能なデータ量であってもよい。
【００４９】
また、前記待ち行列は、少なくとも１つのパケットを格納しており、前記状態変数によりパケットの送出が許容されているとき、パケットを送出可能な状態であるとしてもよい。
【００５０】
また、前記待ち行列は、少なくとも１つのパケットを格納しているが、前記状態変数からパケットを送信可能でないとき、送信待ちの状態であるとしてもよい。
【００５１】
また、前記第１および第２のリスト手段が、それぞれ複数のリストからなってもよい。
【００５２】
その場合、前記第１および第２のリスト手段内の複数のリストは、それぞれ巡回的に選択されてもよい。
【００５３】
また、前記第１および第２のリスト手段内の複数のリストは、それぞれ、番号が書き込まれるときには格納されている待ち行列の数の少ないものが選択され、番号が取り出されるときには格納されている待ち行列の数の多いものが選択されてもよい。
【００５４】
【発明の実施の形態】
本発明の一実施形態について図面を参照して詳細に説明する。
【００５５】
図１は、本実施形態のノード装置の構成を示すブロック図である。
【００５６】
図１を参照すると、ノード装置１００は、パケット振り分け部１０１、待ち行列１０２−１〜１０２−ｎ、パケット出力部１０３、送信可能リスト１０４−１，１０４−２、送信待ちリスト１０５−１，１０５−２、リセット制御部１０６、入力制御部１０７、出力制御部１０８、状態変数保存部１０９および状態変数一時保存部１１０を有している。
【００５７】
パケット振り分け部１０１は、回線Ｌ１からパケットを受信し、そのパケットの属性を調べて格納すべき待ち行列を選択する。ノード装置の一例として、ルータは、受信パケットの送信元ＩＰアドレス、送信先ＩＰアドレス、第４層プロトコル番号、送信元ポート番号、送信先ボート番号、ＴＯＳ（Ｔｙｐｅ  ｏｆ  Ｓｅｒｖｉｃｅ）情報等の属性から待ち行列を決定する。ノード装置の他の例として、イーサスイッチは、受信パケットの送信元ＭＡＣアドレス、送信先ＭＡＣアドレス、ＩＥＥＥ８０２．１ｐ優先度、ＶＬＡＮ−ＩＤ等の属性から待ち行列を決定する。
【００５８】
待ち行列１０２−１〜１０２−ｎは、パケット振り分け部１０１により属性毎に振り分けられたパケットを一時格納する。ここでは、待ち行列の数はｎであり、本実施形態は待ち行列数ｎが多数の場合に有効である。
【００５９】
パケット出力部１０３は、出力制御部１０８からの指示された待ち行列の先頭から１つのパケットを取り出して回線Ｌ２に送出する。
【００６０】
送信可能リスト１０４−１，１０４−２は、パケットの送信が可能な待ち行列の番号を保持する。パケットの送信が可能な待ち行列とは、カウンタが１以上であり、かつ１つ以上のパケットが格納されている待ち行列である。なお、基本的に、送信可能な待ち行列の番号の書き込みは、送信可能リスト１０４−１および送信可能リスト１０４−２に交互に行われ、番号の取り出しも交互に行なわれる。
【００６１】
送信待ちリスト１０５−１，１０５−２は、パケットの送信待ち状態の待ち行列の番号を保持する。パケットの送信待ち状態とは、１つ以上のパケットが格納されているがカウンタがゼロ以下の状態である。なお、基本的に、送信待ちの待ち行列の番号の書き込みも、送信待ちリスト１０５−１および送信待ちリスト１０５−２に交互に行われる。
【００６２】
リセット制御部１０６は出力制御部１０８から指示があると、リセット動作として、送信待ちリスト１０５−１の内容を送信可能リスト１０４−１に移し、送信待ちリスト１０５−２の内容を送信可能リスト１０４−２に移す。
【００６３】
入力制御部１０７は、受信したパケットを格納すべき待ち行列の状態変数を状態変数保存部１０９または状態変数一時保存部１１０から読み出す。そして、入力制御部１０７は、その状態変数に従って、待ち行列番号を、送信可能リスト１０４−１，１０４−２または送信待ちリスト１０５−１，１０５−２のうちいずれかに追加する。
【００６４】
出力制御部１０８は、各待ち行列からのパケットの送出を制御するために、まず、送信可能リスト１０４−１または１０４−２の先頭から待ち行列番号を取り出し、その番号の待ち行列に関する状態変数を状態変数一時保存部１１０から読み出す。なお、このとき出力制御部１０８は、送信可能リスト１０４−１または送信可能リスト１０４−２から交互に待ち行列番号を読出す。そして、出力制御部１０８は、その待ち行列のパケットの送出をパケット出力部２０３に指示する。また、出力制御部１０８は、状態変数を更新し、更新された状態変数により待ち行列番号をリストに追加する。また、出力制御部１０８は、パケットの送出をパケット出力部２０３に指示したとき、送信可能リスト１０４−１，１０４−２の双方が空になったら、リセット制御部１０６にリセット動作を指示する。
【００６５】
状態変数保存部１０９は、各待ち行列に関する状態変数を保持する。状態変数とは、ウエイトおよびカウンタの値や、リセット状態、待ち行列長等の情報である。ウエイトは、各待ち行列に与えられた重みである。各待ち行列は、回線の帯域をウエイトに応じて分け合ってパケットを送出する。カウンタは、待ち行列毎にあり、各待ち行列から送出可能なパケットのデータ量を管理している。リセット状態とは、リセットの指示がされた後に、リセット制御部１０６が実際にカウンタをリセットしたか否かを示す。リセットの指示がされ、カウンタがリセットされていなければ、その待ち行列のカウンタはリセット未実施の状態であり、リセットされていれば、リセット実施済である。
【００６６】
状態変数一時保存部１１０は、状態変数保存部１０９に保存されている状態変数のうち、送信可能リスト１０４−１，１０４−２および送信待ちリスト１０５−１，１０５−２の先頭からｍ個以内の待ち行列に関する状態変数を一時的に保持する。状態変数一次保存部１１０に保持された状態変数は、パケットを高速に送出処理するために一部の情報を先読みされた情報である。
【００６７】
図２は、本実施形態のノード装置におけるパケット受信動作を示すフローチャートである。
【００６８】
図２を参照すると、パケット振り分け部１０１は、ステップＳ１０１に、回線Ｌ１からパケットを受信すると、そのパケットを格納すべき待ち行列を決定する。ステップＳ１０２に、パケット振り分け部１０１は、その決定に従ってパケットをいずれかの待ち行列に格納する。
【００６９】
次に、入力制御部１０７は、ステップＳ１０３に、受信パケットが格納される待ち行列に他のパケットが格納されているか否か判定する。受信パケットが格納される待ち行列に他のパケットが格納されていれば、ノード装置１００はパケット受信動作を終了する。
【００７０】
受信パケットを格納する待ち行列に他のパケットが格納されていなければ、入力制御部１０２は、ステップＳ１０４に、その待ち行列のカウンタとリセット状態を状態変数保存部１０９または状態変数一時保存部１１０より読出す。
【００７１】
入力制御部１０７は、ステップＳ１０５に、その待ち行列のカウンタがリセット実施済で、かつカウンタの値がゼロ以下であるか否か判定する。
【００７２】
その待ち行列のカウンタの値が１以上であるか、または、その待ち行列がリセット未実施の状態であれば、入力制御部１０７は、ステップＳ１０７に、その待ち行列番号をいずれかの送信可能リスト１０４−１，１０４−２に追加する。なお、待ち行列番号の追加は、送信可能リスト１０４−１または送信可能リスト１０４−２へ交互にされる。あるいは、送信可能リスト１０４−１または送信可能リスト１０４−２のうち、記録されている待ち行列の数が少ない方に待ち行列番号を追加してもよい。ありいは、送信可能リスト１０４−１または送信可能リスト１０４−２のうち、待ち行列番号の書き込みや読み出しの動作が行われていない方に待ち行列番号を追加してもよい。
【００７３】
また、その待ち行列のカウンタがリセット済で、かつカウンタの値がゼロ以下であれば、入力制御部１０７は、ステップＳ１０６に、その待ち行列番号をいずれかの送信待ちリスト１０５−１，１０５−２に追加する。なお、待ち行列番号の追加は、送信待ちリスト１０５−１または送信待ちリスト１０５−２へ交互にされる。あるいは、送信待ちリスト１０５−１または送信待ちリスト１０５−２のうち、記録されている待ち行列の数が少ない方に待ち行列を追加してもよい。あるいは、送信待ちリスト１０５−１または送信待ちリスト１０５−２のうち、待ち行列番号の書き込みや読み出しの動作が行われていない方に待ち行列番号を追加してもよい。
【００７４】
ステップＳ１０８に、入力制御部１０７は、追加した待ち行列がリストの先頭からｍ番以内であるか否か判定する。
【００７５】
追加した待ち行列がリストの先頭からｍ番以内であれば、ステップＳ１０９に、入力制御部１０７は、その待ち行列の状態変数を状態変数保存部１０９から状態変数一時保存部１１０へと移し、ノード装置１００はパケット受信動作を終了する。
【００７６】
追加した待ち行列がリストの先頭からｍ番以内でなければ、ノード装置１００はそのままパケット受信動作を終了する。
【００７７】
図３は、本実施形態のノード装置におけるパケット送出動作を示すフローチャートである。
【００７８】
図３を参照すると、まず、出力制御部１０８は、ステップＳ２０１に、送信可能リスト１０４−１および送信可能リスト１０４−２の双方が空であるか否か判定する。
【００７９】
送信可能リスト１０４−１および送信可能リスト１０４−２の双方が空であれば、ステップＳ２０２に、出力制御部１０８はリセット制御部１０６に全ての待ち行列のリセットを指示する。リセット制御部１０６は、ステップＳ２０３に、送信待ちリスト１０５−１，１０５−２の内容をそれぞれ対応する送信可能リスト１０５−１，１０５−２へ移す。
【００８０】
なお、出力制御部１０８は、このときに全てのカウンタにウエイト値を加算して、カウンタをリセットしてもよいが、それには長時間かかる。そのため、本実施形態では、出力制御部１０８は、各待ち行列のパケットが送出されるときに、その待ち行列のカウンタをリセットする。したがって、ここでは出力制御部１０８から指示を受けたリセット制御部１０６がリセット動作をするだけである。そのため、出力制御部１０８は、待ち行列毎にリセット指示時刻およびリセット処理時刻を記録している。リセット指示時刻とは、リセット制御部１０６へリセットを指示した時刻である。リセット処理時刻とは、最後にその待ち行列のカウンタがリセットされた時刻である。したがって、リセット処理時刻がリセット指示時刻より早ければ、リセット未実施の状態であり、リセット指示時刻がリセット処理時刻より遅ければ、リセット実施済の状態である。
【００８１】
次に、出力制御部１０８は、ステップＳ２０４に、双方の送信可能リスト１０４−１，１０４−２が空であるか否か判定する。双方の送信可能リスト１０４−１，１０４−２が空であれば、ノード装置１００はパケット送出動作を終了する。
【００８２】
ステップＳ２０１またはステップＳ２０４の判定で、送信可能リスト１０４−１，１０４−２のうち少なくとも一方が空でなければ、出力制御部１０８は、ステップＳ２０５に、いずれかの送信可能リストの先頭から待ち行列番号を取り出す。なお、待ち行列番号の取り出しは、送信可能リスト１０４−１または送信可能リスト１４−２から交互にされる。あるいは、送信可能リスト１０４−１または送信可能リスト１０４−２のうち、記録されている待ち行列の数が多い方から待ち行列番号を取り出してもよい。
【００８３】
ステップＳ２０６にて、出力制御部１０８は、ステップＳ２０５の処理により、新たに、送信可能リストの先頭からｍ番目となった待ち行列があるか否か判定する。
【００８４】
送信可能リストの先頭からｍ番目となった待ち行列があれば、出力制御部１０８は、ステップＳ２０７に、その待ち行列の状態変数を状態変数保存部１０９から状態変数一時保存部１１０へ移す。
【００８５】
ステップＳ２０６の判定で送信可能リストの先頭からｍ番目となった待ち行列がなかったとき、あるいはステップＳ２０７の処理の後、ステップＳ２０８に、出力制御部１０８は、ステップＳ２０５で取り出された番号の待ち行列のパケットの送出をパケット出力部１０３に指示する。パケット出力部１０３は、出力制御部１０８から指示された待ち行列の先頭のパケットを送出する。
【００８６】
次に、出力制御部１０８は、ステップＳ２０９に、状態変数一時保存部１１０から、その待ち行列のウエイトおよびカウンタの値とリセット状態を読み出す。
【００８７】
次に、出力制御部１０８は、ステップＳ２１０に、その待ち行列がリセット未実施の状態か否か判定する。
【００８８】
その待ち行列がリセット未実施であれば、出力制御部１０８は、ステップＳ２１１に、カウンタをリセットしてリセット状態をリセット実施済にする。リセット状態をリセット実施済にするとは、リセット処理時刻を記録することである。カウンタのリセットでは、カウンタ値にウエイト値が加算される。ただし、カウンタ値がウェイト値より大きければ、ウエイト値がカウンタ値に代入される。
【００８９】
ステップＳ２１２にて、出力制御部１０８は、ステップＳ２０８で送出されたパケットの長さ分だけカウンタから減算し、ステップＳ２１３に、カウンタおよびウエイトの値とリセット状態を状態変数一時保存部１１０に戻す。そして、出力制御部１０８は、ステップＳ２１４に、パケットを送出した待ち行列にパケットが残っているか否か判定する。その待ち行列にパケットが残っていなければ、ノード装置１００はパケット送出動作を終了する。
【００９０】
その待ち行列にパケットが残っていれば、出力制御部１０８は、ステップＳ２１５に、その待ち行列のカウンタの値がゼロ以下であるか否か判定する。
【００９１】
カウンタの値がゼロ以下であれば、出力制御部１０８は、ステップＳ２１６に、その待ち行列番号をいずれかの送信待ちリスト１０５−１，１０５−２に追加する。また、カウンタの値が１以上であれば、出力制御部１０８は、ステップＳ２１７に、その待ち行列番号をいずれかの送信可能リスト１０４−１，１０４−２に追加する。
【００９２】
ステップＳ２１８に、出力制御部１０８は、追加した待ち行列がリストの先頭からｍ番目以内であるか否か判定する。追加した待ち行列がリストの先頭からｍ番以内であれば、ノード装置１００は、そのままパケット送出動作を終了する。追加した待ち行列がリストの先頭からｍ番以内でなければ、出力制御部１０８は、ステップＳ２１９に、その待ち行列の状態変数を状態変数一時保存部１１０から状態変数保存部１０９に戻す。
【００９３】
本実施形態のノード装置１００は、送信可能リストおよび送信待ちリストが、それぞれ２つに分離されているので、リストのデータがポインタで連結された構造であっても、待ち行列番号をポインタの読み出し時間より短い間隔で読出すことが可能であり、超高速回線に適用可能である。
【００９４】
また、本実施形態のノード装置１００は、通常のメモリによるリストから高速で待ち行列番号を読出せるので、連想メモリが不要であり、低コストで超高速回線に適用可能である。
【００９５】
また、本実施形態のノード装置１００は、各データがポインタで順次連結された構造のリストを作れるので、待ち行列番号を順番に並べたテーブル構造のリストで管理する必要がなく大量のメモリが不要であり、低コストで超高速回線に適用可能である。
【００９６】
また、本実施形態のノード装置１００は、リストの先頭付近の待ち行列の状態変数をメモリから先読みしているので、パケットの送出処理を高速で行うことができ、超高速回線に適用可能である。
【００９７】
また、本実施形態のノード装置１００は、各待ち行列のカウンタのリセットを一括して行わず、パケットを送出するときに待ち行列毎に個別にカウンタをリセットするので、リセットにかかる時間によりパケット送出の速度が制限されず、超高速回線に適用可能である。
【００９８】
なお、本実施形態では、送信可能リストおよび送信待ちリストが、それぞれ２つの場合を例示したが、それぞれが３つ以上あってもよい。その場合、送信可能リストおよび送信待ちリストがそれぞれ２つの場合と同様に、待ち行列番号の格納、取り出しは、巡回的に行われてもよい。また、すでに格納されている待ち行列番号の最も少ないリストに新たな待ち行列番号を追加し、格納されている待ち行列番号の最も多いリストから待ち行列番号を取り出すこととしてもよい。
【００９９】
また、本実施形態では、ウエイトに応じて各待ち行列からパケットを送出する場合を例示したが、各待ち行列に所定の帯域が予め割り当てられ、各待ち行列のパケットが送信可能な状態であるか、送信待ちの状態であるかが、各待ち行列の帯域により決められてもよい。その場合、ウエイトの代わりに、各待ち行列に割り当てられた帯域を示すデータが用いられればよい。
【０１００】
本発明の他の実施形態について図面を参照して説明する。本実施形態のノード装置は、ある待ち行列からパケットの送出を開始すると、その待ち行列からパケットを送出できなくなるまで、連続して送出する。
【０１０１】
図４は本発明の他の実施形態のノード装置の構成を示すブロック図である。
【０１０２】
図４を参照すると、ノード装置２００は、パケット振り分け部２０１、待ち行列２０２−１〜２０２−ｎ、パケット出力部２０３、送信可能リスト２０４−１，２０４−２、入力制御部２０７、出力制御部２０８、状態変数保存部２０９および状態変数一時保存部２１０を有している。
【０１０３】
パケット振り分け部２０１の構成および動作は、図１のパケット振り分け部１０１とおなじである。待ち行列２０２−１〜２０２−ｎの構成および動作は、図１の待ち行列１０２−１〜１０２−ｎの構成および動作と同じである。パケット出力部２０３の構成および動作は、図１のパケット出力部１０３と同じである。送信可能リスト２０４−１，２０４−２の構成および動作は、図１の送信可能リスト１０４−１，１０４−２と同じである。状態変数保存部２０９の構成および動作は図１の状態変数保存部１０９と同じである。状態変数一時保存部２１０の構成及び動作は図１の状態変数一時保存部１１０と同じである。
【０１０４】
図４のノード装置２００は、入力制御部２０７、出力制御部２０８の動作が図１のノード装置１００と異なる。また、ノード装置２００は、送信待ちリストおよびリセット制御部がない点が図１のノード装置１００と異なる。
【０１０５】
入力制御部２０７は、回線Ｌ１から受信したパケットを格納すべき待ち行列の状態変数を状態変数保存部２０９または状態変数一時保存部２１０から読み出す。そして、入力制御部２０７は、その状態変数に従って、待ち行列番号を、送信可能リスト２０４−１，２０４−２のうちいずれかに追加する。
【０１０６】
ノード装置２００は、図１のノード装置１００と異なり、送信待ちリストから送信可能リストへ待ち行列番号を移す必要がないので、リセット状態の管理が不要である。したがって、入力制御部２０７は、リセット状態の判定およびそれに伴われる処理の区別をしない。
【０１０７】
出力制御部２０８は、現在パケットを送信中の待ち行列があれば、その待ち行列からパケットを送出させる。また、出力制御部２０８は、現在パケットを送信中の待ち行列がなければ、送信可能リスト２０４−１または送信可能リスト２０４−２のいずれかの先頭から待ち行列番号を取り出し、その番号の待ち行列からパケットを送出させる。そして、出力制御部２０８は、パケットを送出した待ち行列にまだ送信可能なパケットがあれば、その待ち行列を引き続き送信中とし、送信可能なパケットがなければ、送信可能リストに追加する。出力制御部２０８は、パケットを連続して送信するために、待ち行列について送信中の状態を管理する。
【０１０８】
図５は、図４に示されたノード装置におけるパケット受信動作を示すフローチャートである。
【０１０９】
図５を参照すると、パケット振り分け部２０１は、ステップＳ３０１に、回線Ｌ１からパケットを受信すると、そのパケットを格納すべき待ち行列を決定する。ステップＳ３０２に、パケット振り分け部２０１は、その決定に従ってパケットをいずれかの待ち行列に格納する。
【０１１０】
次に、入力制御部２０７は、ステップＳ３０３に、受信パケットが格納される待ち行列に他のパケットが格納されているか否か判定する。受信パケットが格納される待ち行列に他のパケットが格納されていれば、ノード装置２００はパケット受信動作を終了する。
【０１１１】
受信パケットを格納する待ち行列に他のパケットが格納されていなければ、入力制御部２０７は、ステップＳ３０４に、その待ち行列の番号をいずれかの送信待ちリスト２０５−１，２０５−２に追加する。
【０１１２】
ステップＳ３０５に、入力制御部２０７は、追加した待ち行列がリストの先頭から、番以内であるか否か判定する。
【０１１３】
追加した待ち行列がリストの先頭からｍ番以内であれば、ステップＳ３０６に、入力制御部２０７は、その待ち行列の状態変数を状態変数保存部２０９から状態変数一時保存部２１０へと移し、ノード装置２０はパケット受信動作を終了する。
【０１１４】
追加した待ち行列がリストの先頭からｍ番以内でなければ、ノード装置２００はそのままパケット受信動作を終了する。
【０１１５】
図６は、図４に示されたノード装置におけるパケット送出動作を示すフローチャートである。
【０１１６】
図６を参照すると、まず、出力制御部２０８は、ステップＳ４０１に、送信可能リスト２０４−１および送信可能リスト２０４−２の双方が空であるか否か判定する。
【０１１７】
送信可能リスト２０４−１および送信可能リスト２０４−２の双方が空であれば、ノード装置２００はそのままパケット送出動作を終了する。
【０１１８】
送信可能リスト２０４−１，２０４−２のうち少なくとも一方が空でなければ、出力制御部２０８は、ステップ４０２にて、パケットを送信中の待ち行列があるか否か判定する。パケットを送信中の待ち行列が無ければ、いずれかの送信可能リストの先頭から待ち行列番号を取り出す。
【０１１９】
ステップＳ４０４にて、出力制御部２０８は、ステップＳ４０３の処理により、新たに、送信可能リストの先頭からｍ番目となった待ち行列があるか否か判定する。
【０１２０】
送信可能リストの先頭からｍ番目となった待ち行列があれば、出力制御部２０８は、ステップＳ４０５に、その待ち行列の状態変数を状態変数保存部２０９から状態変数一時保存部２１０へ移す。
【０１２１】
ステップＳ４０４の判定で送信可能リストの先頭からｍ番目となった待ち行列がなかったとき、あるいはステップＳ４０５の処理の後、ステップＳ４０６に、出力制御部２０８は、ステップＳ４０３で取り出された番号の待ち行列を送信中の状態にする。
【０１２２】
ステップＳ４０７に、出力制御部２０８は、状態変数一時保存部２１０から、その待ち行列のウエイトおよびカウンタの値を読出す。
【０１２３】
そして、ステップＳ４０２の判定で送信中の待ち行列があったとき、あるいはステップＳ４０７の処理の後、出力制御部２０８は、ステップＳ４０８に、送信中の待ち行列のパケットを送出するように、パケット出力部２０３に指示する。パケット出力部２０３は、出力制御部２０８から指示された待ち行列の先頭のパケットを送出する。
【０１２４】
ステップＳ４０９にて、出力制御部２０８は、ステップＳ４０８で送出されたパケットの長さ分だけカウンタから減算する。
【０１２５】
ステップＳ４１０にて、出力制御部２０８は、送信中の状態の待ち行列にまだパケットが残っており、かつカウンタの値が１以上であるか否か判定する。その待ち行列にパケットが残っており、かつカウンタの値が１以上であれば、ノード装置２００はそのまま送信動作を終了し、次の送信動作に移行する。
【０１２６】
その待ち行列にパケットが残っていないか、またはカウンタの値がゼロ以下であれば、出力制御部２０８は、ステップＳ４１１に、カウンタをリセットする。ステップＳ４１２に、出力制御部２０８は、カウンタおよびウエイトの値を状態変数一時保存部２１０に戻す。そして、出力制御部２０８は、ステップＳ４１３に、その待ち行列の送信中の状態を解除する。
【０１２７】
ステップＳ４１４にて、出力制御部２０８は、その待ち行列にまだパケットが残っているか否か判定する。その待ち行列にパケットが残っていなければ、ノード装置２００は送信動作を終了し、次の送信動作に移行する。
【０１２８】
その待ち行列にパケットが残っていれば、出力制御部２０８は、ステップＳ４１５に、その待ち行列番号をいずれかの送信待ちリスト２０５−１，２０５−２に追加する。
【０１２９】
ステップＳ４１６に、出力制御部２０８は、追加した待ち行列がリストの先頭からｍ番目以内であるか否か判定する。追加した待ち行列がリストの先頭からｍ番目以内であれば、ノード装置２００は、そのまま送信処理を終了し、次の送信動作に移行する。
【０１３０】
追加した待ち行列がリストの先頭からｍ番以内でなければ、出力制御部２０８は、ステップ４１７に、その待ち行列の状態変数を状態変数一時保存部２１０から状態変数保存部２０９に戻す。
【０１３１】
本発明のさらに他の実施形態について図面を参照して説明する。本実施形態のノード装置は、カレンダを用いてパケットの送信予定を管理する。カレンダは、時系列に並んだ複数のリストを含んでいる。各リストは、それぞれに対応した時刻にパケットの送出を終了する予定の待ち行列の番号が記録されている。パケットを送出するための帯域が各待ち行列に割り当てられている場合、パケットの送出が可能な待ち行列であっても、所定時間間隔より短い間隔でパケットを送出できない。その場合に、待ち行列から送出されるパケットが所定時間間隔となるように、その待ち行列はカレンダのリストに記録される。そして、リストの示す時刻になると、待ち行列の番号がカレンダから取り出され、その待ち行列からパケットが送出される。
【０１３２】
図７は、本実施形態のノード装置の構成を示すブロック図である。
【０１３３】
図７を参照すると、ノード装置３００は、パケット振り分け部３０１、待ち行列３０２−１〜３０２−ｎ、パケット出力部３０３、送信可能リスト３０４−１，３０４−２、入力制御部３０７、出力制御部３０８、状態変数保存部３０９、状態変数一時保存部３１０およびカレンダ３１１を有している。
【０１３４】
パケット振り分け部３０１の構成および動作は、図１のパケット振り分け部１０１と同じである。待ち行列３０２−１〜３０２−２の構成および動作は、図１の待ち行列２０２−１〜２０２−２と同じである。パケット出力部３０３の構成および動作は、図１のパケット出力部１０３と同じである。送信可能リスト３０４−１，３０４−２の構成および動作は、図１の送信可能リスト１０４−１，１０４−２と同じである。状態変数保存部３０９の構成および動作は、図１の状態変数保存部１０９と同じである。状態変数一時保存部３１０の構成および動作は、図１の状態変数一時保存部１１０と同じである。ただし、ノード装置３００は、カレンダ３１１でパケットの送信予定を管理するので、状態変数には、各待ち行列からのパケットの送出の終了予定時刻が含まれている。また、各待ち行列には、パケットを送出するための帯域が割り当てられる。この各待ち行列の設定帯域も状態変数に含まれている。
【０１３５】
図７のノード装置３００は、入力制御部３０７、出力制御部３０８の動作が図１のノード装置１００と異なる。また、ノード装置３００は、送信待ちリストおよびリセット制御部がない点と、カレンダ３１１を有する点が図１のノード装置１００と異なる。
【０１３６】
入力制御部３０７は、回線Ｌ１から受信したパケットを格納すべき待ち行列の状態変数を状態変数保存部３０９または状態変数一時保存部３１０から読み出す。そして、入力制御部３０７は、その状態変数に従って、待ち行列番号を、送信可能リスト３０４−１，３０４−２またはカレンダ３１１のいずれかに追加する。
【０１３７】
出力制御部３０８は、各待ち行列からのパケットの送出を制御するために、まず、送信可能リスト３０４−１または３０４−２の先頭から待ち行列番号を取り出し、その番号の待ち行列に関する状態変数を状態変数一時保存部３１０から読み出す。そして、出力制御部３０８は、その待ち行列のパケットの送出をパケット出力部３０３に指示する。そして、出力制御部３０８は、パケットの送出をパケット出力部３０３に指示した後、その待ち行列の状態変数に従って、待ち行列番号を送信可能リスト３０４−１，３０４−２またはカレンダ３１１のいずれかに追加する。
【０１３８】
カレンダ３１１は、所定間隔の時刻毎のリストを時系列に保持している。各リストには、それぞれに対応した時刻にパケットの送出を終了する予定の待ち行列の番号が記録される。
【０１３９】
図８は、図７のノード装置３００のパケット受信動作を示すフローチャートである。
【０１４０】
図８を参照すると、パケット振り分け部３０１は、ステップＳ５０１に、回線Ｌ１からパケットを受信すると、そのパケットを格納すべき待ち行列を決定する。ステップＳ５０２に、パケット振り分け部３０１は、その決定に従ってパケットをいずれかの待ち行列に格納する。
【０１４１】
次に、入力制御部３０７は、ステップＳ５０３に、受信パケットが格納される待ち行列に他のパケットが格納されているか否か判定する。受信パケットが格納される待ち行列に他のパケットが格納されていれば、ノード装置３００はパケット受信動作を終了する。
【０１４２】
受信パケットを格納する待ち行列に他のパケットが格納されていなければ、入力制御部３０２は、ステップＳ５０４に、その待ち行列のパケットの送出を終了する予定時刻を状態変数保存部３０９または状態変数一時保存部３１０より読出す。
【０１４３】
ステップＳ５０５に、入力制御部３０７は、読み出された送出終了予定時刻に、現在の時刻が達しているか否か判定する。送出終了予定時刻に達していなければ、ステップＳ５０７に、入力制御部３０７は、カレンダ３１１の送出終了予定時刻に対応したリストにその待ち行列番号を記録し、ノード装置３００はパケット受信動作を終了する。
【０１４４】
送出終了予定時刻に達していれば、ステップＳ５０６に、入力制御部３０７は、その待ち行列番号を、いずれかの送信可能リスト３０４−１，３０４−２に追加する。
【０１４５】
ステップＳ５０８に、入力制御部３０７は、追加した待ち行列がリストの先頭からｍ番目以内であるか否か判定する。
【０１４６】
追加した待ち行列がリストの先頭からｍ番以内であれば、ステップＳ５０９に、入力制御部３０７は、その待ち行列の状態変数を状態変数保存部３０９から状態変数一時保存部３１０へと移す。
【０１４７】
追加した待ち行列がリストの先頭からｍ番目以内でないとき、あるいはステップＳ５０９の処理の後、入力制御部３０７は、ステップＳ５１０に、現在の時刻を送出終了予定時刻に代入する。ステップＳ５１１に、入力制御部３０７は、送出終了予定時刻を状態変数保存部３０９もしくは状態変数一時保存部３１０に書き戻す。
【０１４８】
図９は、図７のノード装置３００におけるパケット送出動作を示すブロック図である。
【０１４９】
図９を参照すると、まず、ノード装置３００は、ステップＳ６０１に、現在時刻を更新する。ステップＳ６０２に、出力制御部３０８は、カレンダ３１１内の現在時刻に対応するリストの内容の全てを、いずれかの送信可能リスト３０４−１，３０４−２へと移す。
【０１５０】
ステップＳ６０３に、出力制御部３０８は、送信可能リスト３０４−１，３０４−２の双方が空であるか否か判定する。双方の送信可能リスト３０４−１，３０４−２が空であれば、ノード装置３００はパケット送出動作を終了する。
【０１５１】
送信可能リスト３０４−１，３０４−２の少なくとも一方が空でなければ、出力制御部３０８は、ステップＳ６０４に、いずれかの送信可能リストの先頭から待ち行列番号を取り出す。
【０１５２】
ステップＳ６０５にて、出力制御部３０８は、ステップＳ６０４の処理により、新たに、送信可能リストの先頭からｍ番目となった待ち行列があるか否か判定する。
【０１５３】
送信可能リストの先頭からｍ番目となった待ち行列があれば、出力制御部３０８は、ステップＳ６０６に、その待ち行列の状態変数を状態変数保存部１０９から状態変数一時保存部１１０へ移す。
【０１５４】
ステップＳ６０５の判定で送信可能リストの先頭からｍ番目となった待ち行列がなかったとき、あるいはステップＳ６０６の処理の後、ステップＳ６０７に、出力制御部３０８は、ステップＳ６０４で取り出された番号の待ち行列のパケットの送出をパケット出力部３０３に指示する。パケット出力部３０３は、出力制御部３０８から指示された待ち行列の先頭のパケットを送出する。
【０１５５】
ステップＳ６０８にて、出力制御部３０８は、状態変数一時保存部３１０から、待ち行列の設定帯域および送出終了予定時刻を読出す。ステップＳ６０９に、出力制御部３０８は、読み出された設定帯域と送出するパケットのデータ量とから送出終了予定時刻を算出する。そして、ステップＳ６１０に、出力制御部３０８は、設定帯域および送出終了予定時刻を状態変数一時保存部３１０に書き戻す。
【０１５６】
ステップ６１１に、出力制御部３０８は、パケットの送出した待ち行列にパケットが残っているか否か判定する。その待ち行列にパケットが残っていなければ、ノード装置３００はパケット送出動作を終了する。
【０１５７】
その待ち行列にパケットが残っていれば、出力制御部３０８は、ステップＳ６１２に、送出終了予定時刻に現在の時刻が達しているか否か判定する。送出終了時刻に達していなければ、ステップＳ６１４に、出力制御部３０８は、カレンダ３１１の送出終了予定時刻に対応したリストに、その待ち行列番号を記録する。次に、ステップＳ６１６にて、出力制御部３０８は、その待ち行列の状態変数を状態変数保存部３０９から状態変数一時保存部３１０へと移し、ノード装置３００はパケット送出動作を終了する。
【０１５８】
ステップＳ６１２の判定において現在の時刻が送出終了時刻に達していれば、ステップＳ６１３に、出力制御部３０８は、その待ち行列の番号を送信可能リスト３０４−１，３０４−２のいずれかに追加する。
【０１５９】
ステップＳ６１５に、出力制御部３０８は、追加した待ち行列がリストの先頭からｍ番以内であるか否か判定する。追加した待ち行列がリストの先頭からｍ番目以内であれば、ステップＳ６１６の処理に移る。追加した待ち行列がリストの先頭からｍ番名以内でなければ、ノード装置３００はそのままパケット送出動作を終了する。
【０１６０】
本発明のさらに他の実施形態について図面を参照して説明する。
【０１６１】
図１０は、本実施形態のノード装置の構成を示すブロック図である。
【０１６２】
図１０を参照すると、ノード装置４００は、パケット振り分け部４０１、待ち行列４０２−１〜４０２−ｎ、パケット出力部４０３、送信可能リスト４０４−１，４０４−２、送信待ちリスト４０５−１，４０５−２、リセット制御部４０６、入力制御部４０７、出力制御部４０８、状態変数保存部４０９、状態変数一時保存部４１０および送信候補４１１−１〜４１１−ｍを有している。
【０１６３】
パケット振り分け部４０１の構成および動作は図１のパケット振り分け部１０１と同じである。待ち行列４０２−１〜４０２−ｎの構成および動作は、図１の待ち行列１０１−１〜１０１−ｎと同じである。パケット出力部４０３の構成及び動作は、図１のパケット出力部１０３と同じである。
【０１６４】
本実施形態では、送信可能リスト４０４−１，４０４−２、送信待ちリスト４０５−１，４０５−２の他に、送信候補４１１−１〜４１１−ｍが設けられている。送信候補４１１−１〜４１１−ｍは、送信可能リスト及び送信待ちリストとは別に一部の待ち行列を送信準備中の待ち行列として管理する。
【０１６５】
送信候補４１１−１〜４１１−ｍは、状態変数が一時保存部４１０に保存されている待ち行列の番号をそれぞれ１つづつ格納する。したがって、送信候補の数ｍと、状態変数一時保存部４１０が保存できる状態変数の数は同じである。パケットを送出する待ち行列は、この送信候補４１１−１〜４１１−ｍに番号が格納された、パケットを送信可能な待ち行列の中から巡回的に選択される。いずれかの送信候補からパケットが送出され、空きが生じると、いずれかの送信可能リスト４０４−１，４０４−２に番号が格納されていた待ち行列が、新たに送信候補に格納されることとなり、それに伴って、その待ち行列の状態変数が状態変数保存部４０９から状態変数一時保存部４１０に移される。送信候補４１１−１〜４１１−ｍに番号が格納される待ち行列は、通常、パケットを送信可能な待ち行列である。しかし、パケットを送信可能な待ち行列の数が送信候補数ｍより少ないときには、送信待ちの待ち行列の番号が送信候補に格納される。
【０１６６】
したがって、送信可能リスト４０４−１，４０４−２および送信待ちリスト４０５−１，４０５−２の構成および動作は、図１の送信可能リスト１０４−１，１０４−２および送信待ちリスト１０５−１，１０５−２とほぼ同様であるが、出力制御部４０８へ直接に待ち行列番号を送らず、送信候補４１１−１〜４１１−ｍに一旦格納する点で図１のものと異なる。
【０１６７】
状態変数保存部４０９、状態変数一時保存部４１０の構成及び動作は図１のものと同様であるが、待ち行列番号が送信候補４１１−１〜４１１−ｍに格納された待ち行列の状態変数が状態変数一時保存部４１０に格納される点で異なる。
【０１６８】
入力制御部４０７の構成および動作は、図１のものとほぼ同様である。しかし、送信可能リスト４０４−１，４０４−２または送信待ちリスト４０５−１，４０５−２に待ち行列番号を追加するとき、送信候補に空きがあれば、入力制御部４０７は、その待ち行列番号を送信候補に格納する。
【０１６９】
出力制御部４０８は、送信候補４１１−１〜４１１−ｍに番号が格納されている待ち行列のうち、送信可能な待ち行列から巡回的にパケットを送出するようにパケット出力部４０３に指示する。また、ある待ち行列のパケットの送出をパケット出力部４０３に指示した後、出力制御部４０８は、その待ち行列の状態等により、その待ち行列の番号を送信可能リスト４０４−１，４０４−２、送信待ちリスト４０５−１，４０５−２に追加するか、あるいは送信候補４１１−１〜４１１−ｍに残す。
【０１７０】
図１１は、図１０のノード装置４００のパケット受信動作を示すフローチャートである。
【０１７１】
図１１を参照すると、パケット振り分け部４０１は、ステップＳ７０１に、回線Ｌ１からパケットを受信すると、そのパケットを格納すべき待ち行列を決定する。ステップＳ７０２に、パケット振り分け部４０１は、その決定に従ってパケットをいずれかの待ち行列に格納する。
【０１７２】
次に、入力制御部４０７は、ステップＳ７０３に、受信パケットが格納される待ち行列に他のパケットが格納されているか否か判定する。受信パケットが格納される待ち行列に他のパケットが格納されていれば、ノード装置４００はパケット受信動作を終了する。
【０１７３】
受信パケットを格納する待ち行列に他のパケットが格納されていなければ、入力制御部４０７は、ステップＳ７０４に、その待ち行列のカウンタとリセット状態を状態変数保存部４０９または状態変数一時保存部４１０より読出す。
【０１７４】
ステップＳ７０５に、入力制御部４０７は、送信候補４１１−１〜４１１−ｍのすくなくとも１つが空きであるか否か判定する。空きがなければ、ステップＳ７０６に、入力制御部４０７は、その待ち行列のカウンタがリセット実施済で、かつカウンタの値がゼロ以下であるか否か判定する。
【０１７５】
その待ち行列のカウンタがリセット済で、かつカウンタの値がゼロ以下であれば、入力制御部４０７は、ステップＳ７０７に、その待ち行列番号をいずれかの送信待ちリスト５０５−１，５０５−２に追加し、ノード装置４００はパケット受信動作を終了する。
【０１７６】
また、その待ち行列のカウンタの値が１以上であるか、または、その待ち行列がリセット未実施の状態であれば、ステップＳ７０８に、入力制御部４０７は、送信候補４１１−１〜４１１−ｍに送信待ちの状態の待ち行列があるか否か判定する。
【０１７７】
送信候補４１１−１〜４１１−ｍに送信待ちの状態の待ち行列があれば、ステップＳ７１０に、入力制御部４０７は、その送信候補に格納されている待ち行列番号をいずれかの送信待ちリスト５０５−１，５０５−２に移す。
【０１７８】
送信候補４１１−１〜４１１−ｍに送信待ちの状態の待ち行列がなければ、ステップＳ７０９に、入力制御部４０７は待ち行列番号をいずれかの送信可能リスト４０４−１，４０４−２に追加し、ノード装置４００はパケット受信動作を終了する。
【０１７９】
ステップＳ７０５の判定で送信候補に空きがあるとき、またはステップＳ７１０の処理の後、ステップＳ７１１に、入力制御部４０７は、待ち行列番号を空いている送信候補に格納する。そして、ステップＳ７１２に、入力制御部４０７は、その番号の待ち行列の状態変数を状態変数保存部４０９から状態変数一時保存部４１０に移し、ノード装置４００はパケット受信動作を終了する。
【０１８０】
図１２は、図１０のノード装置４００のパケット送出動作を示すフローチャートである。
【０１８１】
図１２を参照すると、まず、出力制御部４０８は、ステップＳ８０１に、送信候補４１１−１〜４１１−ｍの全てが空であるか否か判定する。全ての送信候補４１１−１〜４１１−ｍが空であれば、ノード装置４００はそのままパケット送出動作を終了する。
【０１８２】
送信候補４１１−１〜４１１−ｍのうち少なくとも１つが空でなければ、出力制御部４０８は、ステップ８０２にて、パケットを送信可能な待ち行列が送信候補にあるか否か判定する。
【０１８３】
パケットを送信可能な待ち行列が送信候補になければ、ステップＳ８０３に、出力制御部４０８は、全ての待ち行列をリセットするように、リセット制御部４０９に指示する。そして、ステップＳ８０４に、リセット制御部４０６は、全ての送信待ちリストの内容を、それぞれに対応する送信可能リストに移す。
【０１８４】
ステップＳ８０２の判定でパケットを送信可能な待ち行列が送信候補にあったとき、またはステップＳ８０４の処理の後、出力制御部４０８は、各送信候補にある、パケットを送信可能な待ち行列のパケットを送出するように、パケット出力部４０３に指示する。パケット出力部４０３は、出力制御部４０８から指示された待ち行列の先頭のパケットを送出する。
【０１８５】
そして、ステップＳ８０７に、出力制御部４０８は、パケット出力部４０３にパケットの送出を指示した待ち行列のカウンタおよびウエイトの値とリセット状態を状態変数一時保存部４１０から読み出す。
【０１８６】
次に、出力制御部４０８は、ステップＳ８０８に、その待ち行列がリセット未実施の状態か否か判定する。
【０１８７】
その待ち行列がリセット未実施であれば、出力制御部４０６は、ステップＳ８０９に、カウンタをリセットしてリセット状態をリセット実施済にする。
【０１８８】
ステップＳ８１０にて、出力制御部４０８は、ステップＳ８０６で送出されたパケットの長さ分だけカウンタから減算し、ステップＳ８１１に、カウンタおよびウエイトの値とリセット状態を状態変数一時保存部８１０に戻す。
【０１８９】
そして、ステップＳ８１２に、出力制御部４０８は、その待ち行列にパケットが残っており、かつ送信可能リスト４０４−１，４０４−２の双方が空であるか否か判定する。その待ち行列にパケットが残っておらず、かつ送信可能リスト４０４−１，４０４−２の双方が空であれば、ノード装置４００はパケット送出動作を終了する。
【０１９０】
その待ち行列にパケットが残っていないか、または送信可能リスト４０４−１，４０４−２の少なくとも一方が空でなければ、ステップＳ８１３に、出力制御部４０８は、その待ち行列の状態変数を状態変数一時保存部４１０から状態変数保存部４０９に戻す。そして、ステップＳ８１４に、出力制御部４０８は、その待ち行列を送信候補から削除する。
【０１９１】
ステップＳ８１５に、出力制御部４０８は、その待ち行列にパケットが残っているか否か判定する。その待ち行列にパケットが残っていれば、ステップＳ８１６に、出力制御部４０８は、その待ち行列のカウンタの値がゼロ以下であるか否か判定する。
【０１９２】
カウンタがゼロ以下であれば、出力制御部４０８は、その待ち行列番号を送信待ちリストのいずれかに追加する。カウンタが１以上であれば、その待ち行列番号を送信可能リストに追加する。
【０１９３】
ステップＳ８１５の判定でその待ち行列内にパケットが残っていなかったとき、あるいはステップＳ８１７またはステップＳ８１８の処理の後、ステップＳ８１９に、出力制御部４０８は、送信可能リストの双方が空であるか否か判定する。少なくとも一方の送信可能リストが空でなければ、出力制御部４０８は、ステップＳ８２０に、いずれかの送信可能リストの先頭から待ち行列番号を取り出し、送信候補のいずれかに格納する。
【０１９４】
また、あ送信可能リストの双方が空であれば、出力制御部４０８は、ステップＳ８２１に、いずれかの送信候補リストの先頭から待ち行列番号を取り出し、送信候補のいずれかに格納する。
【０１９５】
ステップＳ８２０またはステップＳ８２１の処理の後、出力制御部４０８は、ステップＳ８２２に、新たに送信候補に格納された待ち行列の状態変数を状態変数保存部４０９から状態変数一時保存部４１０に移し、ノード装置４００はパケット送出動作を終了する。
【０１９６】
したがって、ノード装置４００は、送信候補４１１−１〜４１１−ｍのいずれかからパケットを送出し、それでもまだその待ち行列がパケットを送信可能なとき、送信可能リスト４０４−１，４０４−２の双方が空であれば、その待ち行列を送信候補に直接戻すことができる。また、ノード装置４００は、送信可能リスト４０４−１，４０４−２の少なくともいずれか一方が空でなければ、その待ち行列を送信候補に直接戻すことができないので、いずれかの送信可能リストに戻し、それに伴って、状態変数も状態変数保存部４０９に戻される。
【０１９７】
本発明のさらに他の実施形態について図面を参照して説明する。
【０１９８】
本実施形態のノード装置の構成およびパケット受信動作は図１０のものと同じであり、パケット送出動作における送信候補の入れ替え方法のみが異なる。
【０１９９】
図１３は、本実施形態のノード装置におけるパケット送出動作を示すフローチャートである。
【０２００】
図１３を参照すると、まず、出力制御部４０８は、ステップＳ９０１に、送信候補４１１−１〜４１１−ｍの全てが空であるか否か判定する。全ての送信候補４１１−１〜４１１−ｍが空であれば、ノード装置４００はそのままパケット送出動作を終了する。
【０２０１】
送信候補４１１−１〜４１１−ｍのうち少なくとも１つが空でなければ、出力制御部４０８は、ステップＳ９０２にて、パケットを送信可能な待ち行列が送信候補にあるか否か判定する。
【０２０２】
パケットを送信可能な待ち行列が送信候補になければ、ステップＳ９０３に、出力制御部４０８は、全ての待ち行列をリセットするように、リセット制御部４０９に指示する。そして、ステップＳ９０４に、リセット制御部４０６は、全ての送信待ちリストの内容を、それぞれに対応する送信可能リストに移す。
【０２０３】
ステップＳ９０２の判定でパケットを送信可能な待ち行列が送信候補にあったとき、またはステップＳ９０４の処理の後、出力制御部４０８は、各送信候補にある、パケットを送信可能な待ち行列のパケットを送出するように、パケット出力部４０３に指示する。パケット出力部４０３は、出力制御部４０８から指示された待ち行列の先頭のパケットを送出する。
【０２０４】
そして、ステップＳ９０７に、出力制御部４０８は、パケット出力部４０３にパケットの送出を指示した待ち行列のカウンタおよびウエイトの値とリセット状態を状態変数一時保存部４１０から読出す。
【０２０５】
次に、出力制御部４０８は、ステップＳ９０８に、その待ち行列がリセット未実施の状態か否か判定する。
【０２０６】
その待ち行列がリセット未実施であれば、出力制御部４０８は、ステップＳ９０９に、カウンタをリセットしてリセット状態をリセット実施済にする。
【０２０７】
ステップＳ９１０にて、出力制御部４０８は、ステップＳ９０６で送出されたパケットの長さ分だけカウンタから減算し、ステップＳ９１１に、カウンタおよびウエイトの値とリセット状態を状態変数一時保存部４１０に戻す。
【０２０８】
ここまでは図１２におけるステップＳ８０１からステップＳ８１１までと同じ処理である。
【０２０９】
ステップＳ９１１にて、出力制御部４０８は、カウンタおよびウエイトの値とリセット状態を状態変数一時保存部４１０に書き戻す。そして、出力制御部４０８は、ステップＳ９１２に、パケットが格納されていない待ち行列の番号が送信候補４１１−１〜４１１−ｍに格納されているか否か判定する。
【０２１０】
パケットが格納されていない待ち行列の番号が送信候補４１１−１〜４１１−ｍに格納されていなければ、ステップＳ９１３に、出力制御部４０８は、送信候補４１１−１〜４１１−ｍに、カウンタがゼロ以下の待ち行列の番号が格納されているか否か判定する。カウンタがゼロ以下の待ち行列の番号が格納されている送信候補がなければ、ステップＳ９１４に、出力制御部４０８は、送信候補の中からｍｉｎ（カウンタ値，待ち行列長）が最小の待ち行列を選択する。なお、ｍｉｎ（Ａ，Ｂ）は、ＡとＢのうちの最小値を求める関数である。
【０２１１】
ステップＳ９１５に、出力制御部４０８は、その待ち行列の状態変数を状態変数一時保存部４１０から状態変数保存部４０９へ移す。そして、出力制御部４０８は、ステップＳ９１６に、その待ち行列の番号を送信候補から取り除き、ステップＳ９１７に、その待ち行列の番号をいずれかの送信可能リスト４０４−１，４０４−２に追加する。
【０２１２】
ステップＳ９１３の判定で、カウンタがゼロ以下の待ち行列の番号が格納されている送信候補があれば、出力制御部４０８は、ステップＳ９１８に、カウンタ値がゼロ以下であり、ｍｉｎ（ウエイト値，待ち行列長）が最小の待ち行列を送信候補の中から選択する。
【０２１３】
ステップＳ９１９に、出力制御部４０８は、その待ち行列の状態変数を状態変数一時保存部４１０から状態変数保存部４０９へ移す。そして、出力制御部４０８は、ステップＳ４２０に、その待ち行列の番号を送信候補から取り除き、ステップＳ４２１に、その待ち行列の番号をいずれかの送信待ちリスト４０５−１，４０５−２に追加する。
【０２１４】
ステップＳ９１２の判定で、パケットが格納されていない待ち行列の番号が送信候補４１１−１〜４１１−ｍに格納されていれば、ステップＳ９２２に、出力制御部４０８は、その待ち行列を送信候補の中から選択する。そして、出力制御部４０８は、ステップＳ９２３に、その待ち行列の状態変数を状態変数一時保存部４１０から状態変数保存部４０９に移し、ステップＳ９２４に、その待ち行列を送信候補から取り除く。
【０２１５】
ステップＳ９１７、ステップＳ９２１またはステップＳ９２４の処理の後、出力制御部４０８は、ステップＳ９２５に、送信可能リスト４０４−１，４０４−２の双方が空であるか否か判定する。
【０２１６】
少なくとも一方の送信可能リスト４０４−１，４０４−２が空でなければ、ステップＳ９２５に、出力制御部４０８は、いずれかの送信可能リストの先頭から待ち行列番号を取り出して送信候補に格納する。ステップＳ９２６に、出力制御部４０８は、新たに送信候補に格納された番号の待ち行列の状態変数を状態変数保存部４０９から状態変数一時保存部４１０へ移し、ノード装置４００はパケット送出動作を終了する。
【０２１７】
ステップＳ９２５の判定で、双方の送信可能リスト４０４−１，４０４−２が空であれば、ステップＳ９２７に、出力制御部４０８は、いずれかの送信待ちリストの先頭から待ち行列番号を取り出して送信候補に格納し、ステップＳ９２８の処理に移る。
【０２１８】
【発明の効果】
本発明のノード装置は、リスト手段の先頭付近の待ち行列の状態変数を状態変数保存手段から、それよりデータ量の小さい状態変数一時保存手段に先読みしているので、パケットを送出するときに、状態変数に関する処理を高速で行うことができ、超高速回線に適用可能である。
【０２１９】
また、本発明のノード装置は、待ち行列の状態変数を状態変数保存手段から状態変数一時保存手段に常時先読みしている状態となるので、パケットを送出するときに、状態変数に関する処理を高速で行うことができ、超高速回線に適用可能である。
【０２２０】
また、本発明のノード装置は、リスト手段が複数のリストに分離されているので、各リストのデータがポインタで連結された構造であっても、待ち行列番号をポインタの読み出し時間より短い間隔で読出すことが可能であり、超高速回線に適用可能である。
【図面の簡単な説明】
【図１】本発明の一実施形態のノード装置の構成を示すブロック図である。
【図２】図１のノード装置におけるパケット受信動作を示すフローチャートである。
【図３】図１のノード装置におけるパケット送出動作を示すフローチャートである。
【図４】本発明の他の実施形態のノード装置の構成を示すブロック図である。
【図５】図４のノード装置におけるパケット受信動作を示すフローチャートである。
【図６】図４のノード装置におけるパケット送出動作を示すフローチャートである。
【図７】本発明のさらに他の実施形態のノード装置の構成を示すブロック図である。
【図８】図７のノード装置のパケット受信動作を示すフローチャートである。
【図９】図７のノード装置におけるパケット送出動作を示すブロック図である。
【図１０】本発明のさらに他の実施形態のノード装置の構成を示すブロック図である。
【図１１】図１０のノード装置のパケット受信動作を示すフローチャートである。
【図１２】図１０のノード装置のパケット送出動作を示すフローチャートである。
【図１３】図１０のノード装置の他のパケット送出動作を示すフローチャートである。
【図１４】従来技術における一般的なリストの構造を示す図である。
【図１５】従来技術における、他のリストの構造を示す図である。
【符号の説明】
１００，２００，３００，４００    ノード装置
１０１，２０１，３０１，４０１    パケット振り分け部
１０２−１〜１０２−ｎ，２０２−１〜２０２−ｎ，３０２−１〜３０２−ｎ，４０２−１〜４０２−ｎ    待ち行列
１０３，２０３，３０３，４０３    パケット出力部
１０４−１，１０４−２，２０４−１，２０４−２，３０４−１，３０４−２，４０４−１，４０４−２    送信可能リスト
１０５−１，１０５−２，４０５−１，４０５−２    送信待ちリスト
１０６，４０６    リセット制御部
１０７，２０７，３０７，４０７    入力制御部
１０８，２０８，３０８，４０８    出力制御部
１０９，２０９，３０９，４０９    状態変数保存部
１１０，２１０，３１０，４１０    状態変数一時保存部
３１１    カレンダ
４１１−１〜４１１−ｍ    送信候補
Ｌ１，Ｌ２    回線
Ｓ１０１〜Ｓ１０９，Ｓ２０１〜Ｓ２１９，Ｓ３０１〜Ｓ３０６，Ｓ４０１〜Ｓ４１７，Ｓ５０１〜Ｓ５１１，Ｓ６０１〜Ｓ６１６，Ｓ７０１〜Ｓ７１２，Ｓ８０１〜Ｓ８２２，Ｓ９０１〜Ｓ９２８    ステップ
【図１】
0003753070.tif 000002
【図２】
0003753070.tif 000003
【図３】
0003753070.tif 000004
【図４】
0003753070.tif 000005
【図５】
0003753070.tif 000006
【図６】
0003753070.tif 000007
【図７】
0003753070.tif 000008
【図８】
0003753070.tif 000009
【図９】
0003753070.tif 000010
【図１０】
0003753070.tif 000011
【図１１】
0003753070.tif 000012
【図１２】
0003753070.tif 000013
【図１３】
0003753070.tif 000014
【図１４】
0003753070.tif 000015
【図１５】
0003753070.tif 000016