ジョブ関連その他諸々 その2
- 1 ジョブ間同期・通信管理(IJCSI)
-
ジョブの間で情報を受け渡したいときはどうしたらよいでしょうか。
例えばジョブA上で動くプログラムaとジョブBで動くプログラムbがあって、プログラムaからプログラムbに”10”という値を渡したいとします。
このときに
000000 01 X PIC 9(02).
などと変数Xを定義して、プログラムaでその変数Xに”10”を入れて、プログラムbでその変数を読み込む、みたいなことはできません。
プログラムaとプログラムbは別のジョブで動いている、つまりスレッドが別です。メモリ空間はスレッドごとに分かれていて、スレッド内のジョブはスレッド内のメモリしか読み書きできません。このためスレッドが別のプログラムaとプログラムbは別のスレッドのメモリを読み書きできないのです。
普通はこのような場合はファイルを介して情報を受け渡しします。プログラムaでファイルに”10”という値を書き込み、プログラムbがファイルを読み込んで”10”という値を受け取ります。
ファイルを介するやり方はバッチ的にある程度まとまった情報を一括して渡すときはよいのですが、リアルタイムに情報を渡すときはちょっと現実的ではありません。
プログラムaがネットワークからひたすら情報を受信し続け、その情報をプログラムbに渡し。プログラムbは受け取った情報で何らかの計算処理をしてハードディスク上に書き込む、そのようなシステムがあったとします。プログラム間の情報受け渡しをファイルで介すると結構遅くなりそうですし、ファイルを同時に読み書きしようとするとファイルビジーも発生しそうです。
このような場合にジョブ間同期・通信管理(Inter Job Comminucation System Interface:IJCSI)を使用します。
ジョブ間同期・通信管理機能には、大きく分けて信号通信とメッセージ通信の2つの機能があります。
信号通信は主にジョブ間で同期をとるために使用します。例えばジョブAが動いている間はジョブBは止めておいて、ジョブAの処理が終わったらジョブBを動かすとか、そのような用途です。
メッセージ通信は上の例で示したような情報を受け渡すために使用します。ジョブAとジョブBで”10”とか”こんにちは”とかデータを送受することができます。
- 2 詳細説明
-
以前にIJCSIについて詳細に書いたページがあるので以下にリンクしておきます。
A−VXのCOBOL85システムサブルーチンに「ジョブ間同期気通信マクロ実行」というものがあります。
これを使ってCOBOLでサンプルプログラムを作っています。
ジョブ間同期・通信管理機能とは 信号通信(信号の送受信) メッセージ通信(メッセージの送受信) 信号通信(資源管理用)サンプルプログラム メッセージ通信(+信号通信)サンプルプログラム ジョブ間同期・通信チャネル(IJCC)の管理