Job Entry Subsystem 2/3

Job Entry Subsystem (JES、ジョブ入力サブシステム) は、IBMのメインフレーム用オペレーティングシステムの MVS系(OS/360、MVS、OS/390、z/OS)が使用する、ジョブの受け取り、スケジューリング、処理結果の出力を行うサブシステムである。
概要.
ジョブ(バッチの単位)の管理実行や、その記述言語であるJob Control Language(JCL)は、MVS系および互換OSの特徴的な機能と言える。純粋なバッチ(純バッチ)の他、VTAM、TSO、IMS、CICSなどの他のサブシステム(いわゆる常駐プロセス)も、「STC」という形でJES経由で起動するため、JESはMVS系OSでは事実上の必須機能である。
当初はMVS本体とは別売(オプション)だったが、その後「MVS/JES2」「MVS/JES3」のようにセットとなり、OS/390以降では他の大多数のサブシステムと同様、OSパッケージ自体に含まれた。ただしJES自体の基本機能は変わっていない。
JES には2つのバージョン、JES2 と JES3 がある。この2つのバージョンには、非常に小さい違いしかない。投入するジョブを書くJCL にも、ほんの小さな違いがあるだけである。
なお、同じIBMメインフレーム用OSでも、VSE系では当初はJCS(Job Control Statement)と呼ばれ、機能や構文が異なる。
またIBM互換OSである富士通のMSP/XSP、日立製作所のVOS3にもJCLがある。日本電気のACOSには、種類によっては類似のジョブ制御言語が存在する。
比較.
JCLは、オープン系における、MS-DOSやWindowsのバッチファイルや、UNIX系のシェルスクリプトなどに相当するが、オープン系のこれらは補助的なものであるのと異なり、MVS系のJCL(およびJCLを処理するJES)は必須であり、プログラム(プログラマー)と運用管理(オペレーター)を分離している。
MVS系では、JCL上で明示指定しない限り、プログラムがディスク上のファイル(データセット)を読む事も書く事も一切できないのである(ダイナミックアロケーションも基本的には同様)。JCLを記述・保守する手間がかかる反面、そのプログラムがプログラム自体の知識が無くても使用されているファイル(データセット)を把握でき、またファイル名や配置場所の変更なども容易に(プログラム自体や設定ファイルの変更リスクを負うことなく)行える。
「ユーザーがコンピュータ全体を支配する。ユーザーが便利な方が良い」オープン系と、「最初から企業向けに役割分担されている。管理されている方が良い」メインフレームの、基本思想や文化の違いと言える。
歴史.
JES2 (Job Entry Subsystem 2) は、1960年代半ばに NASA のために IBM が設計した HASP (the Houston Automatic Spooling Program) から来たものである。JES3 (Job Entry Subsystem 3) は、OS/360 のレコード I/O システム ASP (the Attached Support Processor) から来たものである。
JES3 は、JES2 よりも、ネットワークを用いたシステムに向いている。JES2 は、どちらかというとシングルプラットフォーム、シングルタスク環境に適しているシステムである。
HASP は、スケジューリングやジョブフローのコントロールといった、ジョブマネージメント、データマネージメント、タスクマネージメント機能を提供するコンピュータのプログラム（群、コンピュータサブシステム）である。JES2 を構成する大部分のプログラムの名前や、JES がオペレーター宛てに出力するメッセージの中に、HASP はまだ生き残っている。JES2 は、HASP II の機能（受け取ったジョブのシステムへの投入、ジョブが生成・出力したすべてのアウトプットデータの処理）の拡張の1つである。
つまり、JES は次のようなタスク・機能である。すなわち、MVS の下で、ジョブを投入し、アウトプットを出力し、それらの実行スケジュールをコントロールする。JES は OS MVS のための効果的なスプーリング、スケジューリング、マネージメントを提供するようにデザインされている。しかしこの説明は、なぜ MVS が JES を必要とするのかを説明していない。基本的に、たくさんのタスクへのジョブプロセッシング機能を切り離すことにより、MVS がより効率的に稼動することを目指したものである。大抵の場合、システム資源は各々のジョブへ割り当てられたタスクによって混み合っており、他のタスクは資源が利用可能になるのを待っている状態になっている。そこでシンプルに、MVS を、ジョブおよびシステム資源のマネージメント機能と、OS のより基本的な機能と に分けたのである。これによって、（アプリケーション）プログラムがデータを処理する前と後のジョブのマネージメントを JES が受け持ち、このマネージメントと平行して、OS 本体 (MVS) は（アプリケーション）プログラムによるデータ処理のコントロールを受け持つことになったのである。