JP2004164202A - データ送受システム、リングバッファ制御方法、制御プログラム - Google Patents
データ送受システム、リングバッファ制御方法、制御プログラム Download PDFInfo
- Publication number
- JP2004164202A JP2004164202A JP2002328406A JP2002328406A JP2004164202A JP 2004164202 A JP2004164202 A JP 2004164202A JP 2002328406 A JP2002328406 A JP 2002328406A JP 2002328406 A JP2002328406 A JP 2002328406A JP 2004164202 A JP2004164202 A JP 2004164202A
- Authority
- JP
- Japan
- Prior art keywords
- ring buffer
- data
- ring
- area
- extended
- 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.)
- Pending
Links
Images
Abstract
【課題】2つの装置間の共有メモリに割り当てられた2つのリングバッファにおいて、各装置による各リングバッファに対するデータの書き込み待ち状態を減らす。
【解決手段】2つのリングバッファに割り当てた2つのメモリ領域の中間に拡張領域を割り当てて、一方のリングバッファについて空きサイズ以上のデータが書き込まれる予定であるか否かを判定し、また、拡張領域の使用状況に基づいて当該リングバッファを拡張することが可能か否かを判定し、各判定が、共に肯定的である場合に当該リングバッファを拡張する。
【選択図】 図3
【解決手段】2つのリングバッファに割り当てた2つのメモリ領域の中間に拡張領域を割り当てて、一方のリングバッファについて空きサイズ以上のデータが書き込まれる予定であるか否かを判定し、また、拡張領域の使用状況に基づいて当該リングバッファを拡張することが可能か否かを判定し、各判定が、共に肯定的である場合に当該リングバッファを拡張する。
【選択図】 図3
Description
【0001】
【発明の属する技術分野】
本発明は、2つの装置間に接続された共有メモリのメモリ領域を、2つのリングバッファに割り当てて、各装置が各リングバッファに対してデータの書き込み及び読み出しを行うことにより装置間のデータ送受が行われるデータ送受システムに関する。
【0002】
【従来の技術】
2つの装置間でデータの送受を行う場合に、これらの装置間に共有メモリを配置して、当該共有メモリを緩衝装置(バッファ)として用いることがある。例えば、下記に示す特許文献では、第1装置と第2装置の間に、共有メモリとしてデュアルポートメモリ(DPM)を配置して、当該DPMを、第1装置が書き込みを行い第2装置が読み出しを行う第1リングバッファ、及び第2装置が書き込みを行い第1装置が読み出しを行う第2リングバッファの2つのリングバッファとして用いて、装置間のデータの送受を行う技術が示されている。装置間で行われるデータ送受の流れの具体的な例としては、一方の装置がある処理の要求を示す要求データを他方の装置に送り、他方の装置は要求された処理を実行して、一方の装置に処理結果(応答データ)を返す、という流れが考えられる。
【0003】
【特許文献】
特許番号第2859178号
【0004】
【発明が解決しようとする課題】
ところで、一方の装置から他方の装置に対する要求データの送信が一時的に急増する場合がある。例えば、上述した第1装置から第2装置に対する要求データの送信が一時的に急増した場合、第1装置により第1リングバッファに対して書き込まれる要求データのデータ量が急増する。そして、第1リングバッファに書き込まれた要求データを第2装置が読み出す速度を上回って、要求データの書き込みが行われ続けると、読み出されていない要求データが第1リングバッファに蓄積され、やがて第1リングバッファに要求データを書き込むための空きサイズがなくなる。空きサイズがなくなると、第1装置は、第1リングバッファに要求データを書き込むことができなくなるため、書き込み待ち状態が発生する。
【0005】
また、第1リングバッファに書き込まれた要求データを第2装置が読み出して、処理を行った結果である応答データを順次第1装置に返す場合においても、第2装置により第2リングバッファに対して書き込まれる応答データのデータ量が急増すると、同様の書き込み待ち状態が発生する。
本発明は、係る課題を解決するためになされたものであって、各リングバッファに対するデータの書き込み待ち状態を減らすことができるデータ送受システム、リングバッファ制御方法及び制御プログラムを提供することを目的とする。
【0006】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るデータ送受システムは、2つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当手段と、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備えることを特徴とする。
【0007】
また、本発明に係るリングバッファ制御方法は、2つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御方法であって、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含むことを特徴とする。
【0008】
また、本発明に係る制御プログラムは、CPUを備える2つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御処理を各装置に行わせるための制御プログラムであって、前記リングバッファ制御処理は、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含むことを特徴とする。
【0009】
【発明の実施の形態】
以下、本発明に係るデータ送受システムの実施の形態について、図面を用いて説明する。
<構成>
図1は、本発明に係るデータ送受システムのブロック構成図である。データ送受システムは、装置1、装置2、共有メモリ3、信号線4等から成る。
【0010】
装置1は、CPU11、メモリ12、入出力部13等を有し、装置2は、CPU21、メモリ22、入出力部23等を有する。装置1及び装置2は、図示していないが、それぞれ、ROM又はハードディスク等の記憶媒体を備えており、当該記憶媒体にリングバッファ制御処理を行うための制御プログラムが記憶され、CPUが、当該制御プログラムに従って動作することにより、リングバッファ制御処理を実現する。リングバッファ制御処理については後述する。
【0011】
CPU11とCPU21は、信号線4を介して接続されており、リングバッファ制御に係る各種通知を互いに送受して、連携してリングバッファ制御処理を行う。
メモリ12及びメモリ22は、後述する変数テーブル及び定数テーブルを記憶している。
【0012】
装置1の入出力部13と共有メモリ3、装置2の入出力部23と共有メモリ3は、それぞれバス接続されており、各装置から一方のリングバッファに対して書き込まれるデータ、及び各装置により一方のリングバッファから読み出されるデータが、各バスを介して送受される。
共有メモリ3はデュアルポートメモリ(DPM)であり、連続したアドレスにより示されるメモリ領域を有しており、前記制御プログラムにより、当該メモリ領域に2つのリングバッファが割り当てられる。ここで、リングバッファについて説明する。
【0013】
リングバッファの領域は、始点(以下、「RS(リングスタート)」という。)及び終点(以下、「RE(リングエンド)」という。)を示すアドレスで表される。RSよりREを上位のアドレスとする。RSからREまでの連続する複数のアドレスは、データを格納するためのブロック位置を示す指標であり、論理アドレス又は物理アドレスのどちらでもよい。また、1ブロックは、例えば、1バイトの記憶容量であってもよいし、256バイトでもよい。
【0014】
各装置は、制御プログラムに従って、ライトポインタ(以下、「WP」という。)が示すアドレスのブロックにデータを書き込み、リードポインタ(以下、「RP」という。)が示すアドレスのブロックに書き込まれたデータを読み出す。WPとRPは、RSとREにより示されるメモリ領域内で下位のアドレスから上位のアドレスに向けて移動する。WPが示すアドレスのブロックにデータが書き込まれると、WPはインクリメントされて次のブロックのアドレスを示す。こうしてデータが書き込まれる毎にWPはインクリメントされる。そしてWPの示すアドレスがREのアドレスまで進み、REのブロックにデータが書き込まれると、次はインクリメントされずに、WPはRSのアドレスを示すように制御される。RPも同様で、RPが示すアドレスのブロックのデータを読み出すと、RPはインクリメントされて次のブロックのアドレスを示し、やがてREのブロックのデータを読み出すと、RPはRSのアドレスを示すように制御される。WP、RPは互いにどちらか一方が示すアドレスを追い越してインクリメントしないように制御される。
【0015】
リングバッファのバッファサイズは、RSとREのアドレスにより示されるメモリ領域の記憶容量である。例えば、RS=1、RE=9とすると、バッファサイズは、9ブロック分の記憶容量となる。また、データを書き込む余地を示す空きサイズは、リングバッファのバッファサイズとWP及びRPが示すアドレスから算出することができる。
【0016】
図2は、装置1のメモリ12及び装置2のメモリ22において、それぞれ記憶管理されている、2つのリングバッファ(第1リングバッファ、第2リングバッファとする。)を制御するための定数と変数のテーブルである。
定数テーブル32に示されるRS1、RE1、RE11、RE12は、第1リングバッファのメモリ領域割当てに用いられる定数であってアドレスを示す。RS22、RS21、RS2、RE2は、第2リングバッファのメモリ領域割当てに用いられる定数であってアドレスを示す。
【0017】
変数テーブル31に示されるbufsize1、RP1、WP1は第1リングバッファに対する書き込み及び読み出し制御に用いられる変数であり、bufsize1は、第1リングバッファのバッファサイズを表す変数、RP1は第1リングバッファ内の、データを読み出すブロックのアドレスを示すポインタ、WP1は第1リングバッファ内の、データを書き込むブロックのアドレスを示すポインタである。bufsize2、RP2、WP2は第2リングバッファに対する書き込み及び読み出し制御に用いられる変数であり、bufsize2は、第2リングバッファのバッファサイズを表す変数、RP2は第2リングバッファ内の、データを読み出すブロックのアドレスを示すポインタ、WP2は第2リングバッファ内の、データを書き込むブロックのアドレスを示すポインタである。
【0018】
図3は、共有メモリのメモリ領域に割り当てられた2つのリングバッファの初期状態を示す図である。1から25までの番号はデータを格納するブロックのアドレスを示す。ここで初期状態とは、各リングバッファに係る変数を初期値とした、各リングバッファの制御状態のことをいい、第1リングバッファの初期状態は、bufsize1が9、RP1が1、WP1が1であり、第2リングバッファの初期状態は、bufsize2が9、RP2が17、WP2が17である。初期状態の第1リングバッファの領域は、アドレス1からアドレス9までの領域であり、初期状態の第2リングバッファの領域は、アドレス17からアドレス25までの領域である。また、第1拡張領域と第2拡張領域の2つの拡張領域が各リングバッファに割り当てたメモリ領域の中間に割り当てられている。
【0019】
本発明に係るデータ送受システムでは、いずれかのリングバッファにおいて、書き込まれたデータが全て読み出された場合に当該リングバッファを初期状態にする処理がなされる。
<動作>
続いて本発明に係るリングバッファ制御処理についてフローチャート図を用いて説明する。リングバッファ制御処理は、各装置に記憶されている制御プログラムに従って、各CPUが通信線4を介して互いに制御情報を通知し合いながら連携して行われる。リングバッファ制御処理には、データ書込処理、リングバッファ拡張処理、データ読出処理、WPインクリメント通知受付処理、RPインクリメント通知受付処理、リングバッファ拡張通知受付処理及びリングバッファ初期化通知受付処理の7つの処理があり、各装置のCPUがこれらの処理を実行する。
【0020】
本実施の形態における、各処理の実行については優先順位が設定されており、リングバッファ初期化通知受付処理を第1優先、リングバッファ拡張処理及びリングバッファ拡張通知受付処理を第2優先、WPインクリメント通知受付処理及びRPインクリメント通知受付処理を第3優先、データ書込処理を第4優先、データ読出処理を第5優先としている。実行中の処理(第1処理とする。)より優先順位が高い処理(第2処理とする。)の要求をCPUが受け付けると、第1処理を中断して第2処理を実行する。中断された第1処理は、第2処理が終了した後、処理を再開する。また、第1処理より優先順位が低い処理及び第1処理と同順位の処理(第3処理とする。)の要求を受け付けた場合は、第1処理を終了した後に、第3処理を実行する。第5優先のデータ読出処理は、他の処理が行われていない間に実行される。
【0021】
以下、装置1のCPU11が実行するこれら7つの処理について説明する。装置2のCPU21が実行する7つの処理については、対象となるリングバッファが異なるだけで、その動作はCPU11が行う処理と同様であるため省略する。
<データ書込処理>
図4は、装置1によるデータ書込処理のフローチャート図である。
【0022】
まず、CPU11は、メモリ12に記憶されている第1リングバッファに係る変数を参照して、第1リングバッファの空きサイズを算出する(ステップS1)。空きサイズは、例えば、bufsize1−{(bufsize1+WP1−RP1)mod bufsize1}という演算により算出できる。続いて、CPU11が受け付けたデータ書込要求から書き込むデータのサイズ(以下、単に「書込データサイズ」という。)を検出して、当該書込データサイズと空きサイズとを比較する。空きサイズが書込データサイズ以上であれば(ステップS2:Yes)、ステップS3をスキップしてステップS4に進む。ステップS2は請求項1に記載の書込可否判定手段に相当するものである。空きサイズが書込データサイズより小さい場合(ステップS2:No)、ステップS3に進み、リングバッファ拡張処理を行う。
【0023】
ステップS4においては、WP1が示すアドレスのブロックにデータの書き込みを行う。当該ブロックの書き込みが終わるとWP1をインクリメントして次のアドレスを示す。また、信号線4を介してCPU21に現在のWP1が示すアドレスを通知する。(ステップS5)。書込データサイズ分のデータの書き込みが終了すると(ステップS5:Yes)、データ書込処理を終了する。書込データサイズ分のデータの書き込みが終了していなければ(ステップS6:No)、ステップS4に戻る。
【0024】
<リングバッファ拡張処理>
図5は、装置1によるリングバッファ拡張処理のフローチャート図である。
まず、CPU11は、メモリ12に記憶されているRP1とWP1を参照して、RP1とWP1の比較を行う。比較した結果、RP1の方がWP1より低位アドレスであれば(ステップS7:Yes)、ステップS8に進む。ステップS7は、請求項3に記載のアドレス判定手段に相当する。比較した結果、RP1の方がWP1より高位アドレスであれば(ステップS7:No)、ステップS14に進む。
【0025】
ステップS8において、第1拡張領域が現在、いずれかのリングバッファの拡張領域として用いられていないかどうかを、メモリ12に記憶されているbufsize1及びbufsize2を参照して判定する。ステップS8は、請求項5に記載の第1判定手段に相当する。bufsize1が13、又はbufsize2が16であれば、第1拡張領域は第1リングバッファ又は第2リングバッファの拡張領域として用いられていることになる。第1拡張領域が使用されていれば(ステップS8:No)、ステップS10に進む。第1拡張領域が不使用であれば(ステップS8:Yes)、ステップS9に進む。
【0026】
ステップS9において、空きサイズと第1拡張領域分のブロックサイズとを加算した値(第1値とする。)と、書き込みデータサイズとを比較して、第1値が書き込みデータサイズ以上の場合(ステップS9:Yes)、ステップS13に進む。一方、第1値が書き込みデータサイズより小さい場合(ステップS9:No)、ステップS10に進む。
【0027】
ステップS10において、第2拡張領域が現在、いずれかのリングバッファの拡張領域として用いられていないかどうかを、メモリ12に記憶されているbufsize1及びbufsize2を参照して判定する。ステップS10は、請求項5に記載の第2判定手段に相当する。bufsize1が16、又はbufsize2が12であれば、第2拡張領域は第1リングバッファ又は第2リングバッファの拡張領域として用いられていることになる。第2拡張領域が使用されていれば(ステップS10:No)、ステップS14に進む。第2拡張領域が使用されていなければ(ステップS10:Yes)、ステップS11に進む。
【0028】
ステップS11において、空きサイズと第1拡張領域分のブロックサイズ及び第2拡張領域分のブロックサイズとを加算した値(第2値とする。)と、書き込みデータサイズとを比較して、第2値が書き込みデータサイズ以上の場合(ステップS11:Yes)、ステップS12に進む。一方、第2値が書き込みデータサイズより小さい場合(ステップS11:No)、ステップS14に進む。
【0029】
ステップS12において、CPU11は第1リングバッファの領域を第2拡張領域まで拡張する。すなわち、メモリ12のbufsize1を16に変更する。また、信号線4を介してCPU21にbufsize1を16に変更する通知である第1リングバッファ拡張通知を行う。その後、リングバッファ拡張処理を終了する。
【0030】
ステップS13において、CPU11は第1リングバッファの領域を第1拡張領域まで拡張する。すなわち、メモリ12のbufsize1を13に変更する。また、信号線4を介してCPU21にbufsize1を13に変更する通知である第1リングバッファ拡張通知を行う。その後、リングバッファ拡張処理を終了する。ステップS12及びステップS13は、請求項5に記載の拡張手段に相当する。
【0031】
ステップS14において、CPU11は、本データ書込要求を保留して次の順番の処理を実行し、当該処理終了後に再度、本データ書込要求を試みるリトライ処理を行い、その後、ステップS15のデータ書込処理に進む。
<データ読出処理>
図6は、装置1によるデータ読出処理のフローチャート図である。
【0032】
まず、ステップS21において、CPU11はRP2が示すアドレスのブロックに書き込まれたデータの読み出しを行う。当該ブロックの読み出しが終わるとRP2をインクリメントして次のアドレスを示す。また、信号線4を介してCPU21にRP2インクリメント通知を行う。(ステップS22)。
続いて、RP2とWP2を参照して、RP2とWP2がイコールでなければ(ステップS23:No)、ステップS21に戻る。RP2とWP2がイコールであれば(ステップS23:Yes)、第2リングバッファを初期状態にする(ステップS24)。このときに、CPU11は、CPU21に対して、信号線4を介してCPU21に第2リングバッファ初期化通知を行う。そして、CPU21から確認信号が返ってきたら初期化を行う。すなわち、メモリ12のbufsize2を9、WP2を17、RP2を17とする。その後、データ読出処理を終了する。ステップS23は、請求項2に記載の全読出判定手段に相当し、ステップS24は、請求項2に記載の初期状態設定手段に相当する。
【0033】
<WPインクリメント通知処理>
図7は、装置1によるWP2インクリメント通知受付処理のフローチャート図である。
まず、CPU11は、CPU21からWP2インクリメント通知を受け付けると、メモリ12のWP2を通知された値に変更する(ステップS31)。その後、WP2インクリメント通知受付処理を終了する。
【0034】
<RPインクリメント通知受付処理>
図8は、装置1によるRP1インクリメント通知受付処理のフローチャート図である。
CPU11は、CPU21からRP1インクリメント通知を受け付けると、メモリ12のRP1を通知された値に変更して(ステップS41)、処理を終了する。
【0035】
<リングバッファ初期化通知受付処理>
図9は、装置1による第1リングバッファ初期化通知受付処理のフローチャート図である。
CPU11は、CPU21から第1リングバッファ初期化通知を受け付けると、メモリ12のbufsize1を13、RP1を1、WP1を1として、第1リングバッファを初期状態とし(ステップS51)、CPU21に対して確認信号を送る。その後、処理を終了する。
【0036】
<リングバッファ拡張通知受付処理>
図10は、装置1による第2リングバッファ拡張通知受付処理のフローチャート図である。
CPU11は、CPU21から第2リングバッファ拡張通知を受け付けると、メモリ12のbufsize2を通知された値に変更して(ステップS61)、処理を終了する。
【0037】
<具体例>
ここで、図11から図15を用いて、データ送受システムの動作の一例について具体的に説明する。図11から図15は、データの書き込み及び読み出し制御による2つのリングバッファの状態変化を時系列で示す図である。装置2によるデータの書き込み及び読み出し速度は、装置1より遅いものとする。
【0038】
まず、図11は、第1リングバッファ、第2リングバッファが共に初期状態であり、第1装置のCPU11は、第1リングバッファに対してデータd1の書き込み要求を受け付けたことを示す。データd1は3ブロック分のデータである。図12において、CPU11はデータ書込処理により、データd1を第1リングバッファに書き込む。その後、データd2の書き込み要求を受け付けたので、再びデータ書込処理を実行する。データd2は7ブロック分のデータである。CPU11は、データd2を書き込むためのデータ書込処理において、現在の第1リングバッファの空きサイズと書込データサイズとを比較し、その結果、リングバッファ拡張処理を実行する。CPU11は、リングバッファ拡張処理において、書込データサイズと第1値とを比較した結果、第1リングバッファを第1拡張領域まで拡張することを決定する。
【0039】
一方、第2装置のCPU21は、CPU11からWP1のインクリメント通知を受け付けて、WPインクリメント通知受付処理を行い、データ読出処理を行う。
図13において、CPU11は、リングバッファ拡張処理により第1拡張領域まで第1リングバッファの領域を拡張し、CPU21に第1リングバッファ拡張通知を行う。その後、拡張した第1リングバッファにデータd2を書き込む処理を行う。
【0040】
データd2の書込処理終了後、CPU11は、データd4の書き込み要求を受け付けたので、再びデータ書込処理を行う。データd4は、6ブロック分のデータである。
CPU11は、データd4を書き込むためのデータ書込処理において、現在の第1バッファの空きサイズと書込データサイズとを比較し、その結果、リングバッファ拡張処理を実行する。
【0041】
CPU11は、リングバッファ拡張処理において、書込データサイズと第2値とを比較した結果、第1リングバッファを第2拡張領域まで拡張することを決定する。
一方、CPU21は、第1リングバッファに書き込まれたデータd1を読み出すデータ読出処理を行っている途中に、CPU11から第1リングバッファ拡張通知を受け付け、優先順位に基づいてリングバッファ拡張通知受付処理を先に行う。その後、データ読出処理を再開するが、データd3の書込要求を受け付けたため、優先順位に基づいてデータd3の書込処理を先に実行する。
【0042】
図14において、CPU11は、リングバッファ拡張処理により拡張した第1リングバッファにデータd4を書き込んている途中で、CPU21からWPインクリメント通知を受け付けたため、メモリ12のWP2をインクリメントする。CPU11は、データd4の書込処理終了後、データd3の読出処理を行う。
一方、CPU21は、データd3の書込処理を終了して、データd2の読出処理を行う。
【0043】
図15において、CPU11は、データd3の読出処理において、WP2とRP2がイコール、すなわち、第2リングバッファ内に書き込まれたデータを全て読み出したため、第2リングバッファを初期状態に設定する。その後、データd5の書き込み要求を受け付ける。
一方、CPU21は、データd2の読出処理を行っている途中で、第2リングバッファの初期化通知を受けて付けたため、リングバッファ初期化受付処理を行い、その後再び、データd2の読出処理を再開する。
<補足>
なお、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)実施の形態において、リングバッファ制御処理は、データを送受する各装置が連携して行っていたが、他の装置が行ってもよい。
(2)一方のリングバッファに対するデータの書込み予定量を判定すると共に、他方のリングバッファに対するデータの書込み予定量を判定して、各リングバッファの拡張領域を決定してもよい。
(3)実施の形態において、拡張領域を2つに分けて設定した一例を説明したが、拡張領域は3つ又は4つ等、幾つに分けて設定してもよい。
(4)実施の形態において、7つのリングバッファ制御処理の優先順位を示したが、この優先順位に限られず、どのように優先順位を設定してもよい。例えば、データ書込処理より、データ読出処理の優先順位を上位にしてもよい。
(5)実施の形態において、定数と変数のそれぞれテーブルを各装置のメモリに記憶させていたが、共有メモリ3に記憶させてもよい。この場合、各装置は、共有メモリに記憶された定数と変数のそれぞれのテーブルを共用してリングバッファ制御を行う。
(6)本発明は、上記実施の形態に示すリングバッファ制御方法であるとしてもよい。また、リングバッファ制御方法をコンピュータにより実現する制御プログラムであるとしてもよいし、前記制御プログラムからなるデジタル信号であるとしてもよい。
(7)本発明は、前記制御プログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリ等に記録したものとしてもよい。
(8)本発明は、前記制御プログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
(9)本発明は、前記制御プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記制御プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するものとしてもよい。
【0044】
【発明の効果】
以上説明したように、本発明に係るデータ送受システムは、2つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当手段と、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備えることを特徴とする。
【0045】
これにより、2つの装置間の共有メモリに割り当てられた2つのリングバッファにおいて、各装置による各リングバッファに対するデータの書き込み待ち状態を減らすことができる。また、各リングバッファに割り当てられた2つのメモリ領域の中間に拡張領域を割り当てているので、各リングバッファの拡張領域として併用できる。更に、各リングバッファは、アドレスが連続したメモリ領域が割り当てられているため、プログラムのアルゴリズムを単純にすることができ、高速にバッファ処理をすることができる。
【0046】
また、前記データ送受システムは、一方のリングバッファに書き込まれたデータが全て読み出されたか否かを判定する全読出判定手段と、前記一方のリングバッファについて、前記全読出判定手段の判定が肯定的である場合に、当該リングバッファをデータの書込み及び読み出しが行われる前の初期状態に設定する初期状態設定手段とを更に備えることとしてもよい。
【0047】
これにより、リングバッファに書き込まれたデータが全て読み出された場合、拡張手段により拡張された各リングバッファの領域、又、リードポインタ及びライトポインタは、初期状態となるため、無駄にリングバッファを拡張したままの状態を継続させることなく、他のリングバッファにおいて拡張が必要となる場合に備えることができる。
【0048】
また、前記データ送受システムは、前記拡張領域を、第1拡張領域と第2拡張領域の2つの拡張領域として用い、前記拡張可否判定手段は、更に、前記第1拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第1判定手段と、前記第2拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第2判定手段とを備え、前記拡張手段は、前記一方のリングバッファについて、前記書込可否判定手段及び前記第1判定手段の判定が共に肯定的である場合に、前記第1拡張領域を用いて当該リングバッファを拡張し、前記一方のリングバッファについて、前記書込可否判定手段、前記第1判定手段及び前記第2判定手段の判定が、共に肯定的である場合に、前記第1拡張領域及び前記第2拡張領域を用いて当該リングバッファを拡張することとしてもよい。
【0049】
拡張領域を2つに分けているため、一方のリングバッファの拡張が必要な場合に、書き込まれる予定のデータサイズに応じて2段階に分けた拡張を行うことができ、無駄な拡張を避けて、他方のリングバッファの拡張が必要な場合に備えることができる。
また、前記各手段を、前記各装置が連携して実行することとしてもよい。
これにより、リングバッファ制御処理を行うための新たな装置を実装することなく、2装置のみでリングバッファ制御処理を行うことができる。
【図面の簡単な説明】
【図1】本発明に係るデータ送受システムのブロック構成図である。
【図2】第1リングバッファ及び第2リングバッファを制御するために用いる定数と変数のテーブルである。
【図3】2つのリングバッファの初期状態を示す図である。
【図4】装置1によるデータ書込処理のフローチャート図である。
【図5】装置1によるリングバッファ拡張処理のフローチャート図である。
【図6】装置1によるデータ読出処理のフローチャート図である。
【図7】装置1によるWP2インクリメント通知受付処理のフローチャート図である。
【図8】装置1によるRP1インクリメント通知受付処理のフローチャート図である。
【図9】装置1による第1リングバッファ初期化通知受付処理のフローチャート図である。
【図10】装置1による第2リングバッファ拡張通知受付処理のフローチャート図である。
【図11】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図12】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図13】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図14】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図15】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【符号の説明】
1、2 装置
3 共有メモリ
4 信号線
11、21 CPU
12、22 メモリ
13、23 入出力部
31 変数テーブル
32 定数テーブル
【発明の属する技術分野】
本発明は、2つの装置間に接続された共有メモリのメモリ領域を、2つのリングバッファに割り当てて、各装置が各リングバッファに対してデータの書き込み及び読み出しを行うことにより装置間のデータ送受が行われるデータ送受システムに関する。
【0002】
【従来の技術】
2つの装置間でデータの送受を行う場合に、これらの装置間に共有メモリを配置して、当該共有メモリを緩衝装置(バッファ)として用いることがある。例えば、下記に示す特許文献では、第1装置と第2装置の間に、共有メモリとしてデュアルポートメモリ(DPM)を配置して、当該DPMを、第1装置が書き込みを行い第2装置が読み出しを行う第1リングバッファ、及び第2装置が書き込みを行い第1装置が読み出しを行う第2リングバッファの2つのリングバッファとして用いて、装置間のデータの送受を行う技術が示されている。装置間で行われるデータ送受の流れの具体的な例としては、一方の装置がある処理の要求を示す要求データを他方の装置に送り、他方の装置は要求された処理を実行して、一方の装置に処理結果(応答データ)を返す、という流れが考えられる。
【0003】
【特許文献】
特許番号第2859178号
【0004】
【発明が解決しようとする課題】
ところで、一方の装置から他方の装置に対する要求データの送信が一時的に急増する場合がある。例えば、上述した第1装置から第2装置に対する要求データの送信が一時的に急増した場合、第1装置により第1リングバッファに対して書き込まれる要求データのデータ量が急増する。そして、第1リングバッファに書き込まれた要求データを第2装置が読み出す速度を上回って、要求データの書き込みが行われ続けると、読み出されていない要求データが第1リングバッファに蓄積され、やがて第1リングバッファに要求データを書き込むための空きサイズがなくなる。空きサイズがなくなると、第1装置は、第1リングバッファに要求データを書き込むことができなくなるため、書き込み待ち状態が発生する。
【0005】
また、第1リングバッファに書き込まれた要求データを第2装置が読み出して、処理を行った結果である応答データを順次第1装置に返す場合においても、第2装置により第2リングバッファに対して書き込まれる応答データのデータ量が急増すると、同様の書き込み待ち状態が発生する。
本発明は、係る課題を解決するためになされたものであって、各リングバッファに対するデータの書き込み待ち状態を減らすことができるデータ送受システム、リングバッファ制御方法及び制御プログラムを提供することを目的とする。
【0006】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るデータ送受システムは、2つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当手段と、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備えることを特徴とする。
【0007】
また、本発明に係るリングバッファ制御方法は、2つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御方法であって、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含むことを特徴とする。
【0008】
また、本発明に係る制御プログラムは、CPUを備える2つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御処理を各装置に行わせるための制御プログラムであって、前記リングバッファ制御処理は、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含むことを特徴とする。
【0009】
【発明の実施の形態】
以下、本発明に係るデータ送受システムの実施の形態について、図面を用いて説明する。
<構成>
図1は、本発明に係るデータ送受システムのブロック構成図である。データ送受システムは、装置1、装置2、共有メモリ3、信号線4等から成る。
【0010】
装置1は、CPU11、メモリ12、入出力部13等を有し、装置2は、CPU21、メモリ22、入出力部23等を有する。装置1及び装置2は、図示していないが、それぞれ、ROM又はハードディスク等の記憶媒体を備えており、当該記憶媒体にリングバッファ制御処理を行うための制御プログラムが記憶され、CPUが、当該制御プログラムに従って動作することにより、リングバッファ制御処理を実現する。リングバッファ制御処理については後述する。
【0011】
CPU11とCPU21は、信号線4を介して接続されており、リングバッファ制御に係る各種通知を互いに送受して、連携してリングバッファ制御処理を行う。
メモリ12及びメモリ22は、後述する変数テーブル及び定数テーブルを記憶している。
【0012】
装置1の入出力部13と共有メモリ3、装置2の入出力部23と共有メモリ3は、それぞれバス接続されており、各装置から一方のリングバッファに対して書き込まれるデータ、及び各装置により一方のリングバッファから読み出されるデータが、各バスを介して送受される。
共有メモリ3はデュアルポートメモリ(DPM)であり、連続したアドレスにより示されるメモリ領域を有しており、前記制御プログラムにより、当該メモリ領域に2つのリングバッファが割り当てられる。ここで、リングバッファについて説明する。
【0013】
リングバッファの領域は、始点(以下、「RS(リングスタート)」という。)及び終点(以下、「RE(リングエンド)」という。)を示すアドレスで表される。RSよりREを上位のアドレスとする。RSからREまでの連続する複数のアドレスは、データを格納するためのブロック位置を示す指標であり、論理アドレス又は物理アドレスのどちらでもよい。また、1ブロックは、例えば、1バイトの記憶容量であってもよいし、256バイトでもよい。
【0014】
各装置は、制御プログラムに従って、ライトポインタ(以下、「WP」という。)が示すアドレスのブロックにデータを書き込み、リードポインタ(以下、「RP」という。)が示すアドレスのブロックに書き込まれたデータを読み出す。WPとRPは、RSとREにより示されるメモリ領域内で下位のアドレスから上位のアドレスに向けて移動する。WPが示すアドレスのブロックにデータが書き込まれると、WPはインクリメントされて次のブロックのアドレスを示す。こうしてデータが書き込まれる毎にWPはインクリメントされる。そしてWPの示すアドレスがREのアドレスまで進み、REのブロックにデータが書き込まれると、次はインクリメントされずに、WPはRSのアドレスを示すように制御される。RPも同様で、RPが示すアドレスのブロックのデータを読み出すと、RPはインクリメントされて次のブロックのアドレスを示し、やがてREのブロックのデータを読み出すと、RPはRSのアドレスを示すように制御される。WP、RPは互いにどちらか一方が示すアドレスを追い越してインクリメントしないように制御される。
【0015】
リングバッファのバッファサイズは、RSとREのアドレスにより示されるメモリ領域の記憶容量である。例えば、RS=1、RE=9とすると、バッファサイズは、9ブロック分の記憶容量となる。また、データを書き込む余地を示す空きサイズは、リングバッファのバッファサイズとWP及びRPが示すアドレスから算出することができる。
【0016】
図2は、装置1のメモリ12及び装置2のメモリ22において、それぞれ記憶管理されている、2つのリングバッファ(第1リングバッファ、第2リングバッファとする。)を制御するための定数と変数のテーブルである。
定数テーブル32に示されるRS1、RE1、RE11、RE12は、第1リングバッファのメモリ領域割当てに用いられる定数であってアドレスを示す。RS22、RS21、RS2、RE2は、第2リングバッファのメモリ領域割当てに用いられる定数であってアドレスを示す。
【0017】
変数テーブル31に示されるbufsize1、RP1、WP1は第1リングバッファに対する書き込み及び読み出し制御に用いられる変数であり、bufsize1は、第1リングバッファのバッファサイズを表す変数、RP1は第1リングバッファ内の、データを読み出すブロックのアドレスを示すポインタ、WP1は第1リングバッファ内の、データを書き込むブロックのアドレスを示すポインタである。bufsize2、RP2、WP2は第2リングバッファに対する書き込み及び読み出し制御に用いられる変数であり、bufsize2は、第2リングバッファのバッファサイズを表す変数、RP2は第2リングバッファ内の、データを読み出すブロックのアドレスを示すポインタ、WP2は第2リングバッファ内の、データを書き込むブロックのアドレスを示すポインタである。
【0018】
図3は、共有メモリのメモリ領域に割り当てられた2つのリングバッファの初期状態を示す図である。1から25までの番号はデータを格納するブロックのアドレスを示す。ここで初期状態とは、各リングバッファに係る変数を初期値とした、各リングバッファの制御状態のことをいい、第1リングバッファの初期状態は、bufsize1が9、RP1が1、WP1が1であり、第2リングバッファの初期状態は、bufsize2が9、RP2が17、WP2が17である。初期状態の第1リングバッファの領域は、アドレス1からアドレス9までの領域であり、初期状態の第2リングバッファの領域は、アドレス17からアドレス25までの領域である。また、第1拡張領域と第2拡張領域の2つの拡張領域が各リングバッファに割り当てたメモリ領域の中間に割り当てられている。
【0019】
本発明に係るデータ送受システムでは、いずれかのリングバッファにおいて、書き込まれたデータが全て読み出された場合に当該リングバッファを初期状態にする処理がなされる。
<動作>
続いて本発明に係るリングバッファ制御処理についてフローチャート図を用いて説明する。リングバッファ制御処理は、各装置に記憶されている制御プログラムに従って、各CPUが通信線4を介して互いに制御情報を通知し合いながら連携して行われる。リングバッファ制御処理には、データ書込処理、リングバッファ拡張処理、データ読出処理、WPインクリメント通知受付処理、RPインクリメント通知受付処理、リングバッファ拡張通知受付処理及びリングバッファ初期化通知受付処理の7つの処理があり、各装置のCPUがこれらの処理を実行する。
【0020】
本実施の形態における、各処理の実行については優先順位が設定されており、リングバッファ初期化通知受付処理を第1優先、リングバッファ拡張処理及びリングバッファ拡張通知受付処理を第2優先、WPインクリメント通知受付処理及びRPインクリメント通知受付処理を第3優先、データ書込処理を第4優先、データ読出処理を第5優先としている。実行中の処理(第1処理とする。)より優先順位が高い処理(第2処理とする。)の要求をCPUが受け付けると、第1処理を中断して第2処理を実行する。中断された第1処理は、第2処理が終了した後、処理を再開する。また、第1処理より優先順位が低い処理及び第1処理と同順位の処理(第3処理とする。)の要求を受け付けた場合は、第1処理を終了した後に、第3処理を実行する。第5優先のデータ読出処理は、他の処理が行われていない間に実行される。
【0021】
以下、装置1のCPU11が実行するこれら7つの処理について説明する。装置2のCPU21が実行する7つの処理については、対象となるリングバッファが異なるだけで、その動作はCPU11が行う処理と同様であるため省略する。
<データ書込処理>
図4は、装置1によるデータ書込処理のフローチャート図である。
【0022】
まず、CPU11は、メモリ12に記憶されている第1リングバッファに係る変数を参照して、第1リングバッファの空きサイズを算出する(ステップS1)。空きサイズは、例えば、bufsize1−{(bufsize1+WP1−RP1)mod bufsize1}という演算により算出できる。続いて、CPU11が受け付けたデータ書込要求から書き込むデータのサイズ(以下、単に「書込データサイズ」という。)を検出して、当該書込データサイズと空きサイズとを比較する。空きサイズが書込データサイズ以上であれば(ステップS2:Yes)、ステップS3をスキップしてステップS4に進む。ステップS2は請求項1に記載の書込可否判定手段に相当するものである。空きサイズが書込データサイズより小さい場合(ステップS2:No)、ステップS3に進み、リングバッファ拡張処理を行う。
【0023】
ステップS4においては、WP1が示すアドレスのブロックにデータの書き込みを行う。当該ブロックの書き込みが終わるとWP1をインクリメントして次のアドレスを示す。また、信号線4を介してCPU21に現在のWP1が示すアドレスを通知する。(ステップS5)。書込データサイズ分のデータの書き込みが終了すると(ステップS5:Yes)、データ書込処理を終了する。書込データサイズ分のデータの書き込みが終了していなければ(ステップS6:No)、ステップS4に戻る。
【0024】
<リングバッファ拡張処理>
図5は、装置1によるリングバッファ拡張処理のフローチャート図である。
まず、CPU11は、メモリ12に記憶されているRP1とWP1を参照して、RP1とWP1の比較を行う。比較した結果、RP1の方がWP1より低位アドレスであれば(ステップS7:Yes)、ステップS8に進む。ステップS7は、請求項3に記載のアドレス判定手段に相当する。比較した結果、RP1の方がWP1より高位アドレスであれば(ステップS7:No)、ステップS14に進む。
【0025】
ステップS8において、第1拡張領域が現在、いずれかのリングバッファの拡張領域として用いられていないかどうかを、メモリ12に記憶されているbufsize1及びbufsize2を参照して判定する。ステップS8は、請求項5に記載の第1判定手段に相当する。bufsize1が13、又はbufsize2が16であれば、第1拡張領域は第1リングバッファ又は第2リングバッファの拡張領域として用いられていることになる。第1拡張領域が使用されていれば(ステップS8:No)、ステップS10に進む。第1拡張領域が不使用であれば(ステップS8:Yes)、ステップS9に進む。
【0026】
ステップS9において、空きサイズと第1拡張領域分のブロックサイズとを加算した値(第1値とする。)と、書き込みデータサイズとを比較して、第1値が書き込みデータサイズ以上の場合(ステップS9:Yes)、ステップS13に進む。一方、第1値が書き込みデータサイズより小さい場合(ステップS9:No)、ステップS10に進む。
【0027】
ステップS10において、第2拡張領域が現在、いずれかのリングバッファの拡張領域として用いられていないかどうかを、メモリ12に記憶されているbufsize1及びbufsize2を参照して判定する。ステップS10は、請求項5に記載の第2判定手段に相当する。bufsize1が16、又はbufsize2が12であれば、第2拡張領域は第1リングバッファ又は第2リングバッファの拡張領域として用いられていることになる。第2拡張領域が使用されていれば(ステップS10:No)、ステップS14に進む。第2拡張領域が使用されていなければ(ステップS10:Yes)、ステップS11に進む。
【0028】
ステップS11において、空きサイズと第1拡張領域分のブロックサイズ及び第2拡張領域分のブロックサイズとを加算した値(第2値とする。)と、書き込みデータサイズとを比較して、第2値が書き込みデータサイズ以上の場合(ステップS11:Yes)、ステップS12に進む。一方、第2値が書き込みデータサイズより小さい場合(ステップS11:No)、ステップS14に進む。
【0029】
ステップS12において、CPU11は第1リングバッファの領域を第2拡張領域まで拡張する。すなわち、メモリ12のbufsize1を16に変更する。また、信号線4を介してCPU21にbufsize1を16に変更する通知である第1リングバッファ拡張通知を行う。その後、リングバッファ拡張処理を終了する。
【0030】
ステップS13において、CPU11は第1リングバッファの領域を第1拡張領域まで拡張する。すなわち、メモリ12のbufsize1を13に変更する。また、信号線4を介してCPU21にbufsize1を13に変更する通知である第1リングバッファ拡張通知を行う。その後、リングバッファ拡張処理を終了する。ステップS12及びステップS13は、請求項5に記載の拡張手段に相当する。
【0031】
ステップS14において、CPU11は、本データ書込要求を保留して次の順番の処理を実行し、当該処理終了後に再度、本データ書込要求を試みるリトライ処理を行い、その後、ステップS15のデータ書込処理に進む。
<データ読出処理>
図6は、装置1によるデータ読出処理のフローチャート図である。
【0032】
まず、ステップS21において、CPU11はRP2が示すアドレスのブロックに書き込まれたデータの読み出しを行う。当該ブロックの読み出しが終わるとRP2をインクリメントして次のアドレスを示す。また、信号線4を介してCPU21にRP2インクリメント通知を行う。(ステップS22)。
続いて、RP2とWP2を参照して、RP2とWP2がイコールでなければ(ステップS23:No)、ステップS21に戻る。RP2とWP2がイコールであれば(ステップS23:Yes)、第2リングバッファを初期状態にする(ステップS24)。このときに、CPU11は、CPU21に対して、信号線4を介してCPU21に第2リングバッファ初期化通知を行う。そして、CPU21から確認信号が返ってきたら初期化を行う。すなわち、メモリ12のbufsize2を9、WP2を17、RP2を17とする。その後、データ読出処理を終了する。ステップS23は、請求項2に記載の全読出判定手段に相当し、ステップS24は、請求項2に記載の初期状態設定手段に相当する。
【0033】
<WPインクリメント通知処理>
図7は、装置1によるWP2インクリメント通知受付処理のフローチャート図である。
まず、CPU11は、CPU21からWP2インクリメント通知を受け付けると、メモリ12のWP2を通知された値に変更する(ステップS31)。その後、WP2インクリメント通知受付処理を終了する。
【0034】
<RPインクリメント通知受付処理>
図8は、装置1によるRP1インクリメント通知受付処理のフローチャート図である。
CPU11は、CPU21からRP1インクリメント通知を受け付けると、メモリ12のRP1を通知された値に変更して(ステップS41)、処理を終了する。
【0035】
<リングバッファ初期化通知受付処理>
図9は、装置1による第1リングバッファ初期化通知受付処理のフローチャート図である。
CPU11は、CPU21から第1リングバッファ初期化通知を受け付けると、メモリ12のbufsize1を13、RP1を1、WP1を1として、第1リングバッファを初期状態とし(ステップS51)、CPU21に対して確認信号を送る。その後、処理を終了する。
【0036】
<リングバッファ拡張通知受付処理>
図10は、装置1による第2リングバッファ拡張通知受付処理のフローチャート図である。
CPU11は、CPU21から第2リングバッファ拡張通知を受け付けると、メモリ12のbufsize2を通知された値に変更して(ステップS61)、処理を終了する。
【0037】
<具体例>
ここで、図11から図15を用いて、データ送受システムの動作の一例について具体的に説明する。図11から図15は、データの書き込み及び読み出し制御による2つのリングバッファの状態変化を時系列で示す図である。装置2によるデータの書き込み及び読み出し速度は、装置1より遅いものとする。
【0038】
まず、図11は、第1リングバッファ、第2リングバッファが共に初期状態であり、第1装置のCPU11は、第1リングバッファに対してデータd1の書き込み要求を受け付けたことを示す。データd1は3ブロック分のデータである。図12において、CPU11はデータ書込処理により、データd1を第1リングバッファに書き込む。その後、データd2の書き込み要求を受け付けたので、再びデータ書込処理を実行する。データd2は7ブロック分のデータである。CPU11は、データd2を書き込むためのデータ書込処理において、現在の第1リングバッファの空きサイズと書込データサイズとを比較し、その結果、リングバッファ拡張処理を実行する。CPU11は、リングバッファ拡張処理において、書込データサイズと第1値とを比較した結果、第1リングバッファを第1拡張領域まで拡張することを決定する。
【0039】
一方、第2装置のCPU21は、CPU11からWP1のインクリメント通知を受け付けて、WPインクリメント通知受付処理を行い、データ読出処理を行う。
図13において、CPU11は、リングバッファ拡張処理により第1拡張領域まで第1リングバッファの領域を拡張し、CPU21に第1リングバッファ拡張通知を行う。その後、拡張した第1リングバッファにデータd2を書き込む処理を行う。
【0040】
データd2の書込処理終了後、CPU11は、データd4の書き込み要求を受け付けたので、再びデータ書込処理を行う。データd4は、6ブロック分のデータである。
CPU11は、データd4を書き込むためのデータ書込処理において、現在の第1バッファの空きサイズと書込データサイズとを比較し、その結果、リングバッファ拡張処理を実行する。
【0041】
CPU11は、リングバッファ拡張処理において、書込データサイズと第2値とを比較した結果、第1リングバッファを第2拡張領域まで拡張することを決定する。
一方、CPU21は、第1リングバッファに書き込まれたデータd1を読み出すデータ読出処理を行っている途中に、CPU11から第1リングバッファ拡張通知を受け付け、優先順位に基づいてリングバッファ拡張通知受付処理を先に行う。その後、データ読出処理を再開するが、データd3の書込要求を受け付けたため、優先順位に基づいてデータd3の書込処理を先に実行する。
【0042】
図14において、CPU11は、リングバッファ拡張処理により拡張した第1リングバッファにデータd4を書き込んている途中で、CPU21からWPインクリメント通知を受け付けたため、メモリ12のWP2をインクリメントする。CPU11は、データd4の書込処理終了後、データd3の読出処理を行う。
一方、CPU21は、データd3の書込処理を終了して、データd2の読出処理を行う。
【0043】
図15において、CPU11は、データd3の読出処理において、WP2とRP2がイコール、すなわち、第2リングバッファ内に書き込まれたデータを全て読み出したため、第2リングバッファを初期状態に設定する。その後、データd5の書き込み要求を受け付ける。
一方、CPU21は、データd2の読出処理を行っている途中で、第2リングバッファの初期化通知を受けて付けたため、リングバッファ初期化受付処理を行い、その後再び、データd2の読出処理を再開する。
<補足>
なお、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)実施の形態において、リングバッファ制御処理は、データを送受する各装置が連携して行っていたが、他の装置が行ってもよい。
(2)一方のリングバッファに対するデータの書込み予定量を判定すると共に、他方のリングバッファに対するデータの書込み予定量を判定して、各リングバッファの拡張領域を決定してもよい。
(3)実施の形態において、拡張領域を2つに分けて設定した一例を説明したが、拡張領域は3つ又は4つ等、幾つに分けて設定してもよい。
(4)実施の形態において、7つのリングバッファ制御処理の優先順位を示したが、この優先順位に限られず、どのように優先順位を設定してもよい。例えば、データ書込処理より、データ読出処理の優先順位を上位にしてもよい。
(5)実施の形態において、定数と変数のそれぞれテーブルを各装置のメモリに記憶させていたが、共有メモリ3に記憶させてもよい。この場合、各装置は、共有メモリに記憶された定数と変数のそれぞれのテーブルを共用してリングバッファ制御を行う。
(6)本発明は、上記実施の形態に示すリングバッファ制御方法であるとしてもよい。また、リングバッファ制御方法をコンピュータにより実現する制御プログラムであるとしてもよいし、前記制御プログラムからなるデジタル信号であるとしてもよい。
(7)本発明は、前記制御プログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリ等に記録したものとしてもよい。
(8)本発明は、前記制御プログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
(9)本発明は、前記制御プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記制御プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するものとしてもよい。
【0044】
【発明の効果】
以上説明したように、本発明に係るデータ送受システムは、2つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当手段と、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備えることを特徴とする。
【0045】
これにより、2つの装置間の共有メモリに割り当てられた2つのリングバッファにおいて、各装置による各リングバッファに対するデータの書き込み待ち状態を減らすことができる。また、各リングバッファに割り当てられた2つのメモリ領域の中間に拡張領域を割り当てているので、各リングバッファの拡張領域として併用できる。更に、各リングバッファは、アドレスが連続したメモリ領域が割り当てられているため、プログラムのアルゴリズムを単純にすることができ、高速にバッファ処理をすることができる。
【0046】
また、前記データ送受システムは、一方のリングバッファに書き込まれたデータが全て読み出されたか否かを判定する全読出判定手段と、前記一方のリングバッファについて、前記全読出判定手段の判定が肯定的である場合に、当該リングバッファをデータの書込み及び読み出しが行われる前の初期状態に設定する初期状態設定手段とを更に備えることとしてもよい。
【0047】
これにより、リングバッファに書き込まれたデータが全て読み出された場合、拡張手段により拡張された各リングバッファの領域、又、リードポインタ及びライトポインタは、初期状態となるため、無駄にリングバッファを拡張したままの状態を継続させることなく、他のリングバッファにおいて拡張が必要となる場合に備えることができる。
【0048】
また、前記データ送受システムは、前記拡張領域を、第1拡張領域と第2拡張領域の2つの拡張領域として用い、前記拡張可否判定手段は、更に、前記第1拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第1判定手段と、前記第2拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第2判定手段とを備え、前記拡張手段は、前記一方のリングバッファについて、前記書込可否判定手段及び前記第1判定手段の判定が共に肯定的である場合に、前記第1拡張領域を用いて当該リングバッファを拡張し、前記一方のリングバッファについて、前記書込可否判定手段、前記第1判定手段及び前記第2判定手段の判定が、共に肯定的である場合に、前記第1拡張領域及び前記第2拡張領域を用いて当該リングバッファを拡張することとしてもよい。
【0049】
拡張領域を2つに分けているため、一方のリングバッファの拡張が必要な場合に、書き込まれる予定のデータサイズに応じて2段階に分けた拡張を行うことができ、無駄な拡張を避けて、他方のリングバッファの拡張が必要な場合に備えることができる。
また、前記各手段を、前記各装置が連携して実行することとしてもよい。
これにより、リングバッファ制御処理を行うための新たな装置を実装することなく、2装置のみでリングバッファ制御処理を行うことができる。
【図面の簡単な説明】
【図1】本発明に係るデータ送受システムのブロック構成図である。
【図2】第1リングバッファ及び第2リングバッファを制御するために用いる定数と変数のテーブルである。
【図3】2つのリングバッファの初期状態を示す図である。
【図4】装置1によるデータ書込処理のフローチャート図である。
【図5】装置1によるリングバッファ拡張処理のフローチャート図である。
【図6】装置1によるデータ読出処理のフローチャート図である。
【図7】装置1によるWP2インクリメント通知受付処理のフローチャート図である。
【図8】装置1によるRP1インクリメント通知受付処理のフローチャート図である。
【図9】装置1による第1リングバッファ初期化通知受付処理のフローチャート図である。
【図10】装置1による第2リングバッファ拡張通知受付処理のフローチャート図である。
【図11】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図12】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図13】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図14】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【図15】データの書き込み及び読み出し制御による2つのリングバッファの状態変化を示す図である。
【符号の説明】
1、2 装置
3 共有メモリ
4 信号線
11、21 CPU
12、22 メモリ
13、23 入出力部
31 変数テーブル
32 定数テーブル
Claims (6)
- 2つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、
前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当手段と、
一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、
前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、
前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備える
ことを特徴とするデータ送受システム。 - 前記データ送受システムは、
一方のリングバッファに書き込まれたデータが全て読み出されたか否かを判定する全読出判定手段と、
前記一方のリングバッファについて、前記全読出判定手段の判定が肯定的である場合に、当該リングバッファをデータの書込み及び読み出しが行われる前の初期状態に設定する初期状態設定手段とを更に備える
ことを特徴とする請求項1に記載のデータ送受システム。 - 前記データ送受システムは、前記拡張領域を、第1拡張領域と第2拡張領域の2つの拡張領域として用い、
前記拡張可否判定手段は、更に、
前記第1拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第1判定手段と、
前記第2拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第2判定手段とを備え、
前記拡張手段は、
前記一方のリングバッファについて、前記書込可否判定手段及び前記第1判定手段の判定が共に肯定的である場合に、前記第1拡張領域を用いて当該リングバッファを拡張し、
前記一方のリングバッファについて、前記書込可否判定手段、前記第1判定手段及び前記第2判定手段の判定が、共に肯定的である場合に、前記第1拡張領域及び前記第2拡張領域を用いて当該リングバッファを拡張する
ことを特徴とする請求項1又は2に記載のデータ送受システム。 - 前記各手段を、前記各装置が連携して実行することを特徴とする請求項1乃至3のうちいずれか1項に記載のデータ送受システム。
- 2つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御方法であって、
前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、
一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、
前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、
前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含む
ことを特徴とするリングバッファ制御方法。
<制御プログラム> - CPUを備える2つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第1リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第2リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御処理を各装置に行わせるための制御プログラムであって、
前記リングバッファ制御処理は、
前記各リングバッファに割り当てる2つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、
一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、
前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、
前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含む
ことを特徴とする制御プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002328406A JP2004164202A (ja) | 2002-11-12 | 2002-11-12 | データ送受システム、リングバッファ制御方法、制御プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002328406A JP2004164202A (ja) | 2002-11-12 | 2002-11-12 | データ送受システム、リングバッファ制御方法、制御プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004164202A true JP2004164202A (ja) | 2004-06-10 |
Family
ID=32806721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002328406A Pending JP2004164202A (ja) | 2002-11-12 | 2002-11-12 | データ送受システム、リングバッファ制御方法、制御プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004164202A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100405328C (zh) * | 2005-11-24 | 2008-07-23 | 威盛电子股份有限公司 | 改善数据传输效率的方法 |
JP2010128150A (ja) * | 2008-11-27 | 2010-06-10 | Sony Corp | 表示制御装置、表示制御方法、およびプログラム |
JP2013546068A (ja) * | 2010-10-28 | 2013-12-26 | アルカテル−ルーセント | 電気通信ネットワーク・アプリケーションのためのロックレス・バッファ管理スキーム |
CN112882655A (zh) * | 2021-02-03 | 2021-06-01 | 广发证券股份有限公司 | 数据缓存方法、装置、电子设备及存储介质 |
-
2002
- 2002-11-12 JP JP2002328406A patent/JP2004164202A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100405328C (zh) * | 2005-11-24 | 2008-07-23 | 威盛电子股份有限公司 | 改善数据传输效率的方法 |
JP2010128150A (ja) * | 2008-11-27 | 2010-06-10 | Sony Corp | 表示制御装置、表示制御方法、およびプログラム |
JP4623207B2 (ja) * | 2008-11-27 | 2011-02-02 | ソニー株式会社 | 表示制御装置、表示制御方法、およびプログラム |
JP2013546068A (ja) * | 2010-10-28 | 2013-12-26 | アルカテル−ルーセント | 電気通信ネットワーク・アプリケーションのためのロックレス・バッファ管理スキーム |
CN112882655A (zh) * | 2021-02-03 | 2021-06-01 | 广发证券股份有限公司 | 数据缓存方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4474378B2 (ja) | ロックステップ及びフリーステップの両プロセッサモードによる計算処理 | |
JP4415071B2 (ja) | メモリ共有システム装置 | |
KR100942740B1 (ko) | 스케줄 제어 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체 및 스케줄 제어 방법 | |
KR19980063551A (ko) | 신호 처리 장치 및 소프트웨어 | |
JP2007026094A (ja) | 実行装置およびアプリケーションプログラム | |
JP2011243142A (ja) | 通信制御装置、データ通信方法及びプログラム | |
US20030120886A1 (en) | Method and apparatus for buffer partitioning without loss of data | |
JP2005500620A (ja) | 移動するメモリブロックを備えるメモリプール | |
EP1513071B1 (en) | Memory bandwidth control device | |
US20060095637A1 (en) | Bus control device, arbitration device, integrated circuit device, bus control method, and arbitration method | |
US7861012B2 (en) | Data transmitting device and data transmitting method | |
JP2004164202A (ja) | データ送受システム、リングバッファ制御方法、制御プログラム | |
JP3766188B2 (ja) | 論理フォーマット変換方法およびデータ保存媒体 | |
JP4536189B2 (ja) | Dma転送装置及びdma転送システム | |
JP4979206B2 (ja) | 情報処理方法および情報処理装置 | |
JP4218034B2 (ja) | データ通信システムおよびデータ通信方法、データ通信プログラム | |
JP2005521939A (ja) | メモリプールの変形 | |
JP5614213B2 (ja) | 記憶領域提供装置、記憶領域提供方法、及び、記憶領域提供プログラム | |
JP6524945B2 (ja) | 制御装置、記憶装置、記憶制御方法およびコンピュータプログラム | |
KR102561316B1 (ko) | 전자 장치 및 이를 포함하는 컴퓨팅 시스템 | |
KR102216841B1 (ko) | 유동적인 메모리 사용을 기반으로 하는 고속 압축 해제를 위한 장치, 이를 위한 방법 및 이 방법을 수행하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 | |
JP2004171541A (ja) | データ記憶システムおよび転送制御方法 | |
JP2022088106A (ja) | ストレージシステム | |
JPH0830544A (ja) | Dma転送装置および方法 | |
KR20050004157A (ko) | 다중 코히런시 단위들을 지원하는 데이터 전송 유닛 |