(57)【要約】【課題】多くのジョブステップからなるバッチジョブであっても、コンピュータの処理能力の範囲内で高速に実行し、且つ、安定稼動させる。【解決手段】パイプ処理の対象として定義されたジョブステップ数が、コンピュータで同時に実行させることが可能な上限プロセス数を超えるときには、パイプ処理対象となる連続したジョブステップのうち、上限プロセス数を上限とした数を１区分として分割し、分割により同じ区分とされたジョブステップ間のデータの受け渡しにパイプを用いる。一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する。また、パイプ処理対象となるジョブステップの数が上限プロセス数を超えないときには、これらのジョブステップ全てのデータの受け渡しにパイプを用いてジョブステップを実行する。【選択図】  図３
2008234024.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
バッチジョブ定義ファイルを読み込む読込手段と、
前記バッチジョブ定義ファイルにおいてパイプ処理対象として定義されたジョブステップの数が、同時に実行させることが可能な上限プロセス数を超えるか否かを判定する判定手段と、
前記判定手段により、前記ジョブステップの数が前記上限プロセス数を超えると判定されたときに、パイプ処理対象として定義された連続するジョブステップを、前記上限プロセス数を上限とした数ごとに分割し、分割により同一の区分とされたジョブステップ間のデータの受け渡しにパイプを用いる一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する第１の実行手段と、
前記判定手段により、前記ジョブステップの数が前記上限プロセス数を超えないと判定されたときには、パイプ処理対象として定義された連続する全てのジョブステップ間のデータの受け渡しにパイプを用いてジョブステップを実行する第２の実行手段と、
として機能させるためのバッチ処理プログラム。
【請求項２】
前記第１の実行手段は、
各ジョブステップについて、入出力をパイプとするか一時ファイルとするかを定義した入出力テーブルを生成し、該入出力テーブルに従って、各ジョブステップを順次実行することを特徴とする請求項１に記載のバッチ処理プログラム。
【請求項３】
前記上限プロセス数は、コンピュータの稼動状況によって動的に書き換えられることを特徴とする請求項１又は請求項２に記載のバッチ処理プログラム。
【請求項４】
前記第１の実行手段は、
前記バッチジョブ定義ファイルに定義された各ジョブステップの入力対象名及び出力対象名を読み込み、該入力対象名及び出力対象名で、各ジョブステップにおけるデータの入出力に用いるパイプ又は一時ファイルを生成する一方、各ジョブステップを実行するプロセスにおける入力対象及び出力対象を示す環境変数に前記入力対象名及び出力対象名を設定し、各ジョブステップの入力対象及び出力対象と前記パイプ又は一時ファイルとを関連付けることを特徴とする請求項１乃至請求項３のいずれか１つに記載のバッチ処理プログラム。
【請求項５】
コンピュータに、
バッチジョブ定義ファイルを読み込む読込工程と、
前記バッチジョブ定義ファイルにおいてパイプ処理対象として定義されたジョブステップの数が、同時に実行させることが可能な上限プロセス数を超えるか否かを判定する判定工程と、
前記判定工程により、前記ジョブステップの数が前記上限プロセス数を超えると判定されたときに、パイプ処理対象として定義された連続するジョブステップを、前記上限プロセス数を上限とした数ごとに分割し、分割により同一の区分とされたジョブステップ間のデータの受け渡しにパイプを用いる一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する第１の実行工程と、
前記判定工程により、前記ジョブステップの数が前記上限プロセス数を超えると判定されたときには、パイプ処理対象として定義された連続する全てのジョブステップ間のデータの受け渡しにパイプを用いてジョブステップを実行する第２の実行工程と、
を実行させることを特徴とするバッチ処理方法。
【請求項６】
バッチ定義ファイルと、
同時に実行させることが可能な上限プロセス数が保持された記憶手段と、
前記バッチ定義ファイルを読み込む読込手段と、
前記バッチジョブ定義ファイルにおいてパイプ処理対象として定義されたジョブステップの数が、前記記憶手段に保持された上限プロセス数を超えるか否かを判定する判定手段と、
前記判定手段により、前記ジョブステップの数が前記上限プロセス数を超えると判定されたときに、パイプ処理対象として定義された連続するジョブステップを、前記上限プロセス数を上限とした数ごとに分割し、分割により同一の区分とされたジョブステップ間のデータの受け渡しにパイプを用いる一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する第１の実行手段と、
前記判定手段により、前記ジョブステップの数が前記上限プロセス数を超えると判定されたときには、パイプ処理対象として定義された連続する全てのジョブステップ間のデータの受け渡しにパイプを用いてジョブステップを実行する第２の実行手段と、
を含んで構成されたことを特徴とするバッチ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッチ処理を高速に実行し、且つ、安定稼動させる技術に関する。
【背景技術】
【０００２】
近年、携帯電話やＲＦＩＤ（Radio Frequency Identification）などのオンライン端末の増加により、オンライン処理のデータが増加している。そして、これに伴い、これらのデータのバッチ処理に要する時間が長くなってきている。かかるバッチ処理に要する時間を短縮化させるべく、バッチ処理を高速に実行し、且つ、安定稼動させる技術として、特開平８−９５８１０号公報に記載された技術のように、バッチジョブのジョブステップ間でデータの受け渡しを行なうときに、あるジョブステップで出力されたデータを、一時ファイルを用いずに次のジョブステップに渡すパイプ処理が採用されている。かかるパイプ処理では、キャッシュメモリなどで実現されるデータ受け渡し手段としてのパイプを用いてジョブステップ同士をパイプ結合し、ジョブステップ間で高速にデータの受け渡しを行なうことができる。
【特許文献１】特開平８−９５８１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のパイプ処理では、パイプ結合されたジョブステップ、即ち、パイプを用いてデータの受け渡しを行なうジョブステップを同時に全て実行させる必要があるため、多くのジョブステップからなるバッチジョブを処理する場合には、コンピュータの処理能力を超える数のプロセスを実行させなければならない事態が生じていた。そして、このようにコンピュータの処理能力を超える数のプロセスを実行させてしまうと、ＣＰＵ不足及びメモリ使用量が最大値を超えることによるスワップの増加が原因で、パイプ処理を行なわないときよりも逆に処理効率が低下し、また、その動作が不安定なものとなっていた。このため、ジョブステップの数がコンピュータで同時に実行させることができる上限プロセス数を超えるバッチジョブに対しては、かかるパイプ処理の技術を実用上適用できないという問題があった。
【０００４】
そこで、本発明では、多くのジョブステップからなるバッチジョブであっても、コンピュータの処理能力の範囲内で高速に実行し、且つ、安定稼動させることを目的とする。
【課題を解決するための手段】
【０００５】
このため、本発明においては、コンピュータが、バッチ定義ファイルを読み込み、バッチジョブ定義ファイルにおいてパイプ処理対象として定義されたジョブステップの数が、同時に実行させることが可能な上限プロセス数を超えるか否かを判定する。そして、ジョブステップの数が上限プロセス数を超えると判定されたときに、パイプ処理対象として定義された連続するジョブステップを、上限プロセス数を上限とした数ごとに分割し、分割により同一の区分とされたジョブステップ間のデータの受け渡しにパイプを用いる一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する。また、ジョブステップの数が上限プロセス数を超えないと判定されたときには、パイプ処理対象として定義された連続する全ての前記ジョブステップ間のデータの受け渡しにパイプを用いてジョブステップを実行する。
【発明の効果】
【０００６】
本発明によれば、パイプ処理対象となるジョブステップの数が上限プロセス数を超えないときには、従来どおりパイプ処理対象となるジョブステップ全てについてパイプ結合される一方、ジョブステップの数が上限プロセス数を超えるときには、次のような処理が行なわれる。即ち、連続したジョブステップが、上限プロセス数を超えない数ごとに分割され、分割により同一の区分とされたジョブステップ間だけがパイプ結合される。そして、異なる区分とされたジョブステップ間では、一時ファイルを用いてデータの受け渡しが行なわれて、ジョブステップが実行される。このため、ジョブステップ間のデータの受け渡しにおいてパイプと一時ファイルとが併用され、サーバで同時に実行させることが可能なプロセス数の範囲内でのみジョブステップがパイプ結合されることで、パイプ処理による高速な処理速度を生かしつつ、コンピュータの処理能力を考慮にいれた処理を行なうことができ、バッチ処理の高速性と安定性の両方が実現される。
【発明を実施するための最良の形態】
【０００７】
以下、添付された図面を参照して本発明を詳述する。
【０００８】
図１は、本発明を具現化したバッチ処理装置の機能概要を示す。このバッチ処理装置は、少なくとも中央処理装置（ＣＰＵ）、メモリを備えたコンピュータで構成され、バッチジョブ定義ファイル（以下、ＪＣＬ（Job Control Language）という）１０と，入力ファイル１００からデータを入力する入力部２０と，バッチジョブの実行制御を行なう実行制御部３０と，バッチジョブの実行結果としてのデータを出力ファイル２００に出力する出力部４０と，コンピュータで同時に実行させることが可能な上限プロセス数、即ち、パイプ結合することが可能なジョブステップ数を保持する上限プロセス数テーブル５０と，を含んで構成される。
【０００９】
実行制御部３０は、バッチジョブを受け付け、ＪＣＬ１０を読み込むと、ＪＣＬ１０に定義された制御文に従い、入力部２０により入力されたデータを用いてバッチジョブを実行する。このとき、実行制御部３０は、まず上限プロセス数テーブル５０の上限プロセス数を参照する。なお、上限プロセス数テーブル５０の上限プロセス数は、サーバの稼動状況に応じて動的に書き換えられる値であり、メモリなどに保持されている。そして、実行制御部３０は、ＪＣＬ１０においてパイプ処理を行なうべく定義された連続するジョブステップ、即ち、パイプ処理対象となるジョブステップの数が上限プロセス数を超えているときには、連続するジョブステップを、上限プロセス数を上限とした数を１区分として分割し、分割により同じ区分とされたジョブステップ間のデータの受け渡しにパイプを用いる。一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する。また、パイプ処理対象となるジョブステップの数が上限プロセス数を超えないときには、これらのジョブステップ全てのデータの受け渡しにパイプを用い、ジョブステップを実行する。そして、出力部４０では、かかるバッチジョブの実行結果としてのデータを出力ファイル２００に出力する。なお、実行制御部３０が、読込手段，読込工程，判定手段，判定工程，第１の実行手段，第１の実行工程，第２の実行手段及び第２の実行工程に相当する。
【００１０】
次に、かかる処理の流れについて、具体例を用いて説明する。
【００１１】
例えば、ＪＣＬ１０に、図２に示すような定義がなされているとする。このＪＣＬ１０は、パイプ処理の制御を開始する制御文（２行目）と、パイプ処理の制御を終了する制御文（９行目）と、の間のジョブステップ、即ち、ジョブステップ２（３行目の「Step2」）からジョブステップ７（８行目の「Step7」）までの６つのジョブステップについて、パイプ処理制御を行なうものである。また、上限プロセス数テーブル５０には、上限プロセス数として「３」が設定されているとする。このとき、実行制御部３０では、バッチジョブを受け付けると、ＪＣＬ１０及び上限プロセス数テーブル５０に基づき、図３に示すような処理を行なう。即ち、入力部２０により入力ファイルから入力されたデータを用いてパイプ処理対象外のジョブステップ１を実行し、ジョブステップ２に渡すデータを一時ファイルに格納する（フェーズ１）。ここで、パイプ処理対象となるジョブステップが６つであり、上限プロセス数である３つを超えているため、パイプ処理対象のジョブステップ２からジョブステップ７のうち、上限プロセス数テーブル５０に設定された上限プロセス数である３つまでのジョブステップ、即ち、ジョブステップ２からジョブステップ４を１区分として分割し、これらのジョブステップ間のデータの受け渡しにパイプを用いる。そして、ジョブステップ４及びジョブステップ５は異なる区分となるため、一時ファイルを用いてデータを受け渡しする（フェーズ２）。同様に、ジョブステップ５からジョブステップ７までを１区分として分割してこれらをパイプ結合し、ジョブステップ７及びジョブステップ８の間では、一時ファイルを用いてデータを受け渡しする（フェーズ３）。そして、パイプ処理対象外のジョブステップ８を実行し、出力部４０では、実行結果のデータを出力ファイル２００に出力する（フェーズ４）。
【００１２】
また、図２に示すＪＣＬ１０の例の場合、上限プロセス数が６以上であるとき、即ち、パイプ処理対象となるジョブステップの数が上限プロセス数を超えないときには、パイプ処理対象となるジョブステップ２からジョブステップ７までの全てをパイプ結合し、データの受け渡しにパイプを用いることとなる。
【００１３】
ここで、一時ファイル及びパイプとジョブステップの入出力との関連付けについて説明する。実行制御部３０では、前述のようにＪＣＬ１０及び上限プロセス数テーブル５０に基づいて、各ジョブステップの入力及び出力を一時ファイルにするかパイプにするかについて決定すると、当該ジョブステップについてＪＣＬ１０で予め定義された入力対象名及び出力対象名で、一時ファイル又はパイプを生成する。一方、ジョブステップを実行するプロセスにおいては、ジョブステップと、かかる入力対象名及び出力対象名とを環境変数としてとして関連付けることで、一時ファイル又はパイプとの入出力が可能となる。
【００１４】
例えば、前述の図３に示す処理の場合、実行制御部３０では、ジョブステップ２からジョブステップ４、ジョブステップ５からジョブステップ７を夫々パイプ結合する。ここで、ジョブステップ２に着目すると、ジョブステップ２は、入力が一時ファイル、出力がパイプとなる。図４は、かかるジョブステップ２における関連付けの具体例についての説明図である。ここで、ジョブステップ２について、ＪＣＬ１０に、入力対象名及び出力対象名について夫々「tmp01.dat」及び「tmp02.dat」と定義されているとする（３行目）。実行制御部３０では、かかるＪＣＬ１０の定義に基づき、ジョブステップ２の実行前に、ジョブステップ２の入力のための一時ファイル６０を「tmp01.dat」として、出力のためのパイプ７０を「tmp02.dat」として、夫々生成する。一方、実行制御部３０は、ジョブステップ２を実行するプロセスに対し、その制御設定として、環境変数の入力対象名及び出力対象名を夫々「tmp01.dat」及び「tmp02.dat」と設定させる。このようにすれば、ジョブステップ２の具体的な処理を行なう利用者処理において、かかる環境変数により関連付けられた一時ファイル６０及びパイプ７０を用いて処理をすることができる。
【００１５】
また、ＪＣＬ１０にこのような入力対象名及び出力対象名が定義されていない場合であっても、実行制御部３０においてジョブステップの実行時に適宜決定した入力対象名及び出力対象名で一時ファイル又はパイプを生成し、一般的なオペレーションシステムが実装しているジョブステップの入出力制御機能を介して、ジョブステップの利用者処理における入出力とこれらの一時ファイル又はパイプとを関連付けることも可能である。
【００１６】
以下、実行制御部３０で実行される処理について詳細に説明する。
【００１７】
図５は、実行制御処理の内容を示す。なお、この処理は、実行制御部３０においてバッチジョブを受け付けたとき、即ち、ＪＣＬ１０を読み込んだときに実行される。
【００１８】
ステップ１（図では「Ｓ１」と略記する。以下同様）では、読み込んだＪＣＬ１０を解析し、当該バッチジョブの全ジョブステップ数ｓを算出する。なお、ステップ１が、読込手段及び読込工程に相当する。
【００１９】
ステップ２では、上限プロセス数テーブル５０から、上限プロセス数ｍを読み込む。
【００２０】
ステップ３では、何番目のジョブステップであるかを示すジョブステップ番号ｘに１を設定する。
【００２１】
ステップ４では、ＪＣＬ１０において、「ｘ番目のジョブステップであるジョブステップ［ｘ］（以下同様）の前に、パイプ処理の制御を開始する制御文があり、且つ、ジョブステップ［ｘ］の後にパイプ処理の制御を終了する制御文がある」条件を満たすか否かを判定する。この条件を満たすときにはステップ５に進み（Ｙｅｓ）、この条件を満たさないときにはステップ１０に進む（Ｎｏ）。
【００２２】
ステップ５では、ＪＣＬ１０において、パイプ処理の制御を開始する制御文及びパイプ処理の制御を終了する制御文の間に定義されているパイプ結合ジョブステップ数ｎを算出する。
【００２３】
ステップ６では、上限プロセス数ｍがパイプ結合ジョブステップ数ｎより小さいか否かを判定する。上限プロセス数ｍがパイプ結合ジョブステップ数ｎより小さければステップ７に進み（Ｙｅｓ）、上限プロセス数ｍがパイプ結合ジョブステップ数ｎと同じかパイプ処理ジョブステップ数ｎより大きければステップ８に進む（Ｎｏ）。なお、ステップ６が、判定手段及び判定工程に相当する。
【００２４】
ステップ７では、分割パイプ結合処理のサブルーチンをコールする。このとき、上限プロセス数ｍ及びパイプ結合ジョブステップ数ｎを引数としてサブルーチンに渡す。
【００２５】
ステップ８では、全パイプ結合処理のサブルーチンをコールする。このとき、上限プロセス数ｍ及びパイプ結合ジョブステップ数ｎを引数としてサブルーチンに渡す。
【００２６】
ステップ９では、ジョブステップ番号ｘを、パイプ処理ジョブステップ数ｎだけインクリメントする。
【００２７】
ステップ１０では、ジョブステップ［ｘ］を実行する。
【００２８】
ステップ１１では、ジョブステップ番号ｘをインクリメントする。
【００２９】
ステップ１２では、ジョブステップ番号ｘが、全ジョブステップ数ｓより大きいか否かを判定する。ジョブステップ番号ｘが、全ジョブステップ数ｓより大きければ処理を終了し（Ｙｅｓ）、ジョブステップ番号ｘが、全ジョブステップ数ｓと等しいか全ジョブステップ数ｓより小さければステップ４に戻る（Ｎｏ）。
【００３０】
図６及び図７は、実行制御処理でコールされる分割パイプ結合処理のサブルーチンの処理内容を示す。この分割パイプ結合処理は、ＪＣＬ１０に定義されたパイプ処理対象となるジョブステップ数が、上限プロセス数を超えているときに行われるものである。なお、このとき、実行制御処理から上限プロセス数ｍ及びパイプ結合ジョブステップ数ｎを引数として受け取る。
【００３１】
ステップ２１では、分割パイプ結合処理において何番目のジョブステップであるかを示すパイプ結合ジョブステップ番号ｙに１を設定する。
【００３２】
ステップ２２では、分割パイプ結合処理において同時に実行しているジョブステップの数としてのプロセス数を示すプロセス番号ｉに１を設定する。
【００３３】
ステップ２３では、上限プロセス数ｍが１であるか否かを判定する。上限プロセス数ｍが１でないときにはステップ２４に進み（Ｙｅｓ）、上限プロセス数ｍが１であるときにはステップ３３に進む（Ｎｏ）。
【００３４】
ステップ２４では、プロセス番号ｉが１であるか否かを判定する。プロセス番号ｉが１でないときにはステップ２５に進み（Ｙｅｓ）、プロセス番号ｉが１であるときにはステップ３０に進む（Ｎｏ）。
【００３５】
ステップ２５では、プロセス番号ｉが上限プロセス数ｍと異なるか否かを判定する。プロセス番号ｉが上限プロセス数ｍと異なるときには、ステップ２６に進み（Ｙｅｓ）、プロセス番号ｉが上限プロセス数ｍと等しいときには、ステップ２９に進む（Ｎｏ）。
【００３６】
ステップ２６では、パイプ結合ジョブステップ数ｎがパイプ結合ジョブステップ番号ｙと異なるか否かを判定する。パイプ結合ジョブステップ数ｎがパイプ結合ジョブステップ番号ｙと異なるときには、ステップ２７に進み（Ｙｅｓ）、パイプ結合ジョブステップ数ｎがパイプ結合ジョブステップ番号ｙと等しいときには、ステップ２８に進む（Ｎｏ）。
【００３７】
ステップ２７では、ジョブステップ［ｙ］をプロセス［ｉ］で実行する。このとき、パイプからデータを入力し、パイプにデータを出力する。
【００３８】
ステップ２８では、ジョブステップ［ｙ］をプロセス［ｉ］で実行する。このとき、パイプからデータを入力し、一時ファイルにデータを出力する。
【００３９】
ステップ２９では、ジョブステップ［ｙ］をプロセス［ｉ］で実行する。このとき、パイプからデータを入力し、一時ファイルにデータを出力する。
【００４０】
ステップ３０では、パイプ結合ジョブステップ数ｎがパイプ結合ジョブステップ番号ｙと異なるか否かを判定する。パイプ結合ジョブステップ数ｎがパイプ結合ジョブステップ番号ｙと異なるときには、ステップ３１に進み（Ｙｅｓ）、パイプ結合ジョブステップ数ｎがパイプ結合ジョブステップ番号ｙと等しいときには、ステップ３２に進む（Ｎｏ）。
【００４１】
ステップ３１では、ジョブステップ［ｙ］をプロセス［ｉ］で実行する。このとき、一時ファイルからデータを入力し、パイプにデータを出力する。
【００４２】
ステップ３２では、ジョブステップ［ｙ］をプロセス［ｉ］で実行する。このとき、一時ファイルからデータを入力し、一時ファイルにデータを出力する。
【００４３】
ステップ３３では、ジョブステップ［ｙ］をプロセス［ｉ］で実行する。このとき、一時ファイルからデータを入力し、一時ファイルにデータを出力する。
【００４４】
ステップ３４では、パイプ結合ジョブステップ番号ｙ及びプロセス番号ｉを夫々インクリメントする。
【００４５】
ステップ３５では、「プロセス番号ｉが上限プロセス数ｍより大きいか、又は、パイプ結合ジョブステップ番号ｙがパイプ結合ジョブステップ数ｎより大きい」条件を満たすか否かを判定する。この条件を満たすときには、ステップ３６に進み（Ｙｅｓ）、この条件を満たさないときには、ステップ２３に戻る（Ｎｏ）。
【００４６】
ステップ３６では、プロセス［１］〜プロセス［ｍ］で実行されているジョブステップが全て終了するのを待ち合わせる。
【００４７】
ステップ３７では、プロセス番号ｉが上限プロセス数ｍより小さいか又は上限プロセス数ｍと等しいか否かを判定する。プロセス番号ｉが上限プロセス数ｍより小さいか又は上限プロセス数ｍと等しいときには、ステップ３８に進み（Ｙｅｓ）、プロセス番号ｉが上限プロセス数ｍより大きいときには、ステップ３９に進む（Ｎｏ）。
【００４８】
ステップ３８では、パイプ結合ジョブステップ番号ｙがパイプ結合ジョブステップ数ｎより大きいか否かを判定する。パイプ結合ジョブステップ番号ｙがパイプ結合ジョブステップ数ｎより大きいときには、分割パイプ結合処理を終了し（Ｙｅｓ）、パイプ結合ジョブステップ番号ｙがパイプ結合ジョブステップ数ｎと等しいかパイプ結合ジョブステップ数ｎより小さいときには、ステップ２３に戻る（Ｎｏ）。
【００４９】
ステップ３９では、プロセス番号ｉに１を設定する。
【００５０】
なお、分割パイプ結合処理が、第１の実行手段及び第１の実行工程に相当する。
【００５１】
図８は、実行制御処理でコールされる全パイプ結合処理のサブルーチンの処理内容を示す。この全パイプ結合処理は、ＪＣＬ１０に定義されたパイプ処理対象となるジョブステップ数が、上限プロセス数を超えないときに行われるものである。なお、このとき、制御処理から上限プロセス数ｍ及びパイプ結合ジョブステップ数ｎを引数として受け取る。
【００５２】
ステップ４１では、全パイプ結合処理において何番目のジョブステップであるかを示すパイプ結合ジョブステップ番号ｚに１を設定する。
【００５３】
ステップ４２では、全パイプ結合処理において同時に実行しているジョブステップの数としてのプロセス数を示すプロセス番号ｊに１を設定する。
【００５４】
ステップ４３では、上限プロセス数ｍが１と異なり、且つ、パイプ結合ジョブステップ数ｎが１と異なるか否かを判定する。上限プロセス数ｍが１と異なり、且つ、パイプ結合ジョブステップ数ｎが１と異なるときには、ステップ４４に進み（Ｙｅｓ）、上限プロセス数ｍが１と等しいか、又は、パイプ結合ジョブステップ数ｎが１と等しいときには、ステップ５０に進む（Ｎｏ）。
【００５５】
ステップ４４では、ジョブステップ［ｚ］をプロセス［ｊ］で実行する。このとき、一時ファイルからデータを入力し、パイプにデータを出力する。
【００５６】
ステップ４５では、パイプ結合ジョブステップ番号ｚ及びプロセス番号ｊを夫々インクリメントする。
【００５７】
ステップ４６では、パイプ結合ジョブステップ番号ｚがパイプ結合ジョブステップ数ｎより小さいか否かを判定する。パイプ結合ジョブステップ番号ｚがパイプ結合ジョブステップ数ｎより小さいときには、ステップ４７に進み（Ｙｅｓ）、パイプ結合ジョブステップ番号ｚがパイプ結合ジョブステップ数ｎと等しいか、パイプ結合ジョブステップ数ｎより大きいときには、ステップ４９に進む（Ｎｏ）。
【００５８】
ステップ４７では、ジョブステップ［ｚ］をプロセス［ｊ］で実行する。このとき、パイプからデータを入力し、パイプにデータを出力する。
【００５９】
ステップ４８では、パイプ結合ジョブステップ番号ｚ及びプロセス番号ｊを夫々インクリメントする。
【００６０】
ステップ４９では、ジョブステップ［ｚ］をプロセス［ｊ］で実行する。このとき、パイプからデータを入力し、一時ファイルにデータを出力する。
【００６１】
ステップ５０では、ジョブステップ［ｚ］をプロセス［ｊ］で実行する。このとき、一時ファイルからデータを入力し、一時ファイルにデータを出力する。
【００６２】
なお、全パイプ結合処理が、第２の実行手段及び第２の実行工程に相当する。
【００６３】
かかる実行制御処理，分割パイプ処理及び全パイプ処理によれば、ＪＣＬ１０においてパイプ処理を行なうべく定義されたジョブステップを実行するときに、上限プロセス数テーブル５０の上限プロセス数を参照し、パイプ処理対象となるジョブステップの数が上限プロセス数を超えているか否かを判定する。そして、ジョブステップの数が上限プロセス数を超えているときには、次の処理をする。即ち、連続するジョブステップのうち、上限プロセス数を上限とした数までのジョブステップを１区分として分割し、この区分内においてジョブステップを順次パイプ結合する。そして、パイプ結合したジョブステップのうち最後のジョブステップとその次のジョブステップとの間、即ち、異なる区分に分割されるジョブステップ間のデータの受け渡しには一時ファイルを用いる。一方、パイプ処理対象となるジョブステップの数が上限プロセス数を超えないときには、パイプ処理対象となるジョブステップ全てについて、データの受け渡しにパイプを用いてジョブステップを実行する。このように、ジョブステップ間のデータの受け渡しにおいてパイプと一時ファイルとが併用され、サーバで同時に実行させることが可能な上限プロセス数の範囲内でのみジョブステップがパイプ結合されることで、バッチ処理の高速性と安定性の両方が実現される。
【００６４】
なお、実行制御部３０において、ジョブステップを実行する前に、ＪＣＬ１０と上限プロセス数テーブル５０とに基づき、図９に示すように、各ジョブステップについて入出力を一時ファイル又はパイプのいずれで行なうかを定義した入出力テーブルを生成し、この入出力テーブルに従ってジョブステップを順次実行してもよい。
【００６５】
また、本実施例においてはパイプ処理について説明をしたが、パイプ処理と同様にバッチ処理の高速化を実現する技術として、同一のジョブステップを複数並列して実行する処理がある。かかる並列処理は、バッチジョブの入力データを所定のルールなどに従って分割し、分割したデータを用いてジョブステップを並列で実行するものである。
【００６６】
例えば、ＪＣＬに図１０に示すような定義がなされているとする。このＪＣＬは、データ分割の制御を行なう制御文（３行目から５行目）に定義されたルールに従って入力データを分割し、並列処理の制御を開始する制御文（２行目）と、パイプ処理の制御を終了する制御文（９行目）と、の間のジョブステップ、即ち、ジョブステップＢ（６行目の「StepＢ」）からジョブステップＤ（８行目の「StepＤ」）までのジョブステップについて、並列処理制御を行なうものである。なお、並列させる数については、ＪＣＬの実行命令において定義する。ここで、並列させる数を４とした場合、かかるＪＣＬで定義されたジョブステップは、図１１に示すように処理され、ジョブステップＢからジョブステップＤが、４つ並列で実行される。
【００６７】
かかる並列処理においても、前述のパイプ処理と同様に、コンピュータの処理能力を超える数のプロセスを実行してしまうと、処理効率が悪くなるという問題がある。そこで、サーバで同時に実行させることが可能な上限プロセス数の範囲内でのみ並列処理を行なうことで、バッチ処理の高速性と安定性の両方を実現することができる。
【図面の簡単な説明】
【００６８】
【図１】本発明を具現化したバッチ処理装置の機能概要図
【図２】パイプ処理のＪＣＬの説明図
【図３】バッチ処理の説明図
【図４】ジョブステップと入出力ファイルの関連付けの説明図
【図５】実行制御処理を示すフローチャート
【図６】分割パイプ結合処理を示すフローチャート
【図７】分割パイプ結合処理を示すフローチャート
【図８】全パイプ結合処理を示すフローチャート
【図９】ジョブステップの入出力テーブルの説明図
【図１０】並列処理のＪＣＬの説明図
【図１１】並列処理の説明図
【符号の説明】
【００６９】
１０    ＪＣＬ
２０    入力部
３０    実行制御部
４０    出力部
５０    上限プロセス数テーブル
６０    一時ファイル
７０    パイプ
１００    入力ファイル
２００    出力ファイル
【図１】
2008234024.tif 000003
【図２】
2008234024.tif 000004
【図３】
2008234024.tif 000005
【図４】
2008234024.tif 000006
【図５】
2008234024.tif 000007
【図６】
2008234024.tif 000008
【図７】
2008234024.tif 000009
【図８】
2008234024.tif 000010
【図９】
2008234024.tif 000011
【図１０】
2008234024.tif 000012
【図１１】
2008234024.tif 000013