(57)【特許請求の範囲】
【請求項１】
キューとして用いるセグメントであって、該セグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるエントリよりなるデータ部とを有する複数のセグメントを生成し、前記各セグメントに環状のリンクを設定し、環状にリンクされた複数のセグメントのうちの１つのセグメント（「第１セグメント」という）のキュー制御情報部に初期値を設定するキュー生成手段を備え、
前記第１セグメントのキュー制御情報部には、データの登録先のエントリ及び取り出しエントリを指す登録ポインタ及び取り出しポインタが少なくとも保持され、
前記第１セグメントのキュー制御情報部の登録ポインタが指すエントリに、データを登録するデータ登録手段と、
前記第１セグメントのキュー制御情報部の取り出しポインタが指すエントリからデータを取り出すデータ取り出し手段と、
キューの排他制御を行うキュー排他手段と、
を備えている、ことを特徴とするキュー制御システム。
【請求項２】
前記第１セグメントの前記キュー制御情報部の登録ポインタが指すエントリの直前のエントリから、データを取り出すデータ逆取り出し手段をさらに備えている、ことを特徴とする請求項１記載のキュー制御システム。
【請求項３】
キューの使用を停止し、キューの使用停止以降のデータ登録およびデータ取り出しを抑止するキュー停止手段と、
キューとして利用していたセグメントを消去するキュー消去手段と、
をさらに備えている、ことを特徴とする請求項１又は２記載のキュー制御システム。
【請求項４】
前記キュー停止手段により使用停止となったキューのキュー制御情報部を再初期化し、再度キューを使用できるようにするキュー再初期化手段をさらに備えている、ことを特徴とする請求項３記載のキュー制御システム。
【請求項５】
データの登録時に空きエントリがない場合、キューとして利用する新たなセグメントを生成し、セグメント間の環状リンクを設定し直すキュー拡張手段をさらに備えている、ことを特徴とする請求項１乃至４のいずれか一に記載のキュー制御システム。
【請求項６】
データの取り出し時に使用されていないセグメントを削除し、セグメント間の環状リンクを設定し直すキュー縮退手段をさらに備えている、ことを特徴とする請求項１乃至５のいずれか一に記載のキュー制御システム。
【請求項７】
データの登録時に空きエントリがない場合、他プロセスによりデータが取り出され空きエントリができることを待ち合わせる待ち合わせ手段をさらに備えている、ことを特徴とする請求項１乃至６のいずれか一に記載のキュー制御システム。
【請求項８】
前記待ち合わせ手段が、データの取り出し時に登録されているデータがない場合には、他プロセスによりデータが登録されることを待ち合わせる手段を含む、ことを特徴とする請求項７に記載のキュー制御システム。
【請求項９】
キューとして用いるセグメントであって、該セグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるエントリよりなるデータ部とを有する複数のセグメントを生成し、前記各セグメントに環状のリンクを設定し、環状にリンクされた複数のセグメントのうちの１つのセグメント（「第１セグメント」という）のキュー制御情報部に初期値を設定するステップを有し、
前記第１セグメントのキュー制御情報部には、データの登録先のエントリ及び取り出しエントリを指す登録ポインタ及び取り出しポインタが少なくとも保持され、
前記第１セグメントのキュー制御情報部の登録ポインタの示すエントリへデータを登録するステップと、
前記第１セグメントのキュー制御情報部の取り出しポインタの示すエントリからデータを取り出すステップと、
キューを排他制御するステップと、
を含む、ことを特徴とするキュー制御方法。
【請求項１０】
前記第１セグメントの前記キュー制御情報部の登録ポインタが指すエントリの直前のエントリからデータを取り出すステップを含む、ことを特徴とする請求項９記載のキュー制御方法。
【請求項１１】
キューの使用を停止して以降のデータ登録およびデータ取り出しを抑止するステップと、
キューとして利用していたセグメントを消去するステップと、
を含む、ことを特徴とする請求項９又は１０記載のキュー制御方法。
【請求項１２】
停止状態のキューを再初期化し、再度キューを使用可能とするステップをさらに含む、ことを特徴とする請求項９乃至１１のいずれか一に記載のキュー制御方法。
【請求項１３】
データの登録時に空きエントリがない場合に、キューとして利用する新たなセグメントを生成するステップをさらに含む、ことを特徴とする請求項９乃至１２のいずれか一に記載のキュー制御方法。
【請求項１４】
データの取り出し時に使用していないセグメントを削除するステップをさらに含む、ことを特徴とする請求項９乃至１３のいずれか一に記載のキュー制御方法。
【請求項１５】
データの登録時に空きエントリがない場合は他プロセスによりデータが取り出され空きエントリができることを待ち合わせるステップと、
データの取り出し時に、空きエントリを待ち合わせているプロセスに対しエントリが空いたことを通知して待ち合わせを解除するステップと、
を含む、ことを特徴とする請求項９乃至１４のいずれか一に記載のキュー制御方法。
【請求項１６】
データの取り出し時に登録されているデータがない場合には他プロセスによりデータが登録されることを待ち合わせるステップと、
データの登録時にデータの登録を待ち合わせているプロセスに対し、データが登録されたことを通知して待ち合わせを解除するステップと、
を含む、ことを特徴とする請求項９乃至１５のいずれか一に記載のキュー制御方法。
【請求項１７】
キューの管理をコンピュータで行わせるプログラムであって、
（ａ）キューとして用いるセグメントであって、該セグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるエントリよりなるデータ部とを有する複数のセグメントを生成し、前記各セグメントに環状のリンクを設定し、環状にリンクされた複数のセグメントのうちの１つのセグメント（「第１セグメント」という）のキュー制御情報部に初期値を設定する処理を有し、前記第１セグメントのキュー制御情報部には、データの登録先のエントリ及び取り出しエントリを指す登録ポインタ及び取り出しポインタが少なくとも保持され、
（ｂ）前記第１セグメントのキュー制御情報部の登録ポインタが指すエントリにデータを登録する処理と、
（ｃ）前記第１セグメントのキュー制御情報部の取り出しポインタが指すエントリからデータを取り出す処理と、
（ｄ）キューを排他制御する処理と、
を有し、
前記（ａ）乃至（ｄ）の処理を前記コンピュータに実行させるためのプログラム。
【請求項１８】
請求項１７記載のプログラムにおいて、前記第１セグメントの前記キュー制御情報部の登録ポインタが指すエントリの直前のエントリからデータを取り出す処理を前記コンピュータにさらに実行させるためのプログラム。
【請求項１９】
請求項１７又は１８記載のプログラムにおいて、キューの使用を停止し、以降のデータ登録およびデータ取り出しを抑止する処理と、
キューとして利用していたセグメントを消去する処理と、を前記コンピュータにさらに実行させるためのプログラム。
【請求項２０】
請求項１７乃至１９のいずれか一に記載のプログラムにおいて、
使用停止となったキューのキュー制御情報部を再初期化し、再度キューを使用できるようにする処理を前記コンピュータにさらに実行させるためのプログラム。
【請求項２１】
請求項１７乃至２０のいずれか一に記載のプログラムにおいて、
データの登録時に空きエントリがない場合、キューとして利用する新たなセグメントを生成しセグメント間のリンクを設定し直す処理を前記コンピュータにさらに実行させるためのプログラム。
【請求項２２】
請求項１７乃至２１のいずれか一に記載のプログラムにおいて、
データの取り出し時に、使用していないセグメントを削除しセグメント間のリンクを設定し直す処理を前記コンピュータにさらに実行させるためのプログラム。
【請求項２３】
請求項１７乃至２２のいずれか一に記載のプログラムにおいて、
データの登録時に空きエントリがない場合、他プロセスによりデータが取り出され空きエントリができることを待ち合わせる処理と、
データの取り出し時に空きエントリを待ち合わせているプロセスに対しエントリが空いたことを通知して待ち合わせを解除する処理と、
を前記コンピュータにさらに実行させるためのプログラム。
【請求項２４】
請求項１７乃至２３のいずれか一に記載のプログラムにおいて、
データの取り出し時に登録されているデータがない場合、他プロセスによりデータが登録されることを待ち合わせる処理と、
データの登録時にデータの登録を待ち合わせているプロセスに対しデータが登録されたことを通知し待ち合わせを解除する処理と、を前記コンピュータにさらに実行させるためのプログラム。
【請求項２５】
前記キュー生成手段は、環状のリンクを生成し前記第１セグメントのキュー制御情報部を初期設定したのち、キューの状態を示す状態フラグを使用中に設定する手段と、
利用者プログラムに前記第１セグメントのアドレスを返却する手段と、
を備え、
前記利用者プログラムは、データの登録、及び取り出しにあたり、前記アドレスをキーとして、前記データ登録手段及び前記データ取り出し手段に対して、データの登録と取り出しをそれぞれ要求する、ことを特徴とする請求項１乃至８のいずれか一に記載のキュー制御システム。
【請求項２６】
前記第１のセグメントがキュー制御情報部に設定される情報として、データを登録するセグメントのエントリを示す登録ポインタと、データを取りだすセグメントのエントリを示す取り出しポインタと、キューに登録されているデータの数と、次のセグメントのアドレスよりなるリンク情報と、を少なくとも有し、
残りのセグメントはキュー制御情報部に設定される情報として、次セグメントのアドレスよりなるリンク情報を有する、ことを特徴とする請求項１乃至８のいずれか一に記載のキュー制御システム。
【請求項２７】
前記第１セグメントが、キュー制御情報部として、データを登録するセグメントのエントリを示す登録ポインタと、データを取りだすセグメントのエントリを示す取り出しポインタと、キューに登録されているデータの数と、次のセグメントのアドレスよりなるリンク情報と、に加えて、現在使用している使用セグメント数と、セグメントの初期値である初期セグメント数と、セグメントの最大値を示す最大セグメント数と、キューの排他制御に用いられる排他セマフォ、プロセス間の通知用の通知セマフォと、待ち合わせプロセス数を管理するための待ち合わせ数とをそれぞれ格納するための欄を含み、
前記第１セグメントを除くセグメントのキュー制御情報部には、次セグメントのアドレスよりなるリンク情報のみが設定される、ことを特徴とする請求項１乃至８のいずれか一に記載のキュー制御システム。
【請求項２８】
前記キュー停止手段は、キューの状態を示す状態フラグをチェックし、前記状態フラグが使用中である場合、状態フラグを停止状態に設定する手段を備えている、ことを特徴とする請求項３記載のキュー制御システム。
【請求項２９】
前記キュー消去手段は、キューの状態を示す状態フラグをチェックし、前記状態フラグが停止状態である場合、使用しているキューセグメントを消去し、前記状態フラグが停止状態でない場合には、消去は行わないように制御する手段を備えている、ことを特徴とする請求項３記載のキュー制御システム。
【請求項３０】
前記キュー再初期化手段は、キューの状態を示す状態フラグをチェックし、前記状態フラグが停止状態である場合には、前記第１セグメントのキュー制御情報部に初期値を設定し、前記初期値を設定する領域は、キューの使用により値が更新される領域のみとされ、前記状態フラグを使用中に設定し、
前記状態フラグが停止状態でない場合には、キューの再初期化は行わないように制御する手段を備えている、ことを特徴とする請求項４記載のキュー制御システム。
【請求項３１】
前記データ登録手段は、キューの状態を示す状態フラグが使用中である場合、前記第１セグメントのキュー制御情報部の登録ポインタの指すエントリがセグメント内の最終エントリかチェックする手段と、
前記チェックの結果、最終エントリの場合、次の登録ポインタを次のセグメントの先頭エントリとし、最終エントリでない場合、次の登録ポインタを登録ポインタの指すエントリの次のエントリとする手段と、
前記次の登録ポインタがキュー制御情報部の取り出しポインタと一致するか否か判定する手段と、
前記判定の結果、一致する場合、空きエントリなしとして、データ登録を行わず、一致しない場合、登録ポインタの指すエントリへ登録データを移送する制御を行う手段と、
前記第１セグメントのキュー制御情報部の登録ポインタを次のポインタをさすエントリに設定する手段と、
前記第１セグメントのキュー制御情報部のデータ数を１加算する手段と、
を備えている、ことを特徴とする請求項１乃至８のいずれか一に記載のキュー制御システム。
【請求項３２】
前記データ取り出し手段は、キューの状態を示す状態フラグが使用中である場合、前記第１セグメントのキュー制御情報部のデータ数が正整数であるかチェックする手段と、
前記データ数が正整数の場合、前記第１セグメントのキュー制御情報部の取り出しポインタからデータを取得し、前記データ数を１つ減算する手段と、
データを取り出したエントリがセグメント内の最終エントリの場合、取り出しポインタが次のセグメントの第１エントリを指すように設定する手段と、
データを取り出したエントリがセグメント内の最終エントリでない場合、取り出しポインタが次のエントリを指すように設定する手段と、
を備えている、ことを特徴とする請求項１乃至８のいずれか一に記載のキュー制御システム。
【請求項３３】
前記データ逆取り出し手段は、キュー状態を示す状態フラグが使用中である場合、前記第１セグメントのキュー制御情報部のデータの数をチェックする手段と、
前記データ数が正整数のとき、前記第１セグメントのキュー制御情報部の登録ポインタの指すエントリ（「登録エントリ」という）がセグメント内の先頭エントリではない場合、登録エントリの１つ前のエントリを指すように登録ポインタを更新する手段と、
前記登録エントリがセグメント内の先頭エントリである場合、登録ポインタが指すセグメントの１つ前のセグメントを求め、該セグメントの最終エントリを指すように登録ポインタを更新する手段と、
前記更新した登録ポインタの指すエントリから、前記利用者プログラムから伝えられたデータ返却領域へデータを移送する手段と、
前記第１セグメントのキュー制御情報部のデータ数から１を減算する手段と、
を備えている、ことを特徴とする請求項２記載のキュー制御システム。
【請求項３４】
前記データ登録手段は、前記第１セグメントのキュー制御情報部の登録ポインタの指すエントリ（「登録エントリ」という）がセグメント内の最終エントリである場合に、前記登録ポインタの指すセグメント（「登録セグメント」という）の次セグメントが取り出しポインタが指しているセグメントであり、使用セグメントが１つ増加しても予め定められた最大セグメント数以下である場合には、前記キュー拡張手段に、登録セグメントを指定してキューを拡張させるように制御する手段を備え、
前記キュー拡張手段は、新しいセグメントを１つ生成し、登録セグメントの次セグメントが生成したセグメントとなるように、環状リンクを再設定し、使用セグメント数に１を加算する手段を備え、
セグメントの次セグメントとして新しいキューセグメントが追加され、
前記データ登録手段は、次登録ポインタに追加したセグメントの先頭エントリを設定し、登録エントリへの登録データのエントリを行う、ことを特徴とする請求項５記載のキュー制御システム。
【請求項３５】
前記データ取り出し手段は、前記第１セグメントのキュー制御情報部の取り出しポインタの指すエントリがセグメント内の最終エントリである場合、次セグメントの先頭エントリを指すようにデータ取り出しポインタを更新し、その際、登録ポインタが指すセグメントがデータを取り出したセグメント（「取り出しセグメント」という）でない場合、取り出しセグメントが前記１つのセグメントではなく、前記第１セグメントのキュー制御情報部の使用セグメント数を１つ減算した値が初期セグメント数以上である場合、前記キュー縮退手段に、取り出しセグメントを指定して、キューを縮退させるように制御する手段を備え、
前記キュー縮退手段は、指定されたセグメントである取り出しセグメントを消去し、指定されたセグメントの前セグメントが次セグメントを指すように、環状リンクを再設定する手段を備えている、ことを特徴とする請求項６記載のキュー制御システム。
【請求項３６】
前記データ逆取り出し手段は、前記第１セグメントのキュー制御情報部の登録ポインタが指すエントリがセグメント内の先頭エントリである場合、前セグメントの最終エントリを指すように登録ポインタを更新し、その際、更新前の登録ポインタが指していたセグメント（「元セグメント」という）が取り出しポインタの指すセグメントではない場合、元セグメントが第１セグメントではなく、過去にキューの拡張が起こっており、前記第１セグメントのキュー制御情報部の使用セグメント数を１つ減算した値が初期セグメント数以上である場合、前記キュー縮退手段に、元セグメントを指定してキューを縮退させるように制御する手段を備えている、ことを特徴とする請求項６記載のキュー制御システム。
【請求項３７】
前記データ登録手段は、設定した次登録ポインタの指すエントリが、前記第１セグメントのキュー制御情報部の取り出しポインタの指すエントリと同じである場合には、前記待ち合わせ手段を用いて、他プロセスが、データを取り出し空きエントリができることを待ち合わせ、
待ちあわせが解除され、空きエントリができた場合、前記データ登録手段は、状態フラグのチェックから処理を再実行し、データが登録できた場合であって、前記第１セグメントのキュー制御情報部の待ち合わせ数が０より大きい場合、前記データ登録手段は、前記第１セグメントのキュー制御情報部の通知セマフォに対し通知を行い、待ち合わせているプロセスを起動する制御を行う、ことを特徴とする請求項７に記載のキュー制御システム。
【請求項３８】
前記待ち合わせ手段は、前記第１セグメントのキュー制御情報部の待ち合わせ数に１を加算し、キュー排他手段を使用してキューの排他を解除し、前記第１セグメントのキュー制御情報部の通知セマフォで待ち合わせを行い、
前記データ登録手段、前記データ取り出し手段、前記データ逆取り出し手段、前記キュー停止手段の少なくとも１つからの通知により待ち合わせが解除され、
その後、前記待ち合わせ手段は、前記キュー排他手段によりキューを排他し、前記第１セグメントのキュー制御情報部の待ち合わせ数から１を減算する、ことを特徴とする請求項７に記載のキュー制御システム。
【請求項３９】
前記データ取り出し手段は、前記第１セグメントのキュー制御情報部のデータ数が０である場合、前記待ち合わせ手段を使用して、他プロセスによるデータの登録を待ち合わせ、
待ちあわせが解除され、データが登録されたら、前記データ取り出し手段は、状態フラグのチェックから処理を再実行し、データを取り出し、ポインタの更新が完了した場合に、前記第１セグメントのキュー制御情報部の待ち合わせ数が０より大きい場合には、前記データ取り出し手段は、前記第１セグメントのキュー制御情報部の通知セマフォに対し通知を行い、待ち合わせているプロセスを起動する制御を行う、ことを特徴とする請求項７に記載のキュー制御システム。
【請求項４０】
利用者プログラムがキューからデータを取り出す場合において、前記データ逆取り出し手段では、前記第１セグメントのキュー制御情報部のデータ数が０である場合には、前記待ち合わせ手段を使用して、他プロセスによるデータの登録を待ち合わせ、
待ちあわせが解除された、すなわちデータが登録されたら、前記データ逆取り出し手段は、状態フラグのチェックから処理を再実行し、データの取り出しが完了した場合に、前記第１セグメントのキュー制御情報部の待ち合わせ数が０より大きい場合には、前記データ逆取り出し手段は、前記第１セグメントのキュー制御情報部の通知セマフォに対し通知を行い、待ち合わせているプロセスを起動する制御を行う、ことを特徴とする請求項７に記載のキュー制御システム。
【請求項４１】
請求項１乃至８、２５乃至４０のいずれか一に記載のキュー制御システムを備えている情報処理装置。
【請求項４２】
仮想記憶方式を採用し、セグメンテーションで仮想記憶空間を管理するコンピュータのセグメントをキューで管理するシステムにおいて、
請求項１乃至８、２５乃至４０のいずれか一に記載のキュー制御システムを備えている、ことを特徴とするキュー制御システム。
【請求項４３】
前記キューを生成するにあたり、前記第１セグメントのキュー制御情報部を初期設定したのちに、状態フラグを使用中に設定し、利用者プログラムには、前記第１セグメントのアドレスを返却するステップと、
前記利用者プログラムは、前記アドレスをキーとして、データの登録及び取り出しを要求するステップと、
を含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項４４】
前記第１セグメントが、キュー制御情報部として、データを登録するセグメントのエントリを示す登録ポインタ、データを取りだすセグメントのエントリを示す取り出しポインタと、登録データ数、セグメント数、次のセグメントのアドレスよりなるリンク情報を有し、
残りのセグメントはキュー制御情報部として、次セグメントのアドレスよりなるリンク情報を有する、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項４５】
前記第１セグメントが、キュー制御情報部として、データを登録するセグメントのエントリを示す登録ポインタと、データを取りだすセグメントのエントリを示す取り出しポインタと、キューに登録されているデータの数と、次のセグメントのアドレスよりなるリンク情報と、に加えて、現在使用している使用セグメント数と、セグメントの初期値である初期セグメント数と、セグメントの最大値を示す最大セグメント数と、キューの排他制御に用いられる排他セマフォ、プロセス間の通知用の通知セマフォと、待ち合わせプロセス数を管理するための待ち合わせ数とをそれぞれ格納するための欄を含み、
前記第１セグメントを除くセグメントのキュー制御情報部には、次セグメントのアドレスよりなるリンク情報のみが設定される、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項４６】
キューの停止を行うにあたり、キューの状態を示す状態フラグをチェックし、状態が使用中である場合、状態フラグを停止状態に設定するステップを含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項４７】
キューを消去するにあたり、キューの状態を示す状態フラグをチェックし、状態が停止状態である場合、使用しているキューのセグメントを全て消去するステップを含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項４８】
キューを再初期化するにあたり、キューの状態を示す状態フラグが停止中であるかチェックするステップと、
状態が停止状態である場合、前記第１セグメントのキュー制御情報部に初期値を設定するステップを有し、
前記初期値を設定する領域はキューの使用により値が更新される領域のみとされ、
前記状態フラグを使用中状態に設定するステップを有する、
ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項４９】
前記データの登録にあたり、キューの状態を示す状態フラグが使用中であるかチェックするステップと、
状態が使用中である場合、前記第１セグメントのキュー制御情報部の登録ポインタの指すエントリがセグメント内の最終エントリかチェックするステップと、
最終エントリの場合、次の登録ポインタを次のセグメントの先頭エントリとするステップと、
最終エントリでない場合、次の登録ポインタを登録ポインタの指すエントリの次のエントリとするステップと、
前記次の登録ポインタが前記第１セグメントのキュー制御情報部の取り出しポインタと一致するか否か判定するステップと、一致しない場合、登録ポインタの指すエントリへ登録データを移送するステップと、
を有し、
一方、前記次の登録ポインタが前記第１セグメントのキュー制御情報部の取り出しポインタと一致する場合、空きエントリなしとしてデータ登録を行わず、
前記第１セグメントのキュー制御情報部の登録ポインタを次のポインタをさすエントリに設定するステップと、
前記第１セグメントのキュー制御情報部のデータ数を１加算するステップと、
を含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項５０】
前記データを取り出すにあたり、キューの状態を示す状態フラグが使用中であるかチェックするステップと、
状態が使用中ある場合、前記第１セグメントのキュー制御情報部のデータ数が正整数であるかチェックするステップと、
前記データ数が正整数の場合、前記第１セグメントのキュー制御情報部の取り出しポインタからデータを取得するステップと、
前記第１セグメントのキュー制御情報部のデータ数を１つ減算するステップ、データを取り出したエントリがセグメント内の最終エントリの場合、取り出しポインタが次のセグメントの第１エントリを指すように設定するステップと、
セグメント内の最終エントリでない場合、取り出しポインタが次のエントリを指すように設定するステップと、
を含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項５１】
前記第１セグメントの前記キュー制御情報部の登録ポインタが指すエントリの直前のエントリからデータを取り出すにあたり、前記第１セグメントの状態フラグが使用中であるかチェックするステップと、
状態が使用中である場合、前記第１セグメントのキュー制御情報部のデータの数をチェックするステップと、
データ数が正整数のとき、前記第１セグメントのキュー制御情報部の登録ポインタの指すエントリ（「登録エントリ」という）がセグメント内の先頭エントリではない場合、登録エントリの１つ前のエントリを指すように登録ポインタを更新するステップと、
前記登録エントリがセグメント内の先頭エントリである場合、登録ポインタが指すセグメントの１つ前のセグメントを求め、該セグメントの最終エントリを指すように登録ポインタを更新するステップと、
更新した登録ポインタの指すエントリから、前記利用者プログラムから伝えられたデータ返却領域へデータを移送するステップと、
前記第１セグメントのキュー制御情報部のデータ数から１減算するステップ、
を含む、ことを特徴とする請求項１０記載のキュー制御方法。
【請求項５２】
利用者プログラムがキューにデータを登録する場合のデータ登録ステップにおいて、
前記第１セグメントのキュー制御情報部の登録ポインタの指すエントリ（「登録エントリ」という）がセグメント内の最終エントリである場合、登録ポインタの指すセグメント（「登録セグメント」という）の次セグメントが、前記第１セグメントのキュー制御情報部の取り出しポインタが指しているセグメントであり、使用セグメント数を１つ増加しても、予め定められた最大セグメント数を超えない場合、登録セグメントを指定してキューを拡張させるステップと、
前記キュー拡張ステップでは、新しいセグメントを１つ生成し、登録セグメントの次セグメントが生成したセグメントとなるように、環状リンクを再設定するステップと、
前記第１セグメントのキュー制御情報部の使用セグメント数に１を加算し、登録セグメントの次セグメントとして新しいキューセグメントが追加するステップと、
次登録ポインタに追加したセグメントの先頭エントリを設定するステップと、
を有し、
登録セグメントの次セグメントが取り出しポインタが指しているセグメントではない場合には、新たなセグメントは生成せず、また、前記第１セグメントのキュー制御情報部の使用セグメント数に１加算した値が最大セグメント数より大となる場合には、新たなセグメントを生成しないように制御するステップを、さらに含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項５３】
前記利用者プログラムがキューからデータを取り出す場合のデータ取り出しステップにおいて
前記第１セグメントのキュー制御情報部の取り出しポインタの指すエントリがセグメント内の最終エントリである場合、次セグメントの先頭エントリを指すようにデータ取り出しポインタを更新するステップを有し、
その際、前記第１セグメントのキュー制御情報部の登録ポインタが指すセグメントがデータを取り出したセグメント（「取り出しセグメント」という）でない場合、取り出しセグメントが前記１つのセグメントではなく、前記第１セグメントのキュー制御情報部の使用セグメント数を１つ減算しても前記第１セグメントのキュー制御情報部の初期セグメント数を下回らない場合、取り出しセグメントを指定してキューを縮退させ、
前記キュー縮退ステップは、指定されたセグメントである取り出しセグメントを消去し、指定されたセグメントの前セグメントが次セグメントを指すように、環状リンクを再設定するステップと、
登録ポインタの指すセグメントが取り出しセグメントである場合、取り出しセグメントが前記１つのセグメントの場合、及び、前記使用セグメント数から１減算した値が前記第１セグメントのキュー制御情報部の初期セグメント数よりも小の場合には、セグメントを削除しないように制御するステップを、さらに含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項５４】
利用者プログラムがキューからデータをＬＩＦＯ（Last  In  First  Out）形式で取り出す場合のデータ逆取り出しステップにおいて、
前記第１セグメントのキュー制御情報部の登録ポインタが指すエントリがセグメント内の先頭エントリである場合、前セグメントの最終エントリを指すように登録ポインタを更新し、その際、更新前の登録ポインタが指していたセグメント（「元セグメント」という）が取り出しポインタの指すセグメントではない場合、元セグメントが第１セグメントではなく、過去にキューの拡張が起こっており、前記第１セグメントのキュー制御情報部の使用セグメント数から１減算した値が初期セグメント数以上である場合、キュー縮退ステップに元セグメントを指定してキューを縮退させるステップと、
更新前の登録ポインタが指していたセグメント（「元セグメント」という）が取り出しポインタの指すセグメントの場合は、元セグメントが第１セグメントの場合、及び、前記第１セグメントのキュー制御情報部の使用セグメント数から１減算した値が初期セグメント数より小となる場合には、セグメントを削除しないように制御するステップと、を含む、ことを特徴とする請求項１０乃至１６のいずれか一に記載のキュー制御方法。
【請求項５５】
利用者プログラムがキューにデータを登録する場合において、データ登録ステップでは、設定した次登録ポインタの指すエントリが前記第１セグメントのキュー制御情報部の取り出しポインタの指すエントリと同じである場合には、他プロセスが、データを取り出し空きエントリができることを待ち合わせるステップと、
前記データ登録ステップにて、待ちあわせが解除され、空きエントリができたら、キューの状態を示す状態フラグのチェックから処理を再実行するステップと、
データが登録できた場合に、前記第１セグメントのキュー制御情報部の待ち合わせ数が０より大きい場合、前記データ登録ステップは、前記第１セグメントのキュー制御情報部の通知セマフォに対し通知を行い、待ち合わせているプロセスを起動するステップと、
を含む、ことを特徴とする請求項９乃至１６のいずれか一に記載のキュー制御方法。
【請求項５６】
前記待ち合わせステップにおいて、前記第１セグメントのキュー制御情報部の待ち合わせ数に１を加算し、キューの排他を解除し、前記第１セグメントのキュー制御情報部の通知セマフォで待ち合わせを行うステップと、
データ登録、データ取り出し，データ逆取り出し，あるいはキュー停止ステップからの通知により待ち合わせが解除され、
その後、キューを排他し、前記第１セグメントのキュー制御情報部の待ち合わせ数から１を減算するステップを含む、ことを特徴とする請求項５４記載のキュー制御方法。
【請求項５７】
利用者プログラムがキューからデータを取り出す場合において、
データ逆取り出しステップでは、前記第１セグメントのキュー制御情報部のデータ数が０である場合には、他プロセスによるデータの登録を待ち合わせるステップと、
待ちあわせが解除され、データが登録されたら、データ逆取り出しステップでは、状態フラグのチェックから処理を再実行するステップと、
データの取り出しが完了した場合に、前記第１セグメントのキュー制御情報部の待ち合わせ数が０より大きい場合には、データ逆取り出しステップは、前記第１セグメントのキュー制御情報部の通知セマフォに対し通知を行い、待ち合わせているプロセスを起動するステップと、
を含む、ことを特徴とする請求項１０乃至１６のいずれか一に記載のキュー制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムのキュー制御システム、キュー制御方法およびキュー制御用プログラムに関し、特に、プロセス間通信に利用して好適とされるキュー制御システム、キュー制御方法およびキュー制御用プログラムに関する。
【０００２】
【従来の技術】
従来より、非同期に発生するデータを、例えばＦＩＦＯ（先入れ先出し）方式で、順次に登録および取り出すキュー制御システムとしては、キューの先頭エントリおよび各エントリ内の順方向チェインポインタを有する片方向チェインや、インデックスキーを用いたシステム、方法が知られている。キュー管理に関する刊行物として以下のものが参照される。
（ａ）特開平４−１３０９２９号公報
（ｂ）特開平４−２５９０４０号公報
（ｃ）特開平１１−１８４７１６号公報
（ｄ）特開平６−６８０４０号公報
上記刊行物（ａ）乃至（ｄ）に記載されたシステムについて以下に概説する。
【０００３】
特開平４−１３０９２９号公報には、同じキー値のイベントをグループ化し、グループ対応にサーチ可能な同一キーポインタを設けることにより、同一キーポインタを用いることによりサーチ処理をスキップして行うスキップサーチ手段と、同一キー値を持つイベントの追加時には、新規にグループを構成し、すでにグループが構成されている場合には、グループへのイベントの追加を行う同一キーポインタ管理手段とを備えたキュー管理方式が開示されている。同一キーポインタは、同一キー値を持ったデータをグループ化し、サーチ処理が可能となるようにデータをチェインするポインタである。
【０００４】
このような構成を有するキュー管理方式では、同一キー値のデータが数多く登録されている場合においても、スキップサーチ手段により同一キーポインタを用いることでキー値の異なるデータのサーチをスキップすることができ、サーチ処理を早く行うことができる。また、新たなデータを登録する際には、同一キーポインタ管理手段より、新規グループを構成したり、既存グループへのデータ追加を行うことで、グループを構成する全てのデータのキー値を等しく保つことができる。
【０００５】
特開平４−２５９０４０号公報には、環状キューのキューイング状態を管理する環状キュー管理手段の管理データを用いて、新たなキューブロックの獲得の必要状態にあるのか否かを判断する判断手段と、判断手段が獲得の必要状態にあると判断するときに、新たなキューブロックを獲得する獲得手段と、獲得手段が新たなキューブロックを環状キューにキューイングする設定手段を備えたキュー管理手段を備え、環状キューのキューブロックの自動増設を実現する。
【０００６】
このような構成を有するキュー管理方式では、チェインされたキューのつなぎ換えを行うだけでキュー管理を実行できることから、環状構成を採らないキューに比べてキュー管理のための処理ステップが少なくなり、キュー管理の高速化を図ることができる。また、キューブロックの全てが使用状態になっている場合に、新たなデータを登録すると、獲得手段により、新たなキューブロックが獲得され、設定手段により獲得されたキューブロックが環状キューにキューイングされることで、環状キューのキューブロックの自動増設が実現できる。
【０００７】
特開平１１−１８４７１６号公報には、事象キュー要素のキューイング処理及びキューイングアウト処理を各々別々に実行するマルチタスクを備え、事象キュー要素から構成される事象キューの常に先頭をポイントする先頭ポインタと常に最終をポイントする最終ポインタをキューイング専用及びキューアウト専用の２対備え、事象キュー要素内に、連続的に発生する事象キュー要素を連結するための順方向チェインポインタと逆方向チェインポインタを備えた構成のキュー管理方式が開示されている。すなわち、キューイング処理用タスクと、キューアウト処理用タスクと、確認型タスク間通知手段と、キューバッファと、キューイング専用事象キューの先頭ポインタと、キューイング専用事象キューの最終ポインタと、キューアウト専用事象キューの先頭ポインタと、キューアウト専用事象キューの最終ポインタと、キューイング専用事象キューと、キューアウト専用事象キューと、事象キューを構成する個々の事象キュー要素とから構成されている。また個々の事象キュー要素は、それぞれ順方向チェインポインタと逆方向チェインポインタを持っている。
【０００８】
このような構成を有するキュー管理方式では、キューにデータを登録する場合は、キューイング処理用タスクが動作し、キューイング専用先頭ポインタの先にデータを登録し、前後の事象キュー要素内の順方向チェインポインタと逆方向チェインポインタを張り直す。キューからデータを取り出す場合には、キューアウト処理用タスクが動作し、キューアウト専用最終ポインタの先からデータを取り出し、前後の事象キュー要素内の順方向チェインポインタと逆方向チェインポインタを張り直す。このように、キューイング時はキューイング専用の先頭ポインタのポイント先へデータを登録し、キューアウト時はキューアウト専用の最終ポインタのポイント先からデータを取り出すため、キューサーチが不要となり高速なキュー処理が可能となる。
【０００９】
また、キューアウト処理用タスクの動作中にデータ登録要求があった場合、キューイング処理用タスクはもう１つ別の事象キューを作成して処理を行い、確認型タスク間通知手段をタイミングにして事象キューの切り替えを行う。このため１つの事象キューに対してキューイング処理およびキューアウト処理が同時に発生せず、マルチタスクでもメモリ排他制御の必要がなくなり効率の良いキュー処理が可能となる。
【００１０】
特開平６−６８０４０号公報には、リングバッファ方式の通信キューを使用するキュー制御方式が記載されている。同様に、特開平１−１２９３４５号公報（発明の名称：「マルチプロセッサ・システム」）、特開昭６０−１１６０６４号公報（発明の名称：「分散処理プロセッサー間通信方式」）、および特開昭５８−５０１７４０号公報（発明の名称：「データ処理システムにおけるホスト、周辺制御プロセッサのような対になったプロセッサのインターフェース機構」）等にも、プロセッサ間通信用キューとしてリングバッファ方式のものを採用して通信制御を行う技術が記載されている。
【００１１】
特開平６−６８０４０号公報は、プロセッサ間での送信時、通信用キューのライトポインタの指す場所へ送信データであるリソース番号を書き込み、受信時には、リードポインタの指す場所より受信データであるリソース番号を取り出す構成のプロセッサ間通信用のキュー制御方式が開示されている。通信用キューは受信用リードポインタと、送信用ライトポインタと、通信用リソースとから構成されている。
【００１２】
このような構成を有するキュー制御方式では、データの登録時はライトポインタのポイント先へデータを書き込み、ライトポインタを更新する。データの取り出し時はリードポインタのポイント先からデータを取り出し、リードポインタを更新する。このため、チェーン方式に比べ、通信用キューの処理時間を早めることができ、また通信用キューの制御を簡易にすることができる。
【００１３】
しかしながら、上記刊行物等に記載されている従来のシステムは、以下のような問題点を有している。
【００１４】
第１の問題点として、チェイン方式のキュー管理方式では、データの登録およびデータの取り出し時に前後のキューエントリの順方向チェインポインタあるいは逆方向チェインポインタを設定しなおさねばならず、処理が遅くなるということである。
【００１５】
その理由は、各キューエントリをチェインポインタで連結することでキュー管理を行っているためである。
【００１６】
第２の問題点は、リングバッファ方式のキュー管理方式では、任意の時点でのキューの拡張ができない、ということである。
【００１７】
その理由は、リングバッファ方式では、バッファの末尾と先頭を繋いだ形で管理し、末尾まで行くと先頭に戻るというように無終端方式で連続して使用されるが、バッファの途中に他の領域を挿入することはできないためである。バッファの末尾を拡張することでキューを拡張することはできるが、その方式では任意の時点でのキューの拡張は不可能である。
【００１８】
第３の問題点は、プロセス間通信にキューを利用する場合に、データの登録時に空きエントリがない場合や、データの取り出し時に登録されているデータがない場合、それらの待ち合わせ制御を利用者自身が行わなければならず、利用者の負担が大きい、ということである。
【００１９】
その理由は、従来のキュー管理方式では、データの登録や取り出しを待ち合わせる機能がないためである。
【００２０】
【発明が解決しようとする課題】
したがって、本発明は、上記問題点に鑑みて創案されたものであって、その目的は、キューへのデータ登録およびキューからのデータ取り出しを高速に行うことができるキュー制御システムを提供することにある。
【００２１】
本発明の他の目的は、登録されるデータの数が一時的に多くなった場合に自動的にキューを拡張し、データの数が減ったらキューを縮退することで、効率良く資源を利用できるキュー制御システムを提供することにある。
【００２２】
本発明のさらに他の目的は、データや空きエントリの待ち合わせを行いプロセス間通信を容易に実現できるキュー制御システムを提供することにある。
【００２３】
【課題を解決するための手段】
前記目的の少なくとも１つを達成する本発明の１つのアスペクトに係るキュー制御システムは、キューとして用いるセグメントであって、該セグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるエントリよりなるデータ部とを有する複数のセグメントを生成し、前記各セグメントに環状のリンクを設定し、環状にリンクされた複数のセグメントのうちの１つのセグメント（「第１セグメント」という）のキュー制御情報部に初期値を設定するキュー生成手段を備え、前記第１セグメントのキュー制御情報部には、データの登録先のエントリ及び取り出しエントリを指す登録ポインタ及び取り出しポインタが少なくとも保持され、前記第１セグメントのキュー制御情報部の登録ポインタが指すエントリに、データを登録するデータ登録手段と、前記第１セグメントのキュー制御情報部の取り出しポインタが指すエントリからデータを取り出すデータ取り出し手段と、キューの排他制御を行うキュー排他手段と、を備えている。
【００２４】
より詳しくは、キューセグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるデータ部とを備え、複数のキューセグメントを生成し、各セグメントに環状のリンクを設定し、キュー制御情報部に初期値を設定するキュー初期化手段と、キュー生成手段と、キュー制御情報部の登録ポインタが指すエントリにデータを登録するデータ登録手段と、キュー制御情報部の取り出しポインタが指すエントリからデータを取り出すデータ取り出し手段と、キュー制御情報部の登録ポインタが指すエントリの直前のエントリからデータを取り出すデータ逆取り出し手段と、複数のプロセスから同時に使用できないようにキューを排他するキュー排他手段と、キューを停止状態とし、以降のデータ登録およびデータ取り出しを抑止するキュー停止手段と、キューセグメントを消去するキュー消去手段と、前記キュー停止手段により停止状態となったキューのキュー制御情報部を再初期化し、再度キューを使用できるようにするキュー再初期化手段とを備え、利用者プログラムからの要求により、キューを生成や消去を行い、キューへのデータ登録およびキューからのデータ取り出しを高速に行うよう動作する。
【００２５】
また、本発明のキュー制御システムは、データの登録時に空きエントリがない場合、キューとして利用する新たなセグメントを生成しセグメント間のリンクを設定し直すキュー拡張手段と、データの取り出し時に、使用していないセグメントを削除しセグメント間のリンクを設定し直すキュー縮退手段とを備え、登録されるデータの数が一時的に多くなった場合に自動的にキューを拡張し、データの数が減ったらキューを縮退するよう動作する。
【００２６】
また、本発明のキュー制御システムは、データの登録時に空きエントリがない場合は、他プロセスによりデータが取り出され空きエントリができるのを待ち合わせ、さらに、データの取り出し時に登録されているデータがない場合は、他プロセスによりデータが登録されるのを待ち合わせる待ち合わせ手段を備え、データ登録時に登録できるエントリがない場合や、データ取り出し時に登録されているデータがない場合に、データの登録やエントリの空きを待ち合わるよう動作する。
【００２７】
本発明の別のアスペクトに係るキュー制御方法は、
（ａ）キューとして用いるセグメントであって、該セグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるエントリよりなるデータ部とを有する複数のセグメントを生成し、前記各セグメントに環状のリンクを設定し、環状にリンクされた複数のセグメントのうちの１つのセグメント（「第１セグメント」という）のキュー制御情報部に初期値を設定するステップを有し、前記第１セグメントのキュー制御情報部には、データの登録先のエントリ及び取り出しエントリを指す登録ポインタ及び取り出しポインタが少なくとも保持され、
（ｂ）前記第１セグメントのキュー制御情報部の登録ポインタの示すエントリへデータを登録するステップと、
（ｃ）前記第１セグメントのキュー制御情報部の取り出しポインタの示すエントリからデータを取り出すステップと、
（ｄ）キューを排他制御するステップと、を含む。
【００２８】
本発明の他のアスペクトに係るプログラムは、キューの管理をコンピュータで行わせるプログラムであって、キューとして用いるセグメントであって、該セグメント中にキューの制御情報を格納するキュー制御情報部と、データが登録されるエントリよりなるデータ部とを有する複数のセグメントを生成し、前記各セグメントに環状のリンクを設定し、環状にリンクされた複数のセグメントのうちの１つのセグメント（「第１セグメント」という）のキュー制御情報部に初期値を設定する処理を有し、前記第１セグメントのキュー制御情報部には、データの登録先のエントリ及び取り出しエントリを指す登録ポインタ及び取り出しポインタが少なくとも保持され、前記第１セグメントのキュー制御情報部の登録ポインタが指すエントリにデータを登録する処理と、前記第１セグメントのキュー制御情報部の取り出しポインタが指すエントリからデータを取り出す処理と、キューを排他制御する処理と、を前記コンピュータに実行させるためのプログラムよりなる。
【００２９】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して詳細に説明する。図１は、本発明の一実施の形態の構成を示す図である。図１を参照すると、本発明の第１の実施の形態に係るシステムは、プログラム制御により動作する計算機システム１００と、キュー制御システム１１０と、キューセグメント１３０と、利用者プログラム１４０と、を備えて構成されている。
【００３０】
キュー制御システム１１０は、キュー生成手段１１１と、キュー停止手段１１２と、キュー消去手段１１３と、キュー再初期化手段１１４と、データ登録手段１１５と、データ取り出し手段１１６と、データ逆取り出し手段１１７と、キュー排他手段１１８とを含む。
【００３１】
キューセグメント１３０は、キュー制御情報部１３１と、キューデータ部１３２とを含む。
【００３２】
これらの手段はそれぞれ概略つぎのように動作する。
【００３３】
キュー生成手段１１１は、複数のキューセグメントを生成し各セグメントに環状のリンクを設定する。
【００３４】
また、キュー生成手段１１１は、生成したキューセグメントにキュー制御情報部を設け、初期値を設定する。
【００３５】
キュー停止手段１１２は、キューを停止状態とし、以降のデータの登録および取り出しを禁止する。
【００３６】
キュー消去手段１１３は、キュー停止手段１１２により停止状態となったキューの各キューセグメントを消去する。
【００３７】
キュー再初期化手段１１４は、キュー停止手段１１２によって停止状態となったキューのキュー制御情報部１３１を再初期化する。その後、キュー再初期化手段１１４は、該キューを使用中状態とし、再度キューを使用できるようにする。
【００３８】
データ登録手段１１５は、利用者プログラム１４０からの要求により、キュー制御情報部１３１の登録ポインタが示すエントリに、利用者プログラム１４０より渡されたデータを登録する。
【００３９】
データ取り出し手段１１６は、利用者プログラム１４０からの要求により、キュー制御情報部１３１の取り出しポインタが示すエントリからデータを取り出し利用者プログラム１４０に返却する。
【００４０】
データ逆取り出し手段１１７は、利用者プログラム１４０からの要求により、キュー制御情報部１３１の登録ポインタが示すエントリの１つ前のエントリからデータを取り出し利用者プログラム１４０に返却する。
【００４１】
キュー排他手段１１８は、キュー制御システム１１０の各手段１１１〜１１７から使用され、キューセグメントが他のプロセスから参照・更新されないように、排他制御を行う。
【００４２】
キュー制御システム１１０におけるキュー生成手段１１１、キュー停止手段１１２、キュー消去手段１１３、キュー再初期化手段１１４、データ登録手段１１５、データ取り出し手段１１６、データ逆取り出し手段１１７、キュー排他手段１１８は、コンピュータ上で実行されるプログラムによりそれぞれの機能・処理が実現される。
【００４３】
次に、図１、図２、図３、および図４乃至図１１のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。図２は、本発明の第１の実施の形態におけるキューセグメントを模式的に示す図である。図３は、キュー制御情報部の一例を示す図である。図４は、本発明の第１の実施の形態におけるキュー生成手段１１の動作の一例を説明するための流れ図である。
【００４４】
まず、利用者プログラム１４０はキューを使用するために、キュー生成手段１１１を用いて、キューセグメント１３０を生成する。
【００４５】
利用者プログラム１４０は、キュー生成手段１１１には、セグメント数やデータ長などの情報を伝える。
【００４６】
キュー生成手段１１１は、まず利用者プログラム１４０から伝えられた初期セグメント数を取得する（図４のステップＳ１１）。
【００４７】
次に、キュー生成手段１１１は、初期セグメント数分のセグメントを生成し（ステップＳ１２）、生成した各セグメント間に環状のリンクを設定する（ステップＳ１３）。
【００４８】
キューセグメントは、図２のように、セグメント毎に、環状にリンクされた構造となる。
【００４９】
続いて、キュー生成手段１１１は、第１のセグメントのキュー制御情報部１３１に初期値を設定し（ステップＳ１４）、排他用セマフォや通知用セマフォといったセマフォを取得して、キュー制御情報部１３１に格納する（ステップＳ１５）。
【００５０】
最後に、キュー生成手段１１１は、図示されない、状態フラグを、”使用中”状態に設定し（ステップＳ１６）、第１セグメントのアドレスを、利用者プログラム１４０に返却する（ステップＳ１７）。なお、状態フラグは、図１のキュー制御システムを構成するコンピュータにおいて、書き換え可能なメモリ、レジスタ等、任意の記憶装置に設定され、キューの状態（例えば使用、停止等の状態）が設定される。
【００５１】
以降、利用者プログラム１４０がキューを操作する際には、返却された第１セグメントのアドレスをキュー制御システム１１０に伝える。すなわち、第１セグメントのアドレスをキーとして用いる。
【００５２】
また、図３に示すように、キュー制御情報部１３１に情報が格納されるのは、第１セグメントのみであり、第２セグメント以降では、次セグメントのアドレスのみを保持している。すなわち図３に示すように、セグメント１は、登録ポインタ、取り出しポインタ、データ長、データ数、次セグメント、使用セグメント数、初期セグメント数、最大セグメント数、排他セマフォ、通知セマフォ、待ち合わせ数の各欄よりなり、セグメント１の次セグメントの欄にはセグメント２、セグメント２の次セグメントの欄にはセグメント３、セグメント３の次セグメントの欄にはセグメント１が初期設定されておいる。セグメント２、３のキュー制御情報部には、次セグメントの欄のみが設定されている。
【００５３】
図５は、本発明の第１の実施の形態におけるキュー停止手段１１２の動作の一例を説明するための流れ図である。利用者プログラム１４０が、キューの使用を終了する場合は、キュー停止手段１１２を使用して、キュー停止状態にし、その後、キュー消去手段１１３を使用してキューセグメント１３０を消去する。また、キューの停止後に、キュー再初期化手段１１４を使用することで、再度キューを使用することもできる。
【００５４】
キュー停止手段１１２は、まず、キュー排他手段１１８を使用して、他のプロセスから同時に使用されないように、キューを排他する（図５のステップＳ２１）。
【００５５】
次に、キュー停止手段１１２は、キューの状態を示す状態フラグをチェックし、状態が”使用中”である場合には（ステップＳ２２でＹＥＳ）、状態フラグを、”停止”状態に設定する。
【００５６】
最後に、キュー停止手段１１２は、キュー排他手段１１８を使用してキューの排他を解除する（ステップＳ２４）。
【００５７】
また、状態フラグが”使用中”でない場合（ステップＳ２２でＮＯ）は、停止できない状態であるため、停止失敗となる（ステップＳ２５）。
【００５８】
図６は、本発明の第１の実施の形態におけるキュー消去手段１１３の動作の一例を説明するための流れ図である。キュー消去手段１１３は、まず、キュー排他手段１１８を使用して、キューを排他する（図６のステップＳ３１）。
【００５９】
次に、キュー消去手段１１３は、状態フラグをチェックし、状態が”停止”状態である場合には（ステップＳ３２でＹＥＳ）、使用しているキューセグメントを全て消去する（ステップＳ３３）。
【００６０】
次に、キュー消去手段１１３は、キュー排他手段１１８を使用してキューの排他を解除し（ステップＳ３４）、セマフォを解放し（ステップＳ３５）、終了する。
【００６１】
状態フラグが”停止”状態でない場合（ステップＳ３２でＮＯ）、消去できない状態であるため消去失敗となり（ステップＳ３６）、キュー排他手段１１８により、キューの排他を解除して（ステップＳ３７）、終了する。
【００６２】
図７は、本発明の第１の実施の形態におけるキュー再初期化手段１１４の動作の一例を説明するための流れ図である。キュー再初期化手段１１４は、まず、キュー排他手段１１８を使用してキューを排他する（図７のステップＳ４１）。
【００６３】
次に、キュー再初期化手段１１４は、状態フラグをチェックし、状態が”停止”状態である場合には（ステップＳ４２でＹＥＳ）、第１セグメントのキュー制御情報部１３１に、初期値を設定する（ステップＳ４３）。キュー再初期化手段１１４が、第１セグメントのキュー制御情報部１３１において、初期値に設定する領域は、キューの使用により、値が更新される領域のみである。
【００６４】
続いて、キュー再初期化手段１１４は、状態フラグを、”使用中”状態に設定する（ステップＳ４４）。
【００６５】
最後に、キュー再初期化手段１１４は、キュー排他手段１１８によりキューの排他を解除して（ステップＳ４５）終了する。
【００６６】
また、状態フラグのチェックにおいて、状態フラグが”停止”状態でない場合（ステップＳ４２でＮＯ）、キュー再初期化手段１１４による再初期化ができない状態であるため、再初期化失敗となる（ステップＳ４６）。
【００６７】
利用者プログラム１４０が、キューにデータを登録する場合、データ登録手段１１５を使用する。また、利用者プログラム１４０が、キューからデータを取り出す場合は、データ取り出し手段１１６、あるいはデータ逆取り出し手段１１７を使用する。ここで、利用者プログラム１４０が、ＬＩＬＯ(Ｌａｓｔ  Ｉｎ  Ｌａｓｔ  Ｏｕｔ)方式でデータを取り出す場合には、データ取り出し手段１１６を使用し、ＬＩＦＯ(Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ)方式でデータを取り出す場合はデータ逆取り出し手段１１７を使用する。
【００６８】
図８は、本発明の第１の実施の形態におけるデータ登録手段１１５の動作の一例を説明するための流れ図である。データ登録手段１１５は、まず、キュー排他手段１１８を使用してキューを排他する（図８のステップＳ５１）。
【００６９】
次に、データ登録手段１１５は、状態フラグをチェックし、状態が”使用中”状態である場合（ステップＳ５２でＹＥＳ）、続いてエントリのチェックを行う。キュー制御情報部１３１の登録ポインタの指すエントリ（「登録エントリ」という）がセグメント内の最終エントリではない場合（ステップＳ５３でＮＯ）、次登録ポインタに登録エントリの次のエントリを設定する（ステップＳ５４）。登録エントリの次のエントリは、登録ポインタのセグメント内オフセットにキュー制御情報部１３１のデータ長の値を加算することで容易に求められる。
【００７０】
また、データ登録手段１１５は、登録エントリがセグメント内の最終エントリである場合（ステップＳ５３でＹＥＳ）、次登録ポインタに次セグメントの先頭エントリを設定する（ステップＳ５５）。尚、次登録ポインタは、データ登録手段１１５のみで使用する作業用の領域である。
【００７１】
次に、次登録ポインタが指すエントリがキュー制御情報部１３１の取り出しポインタの指すエントリと同じではない場合には（ステップＳ５６でＮＯ）、データ登録手段１１５は、データの登録が可能であると判断し、利用者プログラム１４０から伝えられたデータを登録エントリへ移送する（ステップＳ５７）。
【００７２】
続いて、データ登録手段１１５は、次登録ポインタの指すエントリを指すようにキュー制御情報部１３１の登録ポインタを更新し（ステップＳ５８）、キュー制御情報部１３１のデータ数に１を加算する（ステップＳ５９）。
【００７３】
最後に、データ登録手段１１５は、キュー排他手段１１８を使用してキューの排他を解除し（ステップＳ６０）、終了する。
【００７４】
また、次登録ポインタの指すエントリがキュー制御情報部１３１の取り出しポインタの指すエントリと同じである場合（ステップＳ５６でＹＥＳ）、登録ポインタが取り出しポインタに追いつくということであり、次に登録できるエントリがない状態である。この場合、空きエントリがないため、データ登録失敗とする（ステップＳ６１）。
【００７５】
また、状態フラグのチェックにおいて、状態フラグが”使用中”状態でない場合（ステップＳ５２でＮＯ）、データの登録ができない状態であるため登録失敗となる（ステップＳ６２）。
【００７６】
図９は、本発明の第１の実施の形態におけるデータ取り出し手段１１６の動作の一例を説明するための流れ図である。データ取り出し手段１１６は、まず、キュー排他手段１１８を使用してキューを排他する（図９のステップＳ７１）。
【００７７】
次に、データ取り出し手段１１６は、状態フラグをチェックし、状態が”使用中”状態であるならば（ステップＳ７２でＹＥＳ）、次に登録されているデータの数をチェックする。キュー制御情報部１３１のデータ数が０より大きい場合（ステップＳ７３でＹＥＳ）、データが存在するということであり、キュー制御情報部１３１の取り出しポインタの指すエントリ（「取り出しエントリ」）から、利用者プログラム１４０から伝えられたデータ返却領域へデータを移送する（ステップＳ７４）。
【００７８】
次に、データ取り出し手段１１６は、キュー制御情報部１３１のデータ数から１を減算する（ステップＳ７５）。
【００７９】
続いて、取り出しエントリがセグメント内の最終エントリではない場合（ステップＳ７６でＮＯ）、データ取り出し手段１１６は、取り出しエントリの次のエントリを指すようにキュー制御情報部１３１のデータ取り出しポインタを更新する（ステップＳ７７）。
【００８０】
また、取り出しエントリがセグメント内の最終エントリである場合（ステップＳ７６でＹＥＳ）、データ取り出し手段１１６は、次セグメントの先頭エントリを指すようにデータ取り出しポインタを更新する（ステップＳ７８）。
【００８１】
最後に、データ取り出し手段１１６は、キュー排他手段１１８を使用してキューの排他を解除し（ステップＳ７９）、終了する。
【００８２】
また、データ数が０である場合は（ステップＳ７３でＮＯ）、登録されているデータがないため、データ取り出し失敗となる（ステップＳ８０）。
【００８３】
また、状態フラグのチェックにおいて、状態フラグが”使用中”状態でない場合（ステップＳ７２でＮＯ）、データの取り出しができない状態であるため、取り出し失敗となる（ステップＳ８１）。
【００８４】
図１０は、本発明の第１の実施の形態におけるデータ逆取り出し手段１１７の動作の一例を説明するための流れ図である。データ逆取り出し手段１１７は、まず、キュー排他手段１１８を使用してキューを排他する（図１０のステップＳ９１）。
【００８５】
次に、データ逆取り出し手段１１７は、状態フラグをチェックし、状態が”使用中”状態であるならば（ステップＳ９２でＹＥＳ）、次に登録されているデータの数をチェックする。
【００８６】
キュー制御情報部１３１のデータ数が０より大きい場合（ステップＳ９３でＹＥＳ）、キューセグメント中に登録データが存在するということである。
【００８７】
キュー制御情報部１３１の登録ポインタの指すエントリ（登録エントリ）がセグメント内の先頭エントリではない場合（ステップＳ９４でＮＯ）、データ逆取り出し手段１１７は、登録エントリの１つ前のエントリを指すように登録ポインタを更新する（ステップＳ９５）。
【００８８】
登録エントリの１つ前のエントリは、登録ポインタのセグメント内オフセットから、キュー制御情報部１３１のデータ長の値を減算することで容易に求めることができる。
【００８９】
また、登録エントリがセグメント内の先頭エントリである場合には（ステップＳ９４でＹＥＳ）、データ逆取り出し手段１１７は、登録ポインタが指すセグメントの１つ前のセグメントを求め（ステップＳ９６）、そのセグメントの最終エントリを指すように登録ポインタを更新する（ステップＳ９７）。
【００９０】
ここで、セグメントのキュー制御情報部１３１には、前セグメントへのリンクは存在しないが、キューを構成する各セグメントは環状にリンクされているため、データ逆取り出し手段１１７は、次セグメントへのリンクを辿ることで、１つ前のセグメントに到達することができる。
【００９１】
続いて、データ逆取り出し手段１１７は、更新した登録ポインタの指すエントリから、利用者プログラム１４０から伝えられたデータ返却領域へデータを移送する（ステップＳ９８）。
【００９２】
次に、データ逆取り出し手段１１７は、キュー制御情報部１３１のデータ数から「１」を減算する（ステップＳ９９）。
【００９３】
最後に、データ逆取り出し手段１１７は、キュー排他手段１１８を使用してキューの排他を解除し（ステップＳ１００）、終了する。
【００９４】
また、データ数が「０」である場合は（ステップＳ９３でＮＯ）、登録されているデータがないため、データ取り出し失敗となる（ステップＳ１０１）。
【００９５】
また、状態フラグのチェックにおいて、状態フラグが”使用中”状態でない場合（ステップＳ９２でＮＯ）、データの登録ができない状態であるため、登録失敗となる（ステップＳ１０２）。
【００９６】
次に、本実施の形態の作用効果について説明する。
【００９７】
本実施の形態では、データ登録時には、登録ポインタの指すエントリにデータを移送し、登録ポインタを次のエントリを指すように更新し、データの取り出し時には、取り出しポインタの指すエントリからデータを取り出し、取り出しポインタを次のエントリを指すように更新する、というように構成されているため、データ登録とデータ取り出し時における、キューの検索や順方向チェインの張り替えが不要となり、高速にデータの登録および取り出しを行うことができる。
【００９８】
また、本実施の形態では、さらに、データの取り出し手段として、順方向に取り出す手段と、逆方向に取り出す手段の２つ有しているため、ＦＩＦＯ方式、およびＬＩＦＯ方式の混在が可能となっている。これにより、通常は、ＦＩＦＯ方式を用いて一度登録したデータを取り消す場合に、ＬＩＦＯ方式を用いることもできる。
【００９９】
また、本実施の形態では、さらに、利用者プログラムからの要求により、キューを生成し、第１セグメントのアドレスをキーとして、以降のキュー操作を行うよう構成されているため、１つの利用者プログラムから、複数のキューを利用することができる。
【０１００】
また、本実施の形態では、さらに、使用を終了したキューの消去や、再利用が可能となる構成されているため、メモリ資源を効率良く利用することができる。
【０１０１】
【実施例】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
【０１０２】
利用者プログラム１４０がキューを使用を開始するとき、キュー生成手段１１１に対し、データ長４８バイト、初期セグメント数３、最大セグメント数１０としてキューの生成を要求する。
【０１０３】
キュー生成手段１１１では、初期セグメント数の「３」を取得し（図４のステップＳ１１）、３枚のセグメントを生成する（ステップＳ１２）。
【０１０４】
続いて生成したセグメント間に環状のリンクをリンクを設定する（ステップＳ１３）。
【０１０５】
セグメントは、図２のように”次セグメント”領域によって環状に連結される。続いて、第１セグメント（図２のセグメント１）のキュー制御情報部１３１に初期値を設定する（ステップＳ１４）。
【０１０６】
キュー制御情報部１３１は、図３に示す内容で構成されており、登録ポインタおよび取り出しポインタの初期値は、セグメント１の先頭エントリを指すように設定する。
【０１０７】
データ長には、利用者プログラム１４０から伝えられた”４８バイト”を設定し、データ数には”０”を設定する。
【０１０８】
また、次セグメント領域は、先ほど環状リンクを設定しているので、ここでは設定しない。
【０１０９】
また、初期セグメント数および最大セグメント数には、利用者プログラムから伝えられた値である”３”および”１０”そのまま設定し、使用セグメント数には現在の使用セグメント数、すなわち初期セグメント数の”３”を設定する。
【０１１０】
排他セマフォ、通知セマフォにはヌル（ｎｕｌｌ）値を設定し、待ち合わせプロセス数は”０”を設定する。
【０１１１】
次に、キュー生成手段１１１は、排他セマフォおよび通知セマフォを取得し、キュー制御情報部１３１に格納する（ステップＳ１５）。
【０１１２】
続いて、キュー生成手段１１１は、状態フラグを”使用中”と設定し、セグメント１のアドレスＡを利用者プログラム１４０に返却する。
【０１１３】
これで、キューの生成が完了し、以降、利用者プログラム１４０は、返却された第１セグメントのアドレスＡを用いて、このキューの操作を行うことができる。
【０１１４】
次に、データを登録する場合の動作を説明する。
【０１１５】
図２および図３に示すような、登録ポインタが”セグメント１のエントリ４”を、取り出しポインタが”セグメント２のエントリ６”を指しており、登録されているデータ数が”９”である場合に、新たなデータの登録を要求すると、データ登録手段１１５は、まずキューを排他し（図８のステップＳ５１）、状態フラグをチェックすると、状態は”使用中”である（ステップＳ５２でＹＥＳ）。
【０１１６】
ここで、図２に示すように、セグメント１にはエントリ１〜エントリ６があり、登録エントリは、エントリ４であるため、セグメント１内の最終エントリではない（ステップＳ５３でＮＯ）。よって、作業領域の次登録ポインタに、”セグメント１のエントリ５”を設定する（ステップＳ５４）。
【０１１７】
また、取り出しポインタは，”セグメント２のエントリ５”であるため、次登録ポインタとは異なる（ステップＳ５６でＮＯ）。
【０１１８】
そこで、データ登録手段１１５は、”セグメント１のエントリ４”に、登録データを移送し（ステップＳ５７）、登録ポインタに、”セグメント１のエントリ５”を設定し（ステップＳ５８）、データ数に”１”を加算して”１０”とする（ステップＳ５９）。
【０１１９】
最後に、データ登録手段１１５は、キューの排他を解除する（ステップＳ６０）。これで、新たなデータの登録が完了する。
【０１２０】
次に、データを取り出す場合の動作を説明する。
【０１２１】
図２および図３に示すような、登録ポインタが”セグメント１のエントリ４”を、取り出しポインタが”セグメント２のエントリ６”を指しており、登録されているデータ数が”９”である場合に、ＦＩＦＯ方式でのデータの取り出しを要求すると、データ取り出し手段１１６は、まずキューを排他し（図９のステップＳ７１）、状態フラグをチェックすると、状態は”使用中”である（ステップＳ７２でＹＥＳ）。また、データ数は”９”であるため（ステップＳ７３でＹＥＳ）、セグメント２のエントリ６からデータ返却領域へデータを移送し（ステップＳ７４）、データ数から”１”を減算して”８”とする（ステップＳ７５）。
【０１２２】
ここで、図２に示すように、セグメント２にはエントリ１〜エントリ６があり、取り出しエントリは、エントリ６であるため、セグメント２内の最終エントリである（ステップＳ７６でＹＥＳ）。そこで、キュー制御情報部の取り出しポインタに”セグメント３のエントリ１”を設定する（ステップＳ７８）。
【０１２３】
最後に、データ取り出し手段１１６は、キューの排他を解除する（ステップＳ７９）。これで、ＦＩＦＯ方式でデータを取り出すことができた。
【０１２４】
同様に、図２および図３に示すような、登録ポインタが”セグメント１のエントリ４”を、取り出しポインタが”セグメント２のエントリ６”を指しており、登録されているデータ数が”９”である場合に、ＬＩＦＯ方式でのデータの取り出しを要求すると、データ逆取り出し手段１１７は、まずキューを排他し（図１０のステップＳ９１）、状態フラグをチェックすると、状態は”使用中”である（ステップＳ９２でＹＥＳ）。また、データ数は”９”である（ステップＳ９３でＹＥＳ）。ここで、図２のように、セグメント１にはエントリ１〜エントリ６があり、登録エントリはエントリ４であるため、セグメント１内の先頭エントリはない（ステップＳ９４でＮＯ）。
【０１２５】
そこで、データ逆取り出し手段１１７は、登録エントリの１つ前のエントリである”セグメント１のエントリ３”（最後に登録されたエントリ）を、登録ポインタに設定し（ステップＳ９５）、”セグメント１のエントリ３”から、データ返却領域へデータを移送し（ステップＳ９８）、データ数から「１」を減算して”８”とする（ステップＳ９９）。
【０１２６】
最後に、データ逆取り出し手段１１７は、キューの排他を解除する（ステップＳ１００）。これで、ＬＩＦＯ方式でデータを取り出すことができた。
【０１２７】
次に、本発明の第２の実施の形態について、図面を参照して詳細に説明する。図１１は、本発明の第２の実施の形態の構成を示す図である。この実施の形態は、図１に示した前記実施の形態の構成に、キュー拡張手段２１９と、キュー縮退手段２２０を追加したものである。
【０１２８】
図１１を参照すると、本発明の第２の実施の形態は、プログラム制御により動作する計算機システム２００と、キュー制御システム２１０と、キューセグメント２３０と、利用者プログラム２４０と、を備えて構成されている。
【０１２９】
キュー制御システム２１０は、キュー生成手段２１１と、キュー停止手段２１２と、キュー消去手段２１３と、キュー再初期化手段２１４と、データ登録手段２１５と、データ取り出し手段２１６と、データ逆取り出し手段２１７と、キュー排他手段２１８と、キュー拡張手段２１９と、キュー縮退手段２２０とを含む。
【０１３０】
キューセグメント２３０は、キュー制御情報部２３１と、キューデータ部２３２とを含む。
【０１３１】
これらの手段はそれぞれ概略つぎのように動作する。ここでは、第１の実施の形態と動作が異なる動作について説明する。
【０１３２】
キュー再初期化手段２１４は、キュー停止手段２１２により停止状態となったキューのキュー制御情報部を再初期化し、また、キューセグメントの数を初期セグメント数になるようにセグメントを消去し環状リンクを再設定する。その後、キュー再初期化手段２１４はキューを使用中状態とし、再度キューを使用できるようにする。
【０１３３】
データ登録手段２１５は、利用者プログラム２４０からの要求により、キュー制御情報部２３１の登録ポインタが示すエントリに利用者プログラム２４０より渡されたデータを登録する。また、データ登録手段２１５は、データの登録時にセグメントが不足する場合は、キュー拡張手段２１９を使用して新たなセグメントを生成しキューを拡張する。
【０１３４】
データ取り出し手段２１６は、利用者プログラム２４０からの要求により、キュー制御情報部２３１の取り出しポインタが示すエントリからデータを取り出し利用者プログラムに返却する。また、データ取り出し手段２１６は、キュー縮退手段２２０を使用してデータが登録されていないセグメントを消去する。
【０１３５】
データ逆取り出し手段２１７は、利用者プログラム２４０からの要求により、キュー制御情報部１３１の登録ポインタが示すエントリの１つ前のエントリからデータを取り出し、利用者プログラム２４０に返却する。また、データ逆取り出し手段２１７は、キュー縮退手段２２０を使用して、データが登録されていないセグメントを消去する。
【０１３６】
キュー拡張手段２１９は、新たにセグメントを１枚生成し、前セグメントの”次セグメント”に生成したセグメントを設定し、生成したセグメントの”次セグメント”には、元々、前セグメントに設定されていたセグメントを設定することで、キューセグメントを追加し、キューを拡張する。
【０１３７】
キュー縮退手段２２０は、セグメントを１枚消去し、消去したセグメントの”次セグメント”に設定されていたセグメントを、前セグメントの”次セグメント”に設定することで、キューセグメントを減らし、キューを縮退させる。
【０１３８】
キュー制御システム２１０におけるキュー生成手段２１１、キュー停止手段２１２、キュー消去手段２１３、キュー再初期化手段２１４、データ登録手段２１５、データ取り出し手段２１６、データ逆取り出し手段２１７、キュー排他手段２１８、キュー拡張手段２１９、キュー縮退手段２２０は、コンピュータ上で実行されるプログラムによりそれぞれの機能・処理が実現される。
【０１３９】
次に、図１１および図１４〜図１９のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。ここでは、第１の実施の形態と動作が異なる手段について説明する。
【０１４０】
図１４は、本発明の第２の実施の形態におけるキュー再初期化手段２１４の動作の一例を説明するための流れ図である。キュー再初期化手段２１４にて、キューを再初期化する場合において、キュー制御情報部２３１の使用セグメント数と初期セグメント数を比較し、使用セグメント数＞初期セグメント数である場合（図１４のステップＳ１１３でＹＥＳ）は、キューが拡張されているということであり、初期状態に戻す処理を実行する。
【０１４１】
まず、キュー再初期化手段２１４は、拡張したセグメント数、すなわち（使用セグメント数-初期セグメント数）分のセグメントを、第２セグメント以降から削除する（ステップＳ１１４）。
【０１４２】
次に、キュー再初期化手段２１４は、残ったセグメント間の環状リンクを再設定する（ステップＳ１１５）。こうして、キューセグメントの状態が、初期状態となる。
【０１４３】
また、使用セグメント数≦初期セグメント数である場合（ステップＳ１１３でＮＯ）は、キューは拡張されていないため、初期状態に戻す処理（ステップＳ１１４，Ｓ１１５）は不要である。
【０１４４】
図１５は、本発明の第２の実施の形態におけるデータ登録手段２１５の動作の一例を説明するための流れ図である。
【０１４５】
利用者プログラム２４０がキューにデータを登録する場合において、データ登録手段２１５では、キュー制御情報部２３１の登録ポインタの指すエントリ（「登録エントリ」という）がセグメント内の最終エントリである場合（図１５のステップＳ１２３でＹＥＳ）、登録ポインタの指すセグメント（以降、登録セグメント）の次セグメントが、取り出しポインタが指しているセグメントであり（ステップＳ１２５でＹＥＳ）、使用セグメントが増加しても最大セグメント数を超えない場合、すなわち”使用セグメント数＋１≦最大セグメント数”である場合（ステップＳ１２６でＹＥＳ）は、キュー拡張手段２１９に登録セグメントを指定してキューを拡張する（ステップＳ１２７）。
【０１４６】
キュー拡張手段２１９は、新しいセグメントを１枚生成し（図１８のステップＳ１８１）、指定されたセグメント、ここでは登録セグメントの次セグメントが生成したセグメントとなるように、環状リンクを再設定し（ステップＳ１８２）、使用セグメント数に１を加算する（ステップＳ１８３）。
【０１４７】
これで、データ登録手段２１５において、登録セグメントの次セグメントとして新しいキューセグメントが追加された。
【０１４８】
続いて、”次登録ポインタ”に次セグメント、すなわち追加したセグメントの先頭エントリを設定し（ステップＳ１２８）、以降の処理を行う。
【０１４９】
尚、登録セグメントの次セグメントが取り出しポインタが指しているセグメントはない場合（ステップＳ１２５でＮＯ）、データが１つも登録されいないセグメントが１枚以上あるということであり、その時点での拡張の必要はないため新たなセグメントは生成しない。
【０１５０】
また、”使用セグメント数＋１＞最大セグメント数”
となる場合（ステップＳ１２６でＮＯ）、生成時に指定された最大セグメント数を超えてしまうため新たなセグメントは生成しない。
【０１５１】
図１６は、本発明の第２の実施の形態におけるデータ取り出し手段２１６の動作の一例を説明するための流れ図である。
【０１５２】
利用者プログラム２４０がキューからＦＩＦＯ方式でデータを取り出す場合において、データ取り出し手段２１６では、キュー制御情報部２３１の取り出しポインタの指すエントリがセグメント内の最終エントリである場合（図１６のステップＳ１４６でＹＥＳ）、次セグメントの先頭エントリを指すようにデータ取り出しポインタを更新する（ステップＳ１４８）。
【０１５３】
ここで、登録ポインタが指すセグメントがデータを取り出したセグメント（以降、「取り出しセグメント」という）でない場合であって（ステップＳ１４９でＮＯ）、取り出しセグメントが第１セグメントではなく（ステップＳ１５０でＮＯ）、過去にキューの拡張を行っておりセグメントを削除しても、初期セグメント数を下回らない、すなわち
”使用セグメント数−１≧初期セグメント数”
である場合（ステップＳ１５１でＹＥＳ）、キュー縮退手段２２０に、取り出しセグメントを指定してキューを縮退する（ステップＳ１５２）。
【０１５４】
キュー縮退手段２２０は、指定されたセグメント、ここでは取り出しセグメントを消去し（図１９のステップＳ１９１）、指定されたセグメントの前セグメントが次セグメントを指すように環状リンクを再設定し（ステップＳ１９２）、使用セグメント数から１を減算する（ステップＳ１９３）。
【０１５５】
尚、登録ポインタの指すセグメントが取り出しセグメントである場合（ステップＳ１４９でＹＥＳ）は、取り出しセグメント中に他のデータが存在する状態であるためセグメントを削除しない。取り出しセグメントが第１セグメントのとき（ステップＳ１５０でＹＥＳ）、第１セグメントは利用者プログラム２４０にキーとして使用されるセグメントであり、また制御情報が格納されているセグメントであるため、削除しない。
【０１５６】
また、”使用セグメント数−１＜初期セグメント数”
である場合（ステップＳ１５１でＮＯ）は、初期状態のセグメント数を下回ってしまうため、セグメントを削除しない。
【０１５７】
図１７は、本発明の第２の実施の形態におけるデータ逆取り出し手段２１７の動作の一例を説明するための流れ図である。
【０１５８】
利用者プログラム２４０がキューからＬＩＦＯ方式でデータを取り出す場合において、データ逆取り出し手段２１７では、キュー制御情報部２３１の登録ポインタが指すエントリが、セグメント内の先頭エントリである場合（図１７のステップＳ１６４でＹＥＳ）、前セグメントの最終エントリを指すように、登録ポインタを更新する（図１７のステップＳ１６６、Ｓ１６７）。
【０１５９】
ここで、更新前の登録ポインタが指していたセグメント（以降、元セグメント）が取り出しポインタの指すセグメントではない場合であって（ステップＳ１６８でＮＯ）、元セグメントが第１セグメントではなく（ステップＳ１６９でＮＯ）、過去にキューの拡張が起こっており、
”使用セグメント数−１≧初期セグメント数”
である場合（ステップＳ１７０でＹＥＳ）には、キュー縮退手段２２０に元セグメントを指定してキューを縮退する（ステップＳ１７１）。キュー縮退手段２２０により、元セグメントは消去される。
【０１６０】
尚、更新前の登録ポインタが指していたセグメント（「元セグメント」という）が取り出しポインタの指すセグメントの場合には（ステップＳ１６８でＹＥＳ）、元セグメント中に他のデータが存在する状態であるため、セグメントを削除しない。
【０１６１】
元セグメントが第１セグメントの場合（ステップＳ１６９でＹＥＳ）、第１セグメントは削除しない。
【０１６２】
また、”使用セグメント数−１＜初期セグメント数”
となる場合（ステップＳ１７０でＮＯ）は、初期状態のセグメント数を下回ってしまうため、セグメントを削除しない。
【０１６３】
次に、本実施の形態の作用効果について説明する。
【０１６４】
本発明の形態では、データの登録時において、エントリが不足しそうな場合にセグメントを追加し、データの取り出し時に、データが存在しないセグメントを検出したらセグメントを消去するように構成されているため、データの数が一時的に多くなった場合に自動的にキューを拡張し、データの数が減ったらキューを縮退することができ、メモリ資源を効率良く利用することができる。
【０１６５】
また、本実施の形態では、さらに、データの登録時に、登録ポインタと取り出しポインタが同じセグメントを指すとき、すなわち登録ポインタが取り出しポインタに追いつきエントリ不足となる可能性が発生した場合にセグメントを追加する構成となっているため、エントリ不足となる前に事前にキューを拡張することができる。
【０１６６】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
【０１６７】
キューが図２および図３に示すように、登録ポインタが”セグメント１のエントリ４”を、取り出しポインタが”セグメント２のエントリ６”を指しており、登録されているデータ数が”９”、使用セグメント数３、初期セグメント数３、最大セグメント数１０であるとする。ここで利用者プログラムよりデータが２つ登録されると、登録ポインタは”セグメント１のエントリ６”を指し、データ数は１１となる。この状態で、さらにデータの登録が要求された場合、登録エントリはエントリ６でセグメント１の最終エントリであり（図１５のステップＳ１２３でＹＥＳ）、取り出しポインタの指すセグメントは”セグメント２”であり、”セグメント１”の次セグメントである（ステップＳ１２５でＹＥＳ）。
【０１６８】
また、
使用セグメント数＋１＝４≦１０
であるため（ステップＳ１２６でＹＥＳ）、データ登録手段２１５は、キュー拡張手段２１９により、セグメント１の次セグメントとして、セグメント４を追加する（ステップＳ１２７）。
【０１６９】
このように、キューは拡張され、図１２および図１３に示す状態となる。
【０１７０】
次に、キューが図１２および図１３に示すように、登録ポインタが”セグメント４のエントリ１”を、取り出しポインタが”セグメント２のエントリ６”を指しており、登録されているデータ数が”１３”、使用セグメント数４、初期セグメント数＝３、最大セグメント数＝１０であるとする。
【０１７１】
この状態で、ＦＩＦＯ方式でのデータの取り出しを要求する場合、データ取り出し手段２１６は、取り出しエントリは、エントリ６で、セグメント２の最終エントリであるため（図１６のステップＳ１４６）、取り出しポインタに、”セグメント３のエントリ１”を設定する（ステップＳ１４８）。
【０１７２】
ここで、登録ポインタの指すセグメントは”セグメント４”であり、”セグメント２”ではなく（ステップＳ１４９でＮＯ）、”セグメント２”は第１セグメントではない（ステップＳ１５０でＮＯ）。
【０１７３】
また、
使用セグメント数−１＝３≧３
であるため（ステップＳ１５１でＹＥＳ）、データ取り出し手段２１６は、キュー縮退手段２２０によりセグメント２を消去する（ステップＳ１５２）。
【０１７４】
このように、キューが縮退され、セグメント２の代わりにセグメント４となった図１２および図１３の状態となる。
【０１７５】
同様に、キューが、図１２および図１３に示すように、登録ポインタが”セグメント４のエントリ１”を、取り出しポインタが”セグメント２のエントリ６”を指しており、登録されているデータ数が”１３”、使用セグメント数が”４”、初期セグメント数が”３”、最大セグメント数が”１０”であるとする。
【０１７６】
この状態で、ＬＩＦＯ方式でのデータの取り出しを要求する場合、データ逆取り出し手段２１７は、登録ポインタの指すエントリはセグメント４の先頭エントリであるため（図１７のステップＳ１６４でＹＥＳ）、登録ポインタにセグメント１のエントリ６を設定する（ステップＳ１６６、Ｓ１６７）。
【０１７７】
ここで、取り出しポインタは、セグメント４ではなく、セグメント２を指しており（ステップＳ１６８でＮＯ）、セグメント４は、第１セグメントではなく（ステップＳ１６９でＮＯ）、
使用セグメント数−１＝３≧３
であるため（ステップＳ１７０でＹＥＳ）、データ逆取り出し手段２１７は、キュー縮退手段２２０により、セグメント４を消去する（ステップＳ１７１）。このように、キューのセグメント４が縮退され、図２および図３の状態となる。
【０１７８】
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。
【０１７９】
図２０を参照すると、本発明の第３の実施の形態は、プログラム制御により動作する計算機システム３００と、キュー制御システム３１０と、キューセグメント３３０と、利用者プログラム３４０と、利用者プログラム３４１とから構成されている。
【０１８０】
キュー制御システム３１０は、キュー生成手段３１１と、キュー停止手段３１２と、キュー消去手段３１３と、キュー再初期化手段３１４と、データ登録手段３１５と、データ取り出し手段３１６と、データ逆取り出し手段３１７と、キュー排他手段３１８と、キュー拡張手段３１９と、キュー縮退手段３２０と、待ち合わせ手段３２１とを含む。
【０１８１】
キューセグメント３３０は、キュー制御情報部３３１と、キューデータ部３３２とを含む。
【０１８２】
これらの手段はそれぞれ概略つぎのように動作する。ここでは、第１、第２の実施の形態と動作が異なる手段について説明する。
【０１８３】
キュー停止手段３１２は、待ち合わせ手段３２１を使用してデータあるいはエントリを待ち合わせているプロセスを起動し、キューを停止状態として以降のデータの登録および取り出しを禁止する。
【０１８４】
データ登録手段３１５は、利用者プログラム（３４０／３４１）からの要求により、キュー制御情報部３３１の登録ポインタが示すエントリに利用者プログラムより渡されたデータを登録する。
【０１８５】
このとき、データの登録を待ち合わせているプロセスが存在する場合は、待ち合わせ手段３２１を使用して待ち合わせているプロセスを起動する。すなわち、データの登録を待ち合わせ数が１以上である場合、通知セマフォに対して通知を行い、待ち合わせを解除する。また、データの登録時に空きエントリがない場合は、待ち合わせ手段３２１を使用してエントリが空くのを待ち合わせる。
【０１８６】
データ取り出し手段３１６は、利用者プログラムからの要求により、キュー制御情報部２３１の取り出しポインタが示すエントリからデータを取り出し利用者プログラムに返却する。このとき、エントリの空きを待ち合わせているプロセスが存在する場合は、待ち合わせ解除手段３２３を使用して待ち合わせているプロセスを起動する。すなわち、空きエントリの待ち合わせ数が１以上である場合、通知セマフォに対して通知を行い、待ち合わせを解除する。また、データの取り出し時に登録されているデータがない場合は、待ち合わせ手段３２１を使用してデータの登録を待ち合わせる。
【０１８７】
データ逆取り出し手段２１７は、利用者プログラムからの要求により、キュー制御情報部３３１の登録ポインタが示すエントリの１つ前のエントリからデータを取り出し利用者プログラムに返却する。このとき、エントリの空きを待ち合わせているプロセスが存在する場合は、待ち合わせ手段３２１を使用して待ち合わせているプロセスを起動する。すなわち、待ち合わせ数が１以上である場合、通知セマフォに対して通知を行い、待ち合わせを解除する。また、データの取り出し時に登録されているデータがない場合は、待ち合わせ手段３２１を使用してデータの登録を待ち合わせる。
【０１８８】
待ち合わせ手段３２１は、待ち合わせ数に１を加算し、キュー排他手段３１８を使用してキューの排他を解除した後に、通知セマフォを使用して待ち合わせ解除通知を待ち合わせる。通知が来たら、待ち合わせ手段３２１は、キュー排他手段３１８を使用してキューの排他を行い、待ち合わせ数から１を減算する。
【０１８９】
キュー制御システム３１０におけるキュー生成手段３１１、キュー停止手段３１２、キュー消去手段３１３、キュー再初期化手段３１４、データ登録手段３１５、データ取り出し手段３１６、データ逆取り出し手段３１７、キュー排他手段３１８、キュー拡張手段３１９、キュー縮退手段３２０、待ち合わせ手段３２１は、コンピュータ上で実行されるプログラムによりそれぞれの機能・処理が実現される。
【０１９０】
次に、図２０および図２３〜図２７のフローチャートを参照して、本実施の形態の全体の動作について詳細に説明する。以下では、この実施の形態を、前記第１、第２の実施の形態の動作と相違する点について説明する。
【０１９１】
図２３は、本発明の第３の実施の形態におけるキュー停止手段３１２の動作の一例を説明するための流れ図である。キュー停止手段３１２にてキューの使用が停止される場合、キュー停止手段３１２では、状態フラグのチェック後に、第１セグメントのキュー制御情報部３３１の待ち合わせ数を判断する。
【０１９２】
第１セグメントのキュー制御情報部３３１の待ち合わせ数が０より大きい場合（図２３のステップＳ２１３でＹＥＳ）は、通知を待ち合わせているプロセスが存在するということであるため、その数分の通知セマフォに対して通知を行い（ステップＳ２１４）、続いて状態フラグを”停止”とする（ステップＳ２１５）。
【０１９３】
これで待ち合わせているプロセスは、全て起動され、各々処理を継続するが、その後の状態チェックで、”使用中”ではないため、全て処理失敗となり、キューが使用されることはない。尚、待ち合わせ数が０の場合（ステップＳ２１３でＮＯ）は、待ち合わせているプロセスは存在しないため通知する必要はない。
【０１９４】
図２４は、本発明の第３の実施の形態におけるデータ登録手段３１５の動作の一例を説明するための流れ図である。
【０１９５】
利用者プログラム３４０がキューにデータを登録する場合において、データ登録手段３１５では、設定した次登録ポインタの指すエントリがキュー制御情報部３３１の取り出しポインタの指すエントリと同じである場合には（図２４のステップＳ２２９でＹＥＳ）、登録ポインタが取り出しポインタに追いつくということであり、次に登録できるエントリがない状態である。
【０１９６】
この場合、データ登録手段３１５では、待ち合わせ手段３２１を使用して、他プロセスが、データを取り出し、空きエントリができるのを待ち合わる（ステップＳ２３６）。
【０１９７】
図２７は、本発明の第３の実施の形態における待ち合わせ手段の動作の一例を説明するための流れ図である。待ち合わせ手段３２１は、第１セグメントのキュー制御情報部３３１の待ち合わせ数に１を加算し（図２７のステップＳ２８１）、キュー排他手段を使用してキューの排他を解除して（ステップＳ２８２）、キュー制御情報部３３１の通知セマフォで待ち合わせを行う（ステップ２８３）。
【０１９８】
データ登録手段３１５、データ取り出し手段３１６、データ逆取り出し手段３１７、あるいはデータ停止手段３１２からの通知により、待ち合わせが解除される。
【０１９９】
その後、待ち合わせ手段３２１は、キュー排他手段によりキューを排他し（ステップＳ２８４）、待ち合わせ数から１を減算し（ステップＳ２８５）、終了する。
【０２００】
データ登録手段３１５にて、待ちあわせが解除された、すなわち空きエントリができたら、データ登録手段３１５は、状態フラグのチェック（図２４のステップＳ２２２）から処理を再実行する。
【０２０１】
また、データが登録できた場合であって（ステップＳ２３２まで実行）、待ち合わせ数が０より大きい場合には（ステップＳ２３３でＹＥＳ）、データの登録を待ち合わせているプロセスが存在することを意味する。
【０２０２】
そこで、データ登録手段３１５は、通知セマフォに対し通知を行い（ステップＳ２３４）、待ち合わせているプロセスを起動する。待ち合わせ数が０の場合（ステップＳ２３３でＮＯ）は、待ち合わせているプロセスは存在しないため通知する必要はない。
【０２０３】
図２６は、本発明の第３の実施の形態におけるデータ取り出し手段３１６の動作の一例を説明するための流れ図である。
【０２０４】
利用者プログラム３４０がキューからＦＩＦＯ方式でデータを取り出す場合において、データ取り出し手段３１６では、第１セグメントのキュー制御情報部３３１のデータ数が０である場合（図２５のステップＳ２４３でＮＯ）、登録されているデータがない状態であるため、待ち合わせ手段３２１を使用して、他プロセスによるデータの登録を待ち合わせる（ステップＳ２５６）。
【０２０５】
待ちあわせが解除された際に、すなわちデータが登録されたら、データ取り出し手段３１６は、状態フラグのチェック（ステップＳ２４２）から処理を再実行する。また、データを取り出し、ポインタの更新が完了した場合（ステップＳ２４７まで実行）に、第１セグメントのキュー制御情報部３３１の待ち合わせ数が０より大きい場合には（ステップＳ２５３でＹＥＳ）、エントリの空き待ち合わせているプロセスが存在することを意味する。
【０２０６】
そこで、データ取り出し手段３１６は、第１セグメントのキュー制御情報部３３１の通知セマフォに対し通知を行い（ステップＳ２５４）、待ち合わせているプロセスを起動する。一方、第１セグメントのキュー制御情報部３３１の待ち合わせ数が０の場合には（ステップＳ２５３でＮＯ）、待ち合わせているプロセスは存在しないため、通知する必要はない。
【０２０７】
図２６は、本発明の第３の実施の形態におけるデータ逆取り出し手段の動作の一例を説明するための流れ図である。
【０２０８】
利用者プログラム３４０がキューからＬＩＦＯ方式でデータを取り出す場合において、データ逆取り出し手段３１７では、キュー制御情報部３３１のデータ数が０である場合は（図２６のステップＳ２６３でＮＯ）、登録されているデータがない状態であるため、待ち合わせ手段３２１を使用して、他プロセスによるデータの登録を待ち合わせる（ステップＳ２７７）。待ちあわせが解除された、すなわちデータが登録されたら、データ逆取り出し手段３１７は、状態フラグのチェック（ステップＳ２６２）から処理を再実行する。また、データを取り出しが完了した場合（ステップＳ２７５まで実行）、第１セグメントのキュー制御情報部３３１の待ち合わせ数が０より大きい場合は（ステップＳ２７４でＹＥＳ）、エントリの空き待ち合わせているプロセスが存在することを意味する。
【０２０９】
そこでデータ逆取り出し手段３１７は、第１セグメントのキュー制御情報部３３１の通知セマフォに対し通知を行い（ステップＳ２７５）、待ち合わせているプロセスを起動する。待ち合わせ数が０の場合（ステップＳ２７４でＮＯ）は、待ち合わせているプロセスは存在しないため通知する必要はない。
【０２１０】
次に、本実施の形態の効果について説明する。
【０２１１】
本実施の形態では、データの登録時に空きエントリが存在しない場合に、他プロセスがデータを取り出しエントリが空くのを自動的に待ちあわせるように構成されているため、キューのオーバフローを意識する必要がなくキューを利用することができる。
【０２１２】
また、本実施の形態では、さらに、データの取り出し時にデータが存在しない場合には、他プロセスによるデータの登録を自動的に待ち合わせるように構成されているため、登録されているデータの数を意識することなくキューを利用することができる。
【０２１３】
【実施例２】
次に、具体的な実施例を用いて本実施の形態の動作を説明する。
【０２１４】
キューが、例えば図２１および図２２に示すように、登録ポインタが”セグメント１のエントリ４”を、取り出しポインタが”セグメント１のエントリ５”を指しており、登録されているデータ数が”１７”、使用セグメント数３、初期セグメント数３、最大セグメント数３であるとする。この状態で、利用者プログラム３４０がデータを登録すると、データ登録手段３１５では、登録ポインタが”セグメント１のエントリ４”を指しており最終エントリではない（図２５のステップＳ２２３でＮＯ）ため、次登録ポインタには”セグメント１のエントリ５”を設定する（ステップＳ２２４）。
【０２１５】
すると、次登録ポインタ＝取り出しポインタであるため（ステップＳ２２９でＹＥＳ）、待ち合わせ手段２３６によりエントリの空きを待ち合わせる（ステップＳ２３６）。待ち合わせ手段３２１は、第１セグメントのキュー制御情報部３３１の待ち合わせ数を１とし（図２７のステップＳ２８１）、キューの排他を解除して（ステップＳ２８２）、通知を待ち合わせる（ステップＳ２８３）。
【０２１６】
ここで、利用者プログラム３４１が、ＦＩＦＯ方式でデータを取り出すと、データ取り出し手段３１６では、”セグメント１のエントリ５”からデータを取り出す（図２５のステップＳ２４４、Ｓ２４５）。エントリ５は最終エントリではないので（ステップＳ２４６でＮＯ）、取り出しポインタに”セグメント１のエントリ６”を設定する（ステップＳ２４７）。
【０２１７】
続いて、データ取り出し手段３１６は、第１セグメントのキュー制御情報部３３１の待ち合わせ数が１であることから（ステップＳ２５３でＹＥＳ）、第１セグメントのキュー制御情報部３３１の通知セマフォに通知する（ステップＳ２５４）。
【０２１８】
待ち合わせ手段３２１は、利用者プログラム３４１でのデータ取り出し手段３１６からの通知を受け、処理を継続する。待ち合わせ手段３２１は、キューを排他し（図２７のステップＳ２８４）、第１セグメントのキュー制御情報部３３１の待ち合わせ数から１を減算する（ステップＳ２８５）。
【０２１９】
続いて、データ登録手段３１５では、状態チェック（図２４のステップＳ２２２）から処理を再実行すると、次登録ポインタには”セグメント１のエントリ５”が設定され（ステップＳ２２４）、次登録ポインタ≠取り出しポインタであるため（ステップＳ２２９でＮＯ）、データの登録が完了する（ステップＳ２３０、Ｓ２３１、Ｓ２３２）。
【０２２０】
続いて、第１セグメントのキュー制御情報部３３１の待ち合わせ数は０であるため（ステップＳ２３３でＮＯ）、データ登録手段３１５は、通知は行わなず、キューの排他を解除し（ステップＳ２３５）、終了する。
【０２２１】
上記した各実施例のキュー制御システムは、仮想記憶方式を採用し、セグメンテーションで仮想記憶空間を管理するコンピュータのセグメント管理に用いて好適とされる。
【０２２２】
また、プロセス間通信を実現するにあたり、利用者の負担を減らすことができる。すなわち、上記実施例においては、キューへのデータの登録や空きエントリの待ち合わせをキュー制御システムの内部で行うことで、キュー操作において、データエンプティやオーバフローが発生せず、利用者プログラムの側で、エラー処理等を考慮した複雑なプログラムを組む必要がない。これに以外にも、必要なときにバッファプールからバッファを取得し、使用後、バッファを戻す動的バッファ管理等、情報データを保持するデータエントリと、キュー制御情報部を有する構成の任意のキュー管理システムに適用できることは勿論である。以上本発明を上記実施形態に即して説明したが、本発明は、上記実施形態に限定されるものでなく、特許請求の範囲の各請求項の発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【０２２３】
【発明の効果】
以上説明したように、本発明によれば下記記載の効果を奏する。
【０２２４】
本発明の第１の効果は、キューへのデータの登録および取り出しを高速に行うことができる、ということである。
【０２２５】
その理由は、本発明においては、処理対象となるエントリは、登録ポインタあるいは、取り出しポインタによってあらかじめ決定されており、データの登録および取り出し時に、キューの検索やエントリ間のチェインの張り替えを不要としているためである。
【０２２６】
本発明の第２の効果は、メモリ資源を効率よく利用することができる、ということである。
【０２２７】
その理由は、本発明においては、使用を終了したキューを消去し、あるいは再利用することが可能であり、また、登録データの数が一時的に多くなった場合には、自動的にキューを拡張し、登録データの数が減ったら、キューを縮退させる制御が行われるためである。
【０２２８】
本発明の第３の効果は、プロセス間通信を実現するにあたり、利用者の負担を減らすことができる、ということである。
【０２２９】
その理由は、本発明においては、キューへのデータの登録や空きエントリの待ち合わせをキュー制御システムの内部で行うことで、キュー操作において、データエンプティやオーバフローが発生せず、利用者プログラムの側で異常を意識する必要がない、すなわち、例えばエラー処理等を考慮したプログラムを組む必要がないためである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態の構成を示す図である。
【図２】本発明の第１の実施の形態におけるキューセグメントを模式的に示す図である。
【図３】本発明の第１の実施の形態におけるキュー制御情報部の一例を示す図である。
【図４】本発明の第１の実施の形態におけるキュー生成手段の動作の一例を説明するための流れ図である。
【図５】本発明の第１の実施の形態におけるキュー停止手段の動作の一例を説明するための流れ図である。
【図６】本発明の第１の実施の形態におけるキュー消去手段の動作の一例を説明するための流れ図である。
【図７】本発明の第１の実施の形態におけるキュー再初期化手段の動作の一例を説明するための流れ図である。
【図８】本発明の第１の実施の形態におけるデータ登録手段手段の動作の一例を説明するための流れ図である。
【図９】本発明の第１の実施の形態におけるデータ取り出し手段の動作の一例を説明するための流れ図である。
【図１０】本発明の第１の実施の形態におけるデータ逆取り出し手段の動作の一例を説明するための流れ図である。
【図１１】本発明の第２の実施の形態の構成を示す図である。
【図１２】本発明の第２の実施の形態におけるキューセグメントを模式的に示す図である。
【図１３】本発明の第２の実施の形態におけるキュー制御情報部の一例を示す図である。
【図１４】本発明の第２の実施の形態におけるキュー再初期化手段の動作の一例を説明するための流れ図である。
【図１５】本発明の第２の実施の形態におけるデータ登録手段手段の動作の一例を説明するための流れ図である。
【図１６】本発明の第２の実施の形態におけるデータ取り出し手段の動作の一例を説明するための流れ図である。
【図１７】本発明の第２の実施の形態におけるデータ逆取り出し手段の動作の一例を説明するための流れ図である。
【図１８】本発明の第２の実施の形態におけるキュー拡張手段の動作の一例を説明するための流れ図である。
【図１９】本発明の第２の実施の形態におけるキュー縮退手段の動作の一例を説明するための流れ図である。
【図２０】本発明の第３の実施の形態の構成を示す図である。
【図２１】本発明の第３の実施の形態におけるキューセグメントを模式的に示す図である。
【図２２】本発明の第３の実施の形態におけるキュー制御情報部の一例を示す図である。
【図２３】本発明の第３の実施の形態におけるキュー停止手段の動作の一例を説明するための流れ図である。
【図２４】本発明の第３の実施の形態におけるデータ登録手段の動作の一例を説明するための流れ図である。
【図２５】本発明の第３の実施の形態におけるデータ取り出し手段の動作の一例を説明するための流れ図である。
【図２６】本発明の第３の実施の形態におけるデータ逆取り出し手段の動作の一例を説明するための流れ図である。
【図２７】本発明の第３の実施の形態における待ち合わせ手段の動作の一例を説明するための流れ図である。
【符号の説明】
１００，２００，３００  計算機システム
１１０，２１０，３１０  キュー制御システム
１１１，２１１，３１１  キュー生成手段
１１２，２１２，３１２  キュー停止手段
１１３，２１３，３１３  キュー消去手段
１１４，２１４，３１４  キュー再初期化手段
１１５，２１５，３１５  データ登録手段
１１６，２１６，３１６  データ取り出し手段
１１７，２１７，３１７  データ逆取り出し手段
１１８，２１８，３１８  キュー排他手段
２１９，３１９  キュー拡張手段
２２０，３２０  キュー縮退手段
３２１  待ち合わせ手段
１３０，２３０，３３０  キューセグメント
１３１，２３１，３３１  キュー制御情報部
１３２，２３２，３３２  キューデータ部
１４０，２４０，３４０  利用者プログラム
【図１】
0003823878.tif 000002
【図２】
0003823878.tif 000003
【図３】
0003823878.tif 000004
【図４】
0003823878.tif 000005
【図５】
0003823878.tif 000006
【図６】
0003823878.tif 000007
【図７】
0003823878.tif 000008
【図８】
0003823878.tif 000009
【図９】
0003823878.tif 000010
【図１０】
0003823878.tif 000011
【図１１】
0003823878.tif 000012
【図１２】
0003823878.tif 000013
【図１３】
0003823878.tif 000014
【図１４】
0003823878.tif 000015
【図１５】
0003823878.tif 000016
【図１６】
0003823878.tif 000017
【図１７】
0003823878.tif 000018
【図１８】
0003823878.tif 000019
【図１９】
0003823878.tif 000020
【図２０】
0003823878.tif 000021
【図２１】
0003823878.tif 000022
【図２２】
0003823878.tif 000023
【図２３】
0003823878.tif 000024
【図２４】
0003823878.tif 000025
【図２５】
0003823878.tif 000026
【図２６】
0003823878.tif 000027
【図２７】
0003823878.tif 000028