JP4992260B2 - バッファ装置及びバッファ制御方法 - Google Patents

バッファ装置及びバッファ制御方法 Download PDF

Info

Publication number
JP4992260B2
JP4992260B2 JP2006082068A JP2006082068A JP4992260B2 JP 4992260 B2 JP4992260 B2 JP 4992260B2 JP 2006082068 A JP2006082068 A JP 2006082068A JP 2006082068 A JP2006082068 A JP 2006082068A JP 4992260 B2 JP4992260 B2 JP 4992260B2
Authority
JP
Japan
Prior art keywords
entry
data
group
chain
buffer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006082068A
Other languages
English (en)
Other versions
JP2007257398A (ja
Inventor
康弘 春日
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2006082068A priority Critical patent/JP4992260B2/ja
Publication of JP2007257398A publication Critical patent/JP2007257398A/ja
Application granted granted Critical
Publication of JP4992260B2 publication Critical patent/JP4992260B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Systems (AREA)

Description

本発明は、バッファ装置及びバッファ制御方法に関し、更に詳しくは、格納されたデータのチェインを定義可能なバッファ装置、及び、そのようなバッファ装置の制御方法に関する。
バッファ装置は、例えば情報処理装置に装備され、データの入出力を制御するためのデータの緩衝を行う。バッファの制御方式としては、先にエントリに格納したデータを先に出力する方式、つまり、データをバッファに入ってきた順番に出力するFIFO(First In First Out)方式と、エントリ間のつながりを意識したデータの出し入れを行うチェイン方式とがある。なお、本明細書では、データを格納するバッファ本体と、このデータのバッファへの入出力を制御する制御部を含めたひとまとまりをバッファ(バッファ装置)と呼ぶものとする。
FIFO方式では、各エントリ間のつながりは、エントリ番号順(#0→#1→#2→...→#15→#0)に確保されており、一般的なカウンタを用いて、エントリに対する書き込み、及び、読み出しを制御できる。一方、チェイン方式では、エントリ番号とは無関係にエントリを使用して、データの入出力を、エントリの並び順にしばられずに自由に行うようにするために、エントリ間のつながりを記憶する必要がある。一般に、チェイン方式では、エントリ数と同数のチェインバッファを用意し、チェインバッファに、エントリ間のつながりを記憶する。
図11は、従来の一般的なチェイン方式のバッファの構成を示す。このバッファ装置50は、バッファ本体51、チェインバッファ52、及び、チェイン情報記憶部53を有する。バッファ本体51は、例えば16個のエントリ(#0〜#15)を有する。エントリとは、バッファを構成する最小単位であり、各エントリには、1つのデータが格納される。チェインバッファ52は、バッファ本体51の各エントリに対応しており、各エントリに後続するエントリのエントリ番号を記憶する。このようなチェインバッファ52を用いることにより、バッファ本体51のエントリ間のつながり(チェイン)を自由に組み替えることができる。
チェイン方式のバッファでは、複数のチェインを定義することができ、例えばデータの出力先(宛先とも呼ぶ)ごとにチェインを定義する。チェイン情報記憶部53は、各チェインの先頭エントリ番号と最後尾エントリ番号との組を記憶する。チェイン情報記憶部53の宛先Aの先頭エントリ番号54及び最後尾エントリ番号55には、それぞれ宛先Aに対応するチェインの先頭及び最後尾のエントリ番号が格納される。また、宛先Bの先頭エントリ番号56及び最後尾エントリ番号57には、それぞれ宛先Bに対応するチェインの先頭及び最後尾のエントリ番号が格納される。空きエントリの管理にもチェインが用いられ、空きエントリの先頭エントリ番号58及び最後尾エントリ番号59には、それぞれ空きエントリのチェインの先頭及び最後尾のエントリ番号が格納される。
図12は、図11に示すバッファ装置50の動作状態における各部が記憶する情報の例を示している。この例では、バッファ本体51には、6つのデータ(#0〜#5)が格納されている。これらデータには、宛先Aのデータと、宛先Bのデータとが混在している。宛先Aの先頭エントリ番号54を参照すると、宛先Aのチェインの先頭データは、バッファ本体51のエントリ#0に格納されたデータ0であることがわかる。バッファ本体51のエントリ#0に対応するチェインバッファ52のエントリ#0は、「エントリ番号#1」であり、データ0に、エントリ#1に格納されたデータ1が後続することがわかる。同様に、チェインバッファ52を参照することで、データ1にデータ3(エントリ番号#3)が後続し、データ3にデータ5(エントリ番号#5)が後続することがわかる。宛先Aの最後尾エントリ番号55は、「エントリ番号#5」であり、データ5が最終データであることがわかる。
宛先Bについては、先頭エントリ番号56は、「エントリ番号#2」であり、宛先Bのチェインの先頭データは、データ2であることがわかる。チェインバッファ52のエントリ#2は、「エントリ番号#4」であり、また、宛先Bの最後尾エントリ番号57は「エントリ番号#4」であるので、データ2に後続するデータ4が最終データであることがわかる。空きエントリについては、先頭エントリ番号58を参照すると、空きエントリの先頭はエントリ番号#6であり、チェインバッファ52を参照すると、エントリ#6から、エントリ#7、8、9、・・・の順に空きバッファのチェインが構成されていることがわかる。また、空きエントリの最終エントリ番号59は「エントリ番号#15」であるから、このエントリ#15が空きバッファの最終エントリであることがわかる。
図13は、データ読み出し後のバッファ装置50の各部が記憶する情報の例を示している。図12に示す状態で、宛先Bに対して、エントリ番号#2から、データ2が出力された場合について考える。この場合、データ2を出力したことに伴い、宛先Bの先頭エントリ番号56は、エントリ番号#4に書き換えられる。また、エントリ番号#2は、空き領域となるため、空きエントリの最後尾であったエントリ番号#15の後ろに、エントリ番号#2がつながれる。詳細には、チェインバッファ52のエントリ#15にエントリ番号#2が格納され、空きエントリの最後尾エントリ番号59に、エントリ番号#2が格納される。
ここで、バッファ装置に関して、空きバッファの管理を行う技術としては、特許文献1に記載された技術がある。特許文献1では、複数のバッファ(エントリ)を、それぞれが複数のバッファからなる複数個のバッファ群に分割し、空きバッファのチェインを、分割したバッファ群ごとに独立した空きバッファチェインとして管理する。特許文献1では、このようにすることで、バッファの2重開放などによって空きバッファのチェインが破壊されたときでも、その破壊の影響を一部にとどめることができるとしている。
特開2000−285011号公報
従来のチェイン方式のバッファ(図11)では、エントリ間のつながりを保持するために、エントリ数と同数のエントリを持つチェインバッファを用意している。このため、特に、バッファ本体のエントリ数が多い場合には、それに伴ってチェインバッファのエントリ数が増加し、ハードウェア量が増加するという問題がある。特許文献1では、分割されたエントリ群内では、空きエントリのチェインを、各エントリに対応したチェインバッファ(リンクポインタ)を用いて管理している。従って、特許文献1に記載の技術では、チェインバッファのハードウェア量を削減する効果は得られない。
本発明は、上記従来技術の問題点を解消し、バッファ本体のエントリ数が増加した場合でも、必要なチェインバッファのエントリ数の増加を抑えることができるバッファ装置及びバッファ制御方法を提供することを特徴とする。
上記目的を達成するために、本発明のバッファ装置は、複数のエントリを有するバッファ本体と、前記複数のエントリを、それぞれが2以上の同じ数のエントリを含む複数のグループにグループ化し、各グループに対応して、該グループに後続するグループに属する複数のエントリのうちで先頭のエントリを示す情報を記憶し、該グループに先行するグループに含まれるエントリを示す情報を記憶する領域を含まないチェインバッファとを備え、前記グループ内では、エントリ番号に従って複数のチェインがそれぞれ構成されると共に、前記グループ間では、前記チェインバッファが記憶する情報に従って前記複数のチェインがそれぞれ構成され、さらに、入力データがあると、該入力データが属するデータ集合に対応する前記チェインを選択する選択部と、前記選択したチェインに前記データ集合に属する他のデータが既に格納されているか否か判別するデータ判別部と、データ判別部が、前記データが既に記憶されていると判別すると前記入力データが属するデータ集合に対応するチェインにおいて、最後尾のデータを格納するエントリが属するグループの尾部に空きエントリがあるか否かを判別する空きエントリ判別部と、前記空きエントリ判別部がグループの尾部に空きエントリがあると判別すると、前記最後尾のデータを格納するエントリに後続するエントリに前記入力データを格納するデータ格納部と、前記空きエントリ判別部がグループの尾部に空きエントリがないと判別すると、空きエントリのみで構成されるグループに属するグループのうちで先頭のエントリに前記入力データを格納すると共に、前記最後尾のデータを格納していたエントリが属するグループに、前記入力データを格納したエントリが属するグループが後続する旨の情報を、前記グループ間のつながりを示す情報として前記チェインバッファに記憶することで、前記入力データが属するデータ集合に対応するチェインに該入力データを格納したエントリが属するグループを新たに追加する追加部と、前記チェインから、ファーストイン・ファーストアウト方式でデータを出力する出力制御部と、を備えていることを特徴とする。
本発明のバッファ装置では、バッファ本体のエントリを、それぞれが複数のエントリを含む複数のグループにグループ化し、チェインバッファにより、グループ間のつながりを定義する。また、グループ内では、エントリ番号に従って、格納されたデータ間のつながりを定義する。このようにすることで、データ間のつながりをある程度自由に定義することを可能としつつ、バッファ本体の各エントリに対応してエントリ間のつながりを記憶する従来のバッファ装置に比して、必要なチェインバッファの量(エントリ数)を削減できる。
本発明のバッファ装置は、前記チェインごとに、該チェインの先頭のエントリ及び最後尾のエントリを示す情報を記憶するチェイン情報記憶部を備える構成を採用できる。チェインは、例えばデータの宛先(出力先)に応じて、出力先ごとに定義できる。例えば、宛先Aへのデータのチェインと、宛先Bへのデータのチェインとを考える場合、そのそれぞれのチェインについて、先頭のデータを格納するエントリを示す情報と、最後尾のデータを格納するエントリを示す情報とをチェイン情報記憶部に記憶することで、データ出力先ごとにチェインを管理できる。
本発明のバッファ装置は、前記グループに属するエントリの何れにもデータが格納されていないグループうちの先頭グループ及び最後尾グループを示す情報を記憶する空きバッファ情報記憶部を備える構成を採用できる。グループ内では、エントリ番号に従ってチェインが構成されるため、あるチェインのデータが格納されたグループに属するエントリは、そのチェインのデータを格納するためのエントリとして確保されたことになる。従って、データ未格納のエントリのみで構成されるグループの先頭のエントリを空きエントリの先頭エントリとして、空きエントリを管理すればよい。
本発明のバッファ制御方法は、複数のエントリを有し、前記複数のエントリをそれぞれが2以上の同じ数のエントリを含むグループにグループ化し、前記グループから構成される複数のチェインを定義し、前記複数のチェインのそれぞれにおいて、該チェインに属する各グループに対応して、該グループに後続するグループに属する複数の前記エントリのうちで先頭のエントリを示す情報を含み、該グループに先行するグループに含まれる前記エントリを示す情報を含まない、前記グループ間のつながりを示す情報に従って前記グループ間の順序関係が管理され、前記グループ内ではエントリ番号に従って前記エントリの順序関係が管理され、前記チェインにファーストイン・ファーストアウト方式でデータが入出力される、バッファを制御する方法であって、入力データがあると、該入力データが属するデータ集合に対応する前記チェインを選択、前記選択したチェインに前記データ集合に属する他のデータが既に格納されているか否か判別し、既に記憶されていると判別すると、前記入力データが属するデータ集合に対応するチェインにおいて、最後尾のデータを格納するエントリが属するグループの尾部に空きエントリがあるか否かを判別し、前記グループの尾部に空きエントリがあると判別すると、前記最後尾のデータを格納するエントリに後続するエントリに前記入力データを格納し、前記グループの尾部に空きエントリがないと判別すると、空きエントリのみで構成されるグループに属するグループのうちで先頭のエントリに前記入力データを格納すると共に、前記最後尾のデータを格納していたエントリが属するグループに、前記入力データを格納したエントリが属するグループが後続する旨の情報を、前記グループ間のつながりを示す情報として記憶することで、前記入力データが属するデータ集合に対応するチェインに該入力データを格納したエントリが属するグループを新たに追加する、ことを特徴とする。
本発明のバッファ制御方法では、同じチェインのデータが既に格納されているときには、そのチェインの最後尾のデータが格納されたエントリが属するグループ内にデータ未格納の空きエントリがあるか否かを調べ、あるときには、最後尾のデータが格納されたエントリに後続するエントリに入力データを格納する。グループ内に空きエントリがないときには、データ未格納のエントリのみで構成されるグループの先頭のエントリに、入力データを格納する。また、入力データを格納したエントリが属するグループが、格納済みデータのチェインの最後尾のデータを格納するエントリが属するグループに後続する旨の順序情報を記憶する。バッファを、このように制御することで、データ間のつながりをある程度自由に定義することを可能としつつ、エントリごとに、後続するエントリがどのエントリであるかを記憶する従来に比して、順序関係を記憶するための記憶領域を削減できる。
本発明のバッファ装置では、バッファ本体のエントリを、それぞれが複数のエントリを含む複数のグループにグループ化し、チェインバッファにより、グループ間のつながりを定義する。また、グループ内では、エントリ番号に従って、格納されたデータ間のつながりを定義する。このようにすることで、データ間のつながりをある程度自由に定義することを可能としつつ、バッファ本体の各エントリに対応してエントリ間のつながりを記憶する従来のバッファ装置に比して、必要なチェインバッファの量(エントリ数)を削減できる。
本発明のバッファ制御方法では、同じチェインのデータが既に格納されているときには、そのチェインの最後尾のデータが格納されたエントリが属するグループ内にデータ未格納の空きエントリがあるか否かを調べ、あるときには、最後尾のデータが格納されたエントリに後続するエントリに入力データを格納する。グループ内に空きエントリがないときには、データ未格納のエントリのみで構成されるグループの先頭のエントリに、入力データを格納する。また、入力データを格納したエントリが属するグループが、格納済みデータのチェインの最後尾のデータを格納するエントリが属するグループに後続する旨の順序情報を記憶する。これにより、データ間のつながりをある程度自由に定義することを可能としつつ、エントリごとに、後続するエントリがどのエントリであるかを記憶する従来に比して、順序関係を記憶するための記憶領域を削減できる。
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図1は、本発明の一実施形態のバッファ装置の構成を示している。バッファ装置10は、バッファ本体11と、チェインバッファ12と、チェイン情報記憶部13とを有する。なお、同図では、図面の簡略化のために、データのバッファ装置10に対する入出力を制御する制御部については、図示を省略している。バッファ装置10は、例えば複数の宛先に対してデータを出力する情報処理装置に装備される。
バッファ本体11は、複数のエントリを有し、図1の例では、16個のエントリ(#0〜#15)を有する。バッファ本体11の各エントリには、1つのデータが格納される。本実施形態では、バッファ本体11のエントリを、複数のグループに分けて管理する。図1の例では、16個のエントリは、4つのエントリごとに、4つのグループに分けて管理される。
チェインバッファ12は、バッファ本体11のグループ間のつながり情報を保持する。図1では、バッファ本体11のエントリは、グループ#0〜#3の4つのグループに分かれており、チェインバッファ12は、その4つのグループに対応して、4つのエントリを有する。チェインバッファ12のエントリ#0は、バッファ本体11のエントリ#0〜#3のグループ#0に対応し、エントリ#1は、バッファ本体11のグループ#1に対応する。また、チェインバッファ12のエントリ#2は、バッファ本体11のグループ#2に対応し、エントリ#3は、バッファ本体11のグループ#3に対応する。
一般に、チェイン方式のバッファでは、エントリ間のつながり(以下、チェインとも呼ぶ)を自由に組みかえられるように、チェインバッファを用いて、エントリ間のつながりを管理している。本実施形態では、バッファ本体11のエントリを複数のグループに分け、グループ内ではエントリ番号順にエントリ間をつなげ、グループ間のつながりは、チェインバッファ12を用いて管理する。また、同じグループ内には、同一チェインを構成するデータを格納する。
チェインバッファ12の各エントリには、対応するグループに後続するグループの先頭エントリの番号が格納される。例えば、バッファ本体11のグループ#0に後続するグループが“#2”であれば、グループ#0に対応するチェインバッファ12のエントリ#0には、そのグループ#2の先頭エントリのエントリ番号#8が格納される。
チェインバッファ12を用いたエントリ間のつながりは、複数定義することができ、例えば、データの出力先(宛先)ごとにチェインを定義する。チェイン情報記憶部13は、チェインごとに、先頭のエントリ番号と、最後尾のエントリ番号との組を記憶する。先頭エントリ番号と最後尾エントリ番号とでチェインの初めと終わりを定義し、チェインバッファ12によってチェイン内のエントリのつながりを表すことでチェインを構成し、このチェインを複数装備することで、バッファの出力効率を向上させることができる。
図1では、宛先Aに対応するチェインと、宛先Bに対応するチェインとの2つのチェインを考えており、チェイン情報記憶部13は、宛先Aに対応する先頭エントリ番号14及び最後尾エントリ番号15と、宛先Bに対応する先頭エントリ番号16及び最後尾エントリ番号17とを記憶する。また、空きエントリの管理にもチェインが用いられ、チェイン情報記憶部13は、現在未使用の空きエントリを管理するための空きエントリの先頭エントリ番号18及び最後尾エントリ番号19を記憶する。
宛先Aの先頭エントリ番号14には、宛先Aのチェインの先頭となるデータが格納されたエントリのエントリ番号が格納される。また、最後尾エントリ番号15には、宛先Aのチェインの最後尾となるデータが格納されたエントリのエントリ番号が格納される。同様に、宛先Bの先頭エントリ番号16には、宛先Bのチェインの先頭のデータが格納されたエントリのエントリ番号が格納され、最後尾エントリ番号17には、最後尾のデータが格納されたエントリのエントリ番号が格納される。また、空きエントリの先頭エントリ番号18には、バッファ本体11の空きグループのうちの先頭のグループの先頭エントリ番号が格納され、最後尾エントリ番号19には、空きグループのうちの最後尾のグループの先頭エントリ番号が格納される。
図2は、バッファ装置10のデータ格納時の動作手順を示している。バッファ装置10に対してデータが入力されると(ステップS1)、図示しない制御部は、入力データが属するチェインを判別し、チェイン情報記憶部13を参照して、同一チェインのデータがバッファ本体11に既に格納されているか否かを判断する(ステップS2)。例えば、ステップS1で入力されたデータの宛先が「宛先A」であれば、宛先Aの先頭エントリ番号14を参照して、宛先Aのデータがバッファ本体11に格納されているか否かを判断する。
制御部は、同一チェインのデータが格納済みであると判断すると、そのチェインの最後尾のデータを格納するエントリを調べ、最後尾のデータを格納するエントリが属するグループ内に、空きエントリがあるか否かを判断する(ステップS3)。例えば、宛先Aの最後尾エントリ番号15が「エントリ番号#0」であれば、エントリ#0が属するグループ#0のエントリ#1〜#3は空きエントリであるので、空きエントリがあると判断する。また、最後尾エントリ番号15が「エントリ番号#3」であれば、グループ#0には空きエントリがないと判断する。
制御部は、ステップS3で空きエントリがあると判断すると、最後尾のデータが格納されたエントリに後続する番号のエントリに、ステップS1で入力されたデータを格納する(ステップS4)。その後、対応するチェインの最後尾エントリ番号を、ステップS4でデータを格納したエントリのエントリ番号で更新する(ステップS5)。例えば、ステップS4で、宛先Aのデータをエントリ#1に格納した場合には、宛先Aの最後尾エントリ番号15を「エントリ番号#0」から「エントリ番号#1」に更新する。
ステップS2で同一チェインのデータがまだ格納さていないと判断した場合、又は、ステップS3で同一グループ内に空きエントリがないと判断した場合には、空きエントリの先頭エントリ番号18を参照して、その先頭エントリ番号18が示すエントリに、ステップS1で入力されたデータを格納する(ステップS6)。その後、ステップS3からステップS6へ進んだ場合には、格納済みデータと、ステップS5で新たに格納されたデータとのチェインをつなげるために、チェインバッファ12を更新する(ステップS7)。ステップS2からステップS6へ進んだ場合には、ステップS6で格納されたデータは、チェインの先頭となるデータであるから、チェインバッファ12の更新は行われない。
例えば、入力データを格納する前の宛先Aの最後尾エントリ番号15が「エントリ番号#3」であり、ステップS6でエントリ#8に宛先Aへのデータを格納した場合には、ステップS7では、エントリ#3が属するグループ#0と、エントリ#8が属するグループ#2とをつなげるために、グループ#0に対応するチェインバッファ12のエントリ#0に、グループ#2の先頭エントリである「エントリ番号#8」を格納する。その後、ステップS5へ進んで、対応するチェインの最後尾エントリ番号を、ステップS6でデータを格納したエントリのエントリ番号で更新する。また、ステップS5でデータを格納したエントリが属するグループを、同一チェインのデータを格納するためのエントリとして確保し、空きエントリの先頭エントリ番号18を、データ未格納のグループの先頭エントリ番号で更新する。
以下、バッファ装置10のデータ格納時の動作について、具体例を用いて説明する。図3〜図8は、データが格納される際のバッファ装置10の各部に記憶された情報を示している。図3は、初期状態、つまり、バッファ本体11に何もデータが格納されていない状態でのバッファ装置10の各部に記憶された情報を示している。チェインバッファ12のエントリ#0には、バッファ本体11のグループ#1の先頭であるエントリ番号#4が格納され、エントリ#1には、グループ#2の先頭のエントリ番号#8が格納され、エントリ#2には、グループ#3の先頭のエントリ番号#12が格納される。これにより、グループ#0にグループ#1が後続し、グループ#1にグループ#2が、グループ#2にグループ#3が後続するチェインが定義される。なお、グループ#3は最終グループであり、これに後続するグループはないので、チェインバッファ12のエントリ#3には、有効な情報が格納されない(以下では、有効な情報が格納されない状態を“−”で表現する)。
図3に示す状態では、バッファ本体11にはデータが格納されておらず、全てのエントリが空きエントリである。従って、空きエントリの先頭エントリ番号18には、チェインの先頭であるグループ#0の先頭エントリ番号#0が格納される。また、空きエントリの最後尾エントリ番号19には、チェインの最後尾であるグループ#3の先頭エントリ番号#12が格納される。宛先Aの先頭エントリ番号14及び最後尾エントリ番号15と、宛先Bの先頭エントリ番号16及び最後尾エントリ番号17については、バッファ本体11にデータが格納されていないため、有効な情報が格納されていない。
図3に示す初期状態で、バッファ装置10に、宛先Aへのデータ0が入力されると、空きエントリの先頭エントリ番号18は“エントリ番号#0”であるので、バッファ装置10は、バッファ本体11のエントリ#0に、データ0を格納する(図4)。バッファ装置10は、データ0が、宛先Aへの先頭かつ最後尾のデータであるため、宛先Aの先頭エントリ番号14及び最後尾エントリ番号15に、それぞれエントリ番号#0を格納する。宛先Bについては、データがないので、宛先Bの先頭エントリ番号16及び最後尾エントリ番号17は変化しない。
バッファ装置10は、バッファ本体11の空きエントリの先頭であったエントリ#0にデータ0を格納したことに伴い、空きエントリの先頭エントリ番号18を更新する。この更新では、データを格納したバッファ本体11のエントリ番号#0を含むグループ#0を、データ0の宛先である“宛先A”用として確保し、グループ#0に後続するグループ#1の先頭のエントリ番号#4を、空きエントリの先頭エントリ番号18に格納する。
バッファ本体11のグループ#0に対応するチェインバッファ12のエントリ#0については、データ0に続くデータがないために変化しない。これは、宛先Aへのデータは1つであり、グループ内ではエントリ番号に従ってチェインが定義されるため、チェインバッファ12を用いてチェインを定義する必要がないからである。図4では、無効であることを示す“−”としているが、実際には、初期値であるエントリ#4が格納されたままとなっている。
図4に示す状態で、バッファ装置10に、宛先Bへのデータが入力されると、宛先Bへのデータはバッファ本体11にはまだ格納されていないことから、バッファ装置10は、空きエントリの先頭エントリ番号18が示す、バッファ本体11のエントリ#4に、データ1を格納する(図5)。また、データ1が、宛先Bへの先頭かつ最後尾のデータであるため、宛先Bの先頭エントリ番号16及び最後尾エントリ番号17に、それぞれエントリ番号#4を格納する。宛先Aについては、データに変化がないため、宛先Aの先頭エントリ番号14及び最後尾エントリ番号15は変化しない。
バッファ装置10は、バッファ本体11の空きエントリの先頭であったエントリ#4にデータ1を格納したことに伴い、空きエントリの先頭エントリ番号18を更新する。この更新では、データを格納したバッファ本体11のエントリ番号#4を含むグループ#1を、データ1の宛先である“宛先B”用として確保し、グループ#1に後続するグループ#2の先頭のエントリ番号#8を、空きエントリの先頭エントリ番号18に格納する。バッファ本体11のグループ#1に対応するチェインバッファ12のエントリ#1については、データ1に続くデータがないために変化しない。図5では、無効であることを示す“−”としているが、実際には、初期値であるエントリ#8が格納されたままとなっている。
図5に示す状態で、バッファ装置10に、宛先Aへのデータ2が入力された場合について考える。この場合、空きエントリの先頭エントリ番号18はエントリ番号#であるが、宛先Aの先頭エントリ番号14及び最後尾エントリ番号15が共にエントリ番号#0であることから、宛先A用に確保されたグループ#0にはまだ空きがあり、エントリ#0に後続するエントリ#1が使用可能とわかる。このため、バッファ装置10は、バッファ本体11のエントリ#1に、データ2を格納する(図6)。その際、宛先Aの最後尾エントリ番号15を、エントリ番号#1に更新する。宛先Bの先頭エントリ番号16及び最後尾エントリ番号17と、空きエントリの先頭エントリ番号18及び最後尾エントリ番号19とについては、変更がない。
図6に示す状態から、宛先Aへのデータ3、5と、宛先Bへのデータ4とがバッファ本体11に格納され、更に、バッファ装置10に、宛先Aへのデータ6が入力される場合について考える。この場合には、宛先A用に確保されたグループ#0に属するエントリ#0〜#3は、既に宛先Aへのデータを格納していることから、バッファ装置10は、空きエントリの先頭エントリ番号18を参照して、エントリ#8にデータ6を格納する(図7)。その際、グループ#0の最後尾であるエントリ#3に後続するエントリが、グループ#2の先頭エントリであることを定義するために、グループ#0に対応するチェインバッファ12のエントリ#0に、エントリ番号#8を格納する。これにより、データ5(エントリ番号#3)から、データ6(エントリ番号#8)へのチェインが定義される。
バッファ装置10は、宛先Aの最後尾エントリ番号15に、データ6を格納したエントリ番号#8を格納する。また、バッファ装置10は、エントリ#8に宛先Aへのデータ6を格納したことで、エントリ番号#8を含むグループ#2を宛先A用として確保し、グループ#2に後続するグループ#3の先頭のエントリ番号#12を、空きエントリの先頭エントリ番号18に格納する。バッファ本体11のグループ#2に対応するチェインバッファ12のエントリ#2については、データ6に続くデータがないために変化しない。図7では、無効であることを示す“−”としているが、実際には、初期値であるエントリ#12が格納されたままとなっている。
図7に示す状態から、宛先Bへのデータ7、8と、宛先Aへのデータ9とがバッファ本体11に格納された状態を、図8に示す。宛先Bへのデータ7、#8は、宛先Bの最後尾エントリ番号17を参照して、宛先B用に確保されたグループ#1に属するエントリ番号#6、#7にそれぞれ格納される。また、宛先Aへのデータ9については、宛先Aの最後尾エントリ番号15を参照して、宛先A用に確保されたグループ#2に属するエントリ#9に格納される。
図8に示す状態では、宛先Aの先頭エントリ番号14に格納されたエントリ番号#0から、同じグループ#0内のエントリ番号#1、#2、#3へとたどり、更に、チェインバッファ12に格納されたエントリ番号#8から、エントリ番号#9へとたどることで、宛先Aについて、エントリ番号#0(先頭エントリ番号14)から、#1、#2、#3、#8、#9(最終エントリ番号15)に至るチェインが構成されていることがわかる。また、宛先Bについては、エントリ番号#4(先頭エントリ番号16)から、#5、#6、#7(最終エントリ番号17)へ至るチェインが構成されていることがわかる。
次に、バッファ装置10のデータ読み出し時の動作について説明する。図9、図10は、データが出力される際のバッファ装置10の各部に記憶された情報を示している。図8に示す状態で、宛先Bにデータを出力する場合には、宛先Bの先頭エントリ番号16を参照すると、図8では、先頭データを格納するエントリは、エントリ番号#4であるので、そのエントリに格納されたデータ1が出力され、エントリ#4はデータ未格納となる(図9)。データ1の出力後、宛先Bの先頭エントリ番号16は、エントリ番号#4に後続するエントリ番号#5に更新される。この時点では、グループ#1に属するエントリが全てデータ未格納とはなっていないため、空きエントリの先頭エントリ番号18及び最後尾エントリ番号19には変化がない。
図9に示す状態から、宛先Bへ、データ4、7、8が出力されると、エントリ#5〜#7は、それぞれデータ未格納となる(図10)。この場合、バッファ本体11には、宛先Bへのデータが格納されないことから、宛先Bの先頭エントリ番号16及び最後尾エントリ番号17は、それぞれ無効な値となる。また、グループ#1に属するエントリ#4〜#7が全て空き状態となったことで、グループ#1が空きエントリのチェインに接続される。その際には、空きエントリの最後尾エントリ番号19を参照して、空き状態となったグループ#1の各エントリが、最後尾エントリ番号19が示すエントリ番号#12(図9)が属するグループ#3に後続するように、チェインバッファ12のエントリ#3に、エントリ番号#4を格納する。また、空きエントリの最後尾エントリ番号19を、エントリ番号#4で更新する。このようにすることで、グループ#1の各エントリは、新たに空きエントリとして使用可能となる。以上のような手順で、宛先ごとのチェインと空きエントリのチェインとを、それぞれつないでいくことにより、バッファへのデータ入出力が制御される。
本実施形態では、複数のエントリをまとめてグループ化し、各グループを、1つのエントリに見立ててチェインバッファ12で、そのつながりを管理する。また、グループ内では、エントリ番号に従って、そのつながりを管理する。このようにすることにより、チェイン方式のバッファ制御機能を損なわずに、チェインバッファ12のエントリ数を、バッファ本体11の総エントリ数の1/(グループ数)まで削減することができ、各エントリに対応してチェインバッファのエントリを用意する場合に比して、ハードウェア量を削減できる。
なお、上記実施形態では、バッファ本体11のエントリの総数を16としたが、これには限定されない。また、バッファ本体11のエントリを、4つのエントリごとにグループ分けしたが、グループ分けの条件は、これには限定されず、任意の手法により、グループ分けを行うことができる。上記実施形態では、バッファ装置10のデータ出力先を、宛先A及び宛先Bとしたが、これには限定されない。また、宛先ごとにチェインを構成するのに代えて、又は、加えて、他の要因によってチェインを構成してもよい。
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のバッファ装置及びバッファの制御方法は、上記実施形態にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
本発明の一実施形態のバッファ装置の構成を示すブロック図。 バッファ装置のデータ格納時の動作手順を示すフローチャート。 データ格納時におけるバッファ装置の各部に記憶された情報を示す図。 データ格納時におけるバッファ装置の各部に記憶された情報を示す図。 データ格納時におけるバッファ装置の各部に記憶された情報を示す図。 データ格納時におけるバッファ装置の各部に記憶された情報を示す図。 データ格納時におけるバッファ装置の各部に記憶された情報を示す図。 データ格納時におけるバッファ装置の各部に記憶された情報を示す図。 データ出力時におけるバッファ装置の各部に記憶された情報を示す図。 データ出力時におけるバッファ装置の各部に記憶された情報を示す図。 従来の一般的なチェイン方式のバッファの構成を示すブロック図。 従来のバッファ装置の動作状態における各部が記憶する情報を示す図。 データ読み出し後の従来のバッファ装置の各部が記憶する情報の例を示す図。
10:バッファ装置
11:バッファ本体
12:チェインバッファ
13:チェイン情報記憶部
14、16:先頭エントリ番号
15、17:最後尾エントリ番号
18:空き先頭エントリ番号
19:空き最後尾エントリ番号

Claims (5)

  1. 複数のエントリを有するバッファ本体と、
    前記複数のエントリを、それぞれが2以上の同じ数のエントリを含む複数のグループにグループ化し、各グループに対応して、該グループに後続するグループに属する複数のエントリのうちで先頭のエントリを示す情報を記憶し、該グループに先行するグループに含まれるエントリを示す情報を記憶する領域を含まないチェインバッファと
    を備え、
    前記グループ内では、エントリ番号に従って複数のチェインがそれぞれ構成されると共に、前記グループ間では、前記チェインバッファが記憶する情報に従って前記複数のチェインがそれぞれ構成され
    さらに、
    入力データがあると、該入力データが属するデータ集合に対応する前記チェインを選択する選択部と、
    前記選択したチェインに前記データ集合に属する他のデータが既に格納されているか否か判別するデータ判別部と、
    データ判別部が、前記データが既に記憶されていると判別すると前記入力データが属するデータ集合に対応するチェインにおいて、最後尾のデータを格納するエントリが属するグループの尾部に空きエントリがあるか否かを判別する空きエントリ判別部と、
    前記空きエントリ判別部がグループの尾部に空きエントリがあると判別すると、前記最後尾のデータを格納するエントリに後続するエントリに前記入力データを格納するデータ格納部と、
    前記空きエントリ判別部がグループの尾部に空きエントリがないと判別すると、空きエントリのみで構成されるグループに属するグループのうちで先頭のエントリに前記入力データを格納すると共に、前記最後尾のデータを格納していたエントリが属するグループに、前記入力データを格納したエントリが属するグループが後続する旨の情報を、前記グループ間のつながりを示す情報として前記チェインバッファに記憶することで、前記入力データが属するデータ集合に対応するチェインに該入力データを格納したエントリが属するグループを新たに追加する追加部と、
    前記チェインから、ファーストイン・ファーストアウト方式でデータを出力する出力制御部と、
    を備えていることを特徴とするバッファ装置。
  2. 前記チェインごとに、該チェインの先頭のエントリ及び最後尾のエントリを示す情報を記憶するチェイン情報記憶部を備えている、請求項1に記載のバッファ装置。
  3. 前記チェインが、データの宛先ごとに構成されている、請求項2に記載にバッファ装置。
  4. 前記グループに属するエントリの何れにもデータが格納されていないグループうちの先頭グループ及び最後尾グループを示す情報を記憶する空きバッファ情報記憶部を備えている、請求項1〜3の何れか一に記載のバッファ装置。
  5. 複数のエントリを有し、
    前記複数のエントリをそれぞれが2以上の同じ数のエントリを含むグループにグループ化し、
    前記グループから構成される複数のチェインを定義し、
    前記複数のチェインのそれぞれにおいて、該チェインに属する各グループに対応して、該グループに後続するグループに属する複数の前記エントリのうちで先頭のエントリを示す情報を含み、該グループに先行するグループに含まれる前記エントリを示す情報を含まない、前記グループ間のつながりを示す情報に従って前記グループ間の順序関係が管理され
    前記グループ内ではエントリ番号に従って前記エントリの順序関係が管理され、
    前記チェインにファーストイン・ファーストアウト方式でデータが入出力される、
    バッファを制御する方法であって、
    入力データがあると、該入力データが属するデータ集合に対応する前記チェインを選択
    前記選択したチェインに前記データ集合に属する他のデータが既に格納されているか否か判別し、
    既に記憶されていると判別すると、前記入力データが属するデータ集合に対応するチェインにおいて、最後尾のデータを格納するエントリが属するグループの尾部に空きエントリがあるか否かを判別し、
    前記グループの尾部に空きエントリがあると判別すると、前記最後尾のデータを格納するエントリに後続するエントリに前記入力データを格納し、
    前記グループの尾部に空きエントリがないと判別すると、空きエントリのみで構成されるグループに属するグループのうちで先頭のエントリに前記入力データを格納すると共に、前記最後尾のデータを格納していたエントリが属するグループに、前記入力データを格納したエントリが属するグループが後続する旨の情報を、前記グループ間のつながりを示す情報として記憶することで、前記入力データが属するデータ集合に対応するチェインに該入力データを格納したエントリが属するグループを新たに追加する、
    ことを特徴とするバッファの制御方法。
JP2006082068A 2006-03-24 2006-03-24 バッファ装置及びバッファ制御方法 Expired - Fee Related JP4992260B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006082068A JP4992260B2 (ja) 2006-03-24 2006-03-24 バッファ装置及びバッファ制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006082068A JP4992260B2 (ja) 2006-03-24 2006-03-24 バッファ装置及びバッファ制御方法

Publications (2)

Publication Number Publication Date
JP2007257398A JP2007257398A (ja) 2007-10-04
JP4992260B2 true JP4992260B2 (ja) 2012-08-08

Family

ID=38631564

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006082068A Expired - Fee Related JP4992260B2 (ja) 2006-03-24 2006-03-24 バッファ装置及びバッファ制御方法

Country Status (1)

Country Link
JP (1) JP4992260B2 (ja)

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6246682B1 (en) * 1999-03-05 2001-06-12 Transwitch Corp. Method and apparatus for managing multiple ATM cell queues

Also Published As

Publication number Publication date
JP2007257398A (ja) 2007-10-04

Similar Documents

Publication Publication Date Title
US6480942B1 (en) Synchronized FIFO memory circuit
US8001296B2 (en) USB controller and buffer memory control method
KR100560286B1 (ko) 어드레스지정가능 메모리에 다양한 크기의 데이터 블록을 전송하는 방법, 통신 어댑터 및 컴퓨터 판독가능 매체
JP6905195B2 (ja) データ転送装置、演算処理装置及びデータ転送方法
JP5401903B2 (ja) 故障情報監視装置及び故障情報監視方法
US5907716A (en) Fifo buffer capable of partially erasing data set held therein
US6567407B1 (en) ATM switch circuit capable of increasing use efficiency of address memory, and ATM switch circuit controlling method
US8812787B2 (en) Router and many-core system
JP2628701B2 (ja) 優先順位付き情報パケット用交換装置
JP4992260B2 (ja) バッファ装置及びバッファ制御方法
US8363653B2 (en) Packet forwarding method and device
EP0739118B1 (en) Communication apparatus
CN104125169B (zh) 链表处理装置、链表处理方法及相关网络交换机
CN114817091B (zh) 基于链表的fwft fifo系统、实现方法及设备
US5369747A (en) Input/output channel apparatus
JP5316696B2 (ja) データブロック読出制御装置
JP2652079B2 (ja) データ伝送装置
JP5379075B2 (ja) データ入出力装置、データ記憶方法及びプログラム
US7836231B2 (en) Buffer control method and device thereof
US20090006678A1 (en) Data input-output control apparatus
KR101667602B1 (ko) 태깅 및 언태깅의 제어가 가능한 선입선출 메모리 장치 및 이를 이용한 데이터 출력 방법
JPH05289847A (ja) リングバッファ管理装置
JPH04358390A (ja) Fifoメモリ
JPH0731635B2 (ja) 情報処理装置
JPH1051469A (ja) Atmスイッチ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090212

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20100223

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110809

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111007

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120410

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120423

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150518

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4992260

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees