Natural ニュークリアスは、Natural カーネルを構成するサービスプログラム(メモリ管理、文字列操作、オペレーティングシステムインターフェイス、コンパイラ、ランタイム環境など)の集合体です。 これは、オペレーティングシステムや TP システムに依存しません。
このドキュメントでは、Natural オブジェクトを Natural ニュークリアスにリンクする利点を説明し、さらに前に進む方法を示します。
以下のトピックについて説明します。
Natural オブジェクトを Natural ニュークリアスにリンクすると、以下の利点があります。
パフォーマンスの向上
オブジェクトは、Natural バッファプールからではなく、ニュークリアスから実行されます。 これにより、バッファプールのスペースが節約され、データベースコールも減少します (Natural カタログ化オブジェクトが Natural ニュークリアスにリンクされていない場合は、それらのオブジェクトは
Adabas などのデータベースファイルに保存され、実行するには実際のコードをこのファイルからバッファプールにロードする必要があります)。
整合性
Natural ニュークリアスにリンクされているオブジェクトは常にニュークリアスから実行されるので、オブジェクトの派生元のカタログ化オブジェクトが Natural システムファイルで削除されたり変更されたりしても影響を受けません。 したがって、各
TP モニタセッション中に、オブジェクトのステータスは変化しません。 ニュークリアスにリンクされているオブジェクトの新しいバージョンを取得するには、ULDOBJ
(下記参照)を使用してオブジェクトをアンロードし、新しいバージョンを Natural ニュークリアスにリンクし直し、Natural モジュールを更新します (更新するということは、モジュールの新しいコピーが TP モニタリージョンにロードされるということです)。
グローバルエラー処理
カタログ化オブジェクトがエラーを処理するために別のプログラムをフェッチ(例えば、Natural システム変数 *ERROR-TA
を使用)する場合、エラー処理プログラムをバッファプールにロードできないと、元のエラーが不明になり、後発のエラーが最初のエラーをマスクして混乱することがあります。 このような事態を回避するために、ユーザー作成のグローバルエラー処理プログラムをニュークリアスにリンクできます。
Natural カタログ化オブジェクトを Natural ニュークリアスにリンクするには、ULDOBJ
ユーティリティを使用します。 ULDOBJ
ユーティリティを使用して、Natural カタログ化オブジェクトからオブジェクトモジュールを生成し、Natural ワークファイルに書き込みます。 次に、生成されたオブジェクトモジュールをリンケージエディタで処理し、Natural ニュークリアスにリンクします。
z/OS および z/VSE 環境:Natural 共有ニュークリアスを使用している場合は、生成されたオブジェクトモジュールはニュークリアスの環境非依存部分にリンクする必要があります。
ULDOBJ
ユーティリティを呼び出すには
ライブラリ SYSMISC
にログオンし、ULDOBJ
コマンドを発行します。
10:12:19 ***** NATURAL OBJECT MAINTENANCE ***** 2005-01-05 User: XYZ - NATURAL ULDOBJ UTILITY - Library: SYSMISC Opsys .. z/OS Specify parameters below .... Object ...... ________ (Enter '.' to exit) Library ..... SYSMISC_ OP System ... ________ |
以下のパラメータを指定し、確定します。
Object |
処理されるカタログ化オブジェクトの名前。 オブジェクトは、プログラム、サブプログラム、サブルーチン、ヘルプルーチン、またはマップのいずれでもかまいません。 | ||||||||
Library |
カタログ化オブジェクトを含むライブラリの名前。 | ||||||||
OP System |
オブジェクトモジュールが生成されるオペレーティングシステムの名前 (オブジェクトモジュールが従うルールはオペレーティングシステムごとに異なります)。以下のいずれかのオペレーティングシステムの名前を指定する必要があります。
|
ULDOBJ
ユーティリティに、処理された各オブジェクトについて以下の情報を含むレポートが表示されます。
オブジェクトタイプ(プログラム、サブプログラム、サブルーチン、ヘルプルーチン、マップ、アダプタ)
処理されたカタログ化オブジェクトの名前
プログラミングモード(S = ストラクチャードモード、R = レポーティングモード)
カタログ化オブジェクトを含むライブラリの名前
オブジェクトデッキが生成されたオペレーティングシステムの名前
カタログ化オブジェクトのサイズと最適化コード(該当する場合)
カタログ化オブジェクトの Natural バージョンとシステムメンテナンス(SM)レベル
ユーザー ID および端末 ID も含めて、オブジェクトの最新のカタログに関する統計情報
最初の入力のデータが処理されると、ULDOBJ
ユーティリティに別のオブジェクトとライブラリを入力するプロンプトが表示されます。 同じ Natural ワークファイル用に複数のオペレーティングシステムのオブジェクトモジュールを生成することは意味がないので、オペレーティングシステムの入力は要求されません。
ULDOBJ
ユーティリティを終了するには
最後のカタログ化オブジェクトが処理されたら、 最初の入力フィールド(Object)に「.」を入力し、Enter キーを押します。
生成されたオブジェクトモジュールは、指定したオペレーティングシステムのフォーマットに従います。 これは、非実行コードと以下の要素から成る再配置可能フォーマットです。
外部記号ディレクトリ(ESD)
再配置ディクショナリ(RLD)
プログラムに対応する命令とデータのテキスト
END
ステートメント(ロードモジュールのエンドオブモジュールインジケータ)
生成されたオブジェクトモジュールは Natural ワークファイルに書き込まれ、リンケージエディタへの入力として使用されます (オペレーティングシステムによっては、ULDOBJ
をバッチモードで使用した方が効果的です)。
コードをロードモジュールとして実行可能にする前に、生成されたオブジェクトモジュールを該当するオペレーティングシステムのリンケージエディタで処理する必要があります(後述の例を参照)。 各ロードモジュールは、Natural ニュークリアスにリンクされて Natural コンフィグレーションモジュール NATCONFG
の NTSTAT
エントリ定義で定義されると有効になります(「Natural コンフィグレーションテーブル」を参照)。
カタログ化オブジェクトは、ULDOBJ
ユーティリティでアンロードし、Natural ニュークリアスにリンクした後は、Natural システムファイルから削除してかまいません。
ただし、これは "サブルーチン" タイプのオブジェクトには当てはまりません。 サブルーチンには以下の 2 つの名前があります。
ステートメント PERFORM
および DEFINE SUBROUTINE
で指定された名前
DEFINE SUBROUTINE
ステートメントを含むオブジェクトの名前
Natural はこれら 2 つの名前を内部的に関連付けますが、これはカタログ化オブジェクトが Natural システムファイル内に存在している場合のみ可能です。 カタログ化オブジェクトが削除されると、この関連付けは失われ、ニュークリアスにリンクされたサブルーチンは実行できなくなります。
オブジェクトモジュールは、オペレーティングシステムによって異なる方法で生成されます。 以下のような違いがあります。
プラットフォーム: | 要件: |
---|---|
z/OS |
NAME TEST (R)
|
z/VSE |
オブジェクトモジュールのフォーマットは CATALOG TEST.OBJ REPLACE-YES ... ... object module ... /+
|
BS2000/OSD |
オブジェクトモジュールのフォーマットは ADDR >TEST ... ... object module ... END
ユーティリティの実行中に複数のカタログ化オブジェクトがアンロードされる場合は、相互にオブジェクトデッキが追加されます。 |
例えば、SYSLIB
ライブラリ内のオブジェクト LOGPROG
および EDITPROG
を Natural ニュークリアスにリンクする場合は、次の手順に従います。
リンクするカタログ化オブジェクトを指定します。
Object Library -------------- -------------- LOGPROG SYSLIB EDITPROG SYSLIB
バッチ Natural ジョブストリームを設定します。 z/OS 環境の場合は、以下のカードを含めます。
//CMWKF01 DD DSN=ULD.NAT.PGMS,UNIT=SYSDA,DISP=(,KEEP), // SPACE=(CYL,(3,1),,RLSE),VOL=SER=VVVVVV, // DCB=(RECFM=FB,BLKSIZE=800,LRECL=80) //CMSYNIN DD * LOGON SYSMISC ULDOBJ LOGPROG,SYSLIB,OS EDITPROG,SYSLIB . FIN /*
リンケージエディタジョブストリームを設定します。
//JOBCARD JOB (ACCTING),CLASS=A,MSGCLASS=X //* //* GENERATE OS LOAD MODULE FROM ULDOBJ UTILITY //* //LINK1 EXEC PGM=IEWL,PARM='LIST,LET,XREF,NCAL,RENT,REUS' //SYSLMOD DD DSN=NATURAL.USER.LOAD,DISP=SHR //SYSUT1 DD UNIT=SYSDA,SPACE=(1024,(200,20)) //SYSPRINT DD SYSOUT=X //SYSLIN DD DSN=NAT.ULD.PGMS,DISP=OLD,UNIT=SYSDA,VOL=SER=VVVVVV /*
この手順で、ロードモジュール LOGPROG
および EDITPROG
が NATURAL.USER.LOAD
データセットに配置されます。
追加のリンクエディットジョブにより、手順 5 でニュークリアスにリンクする前に、これらのモジュールをまとめて 1 つのロードモジュールとしてリンクできます。
//JOBCARD JOB (ACCTING),CLASS=A,MSGCLASS=X //* //* OPTIONAL JOB TO LINK CATALOGED OBJECTS TOGETHER //* //LINK2 EXEC PGM=IEWL,PARM='LIST,LET,XREF,NCAL,RENT,REUS' //SYSLMOD DD DSN=NATURAL.USER.LOAD,DISP=SHR //SYSUT1 DD UNIT=SYSDA,SPACE=(1024,(200,20)) //SYSPRINT DD SYSOUT=X //SYSLIN DD * INCLUDE SYSLMOD(LOGPROG) LOGON NATURAL PGM INCLUDE SYSLMOD(EDITPROG) EDITOR NATURAL PGM NAME XXXXXX(R) /*
スタティックにリンクされる Natural プログラムを、リンクされる Natural プログラムの NSTATIC
テーブルのソースモジュール NATCONFG
で定義します。
NTSTAT INPL,TYPE=W NTSTAT INPLLIB,TYPE=W NTSTAT AERROR,TYPE=W NTSTAT LOGPROG <==== your entries NTSTAT EDITPROG <====
TYPE=W
は、指定したプログラムへの、通常の参照ではなく "弱い" 外部参照が生成されることを示します。
Natural ニュークリアス用のリンケージエディタジョブストリームを確認し、以下を含めます。
//* //* INCLUDE DDNAME AND DSN OF DATASET WHERE OBJECTS RESIDE //* //SYSLMOD DD DSN=NATURAL.USER.LOAD,DISP=SHR //NATLIB DD DSN=NATURAL.V2.USER.LOAD,DISP=SHR//* //SYSLIN DD* ... ... INCLUDE MODULES FOR NUCLEUS ... INCLUDE NATLIB(NATPARM) NATPARM MODULE INCLUDE SYSLMOD(LOGPROG) LOGON NATURAL PGM INCLUDE SYSLMOD(EDITPROG) EDITOR NATURAL PGM ... ... INCLUDE ENTRY AND NAME CARDS ... /*
カタログ化プロジェクトを一括してリンクした場合(手順 3 のオプション)は、個別のロードモジュールの代わりにこのロードモジュールをニュークリアスのリンクに含めます。