Natural UTM インターフェイスのドキュメントのこの部分では、次のトピックについて説明します。
Natural UTM アプリケーションでのリソース利用管理の向上を目的として、アカウンティングレコードをユーザー出口 ACCINIT
および ACCEXIT
によって利用可能にします。
ユーザー出口 ACCINIT
は、各ダイアログステップの開始時に Natural UTM インターフェイスによってアクティブにされます。
ユーザー出口 ACCEXIT
は、マクロ NURENT
のパラメータ ACCNT
に基づいて、Natural UTM インターフェイスによってアクティブにされます。
ACCNT=DIAL |
ユーザー出口 ACCEXIT は、各ダイアログステップの終了時にアクティブになります。
|
ACCNT=APPL |
ユーザー出口 ACCEXIT は、アプリケーションの変更のたびに(新しい Natural ログオン ID)、アクティブになります。
|
どちらの場合でも、セッションの終了時にアカウンティングレコードが提供されます(FIN
システムコマンドまたは TERMINATE
ステートメント)。
0 - 7 | 論理 UTM 端末名 | DS | CL8 |
8 - 15 | ユーザー ID | DS | CL8 |
16 - 23 | 現在の Natural アプリケーション名 | DS | CL8 |
24 - 27 | Adabas の呼び出しの数 | DS | F |
28 - 31 | 累積メッセージ長 | DS | F |
32 - 35 | サブルーチンを含む Natural での経過時間(ミリ秒) | DS | F |
36 - 37 | 出力するページ数 | DS | H |
38 - 39 | 端末 I/O 転送の数 | DS | H |
40 - 49 | (ユーザーエリア) | DS | CL10 |
50 - 51 | 未使用 | DS | CL2 |
52 - 55 | Adabas コマンドタイム(ミリ秒) | DS | F |
56 - 63 | 最後のトランザクションプログラムの名前 | DS | CL8 |
アカウンティングレコードのユーザーエリアは、必要に応じて、追加的なアプリケーション固有のアカウンティング情報に使用することができます。 アカウンティングエリアは、ユーザー固有の UTM 通信エリア KB(Kommunikationsbereich)にあります。
UTM KB の現在のアドレスは、必要に応じて、マクロ NATUTM
のエントリ CMKBADR
で検出することができます。それ以外の場合、マクロ NATUTM
のパラメータ KB
のオペランドは YES
に設定する必要があります。 この場合、Natural は通信エリアのアドレスをすべてのサブルーチン呼び出しの最初のパラメータとして渡します。
ユーザー出口ルーチン ACCEXIT
は、アカウンティングレコードを Adabas ファイル、共有シーケンシャル PAM データセット、またはタスク固有の SAM データセットに保存することができます。 プログラム ACCEXIT
では、アカウンティングレコードを保存する方法の例が示されます。「Software Exchange」を参照してください。
UTM 環境の Natural で使用するためのユーティリティプログラムがいくつか提供されています。
これらのプログラムを使用する場合、次のルールが適用されます。
これらのユーティリティをアセンブルする場合、Natural および UTM のマクロライブラリを使用する必要があります。
特定のプログラムを使用する場合:
これらのユーティリティプログラムについて、以下で簡単に説明します。
NATDUE
| INPTEX
| NATPRNT
| UTMTAC
| TACSWTCH
インターフェイス、有効なパラメータ値、ロジックの概要などの詳細な情報は、それぞれのプログラムのメンテナンスログで確認できます。
プログラム NATDUE
を使用すると、ユーザーが現在のダイアログステップにデータを入力したかどうか、単に EM/DÜ または DÜ が押されたのかを Natural プログラム内で確認することができます。
NATDUE
を呼び出す場合、ユーティリティプログラム INPTEX
を使用する必要があります。 プログラム INPTEX
は、フォーマット出口モジュール FREXIT
でユーザー出口 INPTEX
に対応し、各ダイアログステップでデータが入力されたかどうかをチェックします。 このテストの結果に従って、それ以降プログラム NATDUE
によるチェックの対象となるフラグが、通信エリア KB(Kommunikationsbereich)内で設定されます。
* PROG1 - EXAMPLE FOR CALLING THE SUBROUTINE 'NATDUE' RESET P1(A1) ... ... INPUT USING MAP ... CALL 'NATDUE' P1 IF P1 = 'Y' DO ... /* INPUT FROM USER IF P1 = 'N' DO ... /* NO INPUT FROM USER IF P1 = 'E' DO ... /* ERROR ... END
ユーティリティプログラム INPTEX
は、フォーマット出口 FREXIT
にある同じ名前のユーザー出口に対応します。
重要:INPTEX
は、Natural UTM アプリケーションのフロントエンド部分とリンクする必要があります。
注意: このプログラムに変更を加える場合は(例えば端末画面の特定の行に入力されたデータを無視するようにするなど)、ユーザーの責任において行ってください。 |
このプログラムの機能は、各入力メッセージをチェックして、端末からの入力があるかどうか、または単に EM/DÜ または DÜ キーが押されただけなのかを確認することです。
マクロ NATUTM
のパラメータ LINK
または LINK2
でプログラム名 INPTEX
を定義する必要はありません。
プログラム NATPRNT
は、ローカルプリンタの動作のために、次のような特別なサービス機能を提供しています。
ターゲットプリンタの論理名の受け入れ、
有効なプリンタ名のリストによるプリンタ名の確認、
可変長の出力レコードを作成するためのマーカー設定。
プログラム UTMTAC
は Natural プログラムから呼び出すことができ、現在の UTM TAC を生成します。 このプログラムにより、中央の Natural プログラムは、Natural UTM アプリケーション内で UTM TAC 制御の "ナビゲーション" を実行できるようになります。
ユーティリティプログラム TACSWTCH
は、Natural プログラム内から PEND PR(OGRAM)
に UTM TAC をダイナミックに割り当てることができるマクロです。 指定された UTM TAC は、生成された UTM テーブルに対してチェックされ、適切に保存されます。 また、情報は PEND PR(OGRAM)
に渡すことができます。 このユーティリティを使用するには、次の手順に従います。
有効な UTM TAC を定義して、TACSWTCH
マクロをアセンブルします。
例えば、TACSWTCH TAC=(tac1,tac2,tac3,...tac n)
。これらの TAC は、同様に KDCDEF
で定義する必要があります。KDCROOT
の生成に関しては、これらを対応する部分的な UTM プログラムに割り当てる必要があります。
プログラム TACSWTCH
を Natural UTM インターフェイスのフロントエンド部分にリンクします。
インターフェイスの説明:CALL 'TACSWTCH' P1 [P2] P3
P1 (A8) |
PEND PR に使用する UTM TAC が格納されます。
|
|
P2 (A n) |
指定は任意であり、PEND PR に対するメッセージの長さとデータが格納されます。
|
|
LLL |
メッセージ長(3 桁、長さフィールドなし)、最小長:000 、最大長:160 。
|
|
DDD |
メッセージエリア。 | |
P3 (A1) |
2 つの機能があります。
呼び出すとき、および 制御が返されると、 表示されるリターンコード: |
|
0 |
エラーなしで処理が実行されました。 | |
1 |
TAC テーブルで TAC が見つかりません。 | |
2 |
メッセージ長が 000 未満です。
|
|
3 |
メッセージ長が 160 を超えています。
|
|
エラーなしで TACSWTCH が呼び出された場合、FIN コマンドまたは TERMINATE ステートメントを実行するか、PEND PR のファンクションキーを押して、PEND PR(OGRAM) を実行することができます。パラメータ PRKEY を参照してください。
|
次の値で最初の TACSWTCH
パラメータを使用することができます。
値 | 説明 |
---|---|
RESET |
現在使用可能な UTM TAC がクリアされます。つまり、PEND FI でセッションが終了されます。
|
GETP |
データは、出力バッファから呼び出し元の Natural プログラムの容量が十分にあるデータエリアに移動されます。 |
GETU |
データは、KB ユーザー拡張から、呼び出し元の Natural プログラムの容量が十分にあるデータエリアに移動されます。 |
出力バッファまたは KB ユーザー拡張の最初の 2 バイト(フォーマット:2 進数)には、データ長(これらの最初の 2 バイトを含む)が格納される必要があります。
値 | 説明 |
---|---|
PUTP |
データは、呼び出し元の Natural プログラムの容量が十分にあるデータエリアから、出力バッファに移動されます。 |
PUTU |
データは、呼び出し元の Natural プログラムの容量が十分にあるデータエリアから、KB ユーザー拡張に移動されます。 |
Natural プログラムのデータエリアの最初の 2 バイト(フォーマット:2 進数)には、データ長(これらの最初の 2 バイトを含む)が格納される必要があります。 最初の 2 バイトを含めて、データが移動されます。
DEFINE DATA LOCAL 01 P1(A8) /* FUNCTION CODE/UTM TAC 01 P2(A252) /* FIRST PART OF DATA AREA 01 REDEFINE P2 02 P21(B2) /* DATA LENGTH INCLUDING FIRST TWO BYTES 02 P22(A250) 01 A1(A250) /* SECOND PART OF DATA AREA 01 P3(N1) /* RETURN CODE END-DEFINE ... /* PROGRAM LOGIC MOVE 'PUTP' TO P1 /* MOVE FUNCTION CODE FOR TACSWTCH MOVE 502 TO P21 /* MOVE TOTAL LENGTH OF DATA CALL 'TACSWTCH' P1 P2 P3 /* PUT DATA INTO PRINT BUFFER IF P2 NE 0 /* RETURN CODE CONTROLLING DO... /* ERROR LOGIC MOVE 'NAT1' TO P1 /* MOVE ADEQUATE UTM TAC MOVE 'G' TO P3 /* EXECUTE PEND PR WITH TAC NAT1 CALL 'TACSWTCH' P1 P3 IF P3 NE 0 /* RETURN CODE CONTROLLING DO... /* ERROR LOGIC INPUT ' ' /* DUMMY MESSAGE FOR DRIVER CONTROL
現在、Natural UTM ドライバが制御を取得しており、次のロジックで動作します。
このドライバは、ダミーメッセージ(INPUT ' '
)を無視します。
部分的な UTM プログラムの場合、LENGTH=0
の MPUT
、および TAC 'NAT1'
の PEND PR
です。
部分的な UTM プログラムは、出力バッファを通じて Natural プログラムデータを取得します。 出力バッファは UTM SPAB に配置され、出力バッファのアドレスは、UTM KB 内にあるフィールド 'KBAPBUFF'
で定義されます。
Natural プログラムのデータは、出力バッファに移動されます(最初の 2 バイトには、この 2 バイトの長さフィールドを含めて、2 進数フォーマットでデータ長が格納される必要があります)。
LENGTH=0
の MPUT
、Natural UTM ドライバの TAC が指定された PEND PR
が実行されます。
Natural UTM ドライバが制御を取得します(INIT/MGET
)。
Natural に対して、ONLY ENTER
をシミュレートします。
次のように、Natural で処理を再開します。
MOVE 'RESET' TO P1 /* MOVE FUNCTION CODE FOR TACSWTCH CALL 'TACSWTCH' P1 P3 /* RESET PEND PR TAC (NAT1) IF P3 NE 0 /* RETURN CODE CONTROLLING DO... /* ERROR LOGIC MOVE 'GETP' TO P1 /* MOVE FUNCTION CODE FOR TACSWTCH CALL 'TACSWTCH' P1 P2 P3 /* GET DATA FROM PRINT BUFFER IF P3 NE 0 /* RETURN CODE CONTROLLING DO... /* ERROR LOGIC ... /* PROGRAM LOGIC END
マクロ NATUTM
のパラメータ KBSAVE
を YES
に設定した場合、呼び出された部分的な UTM プログラムは、UTM KB を使用することができます(ヘッダーの末尾に最初の 12 バイトを加えた位置から)。 この場合、UTM KB は SPUT
で保存され(KB ヘッダーに最初の 12 バイトを加えた位置を始点とする)、SGET
で更新されます。
Natural とその他の部分的な UTM プログラムの間で、トランザクションロジックに対して UTM トランザクションコードを定義する場合、次のルールが適用されます。
UTM の別の部分的なプログラムから Natural UTM ドライバに対して PEND PR
を実行した場合、先行する開始 TAC が使用されない可能性があります。 Natural UTM ドライバが PEND PR
によって呼び出されたという事実を認識できるのは、フィールド KCTACVG
内の先行する開始 TAC の内容がフィールド KCTACAL
内の現在の TAC と異なっている場合のみです (通常、フィールド KCTACVG
には、ユーザーがアプリケーションの起動に使用した TAC が格納されます)。
Software AG のお客様は、Natural UTM アプリケーションで生じた特定のニーズに合わせてプログラムを開発してきました。 これらのプログラムは、"Software Exchange" を通じて関心のあるあらゆるユーザーに公開されています。 このことは、Software AG が開発し、特定の問題に対するサンプルソリューションとして示されたプログラムにも同様に適用されます。
これらのプログラムは無料でご利用いただけますが、Software AG によるメンテナンスは行われません。 各プログラムの完全なドキュメントは、通常、ソースリストのメンテナンスログに含まれています。
各プログラムについて、以下で簡単に説明します。
XAMDUSA
| UTMCOB
| UTMNAV
| NUEXAMPL
| ACCEXIT
| TABMOD
このプログラムでは、呼び出し元の COBOL プログラムを対象として、現在のユーザー固有の WORKING-STORAGE SECTION
が保存およびリストアされます。
これらの処理により、ユーザーが現在実行している UTM タスクにかかわりなく、テーブルなどユーザー固有のデータエリアに多くのダイアログステップでアクセスできるようになります。 データは、論理的/物理的にチェーンで結ばれた PAM-I/O を使用して PAM ファイルに保存されます。
プログラム UTMCOB
は、Natural UTM アプリケーション内にあるユーザー固有の部分的な UTM プログラムの例です。 この例はプログラムの基本的な論理構造を示し、部分的な UTM プログラムとして以下のことが可能です。
ユーザーが、関連する UTM TAC によってアクティブにすることができます。
Natural UTM インターフェイスをアクティブにします。これにより、ダイナミックな Natural パラメータを指定した PEND PR(OGRAM)
を使用して Natural アプリケーションをアクティブにします。
PEND PR(OGRAM)
を使用して、Natural UTM インターフェイスからアクティブにすることができます。
「チェーンで結ばれた部分的な UTM プログラムの呼び出し」も参照してください。
プログラム UTMNAV
も、Natural UTM アプリケーション内にあるユーザー固有の部分的な UTM プログラムの例です。
このプログラムは、関連する UTM TAC を使用して、ユーザーまたは PEND PR(OGRAM)
がアクティブにすることができます。
渡されたメッセージはダイナミック Natural パラメータとして解釈されます。
プログラムロジックの情報を画面に出力します。
以前に受信した画面入力(Natural ダイナミックパラメータ)は MPUT
によって送信され、PEND PR(OGRAM)
で Natural UTM インターフェイスに渡されます。
プログラム UTMNAV
では、UTM KB を "共通" ユーザーエリアとして使用する方法を例示します。
プログラム NUEXAMPL
は、ユーザー固有の部分的な UTM プログラムの例であり、Natural プログラムとデータを交換できます。 NUEXAMPL
と呼び出し元の Natural プログラムのそれぞれのプログラムロジックは、NUEXAMPL
のメンテナンスログで説明されています。
プログラム ACCEXIT
は、アカウンティングデータを共有 ISAM データセットに保存するプログラムの例です。 Natural UTM インターフェイスのユーザー出口 ACCEXIT
および SHUTEX2
が使用されます。 「Natural UTM アプリケーションのアカウンティング」も参照してください。
プログラム TABMOD
は Natural プログラムから呼び出すことができ、次のような機能を実行します。
アプリケーションの起動時とアプリケーションの実行時に、一意のキーを使用して、テーブルなどのデータレコードを共通メモリプールにロードします。
呼び出し元の Natural プログラムの要件に応じて、データレコードを転送します。
こうして、高い頻度で必要になるデータを一度だけストレージにロードし、その後は常駐データとして保持することができます。
TABMOD
は、ライブラリ NUTnnn.MAC
内のマクロとして使用することができます。 このプログラムには、これ自体のインストールと利用に必要なあらゆる情報が含まれています。
Natural プログラムは、Natural UTM アプリケーション内で UTM TACCLASS の概念を利用することで、UTM TAC クラスを割り当ててリソースの制御を最適化できます。
Natural UTM アプリケーションを生成するとき、および Natural プログラムを作成するときは、以下の手順に従う必要があります。
OPTION GEN=ALL,ROOTSRC=INPUT.KDCROOT.KDCNATP ROOT KDCNATP MAX APPLINAME=NATUTM,APPLIMODE=S,KDCFILE=(NATUTM,S) MAX KB=400,SPAB=8192,NB=5120,TRMSGLTH=5120 MAX TASKS=10 MAX ASYNTASKS=3 ... EXIT PROGRAM=NUSTART,USAGE=START EXIT PROGRAM=NUSTART,USAGE=SHUT EXIT PROGRAM=FREXIT,USAGE=FORMAT ... DEFAULT PROGRAM COMP=ASSEMB PROGRAM NUSTART PROGRAM FREXIT PROGRAM NUERROR PROGRAM KDCADM,COMP=SPL4 ... DEFAULT TAC TYPE=D,PROGRAM=NUSTART,EXIT=NUERROR,CALL=BOTH,... TAC NAT,TIME=(3600000,5400),TACCLASS=1,... TAC NAT1,TIME=(3600000,5400),TACCLASS=2,... ... DEFAULT TAC TYPE=A,PROGRAM=NUSTART,EXIT=NUERROR,CALL=FIRST,... TAC NATAS,TACCLASS=9 TAC NATAS1,TACCLASS=10 ... TACCLASS 1,TASKS=3 TACCLASS 2,TASKS=1 TACCLASS 9,TASKS=2 TACCLASS 10,TASKS=1 ... END
Siemens のドキュメント『UTM Generierung und Administration(UTM Generation and Administration)』も参照してください。
定義された UTM TAC での注意事項
UTM TAC | 説明 |
---|---|
NAT |
これは、リソースの使用量が少ない同期トランザクション、つまり、短時間のトランザクション向けの UTM TAC です。 |
NAT1 |
これは、リソースの使用量が多い同期トランザクション、つまり、長時間のトランザクション向けの UTM TAC です。 |
NATAS |
これは、リソースの使用量が少ない非同期トランザクション向けの UTM TAC です。 |
NATAS1 |
これは、リソースの使用量が多い非同期トランザクション向けの UTM TAC です。 |
ジョブ名は EN.NATUTM
です。
/.NATUTM LOGON Natural,E,,TIME=10000 /SYSFILE SYSOUT=PROT.UTMSTAT /FILE NATUTM.KDCA,LINK=KDCFILE /ERASE NATUTM.PRINTCONTROL /STEP /FILE LOG.NATUTM,LINK=SYSLOG /FILE NATUTM.SWAPFILE,LINK=PAMNAT,SHARUPD=Y /SYSFILE TASKLIB=NAT210.MOD /.REPEAT EXEC NATUTM.E .UTM START FILEBASE=NATUTM START TASKS=7 START ASYNTASKS=3 START STARTNAME=EN.NATUTM .UTM END /SKIP .REPEAT /STEP /SYSFILE SYSOUT=(PRIMARY) /STEP /SYSFILE SYSLST=(PRIMARY) /CAT NATUTM.PRINTCONTROL,SHARE=YES /PRINT LST.NATUTM.,SPACE=E /ERASE LST.NATUTM. /STEP /LOGOFF NOSPOOL
同期 UTM トランザクションの TAC クラスは、次のステートメントを指定した Natural プログラムで変更できます。
CALL 'NATTAC' operand1[operand2] [operand3]INPUT 'TACCLASS
上記の意味は次に示すとおりです。
operand1
|
値 S=n を指定する必要があります。この場合、S は "同期" を表し、n は整数値の 0~4 になります。この整数値は、同期 TAC に対するトランザクションコードのサブルーチン NATTAC のテーブルで、トランザクションのプライオリティレベルを表します。
|
|
n が 0 である場合、トランザクションコードのテーブルは使用されません。 使用する TAC は、NATTAC の呼び出し時に operand2 で明示的に渡されます。
|
||
n が 1~4 の値の場合、目的の TAC のプライオリティレベルは、適切なパラメータ TCLS1 ~TCLS4 (同期トランザクションの場合)、または TCLA1 ~TCLA4 (非同期トランザクションの場合)から取得されます。
|
||
サブルーチン NATTAC が operand1 内でエラーを検出した場合、operand1 のエラーコードで呼び出し元のプログラムにすぐに制御が返されます。
|
||
E01 |
operand1 の最初の 2 文字は S= でも A= でもありません。
|
|
E02 |
operand1 の第 3 の文字は <0 または >4 です。
|
|
E03 |
Natural UTM アプリケーションの生成時に、指定したプライオリティレベルに対して、UTM TAC が定義されていませんでした。つまり、対応するパラメータ(TCLS n または TCLA n )の値が - になっています。
|
|
operand2 | 指定は任意です。 operand1 の第 3 の文字が 0 である場合、目的の TAC クラスに対して UTM TAC を指定する必要があります。
|
|
operand3 | 指定は任意です。 operand1 または operand2 で定義された UTM TAC で現在のユーザーのそれ以降のダイアログを実行する場合、値 Y を指定する必要があります。 NATTAC を呼び出したときに operand3 が省略されている場合、または operand3 の値が Y 以外になっている場合、最初の端末出力で現在のユーザーの START トランザクションコードが再び使用されます(標準的な機能)。 NATTAC を呼び出したときに operand3 の値が Y である場合、operand1 (暗黙的)または operand2 (明示的)に指定された UTM TAC で、現在のユーザーに指定されたその後の処理が実行されます。
|
ステートメント INPUT 'TACCLASS'
は、端末 I/O を実行しません。このステートメントの機能は、TACCLASS の割り当ての制御のみです。
その代わり、Natural プログラムは、CALLNAT
ステートメントで Natural サブプログラム NATTAC
を呼び出すことができます。 このために、INPUT 'NATTAC'
ステートメントが省略されます。オペランドは CALL
ステートメントのオペランドと同じです(上記を参照)。
CALLNAT 'NATTAC' operand1[operand2] [operand3]
このプロシージャは、同期トランザクションでも非同期トランザクションでも使用できます。 NATTAC
は、ライブラリ SYSTEM
に含まれています。
次の Natural プログラムは、UTM TAC を明示的に割り当てて新しい TAC クラスを指定し、次に START UTM TAC に指定を変更します。
* TACCLASS - EXAMPLE FOR A TACCLASS SWITCH RESET CONTROL(A3) NEWTAC(A8) NR(N3) REDEFINE CONTROL (ERRFLD(A1)) INPUT 'TEST FOR A TACCLASS SWITCH - NEW TAC: NAT1' IFELD(A1) MOVE 'S=0' TO CONTROL /* SYNCHR. TAC, EXPLICIT --> Note 1 MOVE 'NAT1' TO NEWTAC /* SET NEW TAC --> Note 2 CALL 'NATTAC' CONTROL NEWTAC /* INVOKE TAC SWITCH --> Note 3 IF ERRFLD = 'E' DO /* ERROR CHECK --> Note 4 DISPLAY 'ERROR' CONTROL 'FROM NATTAC' TERMINATE DOEND INPUT 'TACCLASS' /* ACTIVATE NEW TAC --> Note 5 READ (50) AUTOMOBILES BY MAKE /* NOW IN NEW TACCLASS --> Note 6 ADD 1 TO NR WRITE NOTITLE NOHDR NR MAKE MODEL /* START TAC IS USED --> Note 7 LOOP ON ERROR DISPLAY 'ERROR IN PROGRAM TACCLASS' END
注 | |
---|---|
1 | 値 S=0 は、それが同期トランザクションであり、TAC が CALL 'NATTAC' の第 2 パラメータで明示的に渡されることを表します。つまり、TAC テーブルは使用されません。
|
2 | NATTAC への呼び出しのために、新しい TAC(NAT1 )が設定されます。
|
3 | NATTAC を呼び出すと、TAC クラスの変更が初期化されます。
|
4 | サブルーチン NATTAC から制御が返された後、エラーチェックが実行されます。
|
5 | 擬似 MPUT および PEND PA が新しい TAC で実行されます。
|
6 | プログラムは現在、NAT1 に対する TAC クラスで実行されています。
|
7 | 最初の端末出力が開始されると、START UTM TAC が再び有効になります。 |
この例では、UTM TAC NAT1
を使用して、AUTOMOBILE
ファイルが読み取られます。 最初の端末出力が開始されると、START UTM TAC(NAT
)が再び有効になります。
NATTAC
が呼び出されると、TACCLASS の変更が保留になっていることを示すフラグが UTM 通信エリア(Kommunikationsbereich)に設定されます。
またプログラムによって渡される UTM TAC も、ユーザー固有の通信エリアに格納されます。 INPUT 'TACCLASS'
の実行により、Natural からの端末出力が発生し、この出力に基づいて、UTM インターフェイスは新しい UTM TAC で MPUT
と PEND 'PA'
を発行します(メッセージは、Natural UTM インターフェイス自体によって受信されます)。 新しい TAC クラスでメッセージを受信すると、TACCLASS 変更フラグがあるために、インターフェイスは入力エリアで ETX/DÜ
のシミュレーションを実行します。 その後の処理は新しい TAC クラスで実行されます。
以前の NATTAC
呼び出しのオペランド値に基づいて、端末に最初に送信されるメッセージを利用すると、ユーザーの START UTM TAC で MPUT
と PEND 'PR'
を発行することができます。つまり、TACCLASS の追加の変更が可能になります。
次の Natural プログラムは、UTM TAC を明示的に割り当てて新しい TAC クラスを指定しますが、START UTM TAC への変更は行いません。
* TACCLAS1 - EXAMPLE FOR A TACCLASS SWITCH RESET CONTROL(A3) NEWTAC(A8) SWOFF(A1) INPUT 'TEST FOR A TACCLASS SWITCH - NEW TAC: NAT1' IFELD(A1) MOVE 'S=0' TO CONTROL /* SYNCHR. TAC, EXPLICIT MOVE 'NAT1' TO NEWTAC /* SET NEW TAC MOVE 'Y' TO SWOFF /* NO RESET TO START TAC CALL 'NATTAC' CONTROL NEWTAC SWOFF /* INVOKE TAC SWITCH INPUT 'TACCLASS' /* ACTIVATE NEW TAC FETCH 'TACCLAS2' /* NOW IN NEW TACCLASS END * TACCLAS2 - THIS PROGRAM IS FETCHED FROM PROGRAM TACCLAS1 RESET NR(N3) READ (25) AUTOMOBILES BY MAKE /* TACCLASS IS NAT1 ADD 1 TO NR WRITE NOTITLE NOHDR NR MAKE MODEL HORSEPOWER YEAR LOOP FETCH 'MAINMENU' /* TACCLASS = NAT1 END
この例では、処理が TAC NAT1
で新しい TAC クラスに割り当てられます。 ユーザーの START UTM TAC への切り替えは、NATTAC
の呼び出しで、第 3 のパラメータ(SWOFF
)に値 Y
を指定することで回避されます。
また 1 つの Natural プログラムで、複数の TACCLASS の変更を実行できます。
次の Natural プログラムは、2 つの明示的な TACCLASS の変更と、1 つの暗黙的な TACCLASS の変更を実行します。
*TACMULT - EXAMPLE FOR TWO TACCLASS SWITCHES IN ONE PROGRAM RESET CONTROL(A3) NEWTAC(A8) SWOFF(A1) NR(N4) INPUT 'TEST FOR 2 TACCLASS SWITCHES' IFELD(A1) MOVE 'S=0' TO CONTROL /* SYNCHR. TAC, EXPLICIT MOVE 'NAT1' TO NEWTAC /* SET NEW TAC MOVE 'Y' TO SWOFF /* NO RESET TO START TAC CALL 'NATTAC' CONTROL NEWTAC SWOFF /* INVOKE TAC SWITCH INPUT 'TACCLASS' /* ACTIVATE NEW TAC READ (50) AUTOMOBILES BY MAKE /* NOW IN NEW TACCLASS ADD 1 TO NR WRITE NR MAKE MODEL YEAR LOOP EJECT /* ACTIVATE NEW OUTPUT ***** MOVE 'S=0' TO CONTROL /* SYNCHR. TAC, EXPLICIT MOVE 'NAT2' TO NEWTAC /* SET NEW TAC CALL 'NATTAC' CONTROL NEWTAC /* INVOKE TAC SWITCH INPUT 'TACCLASS' /* ACTIVATE NEW TAC READ (100) AUTOMOBILES BY MAKE /* NOW IN NEW TACCLASS WRITE MAKE MODEL YEAR /* NOW START TAC IS USED LOOP ON ERROR DISPLAY 'ERROR IN PROGRAM TACMULT' END
前記の例では UTM TAC NAT2
を考慮していません。これは KDCROOT
と KDCDEF
で定義する必要があります。
WRITE
、PRINT
、または DISPLAY
ステートメントの後で明示的な TACCLASS の変更が実行された場合、新しい TAC を割り当てる前に EJECT
を発行する必要があります。 この処理では、INPUT 'TACCLASS'
の実行前に、端末に対して無条件の出力が実行されます。 EJECT
の代わりに、次のステートメントを使用することができます。
STACK TOP DATA 'A' INPUT A(A1)
このシーケンスでも、INPUT 'TACCLASS'
の実行前に、端末に対して無条件の出力が実行されます。
次の Natural プログラムは、UTM TAC を暗黙的に割り当てて新しい TAC クラスを指定し、次に START UTM TAC に指定を変更します。 この例では、サブルーチン NATTAC
内で同期トランザクションに対して TAC テーブルを使用します。
* TACIMP1 - EXAMPLE FOR AN IMPLICIT TACCLASS SWITCH RESET CONTROL(A3) NR(N3) REDEFINE CONTROL (ERRFLD(A1)) INPUT 'TEST FOR AN IMPLICIT TACCLASS SWITCH' IFELD(A1) MOVE 'S=1' TO CONTROL /* USE 1ST TAC IN TABLE --> Note CALL 'NATTAC' CONTROL /* INVOKE TAC SWITCH IF ERRFLD = 'E' DO /* ERROR CHECK DISPLAY 'ERROR' CONTROL 'FROM NATTAC' TERMINATE DOEND INPUT 'TACCLASS' /* ACTIVATE NEW TAC READ (100) AUTOMOBILES BY MAKE /* NOW IN NEW TACCLASS ADD 1 TO NR WRITE NOTITLE NOHDR NR MAKE MODEL /* START TAC IS USED LOOP ON ERROR DISPLAY 'ERROR IN PROGRAM TACIMP1' END
注:値 S=1
は、それが同期トランザクションであり、TAC が TAC テーブルの最初のエントリから取得されることを表します。 これは、パラメータ TCLS1
のオペランド値として定義された TAC です(デフォルト値:NAT1)。 CALL 'NATTAC'
にある最初のパラメータの第 3 の文字は、4 つのパラメータ TCLS1
~TCLS4
のうちいずれを適用するかを示します。
次の Natural プログラムは、UTM TAC を暗黙的に割り当てて新しい TAC クラスを指定しますが、次に START UTM TAC に指定を変更しません。 この例では、サブルーチン NATTAC
内で同期トランザクションに対して TAC テーブルを使用し、この TAC で処理を続行します。
* TACIMP2 - EXAMPLE FOR AN IMPLICIT TACCLASS SWITCH RESET CONTROL (A3) SWOFF(A1) NR(N3) REDEFINE CONTROL (ERRFLD(A1)) MOVE 'S=4' TO CONTROL /* USE 4TH TAC IN TABLE --> Note MOVE 'Y' TO SWOFF /* NO RESET TO START TAC CALL 'NATTAC' CONTROL SWOFF /* INVOKE TAC SWITCH IF ERRFLD = 'E' DO /* ERROR CHECK DISPLAY 'ERROR' CONTROL 'FROM NATTAC' TERMINATE DOEND INPUT 'TACCLASS' /* ACTIVATE NEW TAC READ (100) AUTOMOBILES BY MAKE /* NOW IN NEW TACCLASS ADD 1 TO NR WRITE NR MAKE MODEL YEAR LOOP ON ERROR DISPLAY 'ERROR IN PROGRAM TACIMP2' END
注:値 S=4
は、それが同期トランザクションであり、TAC が TAC テーブルの第 4 のエントリから取得されることを表します。 これは、パラメータ TCLS4
のオペランド値として定義された TAC です(デフォルト値:NAT4
)。 KDCROOT
および KDCDEF
の例では、TAC NAT4
が定義されていません。実際に行うときは、ユーザーが適切な定義を指定する必要があります。
TAC テーブルを使用する場合、Natural プログラム内で UTM TAC を明示的にコーディングする必要がないという利点があります。 Natural プログラムには、実行するトランザクションの相対的なプライオリティの "重み" があるだけです。 システム管理者は、Natural プログラムを変更しなくても、UTM TAC の名前を割り当てたり変更したりすることができます。
同期トランザクションに対して TACCLASS を変更する Natural プログラムをテストする場合、注意すべきことがあります。TACCLASS 変更の適切な処理を確認する場合は、ステートメント CALL 'NATTAC' operand1 (operand2) (operand3)
を指定しないで Natural プログラムをテストできるということです。 INPUT 'TACCLASS'
ステートメントで端末に出力 'TACCLASS'
のみが生成される場合、そのプログラムは適切に動作しています。 NATTAC
の呼び出しのオペランドは、適切に設定する必要があります。 KDCROOT
および KDCDEF
に定義されていない UTM TAC が使用された場合、UTM 処理は常にエラーコード KM01
で終了します。
Natural UTM アプリケーション内の非同期トランザクションに対する TAC クラスは、次のステートメントで変更できます。
CALL 'NATTAC'operand1[operand2]
operand1 |
値 A=n を指定する必要があります。この場合、A は "非同期" を表し、n は整数値の 0 ~4 になります。この整数値は、非同期 TAC に対するトランザクションコードのサブルーチン NATTAC のテーブルで、トランザクションのプライオリティレベルを表します。 オペランドの指定形式は、同期トランザクションのオペランドの指定形式に似ています。
|
operand2 |
指定は任意です。 operand1 の値が A=0 である場合、目的の TAC クラスに対して UTM TAC を指定します。
|
非同期トランザクションのすべての UTM TAC は、マクロ NATUTM
のパラメータ ASYNTAC
で非同期 TAC に対して一意な ID として定義した文字列で始まる必要があります。 逆に同期トランザクションに対する UTM TAC は、この文字列で開始することができません。
次の Natural プログラムは、UTM TAC NATAS
を使用して、非同期トランザクション処理のために初期化を実行します。 これは、非同期トランザクションに対する標準的な TAC です。 マクロ NATUTM
のパラメータ ASYNTAC
の説明も参照してください。
* STARTAS - EXAMPLE FOR ASYNCHRONOUS TRANSACTION WORKING * WITHIN ONE APPLICATION - USING THE STANDARD TAC FORMAT LS=145 RESET PARM1(A144) PRDEST(A8) LTDEST(A8) MOVE 'PRINTER1' TO PRDEST MOVE *INITID TO LTDEST COMPRESS 'SENDER=' PRDEST ',OUTDEST=' LTDEST ',' 'MENU=F,STACK=(LOGON APPL1;READAUTO)' INTO PARM1 LEAVING NO CALL 'NATASYN' SET CONTROL 'H' WRITE NOTITLE NOHDR PARM1 INPUT 'ASYNTASK INVOKED - HOPEFULLY' IFELD(A1) END
次の Natural プログラムは、非同期トランザクション処理を初期化し、別の TAC クラスに対する割り当てのために UTM TAC NATAS1
を割り当てます。
* STASTAC - EXAMPLE FOR ASYNCHRONOUS TRANSACTION WORKING * WITHIN ONE APPLICATION * AND SWITCH TO A NEW TACCLASS FORMAT LS=145 RESET PARM1(A144) PRDEST(A8) LTDEST(A8) CONTROL(A3) NEWTAC(A8) REDEFINE CONTROL (ERRFLD(A1)) MOVE 'PRINTER1' TO PRDEST MOVE *INIT-ID TO LTDEST COMPRESS 'SENDER=' PRDEST ',OUTDEST=' LTDEST ',' 'MENU=F,STACK=(LOGON APPL1;READAUTO)' INTO PARM1 LEAVING NO MOVE 'A=0' TO CONTROL /* ASYNCHR. TAC, EXPLICIT --> NOTE MOVE 'NATAS1' TO NEWTAC /* SET NEW TAC CALL 'NATTAC' CONTROL NEWTAC /* INVOKE TAC SWITCH IF ERRFLD = 'E' DO /* ERROR CHECK DISPLAY 'ERROR' CONTROL 'FROM NATTAC' TERMINATE DOEND CALL 'NATASYN' /* INVOKE ASYNCHRONOUS TAC SET CONTROL 'H' WRITE NOTITLE NOHDR PARM1 INPUT 'ASYNTAC INVOKED - HOPEFULLY' IFELD(A1) END
値 A=0
は、それが非同期トランザクションであり、TAC が CALL 'NATTAC'
の第 2 パラメータで明示的に渡されることを表します。つまり、TAC テーブルは使用されません。
MOVE 'A=1' TO CONTROL CALL 'NATTAC' CONTROL
TAC テーブル(「NATUTM マクロパラメータ」のパラメータ TCLA1
~TCLA4
を参照)を使用するためのプロシージャは、同期トランザクションのプロシージャに対応しています。
非同期的に実行するプログラムの例(READAUTO
):
* READAUTO - ASYNCHRONOUS Natural PROGRAM READ (75) AUTOMOBILES BY MAKE WRITE MAKE MODEL HORSEPOWER BODY-TYPE YEAR LOOP ON ERROR TERMINATE TERMINATE END
目的の UTM TAC は常に、非同期トランザクション処理を初期化する Natural プログラム内で割り当てられる必要があります(非同期トランザクション処理のために標準的な TAC を使用することは例外的な方法です。マクロ NATUTM
のパラメータ ASYNTAC
の説明を参照)。 非同期的に実行するプログラムは、次に目的の TAC クラスで実行されます。 各非同期 Natural プログラムは TERMINATE
ステートメントで終了する必要があるので、プログラムの終了時に UTM DC トランザクションも終了されます(PEND 'FI'
)。
非同期トランザクション処理を初期化するプログラムは、常に同期トランザクション内で実行されます。 したがって、同期トランザクションのためのプロシージャを使用して TACCLASS を変更する処理は可能です。 この変更を実行できるのは、非同期 TAC
を割り当てる前、または非同期トランザクションを初期化した後(INPUT
ステートメント)です。
2 つの Natural UTM アプリケーション間の非同期トランザクション処理のために NATTAC
を呼び出す必要はありません。 必要な UTM TAC は、Natural プログラムで明示的に割り当てられます。「非同期トランザクション処理」も参照してください。
次の図では、同期トランザクションのために UTM TACCLASS を切り替えるロジックを示します。
次のプログラムとマクロは、Natural UTM アプリケーションを生成するためにアセンブルする必要があります。
KDCROOT |
UTM インターフェイスモジュール。 |
NATUTM |
Natural UTM インターフェイスのフロントエンド部分。 |
BS2STUB |
共通メモリプールの定義。 |
FREXIT |
フォーマット出口モジュール(デフォルトパラメータを変更する場合のみ)。 |
NURENT |
Natural UTM インターフェイスのリエントラント部分。 |
NTPRM |
Natural パラメータモジュール。 |
NTSWPRM |
スワッププールパラメータモジュール。 |
このリストには、Natural UTM インターフェイスのユーティリティプログラムは含まれていません。
次に、アプリケーションを生成する方法の例を示します。
OPTION GEN=ALL,ROOTSRC=INPUT.KDCROOT.KDCNATP ROOT KDCNATP MAX APPLINAME=NATUTM,APPLIMODE=S,KDCFILE=(NATUTM,S) MAX KB=400,SPAB=8192,NB=5120,TRMSGLTH=5120 MAX TASKS=10,ASYNTASKS=3 MAX GSSBS=0,KSSBS=1 MAX LOGACKWAIT=600,RESWAIT=(600,1200),TERMWAIT=(1800,0) MAX PGPOOL=(88,80,95),CONRTIME=2,RECBUF=(400,2048) MAX DPUTLIMIT1=(001,23,59,59),DPUTLIMIT2=(001,23,59,59) MAX LPUTLTH=0 *+---------------------------------------------------------------------------+ *I EXIT DEFINITIONS: STARTUP (CSECT NAME OF NATUTM) I *I SHUTDOWN (CSECT NAME OF NATUTM) I *I FORMAT (FREXIT) I *+---------------------------------------------------------------------------+ EXIT PROGRAM=NUSTART,USAGE=START EXIT PROGRAM=NUSTART,USAGE=SHUT EXIT PROGRAM=FREXIT,USAGE=FORMAT *+---------------------------------------------------------------------------+ *I P R O G R A M D E F I N I T I O N S I *+---------------------------------------------------------------------------+ DEFAULT PROGRAM COMP=ASSEMB PROGRAM NUSTART PROGRAM FREXIT PROGRAM NUERROR PROGRAM AUTOTAC PROGRAM KDCADM,COMP=SPL4 *+---------------------------------------------------------------------------+ *I SYNCHRONOUS TACS FOR Natural/UTM I *I THE ERROR EXIT 'NUERROR' MUST BE DEFINED FOR EACH TAC I *+---------------------------------------------------------------------------+ DEFAULT TAC TYPE=D,PROGRAM=NUSTART,EXIT=NUERROR,CALL=BOTH TAC NAT,ADMIN=NO,TIME=0 TAC AUTOCONN *+---------------------------------------------------------------------------+ *I BADTACS DEFINITION FOR Natural/UTM I *I THE ERROR EXIT 'NUERROR' MUST BE DEFINED FOR EACH TAC I *+---------------------------------------------------------------------------+ TAC KDCBADTC,CALL=FIRST,PROGRAM=AUTOTAC,EXIT=NUERROR,TYPE=D *+---------------------------------------------------------------------------+ *I ASYNCHRONOUS TACS FOR Natural/UTM I *I THE ERROR EXIT 'NUERROR' MUST BE DEFINED FOR EACH TAC I *+---------------------------------------------------------------------------+ DEFAULT TAC TYPE=A,PROGRAM=NUSTART,EXIT=NUERROR,CALL=FIRST TAC NATAS TAC NATSY *+---------------------------------------------------------------------------+ *I UTM ADMINISTRATOR TACS I *+---------------------------------------------------------------------------+ DEFAULT TAC PROGRAM=KDCADM,ADMIN=Y,TYPE=D,CALL=BOTH TAC KDCTAC TAC KDCLOG TAC KDCSHUT TAC KDCAPPL TAC KDCINF TAC KDCUSER TAC KDCSEND TAC KDCDIAG TAC KDCLTERM TAC KDCPTERM TAC KDCSWTCH TAC KDCHELP *+---------------------------------------------------------------------------+ *I PTERM 9750 DEFINITION I *+---------------------------------------------------------------------------+ DEFAULT PTERM PRONAM=VR,PTYPE=T9750,TERMN=FE,CONNECT=N PTERM DFDSS001,LTERM=DF97501 PTERM DFDSS002,LTERM=DF97502 PTERM DFDSS003,LTERM=DF97503 *+---------------------------------------------------------------------------+ *I LTERM DEFINITION I *+---------------------------------------------------------------------------+ DEFAULT LTERM USAGE=D,STATUS=ON,ANNOAMSG=YES,RESTART=YES LTERM=DF97501 LTERM=DF97502 LTERM=DF97503 *+---------------------------------------------------------------------------+ *I SFUNC DEFINITION I *+---------------------------------------------------------------------------+ SFUNC F1,RET=21Z SFUNC F2,RET=22Z SFUNC F3,RET=23Z SFUNC F4,RET=24Z SFUNC F5,RET=25Z SFUNC K1,RET=26Z SFUNC K2,RET=27Z SFUNC K3,RET=28Z SFUNC K4,RET=29Z END
Siemens のドキュメント『UTM Generierung und Administration(UTM Generation and Administration)』も参照してください。
マクロ NATUTM
のパラメータのオペランドは必要に応じて正しい値に設定し、その後にマクロ NATUTM
をアセンブルしてください。
NATUTM マクロコールの例:
NUSTART NATUTM APPLNAM=NATUTM, --> Note 1 - NUCNAME=NAT vrs , --> Note 2 - LINK=TACSWTCH --> Note 3 - PARMOD=24, --> Note 4 - ROLLACC=UPAM-AS, --> Note 5 - ROLLTSZ=180, --> Note 6 - TERMTAB=(SWP,TERMNAME), --> Note 7 - UMODE=(S,G) --> Note 8
注 | |
---|---|
1 | Natural UTM インターフェイスのフロントエンド部分の CSECT 名は、NUSTART (デフォルト値)として指定されます。 Natural UTM アプリケーションの名前は NATUTM として指定されます。
|
2 | Natural UTM アプリケーションのリンクエディットされたリエントラント部分の名前は NATvrs として指定されます。これは、リエントラント部分がロードされる共通メモリプールの名前でもあります。
|
3 | プログラム TACSWTCH に対して、TABLE マクロコールが実行されます。 つまり、このプログラムは、Natural UTM アプリケーションのフロントエンド部分でリンクする必要があります。
|
4 | Natural UTM アプリケーションは、24 ビットアドレッシングモードで実行されます。 |
5 | Natural ロールファイルに対するアクセス方法は、非同期書き込みに対して P1 イベント制御を使用する UPAM として指定されます。
|
6 | Natural ロールファイルの最大スレッドサイズは 180 (KB)として指定されます。
|
7 | 内部の端末コントロールテーブルは、Natural スワッププール内に割り当てられます。端末コントロールテーブル内のエントリを識別するために、論理端末名が使用されます。 |
8 | Natural とのユーザーダイアログは "シングル" モードで実行されます。つまり、1 つの端末で 1 つの Natural セッションを開始することができます。 再スタート時やログオフ時のメッセージ、またフリーランニングメッセージ(非同期処理)は、ドイツ語で出力されます。 |
デフォルト値が適用されるので、マクロ NATUTM
のその他のパラメータのオペランドは指定されません。
マクロ NURENT
(Natural UTM インターフェイスのリエントラント部分)をアセンブルします。 この例では、パラメータの変更は必要ありません。 アセンブルされたマクロ NURENT
の CSECT
名は NURENT
です。
マクロ ADDON
に指定された共通メモリプール定義でマクロ BS2STUB
をアセンブルします。
Natural パラメータモジュールをアセンブルします。 サンプル NTPRM
マクロコールは、ローカルの環境に合わせて調整する必要があります。
スワッププールパラメータモジュール(マクロ NTSWPRM
)をアセンブルします。
Natural UTM アプリケーションのフロントエンド部分とリエントラント部分は、提供された JCL を使用してリンクできます。 JCL を使用する前にこの JCL をチェックし、ローカル環境(ライブラリ名など)に合わせて、JCL を適切に変更する必要があります。
JCL の特別な機能は、REMARK
ステートメントで示しています。
Natural スワップファイルのサイズを計算して、このファイルをリンク名 PAMNAT
で割り当てる必要があります。
Natural UTM アプリケーションを開始する JCL の例が提供されています。 JCL を使用する前にこの JCL をチェックし、JCL を適切に変更する必要があります(UTM 起動パラメータ、データセット名など)。
Natural UTM アプリケーションのパフォーマンスが不十分である場合、次のようなポイントを考慮してください。
パフォーマンス低下の原因は 1 つ以上の特定の Natural プログラムにありますか?
このような状況の場合は、プログラムを再設計して最適化してください。 これらのプログラムは、ライブラリ SYSTP 内の Natural Monitor を使用することで特定できます。
スワップ I/O 率が過剰に高いですか?
ライブラリ SYSTP
のプログラム MENU
を使用すると、Natural スワッププールを利用する場合の効率性をチェックできます。 またスワッププールに関する統計情報は、次の質問に答えるのに役立ちます。
論理スワッププールの数とそのスロットの長さは適切ですか?
SYSTP
のメインメニューにある機能 SW
は、Natural スワッププールの最適化を制御するためのさまざまな方法を提供しています。
Natural スワッププールに定義された大きさは十分ですか?
スワッププールのサイズを拡張したり、スワッププールのデータスペースを生成したりすると、スワップ I/O 率が大幅に低下します。
Natural バッファプールが小さすぎませんか?
Natural バッファプールのサイズと使用率に関する情報は、Natural ユーティリティ SYSBPM
で確認できます。このユーティリティについては、Natural の『ユーティリティ』ドキュメントで説明しています。
UTM タスクの数が適切に選択されていますか?
この値は、個々のトランザクションのパス長と接続される端末の数に大きな影響を受けます。
特定のトランザクション(いわゆる長いジョブ)が利用可能な UTM タスクをロードしてシステムの負荷を高めているので、短いトランザクションの処理量が低下したという可能性はありますか?
このような場合、UTM TACCLASS の概念を取り入れて、非同期トランザクション処理機能を使用する必要があります。
Natural ロールファイルを構成するエクステントが 1 つのディスクドライブ上で多くなりすぎていませんか?(物理的にチェーンで結ばれた I/O は、エクステントの境界を超過することはできません)あるいは、Natural ロールファイルが非常に使用頻度の高いディスクドライブに格納されていませんか?
可能な場合は、使用頻度の低い 1 台以上のディスクドライブに Natural ロールファイルを割り当てて、各ドライブではエクステントを 1 つに制限してください。
これらの推奨事項を考慮するときは、利用可能なストレージ、ストレージページング率、ディスクやチャネルの I/O トラフィックの負荷など、システム環境全体の要素を計算に入れる必要があります。
Natural の『オペレーション』ドキュメントの「BS2000/OSD 環境での Natural 共有ニュークリアス」も参照してください。
ストレージスペースを節約するには、共通の Natural リエントラント部分をクラス 6 ストレージの共通メモリプールに格納し、いくつかの Natural UTM アプリケーションでこれを共有することをお勧めします。 Natural UTM アプリケーションを生成するときは、次の手順を実行する必要があります。
グローバル Natural ロードプールは、次のようにモジュール CMPSTART のパラメータで定義する必要があります。
NAME=NATSHARE,POSI=ABOVE,ADDR=250,PFIX=YES,SIZE=2MB LIBR=NATvrs.USER.MOD
詳細については、Natural の『オペレーション』ドキュメントの「CMPSTART プログラム」を参照してください。
注意:
NATSHARE
は、リンクされる Natural リエントラント部分の名前です。 また、共通メモリプールの名前でもあります。
PFIX
のオペランドは YES
にする必要があります。
ADDR
のオペランドを定義する必要があります。
LIBR
のオペランドには、Natural リエントラント部分のロード元となるモジュールライブラリの名前を指定する必要があります。
NURENT
のアセンブルされたモジュール)は、いくつかのアプリケーションのフロントエンド部分とリンクする必要があります。
NUCNAME
のオペランドは、マクロ NATUTM
の各アセンブリに対して同じように定義する必要があります(この例では、NUCNAME=NATSHARE
)。
BS2STUB
のアセンブリに対する ADDON
マクロ内の Natural ロードプールの定義は、すべてのアプリケーションに対して同じにする必要があります。例えば、次のように指定します。STUBSHAR BS2STUB PARMOD=31,PROGMOD=ANY ADDON NAME=NATSHARE,STAT=GLOBAL
詳細については、Natural の『オペレーション』ドキュメントの「ADDON マクロ」を参照してください。
アプリケーション固有の Natural パラメータモジュールを使用する場合、これらを Natural UTM アプリケーションのフロントエンド部分にリンクする必要があります。つまり、それぞれのフロントエンド部分にパラメータモジュールがあります。 これはスワッププールパラメータモジュールにも適用されます。
ここでは、フロントエンド部分のパラメータモジュールの CSTATIC
リストに定義されるアドレスのみを考慮しています。これらのアドレスがリエントラント部分を参照していることが原因でフロントエンド部分で解決できない場合、Natural はリエントラント部分のパラメータモジュールにある CSTATIC
リストでこれらのアドレスを解決しようとします。 したがって、アドレスをリエントラント部分で解決できる場合、フロントエンド部分とリンクするときに、未解決の CSTATIC
アドレスが残される可能性があります。
リエントラント部分の CSTATIC
リストは、フロントエンド部分で解決できないアドレスだけを対象として使用するので、使用するすべての CSTATIC
エントリ(フロントエンド部分にあるか、リエントラント部分にあるかに関係なく)は、本来、フロントエンド部分のパラメータモジュールの CSTATIC
リストに定義する必要があります。
Natural ダイナミックパラメータの入力と定義では、次のことを実行できます。
アプリケーションへのログオン時に、UTM TAC とともにダイナミックパラメータを入力する。
MPUT
および PEND PR(OGRAM)
を使用して、UTM の別の部分的なプログラムからダイナミックパラメータを渡す。
パラメータ MSPAR1
のオペランドでダイナミックパラメータを定義する。 これらのパラメータはそのアプリケーションの全ユーザーに適用され、変更することはできません。
Natural セッションを開始すると、定義された Natural ダイナミックパラメータは、最大で、マクロ NATUTM
でパラメータ SVDYPRM
のオペランドに定義された長さまで保存されます。 ユーザーの再スタートの状況では、Natural セッションが再び開始されたとき、これらの保存されたデータが自動的に再利用されます。 また、UTM の別の部分的なプログラムの PEND PR(OGRAM)
の結果、Natural セッションが開始される場合も同様です。
Natural の『オペレーション』ドキュメントの「UTM 環境下の再スタート可能なグローバルスワッププール」も参照してください。
Adabas のプライオリティ制御と BS2000/OSD のプライオリティ制御には関連性がありません。 BS2000/OSD のプライオリティ制御とは異なり、Adabas の場合は、プライオリティ値が高いほど優先度も高くなります。 Adabas
コマンドキューに同時に複数の要求が格納されている場合、最高のプライオリティ値を持つ要求が Adabas によって最初に処理され、その時点でコマンドキューにある他の要求のプライオリティに 1
が加算されます。
状況によっては、UTM タスクよりも低い BS2000/OSD プライオリティを Adabas タスクに割り当てる方が有効な場合もあります。
UTM トランザクションに対する Adabas プライオリティを制御するには、次の NATUTM
マクロパラメータを使用することができます。
ADAPRI |
UTM トランザクションに対して Adabas プライオリティ制御をアクティブ化します。 |
APRISTD |
プライオリティが個別に割り当てられていないすべての UTM トランザクションに対して、標準的な Adabas プライオリティを割り当てます。 |
TCLS n |
個々の同期 UTM トランザクションに対して、Adabas プライオリティを割り当てます。 |
TCLA n |
個々の非同期 UTM トランザクションに対して、Adabas プライオリティを割り当てます。 |
UTM トランザクションに対して Adabas プライオリティ制御をアクティブにした場合(パラメータ ADAPRI=YES
)、この設定はサブルーチン ADACALL
で Adabas にアクセスする Natural 以外のプログラムにも適用されます。マクロ NATUTM
の パラメータ ADACALL を参照してください。
上記のパラメータで異なるトランザクションに異なる Adabas プライオリティを定義し、同時に、UTM TACCLASS の概念を取り入れることで、非常に高度なプライオリティ制御システムを設定できます。 ただし、Adabas プライオリティを UTM トランザクションに明示的に割り当てる場合は、Adabas が他の処理(例えば、TIAM やバッチ処理)に割り当てる標準的なプライオリティも考慮する必要があります。