(57)【要約】【課題】本発明は、任意のデータ長を有するデータの入力を受けてそのデータを記憶し、その記憶したデータを入力順に出力する記憶装置に関し、データ領域に記憶された、任意のデータ長を有するデータの領域解放処理を高速に実行することのできる記憶装置を提供することを目的とする。【解決手段】データの入力によってライトポインタ１２のライト位置が変更される度に、変更前のライト位置を追加的に保存する開始位置ポインタ１５を備えており、領域解放の際には、保存されたライト位置と、解放されるデータ数とに基づいて新たなリード位置が求められる。【選択図】        図１
2006049957.tif 000002
【特許請求の範囲】
【請求項１】
任意のデータ長を有するデータの入力を受けて該データを記憶し、その記憶したデータを入力順に出力する記憶装置において、
データが格納されるデータ領域を有するデータ格納部と、
前記データ領域中の、次にデータが格納されるライト位置を記憶するライトポインタと、
前記データの入力を受けて該データを、前記データ領域中の、前記ライトポインタが記憶するライト位置に格納するデータ入力部と、
前記データ入力部によってデータが格納される度に、前記ライトポインタが記憶するライト位置を、格納されたデータのデータ長に相当する分だけ変更するライトポインタ制御部と、
前記ライトポインタ制御部によって前記ライト位置が変更される度に、変更前のライト位置を追加的に保存するライト位置履歴保存部と、
前記データ領域中の、次にデータが読み出されるリード位置を記憶するリードポインタと、
前記データ領域に格納されているデータを、該データ領域中の、前記リードポインタが記憶するリード位置から入力順に読み出して出力するデータ出力部と、
データ数を指定して該データ数分の領域解放を求める通知を受けて、前記ライト位置履歴保存部に保存されているライト位置を、該通知で指定されたデータ数と同じ数だけ、保存された順に消去し、残ったライト位置のうち最先に保存されたライト位置を前記リードポインタに新たなリード位置として記憶させるリードポインタ制御部とを備えたことを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、任意のデータ長を有するデータの入力を受けてそのデータを記憶し、その記憶したデータを入力順に出力する記憶装置に関する。
【背景技術】
【０００２】
近年、インターネット等に代表されるネットワーク上でのパケット通信やデジタルカメラで得られた画像データの通信などといった様々なデータ通信が広く行われている。このようなデータ通信では、データの送信時においてエラーが発生した際にデータを再送信するために、送信したデータが一時的に記憶される、いわゆるバッファ装置が用いられている（例えば、特許文献１参照。）。
【０００３】
例えば、ＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠したパケット通信では、任意のデータ長を有するパケットデータを送受信することができ、このパケット通信の際に用いられるバッファ装置は、任意のデータ長を有する複数のパケットデータを一時的に記憶することができる。
【０００４】
図４は、従来のバッファ装置についての一実施形態を示す概略構成図である。
【０００５】
この図４に示すバッファ装置は、ＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠したパケット通信の際に用いられて、任意のデータ長を有するパケットデータの入力を受けてそのパケットデータを記憶し、その記憶したパケットデータを入力順に出力するものである。このバッファ装置５０には、データバッファ５１と、ライトポインタ５２と、リードポインタ５３と、データ入力制御回路５４と、ライトポインタ制御回路５５と、データ出力制御回路５６と、リードポインタ制御回路５７とが備えられている。
【０００６】
この図４に示すバッファ装置５０のデータバッファ５１は、パケットデータが格納されるデータ領域を有するものである。また、このデータ領域の容量は２のべき乗で表される。
【０００７】
また、ライトポインタ５２は、データバッファ５１のデータ領域中の、次にパケットデータが格納されるライト位置を記憶するものである。
【０００８】
また、リードポインタ５３は、データバッファ５１のデータ領域中の、次にパケットデータが読み出されるリード位置を記憶するものである。
【０００９】
ここで、データッファ５１のデータ領域にパケットデータが入力されるにあたっては、そのデータ領域のうちの空きデータ領域の容量と、入力されるパケットデータのデータ長とが比較される。上述したように、データッファ５１のデータ領域の容量が２のべき乗で表されることから、空きデータ領域の容量は、下記（１）式が２進法で解かれることで求められる。
【００１０】
（空きデータ領域の容量）＝（データ領域の容量）−（ライトポインタ）＋（リードポインタ）      ……（１）
また、データ入力制御回路５４は、パケットデータの入力を受けて、上記（１）式にて空きデータ領域容量を求め、求めた空きデータ領域容量が、入力されたパケットデータのデータ長よりも大きい場合には、そのパケットデータを、データバッファ５１のデータ領域中の、ライトポインタ５２が記憶するライト位置に格納するものである。
【００１１】
また、ライトポインタ制御回路５５は、データ入力制御回路５４によってパケットデータが格納される度に、ライトポインタ５２が記憶するライト位置を、格納されたパケットデータのデータ長に相当する分だけ変更するものである。
【００１２】
また、データ出力制御回路５６は、データバッファ５１のデータ領域に格納されているパケットデータを、そのデータ領域中の、リードポインタ５３が記憶するリード位置から入力順に読み出して出力するものである。
【００１３】
さらに、リードポインタ制御回路５７は、データ出力制御回路５６によってパケットデータが出力された後、このパケットデータを受信した外部装置からの、正常にこのパケットデータが受信されたことを表すとともに、データ数を指定してそのデータ数分の領域解放を求める通知（以下、この通知をＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ）通知と称する）を受けて、リードポインタ５３が記憶するリード位置を、その通知で指定されたパケットデータのデータ長に相当する分だけ変更することによって、このパケットデータが格納されていたデータ領域を解放するものである。
【特許文献１】特開平５−２４１９３６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
ここで、任意のデータ長を有するパケットデータには、このパケットデータのヘッダ部にデータ長を表すデータ長情報が付加されている。
【００１５】
図４に示す従来のバッファ装置５０のリードポインタ制御回路５７においては、外部装置からの、上述したＡＣＫ通知を受けて、指定されたパケットデータのヘッダ部に付加されているデータ長情報が読み出され、読み出されたデータ長情報が表すデータ長に相当する分だけリード位置が変更される。従って、この従来のバッファ装置５０では、データバッファ５１のデータ領域からパケットデータを解放する度にデータ長の読み出しが行われるため、処理時間が掛かってしまうという問題がある。
【００１６】
また、ＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠したパケット通信では、複数のパケットデータに対する通知がまとめて実行されることが許容されている。このような場合に、リードポインタ制御回路５７においては、通知を受けて指定された複数のパケットデータのうちの、データバッファ５１のデータ領域に最先に格納されたパケットデータのヘッダ部に付加されているデータ長情報が読み出され、そのデータ長情報が表すデータ長に基づいて、次のパケットデータの先頭位置が求められる。そして、求められた先頭位置から次のパケットデータのデータ長情報が読み出されるという処理が繰り返されることとなり、データバッファ５１のデータ領域からパケットデータを解放するのに要する処理時間が更に長く掛かってしまい、その結果、通信速度の低下を来たすという問題を生じるおそれもある。
【００１７】
本発明は上記問題点を解決し、データ領域に記憶された、任意のデータ長を有するデータの領域解放処理を高速に実行することのできる記憶装置を提供することを目的とするものである。
【課題を解決するための手段】
【００１８】
上記目的を達成する本発明の記憶装置は、
任意のデータ長を有するデータの入力を受けてこのデータを記憶し、その記憶したデータを入力順に出力する記憶装置において、
データが格納されるデータ領域を有するデータ格納部と、
上記データ領域中の、次にデータが格納されるライト位置を記憶するライトポインタと、
上記データの入力を受けてそのデータを、上記データ領域中の、上記ライトポインタが記憶するライト位置に格納するデータ入力部と、
上記データ入力部によってデータが格納される度に、上記ライトポインタが記憶するライト位置を、格納されたデータのデータ長に相当する分だけ変更するライトポインタ制御部と、
上記ライトポインタ制御部によって上記ライト位置が変更される度に、変更前のライト位置を追加的に保存するライト位置履歴保存部と、
上記データ領域中の、次にデータが読み出されるリード位置を記憶するリードポインタと、
上記データ領域に格納されているデータを、そのデータ領域中の、上記リードポインタが記憶するリード位置から入力順に読み出して出力するデータ出力部と、
データ数を指定してそのデータ数分の領域解放を求める通知を受けて、上記ライト位置履歴保存部に保存されているライト位置を、その通知で指定されたデータ数と同じ数だけ、保存された順に消去し、残ったライト位置のうち最先に保存されたライト位置を上記リードポインタに新たなリード位置として記憶させるリードポインタ制御部とを備えたことを特徴とする。
【００１９】
本発明の記憶装置は、データの入力によってライトポインタのライト位置が変更される度に、変更前のライト位置を追加的に保存するライト位置履歴保存部を備えており、領域解放の際には、保存されたライト位置と、解放されるデータ数とに基づいて新たなリード位置が求められる。従って、「背景技術」の欄および「発明が解決しようとする課題」の欄で説明した従来のバッファ装置で行われていたような、データのヘッダ部に付加されているデータ長情報を読み出す処理や、データ長に基づいて次のデータの先頭位置を求める処理が不要なため、本発明の記憶装置によれば、任意のデータ長を有するデータの領域解放処理を高速に実行することができる。
【発明の効果】
【００２０】
本発明によれば、データ領域に記憶された、任意のデータ長を有するデータの領域解放処理を高速に実行することのできる記憶装置が提供される。
【発明を実施するための最良の形態】
【００２１】
以下図面を参照して本発明の実施の形態を説明する。
【００２２】
図１は、本発明の記憶装置の一実施形態に相当するバッファ装置の概略構成図である。
【００２３】
この図１に示すバッファ装置１０には、データバッファ１１と、ライトポインタ１２と、データ入力制御回路１３と、ライトポインタ制御回路１４と、開始位置ポインタ１５と、リードポインタ１６と、データ出力制御回路１７と、リードポインタ制御回路１８とが備えられている。
【００２４】
このバッファ装置１０は、ＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠したパケット通信の際に用いられるものである。
【００２５】
ここでは、このバッファ装置１０の各要素の概念的な作用について説明し、これら各要素の具体的な作用については後述する。
【００２６】
この図１に示すバッファ装置１０のデータバッファ１１は、本発明にいうデータの一例に相当するパケットデータが格納されるデータ領域を有するものであって、このデータバッファ１１は、本発明にいうデータ格納部の一例に相当するものである。また、このデータ領域の容量は２のべき乗で表される。
【００２７】
また、ライトポインタ１２は、データバッファ１１のデータ領域中の、次にパケットデータが格納されるライト位置を記憶するものであって、このライトポインタ１２は、本発明にいうライトポインタの一例に相当するものである。
【００２８】
また、データ入力制御回路１３は、パケットデータの入力を受けて空きデータ領域容量を求め、求めた空きデータ領域容量が、入力されたパケットデータのデータ長よりも大きい場合には、そのパケットデータを、データバッファ１１のデータ領域中の、ライトポインタ１２が記憶するライト位置に格納するものであって、このデータ入力制御回路１３は、本発明にいうデータ入力部の一例に相当するものである。
【００２９】
また、ライトポインタ制御回路１４は、データ入力制御回路１３によってパケットデータが格納される度に、ライトポインタ１２が記憶するライト位置を、格納されたパケットデータのデータ長に相当する分だけ変更するものであって、このライトポインタ制御回路１４は、本発明にいうライトポインタ制御部の一例に相当するものである。
【００３０】
また、開始位置ポインタ１５は、ライトポインタ１２で記憶されたライト位置がライトポインタ制御回路１４によって変更される度に、変更前のライト位置を追加的に保存するものであって、この開始位置ポインタ１５は、本発明にいうライト位置履歴保存部の一例に相当するものである。
【００３１】
また、リードポインタ１６は、データバッファ１１のデータ領域中の、次にパケットデータが読み出されるリード位置を記憶するものであって、この開始位置ポインタ１５は、本発明にいうリードポインタの一例に相当するものである。
【００３２】
また、データ出力制御回路１７は、データバッファ１１のデータ領域に格納されているパケットデータを、そのデータ領域中の、リードポインタ１６が記憶するリード位置から入力順に読み出して出力するものであって、このデータ出力制御回路１７は、本発明にいうデータ出力部の一例に相当するものである。
【００３３】
さらに、リードポインタ制御回路１８は、データ数を指定してそのデータ数分の領域解放を求める通知を受けて、開始位置ポインタ１５に保存されているライト位置を、その通知で指定されたデータ数と同じ数だけ、保存された順に消去し、残ったライト位置のうち最先に保存されたライト位置をリードポインタ１６に新たなリード位置として記憶させるものであって、このリードポインタ制御回路１８は、本発明にいうリードポインタ制御部の一例に相当するものである。
【００３４】
以下、図１に示すバッファ装置１０の実施形態をさらに具体的に説明する。
【００３５】
以下では、図１に示すバッファ装置１０のデータバッファ１１のデータ領域にパケットデータが格納されていない状態から、このデータ領域に、任意のデータ長を有するパケットデータがそのデータ領域に順次格納され、データ領域に格納された複数のパケットデータが、図示しない外部装置に出力された後にデータ領域が解放される例を、図１〜図３を参照して説明する。尚、ここでは、説明の簡単のために、データ長の単位とアドレスの単位とを同一の単位で説明する。
【００３６】
図２は、図１に示すバッファ装置のデータバッファのデータ領域にパケットデータが格納された状態を示す模式図であり、図３は、このデータ領域におけるパケットデータ格納状態毎の、ライトポインタ、リードポインタ、および開始位置ポインタそれぞれによって記憶された数値の一覧表である。
【００３７】
上述したように、最初は、図１に示すデータバッファ１１のデータ領域にはパケットデータが格納されていないため、図３に示す「初期状態」のように、ライトポインタ１２が記憶するライト位置の数値２０、およびリードポインタ１６が記憶するリード位置の数値３０は共に「０」となっており、開始位置ポインタ１５によって追加的に保存されるライト位置の数値４０はまだ存在しない。
【００３８】
ここで、データッファ１１のデータ領域にパケットデータが入力されるにあたっては、そのデータ領域のうちの空きデータ領域の容量と、入力されるパケットデータのデータ長とが比較される。上述したように、データッファ１１のデータ領域の容量が２のべき乗で表されることから、空きデータ領域の容量は、下記（２）式が２進法で解かれることで求められる。
【００３９】
（空きデータ領域の容量）＝（データ領域の容量）−（ライトポインタ）＋（リードポインタ）      ……（２）
まず、図１に示すバッファ装置１０に、データ長が「１０」のパケットデータ＜１＞が入力されると、データ入力制御回路１３において、上記（２）式にて空きデータ領域容量が求められ、求められた空きデータ領域容量が、入力されたパケットデータ＜１＞のデータ長「１０」よりも大きい場合には、このパケットデータ＜１＞が、データバッファ１１のデータ領域中の、ライトポインタ１２が記憶するライト位置「０」に格納される。このパケットデータ＜１＞のデータ長は「１０」であるため、図２に示すように、このパケットデータ＜１＞は、データバッファ１１の、ライト位置「０」に相応する「アドレス０」から「アドレス９」のデータ領域１１１に格納される。また、データ入力制御回路１３によってパケットデータ＜１＞が格納されると、ライトポインタ制御回路１４によって、ライトポインタ１２が記憶するライト位置が、格納されたパケットデータのデータ長に相当する分である「１０」だけ変更され、図３に示す「パケットデータ＜１＞格納状態」のように、ライト位置の数値２０が「１０」となる。さらに、ライトポインタ１２で記憶されたライト位置がライトポインタ制御回路１４によって変更されたことを受けて、ライト位置の数値４０として、変更前のライト位置「０」が開始位置ポインタ１５によって保存される。
【００４０】
次に、図１に示すバッファ装置１０に、データ長が「２０」のパケットデータ＜２＞が入力されると、データ入力制御回路１３において、上記（２）式にて空きデータ領域容量が求められ、求められた空きデータ領域容量が、入力されたパケットデータ＜２＞のデータ長「２０」よりも大きい場合には、このパケットデータ＜２＞が、データバッファ１１のデータ領域中の、ライトポインタ１２が記憶するライト位置「１０」に格納される。このパケットデータ＜２＞のデータ長は「２０」であるため、図２に示すように、このパケットデータ＜２＞は、データバッファ１１の、ライト位置「１０」に相応する「アドレス１０」から「アドレス２９」のデータ領域１１２に格納される。また、データ入力制御回路１３によってパケットデータ＜２＞が格納されると、ライトポインタ制御回路１４によって、ライトポインタ１２が記憶するライト位置が、格納されたパケットデータのデータ長に相当する分である「２０」だけ変更され、図３に示す「パケットデータ＜２＞格納状態」のように、ライト位置の数値２０が「３０」となる。さらに、ライトポインタ１２で記憶されたライト位置がライトポインタ制御回路１４によって変更されたことを受けて、変更前のライト位置「１０」が開始位置ポインタ１５によって追加的に保存される。この結果、開始位置ポインタ１５には「０」と「１０」の２つのライト位置の数値４０が保存されていることとなる。
【００４１】
次に、図１に示すバッファ装置１０に、データ長が「１５」のパケットデータ＜３＞が入力されると、データ入力制御回路１３において、上記（２）式にて空きデータ領域容量が求められ、求められた空きデータ領域容量が、入力されたパケットデータ＜３＞のデータ長「１５」よりも大きい場合には、このパケットデータ＜３＞が、データバッファ１１のデータ領域中の、ライトポインタ１２が記憶するライト位置「３０」に格納される。このパケットデータ＜３＞のデータ長は「１５」であるため、図２に示すように、このパケットデータ＜３＞は、データバッファ１１の、ライト位置「３０」に相応する「アドレス３０」から「アドレス４４」のデータ領域１１３に格納される。また、データ入力制御回路１３によってパケットデータ＜３＞が格納されると、ライトポインタ制御回路１４によって、ライトポインタ１２が記憶するライト位置が、格納されたパケットデータのデータ長に相当する分である「１５」だけ変更され、図３に示す「パケットデータ＜３＞格納状態」のように、ライト位置の数値２０が「４５」となる。さらに、ライトポインタ１２で記憶されたライト位置がライトポインタ制御回路１４によって変更されたことを受けて、変更前のライト位置「３０」が開始位置ポインタ１５によって追加的に保存される。この結果、開始位置ポインタ１５には「０」と「１０」と「３０」の３つのライト位置の数値４０が保存されていることとなる。
【００４２】
ここで、図１に示すバッファ装置１０のデータバッファ１１のデータ領域に格納されているパケットデータが、データ出力制御回路１７によって、そのデータ領域から入力順に２つ読み出されて、図示しない外部装置に向けて送信され、その外部装置で正常に受信されたとする。この場合には、その外部装置は、本発明にいう通知の一例に相当する、バッファ装置から送信されたパケットデータが正常に受信されたことを表すとともに、データ数を指定してそのデータ数分の領域解放を求める通知（以下、この通知をＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ）通知と称する）をバッファ装置１０に送ってくる。ここでは、２つのパケットデータが送信されたので、バッファ装置１０は、データ２つ分の領域解放を求めるＡＣＫ通知を受けることとなる。バッファ装置１０がこのＡＣＫ通知を受けると、リードポインタ制御回路１８によって、開始位置ポインタ１５に保存されているライト位置が、このＡＣＫ通知で指定されたデータ数「２」と同じ数だけ、保存された順に消去される。即ち、数値「０」，「１０」が消去されて、図３に示す「パケットデータ＜１＞，＜２＞解放状態」のように、開始位置ポインタの示すライト位置の数値４０として数値「３０」が残る。そして、残ったライト位置の数値４０のうち最先に保存された数値「３０」がリードポインタ１６に新たなリード位置としてコピーされ、その結果、リード位置の数値３０として数値「３０」が記憶される。これにより、パケットデータ＜１＞およびパケットデータ＜２＞が格納されていたデータ領域が解放される。
【００４３】
このように、本実施形態では、領域解放時に、各パケットデータのデータ長の読み出しが不要で、高速な領域解放が実現される。
【００４４】
尚、図１に示すバッファ装置１０からパケットデータが外部装置に向けて送信されたときに一時的な通信エラー等が発生して受信が不正常であった場合には、その外部装置は、バッファ装置から送信された複数のパケットデータのうち全てのパケットデータの受信が不正常であった、あるいは一部後続のパケットデータの受信が不正常であったことを表す通知（以下、この通知をＮＡＣＫ（Ｎｅｇａｔｉｖｅ  Ａｃｋｎｏｗｌｅｄｇｍｅｎｔ）通知と称する）をバッファ装置１０に送ってくる。
【００４５】
外部装置から、全てのパケットデータの受信が不正常であったことを表すＮＡＣＫ通知が送信された場合には、データ出力制御回路１７によって全てのパケットデータが再送信される。この場合ライトポインタ１２、リードポインタ１６、および開始位置ポインタ１５の記憶内容は維持される。
【００４６】
外部装置から、一部後続のパケットデータの受信が不正常であったことを表すＮＡＣＫ通知が送信された場合には、そのＮＡＣＫ通知は、正常に受信されたデータ数を示した通知となっており、正常に受信されたパケットデータの分のデータ領域については、上述した手段と同様の手段、即ち、保存されたライト位置と、解放されるデータ数とに基づいて新たなリード位置が求められることによって領域解放が実行される。また、後続の不正常なパケットデータについては、データ出力制御回路１７によって再送信される。
【００４７】
このように、図示しない外部装置から、一部後続のパケットデータの受信が不正常であったことを表すＮＡＣＫ通知が送信された場合にも、その外部装置で正常に受信された一部のパケットデータに対する領域解放時には、各パケットデータのデータ長の読み出しが不要で、高速な領域解放が実現される。
【００４８】
尚、本実施形態の説明では、ＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠したパケット通信の際に用いられるバッファ装置の例を示したが、本発明は、任意のデータ長を有するデータの入力を受けてそのデータを記憶し、その記憶したデータを入力順に出力する記憶装置であればよい。
【００４９】
また、本実施形態の説明では、本発明にいう通知の例としてＡＣＫ通知を挙げたが、本発明にいう通知は、これに限られるものではなく、データ数を指定してそのデータ数分の領域解放を求める通知であればよい。
【図面の簡単な説明】
【００５０】
【図１】本発明の記憶装置の一実施形態に相当するバッファ装置の概略構成図である。
【図２】図１に示すバッファ装置のデータバッファのデータ領域にパケットデータが格納された状態を示す模式図である。
【図３】図１に示すバッファ装置のデータバッファのデータ領域におけるパケットデータ格納状態毎の、ライトポインタ、リードポインタ、および開始位置ポインタそれぞれによって記憶された数値の一覧表である。
【図４】従来のバッファ装置についての一実施形態を示す概略構成図である。
【符号の説明】
【００５１】
１０    バッファ装置
１１    データバッファ
１１１，１１２，１１３    データ領域
１２    ライトポインタ
１３    データ入力制御回路
１４    ライトポインタ制御回路
１５    開始位置ポインタ
１６    リードポインタ
１７    データ出力制御回路
１８    リードポインタ制御回路
２０    ライト位置の数値
３０    リード位置の数値
４０    開始位置ポインタの数値
５０    バッファ装置
５１    データバッファ
５２    ライトポインタ
５３    リードポインタ
５４    データ入力制御回路
５５    ライトポインタ制御回路
５６    データ出力制御回路
５７    リードポインタ制御回路
【図１】
2006049957.tif 000003
【図２】
2006049957.tif 000004
【図３】
2006049957.tif 000005
【図４】
2006049957.tif 000006