(57)【特許請求の範囲】
【請求項１】
複数の送信元から受信したパケットの待ち行列を管理する方法であって、
受信した最後のパケット（ＬＣ）をバッファメモリ（ＢＵ）の受信アドレス（ＲＡｄ）に記憶するステップと、
この受信した最後のパケット（ＬＣ）について、前記待ち行列からのその取り出しの理論的時間を表すタイムスタンプ（ＴＳＴＰ）を作成するステップとを含み、
さらに、前記受信アドレス（ＲＡｄ）を、受信した最後のパケット（ＬＣ）のタイムスタンプ（ＴＳＴＰ）によって識別される、スケジューラ（ＰＲ）のロケーションに挿入するステップと、
値がアクティブ状態を示すときに、前記スケジューラ（ＰＲ）の前記ロケーションに格納された前記受信アドレス（ＲＡｄ）が示す前記バッファメモリのアドレスに格納されたパケット（ＬＣ）が転送されるべきであることを示す、前記スケジューラ（ＰＲ）の前記ロケーションに格納された、前記タイムスタンプ（ＴＳＴＰ）に関連する占有ビットを、アクティブ状態にセットするステップと、を有し、
前記スケジューラ（ＰＲ）の連続するアドレスに格納された占有ビット（ｂ０、ｂ１、．．．、ｂ１６３８３）が、所定の数のビットにより構成された各ワード（Ａ０、Ａ１、．．．、Ａ５１１）にまとめられ、各ワードの各ビットは前記連続するアドレスに格納された各占有ビットに対応し、これらのワード（Ａ０、Ａ１、．．．、Ａ５１１）の各々について指標（Ｉ０、Ｉ１、．．．、Ｉ５１１）が作成され、これらの指標が、ワードのすべてのビットが非アクティブであるときにはゼロであり、そうでないときには１であり、
占有ビットのセッティングに続いて、対応するワードの指標が再計算され、
連続するワードの各々に対応する指標（Ｉ０、Ｉ１、．．．、Ｉ５１１）が、所定の数のビットにより構成された各フィールド（Ｂ０、Ｂ１、．．．、Ｂ１５）にまとめられ、各フィールドの各ビットは前記連続するワードの各々に対応する各指標に対応し、これらのフィールド（Ｂ０、Ｂ１、．．．、Ｂ１５）の各々についてインデックス（Ｆ０、Ｆ１、．．．、Ｆ１５）が作成され、これらのインデックスが、フィールドのすべてのビットが非アクティブであるときにはゼロであり、そうでないときには１であり、
更に、本方法は、
前記待ち行列から取り出さなければならない最初の１つまたは複数のパケットを、行列から去ったばかりのパケットの占有ビットに続く最初のアクティブな占有ビットから決定するステップとを含み、前記占有ビットが、それらが関連するタイムスタンプの昇順に分類され、待ち行列から取り出さなければならない最初の１つまたは複数のパケットの決定が、ゼロでない最初のインデックス（Ｆ０、Ｆ１、．．．、Ｆ１５）を、次いで、このインデックスのゼロでない最初の指標（Ｉ０、Ｉ１、．．．、Ｉ５１１）を、最後に、この指標のゼロでない最初のビットを探索することによって行われ、
前記最初のパケットの占有ビットを、それが行列から去るときに、非アクティブ状態にセットするステップをさらに含むことを特徴とする方法。
【請求項２】
前記受信した最後のパケット（ＬＣ）が優先レベルを付与された送信元からのものであるとき、このパケットのタイムスタンプが前記優先レベルに依存していることを特徴とする請求項１に記載の方法。
【請求項３】
前記送信元からのいくつかのパケットが、平均周期に対応した伝送速度で送信され、前記優先レベルが、この周期（Ｔ）に対応しており、前記タイムスタンプ（ＴＳＴＰ）が、前記送信元からの前のパケットに前記周期（Ｔ）分だけ加えたタイムスタンプに等しいかそれより大きいことを特徴とする請求項２に記載の方法。
【請求項４】
前記タイムスタンプ（ＴＳＴＰ）がやはり最初のパケットのタイムスタンプに等しいかそれより大きいことを特徴とする請求項３に記載の方法。
【請求項５】
待ち行列から取り出さなければならない最初の１つまたは複数のパケットの決定が、ゼロでない最初の指標（Ｉ０、Ｉ１、．．．、Ｉ５１１）を、次いでこの指標のゼロでない最初のビットを探索することによって行われることを特徴とする請求項１から４のうちいずれか一項に記載の方法。
【請求項６】
占有ビットのセッティングに続いて、対応するワード（Ａ０、Ａ１、．．．、Ａ５１１）の指標（Ｉ０、Ｉ１、．．．、Ｉ５１１）が再計算され、その後に、この指標を含んでいるフィールドのインデックス（Ｆ０、Ｆ１、．．．、Ｆ１５）が再計算されることを特徴とする請求項１に記載の方法。
【請求項７】
前記タイムスタンプが、所定の容量定数を法として作成されることを特徴とする請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記スケジューラ（ＰＲ）が少なくとも２つのページを含み、待ち行列から取り出さなければならない最初の１つまたは複数のパケットの決定がページごとに行われることを特徴とする請求項７に記載の方法。
【請求項９】
スケジューラ（ＰＲ）の前記ロケーションのうちの１つがアドレス連鎖リストを含んでいることを特徴とする請求項１から８のいずれか一項に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデジタルパケット待ち行列を管理する方法に関する。
【０００２】
【従来の技術】
デジタル伝送の分野では、このような方法は、様々な送信元から受信したデータまたはパケットについて、どのような順序でこれらのパケットが外部機器に向けて転送されなければならないかを決定することを目的としている。
【０００３】
もちろん、種々のパケットが転送される順序は、それらが受信した順序と異なっている場合がありうる。受信したパケットのこの分類操作は待ち行列管理と一般に呼ばれている。
【０００４】
分類は各送信元の優先レベルに応じてなされる。多くの場合、この優先レベルは、送信元が連続するパケットを送信する周期的な割合によって決まる。
【０００５】
この種の分類の実施については、データソーティングデバイスを提案しているフランス特許出願Ｎｏ．２７１５２５８が知られている。このデバイスは種々のデータを記憶するために連鎖レジスタダウンリンクコラムを含んでおり、このコラムの第１のレジスタは分類すべきデータを受け取るのに予定されている。また、このデバイスは連鎖レジスタアップリンクコラムも含んでおり、このコラムの最後のレジスタは転送すべきデータを格納している。さらに、アップリンクコラムの各レジスタはダウンリンクカラムの１つのレジスタと１対１に関連付けられており、各分類操作はダウンリンクカラムのレジスタに記憶されているデータとアップリンクカラムのレジスタに記憶されているデータとの交換によってなされる。このデバイスの動作の詳細について触れることはしないが、相互接続されているレジスタ間のデータ転送管理は、各コラムにおけるデータの進みが歩進的であるのため、ある種の複雑さを呈していることがよく分かる。
【０００６】
１つのデータを移動するには、このデータをやりとりすべきレジスタ数に対応する回数の転送が必要である。つまり、この移動は、各コラムにおけるレジスタ数が多くなるほど、転送回数の点でよりコスト高になる。
【０００７】
【発明が解決しようとする課題】
したがって、本発明はパケットを分類する際に少ない操作回数しか必要としない待ち行列の管理方法を目的とする。本発明は特に比較的長い行列によく適合している。
【０００８】
【課題を解決するための手段】
本発明によれば、複数の送信元から受信したパケットの待ち行列を管理する方法は以下のステップを含む。
【０００９】
−  受信した最後のパケットをバッファメモリの受信アドレスに記憶するステップ。
【００１０】
−  この受信した最後のパケットについて、待ち行列からのその取り出しの理論的時間を表すタイムスタンプを作成するステップ。
【００１１】
さらに、この方法は以下のステップも含む。
【００１２】
−  受信アドレスを、受信した最後のパケットのタイムスタンプによって識別される、スケジューラのロケーションに挿入するステップ。
【００１３】
−  このタイムスタンプに関連する占有ビットをアクティブ状態にセットするステップ。
【００１４】
−  待ち行列から取り出さなければならない最初の１つまたは複数のパケットを、行列から去ったばかりのパケットの占有ビットに続く最初のアクティブな占有ビットから決定するステップ。これらの占有ビットは、それらが関連するタイムスタンプの昇順に分類される。
【００１５】
−  この最初のパケットの占有ビットを、それが行列から去るときに、非アクティブ状態にセットするステップ。
【００１６】
この受信した最後のパケットが優先レベルを付与された送信元からのものであるとき、このパケットのタイムスタンプはこの優先レベルによって決まる。
【００１７】
例として、送信元からいくつかのパケットが、平均周期に対応した伝送速度で送信され、優先レベルがこの周期に対応しており、そのタイムスタンプは、この送信元からの前のパケットの前記周期（Ｔ）分だけ増加されたタイムスタンプに等しいかそれより大きい。
【００１８】
また、タイムスタンプは最初のパケットのタイムスタンプに等しいかそれより大きい。
【００１９】
この方法の有利な実施形態によれば、連続した占有ビットはワードにまとめられ、これらのワードの各々について指標が作成される。指標は、ワードのすべてのビットが非アクティブであるときにはゼロであり、そうでないときには１である。
【００２０】
さらに、占有ビットのセッティングに続いて、対応するワードの指標が再計算される。
【００２１】
したがって、ゼロでない最初の指標を、次いで、この指標のゼロでない最初のビットを探索することによって、待ち行列から取り出さなければならない最初の１つまたは複数のパケットを決定することが可能である。
【００２２】
しかし、追加の特徴によれば、連続した指標はフィールドにまとめられ、これらのフィールドの各々についてインデックスが作成される。インデックスは、フィールドのすべてのビットが非アクティブであるときにはゼロであり、そうでないときには１である。
【００２３】
この場合は、占有ビットのセッティングに続いて、対応するワードの指標が再計算され、その後に、この指標を含んでいるフィールドのインデックスが再計算される。
【００２４】
したがって、有利には、待ち行列から取り出さなければならない最初の１つまたは複数のパケットの決定は、ゼロでない最初のインデックスを、次いで、このインデックスのゼロでない最初の指標を、最後に、この指標のゼロでない最初のビットを探索することによって行われる。
【００２５】
また、好ましくは、タイムスタンプは所定の容量定数を法として作成される。
【００２６】
追加の特徴によれば、スケジューラは少なくとも２つのページを含み、待ち行列から取り出さなければならない最初の１つまたは複数のパケットの決定はページごとに行われる。
【００２７】
いずれにせよ、本発明はスケジューラのロケーションのうちの１つがアドレス連鎖リストを含んでいるケースも対象とする。
【００２８】
本発明は、添付の図を参照しながら以下の説明を読むことによって、より詳細に明らかになるであろう。
【００２９】
【発明の実施の形態】
図１を参照すると、この方法の第１のステップは、伝送チャネルによって受信した最後のパケットＬＣを、バッファメモリＢＵの受信アドレスＲＡｄに記録することにある。
【００３０】
本発明は、実際には特定のメモリであるスケジューラＰＲを必要とする。このメモリは、データおよび占有ビットを、このメモリへのアクセス手段である時間識別子に関連付けているメモリである。すべての占有ビットはゼロに初期化される。これは、規約により、非アクティブな状態に相当する。
【００３１】
また、説明を簡単にするために、パケットを送出する様々な送信元は、これらの送信元がパケットを送信する伝送速度にのみ依存する優先レベルを付与されているものと仮定される。この優先レベルは、２つの連続したパケットを区切っている平均周期Ｔによって容易に探知されるであろう。
【００３２】
待ち行列そのものを示しているスケジューラＰＲが、バッファメモリで使用される様々なアドレスをデータとして記憶するために設けられている。
【００３３】
待ち行列の最初のパケット、すなわち外部機器に向けて転送されるべきパケットが識別されるのはこのスケジューラＰＲからである。ここでバーチャルタイムＴＶは、転送途中のパケットあるいは最後に転送されたパケットが関連付けられていた時間識別子の値であると規約により定義される。
【００３４】
したがって、最後のパケットＬＣの受信時に、このパケットに関連するタイムスタンプＴＳＴＰが計算される。このタイムスタンプは、同じ送信元から前に受信したパケットに関連するスタンプに、この送信元の周期Ｔを加えた値を取る。しかし、送信元からの最初のパケットの受信については考慮する必要がある。つまり、前の方法が適用できないケースである。このケースでは、タイムスタンプの値は、バーチャルタイムＴＶの値に固定される。したがって、例として、タイムスタンプは、前のパケットのタイムスタンプに周期Ｔを加えた値と、バーチャルタイムＴＶとのうちで、最も大きな値と定義することができる。また、前のパケットのタイムスタンプの値とバーチャルタイムＴＶとのうちで最も大きな値をタイムスタンプとして採用し、この結果に周期Ｔを加えることもできる。
【００３５】
タイムスタンプＴＳＴＰが計算されると、最後のパケットＬＣがバッファメモリＢＵに記憶される受信アドレスＲＡｄが、このタイムスタンプＴＳＴＰの値をもつ時間識別子に関連するデータとしてスケジューラＰＲに記録される。
【００３６】
当然のことながら、タイムスタンプは時間識別子を規定するクロックに適合される。そして、このスタンプについては、クロックの整数値に対応する様に上方修正された値が採用される。
【００３７】
一方、このタイムスタンプに対応する占有ビットは１にセットされる。これは、規約により、アクティブな状態に相当する。このビットは、対応しているパケットの転送時にゼロにリセットされる。
【００３８】
したがって、転送されるべきパケットは、値１の占有ビットに関連付けられているパケットであることは明らかである。なお、これらのパケットはスケジューラＰＲにおいて、転送される順序に従って分類される。
【００３９】
つまり、１にセットされている占有ビットに関連するバーチャルタイムＴＶより大きい時間識別子の最小値を、スケジューラＰＲにおいて探索する必要がある。
【００４０】
本発明は、それを行うために、図２に準拠した有利な方法を提供する。
【００４１】
ここで、スケジューラＰＲが１６３８４個の時間識別子からなる２つのページで構成されていると仮定する。この場合、タイムスタンプは、３２７６８を法として計算される。すなわち、３２７６８でそれを割った剰余が採用される。この値、３２７６８は、スケジューラの容量に相当している。
【００４２】
時間識別子０から１６３８３について、スケジューラＰＲの第１のページに記載されている占有ビットの連続によって形成される第１の占有シーケンスが規定される。このシーケンスの最下位のビットｂ０は時間識別子０に関連する占有ビットであり、このシーケンスの次のビットｂ１は時間識別子１に関連する占有ビットであり、以下同様である。
【００４３】
この値、１６３８４により、このシーケンスを３２ビットの５１２個のワードに分割することができる。最初のワードＡ０はビットｂ０からｂ３１を含み、次のワードＡ１はビットｂ３２からｂ６３を含む。ビットｂ１６３５２からｂ１６３８３を含む第５１２番目のワードＡ５１１まで以下同様である。
【００４４】
各ワードＡｉについて、ここで指標Ｉｉが規定される。指標Ｉｉは、このワードのすべてのビットｂｉがゼロであるときにはゼロであり、これらのビットのうち少なくとも１つが１であるときには１である。
【００４５】
次に、５１２個の指標Ｉｉが３２ビットの１６個のフィールドにまとめられる。第１のフィールドＢ０は指標Ｉ０からＩ３１を含み、第２のフィールドＢ１は指標Ｉ３２からＩ６３を含む。指標Ｉ４８０からＩ５１１で形成される第１６番目のフィールドまで以下同様である。
【００４６】
各フィールドＢｊについて、上記指標と同じ機能から得られるインデックスＦｊが新たに規定される。したがって、第ｊ番目のインデックスＦｊは、第ｊ番目のフィールドＢｊのすべての指標がゼロであるときにはゼロであり、これらの指標のうちの少なくとも１つがゼロでないときには１である。
【００４７】
１６個のインデックスＦ１５、Ｆ１４、．．．．．Ｆ１、Ｆ０の集まりが１６ビットの第１のキーＣを形成する。
【００４８】
ここで指摘しておくべきことであるが、ワードは同じ論理操作によって２回圧縮され、１回目はフィールドを、次いで２回目はキーを与える。もちろん、本発明は圧縮回数が何回であろうとも、すなわち１回だけであろうとも、あるいは２回以上であろうとも適用される。
【００４９】
また、時間識別子１６３８４から３２７６７について、スケジューラＰＲの第２ページに記載されている占有ビットの連続によって形成された（図示せず）第２の占有シーケンスが規定される。
【００５０】
第２のシーケンスも、３２ビットの５１２個のワードに分割される。最初のワードＡ５１２はビットｂ１６３８４からｂ１６４１５を含み、次のワードＡ５１３はビットｂ１６４１６からｂ１６４４７を含む。ビットｂ３２７３６からｂ３２７６７を含む第１０２３番目のワードＡ１０２３まで以下同様である。
【００５１】
あらためて指標Ｉｉについて述べると、指標Ｉｉは、ワードＡｉのすべてのビットｂｉがゼロであるときにはゼロであり、これらのビットのうち少なくとも１つが１であるときには１である。
【００５２】
同じく、５１２個の指標Ｉｉは３２ビットの１６個のフィールドにまとめられる。
【００５３】
各フィールドＢｊについて、やはりインデックスＦｊが規定される。
【００５４】
１６個のインデックスＦ３１、Ｆ３０、．．．．．Ｆ１７、Ｆ１６の集まりが１６ビットの第２のキーＫを形成する。
【００５５】
ここでバイナリ変数Ｐが導入される。バイナリ変数Ｐは、第１のページが考慮されなければならないときにはゼロであり、第２のページを参照しなければならないときには１である。この変数Ｐは０に初期化される。
【００５６】
変数Ｐによって識別されたページが検査される。
【００５７】
このページのキーのすべてのビットがゼロである場合、待ち行列のこの部分は空である。このページ中において転送すべきパケットは皆無であり、この変数Ｐの値は反転される。
【００５８】
検査されたページのキーがゼロとは異なる値を有している場合、どのパケットが最初に転送されなければならないか探索する必要がある。
【００５９】
この場合、このページ中において、インデックスＦｊが１に等しい添字ｊの最小値ｊｍが探索される。
【００６０】
次に、指標Ｉｉが１に等しい添字ｉの最小値ｉｍが探索される。
【００６１】
最後に、ワードＡｉｍにおいて、ゼロでない最下位ビットｂｋが探索される。
【００６２】
ビットｂｋは、待ち行列の先頭を表すスケジューラＰＲの時間識別子を指定する。したがって、この時間識別子について示されているアドレスは、転送されなければならないパケットが記録されているバッファメモリのアドレスである。
【００６３】
このパケットが転送されると、対応する占有ビットｂｋは０にリセットされる。
【００６４】
次に、ワードＡｉｍが再計算され、フィールドＢｊｍも再計算され、最後に対応するキーが場合によっては訂正される。
【００６５】
上記例によれば、スケジューラは２つのページを含んでいる。なぜならば、それは最も単純なケースに相当しているからである。当然のことながら、本発明はページ数がそれ以上であっても適用される。専門家には、説明した方法を手直しすることは難しいことではない。たとえば、変数Ｐについて、かなりの数の値を用意するだけで十分である。ただし、この数はページ数に等しくなければならず、また、転送手順の際に、ページが空であるならば、次のページに移行するようになっていなければならない。
【００６６】
先に述べたように、バーチャルタイムＴＶも再更新されるとともに、転送中であり、かつビットｂｋに関連するパケットの時間識別子の値を取る。
【００６７】
新しいパケットを転送する場合には、上記転送手順を改めて適用すればよい。
【００６８】
一方、新しいパケットがバッファメモリＢＵで受信される場合には、本説明の冒頭で述べた諸操作に加えて、場合によっては、対応するワードＡｉおよびフィールドＢｊならびに対応するキーを変更する必要もある。
【００６９】
このパケットに対応している占有ビットｂｑが添字ｑを有する場合、ワードＡｒ（ここで、ｒ＝ｑ／３２−ｑ［３２］）が再計算されなければならず、またフィールドＢｓ（ここに、ｓ＝ｒ／１６−ｒ［１６］）も再計算されなければならず、最後にキーが再更新されなければならない。
【００７０】
したがって、パケットの受信または送信は比較的少ない数の操作しか必要としないことが分かる。その理由は、各ケースにおいて、占有ビットとワードＡｉとフィールドＢｊとキーだけが変更されるからである。
【００７１】
これまでは、１つのパケットだけが１つの所定のタイムスタンプに関連付けられる場合について考察してきた。複数のパケットが同じタイムスタンプを付与されるということもありうる。すなわち、複数のパケットがスケジューラＰＲの同じ時間識別子に関連付けられなければならないこともありうる。この場合には、この時間識別子と関係している単一のアドレスをデータとして書き込まず、その代わりに、当該タイムスタンプをもつ複数のアドレスの連鎖リストを書き込むようにする。この点についても、このような方法は現在の技術で普通に行われているやり方であるので、これ以上は説明しない。
【００７２】
ところで、占有ビットはスケジューラＰＲに記録されるものとして本発明について説明したが、この点については、それが絶対的な条件であると解釈してはならない。つまり、これらの占有ビットは、それらが対応するタイムスタンプと関係している限りにおいて、別のメモリに記憶することもできる。
【００７３】
本発明は上記で説明した実施形態に限定されるものではない。とりわけ、すべての手段は同等の手段で置き換えることができる。
【図面の簡単な説明】
【図１】本発明を実施するのに不可欠な手段の概略図である。
【図２】本発明の１つの特徴を示す図である。
【符号の説明】
ＢＵ  バッファメモリ
ＬＣ  受信した最後のパケット
ＰＲ  スケジューラ
ＲＡｄ  受信アドレス
ＴＳＴＰ  タイムスタンプ
【図１】
0004384298.tif 000002
【図２】
0004384298.tif 000003