JP3598528B2 - データ引き継ぎ方法 - Google Patents
データ引き継ぎ方法 Download PDFInfo
- Publication number
- JP3598528B2 JP3598528B2 JP4832494A JP4832494A JP3598528B2 JP 3598528 B2 JP3598528 B2 JP 3598528B2 JP 4832494 A JP4832494 A JP 4832494A JP 4832494 A JP4832494 A JP 4832494A JP 3598528 B2 JP3598528 B2 JP 3598528B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- buffer
- processes
- output
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【産業上の利用分野】
本発明は、計算機システムにおける複数のプロセスからなる一連の処理の中で行われるプロセス間でのデータ引き継ぎ制御方法に係り、特に、1つのプロセスでの処理の実行結果が複数のプロセスにより引き継がれる場合に用いて好適なプロセス間でのデータ引き継ぎ制御方法に関する。
【0002】
【従来の技術】
計算機システムにおけるバッチ処理等は、複数のジョブ、あるいはプロセスが、それぞれ他のジョブあるいはプロセスでの処理の結果として得られるデータを引き継ぎながら処理を進めることにより実現される。従来、このような処理において、プロセス間でのデータの引き継ぎは次のように行われていた。即ち、各プロセスは、実行した処理の結果として得られたデータを、一旦、磁気ディスク、磁気テープ等の外部記憶装置に出力する。他のプロセスでの処理の実行結果のデータを使用するプロセスは、実行結果を利用しようとする他のプロセスの処理が終了した後、外部記憶装置に出力された実行結果のデータを入力して処理を行なっていた。つまり、従来、プロセス間でのデータの受渡しは、外部記憶装置を介してファイル単位で行われ、またこのため、処理結果のデータを引き渡すプロセスと、処理結果のデータを引き継ぐプロセスとは、逐次的に実行されていた。
【0003】
このような従来技術に対し、例えば、特開平2−120924号公報、あるいは、特開平3−46033号公報には、データの引継ぎを行なう複数のプロセスを並行して実行することにより、トータルとしての処理時間を短縮することが可能なデータの引継ぎ方法が開示されている。即ち、これら公報により開示される技術では、プロセス間でデータを受け渡す際、特に、受け渡すデータを保存する必要がない場合に、プロセス間でのデータの引き継ぎを外部記憶を介さずに主記憶内に設けたバッファを介して行なう。また、データの引継ぎをファイル単位ではなく、ファイルを構成するデータの単位であるレコード単位で行ない、書き込みプロセスと読み込みプロセスが同時に同一のファイルへアクセスすることを許している。これによりデータを引き渡す側のプロセスが、すべてのデータをファイルに出力するまでデータを引き継ぐ側のプロセスの実行を待たせる必要がなくなり、データの引き継ぎを行なう複数のプロセスを並行に実行することが可能となる。
【0004】
【発明が解決しようとする課題】
上述した2つの公報に開示された技術は、プロセス間でのデータの引継ぎを主記憶内に設けたバッファを介して行なっている。一般に、計算機システムの主記憶は、外部記憶装置と比べて高速にデータを転送することができる。従って、上述した技術によればデータの引き継ぎ処理を高速化することができる。しかし、1つの計算機システムで扱うことのできる主記憶の容量には限度がある。このため、プロセス間で受渡しが行われる中間データが大量に存在する場合には、このような大容量の中間データをすべて主記憶内に置くことは事実上不可能である。特開平3−46033号公報には、この問題を解決するために、データの引継ぎに用いるバッファをラップアラウンドに使用することが開示されている。バッファをラップアラウンドに使用する場合、これら従来技術によれば、データを引き継ぐ側のプロセス(以下、入力プロセスという)がバッファから取り込む単位時間当たりのデータ量と、データを引き渡す側のプロセス(以下、出力プロセスという)がバッファに書き込む単位時間当たりのデータ量との間に差があると、処理の待合せが行われる。例えば、入力プロセスが単位時間に読み込むデータの量より出力プロセスが単位時間にバッファに書き込むデータの量の方が大きい場合、出力プロセスによるデータの出力処理が入力プロセスのデータの入力処理に追い着くと、出力プロセスによりデータを書き込むバッファがなくなるため、出力プロセスは待ち状態に設定される。そして、出力プロセスの待ち状態は、入力プロセスによるデータの入力処理が出力プロセスの出力処理に追い着くまで保たれ、入力プロセスによる入力処理が追い着いた時点で解除される。同一の出力プロセスに対して複数の入力プロセスが存在する場合には、それぞれのプロセスにより単位時間当たりに書き込まれるデータの量、及び読み出されるデータの量が区々であることにより、このような待合せの必要が頻発する可能性がある。前記従来技術では、このように入力プロセス、出力プロセスの待合せが多発した場合のことについて何等考慮されていない。このため、1つのプロセスから出力されたデータを複数のプロセスで利用するような場合に、プロセスの待合せが頻発することにより、プロセスの待ち状態の設定、解除の回数が増大してしまい、これにより、処理時間が増大して、プロセスの並行処理によるメリットを十分に活かすことができなくなるという問題がある。
【0005】
本発明の目的は、上述したような従来技術における技術的課題を解決し、ある1つのプロセスが生成したデータを複数のプロセスが参照するようなプロセス間でのデータの引き継ぎ処理が行われる計算機システムにおいて、各プロセスにおけるデータ入出力の処理速度の相違に影響されることのないプロセス間でのデータの引継ぎ方法を提供することにある。
【0006】
【課題を解決するための手段】
上述した課題を解決するために、本発明によれば、処理結果であるデータを出力する第1のプロセス及び第1のプロセスが出力したデータを引き継いで処理を行なう複数の第2のプロセスのいずれからもアクセス可能なバッファが設けられる。このバッファは、例えば、計算機システムの主記憶装置内に設けられる。このような計算機システムで実行される本発明のデータ引き継ぎ方法は、第1のプロセスから発行された出力命令に応じて、出力命令により指定されるデータをバッファへ順次書き込む第1のステップと、第2のプロセスの各々から発行された入力命令に応じて、バッファに書き込まれたデータを第1のプロセスでの出力順に従って、入力命令を発行した第2のプロセスに順次読み込ませる第2のステップと、第1のプロセスからの出力命令に応じて書き込まれたデータが第2のプロセスの全てに読み込まれたときに、このデータを保持していたバッファの領域を開放する第3のステップとを有する。
【0007】
好ましくは、バッファは、第1及び第2のステップのためにラップアラウンドに使用される。
【0008】
また、第2のステップにおいてデータを読み込もうとしたバッファの領域に書き込まれた新しいデータがない場合に、その領域に書き込まれるであろうデータに対する読み込み命令を発行した第2のプロセスを待ち状態に設定する。この待ち状態は、第1のステップの実行状況を監視し、第1のステップの実行状況に応じて解除される。
【0009】
あるいはまた、第1のステップにおいてデータを書き込もうとしたバッファの領域が、第3のステップにより未だ開放されなていない状態にある場合に、第1のプロセスを待ち状態に設定する。この待ち状態は、第2のステップの実行状況を監視し、第2のステップの実行状況に応じて解除される。
【0010】
さらに、本発明のデータ処理方法によれば、データの引き継ぎに用いられるバッファの大きさは、第1のプロセスが発行するデータの出力命令の頻度と、複数の第2のプロセスが発行するデータの入力命令の頻度とを観測し、第1のプロセスの出力命令の頻度に対する複数の第2のプロセスの各々が発行する入力命令の頻度が、所定のしきい値以上もしくは所定のしきい値以下である場合に、増分される。
【0011】
また、第1のプロセスおよび複数の第2のプロセスの実行状況を監視し、いずれかのプロセスがデータ引き継ぎ処理中に異常終了した場合には、他のすべてのプロセスを異常終了させる。
【0012】
さらにまた、複数の第2のプロセスには、前記第2のステップにより読み込んだデータをバッファが存在する記憶装置とは異なる記憶装置、例えば、ディスク装置等の外部記憶装置に書き込むバックアッププロセスを含む。ある好ましい態様においては、このバックアッププロセスは、第1のプロセスを起動させるためのコマンドにおける指定に従って生成される。
【0013】
【作用】
第1のプロセスでの処理の結果として出力されるデータを第2のプロセスで引き継ぐ際、主記憶上に用意したバッファを利用することで、外部記憶装置を利用した場合と比較して、1レコードのあたりのデータ転送を高速に実行できる。このとき、出力プロセス及び入力プロセスによるデータの入出力の状況に応じて各プロセスの実行状態、即ち、待合せの設定、解除を行う。これにより、入力プロセスからの入力要求回数が、出力プロセスからの出力要求回数を越えないことを保証することができる。また、バッファをラップアラウンドに使用した場合であっても、いずれかの入力プロセスにより読み込みの行われていないデータを保持するバッファの領域、即ち、バッファブロックが存在する場合、そのブロックに対して新しいデータの書き込みが行われないことを保証することができる。この結果として、データの受け渡しをファイル単位ではなくレコード単位で行ない、出力プロセスと複数の入力プロセスとを並行して実行することが可能となる。
【0014】
また、バッファをラップアラウンドに利用することから生じるプロセスの待ち合わせ処理において、待ち状態のプロセスがある場合は、待合せを生じる原因となったプロセスの実行状況を監視し、そのプロセスの実行状況に応じてその待ち状態が解除される。つまり、各プロセスの待ち状態は、その待ち状態を設定する原因となったプロセスによるデータの入出力の処理が、所定のブロック数以上進行するまで保たれた後解除される。これにより、待ち状態を解除されたプロセスが実行を再開した後、再び待ち状態が設定される状態となるまでに、この所定ブロック数以上の処理を実行できることが保証され、待ち状態解除後直ちに待ち状態に設定されるようなことを防ぐことができる。この結果、個々の入力プロセスのデータ入力の頻度に差があっても、これにより待ち合わせ回数が急増することを防ぎ、プロセス間での待合せ処理に要する処理時間を削減できる。さらに、出力プロセスと複数の入力プロセスの並行した処理を効率よく実現することができ、データ引き継ぎ処理を高速に実行することが可能となる。
【0015】
【実施例】
以下、本発明の実施例を図を用いて詳細に説明する。
【0016】
本実施例では、本発明をバッチジョブに適用した場合について説明する。従って、プロセス上ではジョブ制御文で指定されたプログラムを実行させることになる。以下では、中間データを出力する側のジョブで指定したプログラムを出力プロセスと呼び、その中間データを入力する側のジョブで指定したプログラムを実行させるプロセスを入力プロセスと呼ぶことにする。
【0017】
図1は、本発明の一実施例における計算機システムの原理を説明するためのブロック図である。図1において、1は計算機システムを示す。計算機システム1は、演算操作を行う中央演算装置(CPU)2と主記憶装置3を含んで構成される。4は磁気ディスク装置等の外部記憶装置である。5はジョブ制御文であり、ジョブが実行するプログラムやアクセスするファイルを定義したものである。6はジョブ受付部であり、ジョブ制御文5によって投入されるジョブを受け付ける部分である。7はジョブ制御文解析部であり、ジョブ受付部6が受け付けたジョブ制御文5の構文解析等を行う。8はジョブ起動部であり、ジョブ制御文解析部7により解析されたジョブの起動を行う。9は出力プロセスであり、10は入力プロセス群である。11はデータ引き継ぎ制御部であり、オープン処理制御部111、クローズ処理制御部112、ライト処理制御部113、リード処理制御部114、バッファ管理部115、バックアップ制御部116からなる。12は出力プロセスと入力プロセスとの間のデータ引き継ぎに必要とするデータ引き継ぎ情報記録領域である。13はデータ引き継ぎに利用するバッファである。また、14はコピープロセスであり、バックアップ処理を実行する際に利用される。ジョブ受付部6、ジョブ制御文解析部7、ジョブ起動部8、出力プロセス9、入力プロセス10、データ引き継ぎ制御部11、及びコピープロセス14は、主記憶装置3に格納されたプログラムを示しており、実際には、中央演算装置2がこれらのプログラムに従った処理を実行することにより、これらの機能が実現される。
【0018】
図2は、図1におけるジョブ制御文5の一例を示す構成図であり、中間データを出力するプログラムを実行させるためのジョブ制御文501と、その中間データを入力するプログラムを実行させるためのジョブ制御文502、503を示している。
【0019】
ジョブ制御文では、まず、ジョブを宣言するためのJOB文が記述される。JOB文では、そのジョブのジョブ名称を指定する。例えば、ジョブ制御文501では、“JOB1”がジョブ名称である。次に、各ジョブの中でのプログラムの実行単位であるジョブステップを宣言する。ジョブステップを宣言するのは、EXEC文であり、PGMオペランドで実行させるプログラムを指定する。EXEC文でも、JOB文同様にジョブステップ名称を指定する。例えば、ジョブ制御文501のEXEC文は、ジョブステップ名称が“STEP1”であり、実行するプログラムが“PGM1”であることを指定している。さらに、FD文によりジョブステップ内でアクセスするファイルが指定される。FD文では、アクセスするファイルの名称をFILEオペランドで指定し、そのファイルが存在するデバイスタイプをDEVICEオペランドで指定する。FD文にもFD名称が付けられている。プログラムはこのFD名称を指定して、ファイルへのアクセスを行う。例えば、ジョブ制御文501では、FD名称“IN1”のFD文で入力するファイルとして、“A.DATA”を指定しており、FD名称“OUT1”のFD文で実行結果として“B.DATA”を出力することを指定している。
【0020】
次に、後述する本実施例の方法によりデータの引き継ぎを行なう場合のFD文の記述について、図2に示すジョブ制御文501、502、503を例に詳細に説明する。
【0021】
図2は、ジョブ制御文501により定義されるジョブ“JOB1”のプロセスが出力したファイルをジョブ制御文502及び503により定義されるジョブ“JOB2”、“JOB3”のプロセスが参照する場合のジョブ制御文を示すものである。ジョブ制御文501のFD文“OUT1”のDEVICEオペランドの第1パラメータで指定している“PIPE”は、“JOB1”の実行結果である“B.DATA”が、本実施例により提案される後述の方法で他のジョブに引き継がれることを示している。同様に、ジョブ制御文502、503のFD文“IN2”及び“IN3”では、DEVICEオペランドのパラメータに“PIPE”を指定して、後述する方法により、“B.DATA”を参照することを示している。FD文で指定するファイル名としては、ファイルを出力する側と参照する側とで同一の名称を指定する。また、ジョブ制御文501のFD文“OUT1”のDEVICEオペランドの第2パラメータは、出力したファイルを参照するジョブの数を指定しており、この場合、“JOB1”の出力である“B.DATA”が2つのジョブに引き継がれることを示している。本実施例では、以上のようにFD文を記述することにより、中間データを出力するジョブとそのデータを参照するジョブとをジョブ制御文で関連づけることができる。
【0022】
ジョブ間でのデータを受け渡しを行ないながら、受渡しが行われているデータを外部記憶装置へ出力して保存しておく場合には、データを出力する側のジョブ制御文の出力ファイルを指定するFD文のDEVICEオペランドの第3パラメタで、中間データの保存先のファイルを指定したFD文を指定する。例えば、ジョブ制御文501において、FD文“OUT1”を
//OUT1 FD FILE=B.DATA,DEVICE=(PIPE,2,BKUP)
と記述し、さらに、
//BKUP FD FILE=BACK.DATA,DEVICE=DASD
というFD文を記述したとする。この場合、中間データは、主記憶装置3内のバッファ13を介して“B.DATA”というファイル名で他のジョブに参照されると共に、“BACK.DATA”というファイル名で、外部記憶装置4上に保存される。以下、本明細書では、このように、プロセス間で引き継がれるデータを外部記憶装置上に保存することをバックアップと呼び、このための処理をバックアップ処理と呼ぶ。
【0023】
図3は、主記憶装置3内のデータ引き継ぎ記録領域12の論理的な構成図である。データ引き継ぎ記録領域12は、共通情報テーブル1201、出力プロセス情報テーブル1202、及び入力プロセス情報テーブル1203とを有する。共通情報テーブル1201、及び出力プロセス情報テーブル1202は、データ引き継ぎ記録領域12内に1つだけ存在する。一方、入力プロセス情報テーブル1203は、データを受け取る入力プロセスに対応して設けられ、データを受け取る入力プロセスの数だけ存在する。
【0024】
共通情報テーブル1201は、ファイル名エリア1204、バッファ先頭アドレスエリア1205、バッファブロックブロック数エリア1206、指定入力プロセス数エリア1207、実行入力プロセス数エリア1208、及びバックアップ指定フラグ1209を含んでいる。ファイル名エリア1204は、このデータ引き継ぎ記録領域12によりデータの引き継ぎが行われるファイルのファイル名が登録される。バッファ先頭アドレスエリア1205、バッファブロック数エリア1206には、データの引き継ぎに利用するバッファ13の先頭アドレス、及びブロック数がそれぞれ登録される。指定入力プロセス数エリア1207には、ファイル名エリア1204に登録したファイル名を持つファイルのデータを参照するプロセス(ジョブ)の数、即ちこのファイルをオープン可能な入力プロセスの数がジョブ制御文に従って登録される。このファイルの入力処理を実行中の入力プロセスの数は実行入力プロセス数1208によって示される。また、バックアップ指定フラグ1209は、引き継ぎを行なうファイルを外部記憶装置4に保存する場合にセットされる。
【0025】
出力プロセス情報テーブル1202は、出力ブロック番号エリア1210、出力回数エリア1211、出力クローズフラグ1212、出力待ちフラグ1213を含んでいる。出力ブロック番号エリア1210には、次回の出力処理によりデータを書き込むバッファ13のブロックの番号が設定される。出力回数エリア1211には、出力プロセス9により出力処理の行われた回数(出力したブロックの数)が記録される。また、出力クローズフラグ1212、出力待ちフラグ1213は、出力プロセス9によりファイルがクローズされたか否かを示すフラグ、出力プロセスの待合せの状態を示すフラグがそれぞれセットされる。
【0026】
また、各入力プロセス情報テーブル1203は、入力プロセスIDエリア1214、入力ブロック番号エリア1215、入力回数エリア1216、入力クローズフラグ1217、入力待ちフラグ1218を含んで構成される。入力プロセスIDエリア1214には、その入力プロセス情報テーブル1203に対応する入力プロセスを識別するための識別子(ID)が登録される。ここで用いる識別子としては、例えば、ジョブ制御文5で定義されたジョブ名、あるいは、ジョブに対して通番により与えられたジョブ番号等を用いることができる。入力ブロック番号エリア1215には、次回の出力処理によりデータを読み込むバッファ13のブロックの番号が設定される。入力回数エリア1216には、対応する入力プロセス10により入力処理の行われた回数(読み込んだブロックの数)が記録される。また、入力クローズフラグ1217、入力待ちフラグ1218は、対応する入力プロセス10によりファイルがクローズされたか否かを示すフラグ、及び対応する入力プロセスの待合せの状態を示すフラグがそれぞれセットされる。
【0027】
図4は、オープン処理制御部111の処理フローチャートである。データ引き継ぎ処理制御部11は、各プロセスが、プロセス間データ引き継ぎファイルへのオープン命令を発行したとき、オープン処理制御部111に制御を移す。各プロセスは、オープン命令を発行する際、ジョブ制御文5のFD文でユーザにより指定されたファイル名を同時に指定する。
【0028】
オープン処理制御部111では、まず、ファイル名エリア1204にオープン命令により指定されたファイルと同一のファイル名が登録されたデータ引き継ぎ記録領域12があるかどうか判定(ステップ401)する。同一のファイル名が登録されたデータ引き継ぎ記録領域12がなければ、主記憶装置3内にデータの引き継ぎに利用するバッファ13、及びデータ引き継ぎ記録領域12のための領域を確保し、共通情報テーブル1201の初期設定を行う(ステップ402)。共通情報テーブル1201の初期設定では、ファイル名エリア1204にユーザがジョブ制御文で指定したデータ引き継ぎ用ファイルの名称を格納する。また、確保したバッファ13の先頭アドレスをバッファ先頭アドレスエリア1205に、バッファ13として確保した領域のブロック数をバッファブロック数エリア1206に格納する。指定入力プロセス数エリア1207には、ジョブ制御文5中のFD文のDEVICEオペランドの第2パラメータで指定した入力プロセス数を格納し、実行入力プロセス数1208には“0”を格納する。バックアップ指定フラグは、ジョブ制御文5にバックアップ処理の実行の指定、即ち、中間データの出力を指定するFD文のDEVICEオペランドの第3パラメータの指定があればオンとし、指定がなければオフとする。
【0029】
次に、オープン命令が出力プロセス9から発行されたものであるか判定する(ステップ403)。出力プロセス9により発行されたオープン命令である場合には、データ引き継ぎ記録領域12内に出力プロセス情報テーブル1202が存在するか否か判定する(ステップ404)。データ引き継ぎ記録領域12内に出力プロセス情報テーブル1202が存在する場合には、既に他のプロセスにより同一のファイル名を持つファイルがオープンされていることになる。このため、オープン命令を発行した出力プロセス9を異常終了する(ステップ410)。ステップ404において、データ引き継ぎ記録領域12内に出力プロセス情報テーブル1202が存在しないと判定されると、データ引き継ぎ記録領域12内に出力プロセス情報テーブル1202を確保して初期設定を行う(ステップ405)。出力プロセス情報テーブル1202の初期設定では、出力ブロック番号エリア1210に“1”、出力回数エリア1211に“0”を格納する。また、出力クローズフラグ1212および出力待ちフラグ1213はオフとする。更に、出力プロセス9の実行を記述したジョブ制御文5で指示された入力プロセス数を、指定入力プロセス数1207に格納する。
【0030】
出力プロセス情報テーブル1202の初期設定が終わると、次に、共通情報テーブル1201の指定入力プロセス数エリア1207に設定されている値と実行入力プロセス数エリア1208に設定されている値とを比較する(ステップ406)。実行入力プロセス数エリア1208の値が指定入力プロセス数エリア1207の値を越えている場合には、指定値以上の入力プロセスがオープン命令を発行済みであることになる。従って、この場合には、出力プロセス及びすべての入力プロセスを異常終了させる(ステップ410)。実行入力プロセス数エリア1208の値が指定入力プロセス数エリア1208の値以下であれば、オープン処理制御部111は正常に処理を終了する。
【0031】
一方、ステップ403で、オープン命令が出力プロセス9からのものでないと判断したときは、このオープン命令は入力プロセス10からのものとみなす。そして、データ引き継ぎ記録領域12内に出力プロセス情報テーブル1202が存在するか否か判定する(ステップ407)。出力プロセス情報テーブル1202が存在していれば、指定入力プロセス数エリア1207にオープン可能な入力プロセスの数が設定されている。そこで、既にこのファイルをオープンしている入力プロセス10の数(以下、実行入力プロセス数)を実行入力プロセス数エリア1208を参照して調べ、それを指定入力プロセス数エリア1207に設定されている値(以下、指定入力プロセス数)と比較する(ステップ408)。本実施例では、指定入力プロセス数を超える入力プロセスからのファイルのアクセスは禁止される。このため、ステップ408での比較の結果、ファイルをオープンしている入力プロセスの数が、既に指定入力プロセス数と等しくなっている場合には、この入力プロセス10を異常終了させる(ステップ410)。なお、入力プロセスの数が指定入力プロセス数を超える場合の妥当性については、出力プロセスからのオープン命令の処理(ステップ406)で行なっているので、ここでは、特に行なわない。
【0032】
ステップ408での比較の結果、ファイルをオープンしている入力プロセスの数が指定入力プロセス数以下であれば、この入力プロセス10のために、データ引き継ぎ情報記録領域12内に入力プロセス情報テーブル1203を新たに確保し、初期設定を行う(ステップ409)。入力プロセス情報テーブル1203の初期設定では、入力プロセスIDエリア1214に、オープン命令を発行した入力プロセス10のIDを、入力ブロック番号エリア1215に“1”を、そして入力回数エリア1216に“0”を格納する。また、入力クローズフラグ1217および入力待ちフラグ1218はオフとする。なお、ステップ407で、出力プロセス情報テーブル1202が存在していなければ、出力プロセス9が未オープンであり、指定入力プロセス数エリア1207には、未だ値が設定されていない。従って、このときは、無条件でステップ409を実行する。
【0033】
入力プロセス情報テーブル1202の初期設定を終えると、共通情報テーブル1201の実行入力プロセス数エリア1208の値に1加算し(ステップ411)、処理を正常終了する(ステップ412)。
【0034】
図5は、クローズ処理制御部112による処理のフローチャートである。データ引き継ぎ処理制御部11は、各プロセスがプロセス間データ引き継ぎファイルへのクローズ命令を発行したとき、クローズ処理制御部112に制御を移す。
【0035】
クローズ処理制御部112は、まず、発行されたクローズ命令が出力プロセス9からのものか否か判定する(ステップ501)。出力プロセス9からのクローズ命令であれば、出力プロセス情報テーブル1202の出力クローズフラグ1212をオンにする(ステップ502)。次に、データ引き継ぎ情報記録領域12内のすべての入力プロセス情報テーブル1203について、フラグ1217がオンであるかどうか判定する(ステップ503)。すべての入力クローズフラグ1217がオンであれば、データ引き継ぎ情報記録領域12およびバッファ13を解放して(ステップ504)、処理を終了する(ステップ507)。
【0036】
ステップ501の判定の結果、発行されたクローズ命令が出力プロセス9からのものでない場合は、このクローズ命令を入力プロセス10からのものとみなす。この場合には、入力プロセスIDエリア12014に、クローズ命令を発行した入力プロセス10のIDと一致する入力プロセスIDを持つ入力プロセス情報テーブル1203を探し、その入力クローズフラグ1217をオンにする(ステップ505)。次に、出力プロセス情報テーブル1202の出力クローズフラグ1212がオンとなっているか判定し(ステップ506)、このフラグがオンであればステップ503以降の処理を実行する。出力クローズフラグがオンにセットされていなければ、そのまま処理を終了する。
【0037】
次に、出力プロセス9によるデータの出力、及び入力プロセス10によるデータの読み込みについて説明する。
【0038】
本実施例では、限られた容量の記憶領域しか利用できない場合でも大容量のデータのデータ引き継ぎを可能とするため、バッファ領域13をラップアラウンドに使用してデータの引継ぎを行なう。すなわち、出力プロセス9によるデータの出力の際には、データをバッファ13の最終ブロックまで格納した場合、次のデータはバッファ13の先頭ブロックに戻って格納する。データを格納しようとするブロックにまだすべての入力プロセス10によって読み込まれていない古いデータが存在するときには、そのブロックに新しいデータを上書きすることはできない。この場合には、出力プロセス9を待ち状態にする。同様に、各入力プロセス10は、バッファ13の最終ブロックのデータを読み込むと、次はバッファ13の先頭ブロックに戻ってデータの読み込みを続ける。また、入力プロセス10がデータを読み込もうとしたブロックにまだ新しいデータが格納されていないときは、その入力プロセス10を待ち状態にする。
【0039】
原理的には、データを書き込み、あるいは読み込み可能なブロックが1つでも生じた時点で、出力プロセス9、あるいは入力プロセス10の待ち状態を解除することも可能である。しかし、この場合には、待ち状態を解除されたプロセスが、その直後に再び待ち状態となってしまう恐れがあり、これに伴い処理時間が長時間化する危険がある。このため、本実施例では、各プロセスの待ち状態が解除された後は、少なくとも一定の間隔は処理を続行できるよう各プロセスの待ち状態を制御する。なお、プロセス間で引き継ぐデータ量があらかじめ用意したブロック数よりも少ない場合は、データ引き継ぎ用バッファ13をラップアラウンドに使用することなく処理が終了することはいうまでもない。
【0040】
図6は、出力プロセス9からファイルへの書き込み要求を受け取った際のライト処理制御部113の処理のフローチャートである。
【0041】
ライト処理制御部113は、まず、データ引き継ぎを実行している入力プロセス10のうち、異常終了したプロセスが存在するかどうか判定する(ステップ601)。異常終了している入力プロセス10が存在すれば、出力プロセス9を異常終了させる(ステップ602)。異常終了している入力プロセス10がなければ、次にデータを書き込もうとするブロックの入力プロセス読み込み数を求める。入力プロセス読み込み数は、入力ブロック番号エリア1215の値が出力ブロック番号エリア1210の値と等しい入力プロセス数の合計を、実行入力プロセス数エリア1208の値から減算することによって求めることができる。入力プロセス読み込み数は、データを書き込もうとするブロックに前に書き込まれたデータを読み込んだ入力プロセス10の数を示す。
【0042】
次に、この入力プロセス読み込み数が実行入力プロセス数と等しいか否か判定する(ステップ603)。入力プロセス読み込み数が実行入力プロセス数と等しい場合は、このブロックへの新たなデータの書き込みを許す。逆に、入力プロセス読み込み数と実行入力プロセス数とが等しくない場合には、出力プロセス9を待ち状態とする(ステップ604)。出力プロセス9の待ち状態の解除は、後述するリード処理制御部114の処理で実行される。
【0043】
ステップ603の判定の結果、入力プロセス読み込み数と実行入力プロセス数とが等しい場合、あるいは、ステップ604において出力プロセス9の待ち状態が解除された後、出力ブロック番号エリア1210にセットされたブロック番号で示されるバッファ13のブロックにデータを転送し、データ引き継ぎ情報記録領域12内の情報を更新する(ステップ605)。データ引き継ぎ情報記録領域12の更新では、出力ブロック番号エリア1210、出力回数エリア1211の値をそれぞれ1つカウントアップする。ただし、出力ブロック番号エリア1210の値がバッファブロック数エリア1206の値を越えた場合は、出力ブロック番号エリア1210には“1”をセットする。
【0044】
ステップ605でデータを転送した後、待ち状態の解除が可能な入力プロセス10の待ち状態を解除する。すなわち、入力プロセス情報テーブル1203を参照し(ステップ606)、入力プロセス待ちフラグ1218がオンか否か判定する(ステップ607)。入力プロセス待ちフラグ1218がオンの場合には、さらに、この入力プロセス10の未入力データの数がバッファ一周分存在するか否か判定する(ステップ608)。未入力データがバッファ一周分存在するか否かの判定は、出力ブロック番号エリア1210の値と、入力ブロック番号エリア1215の値が等しいかどうかを調べることにより達成できる。未入力データの数がバッファ一周分存在すれば、その入力プロセス10の入力プロセス待ちフラグ1218をオフとし、待ち状態を解除する(ステップ609)。ステップ609において1つの入力プロセスの待ち状態を解除した後、あるいは、ステップ607、608での判定の結果が否定的であった場合は、すべての入力プロセスについてステップ606〜609の処理を行なったか調べ(ステップ610)、すべての入力プロセスについてステップ606〜609の処理を実行していれば処理を正常終了する(ステップ611)。
【0045】
図7は、入力プロセス10からファイルの読み込み要求を受け取った際のリード制御部114の処理のフローチャートである。
【0046】
リード制御部114は、まず、出力プロセス9が異常終了していないか判定する(ステップ701)。出力プロセス9が異常終了していれば、ファイルの読み込み要求を発行した入力プロセス10も異常終了させる(ステップ702)。出力プロセス9が異常終了していなければ、この入力プロセス10が未だ入力していないデータがバッファ13に存在するか否か判定する(ステップ703)。ステップ703では、ファイル読み込み要求を発行した入力プロセス10に対応する入力プロセス情報テーブル1203の入力ブロック番号エリア1215の値が、出力プロセス情報テーブル1202の出力ブロック番号エリア1210の値と等しくなっているかどうかを調べることにより判定を行なう。
【0047】
ステップ703で未入力データがないと判定された場合は、この入力プロセス10を待ち状態にする(ステップ704)。ここで待ち状態とされた入力プロセス10の待ち状態解除は、前述したようにライト処理制御部113の処理により実行される。
【0048】
ステップ703で未入力データありと判定された場合、若しくはステップ704で設定された待ち状態が解除された後、入力プロセス情報テーブル1203の入力ブロック番号エリア1215にセットされた値により示されるバッファ13内のブロックよりデータを転送する。そして、データ引き継ぎ情報記録領域12内の情報を更新する。具体的には、入力ブロック番号エリア1215、入力回数エリア1216の値をそれぞれ1つカウントアップして更新する。ただし、更新の結果、入力ブロック番号エリア1215の値がバッファブロック数エリア1206にセットされている値を越えた場合には、入力ブロック番号エリア1215に“1”をセットする。(ステップ705)。
【0049】
データ転送後、出力プロセス情報テーブル1202の出力待ちフラグ1213を調べ、それがオンか否か判定する(ステップ706)。出力待ちフラグがオンであればそのまま処理を正常終了する。出力待ちフラグがオフの場合は、バッファ13の各ブロックにある古いデータが、全ての入力プロセスから読み込まれているか否か判定する(ステップ707)。具体的には、すべての入力プロセス情報テーブル1203の入力ブロック番号エリア1215を参照し、そこに設定されているすべて値が、出力プロセス情報テーブル1202の出力ブロック番号エリアに設定されている値と等しくなっているかどうか調べる。そして、各入力ブロック番号エリア1215の値が出力ブロック番号エリア1210の値と等しければ、古いデータは全ての入力プロセスに読み込まれていると判断する。ステップ707で、古いデータは全ての入力プロセスに読み込まれていると判断されれば、出力待ちフラグ1213をオフにセットして処理を終了する(ステップ708)。ステップ707において、入力プロセスにより読み込まれていないデータがあると判断された場合には、そのまま処理を終了する。
【0050】
図6及び図7に説明したライト制御部、リード制御部の処理による、各プロセスの待ち状態の設定、解除に要する処理時間の全体の処理時間に占める割合いをより低く抑えるには、バッファのブロック数をいくつに設定するかが問題となる。このバッファブロック数の設定に当たっては、例えば、特開平3−46033号公報に開示されるように、実行開始時にあらかじめ定められた大きさのバッファを確保しておき、処理の実行中に出力プロセス、入力プロセスそれぞれの入出力処理頻度をモニタし、その結果に応じて最適なバッファのブロック数を決定して、バッファを拡張する方法を採用することができる。なお、特開平3−46033号公報には、入力プロセスが複数存在する場合、どのようにバッファブロック数を決定すればよいかについては示されていない。そこで、本実施例において、特開平3−46033号公報に開示された方法によりバッファのブロック数を決定する際は、各入力プロセスごと独立に最適なバッファブロック数を求め、このうち最大のものを新しいバッファのブロック数として採用する。
【0051】
次に、出力プロセスと入力プロセスとの間で引き継がれるデータを外部記憶装置に保存する場合、即ち、ジョブ制御文5にバックアップ処理の実行の指定がある場合の処理について説明する。
【0052】
バックアップ処理の制御は、バックアップ制御部116により実現される。ジョブ制御文5の中でバックアップ処理が指定されている場合は、出力プロセス9によるファイルのオープン命令発行時に、共通情報テーブル1201のバックアップ指定フラグ1209がオンにセットされる。データ引き継ぎ制御部11は、オープン制御部111の処理終了後、バックアップ指定フラグ1209がオンに設定されていると、バックアップ制御部116の実行を開始する。図8に、バックアップ制御部116の処理のフローチャートを示す。
【0053】
バックアップ制御部116は、まず、共通情報テーブル1201の指定入力プロセス数エリア1207の値を1つカウントアップする(ステップ1101)。続いて、バックアップ処理を実行するコピープロセス14が使用するファイル名を指定する(ステップ1102)。具体的には、コピープロセス14へのデータ入力のためのファイル名として、プロセス間で引き継がれるファイルのファイル名(共通情報テーブル1201のファイル名エリア1204に設定されているファイル名)を指定する。また、コピープロセス14から外部記憶装置4へのデータ出力のためのファイル名として、あらかじめバックアップ処理専用に定められたファイル名、もしくはユーザがデータを保存するために用意したファイル名を指定する。バックアップ制御部116は、ファイル名を指定した後、コピープロセスを起動する(ステップ1103)。
【0054】
このようにして起動されたコピープロセス14は、以降、他の入力プロセス10と同様にして出力プロセスが出力したデータを引き継ぎ、そのデータを外部記憶装置4に格納していく。つまり、コピープロセス14は、起動された後、指定されたデータ入力のためのファイル名を用いてオープン命令を発行し、オープン処理制御部111の制御によりファイルをオープンする。そして、データの読み込み要求を発行し、リード処理制御部114の制御によりバッファ13からデータを読み込み、そのデータを順次外部記憶装置4に格納する。全てのデータについてバックアップ処理を終えると、クローズ命令を発行してクローズ処理制御部112の制御によりファイルをクローズする。
【0055】
コピープロセスは、一度起動が完了すると、後は特別な処理を伴うことなくバックアップ処理を実行できる。バックアップ処理の終了の確認は必ずしも必要ではないが、もし確認したい場合には、いずれかのプロセスのクローズ処理時に確認するようにすればよい。
【0056】
以上説明した実施例によれば、出力プロセスにより出力されたデータを複数の入力プロセスで効率的に引き継ぐことができる。また、出力プロセスが出力したプロセス間で引き継がれるデータの外部記憶装置への保存のための処理を、入力プロセスと同様にして実行されるコピープロセスにより出力プロセス、及び入力プロセスと並行して実行することができる。
【0057】
上述した実施例では、ライト処理制御部113、及びリード処理制御部114の処理により、待ち状態に設定された各プロセスの待ち状態の解除は、バッファ一周分の処理を実行できることが保証された時点で行われる。このような各プロセスの待ち状態の解除の方法に対し、例えば、出力プロセスが待ち状態となっている場合に、いずれかの入力プロセスが出力プロセスに追い着いた時点で出力プロセスの待ち状態を解除することも考えられる。しかし、このような制御では、データの読み込みがより遅い入力プロセスがあると、待ち状態を解除された出力プロセスは、たいして処理を進めないうちに再び待ち状態とならざるを得ない状態に陥ることがある。このような場合には、待ち状態の設定、解除の回数が増大し、全体の処理時間が長引いてしまう。上述した実施例では、すべてのプロセスは、待ち状態が解除された後、少なくとも、バッファ一周分のデータを処理する間は再び待ち状態になることなく処理を実行できる。この結果、待ち状態の設定及びその解除の回数を不要に増大させることがなく、全体の処理時間に占める待ち状態の設定、解除に要する処理時間の割合いをある程度抑えることができ、効率の良いデータ引き継ぎを行うことができる。
【0058】
また、上述した実施例では、バックアップ処理を行うコピープロセスを、バックアップ制御部により起動しているが、ユーザがバックアッププロセスを定義して、ジョブ制御文を作成、投入し、コピープロセスを入力プロセスの一つとして実行することにより、バックアップ制御部を必要とせずに同様のバックアップ処理を実現することができる。ただし、この場合には、ユーザの手間が増えるだけではなく、イニシエータ等計算機の資源も余分に必要となる。
【0059】
上述した実施例によれば、各プロセスの待合せ状態の設定、解除は、バッファ単位で各プロセスの入出力を待ち合わせながら行なわれる。このため、他の入力プロセスに比べて、単位時間当たりに読み込むデータの量が少ない入力プロセスが存在する場合には、他の全ての入力プロセスの処理の速度がこの入力プロセスの処理の速度に影響され極端に遅くなることがある。バッファの容量が比較的少ない場合は、このようなことはあまり問題とならない。しかし、バッファの容量がある程度以上(以下、このようなバッファを大容量バッファという)になると、他のプロセスの待ち状態が必要以上に長引くことになる。このため、こうした状態が多発すると、各プロセスを並行して実行することによる処理時間の短縮という効果を十分に発揮できなくなる恐れがある。そこで、以下では、このような問題を考慮した第2の実施例について説明する。
【0060】
第2の実施例におけるシステム構成等は、基本的には先に説明した第1の実施例と同様であるので、以下では、第1の実施例と異なる部分についてのみ説明し、第1の実施例と重複する部分については説明を省略する。
【0061】
本実施例は、ライト処理制御部113、リード処理制御部114の処理の中で、待ち状態が設定された出力プロセス、入力プロセスの待ち状態を解除する際の条件、即ち、図6のステップ608、及び図7のステップ707における処理が第1の実施例と異なっている。
【0062】
本実施例では、図6のステップ608において、待ち状態の解除の判定を行なう入力プロセス10により読まれていないデータを持つバッファ13のブロックの数が、予め定めた待合せ基準ブロック数に達したかどうか判定する。未入力データを持つブロックの数は、出力ブロック番号エリア1210の値から判定を行なっている入力プロセスに対応する入力プロセス情報テーブル1203の入力ブロック番号エリア1215の値を引くことにより求めることができる。そして、未入力データを持つブロックの数が待合せ基準ブロック数に達している場合に、ステップ609において、その入力プロセス10の待ち状態を解除する。ここで、待合せ基準ブロック数とは、一度待ち状態を解除されたプロセスが次に待ち状態となるまでに処理できることを保証するブロック数のことである。この待合せ基準ブロック数は、オペレーティングシステムが決定してもよいし、ユーザが任意の方法で定めたものを指定するようにしてもよい。また、待合せ基準ブロック数としては、例えば、第1の実施例で述べた出力プロセス、入力プロセスそれぞれの入出力処理頻度から求められる最適ブロック数を利用することができる。
【0063】
同様にして、図7に示すステップ707では、全ての入力プロセスによりデータが読み込まれたブロックの数が待合せ基準ブロック数に達したか否かを判定する。ここでの判定は、具体的には、出力回数エリア1211の値から各入力プロセス状態テーブル1203の入力回数エリア1216の値の中で最も小さな値を引いた値と、バッファブロック数エリア1206の値から待合せ基準ブロック数を引いた値とを比較して行われる。この判定の結果、両者が等しくなっていればステップ708において、出力プロセスの待ち状態が解除される。
【0064】
以上のようにして各プロセスの待合せの状態を制御することにより、各プロセスは、少なくとも待合せ基準ブロック数だけのデータを処理する間は、待ち状態となることなく処理を続行できる。また、他のプロセスに比べて、単位時間当たりのデータの読み込み回数(読み込み頻度)の少ない入力プロセスが存在したとしても、そのプロセスが、未入力のデータをすべて読み込むまで他のプロセスが待合せ状態に置かれずに待合せ状態が解除されるので、出力プロセス、及び単位時間当たりの入力処理回数の多い入力プロセスの処理を先行させて実行することができ、大容量のバッファをより効率よく利用することができる。
【0065】
例として、バッファのブロック数が1,000ブロックである場合を考えてみる。複数入力プロセスのデータの読み込み頻度に違いがあると、読み込み頻度の高い入力プロセスは約1000ブロック分だけ、最も読み込み頻度の低い入力プロセスよりも実行を先行できる。しかし、第1の実施例のように待合せの設定、解除を制御すると、このようなプロセスは、読み込み頻度の低いプロセスが1000ブロックのデータを読み込むまで待ち状態を解除されないことになる。これに対し、待合せ基準ブロック数を50ブロックと定め、本実施例の方法を適用すると、読み込み頻度の高いプロセスは読み込み頻度の低いプロセスよりも約1000ブロック分処理を先行でき、かつ、待ち状態となってもそのプロセスが50ブロック分データの読み込み処理を行なった時点でその待ち状態が解除されることになり、長い間待ち状態に置かれることを防ぐことができる。
【0066】
なお、本実施例では、待合せ基準ブロック数は、処理開始前に予め定め定めておき、その後その値を固定して使用するが、処理の実行中における出力プロセスによるデータ出力の頻度、入力プロセスによるデータ読み込みの頻度に応じて適宜変化させるようにすることもできる。
【0067】
次に、本発明の第3の実施例について説明する。
【0068】
以上説明した第2の実施例では、各プロセスの単位時間当たりのデータの読み込み頻度の差が大きい場合に、大容量バッファを有効に利用し、読み込み頻度の高いプロセスの実行を先行させることを可能としたものである。しかし、各プロセスのデータの読み込み頻度に大きな差がないときは、処理実行時間にほとんど差が生じない。従って、不用意に大容量のバッファを設けることは意味がないばかりではなく、記憶装置を無駄に使用してしまう可能性がある。また、各プロセスによるデータの読み込み頻度は、実際に処理を行なわなければ分からない場合も多く、このような場合には、プロセスの待ち状態の設定、解除にどのような方法を用いればよいかを予め決めておくことはできない。そこで、本実施例では、各プロセスの処理の状況により動的にバッファを拡張すると共に、拡張したバッファの大きさに応じてプロセスの待合せの設定、解除の制御方法を切り替えるようにする。なお、本実施例においては、ライト制御部113、リード制御部114、及びバッファ管理部115による処理が第1、第2の実施例と異なるのみであるので、以下、これらによる処理について詳細に説明し、他の部分については第1、及び第2の実施例についての説明を流用することができるので、ここでは説明を省略する。
【0069】
図9は、本実施例において、ライト処理制御部113がファイルへの書き込み要求を受け取った際に実行する処理のフローチャートである。図9において、第1の実施例で図6により説明したライト処理制御部の処理と共通する部分については、図6と同一の参照番号が付されている。
【0070】
本実施例では、ステップ607において入力待ちフラグ1218がオンである入力プロセス10が存在したとき、バッファブロック数エリア1206に設定されている値が、待合せ基準ブロック数より小さいかどうか判定する(ステップ801)。ステップ801の条件を満足する場合は、第1の実施例におけるステップ608と同様に、出力ブロック番号エリア1210と入力ブロック番号エリア1215を参照して、入力プロセス10の未入力データの数がバッファ一周分存在するか否か判定する(ステップ802)。ステップ801の条件が満足されていない場合には、第2の実施例と同様に、待ち状態の解除の判定を行なう入力プロセス10により読まれていないデータを持つバッファ13のブロックの数が、予め定めた待合せ基準ブロック数に達したかどうか判定する(ステップ803)。そして、ステップ802、またはステップ803の条件を満たす入力プロセスに対し、ステップ609でその待ち状態を解除する。その後、ライト処理制御部113は、必要に応じてバッファ13を拡張するために、バッファ管理部115へ制御を渡す(ステップ804)。
【0071】
図10は、バッファ管理部115の処理の詳細は示すフローチャートである。
【0072】
バッファ管理部115は、ライト処理制御部113からコールされると、出力プロセス9が次にデータを出力するバッファ13のブロックが先頭ブロックかどうか、すなわち、出力ブロック番号エリア1210の値が“1”であるか判定する(ステップ1001)。バッファ管理部115は、ステップ1001での判定の結果、条件が満たされている場合のみ、以下の処理によりバッファ13の拡張を行ない、条件が満たされていなければそのまま処理を終了する。従って、バッファ13の拡張は、現バッファ13の最終ブロックにデータを書き込んだ直後にのみ実行されることになる。バッファ13を拡張するタイミングをこのように限定する理由は、以下の通りである。すなわち、入力プロセスが複数存在する場合は、各プロセスがそれぞれ異なるブロックからデータの読み込みを行なっていることになる。このため、任意のタイミングでバッファの拡張を行うと、出力プロセスにより既にバッファ上出力された連続したデータとデータの間に新しいデータ(あるいは、処理とは無関係のデータ)が挿入されてしまうなど、データの順序性が不正確となってしまう。このような問題を生じさせないよう本実施例では、出力プロセスによるデータの書き込みが行われるバッファが最終ブロックから先頭ブロックへとラップアラウンドするタイミングに合わせてバッファ13の拡張を実施する。なお、この問題を解決する他の方法として、バッファ13がすべて空き状態となったとき、即ち、すべての入力プロセスのデータ読み込み処理が出力処理のデータ出力処理に追い着き、バッファ13上にいずれかの入力プロセスにより未入力となっているデータが存在しなくなったときに、バッファ13を拡張する方法がある。ただし、この方法では、待合せの制御を待合せ基準ブロック数に基づいて実行した場合に、すべての入力プロセス10が出力プロセス9に追い着き、バッファ13がすべて空き状態となる場合があることは保証できず、バッファの拡張のタイミングを得られるかどうか分からないという問題がある。
【0073】
ステップ1001において、出力ブロック番号エリア1210の値が“1”であった場合は、続いて、バッファ13を拡張するか否かを判定する(ステップ1202)。バッファ13を拡張するか否かの判断に用いる基準としては、様々なものが考えられるが、本実施例では、バッファ13のブロック数が待合せ基準ブロック数より小さい段階と、それ以上の段階とに分けて、それぞれ次に示す第一の基準、第二の基準を適用する。
【0074】
バッファ13のブロック数が待合せ基準ブロック数より小さい段階では、第一の基準として、待合せ実行頻度を用いる。例えば、データの読み込みが最も遅れている入力プロセス、データの読み込みが最も進んでいる入力プロセス、及び出力プロセスの入出力処理の頻度、待合せの発生回数をモニタする。そして、これらの情報を元にして待ち状態の発生頻度を求め、この値が予め定めたしきい値を超えた場合に、バッファの拡張を決定する。
【0075】
また、バッファ13のブロック数が待合せ基準ブロック数を超えた場合は、第二の基準として、ある入力プロセスの影響により、他の入力プロセスの処理が遅らされている程度を用いる。例えば、出力プロセス9が単位時間当たりのデータの読み込み頻度の少ない入力プロセス10に追い着いてしまうといった状態が発生する回数を記録しておく。そして、この回数が予め決めておいたしきい値を越えた場合にバッファ13の拡張を決定する。
【0076】
ステップ1002において、バッファ13の拡張の必要がないと判断されたときは、バッファ管理部115はそのまま処理を終了する。一方、バッファ13の拡張が必要であると判定された場合は、、次に、拡張するバッファの大きさを決定する(ステップ1003)。このとき、1回あたりの拡張量としては、あらかじめオペレーティングシステムまたはユーザによって定められたバッファ上限値まで拡張してしまう方法、または、バッファのブロック数を所定の割合、あるいは所定の大きさづつ順次拡張していく方法などが考えられる。バッファ13の拡張量が求められたら、続いて、計算された拡張量だけの拡張を行なうことができるかどうか、即ち、計算された拡張量に従ってバッファ13を拡張した場合、バッファの大きさが上限値を越えないかどうか判定する(ステップ1004)。拡張後のバッファ13の大きさが上限値を越えてしまう場合は、その上限値を拡張後のバッファの大きさとすべく、拡張量を補正する(ステップ1005)。その後、決定した拡張量に従ってバッファ13を拡張する(ステップ1006)。
【0077】
最後に、データ引き継ぎ情報記録領域12内の情報を更新する。具体的には、共通情報テーブル1201のバッファブロック数エリア1206に拡張後のブロック数を設定し、出力プロセス情報テーブル1202の出力ブロック番号エリア1210に[拡張前のバッファブロック数+1]を格納する。これにより出力プロセスは、引き続き拡張した部分に対してデータの書き込みを続ける。
【0078】
なお、拡張処理を実行している最中でも、入力プロセス側はそれを意識することなく通常の処理を続行していてよい。拡張処理実行中は出力プロセスの出力回数が変更されないので、入力プロセス群は出力プロセスに追い付いてもその直前で待ち状態となり、データの順序性は保証できる。
【0079】
図11は、本実施例において、リード制御部114が入力プロセス10よりファイルへの読み込み要求を受け取った際に実行する処理のフローチャートである。図11において、第1の実施例で図7により説明したライト処理制御部の処理と共通する部分については、図7と同一の参照番号が付されている。
【0080】
本実施例では、リード処理制御部113は、ステップ706において出力プロセス9の待ち状態を検出すると、共通情報テーブル1201のバッファブロック数エリア1206を参照して現在のバッファ13のブロック数が待ち合わせ基準ブロック数より小さいか判定する(ステップ901)。バッファ13のブロック数が待合せ基準ブロック数より小さければ、第1の実施例における図7のステップ707と同様に、バッファ13の各ブロックにある古いデータが、全ての入力プロセスから読み込まれているか否か判定する(ステップ902)。一方、バッファ13のブロック数が待合せ基準ブロック数以上であれば、第2の実施例と同様にして、全ての入力プロセスによりデータが読み込まれたブロックの数が待合せ基準ブロック数に達したか否かを判定する(ステップ903)。ステップ902またはステップ903の条件が満たされる場合には、ステップ708において出力プロセス9の待ち状態を解除する。
【0081】
以上説明したように、本実施例によれば、入力プロセスが複数存在する場合に、入力プロセス、出力プロセスの処理の特性に応じて適切な大きさのバッファを利用し、計算機資源を無駄に利用することなく処理を行なうことができる。また、バッファの大きさにあわせて各プロセスの待ち状態の設定、解除を行なうので、待ち状態の設定、解除に伴う処理のオーバヘッドの増加を抑え、各プロセスの並行処理を効率的に行なうことができる。
【0082】
【発明の効果】
本発明によれば、ある1つのプロセスが生成したデータを複数のプロセスが参照するようなプロセス間でのデータの引き継ぎ処理が行われる計算機システムにおいて、各プロセスにおけるデータ入出力の頻度の相違に影響されることのなくプロセス間でのデータの引継ぎを行なうことが可能となり、システム全体としての処理をより高速化することができる。
【図面の簡単な説明】
【図1】一実施例における計算機システムのブロック図である。
【図2】ジョブ制御文の構成図である。
【図3】データ引き継ぎ領域の構成図である。
【図4】オープン処理制御部の処理フローチャートである。
【図5】クローズ処理制御部の処理フローチャートである。
【図6】第1の実施例におけるライト処理制御部の処理フローチャートである。
【図7】第1の実施例におけるリード処理制御部の処理フローチャートである。
【図8】バックアップ制御部の処理フローチャートである。
【図9】第3の実施例におけるライト処理制御部の処理フローチャートである。
【図10】第3の実施例におけるリード処理制御部の処理フローチャートである。
【図11】バッファ管理部の処理フローチャートである。
【符号の説明】
1…計算機システム、2…中央演算装置、3…主記憶装置、4…外部記憶装置、5…ジョブ制御文、6…ジョブ受付部、7…ジョブ制御文解析部、8…ジョブ起動部、9…出力プロセス、10…入力プロセス、11…データ引き継ぎ制御部、12…データ引き継ぎ情報記録領域、13…バッファ、14…コピープロセス。
Claims (9)
- あるプロセスによる処理結果であるデータを他のプロセスが引き継いで処理することにより一連の処理が行われる計算機システムにおいて、
処理結果であるデータを出力する第1のプロセス及び該出力プロセスが出力したデータを引き継いで処理を行なう複数の第2のプロセスのいずれからもアクセス可能なバッファと、
前記第1のプロセスから発行された出力命令に応じて、当該出力命令により指定されるデータを、前記バッファをラップアラウンドに用いて順次書き込む手段と、
前記第2のプロセスの各々から発行された入力命令に応じて、前記バッファに書き込まれたデータを読み出し、前記第1のプロセスからの出力順に前記入力命令を発行した第2のプロセスに読み込ませる手段と、
前記書き込み手段がデータを書き込もうとする前記バッファの領域に、前記第2のプロセスのいずれかが読み込みを行なっていないデータが保持されている場合に、前記第1のプロセスを待ち状態にする第1の待合せ設定手段と、
前記読み込ませる手段がデータを読み込もうとする前記バッファの領域に、前記書き込む手段により書き込まれたデータが存在しない場合に、前記第2のプロセスを待ち状態にする第2の待合せ設定手段と、
前記第1のプロセスが待ち状態か否か判定し、前記第1のプロセスが待ち状態にあると判断したときに、前記第2のプロセスによるデータの読み込み状況を調べ、前記読み込み状況が予め定められた状態となったときに前記第1のプロセスの待ち状態を解除する第1の待合せ解除手段と、
前記第2のプロセスの各々について待ち状態か否か判定し、待ち状態にある第2のプロセス存在すると判断したときに、前記第1のプロセスによるデータの書き込み状況を調べ、前記書き込み状況が予め定められた状態となったときに前記第2のプロセスの待ち状態を解除する第2の待合せ解除手段とを有することを特徴とする計算機システム。 - 請求項1記載の計算機システムにおいて、前記第一のプロセスが発行した出力命令に応じて、前記バッファに書き込まれたデータを、前記バッファに書き込まれた順にしたがって、外部記憶装置に出力する手段を有することを特徴とする計算機システム。
- 請求項1記載の計算機システムにおいて、前記複数の第二のプロセスの中の少なくとも一つのプロセスは、前記バッファに書き込まれた順序に従って、前記バッファに書き込まれたデータを外部記憶装置に出力する処理を実行するプロセスであることを特徴とする計算機システム。
- 請求項1記載の計算機システムにおいて、前記第1のプロセスで実行されるプログラムと、前記複数の第2のプロセスの各々で実行されるプログラムと、前記第1のプロセスと前記第2のプロセスとの間で受け渡すデータの識別子とが、ジョブ制御文で指定されることを特徴とする計算機システム。
- 請求項1記載の計算機システムにおいて、前記第1のプロセスで実行されるプログラムと、前記複数の第2のプロセスで実行されるプログラムと、前記第1のプロセスと前記第2のプロセスとの間で受け渡されるデータの識別子と、前記データが出力される外部記憶装置の識別子とが、ジョブ制御文で指定されることを特徴とする計算機システム。
- あるプロセスによる処理結果であるデータを他のプロセスが引き継いで処理することにより一連の処理が行われる計算機システムにおけるデータ引継ぎ方法において、
処理結果であるデータを出力する第1のプロセス及び該出力プロセスが出力したデータを引き継いで処理を行なう複数の第2のプロセスのいずれからもアクセス可能なバッファを設け、
前記第1のプロセスから発行された出力命令に応じて、当該出力命令により指定されるデータを、前記バッファをラップアラウンドに用いて順次書き込み、
前記第2のプロセスの各々から発行された入力命令に応じて、前記バッファに書き込まれたデータを読み出し、前記第1のプロセスからの出力順に前記入力命令を発行した第2のプロセスに読み込ませ、
前記第1のプロセスがデータを書き込もうとする前記バッファの領域に、前記第2のプロセスのいずれかが読み込みを行なっていないデータが保持されている場合に、前記第1のプロセスを待ち状態にし、
前記複数の第2のプロセスがデータを読み込もうとする前記バッファの領域に、前記第1のプロセスにより書き込まれたデータが存在しない場合に、前記第2のプロセスを待ち状態にし、
前記第1のプロセスが待ち状態か否か判定し、前記第1のプロセスが待ち状態にあると判断したときに、前記第2のプロセスによるデータの読み込み状況を調べ、前記読み込み状況が予め定められた状態となったときに前記第1のプロセスの待ち状態を解除し、
前記第2のプロセスの各々について待ち状態か否か判定し、待ち状態にある第2のプロセス存在すると判断したときに、前記第1のプロセスによるデータの書き込み状況を調べ、前記書き込み状況が予め定められた状態となったときに前記第2のプロセスの待ち状態を解除することを特徴とする計算機システムにおけるデータ転送方法。 - 請求項6記載のデータ転送方法において、前記第一のプロセスが発行した出力命令に応じて、前記バッファに書き込まれたデータを、前記バッファに書き込まれた順にしたがって、外部記憶装置に出力することを特徴とするデータ転送方法。
- 請求項6記載のデータ転送方法において、前記複数の第二のプロセスの中の少なくとも一つのプロセスは、前記バッファに書き込まれた順序に従って、前記バッファに書き込まれたデータを外部記憶装置に出力する処理を実行するプロセスであることを特徴とするデータ転送方法。
- 請求項6記載の計算機システムにおいて、前記第1のプロセスで実行されるプログラムと、前記複数の第2のプロセスの各々で実行されるプログラムと、前記第1のプロセスと前記第2のプロセスとの間で受け渡すデータの識別子とが、ジョブ制御文で指定されることを特徴とするデータ転送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4832494A JP3598528B2 (ja) | 1994-03-18 | 1994-03-18 | データ引き継ぎ方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4832494A JP3598528B2 (ja) | 1994-03-18 | 1994-03-18 | データ引き継ぎ方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07262024A JPH07262024A (ja) | 1995-10-13 |
JP3598528B2 true JP3598528B2 (ja) | 2004-12-08 |
Family
ID=12800241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4832494A Expired - Fee Related JP3598528B2 (ja) | 1994-03-18 | 1994-03-18 | データ引き継ぎ方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3598528B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5371613B2 (ja) * | 2009-08-03 | 2013-12-18 | 三菱電機株式会社 | サービス連携装置 |
JP5446746B2 (ja) * | 2009-11-05 | 2014-03-19 | 日本電気株式会社 | 仮想コンピュータシステム、仮想コンピュータ管理方法および管理プログラム |
-
1994
- 1994-03-18 JP JP4832494A patent/JP3598528B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH07262024A (ja) | 1995-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7472228B2 (en) | Read-copy update method | |
US7496721B1 (en) | Packet processor memory interface with late order binding | |
US9177027B2 (en) | Database management system and method | |
US6006247A (en) | Method and system for scheduling threads and handling exceptions within a multiprocessor data processing system | |
US20080040720A1 (en) | Efficiently boosting priority of read-copy update readers in a real-time data processing system | |
JPH0778094A (ja) | 計算機システムのアプリケーションプログラム障害発生時の制御方法 | |
JP2003044296A5 (ja) | ||
US6636951B1 (en) | Data storage system, data relocation method and recording medium | |
JP3034873B2 (ja) | 情報処理装置 | |
US5968168A (en) | Scheduler reducing cache failures after check points in a computer system having check-point restart function | |
JP4304974B2 (ja) | キャッシュメモリのデータ管理方法、及び情報処理装置 | |
JP3598528B2 (ja) | データ引き継ぎ方法 | |
JPH0798663A (ja) | 非同期i/o制御方式 | |
JP2003241981A (ja) | 計算機間のデータ引き継ぎ方法 | |
JP3460265B2 (ja) | 計算機間のデータ引き継ぎ方法 | |
US20040210732A1 (en) | Read Priority caching system and method | |
JP2713218B2 (ja) | チェックポイント/リスタート処理方式 | |
JP3184149B2 (ja) | 非同期データ更新方法 | |
JP2011248469A (ja) | 情報処理装置および情報処理方法 | |
JP2526728B2 (ja) | ディスクキャッシュ自動利用方式 | |
JPH01126738A (ja) | 多重ジョブの実行におけるデータセット競合制御方式 | |
JPH0346033A (ja) | ジヨブ間データ転送制御方法 | |
JP2001147841A (ja) | コンピュータ・システム、ダンプ採取方法、及び記録媒体 | |
JPH10161915A (ja) | 後発ジョブ優先の排他制御を実現するデータ引き継ぎ方法 | |
JPH076045A (ja) | 多重処理システムにおけるメモリ管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040601 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040730 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040824 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040906 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070924 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080924 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080924 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090924 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090924 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100924 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100924 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110924 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120924 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120924 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130924 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |