最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

4.4.サブシステムとジョブ待ち行列

[ Previous ] [ HOME ] [ Upper ] [ Next ]


ここでは、サブシステムとジョブ待ち行列の話題です。

サブシステム記述とジョブ待ち行列

サブシステム記述には、必ずといっていいほど、ジョブ待ち行列(Job Queue;JOBQ)が定義されていますね。このJOBQは、出力待ち行列とともに、「待ち行列(Queue)」の一つです。出力待ち行列は、印刷などコンピュータからのデータの出力の順番待ちをする仕組みでしたね。それと同じく、JOBQは、いわば、「入力」の順番待ちをする仕組みです。入力されるのは、「ジョブ」です。

OUTQと違い、JOBQはしっかりと、SBSD内に定義されます。たいてい、このJOBQはSBMJOBなど、SBM(Submit;書類などを提出すること、IBMでは、「投入」と訳す。)で始まるコマンドで、指定されます。下図を見てください。

jobqsubs.gif (34403 バイト)

簡単に言ってしまえば、

SBMJOBで、JOBQにジョブが投入されると、サブシステムの定義内で、そのJOBQに連結した(活動中の)サブシステムの上で、そのジョブが動き出します。

この時、投入元のジョブとは切り離され、独立して、ジョブが動き出します。

JOBQの決定シーケンス

さて、簡単に言えば、これだけですが、細かく見てゆくと、様々なパラメータが、このジョブの生成に関わっています。

バッチ投入コマンド(SBMJOB)では、ジョブの要求データは、必ず、JOBQに入らねば、なりません。というより、JOBQ以外、行き場はありません。このJOBQはどのように、決定されるのでしょうか。JOBQ決定の要素を挙げます。

SBMJOBのJOBQの省略値は、*JOBDですね。つまり、同じ、SBMJOBのキーワードJOBDに指定されたものの中にあることになります。さらに、JOBDの省略値は、*USRPRFですので、このユーザープロファイルに指定された、JOBDから指定されます。このJOBQに直接、JOBQ名を指定してもいいですし、特別な、JOBDを指定して、間接的に指定してもいいです。まとめると、

  1. USRPRF指定 から JOBD名、さらにそこから JOBQ名
  2. JOBD指定 から JOBQ名
  3. JOBQ名指定

簡単ですね。

JOBQの設定方法

このJOBQは、CRTJOBQで、作成します。そして、そのJOBQは、ADDJOBQEによって、特定のサブシステムに関連付けられます。このADDJOBQEは、昔はそのサブシステムが活動中は、できなかったのですが、いつの頃からか、活動中のサブシステムにもADDJOBQEできるようになっています。(V3R1はできる)。

この、ADDJOBQEで重要なのは、MAXACTです。これは、そのJOBQに投入されたジョブをいくつ同時に開始するか、の指定です。もし、10個のジョブが、JOBQにあった場合、サブシステムで、まず活動するジョブの数は、MAXACT=1ならば、一個、それが終わったら、次の一個、さらにそれが終わったら、次の一個と10回繰り返します。また、MAXACT=5ならば、最初5個動いて、さらに、一個終わるたびに、JOBQ上の残りが、一つ減って、活動状態になるわけです。但し、サブシステムのMAXJOBSがもし、一個ならば(普通しない)、JOBQが10っ個もぶら下がっていても、活動するジョブは、一個一個です。このJOBQ間の優先順位は、SEQNBRに影響を受けます。(サブシステムのMAXJOBSは、あくまで、あるサブシステム上で、同時に活動状態にできる、ジョブの数です。)

MAXACTのマニュアルからの解説

最大活動レベル (MAXACT) パラメーターは、ジョブ待ち行列項目、通信項目、経路指定項目、またはワークステーション項目を使用して並行して開始し、活動状態を維持することができるジョブの最大数を指定します。ジョブは、実行が開始された時点から実行が完了する時点まで、活動状態であるとみなされます。

これには、次に示す時間が含まれます。

  1. ジョブが実際に処理されている時間。
  2. ジョブがワークステーション・ユーザーからの応答を待っている時間。
  3. ジョブが開始されていて、処理可能ではあるが、実際には処理装置を使用していない時間。たとえば、ジョブが指定のタイム・スライスを使い終えて、別のタイム・スライスが割り当てられるのを待っている時間。
  4. ジョブが開始されたが、処理のために使用できる状態になっていない時間。ジョブがそのメッセージ待ち行列にメッセージが送られてくるのを待っている時間。

 

