プログラムとは何か?と言う問いになら、ほとんどの人は簡単に答えられることと思います。 コンピュータで何らかの処理をさせるための、命令手順をまとめたものです。OSからアプリケーションまで、コンピュータで行われるあらゆる処理は、すべてこのプログラムに基づいて実行されます。メインフレームからパソコン、組み込みの機器まですべてのコンピュータで同じです。 機能毎にプログラムを作成したり、処理毎にプログラムを用意するので、プログラムはコンピュータにおける処理の実行単位とも言えます。
メインフレームでは、プログラムとは別に「ジョブ」と呼ばれるもので、処理の実行を管理します。特にシステム運用に携わる人はプログラムよりはジョブの方が日々の仕事に密接するものです。
ジョブとは何か?
MVSはプログラムを動かすことを、ジョブを実行すると言う考え方で扱います。ジョブ(job)とは仕事のことです。元々コンピュータ、特にメインフレーム・コンピュータが生まれた背景には、人間が手作業でやっていた仕事(膨大な事務処理作業)を機械に行わせることがありました。ジョブはMVSにおける仕事の単位として捉えることができます。一方プログラムは、MVSではジョブで仕事を行うための道具の1つとして扱われます。
ジョブ・リソース(資源)
仕事を行うためには、リソースを必要とします。人間社会でも仕事をするためには、人、金、オフィス、電話、パソコン、情報などさまざまなものがリソースとして必要です。 MVSのジョブでも同じことが言え、処理の入力となるデータや出力を書き出すデータセット(ファイル)やデバイス、プログラムが使用するメモリーなどはジョブが使うリソースとして位置づけられます。実際の業務処理などを行うプログラムそのものもジョブから見ればリソースの1つに過ぎません。 システムの運用にはこれらのジョブ・リソースを効率よく利用することも求められます。
ジョブ・ステップ
人間の仕事がいくつかの作業で構成されるように、MVSのジョブも複数の作業で構成させることができます。 ジョブを構成する1つ1つの作業を「ジョブ・ステップ」と呼びます。ジョブは最低でも1つまたは複数のステップで構成されます。それぞれのステップの処理を実際に行うのがプログラムとなります。 MVSのジョブ・ステップは順番通りに実行される、と言う基本的な性質を持っています。どの作業(ステップ)をどのような順序で実行し、それぞれの作業でどのようなプログラムやデータ、デバイスを使うかを記述したのがJCL(Job Control Language)です。ジョブはJCLによって定義され、オペレーターによって実行されます。
ジョブ・スケジューリング
実際の現場では、コンピュータで処理する業務が一つのジョブだけで構成されることはありません。少なくても数百、多ければ数千、時には数万と言った数のジョブで行われます。ジョブの実行はオペレーターによって行われます(正確にはオペレーターは実行を依頼する)が、数多くのジョブをシステムを遊ばせることなく、効率よく実行しなければなりません。これを行うOSの機能がジョブ管理機能です。MVSではさらにJES2(MSPではJES、VOS3ではJSS3)と呼ばれるジョブ入力サブシステムが使われ、OSと一体になって、ジョブの実行や実行結果の出力を効率よくスケジュールします。
OSやJES2側で行うジョブ・スケジューリングは主にCPUやメモリー、入出力デバイスなどのハードウェア資源を効率よく使用して、コンピュータ処理の生産性を少しでも上げるために行われます。しかしジョブ・スケジューリングにはこれとは別の視点で捉えられるものがあります。それはジョブの順序性に基づくスケジューリングです。実行するジョブが増えてくると、ジョブの先行関係や後続関係はより複雑になってきます。あるジョブが作成し、出力したデータを、別のジョブが入力に使用するような場合、そこには先行関係に基づく順序性が生まれます。それらのジョブは順番を逆にすることはできませんし、同時に実行することもできません。ジョブ(プログラム)が正常に終了したか否かによっても、次に実行するジョブが変更されることもよくあります。
これらのようなジョブの内容や実行結果などによるスケジューリングは、アプリケーション・プログラムの処理内容や、使用するデータの内容に依存し、個々のユーザー毎に変わるため、OSやJES2が行うことではなく、コンピュータを運用する人間(オペレーター)が行うことです。1日に数千以上ものジョブを扱うような大規模なシステムでは、オペレーターがマニュアル作業でこなすだけでは、誤りが発生したり、リソースを有効に利用しきれない、など量的な無理が出てくるため、現在では多くのユーザーでソフトウェアによる先行、後続管理や実行管理も行われています。ジョブ・ステップの順序性は、1つのジョブの中で上から下へストレートに流れるだけなので比較的単純ですが、複数のジョブの順序性はジョブの数が多くなるにつれ複雑になります。MVSでは1つのジョブ内の各ステップは順番通りに実行されますが、ジョブそのものは複数あれば、OSによって同時に実行させることができます。そのため先行と後続の関係を明確にして、誤ったタイミングで実行されないようにしたり、無駄に空き時間が生まれない(実行できる状態にも関わらず、実行スケジュールが遅れる)ようにしなければなりません。
MVSでは「ジョブ」がコンピュータにおける仕事の基本となり、人間から見た仕事の単位でもあります。プログラマーであってもプログラムを書けるようになるより、まずはジョブを組み立て実行し、プログラムがどのように位置づけられるかを理解しなければなりません。オペレーターやアドミニストレーターであれば、必要なリソースが効率よく使われるようにジョブを構成し、システムを運用することが求められます。時にはジョブ運用の観点から既存のプログラムの改善を立案することもあるでしょう。Windowsなどではプログラムそのもの(exeファイルなど)を直接実行するため、ジョブを意識することはほとんどありませんが、メインフレームではジョブが処理の基本となります。
次回は実際にジョブを定義するためのJCL(ジョブ制御言語)についてお話しします。
コメント
投稿にはログインしてください