「メインフレーム・コンピューター」で遊ぼうこんな時代に今さらメインフレーム・コンピューターに取り組むハメになったみんなが助けあうサイトです。RSSWordPress.orgコスパのいい社内システムの作り方メインフレームを扱っていると、軽い開発やメンテナンスにリソースを割けない、しかし、BPCも考えねば。解決策のひとつがクラウドにおくFileMakerです。コンソーシアム」設立のお知らせブロードリッジ、IBMと提携しハイブリッド・クラウド戦略を加速。Comments印刷用ページの表示ジョブとプログラムコンピュータで何らかの処理を行うためには、その処理の内容を1つ1つとても細かい手順としてあらかじめ記述しておかなければなりません。これがプログラムです。プログラムを動かすことによって始めてコンピュータは意味のある処理を行うようになります。MVS(メインフレーム)ではこれをコンピュータに仕事(JOB:ジョブ)をさせると言う概念で捉えます。そもそもコンピュータと言う機械が考えられ、開発され、発展してきた背景には人間が行ってきたさまざまな計算作業や集計処理などを少しでも早く、より大量に、そして正確に行わなければならなくなったからです。人間が仕事として行っていたことをコンピュータに行わせるのが目的ですから、コンピュータにおける処理(作業)を仕事と捉えるのは理にかなった考え方です。これがプログラムを動かすこと=ジョブ(仕事をさせる)となったわけです。このような考え方によってMVS(実際はMVS以前のOSやコンピュータでも)はプログラムを動かすことを、ジョブを実行すると言う考え方で扱います。ジョブは人間から見た仕事の単位で、またMVSから見た最も大きな仕事の単位でもあります。ジョブの構成1つの仕事が複数の作業によって成り立つことはよくあることです。資料を5部コピーする、ページ順に5冊に並べ替える、1冊ずつホチキスで留める。いうように3つの作業に分かれます。MVSのジョブも同じで1つのジョブを複数のプログラムの実行で成り立たせることができます。STEP)または単にステップと呼びます。1つのジョブは1つまたは複数のステップで構成されます。ステップは順番通りに実行されるMVSのジョブでは複数のステップは順序通りに実行されます。一般に1つの仕事を構成する各々の作業には順序に基づく関連性があります。上記の例でも、資料のコピー・並べ替え・ホチキス留めは順序通りでなければ処理できず、また同時に行うこともできません。コピーされなければ並べ替えはできないし、ページがバラバラの資料をホチキスで留めるのは仕事としては不正確です。MVSのジョブ・ステップにも同じ考えがあてはまります。場合、先行ステップの出力データ(処理結果)を後続のステップの入力データにして、さらに別の処理を行うというようにしてデータ処理の順番にステップが並べられ、ジョブが構成されます。典型的な例が「プログラムの実行形式モジュールを作る」です。コンパイルしてリンカーに掛けると言う2つの手順を踏みます。コンパイラーの出力がオブジェクトで、オブジェクトはリンカーの入力になります。リンカーの出力が実行形式モジュールになります。コンパイルとリンクは同時にはできませんし、順番を逆にすることもできません。コンパイル→リンクの順で処理をした結果が、出力された実行形式モジュールで、実行形式モジュールが作成されて1つの仕事が完了します。ジョブの種類MVSのジョブにはOSから見た用途に応じて3つの種類があります。JOB1つ目はJES(ジョブ入力サブシステム)によってスケジュールされイニシエーターと呼ばれるジョブの実行を行うアドレス空間によって実行されるジョブです。必要な時に実行され比較的に短時間で終了することが予定されるものです。ユーザープログラムはこのタイプのジョブとして実行され、主にバッチ処理を(あるいはバッチ処理として)行っていたことからバッチジョブと呼ばれます。基本的にMVSでのジョブはこのタイプを指します。プログラムをJOBとして実行するには、JCLをリーダーでJESに読み込ませます。STC2つ目はイニシエーターによらず、MVSから直接実行されるスターティッド・タスク(STCタスク)です。JOB同様JCLは使用されますが、リーダーを使わずOSのコマンドで直接MVSに実行させます。STCタスクは主にシステムに常駐してサービスを行うプログラムを実行するために使います。STCタスクはバッチジョブと違い、入力データを全て処理し終えたら終わるのではなく、オペレーターが指示をするまでOS内に居続け、主にMVSの機能を補完したり、MVSに無い機能を提供したりするために使われます。データベースやオンライン制御システムなどもこのタイプです。TSU3つ目はTSOユーザーです。対話処理を行うためにTSOにログオンすると、TSOの管理プログラムから起動されて、ログオンしたユーザー自身が1つのジョブとして扱われます。TSOからのログオフによってジョブとしても終了します。JCLOS/360以前のコンピュータではジョブに対応したプログラムを実行させるのはオペレーターの仕事でした。オペレーターはプログラマーが作成したプログラムを実行指示書に基づいて、プログラムと入力データを準備し、カードリーダーやテープなどの装置にセットし、プログラムを開始させました。終了すれば使い終わったデータをはずし、片付け、そして次のジョブの実行指示書によって準備を始めるといった作業を繰り返します。実際にプログラムが動く時間よりもはるかに多くの、人間による準備と後始末作業の時間が掛かり、CPUの性能が上がるにつれ深刻な問題となりました。OSというソフトウェアは、このような無駄を少しでも減らし効率を高め生産性を上げる目的で誕生しました。Language:ジョブ制御言語)です。JCLを使用してジョブにおける作業の内容と使うコンピュータ資源をOSに直接指示するわけです。言語となっていますがスクリプトの1種で、プログラマーがOSに渡す「作業指示書」です。JCLによってオペレーターは紙の指示書によるジョブの準備から解放され、プログラマーはOSに直接指示できることになり、運用の効率と正確性が向上したことは言うまでもありません。OS/360で採用されたJCLの基本的な文法や機能は、現在のz/OSでもほとんど変化はなく互換性のためとは言え、当時の実装の完成度を示すものでもあります。JCLは大きく3つの要素(JOB文、EXEC文およびDD文)で構成され、先頭が2つの//記号で始まる80バイトの固定長レコード(カードイメージ)の集合です。このJCLをリーダーで読み取らせることで、ジョブが開始されプログラムが実行されます。リーダーを介してMVSにJCLを読み取らせる操作のことを「サブミット」と呼びます。JCLについては「JCL入門」にて解説してあります。ローディングと実行JCLがサブミットされジョブが開始されると、DD文で指定された資源が割り振られ、プログラムの実行が始まります。MVSはEXEC文で指定されたプログラムを探すことから始めます。DD文があればそこで指定されたデータセットからプログラムを読み込みます。STEPLIBが指定されないか、指定されてもそのライブラリーにプログラムが入っていなければOSのリンクライブラリーから探し出します。ライブラリーに入っているプログラムはMVS用の実行可能形式になっています。実行可能形式はソースプログラムがコンパイルされて出来上がったオブジェクトプログラムがさらにリンケージ・エディター(リンカー)によってロードモジュールに変換されたものです。ロードモジュールは命令とデータの集合であるプログラム部分(モジュール・テキスト)とプログラムの属性や大きさ、実行を始める最初の命令位置、いつどのような言語で作成されたなどの制御と管理情報の部分で構成されています。MVSはEXEC文で指定されたプログラム(ロードモジュール)をライブラリーに見つけるとそれをメモリー上に読み込みます。この動作をローディングと呼びます。MVSによってプログラムがローディングされ、実行の制御に必要なコントロール・ブロックが作られた後、プログラムの実行が始まります。12:12STCタスクについてですが、システム上常駐されるか否かは、EXEC文のPGM=で指定されたものに依存します。IEFBR14をPGMで指定すれば、速やかに終了します。常駐するか否かは、プログラムの内容に依存するもので、STCだからOSの機能を補完する、もしくは、ONLINE制御システムとなるものではありません。単純にSTARTコマンドで起動したSTCタスクは、JES2の元で稼動します。xxxx,SUB=MSTRの指定が必要です。このSUB=MSTRは、マスタースケジューラーの元で稼動することを指示するものです。JES2のスプールにSYSOUTを出力することやJOBLOGを出力することはできないと言うことになります。「オペレーターが指示をするまでOS内に居続け」というのは、MODIFYコマンドやSTOPコマンドを受け付けるようにプログラムをコーディングして行えることで、STCに限らず、JOBでも同様です。22:50元の記事では「STCは?使われます」であり、STCだから常駐になる、という記述ではないですね。知らずに読むと誤解を産むでしょう。STCはJCLの解釈が必要なため、JES2の力を借りますが、元の記事でいいたいことはアドレススペースが誰によって作られるか、が本質だと思います。そもそもSUB=MSTRというマスターサブシステムはMVS上ではひとつしか存在することが許されません。それが投入されるのはマスターJCLという極めて特殊な方法です。この「ジョブ管理」という一般論でマスターサブシステムを議論するのは適切ではないと思います。「STCタスクはバッチジョブと違い、入力データを全て処理し終えたら終わるのではなく、オペレーターが指示をするまでOS内に居続け、主にMVSの機能を補完したり、MVSに無い機能を提供したりするために使われます。・バッチジョブと異なり、入力データを処理し終えたら終わるのではない・オペレータが指示をするまでOS内の居続け・主にMVSの機能を補完したりMVSに無い機能を提供とあります。STCの利点としては、コンソールから実行できるということ。TSOやそのほかの対話式編集機能などが無くてもSTARTコマンドによってコンソールから実行できることにメリットが有ります。基本的に通常STARTコマンドで実行される場合、JES2の配下となり、JES2によってSTC番号が割り当てられます。INITと同じレベルということです。対してSUB=MSTRを指定した場合、JES2配下ではなく、マスタースケジューラーの配下となります。これは、JES2と同等の位置づけで動くものでSTC番号は割り当てられません。LLAやVLFなどがそれにあたります。JES2が停止しても動くことができる物で有る反面、SYSOUT=などといったステートメントは定義することができないものです。たしかに、マスターサブシステムは、システムの中に唯一無二ですが、SUB=MSTRとは別ですよ。私の言わんとしているのは、マスターサブシステムがどうのこうのではなくてSTCの解釈として誤り、もしくは、誤解を生む記述がされていますという指摘です。17:26コメントをくださった皆様、貴重なご意見をありがとうございます。STC,JOB,TSUについての説明は、ジョブ(プログラム)の用途によって一般的にどのように使い分けられているかを、このカテゴリーのターゲットであるメインフレーム(MVS)ビギナーにも理解しやすい内容でまとめたものです。プログラムも書いたことはない、コマンドも知らない、と言う前提の方への説明と考えた時、用途による使い分けならわかりやすいだろうとの思いからです。ビギナー向けであるほど、説明に例外や言い訳を書かない方がいいと思い、言い切った形の文章になっています。確かにSTCだから常駐するわけではなく、STCだからOPコマンドを受け取れるわけではありません。そのような機能をプログラム自らが持つ必要があります。そのようなことを初心者向けの記事でずらずら書き連ねても返ってわかりにくくなると考え、STC,JOB,TSUの3種類が一般的にどのように使い分けられるか、と言った視点での説明をしたものです。最初にこのように覚えても私は決して誤りではないと考えますし、いずれ実際にプログラミングを行ったり、システムの運用管理などに携われば、その方なりにSTCとJOB,TSUの違いをより明確に理解されるはずです。