SEQNBRのマニュアルからの説明

サブシステムがこのジョブ待ち行列を処理する順序を決めるために使用するジョブ待ち行列の順序番号を指定します。

10: 順序番号 10 がこのジョブ待ち行列に割り当てられます。

順序番号: ジョブ待ち行列に割り当てられる順序番号を指定してください。順序番号は、サブシステム記述内で固有でなければなりません。指定できる値の範囲は1から9999までです。

まずサブシステムは、一番低い順序番号のジョブ待ち行列からジョブを選択します。その待ち行列にあるすべてのジョブが処理されたか、あるいはMAXACTパラメーターで指定したジョブの数に達したときに、サブシステムは、次に高い順序番号の待ち行列にあるジョブを処理します。すべてのジョブ待ち行列項目が処理されるまで、あるいはサブシステムが全体の最大ジョブ(サブシステム記述のMAXJOBSパラメーターで指定された)に対するその限界に達するまで、この処理は続行します。順序が中断され、サブシステムがより低い順序番号の待ち行列を処理する場合もあります。これは、次の状態のいずれかが生じた場合にこのサブシステムで起こります。

  1. 保留中のジョブまたはジョブ待ち行列が解放される場合
  2. ジョブが待ち行列に置かれるか、または転送される場合。
  3. 新しい待ち行列が割り振られる場合
  4. ジョブが終了する場合

直接指定の例

さて、例として、新しくQGPLの EODというJOBQを、既存のQGPLのサブシステムBATCHに追加して、そこでジョブを動かすシーケンスを掲げます。

  1. CRTJOBQ QGPL/EOD TEXT(' END OF DAY')         
  2. ADDJOBQE SBSD(QGPL/BATCH) JOBQ(QGPL/EOD) MAXACT(1) SEQNBR(20)        
  3. SBMJOB JOB(EOD980310) CMD(CALL EOD) JOBQ(QGPL/EOD) ...         

これで、ジョブEOD980310は、JOBQ EODに投入され、もし、サブシステムBATCHが活動中ならば、CALL EODがサブシステムBATCH上で実行されます。SEQNBRは、適当なものを指定すること。(20でなくてもいい)。

間接指定の例

さらに、ユーザープロファイル DAILYを作成して、ジョブ記述DAILYを作成して、それらを、SBMJOBで指定することも可能です。

  1. CRTJOBD QGPL/DAILY JOBQ(QGPL/EOD) ...         
  2. CRTUSRPRF DAILY ...JOBD(QGPL/DAILY) ...        
  3. SBMJOB JOBD(EOD980310) CMD(CALL EOD) USER(DAILY) JOBD(*USRPRF) JOBQ(*JOBD) ...        

これをすることによるメリットは、

  • SBMJOBに直接、JOBQを指定してしまうと、そのJOBQを変えたい時は、プログラムのリコンパイルとなってしまいますが、間接的に指定する2番目のやり方だと、修正は、JOBD:DAILYの変更だけでいいです。
  • 2番目のやり方ですと、誰が実行してもスプールは、必ずユーザーDAILYなので、WRKSPLF DAILYで、スプール検索ができます。このように、なるべくUSER名を指定したい場合に、便利です。

というところでしょうか。毎日のジョブで、実行者に依存しないジョブ(誰がやってもよい、日締め処理など)は、やはり、独立したJOBDとUSRPRFを作った方が、AS/400上にドキュメント(記述)が残るので、望ましいと思います。ここから分かるように、各個人がSBMJOBする時も、USRPRFとJOBDからJOBQは決定できます。


サブシステムはとても奥が深いのですが、多くの省略値(ディフォルト)を持っています。この省略値を、注意深く見ることで、そのOS全体の思想というか、目論見というか、が次第に見えてきます。様々な、記述が、相互に絡み合い、渾然一体となって、一つのジョブなり、結果なりを出します。OS400の素晴らしさは、この周到に準備された、省略値にある、といっても過言ではないと思います。なるべく、コマンドの省略値をよく見てみてください。きっと、そのコマンドの性格から、ひいては、OS全体のコンセプトも見えてくるのではないでしょうか。そして、その省略値を生かした、システム作りが、OSとの調和を生むのではないかと思います。これが、一種のデファクトスタンダードにつながっていくことでしょう。

もちろん、省略値以外の値で、システムを作成することも可能ですし、それを止めるつもりもまったくありません。その点、誤解の無い様に、お願いします。


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送