(57)【特許請求の範囲】
【請求項１】
情報処理システムにおけるファイルの排他制御方法において、
１つないし複数の前記ファイルを他のジョブと排他的に入出力する第一のジョブが終了するときに排他状態が解除される第一の排他情報を設定するステップと、
前記第一の排他情報を一意に識別する排他情報識別子と、前記第一のジョブを一意に識別するジョブ識別子と、を含む排他情報管理情報を記憶するステップと、
前記ファイルを一意に識別するファイル識別子と前記ジョブ識別子とを含む第二の排他情報を記憶するステップと、
前記第一の排他情報が排他解除状態である場合に、前記排他情報管理情報に基づき、前記第一の排他情報を一意に識別する排他情報識別子に対応して記憶されたジョブ識別子を求めるステップと、
前記求められたジョブ識別子を含む前記第二の排他情報を消去し、該ジョブ識別子を含む前記排他情報管理情報を消去するステップと、
を含むことを特徴とするファイルの排他制御方法。
【請求項２】
請求項１記載の排他制御方法において、
前記第一の排他情報がセマフォ値であり、前記排他情報識別子がセマフォ番号であることを特徴とするファイルの排他制御方法。
【請求項３】
請求項１記載の排他制御方法において、
１つないし複数の前記ファイルを前記第一のジョブと排他的に入出力する第二のジョブを一意に識別する前記ジョブ識別子とを含む排他情報管理情報を記憶するステップと、
すべての前記ファイルに対して、前記ファイルを一意に識別するファイル識別子を含む前記第二の排他情報が記憶されているか判別するステップと、
前記ファイルに対する前記第二の排他情報が１つでも記憶されている場合に、前記第一のジョブに対して設定された前記第一の排他情報の排他状態解除を要求するステップと、
を含むことを特徴とするファイルの排他制御方法。
【請求項４】
請求項１記載の排他制御方法において、
前記第一のジョブが終了するときに、
まず、前記第一のジョブを一意に識別する前記ジョブ識別子を含むすべての第二の排他情報を消去し、
続いて、前記第一のジョブを一意に識別する前記ジョブ識別子を含む排他情報管理情報を消去し、前記第一のジョブに対して設定された第一の排他情報を解除するステップと、
を含むことを特徴とするファイルの排他制御方法。
【請求項５】
請求項１記載の排他制御方法において、
すべての前記第二の排他情報を記憶する前に、前記第二の排他情報の領域を更新することを記憶するフラグが設定されているか否かを判別するステップと、
前記フラグが設定されていれば、前記第二の排他情報に矛盾がないかを検証し、矛盾があれば該矛盾を解消した後、前記フラグの設定を解除するステップと、
を含むことを特徴とするファイルの排他制御方法。
【請求項６】
ファイルの排他制御を行なう情報処理システムにおいて、
１つないし複数の前記ファイルを他のジョブと排他的に入出力する第一のジョブが終了するときに排他状態が解除される第一の排他情報を設定する第一のテーブルと、
前記第一の排他情報を一意に識別する排他情報識別子と、前記第一のジョブを一意に識別するジョブ識別子と、を含む排他情報管理情報を記憶する第二のテーブルと、
前記ファイルを一意に識別するファイル識別子と前記ジョブ識別子とを含む第二の排他情報を記憶する第三のテーブルと、
前記第一の排他情報が排他解除状態である場合に、前記排他情報管理情報に基づき、前記第一の排他情報を一意に識別する排他情報識別子に対応して記憶されたジョブ識別子を求める算出部と、
前記算出部によって求められたジョブ識別子を含む前記第二の排他情報を消去し、該ジョブ識別子を含む前記排他情報管理情報を消去する消去部と、
を含むことを特徴とする情報処理システム。
【請求項７】
請求項６記載の情報処理システムにおいて、
前記第一の排他情報がセマフォ値であり、前記排他情報識別子がセマフォ番号であることを特徴とする情報処理システム。
【請求項８】
請求項６記載の情報処理システムにおいて、
前記第２のテーブルは、１つないし複数の前記ファイルを前記第一のジョブと排他的に入出力する第二のジョブを一意に識別する前記ジョブ識別子とを含む排他情報管理情報を記憶し、
すべての前記ファイルに対して、前記ファイルを一意に識別するファイル識別子を含む前記第二の排他情報が記憶されているか判別する判別部と、
前記ファイルに対する前記第二の排他情報が１つでも記憶されている場合に、前記第一のジョブに対して設定された前記第一の排他情報の排他状態解除を要求する要求部と、
を含むことを特徴とする情報処理システム。
【請求項９】
請求項６記載の情報処理システムにおいて、
前記第一のジョブが終了するときに、前記第一のジョブを一意に識別する前記ジョブ識別子を含むすべての第二の排他情報を消去する第二の排他情報消去部と、
前記第一のジョブを一意に識別する前記ジョブ識別子を含む排他情報管理情報を消去し、前記第一のジョブに対して設定された第一の排他情報を解除する解除部と、
を含むことを特徴とする情報処理システム。
【請求項１０】
請求項６記載の情報処理システムにおいて、
すべての前記第二の排他情報を記憶する前に、前記第二の排他情報の領域を更新することを記憶するフラグが設定されているか否かを判別するフラグ判別部と、
前記フラグが設定されていれば、前記第二の排他情報に矛盾がないかを検証し、矛盾があれば該矛盾を解消した後、前記フラグの設定を解除するフラグ解除部と、
を含むことを特徴とする情報処理システム。
【請求項１１】
ファイルの排他制御を行う情報処理システムにおけるコンピュータに、
１つないし複数の前記ファイルを他のジョブと排他的に入出力する第一のジョブが終了するときに排他状態が解除される第一の排他情報を設定するステップと、
前記第一の排他情報を一意に識別する排他情報識別子と、前記第一のジョブを一意に識別するジョブ識別子と、を含む排他情報管理情報を記憶するステップと、
前記ファイルを一意に識別するファイル識別子と前記ジョブ識別子とを含む第二の排他情報を記憶するステップと、
前記第一の排他情報が排他解除状態である場合に、前記排他情報管理情報に基づき、前記第一の排他情報を一意に識別する排他情報識別子に対応して記憶されたジョブ識別子を求めるステップと、
前記求めたジョブ識別子を含む前記第二の排他情報を消去し、該ジョブ識別子を含む前記排他情報管理情報を消去するステップと、
を実行させることを特徴とする排他制御プログラム。
【請求項１２】
前記第一の排他情報がセマフォ値であり、前記排他情報識別子がセマフォ番号であることを特徴とする請求項１１記載の排他制御プログラム。
【請求項１３】
前記コンピュータに、
１つないし複数の前記ファイルを前記第一のジョブと排他的に入出力する第二のジョブを一意に識別する前記ジョブ識別子とを含む排他情報管理情報を記憶するステップと、
すべての前記ファイルに対して、前記ファイルを一意に識別するファイル識別子を含む前記第二の排他情報が記憶されているか判別するステップと、
前記ファイルに対する前記第二の排他情報が１つでも記憶されている場合に、前記第一のジョブに対して設定された前記第一の排他情報の排他状態解除を要求するステップと、
を実行させることを特徴とする請求項１１記載の排他制御プログラム。
【請求項１４】
前記コンピュータに、
前記第一のジョブが終了するときに、前記第一のジョブを一意に識別する前記ジョブ識別子を含むすべての第二の排他情報を消去し、該第二の排他情報を消去する処理の後に、前記第一のジョブを一意に識別する前記ジョブ識別子を含む排他情報管理情報を消去し、前記第一のジョブに対して設定された第一の排他情報を解除するステップ
を実行させることを特徴とする請求項１１記載の排他制御プログラム。
【請求項１５】
前記コンピュータに、
すべての前記第二の排他情報を記憶する前に、前記第二の排他情報の領域を更新することを記憶するフラグが設定されているか否かを判別するステップと、
前記フラグが設定されていれば、前記第二の排他情報に矛盾がないかを検証し、矛盾があれば該矛盾を解消した後、前記フラグの設定を解除するステップと、
を実行させることを特徴とする請求項１１記載の排他制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理システムにおけるファイルの排他制御方法に係り、特に、ジョブ間で複数のファイルを同時に排他する情報処理システム及びそのファイルのジョブ間排他制御方法に適用しても好適なものである。
【背景技術】
【０００２】
従来の排他制御方法では、ジョブ間でファイルを排他する場合、オペレーティングシステムが提供する排他制御機構を使用して、ファイル名を指定してオペレーティングシステムに排他制御要求を行い、ファイルを排他制御機構の制御単位である資源として排他制御を行っていた。例えば、特許文献１記載の方法では、ＥＮＱマクロが排他制御機構であり、ファイルであるデータセットの名称をＥＮＱ資源名としており、１つないし複数のデータセット名を指定してＥＮＱマクロを発行することで、ジョブ間でファイルの排他制御を行う。ＥＮＱと同様の排他制御機構としてセマフォがある。
【特許文献１】特開平１−９５４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の排他制御方法では、ファイルを資源としてオペレーティングシステムの排他制御機構の制御単位とするため、デッドロックを起こさずに複数のファイルを排他するには、すべてのファイルを同時に指定して、オペレーティングシステムの排他制御機構が提供するインタフェースを呼び出す必要がある。
【０００４】
しかしながら、オペレーティングシステムの排他制御機構が提供するインタフェースの中には、全体の資源の数や同時指定可能な資源の数に制限があるものがある。例えば、セマフォでは、これらはインタフェース上では“６５５３５”に制限される。セマフォ数に比例して排他制御のための管理テーブルの領域を消費するため、オペレーティングの仕様や初期設定指定により、実際はこれらよりも少ない値、例えば全体の資源の数が“４０９６”、同時指定可能な資源数が“１０２４”に制限される。また、初期設定指定の場合、設定変更には再起動を要するオペレーティングもある。
【０００５】
ジョブ内プログラムが入出力するファイル数は、ジョブによって数がまちまちであり、なかにはファイル数が“１００”近くに及ぶことがある。同時に実行するジョブの数が多くなると、ジョブのプログラムが入出力するファイルの数も多くなり、セマフォ数の上限を超えてしまう可能性がある。
【０００６】
このためオペレーティングシステムの排他制御機構を使わずに排他制御を行った場合、主記憶装置上の領域にファイルの排他状態を記憶する必要があるが、ジョブが異常終了した場合に、排他状態が残ってしまうという問題がある。
【０００７】
本発明の目的は、以上の点を考慮してなされたもので、ジョブが異常終了しても排他状態を削除可能な信頼性と、排他制御対象のファイル数がオペレーティングシステムが提供する排他制御機構の制限を受けないスケーラビリティを両立可能なジョブ間のファイル排他制御を行なうことができる情報処理システム、ファイルの排他制御方法、及び排他制御プログラムを提供することである。
【課題を解決するための手段】
【０００８】
上記目的達成のため、本発明は、ファイルの排他制御を行なう情報処理システムにおいて、１つないし複数の前記ファイルを他のジョブと排他的に入出力する第一のジョブが終了するときに排他状態が解除される第一の排他情報を設定し、前記第一の排他情報を一意に識別する排他情報識別子と前記第一のジョブを一意に識別するジョブ識別子とを含む排他情報管理情報を記憶し、前記ファイルを一意に識別するファイル識別子と前記ジョブ識別子とを含む第二の排他情報を記憶し、前記第一の排他情報が排他解除状態である場合に、前記排他情報管理情報に基づき、前記第一の排他情報を一意に識別する排他情報識別子に対応して記憶されたジョブ識別子を求め、前記求められたジョブ識別子を含む前記第二の排他情報を消去し、該ジョブ識別子を含む前記排他情報管理情報を消去することを含むものである。
【発明の効果】
【０００９】
本発明によれば、排他制御対象のファイル数が、オペレーティングシステムが提供する排他制御機構の制限の影響を受けず、ジョブが異常終了しても排他状態を確実に削除することができる情報処理システム、ファイルの排他制御方法、及び排他制御プログラムを提供できる。
【発明を実施するための最良の形態】
【００１０】
以下、各図を参照しながら本発明の実施例について説明する。なお、以下の各実施形態は、特許請求の範囲を限定するものではなく、また各実施形態で説明されている特徴の全てが発明の解決手段に必須であるとは限らない。
【００１１】
（第１の実施形態）
以下、本発明の第１の実施形態を、図面を参照して詳細に説明する。図１は、本発明の情報処理システムが適用される計算機システムのハードウェア構成を示した図である。計算機システム１０は、計算機１及び記憶装置２を含んで構成されている。
【００１２】
計算機１には、本発明のジョブ管理プログラム１０００や、オペレーティングシステム（Operating System)２０００（以下、ＯＳ２０００と記述する)の命令コードを格納した主記憶装置１１、ジョブ管理プログラム１０００やＯＳ２０００の命令コードをロードして解釈実行するＣＰＵ（Central Processing Unit）１２、入出力インタフェース１３が含まれる。
【００１３】
また、計算機１には、ジョブ管理プログラム１０００の設定ファイル２２や、ジョブ管理プログラム１０００が解析可能な１つないし複数のジョブ定義ファイル２１が格納された記憶装置２が通信路３を介して接続されており、ジョブ管理プログラム１０００の命令コードをロードして解釈実行するＣＰＵ１２は、入出力インタフェース１３と通信路３を介してジョブ定義ファイル２１を入出力する。
【００１４】
主記憶装置１１には、ジョブ管理プログラム１０００やＯＳ２０００の命令コードのほか、ファイル排他管理テーブル１００、セマフォ割当状態管理テーブル２００、セマフォ管理テーブル３００、セマフォＵＮＤＯテーブル４００が含まれる。
【００１５】
ファイル排他管理テーブル１００およびセマフォ割当状態管理テーブル２００は、ジョブ管理プログラム１０００が参照し、セマフォ管理テーブル３００およびセマフォＵＮＤＯテーブル４００は、ＯＳ２０００が参照するテーブルである。
【００１６】
セマフォ管理テーブル３００およびセマフォＵＮＤＯテーブル４００は、主記憶装置１１のなかで、ＯＳ２０００のみが参照可能なＯＳ内領域に格納され、プログラム１０００は参照することができない。ファイル排他管理テーブル１００およびセマフォ割当状態管理テーブル２００は、主記憶装置１１のなかで、プログラム１０００が参照可能なＯＳ外領域に格納される。
【００１７】
ＯＳ２０００は、セマフォと呼ばれる共有資源の排他制御機構を有する。セマフォは、排他する共有資源ごとにセマフォ変数を持つ。セマフォ変数の値(整数値）をセマフォ値と呼ぶ。また、複数のセマフォから構成される集合をセマフォ集合と呼ぶ。同一セマフォ集合内のセマフォは、同時かつアトミック（不可分）に値を変更することができる。
【００１８】
セマフォ値が“０”であれば“０”以外の値になるまで待ち状態となり、“０”以外であれば“−１”する操作をＰ操作と呼ぶ。セマフォ値が“０”であれば“０”以外の値になるまで待ち状態となり、“０”以外であれば待たずに終了する操作をＰ´操作と定義する。また、セマフォ値を“＋１”する操作をＶ操作と呼ぶ。
【００１９】
これらセマフォ値の操作は、ＯＳ２０００に対して以下の関数を発行することで実行される。
semop(int semid, struct sembuf *sops, unsigned nsops);
“semid”はセマフォ集合の識別子、“nsops”は、同時に操作するセマフォの個数である。“sops”は、以下のメンバをもつ構造体のアドレスである。
unsigned short sem_num;
short          sem_op;
“sem_num”は、セマフォ集合内のセマフォの識別子であるセマフォ番号である。“sem_op”は、セマフォ値に加える数である。“sem_op”が“−１”のときがＰ操作であり、“＋１”のときがＶ操作であり、“０”のときがＰ´操作である。
セマフォ集合内の各セマフォ変数のセマフォ値は、ＯＳ２０００に対して以下の関数の実行結果として参照することができる。
semctl(int semid, int semnum, GETVAL);
“semid”はセマフォ集合の識別子、“semnum”は参照するセマフォ変数のセマフォ番号である。
セマフォ集合は、ＯＳ２０００に対して以下の関数を発行することで割り当てられる。
semget(key_t key, int nsems, int semflg);
“key”は、セマフォ集合を識別するためのキーである。“nsems”は、セマフォ集合内のセマフォ変数の数である。
【００２０】
図２に、ジョブ管理プログラム１０００の設定ファイル２２の記述例を示す。“MAXJOBS=”に続く“５”が、同時に実行可能なジョブ数である最大ジョブ多重度を示す。ジョブは、ジョブ管理プログラム１０００がユーザプログラムを実行する単位であり、ジョブは同時に複数実行することが可能である。
【００２１】
図３（ａ），（ｂ）に、ジョブ定義ファイル２１の記述例を示す。図３（ａ）に示すファイル２１Ａ、図３（ｂ）に示すファイル２１Ｂには、ジョブの名称やユーザプログラムが入出力するファイルの定義が記述される。
【００２２】
ジョブ定義ファイル２１Ａ，２１Ｂの先頭行はジョブ定義文である。“JOB  ID=”に続く“JOBa”，“JOBb”がジョブを一意に識別する識別子であるジョブＩＤを示している。２行目は、ジョブのユーザプログラムが入出力するファイル（以下、ジョブファイルと記述する。)のファイル定義文である。“DD FILE=”に続く“/dir/file1”はジョブファイルを一意に識別する名称であるパス名を示している。ファイル定義文は、ジョブ定義ファイル２１Ａ，２１Ｂのように複数記述してもよい。
【００２３】
図４に、初期化状態におけるファイル排他管理テーブル１００、セマフォ割当状態管理テーブル２００、セマフォ管理テーブル３００及びセマフォＵＮＤＯテーブル４００の状態１１Ａを示す。
【００２４】
ファイル排他管理テーブル１００は、ジョブファイルを複数のジョブが同時に入出力できないようにするために、ジョブファイルの排他状態を管理するテーブルである。ファイル排他管理テーブル１００内には、ジョブファイルごとにエントリ１１０を割り当てる。各エントリ１１０は、次エントリ番号１０１、ジョブファイルのパス名１０２、ジョブファイルを排他しているジョブの識別子であるロックジョブＩＤ１０３を有する。
【００２５】
次エントリ番号１０１は、使用中のエントリ１１０のキューと未使用のエントリ１１０のキュー内における次のエントリ１１０の識別子を格納する。未使用エントリ１１０のキューの先頭エントリ１１０の番号１２０と、使用中エントリ１１０のキューの先頭エントリ１１０の番号１２１も、ファイル排他管理テーブル１００内に保持する。これらの情報は、エントリ数の多いファイル排他管理テーブル１００の未使用エントリを高速に割り当てるために使用する。
【００２６】
また、ファイル排他管理テーブル１００内には、ファイル排他管理テーブル１００が更新中か否かを識別するためのテーブル更新フラグ１２２を設ける。ジョブ管理プログラム１０００は、ファイル排他管理テーブル１００を更新する前に“ＯＮ”を、更新が完了したのちに“ＯＦＦ”を、テーブル更新フラグ１２２に代入する。テーブル更新フラグ１２２は、異常終了したときにファイル排他管理テーブル１００の内容を検証する必要があるか否かを判別するために利用する。
【００２７】
セマフォ割当状態管理テーブル２００は、ジョブとセマフォ変数との対応関係を管理するためのテーブルである。セマフォ割当状態管理テーブル２００の各エントリ２１０には、エントリが管理するセマフォ変数のセマフォ番号２０１と、セマフォを割り当てたジョブのジョブＩＤ２０２が含まれる。
【００２８】
エントリ２１０の管理対象のセマフォ変数は、複数のジョブの完了を同時に待ち合わせる必要があるため、すべて同一セマフォ集合内のセマフォ変数である。エントリ２１０は、少なくとも設定ファイル２２で指定された最大ジョブ多重度＋１の数を割り当てる。セマフォ番号０のセマフォ変数は、ファイル排他管理テーブル１００の排他に使うため、エントリ２１０は、セマフォ番号１のセマフォから管理する。
【００２９】
セマフォ管理テーブル３００は、セマフォ集合内のセマフォ変数のセマフォ値を管理するためのテーブルである。セマフォ管理テーブル３００の各エントリ３１０には、セマフォ番号３０１とセマフォ値３０２を保持する。セマフォ番号０のセマフォ値は“０”に、それ以外のセマフォ値は“１”に初期化する。
【００３０】
セマフォＵＮＤＯテーブル４００は、ジョブが実行されるプロセスが終了したときに、ＯＳ２０００が、セマフォ値をプログラム実行前の状態に戻すために参照するテーブルである。セマフォＵＮＤＯテーブル４００はプロセスごとに設けられ、セマフォ数分のエントリ４１０を持つ。
【００３１】
各エントリ４１０には、セマフォ番号４０１と、プロセス内で実行したセマフォ操作によるセマフォ値の合計であるセマフォＵＮＤＯ値４０２を保持する。ジョブが終了するとプロセスが終了し、プロセスが終了すると、ＯＳ２０００は、セマフォ値３０２からＵＮＤＯ値４０２を減算し、セマフォ値をプログラム実行前の状態に戻す。
【００３２】
図５に、本発明の処理の概要のブロック図を示す。ジョブ管理プログラム１０００は、ＯＳ２０００に対して、セマフォ集合割当要求であるsemget関数を実行すると、ＯＳ２０００は、セマフォ管理テーブル３００とセマフォＵＮＤＯテーブル４００を割り当て、ジョブ管理プログラム１０００に応答を返す。応答後、ジョブ管理プログラム１０００は、セマフォ割当状態管理テーブル２００とファイル排他管理テーブル１００を割り当て、初期化する。
【００３３】
ジョブ実行が要求された場合は、ジョブ管理プログラム１０００は、ＯＳ２０００に、実行するジョブのロック操作であるＰ操作（semop関数発行）を行う。ＯＳ２０００は、セマフォ値が“０”であれば“０”以外になるまでプログラム１０００を待たせ、“０”以外であればセマフォ管理テーブル３００およびセマフォＵＮＤＯテーブル４００を参照更新し応答を返す。
【００３４】
応答後、ジョブ管理プログラム１０００は、セマフォ割当状態管理テーブル２００を更新し、ジョブ定義ファイル２１を読込・解析してファイル排他管理テーブル１００を更新する。ジョブ管理プログラム１０００は、実行するジョブの各ジョブファイルのエントリ１１０がファイル排他管理テーブル１００内に１つでも存在すれば、他のジョブがファイルをロック中であるため、Ｐ´操作を行い、ロック中のジョブが終了するまで待つ。ロック中のジョブが終了後、再びジョブファイルのエントリ１１０をチェックする。
【００３５】
セマフォは共有資源の排他機構であり、ジョブの共有資源はジョブファイルであるが、ジョブファイルの排他状態は、ファイル排他管理テーブル１００を用いてジョブ管理プログラム１０００が管理する。セマフォは、ファイルを排他しているジョブの完了待ちを確実に行うために利用する。ジョブごとにセマフォ変数を割り当て、ジョブを共有資源として排他させる。
【００３６】
ジョブが正常終了する直前に、ジョブ管理プログラム１０００は、ＯＳ２０００にＶ操作を要求したのち、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００のエントリ消去を行い、セマフォ値や各テーブルをジョブ実行前の状態に戻す。ジョブが異常終了した場合は、セマフォ値だけはＯＳ２０００がジョブ実行前の状態に戻るが、ファイル排他管理テーブル１００やセマフォ割当状態管理テーブル２００は実行中と同じ状態となる。このため、次のジョブを実行するためにＣＰＵ１２がジョブ管理プログラム１０００を実行するときに、ＣＰＵ１２は、ＯＳ２０００からセマフォ値を取得してジョブが終了したかをチェックする。
【００３７】
セマフォ割当状態管理テーブル２００にエントリがあるにもかかわらずジョブが終了している場合、ジョブ管理プログラム１０００は、ジョブが異常終了したとみなして、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００のエントリ消去を行い、セマフォ値や各テーブルをジョブ実行前の状態に戻す。
【００３８】
セマフォ数やセマフォ変数の管理に必要なＯＳ内領域の大きさは、多数のジョブファイルではなく少数のジョブの数に依存する。このため、その少数のジョブの記憶されるＯＳ内領域(セマフォ数やセマフォ管理テーブル３００）で排他制御を行うことができる。また、ジョブ実行前に、ＯＳ内領域に保持する情報（セマフォ値）とＯＳ外領域に保持する情報（ファイル排他管理テーブル１００およびセマフォ割当状態管理テーブル２００)を照合して回復処理を行うことで、ＯＳ２０００のみによる排他制御と同等の信頼性を保つことができる。このようにして、ジョブ間のファイルの排他制御を、信頼性とスケーラビリティを両立させることころに特徴がある。
【００３９】
図６に、初期化処理のフローチャートを示す。この初期化処理は、ジョブ管理プログラム１０００がＣＰＵ１２に実行されて行なわれる処理である。
【００４０】
まず、ＣＰＵ１２は、設定ファイル２２を読み込み解析して最大多重度を抽出し（ステップ１１０１）、最大ジョブ多重度＋１以上のセマフォ数のセマフォ集合の割り当てをＯＳ２０００に要求する（ステップ１１０２）。
【００４１】
次に、ＣＰＵ１２は、semop関数を発行してＯＳ２０００に要求し、セマフォ集合内のセマフォ番号０以外のすべてのセマフォ値３０２を“１”に初期化する（ステップ１１０３）。セマフォ番号０のセマフォ値は“０”に初期化する。
【００４２】
続いて、ＣＰＵ１２は、ＯＳ外領域に、割り当てたセマフォ集合内のセマフォ数−１のエントリ２１０をもつセマフォ割当状態管理テーブル２００の領域を割り当てる（ステップ１１０４）。そして、ＣＰＵ１２は、セマフォ割当状態管理テーブル２００内の全エントリ２１０を初期化する。すなわち、セマフォ番号２０１にエントリ２１０が管理するセマフォの番号を代入し、ジョブＩＤ２０２をクリアする（ステップ１１０５）。
【００４３】
続いて、ＣＰＵ１２は、ＯＳ外領域に、一定数のエントリ１１０を有するファイル排他管理ファイル排他管理テーブル１００を割り当て、各エントリ１１０を初期化する（ステップ１１０６）。すなわち、パス名１０２とロックジョブＩＤ１０３をクリアし、次エントリ番号１０１に次のエントリの番号を代入し、未使用番号１２０に“１”、番号１２１に“０”、フラグ１２２に“ＯＦＦ”を代入する。これにより、全エントリが未使用キューにキューイングされる。
【００４４】
図７に、初期化直後の図４の状態１１Ａから、ジョブ定義ファイル２１Ａのジョブに対して、排他処理を実行したのち、ジョブのユーザプログラムを起動する前の各テーブルの状態１１Ｂを示す。
【００４５】
ジョブ定義ファイル２１Ａの“/dir1/file1”と“/dir1/file2”に対するエントリ１１０はどちらも存在しないので、図７に示すように、エントリ１１０が新たに割り当てられ、他のジョブを待つことなくジョブのプログラムは起動される。“JOBa”に対するセマフォ番号１とエントリ２１０が割り当てられ、Ｐ操作によりセマフォ管理テーブル３００のセマフォ番号１のエントリの値が“０”に、セマフォＵＮＤＯテーブル４００のセマフォ番号１のエントリの値が“１”になる。
【００４６】
図８に、図７の状態１１Ｂに対して、さらにジョブ定義ファイル２１Ｂのジョブに対する排他処理を実行した後の各テーブルの状態１１Ｃを示す。
【００４７】
ジョブ定義ファイル２１Ｂのジョブ“JOBb”は、ファイル２１aのジョブ“JOBa”と同じジョブファイル“/dir1/file1”を入出力するためジョブ“JOBa”の終了を待つ（セマフォ番号１のセマフォ値が１になるのを待つ）。デッドロックを避けるため、“/dir1/file3”に対するエントリは、ジョブ“JOBa”が終了するまで割り当てない。
【００４８】
図９に、ジョブ間のファイル排他処理のフローチャートを示す。この排他処理は、ジョブ管理プログラム１０００がＣＰＵ１２に実行されて行なわれる処理である。
【００４９】
まず、ＣＰＵ１２は、ジョブ定義ファイル２１を読み込み、ジョブＩＤとファイルのパス名を抽出する（ステップ１２０１）。次に、ＣＰＵ１２は、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００を他のジョブの排他処理で同時に更新しないようにするため、セマフォ番号０のセマフォ変数に対してＰ操作を行い、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００をロックする（ステップ１２０２）。異常終了したジョブが排他中のジョブファイルを排他解除するため、異常終了検出回復処理１４００を実行する。この異常終了検出回復処理については後述する。
【００５０】
次に、ＣＰＵ１２は、セマフォ割当状態管理テーブル２００内の未使用のエントリ２１０を割り当て、ジョブ定義ファイル２１から抽出したジョブＩＤをジョブＩＤ２０２に代入する（ステップ１２０３）。そして、ＣＰＵ１２は、エントリ２１０のセマフォ番号２０１が示すセマフォ変数のＰ操作をＯＳ２０００に要求し、自己ジョブをロックする（ステップ１２０４）。
【００５１】
次に、ＣＰＵ１２は、ジョブ定義ファイル２１から抽出したすべてのジョブファイルに対し、ジョブファイルのパス名とパス名１０２が一致するエントリ１１０をファイル排他管理テーブル１００から探す（ステップ１２０５）。ＣＰＵ１２は、一致するエントリ１１０が１つでも存在すれば（ステップ１２０６）、一致したすべてのエントリ１１０に対して、ロックジョブＩＤ１０３とジョブＩＤ２０２が一致するエントリ２１０をセマフォ割当状態管理テーブル２００から探し（ステップ１２０７）、すべてのエントリ２１０のセマフォ番号２０１に対する一括Ｖ操作をＯＳ２０００に要求し、ジョブＩＤ２０２が示すすべてのジョブの排他解除を待つ（ステップ１２０８）。そして、ステップ１２０５に戻り、ＣＰＵ１２は、ジョブファイルのチェックから再実行する。
【００５２】
一致するエントリがなければ、ＣＰＵ１２は、ファイル排他管理テーブル１００を更新中に異常終了した後の異常終了検出回復処理１４００において更新中であることを識別できるように、テーブル更新フラグ１２２を“ＯＮ”にする（ステップ１２０９）。そして、ＣＰＵ１２は、番号１２０が示す未使用エントリ１１０を割り当て、番号１２０に、次の未使用エントリである割り当てたエントリ１１０の番号１０１を代入する（ステップ１２１０）。続いて、ＣＰＵ１２は、ジョブファイルのパス名をパス名１０２に、ジョブＩＤをロックジョブＩＤ１０３に代入する（ステップ１２１１）。
【００５３】
最後に、ＣＰＵ１２は、ファイル排他管理テーブル１００の更新が完了したのでフラグ１２２を“ＯＦＦ”に戻し（ステップ１２１２）、セマフォ番号０のセマフォ変数に対してＶ操作を行い、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００をアンロックする（ステップ１２１３）。
【００５４】
図１０に、ジョブ管理プログラム１０００におけるジョブ間ファイル排他の解除処理のフローチャートを示す。この解除処理は、ジョブ管理プログラム１０００がＣＰＵ１２に実行されて行なわれる処理である。
【００５５】
まず、ＣＰＵ１２は、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００を他のジョブの排他処理で同時に更新しないようにするため、セマフォ番号０のセマフォ変数に対してＰ操作を行い、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００をロックし（ステップ１３０１）、テーブル更新フラグ１２２を“ＯＮ”にする（ステップ１３０２）。
【００５６】
そして、ＣＰＵ１２は、排他解除するジョブのジョブＩＤと、ジョブＩＤ１０２が一致するエントリ１１０をすべて探し（ステップ１３０２）、一致するすべてのエントリ１１０に対して、パス名１０２およびロックジョブＩＤ１０３をクリアし、未使用キューに戻し、番号１２０や番号１２１を更新する（ステップ１３０４）。
【００５７】
次に、ＣＰＵ１２は、排他解除するジョブのジョブＩＤとジョブＩＤ２０２が一致するエントリ２１０を探し、ジョブＩＤ２０２を消去してエントリ２１０を解放する（ステップ１３０５）。ＣＰＵ１２は、ファイル排他管理テーブル１００の更新が完了したのでテーブル更新フラグ１２２を“ＯＦＦ”にし（ステップ１３０６）、エントリ２１０のセマフォ番号２０１が示すセマフォのＶ操作をＯＳ２０００に要求して自己ジョブのロックを解除する（ステップ１３０７）。セマフォ番号０のセマフォ変数に対してＶ操作を行い、ファイル排他管理テーブル１００とセマフォ割当状態管理テーブル２００をアンロックする（ステップ１３０８）。
【００５８】
図１１に、図７の状態１１Ｃからジョブ定義ファイル２１Ａのジョブ“JOBa”が異常終了した後の各テーブルの状態１１Ｄを示す。
【００５９】
セマフォ管理テーブル３００は、ジョブ“JOBa”が異常終了した時に、ＯＳ２０００がセマフォＵＮＤＯテーブル４００の値を減算し、ジョブ“JOBa”が実行される前の状態（図４)に戻るが、ファイル排他管理テーブル１００やセマフォ割当状態管理テーブル２００は図７と同じ状態である。異常終了検出回復処理１４００では、ファイル排他管理テーブル１００やセマフォ割当状態管理テーブル２００を図７の状態から図４の状態に戻す。
【００６０】
図１２に、図９における異常終了検出回復処理１４００のフローチャートを示す。
【００６１】
ＣＰＵ１２は、テーブル更新フラグ１２２の値が“ＯＮ”であれば（ステップ１４０１）、ファイル排他管理テーブル１００が更新中であるため、ステップ１４０２〜ステップ１４０３を実行し、ファイル排他管理テーブル１００を再構築して回復する。すなわち、ＣＰＵ１２は、パス名１０２をクリアし、ロックジョブＩＤ１０３がクリアされていないエントリ１１０のロックジョブＩＤ１０３をクリアし（ステップ１４０２）、ロックジョブＩＤ１０３が記録されたエントリ１１０を使用中キューに、記録されていないエントリ１１０を未使用キューに接続し、キューを再構築する（ステップ１４０３）。
【００６２】
次に、ＣＰＵ１２は、異常終了したジョブを検出するため、エントリ２１０が割り当ててあるにもかかわらずセマフォ値が“０”であるジョブを検索する。すなわち、ＣＰＵ１２は、ジョブＩＤ２０２が設定されているすべてのエントリ２１０のセマフォ番号２０１のセマフォ変数に対して、ＯＳ２０００に対してsemctl関数を実行してセマフォ値３０２を取得する（ステップ１４０４）。
【００６３】
セマフォ値３０２が“０”でないセマフォ変数があれば（ステップ１４０５）、ＣＰＵ１２は、そのセマフォ変数のセマフォ番号とセマフォ番号２０１が一致するエントリ２１０のジョブＩＤ２０２の一覧を求め（ステップ１４０６）、一覧中のジョブＩＤ２０２とロックジョブＩＤ１０３が一致するエントリをファイル排他管理テーブル１００から求め、パス名１０１をクリアし、ジョブＩＤ１０２をクリアし、未使用キューに戻す（ステップ１４０７）。
【００６４】
この実施形態の計算機システム１０によると、上述した図６，図９，図１０，図１２の処理をＣＰＵ１２が実行することにより、排他制御対象のファイル数が、ＯＳ２０００が提供する排他制御機構の制限の影響を受けず、ジョブが異常終了しても排他状態を確実に削除することができる。
【００６５】
（他の実施形態）
上記実施の形態では、本発明を、計算機システム１０において、１つないし複数のファイルを他のジョブと排他的に入出力する第一のジョブが終了するときに排他状態が解除されるセマフォ値と、そのセマフォ値をセマフォ管理テーブル３００に設定し、セマフォ値を一意に識別するセマフォ番号と第一のジョブを一意に識別するジョブＩＤとを含む排他情報管理情報をセマフォ割当状態管理テーブル２００に記憶し、ファイルを一意に識別するファイルパス名と前記ジョブＩＤとを含む第二の排他情報をファイル排他管理テーブル１００に記憶し、セマフォ値が排他解除状態である場合に、セマフォ番号の第一の排他情報を求め（ステップ１４０５，１４０６）、ジョブＩＤを含む第二の排他情報を消去し、ジョブＩＤを含む排他情報管理情報を消去する場合（ステップ１４０７）について説明したが、本発明はこれに限るものではない。
【００６６】
また、本発明を、計算機システム１０において、１つないし複数のファイルを第一のジョブと排他的に入出力する第二のジョブを一意に識別するジョブＩＤとを含む排他情報管理情報をセマフォ割当状態管理テーブル２００に記憶し、すべてのファイルに対して、ファイルを一意に識別するファイルパスを含む第二の排他情報が記憶されているか判別し（ステップＳ１２０６）、ファイルに対する第二の排他情報が１つでも記憶されている場合に、第一のジョブに対して設定された第一の排他情報の排他状態解除を要求する場合（ステップ１２０８）について説明したが、本発明はこれに限るものではない。
【００６７】
さらに、本発明を、計算機システム１０において、第一のジョブが終了するときに、まず、第一のジョブを一意に識別するジョブＩＤを含むすべての第二の排他情報を消去し（ステップ１３０５）、続いて、第一のジョブを一意に識別するジョブＩＤを含む排他情報管理情報を消去し、第一のジョブに対して設定された第一の排他情報を解除する場合（ステップ１３０７）について説明したが、本発明はこれに限るものではない。
【００６８】
さらに、本発明を、計算機システム１０において、すべての第二の排他情報を記憶する前に、第二の排他情報の領域を更新することを記憶するテーブル更新フラグ１２２が設定されているか否かを判別し（ステップ１４０１）、テーブル更新フラグ１２２が“ＯＮ”となっていれば、第二の排他情報に矛盾がないかを検証し、矛盾があればその矛盾を解消した後、前記フラグの設定を解除する場合（ステップ１４０２）について説明したが、本発明はこれに限られるものではない。
【産業上の利用可能性】
【００６９】
本発明は、情報処理システム及びそのファイルのジョブ間排他制御方法に広く適用することができる。
【図面の簡単な説明】
【００７０】
【図１】本発明の実施の形態に係わるハードウェア構成の形態を示した図である。
【図２】同実施の形態におけるハードウェア構成の形態を示した図である。
【図３】同実施の形態におけるジョブ定義ファイルの記述例を示した図である。
【図４】同実施の形態における初期化状態におけるテーブルである。
【図５】同実施の形態におけるブロック図である。
【図６】同実施の形態における初期化処理のフローチャートである。
【図７】同実施の形態におけるジョブ定義ファイル２１Ａのジョブに対する排他獲得処理実行後のテーブルである。
【図８】同実施の形態におけるジョブ定義ファイル２１Ａと２１Ｂのジョブに対する排他獲得処理実行後のテーブルである。
【図９】同実施の形態における排他処理のフローチャートである。
【図１０】同実施の形態における排他解除処理のフローチャートである。
【図１１】同実施の形態におけるジョブ定義ファイル２１Ａのジョブが異常終了した後のテーブルである。
【図１２】同実施の形態における異常終了検出回復処理のフローチャートである。
【符号の説明】
【００７１】
１：計算機、２：記憶装置、３：通信路、１０：計算機システム、１１：主記憶装置、１１Ａ〜１１Ｄ：各テーブルの状態、１２：ＣＰＵ、１３：入出力インタフェース、２１：ジョブ定義ファイル、２２：設定ファイル、１００：ファイル排他管理テーブル、２００：セマフォ割当状態管理テーブル、３００：セマフォ管理テーブル、４００：セマフォＵＮＤＯテーブル、２０００：オペレーティングシステム、１０００：ジョブ管理プログラム
【図１】
0005227604.tif 000002
【図２】
0005227604.tif 000003
【図３】
0005227604.tif 000004
【図４】
0005227604.tif 000005
【図５】
0005227604.tif 000006
【図６】
0005227604.tif 000007
【図７】
0005227604.tif 000008
【図８】
0005227604.tif 000009
【図９】
0005227604.tif 000010
【図１０】
0005227604.tif 000011
【図１１】
0005227604.tif 000012
【図１２】
0005227604.tif 000013