05a.タスクとプログラム、ジョブの関係

タスクとプログラム、ジョブの関係

これまでコンピューター・システムに携わっていなかった人には、z/OSにおけるジョブ、タスクとプログラムの関係について、何となくわかるようなわからないようなということがあるかも知れません。z/OSシステムにおけるそれぞれの役割は、身近なものに例えて考えてみるとわかりやすくなるかも知れません。ここでは、普段の生活で利用するスーパーマーケットのレジ精算にあてはめて考えてみました。

下記の図は、スーパーのレジ待ち行列の様子を示したものです。赤い丸がレジ待ちのお客、水色の四角がレジ、青い下向き三角がレジ打ちの従業員を表しています。それぞれをz/OS側にあてはめると、赤い丸のレジ待ちのお客が「ジョブ」、水色の四角のレジが「ジョブを実行するイニシエーター」、青い下向き三角のレジ打ちの従業員が「タスク」です。レジ打ちの従業員には、商品のバーコードを読み取ったり、代金を受け取ったりと言った仕事としての役割があって、タスクにおいてはプログラムがタスクの役割を示します(プログラムで記された命令による処理を実際に行うのがタスク=プログラムを実行する)

タスクが増えることで処理効率が上がる

上記の図が示すように、タスクが増えることで全体の処理効率が上がります。複数のタスクでコンピューター処理を行うことを「マルチ・タスク処理」とか「マルチ・タスキング」などと言いますが、マルチ・タスク処理のプログラム・デザインは大きく2つに分けることができます。
1つは、機能や役割に応じて処理タスクを分ける考え方です。異なる処理をそれぞれのタスクに担わせるものです。上図では、例2が商品のバーコードを読み取る役割と代金を受け取る役割の2つのタスクで処理を行っています。それぞれのタスクで役割が異なるため、それぞれのタスクは必ずしも同じ量の作業を行うことにはなりません。しかし、同じ時間内であれば全てを1人で行うよりも多くの作業をこなすことができます。
もう1つは、機能や役割ではなく量(作業量)に応じて処理タスクを分ける考え方です。同じ処理をそれぞれのタスクに担わせるものです。上図では、例3が同じレジ精算の作業を2つのタスクで処理を行っています。それぞれのタスクが同じ作業を行うので、作業量に応じてタスクを増減させることで同じ時間内でこなせる作業量を変化させることができます。混んでいる時には処理タスクを増やすことで、待ち行列を早く解消させるなどの調整がし易くなります。(同じ数の利用客が殺到すれば、ATM台数が少ない銀行ではATM待ちの長い行列が出来、ATM台数が多い銀行ではさほど待たずにATMが利用できることと同じ)
実際のオンライン・トランザクション処理システムなどでは、異なる機能や役割のタスクと同じ処理を行う複数のタスクを組み合わせて設計されることも多く、単純に2つに1つということは少ないです。

最近では、レジ打ちの従業員の役割自体を顧客が行うセルフレジも多くなっていますが、タスクとしての役目を従業員が行うのか顧客が行うのかが違うだけで、上記の図のような構成や流れで処理が行われることは変わっていません。