(57)【要約】【課題】２つの装置間の共有メモリに割り当てられた２つのリングバッファにおいて、各装置による各リングバッファに対するデータの書き込み待ち状態を減らす。【解決手段】２つのリングバッファに割り当てた２つのメモリ領域の中間に拡張領域を割り当てて、一方のリングバッファについて空きサイズ以上のデータが書き込まれる予定であるか否かを判定し、また、拡張領域の使用状況に基づいて当該リングバッファを拡張することが可能か否かを判定し、各判定が、共に肯定的である場合に当該リングバッファを拡張する。【選択図】  図３
2004164202.tif 000002
【特許請求の範囲】
【請求項１】
２つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、
前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当手段と、
一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、
前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、
前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備える
ことを特徴とするデータ送受システム。
【請求項２】
前記データ送受システムは、
一方のリングバッファに書き込まれたデータが全て読み出されたか否かを判定する全読出判定手段と、
前記一方のリングバッファについて、前記全読出判定手段の判定が肯定的である場合に、当該リングバッファをデータの書込み及び読み出しが行われる前の初期状態に設定する初期状態設定手段とを更に備える
ことを特徴とする請求項１に記載のデータ送受システム。
【請求項３】
前記データ送受システムは、前記拡張領域を、第１拡張領域と第２拡張領域の２つの拡張領域として用い、
前記拡張可否判定手段は、更に、
前記第１拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第１判定手段と、
前記第２拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第２判定手段とを備え、
前記拡張手段は、
前記一方のリングバッファについて、前記書込可否判定手段及び前記第１判定手段の判定が共に肯定的である場合に、前記第１拡張領域を用いて当該リングバッファを拡張し、
前記一方のリングバッファについて、前記書込可否判定手段、前記第１判定手段及び前記第２判定手段の判定が、共に肯定的である場合に、前記第１拡張領域及び前記第２拡張領域を用いて当該リングバッファを拡張する
ことを特徴とする請求項１又は２に記載のデータ送受システム。
【請求項４】
前記各手段を、前記各装置が連携して実行することを特徴とする請求項１乃至３のうちいずれか１項に記載のデータ送受システム。
【請求項５】
２つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御方法であって、
前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、
一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、
前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、
前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含む
ことを特徴とするリングバッファ制御方法。
＜制御プログラム＞
【請求項６】
ＣＰＵを備える２つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御処理を各装置に行わせるための制御プログラムであって、
前記リングバッファ制御処理は、
前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、
一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、
前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、
前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含む
ことを特徴とする制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、２つの装置間に接続された共有メモリのメモリ領域を、２つのリングバッファに割り当てて、各装置が各リングバッファに対してデータの書き込み及び読み出しを行うことにより装置間のデータ送受が行われるデータ送受システムに関する。
【０００２】
【従来の技術】
２つの装置間でデータの送受を行う場合に、これらの装置間に共有メモリを配置して、当該共有メモリを緩衝装置（バッファ）として用いることがある。例えば、下記に示す特許文献では、第１装置と第２装置の間に、共有メモリとしてデュアルポートメモリ（ＤＰＭ）を配置して、当該ＤＰＭを、第１装置が書き込みを行い第２装置が読み出しを行う第１リングバッファ、及び第２装置が書き込みを行い第１装置が読み出しを行う第２リングバッファの２つのリングバッファとして用いて、装置間のデータの送受を行う技術が示されている。装置間で行われるデータ送受の流れの具体的な例としては、一方の装置がある処理の要求を示す要求データを他方の装置に送り、他方の装置は要求された処理を実行して、一方の装置に処理結果（応答データ）を返す、という流れが考えられる。
【０００３】
【特許文献】
特許番号第２８５９１７８号
【０００４】
【発明が解決しようとする課題】
ところで、一方の装置から他方の装置に対する要求データの送信が一時的に急増する場合がある。例えば、上述した第１装置から第２装置に対する要求データの送信が一時的に急増した場合、第１装置により第１リングバッファに対して書き込まれる要求データのデータ量が急増する。そして、第１リングバッファに書き込まれた要求データを第２装置が読み出す速度を上回って、要求データの書き込みが行われ続けると、読み出されていない要求データが第１リングバッファに蓄積され、やがて第１リングバッファに要求データを書き込むための空きサイズがなくなる。空きサイズがなくなると、第１装置は、第１リングバッファに要求データを書き込むことができなくなるため、書き込み待ち状態が発生する。
【０００５】
また、第１リングバッファに書き込まれた要求データを第２装置が読み出して、処理を行った結果である応答データを順次第１装置に返す場合においても、第２装置により第２リングバッファに対して書き込まれる応答データのデータ量が急増すると、同様の書き込み待ち状態が発生する。
本発明は、係る課題を解決するためになされたものであって、各リングバッファに対するデータの書き込み待ち状態を減らすことができるデータ送受システム、リングバッファ制御方法及び制御プログラムを提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るデータ送受システムは、２つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当手段と、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備えることを特徴とする。
【０００７】
また、本発明に係るリングバッファ制御方法は、２つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御方法であって、前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含むことを特徴とする。
【０００８】
また、本発明に係る制御プログラムは、ＣＰＵを備える２つの装置と共有メモリとを備えたシステムにおいて、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置による各リングバッファに対するデータの書き込み及び読み出しを制御するリングバッファ制御処理を各装置に行わせるための制御プログラムであって、前記リングバッファ制御処理は、前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当ステップと、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定ステップと、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定ステップと、前記一方のリングバッファについて、前記書込可否判定ステップ及び前記拡張可否判定ステップの判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張ステップとを含むことを特徴とする。
【０００９】
【発明の実施の形態】
以下、本発明に係るデータ送受システムの実施の形態について、図面を用いて説明する。
＜構成＞
図１は、本発明に係るデータ送受システムのブロック構成図である。データ送受システムは、装置１、装置２、共有メモリ３、信号線４等から成る。
【００１０】
装置１は、ＣＰＵ１１、メモリ１２、入出力部１３等を有し、装置２は、ＣＰＵ２１、メモリ２２、入出力部２３等を有する。装置１及び装置２は、図示していないが、それぞれ、ＲＯＭ又はハードディスク等の記憶媒体を備えており、当該記憶媒体にリングバッファ制御処理を行うための制御プログラムが記憶され、ＣＰＵが、当該制御プログラムに従って動作することにより、リングバッファ制御処理を実現する。リングバッファ制御処理については後述する。
【００１１】
ＣＰＵ１１とＣＰＵ２１は、信号線４を介して接続されており、リングバッファ制御に係る各種通知を互いに送受して、連携してリングバッファ制御処理を行う。
メモリ１２及びメモリ２２は、後述する変数テーブル及び定数テーブルを記憶している。
【００１２】
装置１の入出力部１３と共有メモリ３、装置２の入出力部２３と共有メモリ３は、それぞれバス接続されており、各装置から一方のリングバッファに対して書き込まれるデータ、及び各装置により一方のリングバッファから読み出されるデータが、各バスを介して送受される。
共有メモリ３はデュアルポートメモリ（ＤＰＭ）であり、連続したアドレスにより示されるメモリ領域を有しており、前記制御プログラムにより、当該メモリ領域に２つのリングバッファが割り当てられる。ここで、リングバッファについて説明する。
【００１３】
リングバッファの領域は、始点（以下、「ＲＳ（リングスタート）」という。）及び終点（以下、「ＲＥ（リングエンド）」という。）を示すアドレスで表される。ＲＳよりＲＥを上位のアドレスとする。ＲＳからＲＥまでの連続する複数のアドレスは、データを格納するためのブロック位置を示す指標であり、論理アドレス又は物理アドレスのどちらでもよい。また、１ブロックは、例えば、１バイトの記憶容量であってもよいし、２５６バイトでもよい。
【００１４】
各装置は、制御プログラムに従って、ライトポインタ（以下、「ＷＰ」という。）が示すアドレスのブロックにデータを書き込み、リードポインタ（以下、「ＲＰ」という。）が示すアドレスのブロックに書き込まれたデータを読み出す。ＷＰとＲＰは、ＲＳとＲＥにより示されるメモリ領域内で下位のアドレスから上位のアドレスに向けて移動する。ＷＰが示すアドレスのブロックにデータが書き込まれると、ＷＰはインクリメントされて次のブロックのアドレスを示す。こうしてデータが書き込まれる毎にＷＰはインクリメントされる。そしてＷＰの示すアドレスがＲＥのアドレスまで進み、ＲＥのブロックにデータが書き込まれると、次はインクリメントされずに、ＷＰはＲＳのアドレスを示すように制御される。ＲＰも同様で、ＲＰが示すアドレスのブロックのデータを読み出すと、ＲＰはインクリメントされて次のブロックのアドレスを示し、やがてＲＥのブロックのデータを読み出すと、ＲＰはＲＳのアドレスを示すように制御される。ＷＰ、ＲＰは互いにどちらか一方が示すアドレスを追い越してインクリメントしないように制御される。
【００１５】
リングバッファのバッファサイズは、ＲＳとＲＥのアドレスにより示されるメモリ領域の記憶容量である。例えば、ＲＳ＝１、ＲＥ＝９とすると、バッファサイズは、９ブロック分の記憶容量となる。また、データを書き込む余地を示す空きサイズは、リングバッファのバッファサイズとＷＰ及びＲＰが示すアドレスから算出することができる。
【００１６】
図２は、装置１のメモリ１２及び装置２のメモリ２２において、それぞれ記憶管理されている、２つのリングバッファ（第１リングバッファ、第２リングバッファとする。）を制御するための定数と変数のテーブルである。
定数テーブル３２に示されるＲＳ１、ＲＥ１、ＲＥ１１、ＲＥ１２は、第１リングバッファのメモリ領域割当てに用いられる定数であってアドレスを示す。ＲＳ２２、ＲＳ２１、ＲＳ２、ＲＥ２は、第２リングバッファのメモリ領域割当てに用いられる定数であってアドレスを示す。
【００１７】
変数テーブル３１に示されるｂｕｆｓｉｚｅ１、ＲＰ１、ＷＰ１は第１リングバッファに対する書き込み及び読み出し制御に用いられる変数であり、ｂｕｆｓｉｚｅ１は、第１リングバッファのバッファサイズを表す変数、ＲＰ１は第１リングバッファ内の、データを読み出すブロックのアドレスを示すポインタ、ＷＰ１は第１リングバッファ内の、データを書き込むブロックのアドレスを示すポインタである。ｂｕｆｓｉｚｅ２、ＲＰ２、ＷＰ２は第２リングバッファに対する書き込み及び読み出し制御に用いられる変数であり、ｂｕｆｓｉｚｅ２は、第２リングバッファのバッファサイズを表す変数、ＲＰ２は第２リングバッファ内の、データを読み出すブロックのアドレスを示すポインタ、ＷＰ２は第２リングバッファ内の、データを書き込むブロックのアドレスを示すポインタである。
【００１８】
図３は、共有メモリのメモリ領域に割り当てられた２つのリングバッファの初期状態を示す図である。１から２５までの番号はデータを格納するブロックのアドレスを示す。ここで初期状態とは、各リングバッファに係る変数を初期値とした、各リングバッファの制御状態のことをいい、第１リングバッファの初期状態は、ｂｕｆｓｉｚｅ１が９、ＲＰ１が１、ＷＰ１が１であり、第２リングバッファの初期状態は、ｂｕｆｓｉｚｅ２が９、ＲＰ２が１７、ＷＰ２が１７である。初期状態の第１リングバッファの領域は、アドレス１からアドレス９までの領域であり、初期状態の第２リングバッファの領域は、アドレス１７からアドレス２５までの領域である。また、第１拡張領域と第２拡張領域の２つの拡張領域が各リングバッファに割り当てたメモリ領域の中間に割り当てられている。
【００１９】
本発明に係るデータ送受システムでは、いずれかのリングバッファにおいて、書き込まれたデータが全て読み出された場合に当該リングバッファを初期状態にする処理がなされる。
＜動作＞
続いて本発明に係るリングバッファ制御処理についてフローチャート図を用いて説明する。リングバッファ制御処理は、各装置に記憶されている制御プログラムに従って、各ＣＰＵが通信線４を介して互いに制御情報を通知し合いながら連携して行われる。リングバッファ制御処理には、データ書込処理、リングバッファ拡張処理、データ読出処理、ＷＰインクリメント通知受付処理、ＲＰインクリメント通知受付処理、リングバッファ拡張通知受付処理及びリングバッファ初期化通知受付処理の７つの処理があり、各装置のＣＰＵがこれらの処理を実行する。
【００２０】
本実施の形態における、各処理の実行については優先順位が設定されており、リングバッファ初期化通知受付処理を第１優先、リングバッファ拡張処理及びリングバッファ拡張通知受付処理を第２優先、ＷＰインクリメント通知受付処理及びＲＰインクリメント通知受付処理を第３優先、データ書込処理を第４優先、データ読出処理を第５優先としている。実行中の処理（第１処理とする。）より優先順位が高い処理（第２処理とする。）の要求をＣＰＵが受け付けると、第１処理を中断して第２処理を実行する。中断された第１処理は、第２処理が終了した後、処理を再開する。また、第１処理より優先順位が低い処理及び第１処理と同順位の処理（第３処理とする。）の要求を受け付けた場合は、第１処理を終了した後に、第３処理を実行する。第５優先のデータ読出処理は、他の処理が行われていない間に実行される。
【００２１】
以下、装置１のＣＰＵ１１が実行するこれら７つの処理について説明する。装置２のＣＰＵ２１が実行する７つの処理については、対象となるリングバッファが異なるだけで、その動作はＣＰＵ１１が行う処理と同様であるため省略する。
＜データ書込処理＞
図４は、装置１によるデータ書込処理のフローチャート図である。
【００２２】
まず、ＣＰＵ１１は、メモリ１２に記憶されている第１リングバッファに係る変数を参照して、第１リングバッファの空きサイズを算出する（ステップＳ１）。空きサイズは、例えば、ｂｕｆｓｉｚｅ１−｛（ｂｕｆｓｉｚｅ１＋ＷＰ１−ＲＰ１）ｍｏｄ  ｂｕｆｓｉｚｅ１｝という演算により算出できる。続いて、ＣＰＵ１１が受け付けたデータ書込要求から書き込むデータのサイズ（以下、単に「書込データサイズ」という。）を検出して、当該書込データサイズと空きサイズとを比較する。空きサイズが書込データサイズ以上であれば（ステップＳ２：Ｙｅｓ）、ステップＳ３をスキップしてステップＳ４に進む。ステップＳ２は請求項１に記載の書込可否判定手段に相当するものである。空きサイズが書込データサイズより小さい場合（ステップＳ２：Ｎｏ）、ステップＳ３に進み、リングバッファ拡張処理を行う。
【００２３】
ステップＳ４においては、ＷＰ１が示すアドレスのブロックにデータの書き込みを行う。当該ブロックの書き込みが終わるとＷＰ１をインクリメントして次のアドレスを示す。また、信号線４を介してＣＰＵ２１に現在のＷＰ１が示すアドレスを通知する。（ステップＳ５）。書込データサイズ分のデータの書き込みが終了すると（ステップＳ５：Ｙｅｓ）、データ書込処理を終了する。書込データサイズ分のデータの書き込みが終了していなければ（ステップＳ６：Ｎｏ）、ステップＳ４に戻る。
【００２４】
＜リングバッファ拡張処理＞
図５は、装置１によるリングバッファ拡張処理のフローチャート図である。
まず、ＣＰＵ１１は、メモリ１２に記憶されているＲＰ１とＷＰ１を参照して、ＲＰ１とＷＰ１の比較を行う。比較した結果、ＲＰ１の方がＷＰ１より低位アドレスであれば（ステップＳ７：Ｙｅｓ）、ステップＳ８に進む。ステップＳ７は、請求項３に記載のアドレス判定手段に相当する。比較した結果、ＲＰ１の方がＷＰ１より高位アドレスであれば（ステップＳ７：Ｎｏ）、ステップＳ１４に進む。
【００２５】
ステップＳ８において、第１拡張領域が現在、いずれかのリングバッファの拡張領域として用いられていないかどうかを、メモリ１２に記憶されているｂｕｆｓｉｚｅ１及びｂｕｆｓｉｚｅ２を参照して判定する。ステップＳ８は、請求項５に記載の第１判定手段に相当する。ｂｕｆｓｉｚｅ１が１３、又はｂｕｆｓｉｚｅ２が１６であれば、第１拡張領域は第１リングバッファ又は第２リングバッファの拡張領域として用いられていることになる。第１拡張領域が使用されていれば（ステップＳ８：Ｎｏ）、ステップＳ１０に進む。第１拡張領域が不使用であれば（ステップＳ８：Ｙｅｓ）、ステップＳ９に進む。
【００２６】
ステップＳ９において、空きサイズと第１拡張領域分のブロックサイズとを加算した値（第１値とする。）と、書き込みデータサイズとを比較して、第１値が書き込みデータサイズ以上の場合（ステップＳ９：Ｙｅｓ）、ステップＳ１３に進む。一方、第１値が書き込みデータサイズより小さい場合（ステップＳ９：Ｎｏ）、ステップＳ１０に進む。
【００２７】
ステップＳ１０において、第２拡張領域が現在、いずれかのリングバッファの拡張領域として用いられていないかどうかを、メモリ１２に記憶されているｂｕｆｓｉｚｅ１及びｂｕｆｓｉｚｅ２を参照して判定する。ステップＳ１０は、請求項５に記載の第２判定手段に相当する。ｂｕｆｓｉｚｅ１が１６、又はｂｕｆｓｉｚｅ２が１２であれば、第２拡張領域は第１リングバッファ又は第２リングバッファの拡張領域として用いられていることになる。第２拡張領域が使用されていれば（ステップＳ１０：Ｎｏ）、ステップＳ１４に進む。第２拡張領域が使用されていなければ（ステップＳ１０：Ｙｅｓ）、ステップＳ１１に進む。
【００２８】
ステップＳ１１において、空きサイズと第１拡張領域分のブロックサイズ及び第２拡張領域分のブロックサイズとを加算した値（第２値とする。）と、書き込みデータサイズとを比較して、第２値が書き込みデータサイズ以上の場合（ステップＳ１１：Ｙｅｓ）、ステップＳ１２に進む。一方、第２値が書き込みデータサイズより小さい場合（ステップＳ１１：Ｎｏ）、ステップＳ１４に進む。
【００２９】
ステップＳ１２において、ＣＰＵ１１は第１リングバッファの領域を第２拡張領域まで拡張する。すなわち、メモリ１２のｂｕｆｓｉｚｅ１を１６に変更する。また、信号線４を介してＣＰＵ２１にｂｕｆｓｉｚｅ１を１６に変更する通知である第１リングバッファ拡張通知を行う。その後、リングバッファ拡張処理を終了する。
【００３０】
ステップＳ１３において、ＣＰＵ１１は第１リングバッファの領域を第１拡張領域まで拡張する。すなわち、メモリ１２のｂｕｆｓｉｚｅ１を１３に変更する。また、信号線４を介してＣＰＵ２１にｂｕｆｓｉｚｅ１を１３に変更する通知である第１リングバッファ拡張通知を行う。その後、リングバッファ拡張処理を終了する。ステップＳ１２及びステップＳ１３は、請求項５に記載の拡張手段に相当する。
【００３１】
ステップＳ１４において、ＣＰＵ１１は、本データ書込要求を保留して次の順番の処理を実行し、当該処理終了後に再度、本データ書込要求を試みるリトライ処理を行い、その後、ステップＳ１５のデータ書込処理に進む。
＜データ読出処理＞
図６は、装置１によるデータ読出処理のフローチャート図である。
【００３２】
まず、ステップＳ２１において、ＣＰＵ１１はＲＰ２が示すアドレスのブロックに書き込まれたデータの読み出しを行う。当該ブロックの読み出しが終わるとＲＰ２をインクリメントして次のアドレスを示す。また、信号線４を介してＣＰＵ２１にＲＰ２インクリメント通知を行う。（ステップＳ２２）。
続いて、ＲＰ２とＷＰ２を参照して、ＲＰ２とＷＰ２がイコールでなければ（ステップＳ２３：Ｎｏ）、ステップＳ２１に戻る。ＲＰ２とＷＰ２がイコールであれば（ステップＳ２３：Ｙｅｓ）、第２リングバッファを初期状態にする（ステップＳ２４）。このときに、ＣＰＵ１１は、ＣＰＵ２１に対して、信号線４を介してＣＰＵ２１に第２リングバッファ初期化通知を行う。そして、ＣＰＵ２１から確認信号が返ってきたら初期化を行う。すなわち、メモリ１２のｂｕｆｓｉｚｅ２を９、ＷＰ２を１７、ＲＰ２を１７とする。その後、データ読出処理を終了する。ステップＳ２３は、請求項２に記載の全読出判定手段に相当し、ステップＳ２４は、請求項２に記載の初期状態設定手段に相当する。
【００３３】
＜ＷＰインクリメント通知処理＞
図７は、装置１によるＷＰ２インクリメント通知受付処理のフローチャート図である。
まず、ＣＰＵ１１は、ＣＰＵ２１からＷＰ２インクリメント通知を受け付けると、メモリ１２のＷＰ２を通知された値に変更する（ステップＳ３１）。その後、ＷＰ２インクリメント通知受付処理を終了する。
【００３４】
＜ＲＰインクリメント通知受付処理＞
図８は、装置１によるＲＰ１インクリメント通知受付処理のフローチャート図である。
ＣＰＵ１１は、ＣＰＵ２１からＲＰ１インクリメント通知を受け付けると、メモリ１２のＲＰ１を通知された値に変更して（ステップＳ４１）、処理を終了する。
【００３５】
＜リングバッファ初期化通知受付処理＞
図９は、装置１による第１リングバッファ初期化通知受付処理のフローチャート図である。
ＣＰＵ１１は、ＣＰＵ２１から第１リングバッファ初期化通知を受け付けると、メモリ１２のｂｕｆｓｉｚｅ１を１３、ＲＰ１を１、ＷＰ１を１として、第１リングバッファを初期状態とし（ステップＳ５１）、ＣＰＵ２１に対して確認信号を送る。その後、処理を終了する。
【００３６】
＜リングバッファ拡張通知受付処理＞
図１０は、装置１による第２リングバッファ拡張通知受付処理のフローチャート図である。
ＣＰＵ１１は、ＣＰＵ２１から第２リングバッファ拡張通知を受け付けると、メモリ１２のｂｕｆｓｉｚｅ２を通知された値に変更して（ステップＳ６１）、処理を終了する。
【００３７】
＜具体例＞
ここで、図１１から図１５を用いて、データ送受システムの動作の一例について具体的に説明する。図１１から図１５は、データの書き込み及び読み出し制御による２つのリングバッファの状態変化を時系列で示す図である。装置２によるデータの書き込み及び読み出し速度は、装置１より遅いものとする。
【００３８】
まず、図１１は、第１リングバッファ、第２リングバッファが共に初期状態であり、第１装置のＣＰＵ１１は、第１リングバッファに対してデータｄ１の書き込み要求を受け付けたことを示す。データｄ１は３ブロック分のデータである。図１２において、ＣＰＵ１１はデータ書込処理により、データｄ１を第１リングバッファに書き込む。その後、データｄ２の書き込み要求を受け付けたので、再びデータ書込処理を実行する。データｄ２は７ブロック分のデータである。ＣＰＵ１１は、データｄ２を書き込むためのデータ書込処理において、現在の第１リングバッファの空きサイズと書込データサイズとを比較し、その結果、リングバッファ拡張処理を実行する。ＣＰＵ１１は、リングバッファ拡張処理において、書込データサイズと第１値とを比較した結果、第１リングバッファを第１拡張領域まで拡張することを決定する。
【００３９】
一方、第２装置のＣＰＵ２１は、ＣＰＵ１１からＷＰ１のインクリメント通知を受け付けて、ＷＰインクリメント通知受付処理を行い、データ読出処理を行う。
図１３において、ＣＰＵ１１は、リングバッファ拡張処理により第１拡張領域まで第１リングバッファの領域を拡張し、ＣＰＵ２１に第１リングバッファ拡張通知を行う。その後、拡張した第１リングバッファにデータｄ２を書き込む処理を行う。
【００４０】
データｄ２の書込処理終了後、ＣＰＵ１１は、データｄ４の書き込み要求を受け付けたので、再びデータ書込処理を行う。データｄ４は、６ブロック分のデータである。
ＣＰＵ１１は、データｄ４を書き込むためのデータ書込処理において、現在の第１バッファの空きサイズと書込データサイズとを比較し、その結果、リングバッファ拡張処理を実行する。
【００４１】
ＣＰＵ１１は、リングバッファ拡張処理において、書込データサイズと第２値とを比較した結果、第１リングバッファを第２拡張領域まで拡張することを決定する。
一方、ＣＰＵ２１は、第１リングバッファに書き込まれたデータｄ１を読み出すデータ読出処理を行っている途中に、ＣＰＵ１１から第１リングバッファ拡張通知を受け付け、優先順位に基づいてリングバッファ拡張通知受付処理を先に行う。その後、データ読出処理を再開するが、データｄ３の書込要求を受け付けたため、優先順位に基づいてデータｄ３の書込処理を先に実行する。
【００４２】
図１４において、ＣＰＵ１１は、リングバッファ拡張処理により拡張した第１リングバッファにデータｄ４を書き込んている途中で、ＣＰＵ２１からＷＰインクリメント通知を受け付けたため、メモリ１２のＷＰ２をインクリメントする。ＣＰＵ１１は、データｄ４の書込処理終了後、データｄ３の読出処理を行う。
一方、ＣＰＵ２１は、データｄ３の書込処理を終了して、データｄ２の読出処理を行う。
【００４３】
図１５において、ＣＰＵ１１は、データｄ３の読出処理において、ＷＰ２とＲＰ２がイコール、すなわち、第２リングバッファ内に書き込まれたデータを全て読み出したため、第２リングバッファを初期状態に設定する。その後、データｄ５の書き込み要求を受け付ける。
一方、ＣＰＵ２１は、データｄ２の読出処理を行っている途中で、第２リングバッファの初期化通知を受けて付けたため、リングバッファ初期化受付処理を行い、その後再び、データｄ２の読出処理を再開する。
＜補足＞
なお、本発明は、上記実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）実施の形態において、リングバッファ制御処理は、データを送受する各装置が連携して行っていたが、他の装置が行ってもよい。
（２）一方のリングバッファに対するデータの書込み予定量を判定すると共に、他方のリングバッファに対するデータの書込み予定量を判定して、各リングバッファの拡張領域を決定してもよい。
（３）実施の形態において、拡張領域を２つに分けて設定した一例を説明したが、拡張領域は３つ又は４つ等、幾つに分けて設定してもよい。
（４）実施の形態において、７つのリングバッファ制御処理の優先順位を示したが、この優先順位に限られず、どのように優先順位を設定してもよい。例えば、データ書込処理より、データ読出処理の優先順位を上位にしてもよい。
（５）実施の形態において、定数と変数のそれぞれテーブルを各装置のメモリに記憶させていたが、共有メモリ３に記憶させてもよい。この場合、各装置は、共有メモリに記憶された定数と変数のそれぞれのテーブルを共用してリングバッファ制御を行う。
（６）本発明は、上記実施の形態に示すリングバッファ制御方法であるとしてもよい。また、リングバッファ制御方法をコンピュータにより実現する制御プログラムであるとしてもよいし、前記制御プログラムからなるデジタル信号であるとしてもよい。
（７）本発明は、前記制御プログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリ等に記録したものとしてもよい。
（８）本発明は、前記制御プログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
（９）本発明は、前記制御プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記制御プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するものとしてもよい。
【００４４】
【発明の効果】
以上説明したように、本発明に係るデータ送受システムは、２つの装置と共有メモリとを備え、当該共有メモリにおけるアドレスが連続したメモリ領域を、一方の装置が書き込みを行い他方の装置が読み出しを行う第１リングバッファ、及び他方の装置が書き込みを行い一方の装置が読み出しを行う第２リングバッファに割り当てて、各装置により各リングバッファに対してデータの書き込み及び読み出しが行われることにより装置間のデータ送受を行うデータ送受システムであって、前記各リングバッファに割り当てる２つのメモリ領域の中間に拡張領域を割り当てる割当手段と、一方のリングバッファについて、当該リングバッファの現在の空き容量と、当該リングバッファに書き込まれる予定のデータ量とを比較して、当該リングバッファに現在の空き容量以上のデータ量が書き込まれる予定であるか否かを判定する書込可否判定手段と、前記拡張領域の使用状況に基づいて、一方のリングバッファの拡張が可能か否かを判定する拡張可否判定手段と、前記一方のリングバッファについて、前記書込可否判定手段及び前記拡張可否判定手段の判定が共に肯定的である場合に、前記拡張領域を用いて当該リングバッファを拡張する拡張手段とを備えることを特徴とする。
【００４５】
これにより、２つの装置間の共有メモリに割り当てられた２つのリングバッファにおいて、各装置による各リングバッファに対するデータの書き込み待ち状態を減らすことができる。また、各リングバッファに割り当てられた２つのメモリ領域の中間に拡張領域を割り当てているので、各リングバッファの拡張領域として併用できる。更に、各リングバッファは、アドレスが連続したメモリ領域が割り当てられているため、プログラムのアルゴリズムを単純にすることができ、高速にバッファ処理をすることができる。
【００４６】
また、前記データ送受システムは、一方のリングバッファに書き込まれたデータが全て読み出されたか否かを判定する全読出判定手段と、前記一方のリングバッファについて、前記全読出判定手段の判定が肯定的である場合に、当該リングバッファをデータの書込み及び読み出しが行われる前の初期状態に設定する初期状態設定手段とを更に備えることとしてもよい。
【００４７】
これにより、リングバッファに書き込まれたデータが全て読み出された場合、拡張手段により拡張された各リングバッファの領域、又、リードポインタ及びライトポインタは、初期状態となるため、無駄にリングバッファを拡張したままの状態を継続させることなく、他のリングバッファにおいて拡張が必要となる場合に備えることができる。
【００４８】
また、前記データ送受システムは、前記拡張領域を、第１拡張領域と第２拡張領域の２つの拡張領域として用い、前記拡張可否判定手段は、更に、前記第１拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第１判定手段と、前記第２拡張領域が、一方のリングバッファの領域として用いられているか否かを判定する第２判定手段とを備え、前記拡張手段は、前記一方のリングバッファについて、前記書込可否判定手段及び前記第１判定手段の判定が共に肯定的である場合に、前記第１拡張領域を用いて当該リングバッファを拡張し、前記一方のリングバッファについて、前記書込可否判定手段、前記第１判定手段及び前記第２判定手段の判定が、共に肯定的である場合に、前記第１拡張領域及び前記第２拡張領域を用いて当該リングバッファを拡張することとしてもよい。
【００４９】
拡張領域を２つに分けているため、一方のリングバッファの拡張が必要な場合に、書き込まれる予定のデータサイズに応じて２段階に分けた拡張を行うことができ、無駄な拡張を避けて、他方のリングバッファの拡張が必要な場合に備えることができる。
また、前記各手段を、前記各装置が連携して実行することとしてもよい。
これにより、リングバッファ制御処理を行うための新たな装置を実装することなく、２装置のみでリングバッファ制御処理を行うことができる。
【図面の簡単な説明】
【図１】本発明に係るデータ送受システムのブロック構成図である。
【図２】第１リングバッファ及び第２リングバッファを制御するために用いる定数と変数のテーブルである。
【図３】２つのリングバッファの初期状態を示す図である。
【図４】装置１によるデータ書込処理のフローチャート図である。
【図５】装置１によるリングバッファ拡張処理のフローチャート図である。
【図６】装置１によるデータ読出処理のフローチャート図である。
【図７】装置１によるＷＰ２インクリメント通知受付処理のフローチャート図である。
【図８】装置１によるＲＰ１インクリメント通知受付処理のフローチャート図である。
【図９】装置１による第１リングバッファ初期化通知受付処理のフローチャート図である。
【図１０】装置１による第２リングバッファ拡張通知受付処理のフローチャート図である。
【図１１】データの書き込み及び読み出し制御による２つのリングバッファの状態変化を示す図である。
【図１２】データの書き込み及び読み出し制御による２つのリングバッファの状態変化を示す図である。
【図１３】データの書き込み及び読み出し制御による２つのリングバッファの状態変化を示す図である。
【図１４】データの書き込み及び読み出し制御による２つのリングバッファの状態変化を示す図である。
【図１５】データの書き込み及び読み出し制御による２つのリングバッファの状態変化を示す図である。
【符号の説明】
１、２      装置
３          共有メモリ
４          信号線
１１、２１  ＣＰＵ
１２、２２  メモリ
１３、２３  入出力部
３１        変数テーブル
３２        定数テーブル
【図１】
2004164202.tif 000003
【図２】
2004164202.tif 000004
【図３】
2004164202.tif 000005
【図４】
2004164202.tif 000006
【図５】
2004164202.tif 000007
【図６】
2004164202.tif 000008
【図７】
2004164202.tif 000009
【図８】
2004164202.tif 000010
【図９】
2004164202.tif 000011
【図１０】
2004164202.tif 000012
【図１１】
2004164202.tif 000013
【図１２】
2004164202.tif 000014
【図１３】
2004164202.tif 000015
【図１４】
2004164202.tif 000016
【図１５】
2004164202.tif 000017