(57)【特許請求の範囲】
【請求項１】
メモリバッファの下部アドレスおよび上部アドレスのうちの少なくとも１つを新たな下部アドレスまたは新たな上部アドレスに変更する方法であって、
複数のメモリバッファがメモリスペース内に隣接する位置を占め、およびデータが、先入れ先出しにより、書き込みアドレスでバッファに書き込まれ、かつ読み出しアドレスで該第１のバッファから読み出されると共に、書き込みおよび読み出しアドレスが、上部アドレスに達した際に下部アドレスに戻ってラップするようになっている方法において、
書き込みアドレスが、読み出しアドレスと第１の予め決められた関係を持っているかどうかを決定するステップと、
読み出しアドレスが、新たな下部アドレスと第２の予め決められた関係を持っているかどうかを決定するステップと、
該新たな下部アドレスが該複数のバッファのうちの第２のバッファのメモリスペース内にあるかどうかを決定するステップと、
書き込みアドレスが読み出しアドレスと第１の予め決められた関係を持っており、かつ読み出しアドレスが、新たな下部アドレスと第２の予め決められた関係を持っており、および該新たな下部アドレスが該第２のバッファのメモリスペース内にない場合に、該下部アドレスを該新たな下部アドレスに変更するするステップと、を含む方法。
【請求項２】
請求項１記載の方法において、第１の予め決められた関係は、書き込みアドレスが読み出しアドレスより大きいかまたは等しいことである方法。
【請求項３】
請求項１記載の方法において、第２の予め決められた関係は、読み出しアドレスが新たな下部アドレスより大きいかまたは等しいことである方法。
【請求項４】
請求項１記載の方法において、書き込みアドレスと読み出しアドレスは、それぞれの読み出しまたは書き込み動作にしたがってインクリメントされる方法。
【請求項５】
請求項１記載の方法において、読み出しアドレスが新たな下部アドレスと第２の予め決められた関係を持っている場合、下部アドレスを読み出しアドレスに設定する方法。
【請求項６】
請求項５記載の方法において、読み出しアドレスが新たな下部アドレスと第２の予め決められた関係を持っており、バッファサイズが変更されないままになっている場合、上部アドレスを、読み出しアドレスと新たな上部アドレスおよび新たな下部アドレスの差との和に設定する方法。
【請求項７】
メモリバッファの下部アドレスおよび上部アドレスのうちの少なくとも１つを新たな下部アドレスまたは新たな上部アドレスに変更する方法であって、データが、先入れ先出しにより、書き込みアドレスでバッファに書き込まれかつ読み出しアドレスでバッファから読み出されると共に、書き込みおよび読み出しアドレスが、上部アドレスに達したことに基づいて下部アドレスに戻ってラップするようになっている方法において、
書き込みアドレスが、読み出しアドレスと第１の予め決められた関係を持っているかどうかを決定するステップと、
書き込みアドレスが、新たな上部アドレスと第２の予め決められた関係を持っているかどうかを決定するステップと、
書き込みアドレスが読み出しアドレスと第１の予め決められた関係を持っており、かつ書き込みアドレスが、新たな上部アドレスと第２の予め決められた関係を持っている場合、上部アドレスを新たな上部アドレスに設定するステップと、を含む方法。
【請求項８】
請求項７記載の方法において、第１の予め決められた関係は、書き込みアドレスが読み出しアドレスより大きいかまたは等しいことである方法。
【請求項９】
請求項７記載の方法において、第２の予め決められた関係は、書き込みアドレスが新たな上部アドレスより大きいかまたは等しいことである方法。
【請求項１０】
請求項７記載の方法において、書き込みアドレスと読み出しアドレスは、それぞれの読み出しまたは書き込み動作にしたがってインクリメントされる方法。
【請求項１１】
各々が下部格納位置と上部格納位置間の複数の格納位置を含む、複数のバッファを含むメモリスペースにおいて、データが、先入れ先出しにより、書き込みアドレスでバッファに書き込まれ、かつ読み出しアドレスでバッファから読み出されると共に、書き込みおよび読み出しアドレスが、上部アドレスに達した際に下部アドレスに戻ってラップするようになっており、複数のバッファのうちの１つ以上に割り当てられた格納位置を再配置する方法であって、
下部格納位置および上部格納位置のうちの少なくとも１つに隣接する空き格納位置の利用可能性を決定するステップと、
該書き込みアドレスが該読み出しアドレスより大きいかまたは等しいことに応答して、および該読み出しアドレスが新たな下部格納位置のアドレスより大きいかまたは等しいことに応答して、該複数のバッファのうちの１つのバッファの下部格納位置を、利用可能な空きの格納位置における新たな下部格納位置に移動するステップと、を含む方法。
【請求項１２】
請求項１１記載の方法において、複数のバッファは隣接しており、複数のバッファのうちの少なくとも１つのサイズは、空き格納位置を作り出すために減少される方法。
【請求項１３】
請求項１１記載の方法において、複数のバッファのうちの少なくとも２つは、空き格納位置によって分離されている方法。
【請求項１４】
請求項１１記載の方法において、データは、複数のバッファのうちの各バッファから読み出されかつ各バッファに書き込まれ、データが複数のバッファのうちの１つのバッファの格納位置から読み出された後、該格納位置は空き格納位置とみなされる方法。
【請求項１５】
請求項１１記載の方法において、下部格納位置と読み出しアドレス間に位置している複数のバッファのうちの１つのバッファの格納位置は、空き格納位置とみなされる方法。
【請求項１６】
請求項１１記載の方法において、下部格納位置および上部格納位置は、複数の隣接する空き格納位置を取り囲むように、共に変更される方法。
【請求項１７】
請求項１１記載の方法において、複数の格納バッファのうちの１つのバッファの上部格納位置は、新たな上部格納位置に移動され、前記方法はさらに、
バッファの書き込みアドレスが、その読み出しアドレスと第１の予め決められた関係を持っているかどうかを決定し、
バッファの読み出しアドレスが、新たな上部アドレスと第２の予め決められた関係を持っているかどうかを決定し、
書き込みアドレスが読み出しアドレスと第１の予め決められた関係を持っており、かつ書き込みアドレスが、新たな上部アドレスと第２の予め決められた関係を持っている場合、上部アドレスを新たな上部アドレスに設定することを含む方法。
【請求項１８】
請求項１７記載の方法において、第１の予め決められた関係は、書き込みアドレスが読み出しアドレスより大きいかまたは等しいことである方法。
【請求項１９】
請求項１７記載の方法において、第２の予め決められた関係は、書き込みアドレスが新たな上部アドレスより大きいかまたは等しいことである方法。
【請求項２０】
各々のバッファが下部アドレスと上部アドレスの間の複数のメモリ位置から成る複数のメモリバッファから成るメモリシステムであって、データが、先入れ先出しにより、書き込みアドレスでバッファに書き込まれかつ読み出しアドレスでバッファから読み出されると共に、書き込みおよび読み出しアドレスが、上部アドレスに達した際に下部アドレスに戻ってラップするメモリシステムにおいて、メモリバッファをリサイズするための方法において、
第１の複数のメモリ位置から成る第１のメモリバッファを第２の複数のメモリ位置にリサイズするステップであって、該書き込みアドレスが該読み出しアドレスよりも大きい又は等しい場合、および該読み出しアドレスが第２の下部アドレスよりも大きい又は等しい場合に第１の下部アドレスを第２の下部アドレスに変更する処理、又は該書き込みアドレスが該読み出しアドレスよりも大きいか又は等しく、かつ該書き込みアドレスが該第２の上部アドレスよりも小さいか又は等しい場合に第１の上部アドレスを第２の上部アドレスに変更する処理から成るステップと、
該第２のメモリバッファが該第１の複数のメモリ位置の１つもしくは２つ以上から成るように第２のメモリバッファをリサイズするステップと、を含む方法。
【請求項２１】
各々のバッファが下部アドレスと上部アドレスの間の複数のメモリ位置から成る複数のメモリバッファから成るメモリシステムであって、データが、先入れ先出しにより、書き込みアドレスでバッファに書き込まれかつ読み出しアドレスでバッファから読み出されると共に、書き込みおよび読み出しアドレスが、上部アドレスに達した際に下部アドレスに戻ってラップするメモリシステムにおいて、メモリバッファをリサイズするためのコントローラにおいて、
該書き込みアドレスが該読み出しアドレスよりも大きい又は等しい場合、および該読み出しアドレスが第２の下部アドレスよりも大きい又は等しい場合に第１の下部アドレスを第２の下部アドレスに変更することによって、又は該書き込みアドレスが該読み出しアドレスよりも大きいか又は等しく、かつ該書き込みアドレスが該第２の上部アドレスよりも小さいか又は等しい場合に第１の上部アドレスを第２の上部アドレスに変更することによって、第１の複数のメモリ位置から成る第１のメモリバッファを第２の複数のメモリ位置にリサイズするコントローラ要素を備え、このコントローラ素子は、該第２のメモリバッファが該第１の複数のメモリ位置の１つもしくは２つ以上から成るように第２のメモリバッファをリサイズするよう動作するコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にバッファ内のデータ格納に関し、特に、バッファに格納されたデータの損失なしに能動バッファを分割する方法および装置に関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
バッファ格納装置は、コンピュータシステムやデータネットワークにおける常用の構成要素である。コンピュータシステムは、リソースによるサービス待機中は、データをバッファしている。たとえば、プリンタは、プロセッサより提供されるのと同一の速度でデータを処理することができないので、データは、プリンタがそれを処理する準備ができるまでバッファされている。データネットワークは、ネットワークプロセッサへのアクセスを待っているとき、データを保持するバッファを必要とする。たとえば、ネットワークスイッチは、典型的に、各入力ライン上に入力バッファを含み、かつ各出力ライン上に出力バッファを含み、それらの間には、スイッチファブリックが配置されている。入力バッファは、パケットが入力ラインに到着して、スイッチによるサービスを争っている間、パケットを格納する。入力バッファサイズは、スイッチ能力とデータネットワークの特性とに依存する。しかし、いったん入力バッファサイズが確立されると、入力バッファサイズは、特にシステムの動作中には、容易に変更されない。同様に、出力バッファは、スイッチからの出力データトラフィックを、出力ラインへのアクセスを争っている間格納する。これらの状況は、データトラフィックが著しく高レベルになる所で発生することがあり、この時、入力または出力バッファは、１つまたはそれ以上のパケットを落とす必要がある。これは、落とされたパケットをデータソースから再送信しなければならないので、ネットワーク効率が悪くなる。
【０００３】
典型的には、ネットワークプロセッサと関連づけられるバッファは、ネットワークプロセッサ内で１つのメモリスペースを論理的に分割することにより実行される。このメモリスペースは、複数の論理バッファエリアを形成するように分割され、次いで、入力バッファや出力バッファのような要求される役割に役立つように割り当てられる。いくつかのアプリケーションでは、これらのバッファは、先入れ先出し（ＦＩＦＯ）によって動作し、メモリ位置がリニアな配列になっている。ＦＩＦＯバッファにおいては、ネットワークプロセッサに転送される次のパケットまたはブロックは、バッファに最初に到着したパケットになる。従来技術によれば、ＦＩＦＯバッファは、データがバッファ内にある間リサイズできない。したがって、データトラフィックは、バッファをリサイズするために止めなければならない。
【０００４】
動的バッファ再分割またはリサイジングが可能な一般的な従来技術のバッファ格納技術は、論理バッファからなるメモリ格納スペースを識別するリンク一覧表を用いる。メモリスペース全体は、等サイズの割り当てユニットに分割され、各割り当てユニットは、そのメモリスペース内の最初および最後のアドレスにしたがって唯一的に識別される。割り当てマネージャーは、割り当てユニットを個々の論理バッファに割り当てる。ほとんどの論理バッファは、１つ以上の割り当てユニットからなり、したがって、割り当てマネージャーは、各バッファ内の割り当てユニット一覧表を作成する。さらに、一覧表は、割り当てマネージャー内でリンクされ、論理バッファの割り当てユニットの整理されたチェインを形成する。リンクされた一連表が作成されると、割り当てマネージャーは、論理バッファに割り当てユニットを追加または削除し、その結果リンクされた一覧表を変更することによって論理バッファサイズを変えるフレキシビリティを提供する。新たな割り当てユニットがリンクされた一覧表に追加された場合は、以前に最後にリンクされた一覧表の登録事項は、新たな割り当てユニットにリンクされる必要がある。データは、論理バッファから伝送される場合、常に、（ＦＩＦＯバッファの定義にしたがって）最初のバッファ位置から伝送される。この割り当てユニットは、リンクされた一覧表から削除され、次いで、バッファの次の最初の割り当てユニットが、削除されたユニットがリンクされていた割り当てユニットになる。
【０００５】
リンクされた一覧表の欠点は、リンク一覧表自体を格納するのにさらに格納スペースが必要なことである。論理バッファスペースへのアクセスは、そのバッファのリンクされた一覧表にしたがうためにアクセス用デバイスを必要とするので、ある程度の遅延時間が、論理バッファから読み出したり論理バッファに書き込んだりする際に固有に存在する。長いリンクされた一覧表を伴う論理バッファへの多数のアクセスがある場合、リンクされた一覧表を探求するのに時間がかかり、したがって望ましいアクセス速度が達成できないので、システム性能は、過度に劣化することがある。また、一覧表にアクセスするのに必要な時間は、バッファ割り当てユニットが変更されたときに、リンクされた一覧表への登録を適時に追加したりそれから削除したりするのを困難にさせる。
【０００６】
バッファ管理の他の従来方法は、単に、各論理バッファの専用格納エリアを使用することである。格納スペースは、予想されるバッファ負荷に適合するサイズにされ、動作中は拡張したり縮小したりすることができない。この技術は、システム構成にかなりのコストとスペース要求を加えることがある。また、いくつかの論理バッファは、かなり頻繁に使用されないことがあり、さらに、バッファは、データがバッファ内にある間リサイズすることができないので、この技術は、メモリ格納装置の効率的な使用を提供しない。
【０００７】
【課題を解決するための手段】
本発明は、メモリスペースからなる１つ以上の論理バッファを再配置し、リサイズする（再分割する、とも呼ばれる）技術を提供する。バッファは、一般に、異なるサイズからなり、メモリスペース内で隣接している。２つの論理バッファ間に空きメモリ位置がない場合は、バッファの１つ以上が位置を変えさせられ、その結果、他のバッファが空いた位置に拡張される。論理バッファ拡張は、バッファ内の上部メモリ位置をより高いメモリ位置に上げるか、または下部メモリ位置をより低いメモリ位置に下げるかのいずれかを含むことができ、その両方が、隣接する空きメモリスペースの利用可能性を要求する。また、上部および下部メモリ位置の両方とも、上げる／下げることができる。論理バッファ全体は、メモリスペース内に新たな上部および下部位置を割り当てることによって、メモリスペース内の異なるエリアに移動させることができる。しかしながら、メモリスペース内のバッファの順序は、変更することができない。本質的に、バッファは、両端部で空きスペースを含むように拡張するかまたは両端部で空きスペースを解放するように縮小することができる。
【０００８】
バッファは、先入れ先出し（ＦＩＦＯ）によって動作し、読み出しアドレスポインタは、データが読み出されるべき次のメモリ位置を示し、書き込みアドレスポインタは、データが書き込まれるべき次のメモリ位置を示す。読み出しおよび書き込みアドレスポインタは、各々の動作が終了した後、１つのメモリ位置で実行される。ポインタは、上部バッファメモリ位置に到達した時、下部メモリ位置にラップバックする。
【０００９】
本発明にしたがってバッファを移動またはリサイズするために、（以下に説明されるように）いくつかの条件が満足されると、下部および上部メモリアドレスは、要求されたもしくは新たな下部および／または要求されたもしくは新たな上部アドレスに変更され、論理バッファの移動つまりリサイジングが有効になる。いくつかの可能なシナリオが起こり得る。上部アドレスが、現在の上部アドレスを越えるメモリスペースを含むように変更された場合、論理バッファは、上方に拡張する。読み出しおよび書き込みポインタは、インクリメントするにつれて、以前の上部メモリアドレスを越えて新たな上部メモリアドレスに移動し、その後、下部位置にラップバックする。下部アドレスのみが、下部位置の下に隣接するメモリ位置の追加により変更された場合は、論理バッファは、下方に拡張する。読み出しおよび書き込みポインタは、上部メモリ位置に到達すると、新たな下部位置にラップバックする。隣接するメモリ位置がバッファに上下両方に追加されるように、上部および下部メモリ位置の両方が変更された場合は、上述のように両プロセスが実行される。したがって、本発明の教示によれば、論理バッファは、上部もしくは下部メモリ位置のどちらかから、または両メモリ位置から拡張あるいは縮小することができる。上または下または両方のこれらの移動プロセスの間、バッファ内のデータは違う格納位置に移動されないことに注意されたい。上部および下部メモリ位置、すなわちバッファの境界は拡張されて（または縮小されて）、より多いデータの格納に適合するようにバッファサイズを増大させる。したがって、より多くの格納位置が新たなデータを格納するのに利用可能になるが、既存のバッファデータは移動しない。
【００１０】
本発明は、本発明の説明と添付図面に鑑み考察される場合に、より容易に理解されると共に、そのさらなる利点と効用がより容易に明らかになる。
【００１１】
【発明の実施の形態】
データネットワークアプリケーションで使用される場合、論理バッファは、格納されたデータをサービスするネットワークプロセッサの利用可能性のために待機中のデータを格納する。たとえば、データは、適当な出力ポートにデータを転送するためにスイッチファブリックを待ち受けている間、ネットワークスイッチに格納される。バッファは、関連づけられるポートの出力データ速度に基づいたサイズにすることができる。一般に、バッファサイズと、このサイズの動的変更は、バッファアプリケーションによって決定される。第２のバッファに到着するデータの速度の２倍で到着するデータを格納する第１のバッファは、一般に、第２のバッファのサイズの２倍になっている。
【００１２】
いくつかのアプリケーションにおいては、１つまたはそれ以上の論理バッファのサイズを拡張することによって、メモリスペースを動的に再分割（すなわち、リサイズまたは再配置）する必要がある。これは、入力ラインに現れるパケットの増加数に対してより多くのデータ格納スペースを提供することが要求される。また、バッファサイズの変更は、出力線のデータフロー遅延を制限するために出力ポートの媒体速度の変更を考慮することが要求される。たとえば、媒体ポートが、ポート線が処理することができるよりも多くのデータが伝送されていることを示すフロー制御を主張している場合は、伝送用プロセッサは、そのポートにデータを伝送するのを停止すべきである。しかし、データ伝送を停止するために伝送デバイスに信号を送るのに、有限時間が必要であり、したがって、ポートにおけるデータバッファは、ポートがフロー制御を主張した後に伝送されるこの追加のデータに適合することができなければならない。ポートバッファが、この追加のデータフローを格納するためにリサイズされると、バッファに格納されるデータの損失がないのが好適である。
【００１３】
各バッファは、先入れ先出しデバイスとして動作し、２つのアドレスで定義される。第１のアドレスは、バッファのための下部すなわち最も低いメモリアドレスを定義し、第２のアドレスは、上部すなわち最も高いメモリエレメントを定義する。理解を簡単かつ容易にするために、上部および下部バッファアドレスは、論理バッファ参照符号の下付き文字のあるアルファベット文字ＢおよびＴで呼ばれる。たとえば、Ｂ20は、論理バッファ２０の下部メモリアドレスである。当業者は、一般に、メモリアドレス位置は２進数方式を使用していることが分かっている。
【００１４】
典型的には、メモリスペースは、複数の論理バッファに分離され、（ハードウェアまたはソフトウェアで具体化される）コントローラは、各バッファの上部および下部メモリアドレスに基づいて各バッファの位置を追跡する。また、コントローラは、バッファのサイズを変更する必要がある環境を確認し、サイズを元通りに簡単に変更するのに利用できる十分な隣接メモリスペースがあるか否かを判定する。本発明によれば、十分な隣接スペースが利用できない場合は、隣接バッファを移動または拡張／縮小させて、バッファを拡張するための空いたメモリスペースを作り出すことができる。かけがえとして、当該バッファまたは隣接バッファは、十分な未使用メモリ位置が利用できるメモリスペース内の他の位置に移動することができる。本発明は、より大きいバッファの必要性を作り出す環境に適合するのに必要なものとして、データ損失なしに、論理バッファを再配置、拡張および縮小することを提供する。
【００１５】
本発明によるリサイズ可能な循環バッファは、バッファの端部のデータラップアラウンドを持つことにより実行される。詳細には、バッファの下部位置が書き込まれた場合、書き込むべき次の位置は、バッファの上部位置である。相応じて、バッファの下部登録事項が読み出された場合、読み出されるべき次の登録事項は、上部または最初のアドレスである。バッファは、読み出しおよび書き込みアドレスが等しい時、空である。バッファは、次の書き込みアドレスが現在の読み出しアドレスに等しい場合、満たされている。バッファは、書き込みアドレスが読み出しアドレスより小さいまたは読み出しアドレスの後に存在する時は必ず、“ラップされて”いる。書き込みアドレス（先頭）が読み出しアドレス（後尾）の前に存在する場合は、バッファは“ラップされて”いない。“ラップされている”とは、基本的に、バッファ内の有効データがバッファの最後のアドレスを含み、そして、最初のアドレスに“ラップしている”ことを意味している。本発明により上部および下部アドレスを変更するための基本条件は、データが“ラップされて”いない時、またバッファ内に現在あるデータが新たなアドレスのいずれも越えて延長していない時を検出することである（要するに、新たなアドレスは、“ラップされて”いる状態を引き起こさないだろうということを証明している。）
【００１６】
図１のメモリスペース１０は、図示のように論理バッファ２０，２２，２４および２６からなり、それらは、対応する上部および下部アドレスを有する。この例では、論理バッファ２２および２４間と、論理バッファ２４および２６間に割り当てられていないメモリ位置があることに注目されたい。本発明の教示は、後者の場合に、空きスペースが拡張すべきバッファのためにまず利用可能になされる限り、論理バッファ間に割り当てられていないメモリ位置があるメモリスペースと、論理バッファが隣接しているメモリスペースとに適用することができる。コントローラ（図１には示されていない）は、初期下部および上部アドレス値を論理バッファ２０，２２，２４および２６に割り当てることが知られている。初期アドレス値が割り当てられると、本発明の方法および装置は、１つ以上の論理バッファがより多くのメモリ位置を必要とする場合に、上部および下部アドレスを動的に変更するように動作する。
【００１７】
各バッファ用の上部および下部アドレスに加えて、読み出しアドレスまたは読み出しポインタ、すなわちデータが処理のために読み出されるアドレスと、データがバッファに書き込まれる書き込みアドレスまたは書き込みポインタがある。たとえば、あるアプリケーションでは、読み出しアドレスから取り出されたデータは、正しい出力ポートに切り替えるためのスイッチファブリックに入力される。読み出しアドレスポインタは、各読み出し動作後、アドレススペースを１つインクリメントする。読み出しアドレスは、論理バッファの上部アドレス（ＴXX）と等しい場合、下部アドレス（ＢXX）にラップバックする。読み出しアドレスは、ここでは、論理バッファ参照符号が下付き文字の形で付いている文字Ｒで示される。書き込みアドレス（または、書き込みポインタ）は、同様に、論理バッファを表す下付き文字が付いている“Ｗ”で示される。読み出しアドレスと同様に、書き込みアドレスも、各書き込み動作後、メモリ位置を１つインクリメントし、次いで、論理バッファの最も高いメモリアドレスに達した後、最も低いアドレスにラップバックする。
【００１８】
典型的に、読み出しおよび書き込みプロセスは、論理バッファがオーバーフローしないように、同一速度で起こる。また、バッファからの読み出しとバッファへの書き込みのプロセスは、それぞれ、バッファを枯渇させることおよび充填することと呼ばれる。好適には、本発明の教示による循環バッファは、オーバーフローすべきではない。これは、充填速度が枯渇速度より小さいかまたは等しいことを保証することによりオーバーフローを防ぐことで、またはオーバーフローを避ける環境を強いる、たとえばオーバーフローを引き起こすどんな書き込み動作も放棄することで達成される。
【００１９】
これらの論理バッファのための従来のアプリケーションにおいては、書き込みプロセスは、読み出しプロセスの前に起こる。したがって、書き込みアドレスは先頭アドレスと呼ばれ、読み出しアドレスは後尾アドレスと呼ばれる。一般に、先頭アドレスは、後尾アドレスより上にある。さもなければ、バッファは、ラップされているとみなされ、本発明によりリサイズまたは再配置されて、その瞬間は実行されない。しかし、データが充填または枯渇している限り、バッファがラップされず、したがって、本発明によりリサイズされない時間がある。たとえば、書き込みアドレスポインタがアドレス１，２および３によりインクリメントするにつれて、データは、論理バッファのメモリ位置１，２，および３に書き込まれる。読み出しプロセスは、書き込みプロセスの後に続く。プロセッサがバッファからのデータを要求するにしたがって、データは、ＦＩＦＯプロセスを実行するべくアドレス位置１，２および３からその順番に読み出される。データがある位置から読み出されて処理されると、そのメモリ位置は、空とみなされる。すなわち、読み出しプロセスはその位置にデータを保持していたが、データはすでに読み出されて処理されているので、もはや有効ではない。したがって、本発明にしたがって、これらの“空の”メモリ位置を再使用することができるか、または、論理バッファをリサイズし、これらの位置をバッファから削除することができる。
【００２０】
本発明の説明を簡単にするために、この時点で、本発明は、１個のバッファと、このバッファを、バッファの下部メモリ位置、バッファの上部メモリ位置または上部および下部メモリ位置の両方のための新たなアドレスで決定される新たな位置に移動またはリサイズするプロセスとに関して考察される。当業者は、これらの教示は、複数のバッファに適用することができることが分かる。図２Ａ，２Ｂ，２Ｃ，２Ｄおよび２Ｅに示されるように、論理バッファを本発明の教示により移動および／またはリサイズすることができるいくつかの異なるシナリオがある。図２Ａでは、論理バッファ２０の上部および下部アドレスの両方が、ブロックサイズを変えないままで、メモリスペース内のより高い位置に移動される。これは、下部および上部メモリ位置アドレスＢ20およびＴ20の両方に、同じ値“１”を加算することによって達成される。図２Ｂは、論理バッファ２０が、より低い下部メモリ位置Ｂ20-mを含むより低いメモリ位置に拡張され、上部アドレス位置が固定されたままであるシナリオを示す。図２Ｃでは、論理バッファは、メモリ位置アドレスＴ20+nまで上方に拡張されるが、下部アドレスは変更されない。図２Ｄでは、上部アドレスはＴ20+pまで移動し、下部メモリ位置はＢ20+qまで移動している。論理バッファサイズは、（ｐ−ｑ）が（Ｔ20−Ｂ20）より小さいので、縮小している。図２Ｄに示されない他のシナリオでは、バッファ２０の上端は位置Ｔ20に留まり、下端はＢ20+qに移動する。図２Ｅでは、論理バッファは、Ｂ20-sの下部位置とＴ20+tの上部アドレスに両方向に拡張する。
【００２１】
図３は、バッファサイズを変更することなく、図２Ａに示されるように論理バッファを上方に移動させるステップを示すフローチャートである。この宇Ｈろーチャート入力パラメータは、論理バッファ２０の現在の下部および上部メモリ入りを含む。パラメータｎｅｗ＿ｂａｓｅおよびｎｅｗ＿ｔｏｐは、論理バッファが移動されるように要求されたメモリ位置である。論理バッファのいくつかの条件は、フローチャートに示されているように、ｎｅｗ＿ｂａｓｅおよびｎｅｗ＿ｔｏｐ位置の両方への論理バッファの移動を防ぐ。
【００２２】
バッファ２０を上方に移動させるためには、まず、論理バッファ２０の書き込みアドレスが読み出しアドレスより大きいか小さいかを決定する必要がある。一般に、動作中、書き込みアドレスは読み出しアドレスより大きい。なぜなら、データは、バッファから読み出される前に、まずバッファに書き込まれるからである。読み出しアドレスが書き込みアドレスより大きければ、論理バッファは、ラップされた状態にあり、ラップされない状態になるまで移動させることができない。したがって、この決定は、図５の決定ステップ５０に示されるように行われる。その結果が否定的ならば、処理は、論理バッファがラップされない状態になるまで、決定ステップ５０に戻って継続する。データが書き込まれたり読み出されたりするとき、論理バッファは使用継続中なので、ラップされる状態は、延長期間の間普及しない。
【００２３】
ラップされない場合、決定ステップ５０からの結果は肯定となり、処理はステップ５２に進み、論理バッファ２０の下部アドレスが、要求されたｎｅｗ＿ｂａｓｅメモリ位置に等しく設定される。
【００２４】
決定ステップ５４では、読み出しアドレスが、ｎｅｗ＿ｂａｓｅ位置と比較される。読み出しアドレスがｎｅｗ＿ｂａｓｅメモリ位置より大きければ、論理バッファの下部位置は、データ損失なしに上方に移動することができる。なぜなら、下部位置と読み出しポインタ間のメモリ位置は、すでに読み出されており、もはや必要とされないからである。決定ステップ５０は、書き込みアドレスが読み出しアドレスの前にあることをすでに保証したことを思い出されたい。しかし、ｎｅｗ＿ｂａｓｅ位置が読み出しアドレスより上にあれば、ｎｅｗ＿ｂａｓｅ位置と読み出しアドレス間のそのメモリ位置に格納されているデータは、バッファが移動されると失われてしまうだろう。読み出しアドレスとｎｅｗ＿ｂａｓｅアドレスの関係は、決定ステップ５４で決定され、そのシナリオは図４Ａに示され、ここでは、読み出しアドレスポインタは、ｎｅｗ＿ｂａｓｅアドレスより下に示されている。論理バッファがこれらの条件の下に移動された場合、下部アドレスは、現在の位置からｎｅｗ＿ｂａｓｅ位置へ移動し、領域５８にあるデータは、図４Ｂに示されるように読み出しポインタが現在論理バッファ２０の外側にあるので失われることに注目されたい。バッファコントローラがこれを悟ると、読み出しポインタは、現在ｎｅｗ＿ｂａｓｅアドレスになっているバッファ２０内の最も近い能動メモリ位置に移動し、領域５８内のデータが失われることになる。
【００２５】
読み出しアドレスが、ｎｅｗ＿ｂａｓｅメモリ位置より下にある、つまりより小さい（決定ステップ５４の結果が否定である）場合には、プロセスは、ステップ６４に進み、ここでは、下部メモリ位置は、読み出しアドレスと等しく設定され、したがって、バッファが移動された時に、新たな下部アドレスが読み出しポインタより上にあるという状態が避けられる。図５を参照されたい。下部メモリ位置が確立されると、上部位置は、それに応じてステップ６６で移動される。論理バッファサイズを保持するために、上部位置は、読み出しアドレスプラスｎｅｗ＿ｔｏｐ値とｎｅｗ＿ｂａｓｅ値の差に等しく設定される。他の実施例では、バッファサイズを維持する必要がなく、したがって、ｎｅｗ＿ｔｏｐアドレスを、要求通りに決定することができる。ステップ６８で、論理バッファ２０の再配置は終了し、読み出しおよび書き込み動作が継続する。
【００２６】
読み出しアドレスポインタがｎｅｗ＿ｂａｓｅ値より上にある場合は、決定ブロック５４からの結果は肯定になり、処理はステップ６０に進み、ここでは、論理バッファ２０の下部アドレスは、ｎｅｗ＿ｂａｓｅ値に再配置される。これを達成するために、ステップ６０で、下部アドレスは、要求されたｎｅｗ＿ｂａｓｅメモリアドレスに等しく設定される。ステップ６２で、上部メモリアドレスは、要求されたｎｅｗ＿ｔｏｐアドレスに変更される。処理はステップ６８に進み、ここでは、データが、論理バッファ２０に書き込まれたり論理バッファ２０から読み出されたりする。読み出しおよび書き込みアドレスポインタは共に、古い上部アドレスに達するまで、古いバッファメモリ位置によりインクリメントし続ける。この時点で、それらは、ｎｅｗ＿ｂａｓｅ位置にラップされ、そして、ｎｅｗ＿ｔｏｐ位置に達するまでバッファアドレスによりインクリメントし続け、その時点で、ｎｅｗ＿ｂａｓｅ位置にラップバックされる。
【００２７】
図６は、図２Ｂ，２Ｃおよび２Ｄに示されるように、論理バッファを一方向または両方向にリサイズするプロセスを示すソフトウェアフローチャートである。値ｎｅｗ＿ｔｏｐおよびｎｅｗ＿ｂａｓｅは、論理バッファが移動されるべき要求された位置である。このプロセスは、決定ステップ８４で始まり、ここで、書き込みアドレスは読み出しアドレスと比較され、前者が後者より大きいかまたは等しい（すなわち、バッファがラップされている）かどうかが決定され、次いで、書き込みアドレスは、ｎｅｗ＿ｔｏｐアドレスと比較され、前者が後者より大きいかまたは等しいかが決定される。両決定の結果が肯定ならば、バッファの上部アドレスを調整するのが安全である。したがって、ステップ８６で、バッファのアドレスは、ｎｅｗ＿ｔｏｐ値に等しく設定される。
【００２８】
決定ステップ８４からの結果が否定ならば、プロセスは決定ステップ８８に進み、ここで、書き込みアドレスが読み出しアドレスと比較され、次いで、読み出しアドレスがｎｅｗ＿ｂａｓｅアドレスと比較される。書き込みアドレスが読み出しアドレスより大きいかまたは等しく、読み出しアドレスがｎｅｗ＿ｂａｓｅアドレスより大きいかまたは等しい場合は、下部アドレスを移動させるのが安全である。したがって、ステップ９０で、下部アドレスはｎｅｗ＿ｂａｓｅ値に等しく設定され、バッファ移動は終了する。決定ステップ８８からの否定的な結果は、処理をフローチャートのスタートに戻す。
【００２９】
図６に示されるように上部および下部アドレスのこれらの変更は、いずれの順番でも発生させることができる。詳細には、バッファが上方へ移動しているならば、上部調整は、下部調整の前に発生することがある（すなわち、上部を拡張し、道を外れて移動させるためにデータを待ち受け、次いで下部を上方へ移動させる）。反対に、バッファが下方に移動されることになる場合は、下部が拡張され、残りのデータが新たな下部アドレスの近くになるまで（したがって、バッファの上端が空になるまで）、バッファ外に移動させるためにデータを待ち受け、次いで、上部を下方へ移動させる。
【００３０】
図１に関して説明したように、典型的には、メモリスペース１０を構成する複数の論理バッファがある。論理バッファ、たとえば論理バッファ２０および２２が隣接している場合は、図２Ｃに示され図６のフローチャートで説明されたように論理バッファ２０を上方に拡張するために、論理バッファ２２を移動させる、つまり、論理バッファ２２をより高い下部メモリ位置に少なくとも移動させて、そこに移動させるためのスペースを論理バッファ２０に提供することが、まず必要である。しかしながら、論理バッファ２４を上方に拡張して、他の論理バッファのどれも移動させる必要なしに、位置Ｔ24およびＢ26間のメモリ位置を占有することができる。したがって、メモリスペース内の論理バッファの拡張および移動は、同じメモリスペースを占有する他のバッファの位置およびサイズを考えながら実行しなければならない。バッファコントローラは、個々の論理バッファを管理して、各論理バッファおよび利用可能なメモリリソースの予想されるデータ格納必要条件に基づき各々の論理バッファを最適化する必要がある。
【００３１】
このようなコントローラの一例は図７に示され、ここでは、コントローラ１００は、各論理バッファのために下部および上部メモリ位置を確立するために、メモリスペース１０に入力信号を供給する。また、信号は、ｎｅｗ＿ｔｏｐおよびｎｅｗ＿ｂａｓｅ値とバッファ番号も含む。バッファモニタ１０２は、メモリスペース１０に応じて、その中の多数のバッファの動作を監視し、予め決められたアルゴリズムに基づいて、特定のバッファのサイズを増大させるべきか減少させるべきかを決定する。たとえば、バッファが、その利用可能な格納位置を頻繁に枯渇させ、それによりデータパケットを失い、したがって、ソースから再伝送されなければならない場合は、バッファモニタ１０２は、コントローラ１００に指示して、メモリスぺーＳ１０内のメモリ位置を再配置し、バッファのための追加のメモリ位置を提供する。この再配置は、本発明にしたがって、上部メモリ位置、下部メモリ位置、または上部および下部メモリ位置の両方を拡張することによって、あるいは、メモリスペース１０の異なるエリアにバッファを再配置してそこの追加のメモリ位置を割り当てることによって達成される。また、バッファモニタ１０２は、メモリスペース１０内の論理バッファのサイズを決定する際に有効なシステム利用情報を提供する１つ以上のシステム信号に応答する。たとえば、新しい高速デバイスがシステムに追加され、システムリソースの１つに基づくサービスを主張する場合は、バッファオーバーフローとデータ損失を避けるために新デバイスを支援するバッファのサイズを増大させる必要がある。
【００３２】
他の実施例では、本発明の教示は、図３および図６のフローチャートにしたがうソフトウェアで実行することができる。ソフトウェアプログラムは、メモリスペース１０内のバッファ位置を制御する専用プロセッサで実行することができる。かけがえとして、ソフトウェアプログラムは、メモリスペースが関連しているシステムと関連するプロセッサによる時分割で実行することができる。
【図面の簡単な説明】
【図１】複数の論理バッファに分離されたメモリスペースを示す図である。
【図２Ａ】リサイジングおよび再配置前および後の論理バッファを示す図である。
【図２Ｂ】リサイジングおよび再配置前および後の論理バッファを示す図である。
【図２Ｃ】リサイジングおよび再配置前および後の論理バッファを示す図である。
【図２Ｄ】リサイジングおよび再配置前および後の論理バッファを示す図である。
【図２Ｅ】リサイジングおよび再配置前および後の論理バッファを示す図である。
【図３】本発明の教示によるバッファリサイジングプロセスのフローチャートを示す図である。
【図４】４Ａおよび４Ｂは、リサイジングおよび／または再配置前および後の論理バッファ位置を示す図である。
【図５】リサイジングおよび／または再配置前および後の論理バッファ位置を示す図である。
【図６】本発明の教示によるバッファ再配置プロセスのフローチャートを示す図である。
【図７】メモリスペースと、メモリスペース内の論理バッファを制御する構成要素を示すブロック図である。
【図１】
0004504615.tif 000002
【図２Ａ】
0004504615.tif 000003
【図２Ｂ】
0004504615.tif 000004
【図２Ｃ】
0004504615.tif 000005
【図２Ｄ】
0004504615.tif 000006
【図２Ｅ】
0004504615.tif 000007
【図３】
0004504615.tif 000008
【図４】
0004504615.tif 000009
【図５】
0004504615.tif 000010
【図６】
0004504615.tif 000011
【図７】
0004504615.tif 000012