JP5491282B2 - データ入出力装置、データ記憶方法及びプログラム - Google Patents

データ入出力装置、データ記憶方法及びプログラム Download PDF

Info

Publication number
JP5491282B2
JP5491282B2 JP2010120470A JP2010120470A JP5491282B2 JP 5491282 B2 JP5491282 B2 JP 5491282B2 JP 2010120470 A JP2010120470 A JP 2010120470A JP 2010120470 A JP2010120470 A JP 2010120470A JP 5491282 B2 JP5491282 B2 JP 5491282B2
Authority
JP
Japan
Prior art keywords
data
stored
memory
series
storage area
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
JP2010120470A
Other languages
English (en)
Other versions
JP2011248586A (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2010120470A priority Critical patent/JP5491282B2/ja
Publication of JP2011248586A publication Critical patent/JP2011248586A/ja
Application granted granted Critical
Publication of JP5491282B2 publication Critical patent/JP5491282B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、先入れ先出し(FIFO:First In First Out)方式のデータ入出力装置、データ記憶方法及びプログラムに関する。
低速かつ等時性のない複数のデータ系列のいずれかに属する複数のデータのそれぞれを、データ系列毎に所定のデータ量になるまで記憶し、記憶されたデータに対して一度に高速な処理を施すためには、データの先入れ先出しを複数のデータ系列毎に実現する必要がある。
図15は、データの先入れ先出しを複数のデータ系列毎に実現するデータ入出力装置の構成を説明するための図である。
入力バッファ113は、複数のデータの入力を1つずつ受け付ける。なお、入力バッファ113にて受け付けられる複数のデータのそれぞれは、複数のデータ系列のいずれかに属している。複数のデータのそれぞれには、データ系列を識別するための系列番号が付与されている。
キュー112−1〜112−nのそれぞれは、複数のデータ系列のそれぞれと固定的に対応付けられ、入力バッファ113にて受け付けられた複数のデータをデータ系列毎に記憶する。例えば、データ系列の数がN個であれば、キューの数もN個必要となる。
制御部111は、入力バッファ113にて受け付けられた複数のデータのそれぞれに付与された系列番号を抽出し、キュー112−1〜112−nのうち、抽出した系列番号のデータ系列に対応するキューに、そのデータを記憶させる。記憶されたデータは、例えば記憶されたデータのデータ量が所定の量になるというような条件を満足するまで読み出されず、キューに記憶されていく。そして、上述したような条件が満足されると、キューに記憶されたデータのうちの所定の一部分が出力される。
なお、先入れ先だしの仕様に関する技術が例えば、非特許文献1に開示されている。
http://www.okisemi.com/jp/semicon/videomemory/ms81v32322.htm
上述したように、図15に示したようなデータ入出力装置においては、データの先入れ先出しを複数のデータ系列毎に実現するために、複数のキューのそれぞれが複数のデータ系列のそれぞれと固定的に対応付けられている。
このとき、例えば所定の条件において、ある1つのデータ系列に属するデータが、受け付けられるデータの大部分を占める場合であったとしても、そのデータ系列に属するデータを他のデータ系列に対応付けられたキューに記憶させることはできない。
また、ある1つのデータ系列に対応付けられたキューに記憶されたデータの出力が完了した後でも、そのキューに他のデータ系列に属するデータを記憶させることはできない。
従って、データ系列の数をN個とし、それぞれのキューに記憶される可能性のあるデータ量の最大値をMとすると、キュー全体として、(M×N)程度の記憶容量を確保しておく必要がある。
この場合、データ系列の数が多くなればなるほど、データを記憶するために必要な記憶容量が増大してしまうという問題点がある。
本発明は、データを記憶するための記憶容量の増大を抑制しつつ、データの先入れ先出しをデータ系列毎に実現することができるデータ入出力装置、データ記憶方法及びプログラムを提供することを目的とする。
上記目的を達成するために本発明のデータ入出力装置は、複数のデータ系列のいずれかに属する複数のデータの入力を1つずつ受け付け、該受け付けたデータを前記複数のデータ系列毎に先入れ先出し方式で出力するデータ入出力装置であって、
前記受け付けた複数のデータを1つずつ記憶する複数の記憶領域と、
前記複数の記憶領域のうち、前記データが記憶されていない記憶領域を空き記憶領域として設定し、前記受け付けたデータと同じデータ系列に属するデータが前記複数の記憶領域に記憶されていない場合、前記空き記憶領域として設定された記憶領域の1つに当該データを記憶させるとともに、当該記憶領域を、当該データ系列において最初に受け付けたデータが記憶された先頭記憶領域として設定し、前記受け付けたデータと同じデータ系列に属するデータが前記複数の記憶領域に記憶されている場合、当該データ系列において当該データの1つ前に受け付けたデータが記憶された記憶領域と、前記空き記憶領域として設定された記憶領域の1つとを対応付け、当該記憶領域に当該データを記憶させる制御部と、を有する。
また、上記目的を達成するために本発明のデータ記憶方法は、複数の記憶領域を有し、複数のデータ系列のいずれかに属する複数のデータの入力を1つずつ受け付け、該受け付けた複数のデータを前記複数の記憶領域に1つずつ記憶させ、該記憶されたデータを前記複数のデータ系列毎に先入れ先出し方式で出力するデータ入出力装置におけるデータ記憶方法であって、
前記複数の記憶領域のうち、前記データが記憶されていない記憶領域を空き記憶領域として設定する処理と、
前記受け付けたデータと同じデータ系列に属するデータが前記複数の記憶領域に記憶されていない場合、前記空き記憶領域として設定された記憶領域の1つに当該データを記憶させるとともに、当該記憶領域を、当該データ系列において最初に受け付けたデータが記憶された先頭記憶領域として設定する処理と、
前記受け付けたデータと同じデータ系列に属するデータが前記複数の記憶領域に記憶されている場合、当該データ系列において当該データの1つ前に受け付けたデータが記憶された記憶領域と、前記空き記憶領域として設定された記憶領域の1つとを対応付け、当該記憶領域に当該データを記憶させる処理と、を有する。
また、上記目的を達成するために本発明のプログラムは、複数の記憶領域を有し、複数のデータ系列のいずれかに属する複数のデータの入力を1つずつ受け付け、該受け付けた複数のデータを前記複数の記憶領域に1つずつ記憶させ、該記憶されたデータを前記複数のデータ系列毎に先入れ先出し方式で出力するコンピュータに、
前記複数の記憶領域のうち、前記データが記憶されていない記憶領域を空き記憶領域として設定する機能と、
前記受け付けたデータと同じデータ系列に属するデータが前記複数の記憶領域に記憶されていない場合、前記空き記憶領域として設定された記憶領域の1つに当該データを記憶させるとともに、当該記憶領域を、当該データ系列において最初に受け付けたデータが記憶された先頭記憶領域として設定する機能と、
前記受け付けたデータと同じデータ系列に属するデータが前記複数の記憶領域に記憶されている場合、当該データ系列において当該データの1つ前に受け付けたデータが記憶された記憶領域と、前記空き記憶領域として設定された記憶領域の1つとを対応付け、当該記憶領域に当該データを記憶させる機能と、を実現させる。
本発明は以上説明したように構成されているので、データの先入れ先だしをデータ系列毎に実現するために、複数のデータ系列のそれぞれと複数のキューのそれぞれとを固定的に対応付ける必要がない。
従って、データを記憶するための記憶容量の増大を抑制しつつ、データの先入れ先出しをデータ系列毎に実現することができる。
本発明のデータ入出力装置の実施の一形態の構成を示すブロック図である。 図1に示したポインタリストメモリとデータメモリとの間の対応関係の一例を示す図である。 図1に示したポインタリストメモリとデータメモリとの間の対応関係の他の例を示す図である。 図1に示したポインタリストメモリと先頭ポインタ表との間の対応関係の一例を示す図である。 図1に示したポインタリストメモリと末尾ポインタ表との間の対応関係の一例を説明するための図である。 図1に示したポインタリストメモリとデータメモリとの間の対応関係の他の例を示す図である。 図1に示したデータメモリが初期化されたときの状態の一例を示す図であり、(a)はポインタリストメモリを示す図、(b)は先頭ポインタ表及び末尾ポインタ表を示す図である。 図1に示したデータ入出力装置においてデータを記憶する動作を説明するためのフローチャートである。 図7に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリを示す図、(b)は先頭ポインタ表及び末尾ポインタ表を示す図である。 図9に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリを示す図、(b)は先頭ポインタ表及び末尾ポインタ表を示す図である。 図1に示したデータメモリにデータが記憶された状態の一例を示す図であり、(a)はポインタリストメモリを示す図、(b)は先頭ポインタ表及び末尾ポインタ表52を示す図である。 図1に示したデータ入出力装置10において、記憶されたデータを出力する動作を説明するためのフローチャートである。 図11に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリを示す図、(b)は先頭ポインタ表及び末尾ポインタ表を示す図である。 図13に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリを示す図、(b)は先頭ポインタ表及び末尾ポインタ表を示す図である。 データの先入れ先出しを複数のデータ系列毎に実現するデータ入出力装置の構成を説明するための図である。
以下に、本発明の実施の形態について図面を参照して説明する。
図1は、本発明のデータ入出力装置の実施の一形態の構成を示すブロック図である。
本実施形態のデータ入出力装置10は図1に示すように、制御部11と、データメモリ12と、入力バッファ13と、ポインタリストメモリ14と、先頭ポインタ表51と、末尾ポインタ表52とを備えている。
入力バッファ13は、複数のデータの入力を1つずつ受け付ける。なお、入力バッファ13にて受け付けられる複数のデータのそれぞれは、複数のデータ系列のいずれかに属している。複数のデータのそれぞれには、データ系列を識別するための系列番号が付与されている。ここでは、系列番号は1以上の整数とする。
データメモリ12は、所定の長さの連続する複数の記憶領域から構成される。
制御部11は、ポインタリストメモリ14と、先頭ポインタ表51及び末尾ポインタ表52とを用い、データメモリ12の複数の記憶領域のうちデータが記憶されていない記憶領域である空き記憶領域に、入力バッファ13にて受け付けられた複数のデータのそれぞれを記憶させる(書き込む)。また、制御部11は、ポインタリストメモリ14と、先頭ポインタ表51及び末尾ポインタ表52とを用い、データメモリ12の複数の記憶領域のそれぞれに記憶されたデータのうち、出力対象のデータ系列のデータを読み出して出力する。なお、制御部11が、データメモリ12の複数の記憶領域にデータを記憶させる動作、及び、記憶されたデータを読み出して出力する動作の詳細については、後述する動作フローにおいて説明する。
ここで、図1に示したポインタリストメモリ14とデータメモリ12との間の対応関係について説明する。
図2は、図1に示したポインタリストメモリ14とデータメモリ12との間の対応関係の一例を示す図である。
データメモリ12とポインタリストメモリ14との間の対応関係は系列番号毎に存在する。図2は、ある1つの系列番号における対応関係を示している。また、ポインタリストメモリ14においては、系列番号を識別するための見出し付けがされている。図2においては、図中の黒丸が系列番号を識別するための見出しを表している。
データメモリ12とポインタリストメモリ14とは、ポインタリストメモリ14のアドレスaから、1つのxに対して値が1つに定まる関数f(x)を用いることにより、データメモリ12の複数の記憶領域のいずれかを特定するポインタf(a)を得るという対応関係にある。
つまり、ポインタリストメモリ14のアドレスのそれぞれとデータメモリ12の複数の記憶領域のそれぞれとが1対1で対応付けられていることとなる。なお、ポインタf(a)は例えば、データメモリ12の複数の記憶領域のいずれかの先頭アドレスである。また、関数f(x)の一例としては、xを256倍する(8ビットシフトする)関数がある。
図2では例えば、ポインタリストメモリ14のアドレス「0100」が、データメモリ12の複数の記憶領域のうち、先頭アドレスが「010000」の記憶領域と対応付けられている。
また、図2に示すように、ポインタリストメモリ14のそれぞれのアドレスには値が記憶されている。ポインタリストメモリ14のアドレスaに記憶された値をbとした場合、f(a)が特定する記憶領域に記憶されたデータは、f(b)が特定する記憶領域に記憶されたデータと同じデータ系列に属し、f(b)が特定する記憶領域に記憶されたデータの1つ前に受け付けられたデータである。つまり、ポインタリストメモリ14により、受け付けられたデータと、そのデータが属するデータ系列に属し、そのデータの1つ前に受け付けられたデータとが対応付けられることとなる。
図2においては、ポインタリストメモリ14のアドレス「0100」に記憶されたデータは「0120」である。ここで、「0100」及び「0120」から関数f(x)を用いて得られる値が「010000」及び「012000」である場合、データメモリ12の「010000」を先頭アドレスとする記憶領域に記憶されたデータは、データメモリ12の「012000」を先頭アドレスとする記憶領域に記憶されたデータと同じデータ系列に属し、そのデータの1つ前に受け付けられたデータである。
このように、ポインタリストメモリ14では、データメモリ12においてデータが記憶された記憶領域を特定するポインタが、複数のデータ系列毎に連鎖(片方向リスト)を構成している。
なお、複数のデータ系列のそれぞれにおいて最後に受け付けられたデータが記憶された記憶領域に対応するアドレスに記憶される値は、そのデータ系列におけるデータの終了を表す特殊な値であり、ここではその値を“END”とする。
ここで、上記の説明においては、関数f(x)を用いることにより、ポインタリストメモリ14のアドレスと、データメモリ12の複数の記憶領域のそれぞれとを1対1に対応付けた。しかし、ポインタリストメモリ14のアドレスと、データメモリ12の複数の記憶領域のそれぞれとを1対1に対応付けられれば、必ずしも関数f(x)を用いる必要はない。以下に、ポインタリストメモリ14とデータメモリ12との間の対応関係の他の例を説明する。
図3は、図1に示したポインタリストメモリ14とデータメモリ12との間の対応関係の他の例を示す図である。
図2に示したポインタリストメモリ14と図3に示すポインタリストメモリ14とを比較すると、図3に示すポインタリストメモリ14は、アドレスに対応するデータメモリ12の記憶領域の先頭アドレスを示すフィールドをさらに備えている点が異なる。ポインタリストメモリ14をこのような構成にすることにより、関数f(x)を用いなくても、ポインタリストメモリ14のアドレスとデータメモリ12の複数の記憶領域のそれぞれとを1対1に対応付けることができる。なお、以降の説明においてポインタリストメモリ14の構成は、図2に示したような構成であるものとする。
次に、ポインタリストメモリ14と先頭ポインタ表51及び末尾ポインタ表52との間の対応関係について説明する。
まず、ポインタリストメモリ14と先頭ポインタ表51との間の対応関係について説明する。
図4は、図1に示したポインタリストメモリ14と先頭ポインタ表51との間の対応関係の一例を示す図である。
先頭ポインタ表51では、系列番号を識別するための見出し付けがされている。図4においては、図中の黒丸及び黒三角が見出しを表している。
先頭ポインタ表51には、見出しによって識別された系列番号のデータ系列のポインタリストメモリ14のアドレスを示す値が記憶される。図4の図中の黒丸及び黒三角の右側の値が、当該系列番号のデータ系列におけるポインタリストメモリ14のアドレスを示している。以降、この値のことを先頭ポインタの値という。先頭ポインタの値は、当該系列番号のデータ系列において最初に受け付けられたデータが記憶されたデータメモリ12の記憶領域である先頭記憶領域に対応するアドレスを示す。
なお、データメモリ12の複数の記憶領域にデータが1つも記憶されていないデータ系列については、先頭ポインタの値は、特別な値“empty”をとるものとする。
次に、ポインタリストメモリ14と末尾ポインタ表52メモリとの間の対応関係について説明する。
図5は、図1に示したポインタリストメモリ14と末尾ポインタ表52との間の対応関係の一例を説明するための図である。
末尾ポインタ表52では、先頭ポインタ表51と同様に、系列番号を識別するための見出し付けがされている。図5においては、図中の黒丸及び黒三角が見出しを表している。
末尾ポインタ表52には、先頭ポインタ表51と同様に、見出しによって識別された系列番号のデータ系列のポインタリストメモリ14のアドレスを示す値が記憶される。図5の図中の黒丸及び黒三角の右側の値が、当該系列番号のデータ系列におけるポインタリストメモリ14のアドレスを示している。以降、この値のことを末尾ポインタの値という。末尾ポインタの値は、当該系列番号のデータ系列において最後に受け付けられたデータが記憶されたデータメモリ12の記憶領域に対応するアドレスを示す。
なお、データメモリ12の複数の記憶領域にデータが1つも記憶されていないデータ系列については、末尾ポインタの値は、先頭ポインタの値と同様に、特別な値“empty”をとるものとする。
ここで、上述したように、データメモリ12の複数の記憶領域のうちデータが記憶された記憶領域は、ポインタリストメモリ14のアドレスと対応付けられる。そのため、制御部11は、データメモリに記憶されたデータをデータ系列毎に認識することができる。しかし、データメモリ12の複数の記憶領域のうち、空き記憶領域を特定できなければ、制御部11は、入力バッファ13にて受け付けられたデータをデータメモリ12のどの記憶領域に記憶させればよいかがわからない。
図6は、図1に示したポインタリストメモリ14とデータメモリ12との間の対応関係の他の例を示す図である。
図6に示すポインタリストメモリ14では、図2に示したデータ系列毎のポインタリストメモリ14と同様に、ポインタリストメモリ14のアドレスと記憶領域とが対応付けられている。但し、図6では、ポインタメモリのアドレスと、データメモリ12の複数の記憶領域のうちの空き記憶領域とが対応付けられている。そして、空き記憶領域を特定するポインタが連鎖(片方向リスト)を構成している。
以降、空き記憶領域には系列番号0のデータが記憶されているとみなし、系列番号0のデータ系列のことを空き系列という。
なお、ポインタリストメモリ14のアドレスが、空き系列(系列番号0)に属するデータが記憶された記憶領域に対応付けられることと、いずれかのデータ系列(系列番号1〜)に属するデータが記憶された記憶領域に対応付けられることとは排他的事象である。従って、空き系列のためにポインタリストメモリを別途用意する必要はない。
また、図4及び図5に示した先頭ポインタ表51及び末尾ポインタ表52に空き系列の先頭ポインタ及び末尾ポインタの値を記憶させることができる。
以下に、上記のように構成されたデータ入出力装置10において、データを記憶する動作と、記憶されたデータを出力する動作とについて説明する。
まず、データ入出力装置10においてデータを記憶する動作について説明するが、その前にデータメモリ12が初期化されたときの状態について説明する。
図7は、図1に示したデータメモリ12が初期化されたときの状態の一例を示す図であり、(a)はポインタリストメモリ14を示す図、(b)は先頭ポインタ表51及び末尾ポインタ表52を示す図である。なお、ここでは、データ系列の数が8つあり、それぞれのデータ系列の系列番号を0〜7とする。系列番号0のデータ系列は、上述したように空き系列である。
データメモリ12が初期化された直後には、データメモリ12の複数の記憶領域には1つもデータが記憶されていない。つまり、複数の記憶領域の全てに、系列番号0のデータが記憶されているとみなされる。
従って、制御部11は、ポインタリストメモリ14の全てのアドレスを単一のリストとなるように連鎖させる。これは、例えば図7(a)に示すように、ポインタリストメモリ14の全てのアドレスに記憶される値を、次のアドレスを示す値とすることによって実現できる。これを、擬似コードで表すと以下のようになる。
# for(i=0; i++; i<(n-1)) L(i)=i+1;
# L(n-1)=END
上記の擬似コードにおいて、iはポインタリストメモリ14のアドレスを示し、L(i)はポインタリストメモリ14のアドレスiに記憶された値を示す。これらは、以降の説明においても同様である。
また、制御部11は、空き系列(系列番号0)の先頭ポインタの値としてポインタリストメモリ14の最初のアドレスを先頭ポインタ表51に設定する。ここでは、図7(b)に示すように、空き系列の先頭ポインタの値として“0”が先頭ポインタ表51に設定される。
さらに、制御部11は、空き系列の末尾ポインタの値としてポインタリストメモリ14の最後のアドレスを末尾ポインタ表52に設定する。ここでは、図7(b)に示すように、空き系列の末尾ポインタの値として“7”が末尾ポインタ表52に設定される。これらを擬似コードで示すと以下のようになる。なお、以下に示す擬似コードにおいて、P_head(j)は系列番号jの先頭ポインタの値であり、P_tail(j)は系列番号jの末尾ポインタの値である。これらは、以降の説明においても同様である。
# P_head(0)=0;
# P_tail(0)=n-1;
そして、制御部11は、空き系列以外のデータ系列(系列番号1〜7)の先頭ポインタ及び末尾ポインタの値として“empty”を先頭ポインタ表51及び末尾ポインタ表52に設定する。これを擬似コードで示すと以下のようになる。
# for(j=1; j++; j<n) P_head(j)=empty;
# for(j=1; j++; i<n) P_tail(j)=empty;
次に、データ入出力装置10においてデータを記憶する動作について説明する。ここでは、複数のデータが同時に入力されることはないものとする。また、データの長さは一定である必要はないが、ここでは、説明を簡単にするため、データの長さを一定とし、データメモリの複数の記憶領域のそれぞれは、データの長さと同じ長さであるものとする。
図8は、図1に示したデータ入出力装置10においてデータを記憶する動作を説明するためのフローチャートである。
まず、入力バッファ13がデータの入力を受け付ける(ステップS1)。
制御部11は、ステップS1にて受け付けたデータに付与された系列番号jを抽出する(ステップS2)。
次に、制御部11は、抽出した系列番号jの末尾ポインタの値(P_tail(j))を末尾ポインタ表52から取得する(ステップS3)。
そして、制御部11は、ステップS3にて取得した値が“empty”であるかどうかを判定する(ステップS4)。
ステップS4における判定の結果、ステップS3にて取得した値が“empty”でない場合、制御部11は、ステップS3にて取得した値が示すポインタリストメモリ14のアドレスに記憶された値を、空き系列の先頭ポインタの値に更新する(ステップS5)。
次に、制御部11は、ステップS2にて抽出した系列番号jの末尾ポインタの値を、空き系列の先頭ポインタの値に更新する(ステップS6)。
次に、制御部11は、空き系列の先頭ポインタの値が示すポインタリストのアドレスに記憶された値を取得する(ステップS7)
次に、制御部11は、空き系列の先頭ポインタの値が示すポインタリストメモリ14のアドレスに記憶された値を“END”に更新する(ステップS8)。
そして、制御部11は、空き系列の先頭ポインタの値をステップS7にて取得した値に更新する(ステップS9)。
なお、上述したステップS5〜S9の動作を疑似コードで表すと以下のようになる。
if(not(P_tail(j==empty)) L(P_tail(j))=P_head(0);
P_tail(j)=P_head(0);
swap=L(P_head(0));
L(P_head(0))=END
P_head(0)=swap
そして、制御部11は、データメモリ上の複数の記憶領域のうち、ステップS2にて抽出した系列番号jの末尾ポインタの値が示すアドレスに対応するデータメモリ12の記憶領域に、ステップS1にて受け付けたデータを記憶させる(ステップS10)。
なお、ステップS4における判定の結果、取得した値が“empty”である場合には、制御部11は、抽出した系列番号jの先頭ポインタの値を、“empty”から、空き系列の先頭ポインタの値に更新し(ステップS11)、ステップS6の動作へ遷移する。つまり、空き系列の先頭ポインタが示すポインタリストメモリ14のアドレスに対応する記憶領域が、ステップS2にて抽出した系列番号のデータ系列における先頭記憶領域として設定されたこととなる。
図9は、図7に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリ14を示す図、(b)は先頭ポインタ表51及び末尾ポインタ表52を示す図である。なお、図9は、図7に示した状態の後、系列番号1の最初のデータが記憶されたときの状態を示している。
図9(b)に示すように、系列番号1の先頭ポインタ及び末尾ポインタの値は共に“0”となっている。さらに、空き系列の先頭ポインタの値が“1”となっており、ポインタリストメモリ14のアドレス1を示している。また、ポインタリストメモリ14では図9(a)に示すように、アドレス0に記憶されている値が“END”となっている。
図10は、図9に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリ14を示す図、(b)は先頭ポインタ表51及び末尾ポインタ表52を示す図である。なお、図10は、図9に示した状態の後、系列番号2の最初のデータが記憶され、その後、系列番号1の2番目のデータの記憶が記憶されたときの状態を示している。
図10(b)に示すように、系列番号0の先頭ポインタの値は、“3”となっており、系列番号1の末尾ポインタの値は“2”となっている。また、ポインタリストメモリ14では図10(a)に示すように、アドレス0に記憶された値が“2”となっており、アドレス2に記憶された値が“END”となっている。
ここで、空き系列の先頭ポインタの値が“END”になっている場合、データメモリ12に空き記憶領域がないことを意味する。ここまでの説明では、データメモリ12に記憶されたデータが出力されることによって記憶領域に空きができることを想定していなかった。そのため、図7〜図10を参照しながら説明した例では、ポインタリストメモリ14のアドレス7にある“END”が、空き系列の先頭ポインタの値としてセットされると、受け付けたデータをデータメモリ12に記憶させることができない状態となる。
但し、データメモリにデータを記憶させることができなくなる前に、データメモリ12に記憶されたデータが出力されれば、出力されたデータが記憶されていた記憶領域を空き記憶領域とすることができる。
そこで、次に、データ入出力装置10において記憶されたデータを出力する動作について説明する。
図11は、図1に示したデータメモリ12にデータが記憶された状態の一例を示す図であり、(a)はポインタリストメモリ14を示す図、(b)は先頭ポインタ表51及び末尾ポインタ表52を示す図である。また、図12は、図1に示したデータ入出力装置10において、記憶されたデータを出力する動作を説明するためのフローチャートである。
先頭ポインタ及び末尾ポインタの値が“empty”でないデータ系列では、データがデータメモリ12に記憶されており、記憶されたデータを出力することができる。ここでは、出力対象のデータ系列は別途決定されるものとして、図11に示す状態から系列番号1のデータが出力される場合の動作について説明する。
制御部11は、出力対象となるデータ系列の先頭ポインタの値を抽出する(ステップS21)。図11(b)に示すように系列番号1の先頭ポインタの値は“0”である。従って、ここでは、“0”が抽出される。
そして、制御部11は、ステップS21にて抽出した値が示すポインタリストメモリ14のアドレスに対応する記憶領域からデータを読み出して出力する(ステップS22)。ここでは、データメモリ12の複数の記憶領域のうち、ポインタリストメモリ14のアドレス0に対応する記憶領域からデータが読み出されて出力される。
次に、制御部11は、出力対象のデータ系列の先頭ポインタの値を、ステップS21にて抽出した値が示すアドレスに記憶された値に更新する(ステップS23)。ここでは、系列番号1の先頭ポインタの値が“0”から“2”に更新される。
次に、制御部11は、ステップS21にて抽出した値が示すアドレスに記憶された値を“END”に更新する(ステップS24)。ここでは、ポインタリストメモリ14のアドレス0に記憶された値が“2”から“END”に更新される。
次に、制御部11は、空き系列の末尾ポインタの値が示すアドレスに記憶された値を“END”から、ステップS21にて抽出した値に更新する(ステップS25)。ここでは、ポインタリストメモリ14のアドレス7に記憶された値が“END”から“0”に更新される。
次に、制御部11は、空き系列の末尾ポインタの値を、ステップS21にて抽出した値に更新する(ステップS26)。ここでは、空き系列の末尾ポインタの値が“7”から“0”に更新される。
なお、上述したステップS23〜S26の動作は、データが出力される度に実行される。
また、上述したステップS21〜S26の動作のうち、ステップS22以外の動作を擬似コードで示すと以下のようになる。
// j=1;
swap=P_head(j); /* swap=0 */
P_head(j)=L(P_head(j)); /* P_head(1)=2 <- 0 */
L(P_head(j))=END; /* L(0)=END <- 2 */
L(P_tail(0))=swap; /* L(7)=0 <- END */
P_tail(0)=swap; /* P_tail(0)=0 */
なお、ここでは、系列番号1のデータを出力した場合について説明したが、他のデータ系列のデータを出力した場合でも、上述したのと同様の動作により、出力されたデータが記憶されていた記憶領域を空き記憶領域として設定することができる。
図13は、図11に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリ14を示す図、(b)は先頭ポインタ表51及び末尾ポインタ表52を示す図である。図13は、図11に示した状態の後、系列番号1の最初のデータが出力されたときの状態を示している。つまり、図13は、図11に示した状態の後、図12を参照しながら説明した動作が行われた後の状態を示している。
図13と図11とを比較すると、系列番号0の末尾ポインタの値が“7”から“0”に更新されている。つまり、アドレス0に対応する記憶領域が空き記憶領域として設定されたことになる。
ここで、任意のデータ系列において、記憶された全てのデータの出力を完了した後には、そのデータ系列の先頭ポインタ及び末尾ポインタの値が“empty”になっている必要がある。
図13に示した状態において系列番号5のデータ系列に属するデータは、ポインタリストメモリ14のアドレス3に対応する記憶領域にだけ記憶されている。この場合、系列番号5のデータ系列に属するデータを出力した後に、系列番号5の先頭ポインタ及び末尾ポインタの値を“empty”とするためには、出力されたデータが記憶されていた記憶領域に対応するアドレスに記憶されている値が“END”であるかどうかを判定する動作を、上述した動作に追加すればよい。
出力されたデータが記憶されていた記憶領域に対応するアドレスに記憶されている値が“END”であるかどうかを判定する動作を、上述した動作に追加した動作を擬似コードで示すと以下のようになる。ここでは、図13に示した状態において、系列番号5のデータ系列に属するデータが出力される場合を一例として示している。
// i=5;
swap=P_head(i); /* swap=3 */
tmp=L(P_head(i)); /* tmp=END */
if(tmp==END){
P_head(i)=empty;
P_tail(i)=empty;
} /* P_head(5)=END <- END */
else{
P_head(i)=tmp;
L(P_head(i))=END; /* L(P_head(i))=END <- END */
} /* P_head(5)=END <- END */
L(P_tail(0))=swap; /* L(7)=0 <- END */
P_tail(0)=swap; /* P_tail(0)=0 */
図14は、図13に示した状態の後の状態の一例を示す図であり、(a)はポインタリストメモリ14を示す図、(b)は先頭ポインタ表51及び末尾ポインタ表52を示す図である。図14は、図13に示した状態の後、系列番号5のデータが出力されたときの状態を示している。
図14と図13とを比較すると、ポインタリストメモリ14のアドレス3に記憶された値は“END”のままであるが、アドレス0に記憶された値が“END”から“3”へ変更されている。また、空き系列の末尾ポインタの値が“7”から“3”に更新されている。つまり、ポインタリストメモリ14のアドレス3に対応する記憶領域が空き記憶領域として設定されている。また、図14においては、系列番号5の先頭ポインタ及び末尾ポインタの値が“3”から“empty”に更新されている。
このように本実施形態においては、受け付けられたデータが属するデータ系列のデータがデータメモリ12に記憶されていない場合、空き記憶領域の1つに当該データが記憶されるとともに、当該記憶領域が、当該データ系列において最初に受け付けられたデータが記憶された先頭記憶領域として設定される。一方、受け付けられたデータが属するデータ系列のデータがデータメモリ12に記憶されている場合、当該データ系列において当該データの1つ前に受け付けられたデータが記憶された記憶領域と、空き記憶領域の1つとが対応付けられ、当該空き記憶領域に当該データが記憶される。
これにより、データの先入れ先だしをデータ系列毎に実現するために、複数のデータ系列のそれぞれと複数のキューのそれぞれとを固定的に対応付ける必要がない。
従って、データを記憶するための記憶容量の増大を抑制しつつ、データの先入れ先出しをデータ系列毎に実現することができる。
なお、本実施形態においては、ポインタリストメモリ14とデータメモリ12とが別々のメモリとして実装されている場合について説明したが、これらは、1つのメモリに組み合わせて実装されていてもよい。
また、本発明においては、データ入出力装置内の処理は上述の専用のハードウェアにより実現されるもの以外に、その機能を実現するためのプログラムをデータ入出力装置にて読取可能な記録媒体に記録し、この記録媒体に記録されたプログラムをデータ入出力装置に読み込ませ、実行するものであっても良い。データ入出力装置にて読取可能な記録媒体とは、フレキシブルディスク、光磁気ディスク、DVD、CDなどの移設可能な記録媒体の他、データ入出力装置に内蔵されたHDDなどを指す。また、この記録媒体に記録されたプログラムをネットワークを介して提供することも可能である。
10 データ入出力装置
11 制御部
12 データメモリ
13 入力バッファ
14 ポインタリストメモリ
51 先頭ポインタ表
52 末尾ポインタ表

Claims (5)

  1. 複数のデータ系列のいずれかに属する複数のデータの入力を1つずつ受け付け、該受け付けたデータを前記複数のデータ系列毎に先入れ先出し方式で出力するデータ入出力装置であって、
    前記受け付けた複数のデータを1つずつ記憶する複数の記憶領域からなるデータメモリと、
    前記記憶領域を特定するアドレス毎に、当該記憶領域に記憶されたデータと同じデータ系列に属する1つ後に受け付けたデータがある場合は、当該1つ後に受け付けたデータが記憶された記憶領域を特定するアドレスを表す値を対応付けて記憶し、当該1つ後に受け付けたデータがない場合は、当該データ系列におけるデータの終了を表す終了値を対応付けて記憶するポインタリストメモリと、
    前記データ系列毎に、当該データ系列に属するデータが前記データメモリに記憶されている場合は、当該データ系列に属する最初に受け付けたデータが記憶された前記記憶領域を特定するアドレスを表す値を対応付けて記憶する先頭ポインタ表と、
    前記データ系列毎に、当該データ系列に属するデータが前記データメモリに記憶されている場合は、当該データ系列に属する最後に受け付けたデータが記憶された前記記憶領域を特定するアドレスを表す値を対応付けて記憶する末尾ポインタ表と、
    前記データメモリにデータを記憶させる動作、または前記データメモリに記憶されたデータを読み出して出力する動作を制御する制御部と、を有し、
    前記制御部は、
    前記複数の記憶領域のうち、前記データが記憶されていない記憶領域を空き記憶領域として設定し、
    前記データを受け付けた場合に、
    前記末尾ポインタ表に基づいて、当該データと同じデータ系列に属するデータが前記データメモリに記憶されているか否かを判断し、
    当該データと同じデータ系列に属するデータが前記データメモリに記憶されていなければ
    前記データメモリにおいて、前記空き記憶領域1つに当該データを記憶させ
    前記ポインタリストメモリにおいて、当該データを記憶させた記憶領域を特定するアドレスに対応付けて、前記終了値を記憶させ
    前記先頭ポインタ表および前記末尾ポインタ表において、当該データ系列に対応付けて、当該データ記憶さた記憶領域を特定するアドレスを表す値を記憶させ
    当該データと同じデータ系列に属するデータが前記データメモリに記憶されていれば
    前記ポインタリストメモリにおいて、当該データ系列に属する当該データの1つ前に受け付けたデータが記憶された記憶領域を特定するアドレスに対応付けて、前記空き記憶領域の1つを特定するアドレスの値を記憶させ、当該空き記憶領域を特定するアドレスに対応付けて、前記終了値を記憶させ、
    前記末尾ポインタ表において、当該データ系列に対応付けて、当該空き記憶領域を特定するアドレスを表す値を記憶させ、
    前記データメモリにおいて、当該空き記憶領域に当該データを記憶させるデータ入出力装置。
  2. 請求項1に記載のデータ入出力装置において、
    前記制御部は、
    前記データを出力する場合に、
    前記先頭ポインタ表において、当該データが属するデータ系列に対応付けられた値を抽出し、
    前記データメモリにおいて、前記先頭ポインタ表で抽出された値が表すアドレスが特定する前記記憶領域から当該データを読み出して出力するとともに、当該記憶領域を前記空き記憶領域として設定し、
    前記ポインタリストメモリにおいて、前記先頭ポインタ表で抽出された値が表すアドレスに対応付けられた値を抽出するとともに、当該アドレスに対応付けられた値を前記終了値に更新し、
    前記先頭ポインタ表において、当該データ系列に対応付けられた値を前記ポインタリストメモリで抽出された値に更新するデータ入出力装置。
  3. 複数の記憶領域からなるデータメモリと、ポインタリストメモリと、先頭ポインタ表と、末尾ポインタ表と、制御部とを有し、複数のデータ系列のいずれかに属する複数のデータの入力を1つずつ受け付け、前記制御部の制御に従って、該受け付けた複数のデータを前記複数の記憶領域に1つずつ記憶させ、該記憶されたデータを前記複数のデータ系列毎に先入れ先出し方式で出力するデータ入出力装置におけるデータ記憶方法であって、
    前記ポインタリストメモリが、前記記憶領域を特定するアドレス毎に、当該記憶領域に記憶されたデータと同じデータ系列に属する1つ後に受け付けたデータがある場合は、当該1つ後に受け付けたデータが記憶された記憶領域を特定するアドレスを表す値を対応付けて記憶し、当該1つ後に受け付けたデータがない場合は、当該データ系列におけるデータの終了を表す終了値を対応付けて記憶し、
    前記先頭ポインタ表が、前記データ系列毎に、当該データ系列に属するデータが前記データメモリに記憶されている場合は、当該データ系列に属する最初に受け付けたデータが記憶された前記記憶領域を特定するアドレスを表す値を対応付けて記憶し、
    前記末尾ポインタ表が、前記データ系列毎に、当該データ系列に属するデータが前記データメモリに記憶されている場合は、当該データ系列に属する最後に受け付けたデータが記憶された前記記憶領域を特定するアドレスを表す値を対応付けて記憶し、
    前記制御部が、
    前記複数の記憶領域のうち、前記データが記憶されていない記憶領域を空き記憶領域として設定する処理と、
    前記データを受け付けた場合に、
    前記末尾ポインタ表に基づいて、当該データと同じデータ系列に属するデータが前記データメモリに記憶されているか否かを判断する処理と、
    当該データと同じデータ系列に属するデータが前記データメモリに記憶されていなければ
    前記データメモリにおいて、前記空き記憶領域1つに当該データを記憶させる処理と、
    前記ポインタリストメモリにおいて、当該データを記憶させた記憶領域を特定するアドレスに対応付けて、前記終了値を記憶させる処理と
    前記先頭ポインタ表および前記末尾ポインタ表において、当該データ系列に対応付けて、当該データ記憶さた記憶領域を特定するアドレスを表す値を記憶させる処理と、
    当該データと同じデータ系列に属するデータが前記データメモリに記憶されていれば
    前記ポインタリストメモリにおいて、当該データ系列に属する当該データの1つ前に受け付けたデータが記憶された記憶領域を特定するアドレスに対応付けて、前記空き記憶領域の1つを特定するアドレスの値を記憶させ、当該空き記憶領域を特定するアドレスに対応付けて、前記終了値を記憶させる処理と、
    前記末尾ポインタ表において、当該データ系列に対応付けて、当該空き記憶領域を特定するアドレスを表す値を記憶させる処理と、
    前記データメモリにおいて、当該空き記憶領域に当該データを記憶させる処理と、を実行するデータ記憶方法。
  4. 請求項3に記載のデータ記憶方法において、
    前記制御部が、
    前記データを出力する場合に、
    前記先頭ポインタ表において、当該データが属するデータ系列に対応付けられた値を抽出する処理と、
    前記データメモリにおいて、前記先頭ポインタ表で抽出された値が表すアドレスが特定する前記記憶領域から当該データを読み出して出力するとともに、当該記憶領域を前記空き記憶領域として設定する処理と、
    前記ポインタリストメモリにおいて、前記先頭ポインタ表で抽出された値が表すアドレスに対応付けられた値を抽出するとともに、当該アドレスに対応付けられた値を前記終了値に更新する処理と、
    前記先頭ポインタ表において、当該データ系列に対応付けられた値を前記ポインタリストメモリで抽出された値に更新する処理と、を実行するデータ記憶方法。
  5. 複数の記憶領域からなるデータメモリと、ポインタリストメモリと、先頭ポインタ表と、末尾ポインタ表と、制御部とを有するコンピュータを、複数のデータ系列のいずれかに属する複数のデータの入力を1つずつ受け付け、前記制御部の制御に従って、該受け付けた複数のデータを前記複数の記憶領域に1つずつ記憶させ、該記憶されたデータを前記複数のデータ系列毎に先入れ先出し方式で出力するデータ入出力装置として機能させるためのプログラムであって
    前記ポインタリストメモリに、前記記憶領域を特定するアドレス毎に、当該記憶領域に記憶されたデータと同じデータ系列に属する1つ後に受け付けたデータがある場合は、当該1つ後に受け付けたデータが記憶された記憶領域を特定するアドレスを表す値を対応付けて記憶させ、当該1つ後に受け付けたデータがない場合は、当該データ系列におけるデータの終了を表す終了値を対応付けて記憶させ、
    前記先頭ポインタ表に、前記データ系列毎に、当該データ系列に属するデータが前記データメモリに記憶されている場合は、当該データ系列に属する最初に受け付けたデータが記憶された前記記憶領域を特定するアドレスを表す値を対応付けて記憶させ、
    前記末尾ポインタ表に、前記データ系列毎に、当該データ系列に属するデータが前記データメモリに記憶されている場合は、当該データ系列に属する最後に受け付けたデータが記憶された前記記憶領域を特定するアドレスを表す値を対応付けて記憶させ、
    前記制御部に、請求項または請求項に記載の各処理を実行させるためのプログラム。
JP2010120470A 2010-05-26 2010-05-26 データ入出力装置、データ記憶方法及びプログラム Expired - Fee Related JP5491282B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010120470A JP5491282B2 (ja) 2010-05-26 2010-05-26 データ入出力装置、データ記憶方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010120470A JP5491282B2 (ja) 2010-05-26 2010-05-26 データ入出力装置、データ記憶方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2011248586A JP2011248586A (ja) 2011-12-08
JP5491282B2 true JP5491282B2 (ja) 2014-05-14

Family

ID=45413771

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010120470A Expired - Fee Related JP5491282B2 (ja) 2010-05-26 2010-05-26 データ入出力装置、データ記憶方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5491282B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112061020A (zh) * 2015-04-10 2020-12-11 麦克赛尔株式会社 车辆

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3169511B2 (ja) * 1994-03-10 2001-05-28 三菱電機株式会社 メモリ装置及びメモリ管理方法
JP3287529B2 (ja) * 1995-08-02 2002-06-04 日本電信電話株式会社 トラヒックシェイピング装置
JPWO2004077299A1 (ja) * 2003-02-27 2006-06-08 富士通株式会社 キャッシュメモリ
US7802032B2 (en) * 2006-11-13 2010-09-21 International Business Machines Corporation Concurrent, non-blocking, lock-free queue and method, apparatus, and computer program product for implementing same
JP5207374B2 (ja) * 2008-10-01 2013-06-12 日本電信電話株式会社 データ処理装置

Also Published As

Publication number Publication date
JP2011248586A (ja) 2011-12-08

Similar Documents

Publication Publication Date Title
CN108733344B (zh) 数据读写方法、装置以及环形队列
US20150186068A1 (en) Command queuing using linked list queues
US20150067291A1 (en) Controller, memory system, and method
JP5842768B2 (ja) 重複除去装置、重複除去方法及び重複除去プログラム
JP2010027032A (ja) Fifo装置及びfifoバッファへのデータ格納方法
CN106502922B (zh) 一种fifo数据缓存器的数据读写方法及数据缓存器
EP3206123B1 (en) Data caching method and device, and storage medium
JP7074839B2 (ja) パケット処理
WO2016070668A1 (zh) 一种实现数据格式转换的方法、装置及计算机存储介质
KR101481898B1 (ko) Ssd의 명령어 큐 스케줄링 장치 및 방법
JP4855864B2 (ja) ダイレクトメモリアクセスコントローラ
JP2008033721A (ja) Dma転送制御装置
US20020169900A1 (en) Direct memory access controller, and direct memory access control method
US8812787B2 (en) Router and many-core system
JP5491282B2 (ja) データ入出力装置、データ記憶方法及びプログラム
CN105264608B (zh) 存储数据的方法、内存控制器和中央处理器
US20170003890A1 (en) Device, program, recording medium, and method for extending service life of memory
US8473649B2 (en) Command management device configured to store and manage received commands and storage apparatus with the same
JP5379075B2 (ja) データ入出力装置、データ記憶方法及びプログラム
JP5982148B2 (ja) 半導体記憶装置
CN111414148A (zh) 面向高性能处理器的混合型fifo数据存储方法及装置
US10331369B2 (en) Array control program, array control method, and array control apparatus
JP2007140858A (ja) メモリアクセス方法及びメモリアクセス装置
JP7006063B2 (ja) メモリ制御装置及びメモリ制御方法
KR101667602B1 (ko) 태깅 및 언태깅의 제어가 가능한 선입선출 메모리 장치 및 이를 이용한 데이터 출력 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120831

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7426

Effective date: 20130304

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140203

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: 20140225

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140227

R150 Certificate of patent or registration of utility model

Ref document number: 5491282

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees