05.タスク管理

By 神居 - Posted: 2008/10/24 Last updated: 2009/10/17 - Leave a Comment

タスク

タスクはCPUから見た作業の単位です。アドレス空間はジョブ(イニシエーター)に対して割り当てられますが、タスクはジョブ・ステップに割り当てられます。JCLのEXEC文で指定されたプログラムは、このタスクの下でCPUが割り当てられ実行されます。このタスクを「ジョブステップ・タスク」と呼びます。プログラムから見るとこれがメインタスクとなります。

MVSにはタスクの他にSRBルーチン(MSPではアクティビティ、VOS3ではアクション)と呼ばれるCPUの割り当てを受ける作業単位もあります。SRBルーチンは主にMVSのOSとしての制御処理に使用される優先度の高い作業単位です。SRBモジュールはタスクで実行される一般のプログラムに比べてプログラミング上も多くの制約があり、高度な知識が求められる難易度の高いプログラムですが、タスクよりも少ないオーバーヘッドで動作することができます。MVSはOS自身の制御処理に費やすオーバーヘッドを少しでも減らすために2種類の実行単位を用意しているのです。

1つのアドレス空間の中には複数のタスクを作ることができます。またどのタスクであっても新たなタスクを作ることができます。MVSではアドレス空間単位にタスクが階層的に構成され、それぞれのタスクは親子関係を築きます。タスクを生成することをATTACHと呼び、ATTACHしたタスクが親タスクでATTACHされたタスクが子タスクです。同じ親タスクからATTACHされた複数の子タスクは兄弟の関係にあります。親タスク自身もさらに上位の親タスクからATTACHされた子タスクでもあって、人間の親子関係をそのまま当てはめることができます。ジョブステップ・タスクもMVS自身の制御用タスクからATTACHされる子タスクでもあるのです。

アドレス空間内のタスク構成

アドレス空間内のタスク構成



割込みとディスパッチ

割込みはいつ発生するかわからない、あるいはいつ完了するかわからない事象(Event:イベント)をタイミング良くCPUに伝えるハードウェアのメカニズムです。MVSはこの割込みによってドライブしているOSと言ってもいいでしょう。IPL?初期設定が終了した後、MVSのすべての動作は割込みがきっかけとなって行われます。特にタスクのディスパッチングとは密接な関係があります。
どのような割込みが処理されるかはこちらのページを参照下さい。「メインフレームのしくみ(割込み機構)」

割込みが発生し対応した制御やサービスがなされた後に、MVSは割り込まれて中断していたタスクの実行を再開します。あるいは他の実行可能なタスクやSRBを実行します。これは割込み処理ルーチンによって行われるのではなく、ディスパッチャーによって行われます。
MVSでは割込みが契機となって最終的にディスパッチャーへ制御が戻り、そこで次のタスクにCPUが割り当てられます。このサイクルの繰り返しによってマルチタスク処理を行っています。MP構成のプロセッサーでは複数のCPUがそれぞれマルチタスク処理を行います。


終了と回復

プログラムは自分自身の最後の命令を実行することで処理が終了します。言語によってさまざまですが、RETURN、STOP RUN、EXITなどが使われます。これによってプログラムを動かすタスクもその役割が終了します。MVSはタスクを開始するときに、プログラムが最後の命令を実行するとMVSのあるプログラムが実行されるようにしておきます。最後の命令が実行された結果、制御が渡るのが終了処理です。終了処理とはプログラムが処理を完了した後、またはバグやエラーなどの発生で処理が中断された時に、使用していたシステム資源を開放することです。具体的にはプログラムで使っていたメモリー領域を解放したり、つかんだままの排他制御を離したり、割り当てられたデータセットを解放したりです。

終了には2種類あり、正常終了と異常終了です。正常終了はプログラム自身によるもので、1通りの処理が終わり最後の命令を実行することによるものです。異常終了はプログラムのバグによって誤った命令を実行したり、入出力要求でエラーが発生したりして、MVSによって実行が中止されることでABEND(アベンド)と呼ばれます。場合によってはプログラム自らがABENDを要求することもあります。MVSでは正常であっても異常であっても同じメカニズムで終了処理を行って資源を解放します。異常終了であればもちろんですが、正常終了であってもプログラムが使った資源を解放している保証はありませんし、何よりプログラムは自分自身がローディングされているメモリー領域を解放することはできません。見た目の終わり方は違っても内部での後始末処理としては同じだからです。
回復は異常終了におけるフェーズの1つで、一言で言えばABENDをなかったことにする仕組みです。特にオンライン・リアルタイム処理などでは1つのトランザクションが原因でエラーになったとしても、全体を異常終了させるわけにはいきません。またMVS自身にエラーが発生しても、システム全体の運用に関わる重大なものでなければ、OSとしての制御を継続しなければなりません。そこでMVSでは回復機能を提供して、ソフトウェアやハードウェアにエラーが発生してもタスクがプログラムの実行を継続できるようにしています。

Posted in ..基礎編 • • Top Of Page