# Job Control Language
# 概要
Job Control Language(JCL、ジョブ制御言語)とは、メインフレームコンピュータで使われるジョブ制御用のスクリプト言語である。
処理系によりJCS(Job Control Statement)、ECL(Executive Control Language)とも呼ぶ。
ジョブ制御言語(JCL)は、メインフレームのジョブ管理システム(ジョブ入力サブシステム)に対して、バッチ処理や常駐プロセス起動時の指定をするスクリプト言語である。
通常は、ジョブ名、ジョブの実行クラス(優先順位など)、ステップ名、使用するプログラム名、そのプログラムが格納されているライブラリー、使用する仮想メモリーの容量、使用する物理ファイル名(データセット名)やその属性(格納場所、新規作成の場合の容量など)、およびジョブ内(ステップ間)の制御を行う。
なおジョブ間(ジョブフロー、ジョブストリーム)の制御を自動化する場合は、JCLではできないためジョブスケジューラなどで行う。
大半のメインフレームでは、プログラムから見えるコンピュータは仮想化されており、プログラムは物理ファイル名などを認識することはできない(従って記述もできない)ため、JCLによってはじめて、プログラム内の論理ファイル名と、実際の物理ファイル名などが、関連づけられる。
オープン系にはJCLと同等の機能はなくシェルスクリプトで代用することが多いが本来は全く異なるものである。
メインフレームでのJCLは必須であり、プログラマ(プログラム)とオペレータ(運用管理)を分離している。
このため運用管理担当者は、各プログラムの仕様を知ること無く、各ジョブがどの物理ファイル(データセット)を使用するか(しないか)を全て把握し、容易に変更できる。
またプログラムが不測の物理ファイル(データセット)をアクセスしたり作成する事が無い。
# MVS系のJCL
JCLは、バッチ処理をどのように動かすか、サブシステムをどのように起動させるかを、ジョブエントリーシステム(Job Entry Subsystem 2/3、JES2 または JES3)に対して指示するものである。
JCLの各行の先頭2文字は、"//" で始まる。このスラッシュは、パンチカードを使ってJCLを読み込ませジョブを投入していたときの名残である。
誤ってパンチカードを後ろからカードリーダーに挿入してしまった場合(代わりにシーケンス番号が先頭に来ることになるだろう)、リーダーは "//" が先頭にないことを読み取って、そのカードを拒絶するようになっていた。
# JOB文
//jobname JOB (accounting information),CLASS=x,MSGCLASS=x,REGION=nK,TIME=(m,s),NOTIFY=XXXXXX
CPU や I/O など、コンピュータ資源を使用した分の使用料を使用した部署に請求するために、必要な会計上の情報が、カッコやクオーテーションマークで区切られて記述される。
CLASS パラメータは、ジョブがどのイニシエータで走るかを決める。その他、ジョブの優先度を指定するパラメータなどがある。
MSGCLASS パラメータはジョブの実行結果をどこに出力するかを指定する。出力クラスは個別のプリンタや、指定のファイルなどに割り振られていて、ユーザーは希望の出力先を指定する。
REGION パラメータは、ジョブが使用できる仮想記憶の最大量、リージョンのサイズを決める。キロやメガという単位を用いて指定できる。指定できる大きさは、システムを構築するときにジョブクラス毎に設定される。
TIME パラメータは、CPU を使用できる最大時間を決める。分、秒で指定する。ジョブの全てのステップが使用する時間を指定する。使用できる最大時間は、1439分59秒(TIME=(1439,59))。1440分を指定すると時間制限なしとなる。