(57)【要約】  複数の物理的に分かれたデータ受信／解析要素がデータパケットとこれらのタイムスタンプを受信する装置および方法である。制御部が、少なくともそのタイムスタンプに基づいて、それぞれのデータパケット用の記憶アドレスを決定し、その際、制御部は、受信時刻の後、予め定められた時間遅延が経過するまでそのアドレスの決定を行わない。
2013513270.tif 000002
【特許請求の範囲】
【請求項１】
データパケットを受信し送信するための装置であって、制御部および物理的に分かれた複数のデータ送受信要素を備え、
前記複数のデータ送受信要素がそれぞれ、
・  データパケットを受信するかまたはデータパケットにアクセスするための手段と、
・  前記データパケットの受信／アクセスの時点を決定するための手段であって、計時手段を備え、すべての決定手段の前記計時手段が同期している決定手段と、
・  前記時点を含む第１の情報を出力するための手段と、
・  前記データパケットの少なくとも一部を記憶するためのアドレスを受信するための手段と、
・  前記アドレスに前記データパケットの前記少なくとも一部が記憶されることを円滑化するための手段と
を備え、
前記制御部が、
・  前記第１の情報を受信し、前記データパケットの受信／アクセスの前記時点を導出するための手段と、
・  前記決定手段の前記計時手段と同期したクロックと、
・  受信された第１の情報のそれぞれについて、導出された前記時点で、または導出された前記時点の後予め定められた時間の遅延を加えた時点で、アドレスを決定し、関係する前記データ送受信要素の前記受信手段に前記アドレスを戻すための手段と
を備える装置。
【請求項２】
請求項１に記載の装置と、データを記憶し得る複数のアドレスを含む記憶領域とを備えるアセンブリであって、前記記憶領域内の受信された前記アドレスに前記データパケットの前記少なくとも一部を記憶するように前記円滑化手段が構成されているアセンブリ。
【請求項３】
別個のアドレスグループとして前記記憶領域内に複数のキューが定められ、前記制御部の前記決定手段が、関係する前記データパケットを加えるキューを前記第１の情報から決定し、関係する前記キューの前記アドレスグループからアドレスを選択するように構成されている、請求項２に記載のアセンブリ。
【請求項４】
決定された前記キュー内のアドレスを、受信／アクセスの順序で前記データパケットが前記キューに記憶されるように決定するように、前記制御部の前記決定手段が構成される、請求項３に記載のアセンブリ。
【請求項５】
前記記憶領域からデータを読み取るかまたはデキューイングするための手段をさらに備え、前記記憶手段の１つまたは複数のアドレスであり前記データが読み取られた／デキューイングされたアドレスに関する第２の情報を出力するための手段を、前記読取手段が備える、請求項３または４に記載のアセンブリ。
【請求項６】
各キューについて、データを加える次のアドレスを識別する書出しポインタと、前記キューから読み取られる／デキューイングされる次のアドレスを識別する読取りポインタとを保持するように前記制御部が構成され、
前記制御手段が、
・  アドレスが決定されたときに、決定された前記アドレスが関係する前記キューの前記書出しポインタを更新し、
・  受信された第２の情報に基づいて、データがデキューイングされた前記キューの前記読取りポインタを更新し、
・  前記キューの前記読取りポインタおよび書出しポインタに基づいて、前記アドレスも決定する
ように構成される、請求項４または５に記載のアセンブリ。
【請求項７】
キューの充填レベルが予め定められた値を超えたときに、前記読取り／デキューイング手段の前記出力手段を指示して、データが読み取られた前記アドレスに関する前記第２の情報を出力させるように、前記制御手段が構成されている、請求項６に記載のアセンブリ。
【請求項８】
アドレスが決定されたときに、更新された書出しポインタに関する情報を前記読取り／デキューイング手段に出力するように、前記制御手段が構成されている、請求項５から７のいずれか１項に記載のアセンブリ。
【請求項９】
前記データパケットの前記少なくとも一部が記憶されたときに前記制御部に通知するように前記円滑化手段が構成され、前記円滑化手段により通知されたときに、更新された書出しポインタに関する情報を前記読取り／デキューイング手段に出力するように前記制御部が構成されている、請求項５から８のいずれか１項に記載のアセンブリ。
【請求項１０】
予め定められた個数の物理アドレスのグループに前記記憶領域の前記キューの前記アドレスが分けられ、前記グループが不連続に配置され、前記キューを実現する前記アドレスが、連続するアドレスとして定められた仮想アドレスであり、仮想アドレスと物理アドレスの間の変換を行うための手段を前記制御手段がさらに備える、請求項３から９のいずれか１項に記載のアセンブリ。
【請求項１１】
請求項１に記載の装置を動作させる方法であって、
最初に、すべての決定手段の前記計時手段を同期させるステップと、
その後に、
各データ送受信要素が、
・  データパケットを受信またはデータパケットにアクセスするステップと、
・  前記データパケットの受信／アクセスの時点を決定するステップであって、前記データ送受信要素の前記計時手段から前記受信の時刻を受信することを含むステップと、
・  前記時点を含む第１の情報を出力するステップと、
・  前記データパケットの少なくとも一部を記憶するためのアドレスを受信するステップと、
・  前記アドレスに前記データパケットの前記少なくとも一部が記憶されることを円滑化するステップと、
前記制御部が、
・  前記第１の情報を受信し、前記データパケットの受信／アクセスの前記時点を導出するステップと、
・  受信された第１の情報のそれぞれについて、受信／アクセスの時点で、または受信／アクセスの時点の後予め定められた時間の遅延を加えた時点で、アドレスを決定し、関係する前記データ送受信要素の前記受信手段に前記アドレスを戻すステップと
を含む方法。
【請求項１２】
前記円滑化するステップが、データを記憶し得る複数のアドレスを含む前記記憶領域内の受信された前記アドレスに前記データパケットの前記少なくとも一部を記憶することを含む、請求項１１に記載の方法。
【請求項１３】
前記記憶領域の中で別個のアドレスグループとして複数のキューが定められ、前記決定するステップが、関係する前記データパケットを加えるキューを前記第１の情報から決定し、関係する前記キューの前記アドレスグループからアドレスを選択することを含む、請求項１２に記載の方法。
【請求項１４】
前記データパケットの前記少なくとも一部がその受信／アクセスの順序で１つまたは複数の前記キューの中に記憶されるようにアドレスを決定することを、前記アドレスを決定する前記ステップが含む、請求項１３に記載の方法。
【請求項１５】
前記記憶領域からデータを読み取るかまたはデキューイングするステップをさらに含み、前記記憶手段の１つまたは複数のアドレスであり前記データが読み取られた／デキューイングされたアドレスに関する第２の情報を出力することを、前記読み取るステップが含む、請求項１２または１３に記載の方法。
【請求項１６】
各キューについて、データを加える次のアドレスを識別する書出しポインタと、前記キューから読み取られる／デキューイングされる次のアドレスを識別する読取りポインタとを前記制御部が保持し、
前記制御手段が、
・  アドレスが決定されたときに、決定された前記アドレスが関係する前記キューの前記書出しポインタを更新し、
・  受信された第２の情報に基づいて、データがデキューイングされた前記キューの前記読取りポインタを更新し、
・  前記キューの前記読取りポインタおよび書出しポインタに基づいて、前記アドレスも決定する、請求項１３または１５に記載の方法。
【請求項１７】
キューの充填レベルが予め定められた値を超えたときに、前記制御手段が前記読取り／デキューイング手段を指示して、データが読み取られた前記アドレスに関する前記第２の情報を出力させる、請求項１６に記載の方法。
【請求項１８】
前記決定するステップが、更新された書出しポインタに関する情報を前記読取り／デキューイング手段に出力することを含む、請求項１５から１７のいずれか１項に記載の方法。
【請求項１９】
前記データパケットの前記少なくとも一部が記憶されたときに前記制御部に通知することを前記円滑化するステップが含み、前記円滑化手段により通知されたときに、更新された書出しポインタに関する情報を前記制御部が前記読取り／デキューイング手段に出力する、請求項１５から１８のいずれか１項に記載の方法。
【請求項２０】
前記記憶領域の前記キューの前記アドレスが、予め定められた個数の物理アドレスのグループに分けられ、前記グループが不連続に配置され、前記キューを実現する前記アドレスが、連続するアドレスとして定められた仮想アドレスであり、前記決定するステップが、仮想アドレスと物理アドレスの間の変換を行うことをさらに含む、請求項１２から１９のいずれか１項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のデータパケットのパラレル受信を円滑化するとともにそれらについてのアドレス生成を確実に一元化する装置に関する。
【発明の概要】
【０００２】
第１の態様では、本発明は、データパケットを受信し送信するための装置であって、制御部および物理的に分かれた複数のデータ送受信要素を備え、
複数のデータ送受信要素がそれぞれ、
・  データパケットを受信するかまたはデータパケットにアクセスするための手段と、
・  データパケットの受信／アクセスの時点を決定するための手段であって、計時手段を備え、すべての決定手段の計時手段が同期している決定手段と、
・  上記時点を含む第１の情報を出力するための手段と、
・  データパケットの少なくとも一部を記憶するためのアドレスを受信するための手段と、
・  上記アドレスにデータパケットの少なくとも一部が記憶されることを円滑化するための手段と
を備え、
制御部が、
・  第１の情報を受信し、データパケットの受信／アクセスの時点を導出するための手段と、
・  決定手段の計時手段と同期したクロックと、
・  受信された第１の情報のそれぞれについて、導出された時点で、または導出された時点の後予め定められた時間の遅延を加えた時点で、アドレスを決定し、関係するデータ送受信要素の受信手段に上記アドレスを戻すための手段と
を備える装置に関する。
【０００３】
こういった意味合いで、その装置は、送受信要素とは別個の制御部などの、分かれているがデータを交換するように相互に接続されたいくつかの要素により構成される。この交換は、ＴＣＰや、イーサネット（登録商標）、ブルートゥースなどの任意のデータ転送プロトコルのもとで行ってもよく、任意の種類のデータ転送を用いてもよく、有線または無線でもよい。
【０００４】
また、送受信要素は、それぞれが別個のＰＣＢや、プロセッサ、ＦＰＧＡなどにより実現される物理的に分かれたいくつかのハードウェアとして設けられる。この点で、物理的に分かれたとは、その要素が（有線または無線で）通信できるように相互に接続可能であるが、その接続は切れやすく、送受信要素を取り替えるかまたは付け加えて／取り除いて装置の能力を変えられることを意味する。もちろん、１つのＰＣＢ／プロセッサ／ＦＰＧＡにより複数の送受信要素を構成してもよく、その際は、そうした送受信要素のグループを取り替えて／取り除いて／付け加えてもよい。制御部は送受信要素とは分かれていてもよく、または１つまたは複数の送受信要素のうちの一部を構成してもよい。
【０００５】
もちろん、プロセッサや、ソフトウェアにより制御されるかまたは物理的に組み込まれたもの、ＦＰＧＡ、特定用途向け回路、ＡＳＩＣＳなどの個々の要素として、送受信要素の個々の手段を調達または成形してもよい。あるいは、複数のそうした手段を組み合わせて１個のそうしたプロセッサなどにしてもよい。
【０００６】
もちろん、任意の個数の送受信要素を用いてもよい。複数の送受信要素を用いるときは、パラレルの受信と記憶を行ってもよい。２，３，４，５，６，７，８，１０，１５，２０個などか、またはそれより多い任意の個数の送受信要素を用いてもよい。以下でさらに記載するように、これらの送受信要素はすべて同一またはほぼ同一のものでよく、または様々な動作をする様々な回路として具体化、すなわち作成してもよい。各送受信要素が制御部をもってもよいが、必要なのは１つだけである。別の状況では、ただ１つの送受信要素が制御部を備えるが、その送受信要素は他の点では残りの送受信要素と同一である。
【０００７】
アクセス／受信手段は、実際にデータまたはデータパケットを受信かつ／または記憶してもよい。あるいは、他の位置で、または送受信要素がそれを用いて通信する装置で、データパケットを受信または記憶してもよく、それによって、データパケットのデータをリモートで読み取ることによりそのデータにアクセスするとともに、そのデータを他の装置に記憶する。後者の場合は、データパケットにリモートでアクセスするため、通常、処理が遅くなる。
【０００８】
あまり好ましくはないが、受信されたアドレスは、データパケットが記憶される、記憶部内の実際のアドレスでなくてもよい。あるいは、このアドレスを導出することができる情報を受信してもよい。
【０００９】
送受信要素の決定手段はそれぞれ計時手段を備え、すべての決定手段の計時手段は同期している。この点で、「同期した」とは、予め定められた許容誤差の範囲内ですべての計時手段が同一の時点を同時に出力することを意味する。したがって、異なる計時手段の時点が比較可能になり得る。計時手段同士および／または計時手段と制御部の間でクロック信号を交換することにより、この同期を確実なものにしてもよい。この点で、「許容誤差」は、１，２，３，５，１０個またはそれより多くのクロックサイクルまたは計時手段により定められるタイミングの単位の範囲内でもよい。
【００１０】
一実施形態では、単にグローバルクロックをすべての決定手段に出力してもよく、その際は、計時手段がこのクロックを受信する。あるいは、クロック信号を生成するための手段を決定手段がそれぞれ備える。したがって、そのときは、このクロック信号を同期させるための方策を用いる。
【００１１】
一般に、時点は日時により表してもよく、または等間隔の時点でインクリメント／デクリメントされる数などで表してもよい。もちろん、必要があれば、この数を折り返して先頭に戻してもよい。
【００１２】
円滑化手段は、データ接続を介するなどして、データパケットの少なくとも一部を例えば記憶部に直接記憶してもよく、または、別の場所に記憶する場合には、データパケットの記憶を円滑化してもよい。そのとき、アドレスをこの別の場所に転送してもよく、そこでデータパケットの記憶が行われる。
【００１３】
もちろん、受信／アクセス手段、送信手段および円滑化手段は、この動作を処理し必要に応じてデータを伝達するのに必要なドライバやコネクタなどを備えてもよい。
【００１４】
制御部は、任意の種類のプロセッサや、物理的に組み込まれるかもしくはソフトウェアにより制御されるものなどで構成してもよく、または、特定用途向け回路でもよい。制御部の動作は、個々のデータパケットについてのアドレスを決定することである。このやり方では、必要があれば例えばデータパケットの順序を取得してもよい。
【００１５】
アドレスは少なくとも時点から決定され、その目的は、データパケットまたはその一部分が受信の順序で記憶されるようにすることである。別の状況では、データパケットのストリーム／種類などが決定されるように、データパケットに関する付加的な情報（さらに下記を参照）を第１の情報が含む。したがって、時点を用いてアドレスを決定するだけでなく、あるストリームまたは種類のデータパケットを一緒に記憶してもよい。
【００１６】
しかしながら、後で受信された第１の情報がそれに関するデータパケットより先に実際に受信されたデータパケットに関するものでないということを保証するか、または少なくともその確率を高めるために、アドレスの実際の決定は、受信／アクセスの時点の後、予め定められた時間遅延するまでは行わない。このように、正しいアドレスを与える確率が高まるように、より多くの知識が集められる。
【００１７】
したがって、制御部も、グローバルクロック信号の受信機かまたはローカルクロック信号の供給源である計時手段をもつ。もちろん、制御部と送受信要素のうちのいくつかがグローバルクロックを受信し、その他が、グローバルクロックと同期したローカルクロック信号の供給源をもってもよい。
【００１８】
先に受信されたデータパケットに関する第１の情報が後の時点で制御部に到達しない理由は、処理の遅延（データ送受信要素が込んでいる）か、またはこのデータ送受信要素と制御部の間における通信の遅延の場合がある。この予め定められた遅延は、１，２，３，４，５，６，７，８，１９，１５，２９，３９，４０などの任意の個数のクロック周期もしくはそれより多くのクロック周期か、または、１００ｎｓ，２００ｎｓ，３００ｎｓ，５００ｎｓ，７５０ｎｓ，１ｍｓ，５ｍｓ，１０ｍｓもしくはそれ以上などの任意の期間でもよい。
【００１９】
制御部は、第１の情報のそれぞれについて、したがってデータパケットごとに、アドレスを返すことになる。
【００２０】
この点で、データパケットは、ネットワークや、データケーブル、データバス、トランクなどの上で伝送されるかまたはそれらにより搬送される、任意の種類のデータ単位でもよい。通常、データ単位は、ＵＤＰやＴＣＰのデータパケットといったいくつかの異なる規格またはデータパケットの種類がその傘下にあるイーサネット（登録商標）規格などの、１つまたは複数のデータ規格に従う。データパケットは、通常、アドレスデータやペイロードなどのいくつかの異なる情報項目または種類をもち、それらはそれぞれ、データパケット内のよく定められたまたは知られた位置に配置されている。そうした位置や種類は、典型的にはデータパケットの種類ごとに異なるが、通常、データパケットの種類、したがってその個々の内容の位置は、実際のデータパケットから決定してもよく、その際は、アドレスデータおよび／またはペイロードなどの個々のデータ項目を、後で導出し、変更し、かつ／または解析に使用してもよい。その種類または規格は、パケットの特定のデータ項目により種類／規格が識別されるときなどにデータパケットから直接導出してもよく、または、データパケットのデータ項目の種類や位置を認識しその後にそうしたデータがそうした（１つまたは複数の）位置で見つかるであろうデータパケットの（１つまたは複数の）種類もしくは規格を決定することに基づくなどして、データパケットから導出されたデータから導出してもよい。
【００２１】
データパケットの任意の部分を記憶してもよい。データパケットを再度出力する必要がなければ、場所を取らないようにするために、例えばその中のアドレス指定情報を削除してもよい。
【００２２】
データパケットは並べ替えてもよく、その場合は、多数のやり方で、いくつかの理由により並べ替える。通常、コンピュータ間のデータ交換はファイル転送や、ＴＣＰ転送、ＶｏＩＰなどであり、その際は、個々のパケットの順序が重要である。通常、そうした転送のことをストリームと呼ぶ。
【００２３】
通常、データパケットのストリームは、単一の送信機から１つまたは複数の受信機に伝送されるデータパケットの列である。これらのデータパケットは、例えば、パケットのペイロードである、より小さな部分で伝送される単一のファイルなどに関する。そして、送信機と受信機、または中間の任意のネットワーク要素は、通常、パケット内でも表されるアドレスをもつ。加えて、個々のデータパケットの規格に応じて、データパケット中に他のストリーム識別情報があることもある。
【００２４】
したがって、例えばアドレスおよび／またはストリーム識別情報に基づいてストリームを識別してもよく、それによって、矛盾なく用いられるならば同じ情報を導出してもよく、後続する任意のプロセスでは単にその情報からストリームを識別してもよい。その際、各ストリームのパケットを別個のキューに記憶してもよい。
【００２５】
別の状況では、データパケットの中に、その順序を決定するシーケンス番号などの情報を与えてもよい。したがって、この情報をパケットの並べ替えに用いてもよい。
【００２６】
本発明の第２の態様は、第１の態様による装置と、データを記憶し得る複数のアドレスを含む記憶領域とを備えるアセンブリであって、記憶領域内の受信されたアドレスにデータパケットの少なくとも一部を記憶するように円滑化手段が構成されているアセンブリに関する。
【００２７】
もちろん、記憶部は、一体構造の記憶部か、または間隔を空けたいくつかの記憶要素により構成されるものなどの、任意の形態の記憶部でもよい。通常の記憶技術は、ハードドライブや、フロッピー（登録商標）ディスク、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュ、メモリカード、ＣＤ−ＲＯＭ、ＤＶＤ、メモリカードなどに基づいている。
【００２８】
別個の記憶部を設けるならば、アドレスは、実際の記憶部とその中の「ローカルアドレス」の両方の識別情報を記述することになる。
【００２９】
データパケットは、異なるサイズをもってもよく、様々な個数のアドレスを占めてもよい。
【００３０】
好ましくは、別個の、すなわち重なり合わないアドレスグループとして記憶領域内に複数のキューが定められ、制御部の決定手段が、関係するデータパケットを加えるキューを第１の情報から決定し、関係するキューのアドレスグループからアドレスを選択するように構成される。
【００３１】
この点で、２つのグループ、すなわち２つのキューの一部であるアドレスがないときは、アドレスグループは重なり合わない。
【００３２】
１つのキューは複数の連続したアドレスを含むことが好ましいが、これは必須要件ではない。
【００３３】
好ましくは、決定されたキュー内のアドレスを、受信／アクセスの順序でデータパケットがキューに記憶されるように決定するように、制御部の決定手段が構成される。したがって、予め定められた時間遅延は、普通なら発生するいかなる遅延とも無関係にデータパケットが受信／アクセスの順序で記憶されるということを保証する（または、少なくともその確率を高める）役割を果たす。
【００３４】
特に興味深い実施形態は、記憶領域からデータを読み取るかまたはデキューイングするための手段をさらに備え、記憶手段の１つまたは複数のアドレスであってデータが読み取られた／デキューイングされたかまたは読み取られる／デキューイングされるアドレスに関する第２の情報を出力するための手段を、読取り／デキューイング手段が備えるものである。したがって、アドレスが決定されたときに、キューへのデータの追加が行われ、読取り／デキューイングするときに、データが取り除かれる。この情報に基づいて、（１つまたは複数の）キューの内容を決定し更新してもよい。
【００３５】
一実施形態では、各キューについて、データを加える次のアドレスまたはデータが加えられた最後のアドレスを識別する書出しポインタと、キューから読み取られる／デキューイングされる次のアドレスまたは読み取られた／デキューイングされた最後のアドレスを識別する読取りポインタとを保持するように制御部が構成され、
制御手段が、
・  アドレスが決定されたときに、決定されたアドレスが関係するキューの書出しポインタを更新し、
・  受信された第２の情報に基づいて、上記の第２の情報などから、データがデキューイングされたキューの読取りポインタを更新し、
・  キューの読取りポインタおよび書出しポインタに基づいて、アドレスも決定する
ように構成される。
【００３６】
ある状況では、やはり読取り／書出しポインタに基づくアドレスの決定は、（１つまたは複数の）キューの充填レベルの決定に基づいて行ってもよい。明らかに、キューのデータの量は、その読取りポインタと書出しポインタから決定することができる。こういった意味合いで、充填レベルは、キューにあるいくつかのデータパケットまたはキューによりふさがれるいくつかのアドレス指定可能な要素に関係し得る。この充填レベルは、データ／パケット／アドレスの量／個数またはパーセンテージ（そのときはこの個数／量を最大の個数／量と比較する）により表してもよい。充填レベルは、キューごとに、キューのグループごとに、またはすべてのキューについて決定してもよい。
【００３７】
好ましい実施形態では、キューの充填レベルが予め定められた値を超えたときに、読取り／デキューイング手段の出力手段を指示して、データが読み取られたかまたは読み取られるアドレスに関する第２の情報を出力させるように、制御手段が構成される。
【００３８】
この状況では、アドレスを決定するときに、データパケットの、少なくとも一部のサイズがわかっていることが望ましい。というのは、それが占めるアドレス指定可能な要素の個数がこのサイズにより決定されるからである。したがって、次のデータパケットについてのアドレスはそれに依存することになる。
【００３９】
読取りポインタを更新するときは、第２の情報により、すべての解放されたアドレス指定可能な要素のアドレスを識別するか、または単に、読み取るべき次のデータパケットまたは新たに解放されたアドレス同士の間の境界でアドレスを識別するのが望ましいであろう。このアドレスは、次のデータパケットの最初のアドレスか、または解放されたアドレスの最後でもよい。
【００４０】
この状況では、第２の情報と、したがって読取りポインタは、あまり頻繁には出力されない。このデータ転送により、データがそれを介して記憶手段に記憶されるデータ経路上がふさがるおそれがある。
【００４１】
記憶中に、書出しポインタは制御部により更新され、したがって、読取りポインタが更新されないと、（１つまたは複数の）キューが増大するように見える。もちろん、これらのキューが空いた状態にならないことを保証するために、書出しポインタを読取り／デキューイング手段に頻繁に送信してもよい。キューが空いていることをそれらの更新された読取りポインタと更新されていない書出しポインタがともに示す場合は、その空いた状態となる。したがって、アドレスが決定されたときに、更新された書出しポインタに関する情報を読取り／デキューイング手段に出力するように、制御手段を構成してもよい。こうして、読取り／デキューイング手段を完全に更新してもよい。
【００４２】
データパケットの少なくとも一部が記憶されたときに制御部に通知するように円滑化手段が構成され、円滑化手段により通知されたときに、更新された書出しポインタに関する情報を読取り／デキューイング手段に出力するように制御部が構成されると、最も好ましい。したがって、データが記憶されたときだけ書出しポインタは更新される。すると、更新された書出しポインタのアドレスだがまだデータを受信していないアドレスを読取り／デキューイング手段が読み取る／デキューイングすることが回避される。
【００４３】
（１つまたは複数の）キューの実際の充填レベルが制御部に利用可能であるように、１つまたは複数のキューか、すべてのキューかまたは記憶領域全体の充填レベルが限界を超えると、読取りポインタは更新される。
【００４４】
好ましくは、データパケット（またはその一部）が記憶されるたびに、書出しポインタが更新され、読取り／デキューイング手段に通知される。しかしながら、データを記憶する／読み取る／デキューイングするために記憶手段とデータ送受信要素の間の帯域幅が確保されていることが好ましいため、更新された書出しポインタをデータパケットが保存されるたびに送信するのではなく、（読取り／デキューイング手段を更新する前にローカルの書出しポインタを何回か更新することにより）そうした情報をプールし、例えば、記憶手段への／からの帯域幅の要件により可能なときにこの更新を送ることが望ましいであろう。しかしながら、最後の更新から最大制限時間が経過する前に更新を送らなければならないと決定してもよい。
【００４５】
好ましくは、キューが記憶されるアドレスは、連続的なアドレスとして割り当てられる。このやり方では、キュー内で現在占有されているアドレスの個数を決定するために、単に読取りポインタと書出しポインタを互いに引き算することにより、充填レベルなどが容易に決定される。
【００４６】
しかしながら、多数の連続的なアドレスを設けることは、現実のシステムでは問題となるおそれがある。標準の記憶領域システムでは、最大サイズが例えば４ＭＢであるブロックまたはセグメントが割り当てられる。アドレスは、セグメント／ブロック内では連続的であるが、セグメント／ブロックがメモリ内でランダムに割り当てられることもあるため、完全なアドレスでないことがある。
【００４７】
そうした状況では、記憶部のキューのアドレスが、予め定められた個数の物理アドレスのグループに分けられ、そのグループが不連続に配置される。この点で、「不連続に」とは、記憶領域の空間でそのグループは近接して配置されない（グループの境界を越えて連続するアドレスをもたない）ことを意味する。そして、好ましくは、キューを実現するアドレスが、連続するアドレスとして定められた仮想アドレスであり、仮想アドレスと物理アドレスの間の変換を行うための手段を制御部がさらに備える。
【００４８】
したがって、任意の個数の連続的な仮想アドレスを割り当ててもよく、それらはその後、実際の物理アドレスに変換される。
【００４９】
これを得る１つのやり方は、いくつかの割り当て可能なセグメント／ブロックを記憶部が有し、割り当て可能なブロック／セグメントの１つの中のアドレスを各グループの物理アドレスが定め、第１の個数のビットのアドレスで各ブロック／セグメントが特定可能であり、第２の個数のビットを用いてブロック／セグメントの中のすべてのアドレスがアドレス指定可能であり、第１の個数のビットと第２の個数のビットの和に対応するいくつかのビットを物理アドレスが有し、少なくとも第１の個数のビットをもつ第１の部分と、少なくとも第２の個数のビットをもつ第２の部分とを仮想アドレスのそれぞれが含み、仮想アドレスの第１の部分を第１の個数のビットをもつ第３の部分に変換し、割り当てられたブロック／セグメントを識別し、第３の部分と第１の部分をもつアドレスとして物理アドレスを生成するように変換手段が構成されるというものである。
【００５０】
好ましい実施形態では、
・  受信された／アクセスされたデータパケットについて、第１のキューのグループのそれぞれからの１つのキューをそれぞれが含む第２のキューのグループであって、第２のキューのグループ同士のキューが重なり合わない第２のキューのグループの１つを、第１の情報などから決定し、
・  決定された第２のグループの現在選択されている第１のキューの充填レベルが予め定められたレベルを超えるならば、決定された第２のグループの第２のキューを識別かつ選択し、
・  アドレスを、識別された第２のキューのアドレスとして選択する
ことによってアドレスを選択するように決定手段が構成され、
識別かつ選択された第２のキューに関する読取り／デキューイング手段に、予め定められたレベルを超過した第１のキューが空になるまでこの第２のキューを処理しないように指示するための手段を、アセンブリがさらに備える。
【００５１】
本実施形態では、任意の第２のグループの中でパケットを処理／デキューイングする際に順序を維持しながら、プロセス／プロセッサ間の負荷分散をしてもよい。
【００５２】
記憶された（少なくとも一部の）データパケットをデキューイングかつ／または解析／処理する場合にこれらの順序が重要なときは特に、一度読取り／デキューイング手段がこれらをデキューイング／処理し始めると、そうしたデータパケットを別の読取り／デキューイング手段に割り当てることは困難である。本実施形態を用いて、そうしたデータパケットのグループ（通常はストリーム）のそれぞれを、読取り／デキューイング手段のうちの別々の手段によりデキューイング／処理された別個のキューをそれぞれがもつ第２のキューのグループに割り当てる。こうして、データパケットが現在記憶されており第１の読取り／デキューイング手段によりデキューイングされるキューが長くなりすぎるならば、すなわち第１の読取り／デキューイング手段が込みすぎているならば、第２の読取り／デキューイング手段によりデキューイングされる別のキューを同じ第２のグループから識別するが、第１の読取り／デキューイング手段が関係する第２のグループ内のそのキューからすべてのデータパケットをデキューイングする前に第２の読取り／デキューイング手段がデータパケットをデキューイングできないように決める。このやり方では、読取り／デキューイング手段の全体でデータパケットのデキューイングの順序が維持される。
【００５３】
第３の態様では、本発明は、第１の態様による装置を動作させる方法であって、
最初に、すべての決定手段の計時手段を同期させるステップと、
その後に、
各データ送受信要素が、
・  データパケットを受信またはデータパケットにアクセスするステップと、
・  データパケットの受信／アクセスの時点を決定するステップであって、データ送受信要素の計時手段から受信の時刻を受信することを含むステップと、
・  上記時点を含む第１の情報を出力するステップと、
・  データパケットの少なくとも一部を記憶するためのアドレスを受信するステップと、
・  上記アドレスにデータパケットの少なくとも一部が記憶されることを円滑化するステップと、
制御部が、
・  第１の情報を受信し、データパケットの受信／アクセスの時点を導出するステップと、
・  受信された第１の情報のそれぞれについて、受信／アクセスの時点で、または受信／アクセスの時点の後予め定められた時間の遅延を加えた時点で、アドレスを決定し、関係するデータ送受信要素の受信手段に上記アドレスを戻すステップと
を含む方法に関する。
【００５４】
上記のように、データパケットにアクセスするステップでは、その装置内でデータパケットを受信することを要求するのではなく、装置がそれを用いて通信するリモートの要素で受信および／または記憶されたときにデータパケットにアクセスしてもよい。
【００５５】
この同期させるステップは、任意の所望の同期でよい。グローバルクロックを配信することができ、かつ／または読取り／送信要素が別々のクロックをもち、その際、その同期は、１つの読取り／送信要素のクロック、制御部のクロック信号、またはグローバルクロックに他のすべてのクロックを同期させるものでもよい。
【００５６】
一実施形態では、円滑化するステップが、データを記憶し得る複数のアドレスを含む記憶領域内の受信されたアドレスにデータパケットの少なくとも一部を記憶することを含む。この記憶は、好ましくはＤＭＡ通信として扱われる。
【００５７】
そして、記憶領域の中で別個のまたは重なり合わないアドレスグループとして複数のキューを定めてもよく、決定するステップが、関係するデータパケットを加えるキューを第１の情報から決定し、関係するキューのアドレスグループからアドレスを選択することを含む。
【００５８】
好ましくは、データパケットの少なくとも一部がその受信／アクセスの順序で１つまたは複数のキューの中に記憶されるようにアドレスを決定することを、アドレスを決定するステップが含む。
【００５９】
ある状況では、その方法は、記憶領域からデータを読み取るかまたはデキューイングするステップをさらに含み、記憶手段の１つまたは複数のアドレスであってデータが読み取られた／デキューイングされたかまたは読み取られる／デキューイングされるアドレスに関する第２の情報を出力することを、読み取るステップが含む。
【００６０】
好ましい実施形態では、各キューについて、データを加える次のアドレスまたはデータが加えられた最後のアドレスを識別する書出しポインタと、キューから読み取られる／デキューイングされる次のアドレスまたは読み取られた／デキューイングされた最後のアドレスを識別する読取りポインタとを制御部が保持し、
制御手段が、
・  アドレスが決定されたときに、決定されたアドレスが関係するキューの書出しポインタを更新し、
・  受信された第２の情報に基づいて、上記の第２の情報などから、データがデキューイングされたキューの読取りポインタを更新し、
・  キューの読取りポインタおよび書出しポインタに基づいて、アドレスも決定する。
【００６１】
上記のように、（１つまたは複数の）キューの充填レベルに基づいて、この決定を行ってもよい。
【００６２】
ある状況では、キューの充填レベルが予め定められた値を超えたときに、制御手段が読取り／デキューイング手段を指示して、データが読み取られたかまたは読み取られるアドレスに関する第２の情報を出力させる。
【００６３】
そして、決定するステップが、更新された書出しポインタに関する情報を読取り／デキューイング手段に出力することを含んでもよい。
【００６４】
ある状況では、更新された書出しポインタに関する情報を、アドレスが決定されたときに読取り／デキューイング手段に出力することを、決定するステップが含む。しかしながら、好ましくは、データパケットの少なくとも一部が記憶されたときに制御部に通知することを、円滑化するステップが含み、円滑化手段により通知されたときに、更新された書出しポインタに関する情報を制御部が読取り／デキューイング手段に出力する。したがって、決定された（１つまたは複数の）アドレスにデータが記憶されるまで、書出しポインタは更新されない。
【００６５】
一実施形態では、予め定められた個数の物理アドレスのグループに記憶領域のキューのアドレスが分けられ、グループが不連続に配置され、キューを実現するアドレスが、連続するアドレスとして定められた仮想アドレスであり、決定するステップが、仮想アドレスと物理アドレスの間の変換を行うことをさらに含む。
【００６６】
以下では、図面を参照して、本発明の好ましい実施形態について記載する。
【図面の簡単な説明】
【００６７】
【図１】本発明による装置およびアセンブリを示す。
【図２】仮想アドレスから物理アドレスへの変換を示す。
【図３】図１のアロケータとアダプタの間でのクロックの同期を示す。
【図４】時系列でランダムに受信されたパケットを並べ替えるやり方を示す。
【図５】データパケット間の順序を維持しながらプロセッサ間で負荷分散することを示す。
【図６】アダプタ内の負荷分散を示す。
【発明を実施するための形態】
【００６８】
図１に、それぞれがＷＷＷなどのネットワークに接続され、そこからデータを受信するいくつかのアダプタ１２をもつ、データフレームを解析し送信するための装置の実施形態１０を示す。
【００６９】
一般に、この種類のシステムは、多数のデータパケットを受信し、その記憶および／または送信を適当なやり方で円滑化するために用いることができる。通常、これらのデータパケットは、本システムによりモニタリングされるデータ接続上を、コンピュータの組またはネットワークの間で伝送される。したがって、通常、データパケットは本システム用のものではなく、本システムに向けた、またはそこからのものでもない。
【００７０】
このデータは、記憶されたときに、１つまたは複数の後続するプロセスまたはプロセッサ（図示せず）により処理してもよい。非常に大量のデータを扱うことを可能にするためには、迅速だが構造化されたデータの検索が実現されるように、構造化して記憶することが望ましい。また、単一のプロセッサで十分でないときは複数のプロセッサを設けて、それにより、プロセッサごとにデータを別々に記憶することが望ましい。
【００７１】
そのプロセッサは、データトラフィックを解析し、データを記憶し、かつ／または、プロセッサでの処理の結果に応じて他のネットワーク要素やコンピュータなどにデータを伝送するために、用いることができる。
【００７２】
代わりに、または付加的に、その後再度データを出力することも望ましく、しかも、または代わりに、それによって、そのように出力することが望ましいやり方または順番でデータを記憶することも望ましいであろう。
【００７３】
通常、データパケットは、データパケットのストリームの部分である。２つのプロセッサまたはコンピュータが対話するときに、データパケットのストリームが交換される。このストリームは、ファイルの転送か、またはＶｏｉｃｅ  ｏｖｅｒ  ＩＰなどの音声／映像の交換でもよい。ストリームは同様のデータパケットの列であり、データパケットのストリームへの帰属が決定可能であり、ストリームのすべてのデータパケットが所望の順序で一緒に記憶され、その後で同じプロセスまたはプロセッサにより扱われ、かつ／またはその順序で出力されることが望ましい。
【００７４】
受信されたデータフレームのストリームへの帰属は、フレームを解析することで決定される。この解析について、以下でさらに詳細に記載する。
【００７５】
本実施形態は、フレーム／パッケージを解析し、かつ／またはこれらを記憶するタスクを多数のアダプタ１２で分割するセットアップを実現することを意図している。
【００７６】
より詳細には、ＷＷＷや任意の適当な種類のトランクまたはネットワークなどのネットワーク１４から、アダプタ１２はデータフレームを受信する。各アダプタ１２は、他のアダプタ１２とは無関係に複数のフレームを受信する。
【００７７】
好ましくは、すべての（場合によっては１つを除く）アダプタは同じものであり、それぞれ、ネットワークまたはデータケーブルからデータフレームを受信するように構成された要素であるいわゆるＰＨＹ２０と、受信されたフレームを例えばコンピュータ上のデータバス上で通常用いられる規格に変換するいわゆるＭＡＣ回路２２とを備える。
【００７８】
データフレームが受信されると、そのフレームは、回路２４でタイムスタンプが与えられ、その後、解析回路２６に供給される。解析回路２６は、そのフレームが準拠する規格に関するデータ（ＶＬＡＮであるかどうか、かつ／またはＭＰＬＳのタグが付されているかどうかなど）や、場合によってはそこからのアドレスデータなどの、データフレームに関するデータを導出する。複数の異なる種類の規格が知られており、それらはそれぞれ、どの種類のデータ（アドレス、カプセル化、ペイロード、誤り訂正など）がフレーム内にあり、どこにそうしたデータがあるかを定める。特定の種類のパケットに応じて、異なる種類のデータを導出してもよい。
【００７９】
回路２６は、データフレームのデータパケットストリームへの帰属や、中央記憶領域内のキューなどの、データフレームを識別するデータを出力する。そして、データフレームの長さ、ＩＤ／キューの識別情報およびデータフレームのタイムスタンプが、要求回路２８内で、中央サーバメモリアロケータ、すなわち制御装置１６に伝送され、その制御装置１６は、データフレームが記憶される記憶領域１８内のアドレスを返す。このアドレスは、やはりデータフレームを受信する転送回路３０に返され、その後、その転送回路３０は、共通のデータバス３２を介して、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）プロトコルを実行するなどして、識別されたアドレスにデータフレームを伝送する。この記憶にはダイレクトメモリアクセスを用いてもよく、そのことは、フレームが所望のアドレスに直接記憶され、さらなる解析が必要ないことを意味する。これはデータ記憶領域にデータを記憶する最も速いやり方であるが、物理アドレスがわかっている必要がある。
【００８０】
もちろん、代わりに、回路２８は、タイムスタンプやパケットの長さと一緒に、フレームを識別する（種類やアドレスなどの）他の情報を出力してもよく、それによって、アロケータ自体が、フレームが加えられるキューを決定し、したがってフレームが記憶されるアドレスを導出することになる。
【００８１】
アロケータ１６とアダプタ１２の間における「帯域外」の通信は、低帯域幅の固定通信か、デイジーチェーンのトポロジーか、またはリング型のトポロジーでもよい。以下でさらに記載するように、この通信は、タイムスタンプ回路２４のクロックを同期させるためにも用いられる。この通信に適したプロトコルは、１０Ｇｂｐｓのイーサネット（登録商標）のフロントポート（ＰＨＹ）の帯域幅につきほぼ１Ｇｂｐｓの全二重の帯域幅を要する標準の６４ｂ／６６ｂコーデックでもよい。
【００８２】
上記の実施形態１０では、記憶領域１８内の任意の個数のキューにデータフレームを記憶してもよいことに留意されたい。どのキューにデータパケットを送信するかは、フレームのその後の運命に依存してもよい。フレームが１つまたは複数のプロセッサにより解析されるならば、プロセッサごとに１つのキューを設けてもよく、パケットを加える前のキューの長さがどのくらいかに応じてフレームをキューに送信してもよい。キューが長ければ、したがってプロセッサが込んでいれば、キューがより短い、したがってあまり込んでいないプロセッサにパケットを与えてもよい。
【００８３】
このやり方では、データパケットの少なくとも一部が、受信された／アクセスされたときと同じ順序でキューに記憶されることが保証される。第１のデータパケットを第２のデータパケットの後に受信したならば、その順序は制御部の遅延処理によって復元されることになり、それによって、２つのデータパケットは、制御部にとって両方が既知になり、割り当てられたアドレスが正しい順序になるまで、処理されない。
【００８４】
ほとんどのデータフレームがストリームに関するならば、同じストリームに関するフレームを異なるプロセッサにより解析するために異なるキューに伝送するのは望ましくないかもしれないことに留意されたい。このやり方では、好ましくは、新たに開始されるストリームからのその後のフレームをすべて、「欠乏状態の」プロセッサに割り当てることにより、プロセッサ間で任意の負荷分散を実行する。この負荷分散と同様に、この代替案について、以下でさらに記載する。
【００８５】
また、フレームが後の時点で記憶領域１８から出力されるならば、出力されるフレームを、特定のキューに、フレームが出力される順序で与えてもよい。そうした出力について、以下でさらに記載する。
【００８６】
ある一定のサービスの品質が要求されるならば、任意のキューを、優先度が異なるいくつかのキューに分割して、より優先度の高いフレームがより優先度の低いフレームを追い越し、より迅速に扱われる（処理される、出力される、解析されるなど）ようにしてもよい。
【００８７】
アダプタ１２内の負荷分散
図６では、アダプタ１２のＰＨＹ２０や、ＭＡＣ２２、タイムスタンプ割当て２４などの一部の要素を、解析器２６や、要求元２８、転送回路３０などの他の要素より高速に動かしてもよいことがわかる。この状況では、要素２０〜２４から受信しタイムスタンプを記録したデータパケットのフローを多数のパラレルなフローに分割するために、これらのより遅い要素の様々な「具体化」を行うことができる。図６では、単一のＰＨＹ２０で受信されたデータパケットが、４つのパラレルなフローに分割されている。要素２０〜３０は直接図示していないが、それらの位置はフロー中に示している。
【００８８】
もちろん、必要があれば、個々のフローの間に負荷分散を実行してもよい。
【００８９】
図６の下側の線は代替案を示し、そこでは、アダプタ１２内の単一のフローで取り扱われるデータパケットを、高速のＰＨＹ２０により受信する。
【００９０】
多数のキューを用いた外部のプロセスまたはプロセッサの負荷分散
記憶領域１８のキューからデータを読み取るプロセッサまたはプロセス（図示せず）の負荷分散を、いくつかのやり方で行うことができる。ストリームなどでのデータパケットの順序（受信の順序か、または個々のデータパケット内のデータにより定められる順序）に関連性がないならば、プロセッサごとに単一のキューを設けてもよい。１つのプロセッサキューが一杯になった（これをどのように決定できるかは、以下でさらに記載する）場合は、アロケータ１６により、単により多くのデータパケットが（１つまたは複数の）他のキューに伝送されるようにしてもよい。
【００９１】
サービスの品質が要求されるならば、異なる優先度について異なるキューを用いてもよい。
【００９２】
例えばストリームのデータパケットの順序が望み通りに維持された場合については、あるスキームを図５に示しており、そこでは、全体で４つのデータフロー／ストリームを受信する２つのアダプタ１２を図示している。
【００９３】
アダプタ１２は、記憶領域１８に記憶された全体で８つのキュー（ｎｏ．＃０〜＃７）にデータパケットを伝送し、それについて、２つのプロセッサ（ｎｏ．＃０，＃１）によって、キュー＃０〜＃３をプロセッサ＃０により扱い、キュー＃４〜＃７をプロセッサ＃１により扱うというスキームを用いてデキューイングをする。また、一般に、キュー＃０および＃４はストリーム＃０に用いられ、キュー＃１および＃５はストリーム＃１に用いられ、その他も同様である。
【００９４】
最初に、ストリーム＃０のデータパケットがキュー＃０に伝送されるが、このキューが次第に一杯になると、アロケータ１６は、ストリーム＃０からのデータパケットをキュー＃４に伝送し始める。しかしながら、プロセッサ＃０がキュー＃０を空にするまで、プロセッサ＃１はそうしたパケットをデキューイングし解析することができない。これを制御するために、ストリームごとに１ビットの４ビットが割り当てられ、その値により、各キューからのパケットをどのプロセッサが扱えるかを決定する。図５では、一番上のビットがストリーム＃０へのアクセスを制御しており、その値は「０」なので、これは、プロセッサ＃０がこのキューを扱うことができ、したがってキュー＃０からのパケットをデキューイングできるということを意味する。
【００９５】
下部の２ビットが「１」であり、プロセッサ＃１がストリーム＃２および＃３を取り扱うことができ、したがってキュー＃６および＃７からデキューイングできることを示しているとわかる。プロセッサが１つより多くのキューを処理することが可能なときは、ラウンドロビンや、優先度、キューの長さなどの任意の適当なやり方で、次に処理すべきキューを選択してもよい。
【００９６】
その４ビットはプロセッサにより制御され、記憶領域１８に記憶される。２つより多くのプロセッサを用いるときは、プロセッサ＃１がキューを空にしたら、プロセッサ＃１が（１つまたは複数の）対応するビットを変更するか、またはプロセッサ＃２が、プロセッサ＃１のキューが空であることを認識し、（１つまたは複数の）対応するビットを変更し、次いでその対応するキューのデキューイングを開始するように、プロセッサの順序または順番を決める。制御装置により、同じ順序を用いて、１つのキューが一杯ならばどのキューに次のデータを加えるかを決定する。
【００９７】
そして、キュー内のデータの順序を維持するために、キューを変える場合は、空である新しいキューをアロケータ１６が常に選択することになる。
【００９８】
もちろん、２つより多くのプロセッサが単一のキューを取り扱うことができれば、より多くのビットを用いて、フローごとに、どのプロセッサが現在そのフローを処理できるかを示す。
【００９９】
仮想アドレス−物理アドレス
そのセットアップを異なるシステムにより容易に適合させるためには、要求回路２８や、転送回路３０、アロケータ１６だけでなく、記憶領域１８内の、またはそれに接続された任意のデキューイング回路構成が仮想アドレス空間で動作することが好ましい。
【０１００】
所与の最大ブロックサイズだけがＤＭＡ用に割り当てられるという標準の要件のため、かつそうした割り当てられたブロックが、異なるシステムの、または動作の折に触れて同じ装置のメモリ内の異なるまたはランダムな位置に配置されることがあるという理由で、物理アドレスを用いた直接的な操作は厄介になる。したがって、仮想アドレスが好ましい。
【０１０１】
現在、全体の長さが３２ビットのアドレス（図２を参照）が２つの部分に分割され、そのうちの一方の部分が、割当て可能な最大サイズのブロック内のすべてのアドレスを指定するように構成されたいくつかのビットをもつ。この例では、最大サイズのブロックまたはセグメントのサイズは４ＭＢであり、アドレスを指定するには２２ビットが必要である。仮想アドレスと物理アドレスのこの部分は同じであり、単一のブロック／セグメント内でアドレス指定するのに用いられる。
【０１０２】
物理的なブロック／セグメントが記憶領域１８内の様々なアドレスに配置されることを避けるために、これらが異なるブロック／セグメントに配置されるかも知れないということにかかわらず、少なくとも各キューについて、仮想アドレスをすべて連続的なアドレスとして定める。したがって、その３２ビットは、複数の連続的なアドレスとして解釈されることになる。これは、さらにいくつかの４Ｍバイトのブロック／セグメントに分割してもよいが、仮想的には連続して配置される。したがって、仮想アドレスは、最初の１０ビットの部分が連続的な仮想ブロック／セグメントのうちの１つを示し、最後の２２ビットがこのブロック／セグメント内の内部アドレスを指定するものと見ることができる。
【０１０３】
物理的な実体の記憶領域１８では、セグメント／ブロック内の最後の２２ビットのアドレス指定は維持することができるが、仮想アドレスの最初の１０ビットの部分は、物理的に割り当てられたブロック／セグメントのうちの１つのアドレス指定または識別情報に単に変換される。
【０１０４】
この用途で、仮想アドレスの最初の１０ビットを、実際に割り当てられるブロック／セグメントの実際の識別情報（すなわち１０ビットのアドレス）に翻訳するために、ルックアップテーブルを設ける。このルックアップテーブル（ＬＵＴ）は、本実施形態の初期化時に設定してもよい。これを図２に示す。
【０１０５】
仮想アドレスを連続したアドレスとして定めるときに、以下で記載する読取り／書出しポインタも仮想アドレス空間内で用いることができる（これによってもやはり、例えばキューの長さの決定がより容易になる）ことに留意されたい。
【０１０６】
もちろん、さらに以下でわかるように、プロセス／プロセッサがデータ項目を記憶領域１８からデキューイングするならば、そのアドレスとサイズ（または、ふさがれるアドレス指定可能な要素の個数）を、物理アドレスまたは仮想アドレスとしてアロケータ１６に戻してもよい。いずれの場合でも、それに応じてアロケータ１６は仮想アドレスを決定し、ポインタを更新することができる。
【０１０７】
タイミング−アロケータ１６とアダプタ１２の間におけるクロックの同期
受信されたフレームについてのタイムスタンプを信頼性があり比較可能なものにするためには、アダプタ１２とアロケータ１６でクロックを同期させることが望ましい。
【０１０８】
現在、クロックの位相同期は、当技術分野で通常行われるように、転送されるデータ内に符号化されるが復元可能なクロック信号を、アロケータ１６から転送回路３０に転送されるデータとともに送信することにより得られる。図３に示すように、このクロック信号を導出し転送回路３０と要求回路２８の両方で用いるように、アダプタ１２は構成される。
【０１０９】
位相の同期をとってから、実際のクロック時間は２つのステップで同期がとられる。ステップ１では、アロケータ１６にメッセージを伝送する指示をアロケータ１６が各アダプタ１２に伝送し、次いでアロケータ１６は、そのメッセージを受信するときの全体の往復時間を決定する。ステップ２では、アロケータ１６は、その時間をアロケータ１６のクロック時間に適合させるように、アダプタ１２に指示する。
【０１１０】
より詳細には、ステップ１は、ローカルのアロケータ伝送時間のログを取りながら、アロケータ１６が個々のアダプタ１２に指示を伝送することを含む。その指示を受信すると、アダプタ１２は直ちにメッセージをアロケータ１６に伝送し、アロケータ１６は受信時刻のログを取る。その指示とメッセージの内容は重要ではない。さて、アロケータ１６は受信時刻から伝送時刻を引き算し、往復時間を導出する。この時間の半分が、アロケータ１６と関係するアダプタ１２の間におけるデータ伝送の時間遅延とみなされる。もちろん、アロケータ１６と様々なアダプタ１２の間には、異なる時間遅延がある場合もある。
【０１１１】
ステップ２では、決定された時間遅延をアロケータ１６の現在のローカル時刻に加えた値をローカルアダプタ時間に設定する指示が、アロケータ１６からアダプタ１２に伝送される。したがって、アダプタ１２がこの指示を受信すると、その間にアロケータ１６でのローカル時間が進んだ時刻に、そのローカル時間が設定されることになる。次いで、クロック信号のクロックサイクル内で、アロケータ１６とアダプタ１２のクロック時間の同期がとられる。位相またはクロックパルスも同期がとられるため、クロックは同期されたままになる。
【０１１２】
次いで、この回復されたクロックも、受信されたデータパケットのタイムスタンプの記録に用いられる。したがって、すべてのタイムスタンプは、クロックサイクル内に同期がとられる。
【０１１３】
いくつかの指示がアロケータ１６とアダプタ１２のいずれかとの間で待ち状態になることもあるため、それぞれの指示／要求に識別子が与えられる。現在、その識別子は、クロックと同期してシフトされ、折り返して先頭に戻る０と７の間（３ビット）のタイムスタンプである。したがって、アロケータ１６は、指示を送るときにそのタイムスタンプを加え、アダプタ１２は、その指示に応答するときに、その応答がどの指示に関するものかをアロケータ１６が決定できるように、その応答の中にそのタイムスタンプをコピーすることになる。
【０１１４】
もちろん、アロケータ１６に対するアダプタ１２のこの同期は、任意の個数のアダプタ１２について行ってもよい。アダプタ１２は、すべてのアダプタ１２がアロケータ１６と直接通信するスター型の構成か、リング型のトポロジーか、または１列のアダプタ１２の端部にアロケータ１６がありアダプタ１２が１つまたは複数の他のアダプタ１２を介してアロケータと通信するデイジーチェーンの構成で、アロケータ１６に接続してもよい。
【０１１５】
アロケータ１６の動作
記憶領域１８のそれぞれのキューについて、アロケータ１６は、ＲＩＦＯ（Ｒａｎｄｏｍ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）キューと、ＦＩＲＯ（Ｆｉｒｓｔ  Ｉｎ  Ｒａｎｄｏｍ  Ｏｕｔ）キューの２つのキューをもつ（図４を参照）。
【０１１６】
ＦＩＲＯキューは、すべてのアダプタ１２からの、記憶領域１８の関係するキューに関する待ち状態の要求を保持する。書出しポインタがＦＩＲＯキューの次の空いている位置を指し示す。アダプタ１２から受信された要求は、この位置で受信され与えられる。
【０１１７】
ＲＩＦＯキューは、記憶領域のキューについてのフレームがいつ出力されるべきかに関する情報を、その順序とともに保持する。ＲＩＦＯキュー内の各エントリはクロックの時点に関し、読取りポインタがＲＩＦＯキューの現在の時点を指し示す。
【０１１８】
要求が受信されると、そのタイムスタンプが導出され、ＲＩＦＯキューの対応する位置または時点に識別子が与えられる。あるアダプタ１２からの情報またはそうしたアダプタ１２での処理が他のアダプタからの情報／他のアダプタでの処理より時間がかかることがあるという理由で、この位置または時点は、同じ記憶領域のキューについての他のフレームより早い可能性があるということに留意されたい。
【０１１９】
図４では、ＦＩＲＯキューの最初のフレームの伝送時刻が次のフレームより後であることがわかる。
【０１２０】
ＲＩＦＯキューの読取りポインタはクロックサイクルごとに１回進み、読取りポインタの新しい位置に識別子が見られるならば、ＦＩＲＯキューの対応する位置がアドレス指定され、伝送指示が関係するアダプタ１２に伝送される。次いで、ＦＩＲＯキューの対応するエントリが取り除かれる（または、エンドポインタがこの位置に進む）。
【０１２１】
もちろん、ＦＩＲＯキューとＲＩＦＯキューを円形のキューとして実装してもよい。
【０１２２】
アダプタ１２とアロケータ１６の間の例えばデータ伝送による任意の時間遅延や、アダプタ１２での処理時間を考慮するために、読取りポインタは、同期をとったクロックにより定められる、フレームのタイムスタンプ（それもＦＩＲＯ内に記憶された要求内で送信される）を与えるのに用いられる実際の時点に対し、遅れた時点に関する。この点に関して、ＲＩＦＯキュー内の正しい位置にエントリが与えられると、関連した要求のタイムスタンプはもはや必要なくなり、テーブル内で場所を取らないようにするために捨てられる。
【０１２３】
したがって、読取りポインタの時刻は、３，４，５，６，７，８，９，１０などのいくつかの、またはそれより多くのクロックサイクルだけ、実際のクロックより遅れていることがある。そして、例えば時刻１２０でタイムスタンプが記録されたフレームを、ＦＩＲＯキューに送信し、時刻１２０でＲＩＦＯキューの中に入れてもよく、そこが時刻１３０でアドレス指定される（読取りポインタがその位置に進む）。
【０１２４】
すべての時刻で、記憶領域１８内のキューごとに、アロケータ１６は、アダプタ１２からの次のフレームが記憶される次のアドレスを識別する書出しポインタと、さらなる解析や送信などのためにデキューイングされるこのキューの次に記憶されるフレームのアドレスを識別する読取りポインタとの２つのポインタをもつ。新しいフレームが記憶されるときに、書出しのアドレスが関係する転送回路３０に送信され、すなわち、送信されるその物理アドレスに次の仮想アドレスが変換され、次いで転送回路３０がフレームの記憶を円滑化する。同時に、アロケータ１６が、フレームのサイズに対応する値だけ、関係する書出しポインタを増加させる。
【０１２５】
アロケータ１６がアダプタ１２にアドレスを戻し、次いでアダプタ１２がその中に自己のペースでデータパケット記憶するという理由のため、データが記憶されても書出しポインタを常に更新しなくてもよい。
【０１２６】
アダプタ１２は、記憶領域１８にデータパケットを記憶すると、それに応じてアロケータ１６に通知することになる。しかしながら、パケットＸがパケットＹの直前に記憶されるべき（アドレスがより小さい）だが、パケットＹがより迅速に記憶されたならば、アロケータ１６はこれを認識し、したがって、今キューに「穴」があるため、データパケットＸも記憶されるまで書出しポインタを更新しない。データパケットＸが記憶されると、データパケットＹの後の最初のアドレスにそのキューの書出しポインタを更新することができる。
【０１２７】
例えばプロセッサがさらに解析するフレームを１つまたは複数のキューが保持している状況では、そうしたキューのフレームの個数またはそのキューの充填レベルにより、このプロセッサがどのくらい込んでいるかが示される。これは、仮想アドレスを用いるときに、キューの書出しポインタと読取りポインタの間におけるアドレスの差により簡単に決定される。
【０１２８】
記憶領域１８からのフレームのデキューイングを、記憶領域に接続されたものなどの任意の装置またはプロセス／プロセッサにより、円滑化してもよい。記憶領域１８からフレームをデキューイングすることにより、この装置／プロセス／プロセッサは、それに対応してこのキューの読取りポインタを変化させる。
【０１２９】
一般に、フレームを記憶領域１８に加えるとアロケータ１６は書出しポインタを変化させ、フレームをデキューイングするとプロセス／プロセッサは読取りポインタを変化させる。もちろん、この情報は交換されることが望ましい。いくつかの方法やスキームがある。
【０１３０】
ある状況では、データパケット交換用にＤＭＡバス上の帯域幅を残すために、このデータをあまり頻繁に交換しないことが望ましい。この状況では、アロケータ１６によりミラーリングまたは同期が開始される。データパケットが記憶領域１８に書かれるたびに、アロケータ１６は書出しポインタを更新してもよく、それによって、読取りポインタが更新されないため、アロケータ１６には、個々のキュー（のデータフレームの個数または充填レベル）が増加するように見える。
【０１３１】
もちろん、更新された書出しポインタを時々交換してもよいが、キューのサイズが予め定められた限界を超えるまでこれらのポインタを更新しないことが好ましい。このとき、アロケータ１６は、キューの実際のサイズについての、したがって（１つまたは複数の）プロセス／プロセッサがどのくらい込んでいるかについての更新されたデータを取得するために、記憶領域１８または（１つまたは複数の）プロセス／プロセッサからの読取りポインタを更新する。
【０１３２】
ある状況では、更新された書出しポインタを（１つまたは複数の）プロセス／プロセッサが同時に受信してもよい。このやり方では、（１つまたは複数の）プロセス／プロセッサは、追加のパケットが記憶され、解析／デキューイングの準備ができたという情報がくる前にすべてのキューを空にした場合は、欠乏状態になり得る。これは、アロケータ１６で書出しポインタを更新するときに、プロセス／プロセッサまたは記憶領域１８で書出しポインタを更新することにより、避けることができる。そして、プロセス／プロセッサはキュー情報を更新し、データパケットがある限り動作し続ける。
【０１３３】
あるいは、アロケータ１６と（１つまたは複数の）プロセス／プロセッサがよりよく「通知された」状態を保つために、読取りポインタもより頻繁に更新してもよい。書出し／読取りポインタのこの同期は、バス３２が込んでいないときに、または例えば最後の同期から最大遅延が経過したときに、行うことができる。
【０１３４】
もちろん、キューまたは記憶領域１８は円形でもよく、必要があれば特定の空き領域にキューを割り当ててもよい。
【０１３５】
もちろん、１つのアダプタ１２が同じストリームに関する多数のデータフレームを続けざまに受信する場合は、その後アロケータ１６がＲＩＦＯキュー内の関連した位置で与えることになるいくつかの要求を、要求回路２８が伝送する。関連するアダプタ１２がＲＩＦＯキューの各エントリで識別される場合は、同じアダプタ１２に関し、したがってこのアダプタ１２だけに戻るＲＩＦＯ内の多数の近接したエントリを、アロケータ１６が識別してもよく、転送回路３０が、この単純な要求に基づいて、キュー（アドレスデータ）だけでなく送信されるパケットの個数も識別する。
【０１３６】
アダプタ１２を介した記憶領域１８からのデータの伝送
もちろん、記憶領域１８内の１つまたは複数のキューに記憶されたデータパケットをデキューイングし、バス３２を介して伝送し、アダプタ１２を介して出力してもよい。記憶領域１８に記憶されるデータパケットを記憶する場合と同様に、これはＤＭＡを介して行ってもよく、それによって、例えば記憶領域１８のプロセッサから介入されることなく、アダプタ１２は記憶領域１８内のデータパケットを直接読み取る。
【０１３７】
パケットをデキューイングするスキームは、記憶領域１８へのパケットの記憶について上述したものと同様である。
【０１３８】
記憶領域１８内のいくつかのキューからのデータパケットを、同じアダプタ１２を介して出力してもよい。これらは、ラウンドロビンや、優先度、または任意の他の優先順位付けなどの任意の所望のスキームを用いて決めてもよい。アダプタ１２では、異なるフローや、キュー、優先度などについて任意の個数のＴｘポートかまたはＦＩＦＯを設けてもよく、これらからのパケットを、単一のＰＨＹかまたは様々なＰＨＹを介して出力してもよい。
【０１３９】
ある状況では、記憶領域１８にデータを記憶するときと同様に、キューの読取り／書出しポインタが記憶領域１８に記憶される。同じやり方で、アダプタ１２は、読取り／書出しポインタをミラーリングし、データがあるように見える限りキューからデータをデキューイングし続けてもよい。ミラーリングは、上記のように、キューが詰まりすぎているかまたは空きすぎているように見えるときなどに、既定の最大時間間隔で行ってもよい。
【０１４０】
プロセス／プロセッサは、読取りポインタと書出しポインタを常時監視してもよく、上記のように、アダプタ１２が込みすぎているので（１つまたは複数の）関係するキューについてのデータパケットを別のキューと別のアダプタ１２に送信すべきかどうかということを決定してもよい。
【０１４１】
別の状況では、プロセッサまたはプロセスは、アダプタ１２を介してどのデータパケットまたはアドレスを出力すべきかを定めてもよく、そうしたアドレスの指示をアダプタ１２に送信してもよい。
【０１４２】
１つのやり方は、プロセスまたはプロセッサが、プロセス／プロセッサにより更新された読取り／書出しポインタの特定の組を用いて、アダプタによりデキューイングされる特定のキューにそうしたパケットをコピーし、それをアダプタ１２にミラーリングすることである。
【０１４３】
別のやり方は、データパケットをコピーしないことに着目する。この状況では、データパケットが元のキューに維持されるが、データパケットのデキューイング用に別の組の読取り／書出しポインタを設けてもよい。実際、キューの元の読取り／書出しポインタが維持されるならば、もう１つのポインタが必要になる。その追加のポインタは、解析中にプロセス／プロセッサがキューの中のどこに来たかということを、したがって、読取りポインタと書出しポインタの間のアドレスのうちのどれをデキューイングしてよいかということを示す。この追加のポインタは、プロセッサ／プロセスにより維持され、アダプタに送信されるかまたは例えばＤＭＡを用いてアダプタにより読み取られ、いつアドレスがデキューイングされたかを関係するアダプタがプロセッサ／プロセスまたは制御回路１６に通知する。
【図１】
2013513270.tif 000003
【図２】
2013513270.tif 000004
【図３】
2013513270.tif 000005
【図４】
2013513270.tif 000006
【図５】
2013513270.tif 000007
【図６】
2013513270.tif 000008
【国際調査報告】
2013513270.tif 000009
2013513270.tif 000010
2013513270.tif 000011