このドキュメントでは、Natural でメインストレージを割り当て使用する方法について説明します。 Natural ニュークリアスコンポーネントによって要求されるストレージ領域は "バッファ" と呼ばれます。
以下のトピックについて説明します。
ストレージ環境には、以下の 2 つのタイプがあります。
スレッドストレージ環境(代表的なマルチユーザー環境、例えば CICS)
非スレッドストレージ環境(代表的なシングルユーザー環境、例えばバッチ)
スレッド環境では、"スレッド" と呼ばれるストレージの大きい領域が、あらかじめセッションに割り当てられます。 スレッドサイズは、システム管理者が事前に定義する必要があります。 セッション中に、各バッファ割り当て要求(getmain)は、Natural 自体によってスレッド内で満たされます。 バッファ要求の解放(freemain)によるフリースペースは再使用できます。
特定のイベント(端末 I/O や長い待機など)の発生時に、スレッドストレージを圧縮し、外部ストレージ(スワッププールやロールファイル)にロールアウトすることができます。 解放されたスレッドは、別の Natural セッションで再使用できます。 中断されたセッションが再開されるときには、セッションが外部ストレージからフリースレッドに再度ロールインされます。
圧縮されたスレッドストレージが保存されるスワッププールまたはロールファイル上の場所は、"スロット" と呼ばれます。 スロットサイズは固定長で、システム管理者が定義します。 スロットには、最も大きい圧縮スレッドストレージを収容できる大きさが必要です。 最悪の場合は、スレッドサイズと同じになります。
非スレッド環境では、すべてのストレージ要求がオペレーティング(サブ)システムに直接渡されます。 ロールアウト/ロールインは実行されません。つまり、セッション用のバッファは、明示的に解放されない限り、セッション終了まで保持されます。
バッファには、以下の 3 つのタイプがあります。
固定バッファ
可変バッファ
物理バッファ
固定バッファと可変バッファには、すべての環境に共通なレイアウトの 32 バイトの接頭辞が付きます。 バッファの接頭辞は、バッファ名で始まり、その後に 5 つのバッファ長フィールド(total、used low-end、max. used、used high-end、max.
used high-end)が続きます。 使用された長さのフィールドは、バッファを所有しているコンポーネントによって保持され、スレッド圧縮に使用されます。 各バッファは、一意の ID 番号(1~255)を持ち、1 回だけ存在可能です。 一部のバッファはセッションの初期化時に割り当てられ、その他のバッファは要求があったときに割り当てられます。
システムコマンド BUS
を使用して、現在割り当てられているすべての固定および可変バッファに関する情報を表示できます。 バッファの特性は、ソースモジュール NATCONFG
で定義され、特別な場合のみカスタマイズできます(後述の「バッファ特性のカスタマイズ」を参照)。 一部のバッファのサイズはプロファイルパラメータで指定できます。 このようなバッファの完全なリストについては、プロファイルパラメータ DS
を参照してください。
物理バッファは、スレッド外に割り当てられます。 物理バッファは、バッファ接頭辞を持たず、一意でもありません。 これらは、特別な場合に一時的に使用されます。 物理バッファは、次の端末 I/O 時に自動的に解放されます。 プロファイルパラメータ WPSIZE
を使用して、物理バッファ用のワークプールを定義できます。
スレッド環境では、固定バッファはスレッドのローエンドからのみ割り当てられます。 可変バッファとは対照的に、固定バッファはスレッドと相対的に移動することはできず、サイズの増減もできません。
スレッド環境では、可変バッファはスレッドのハイエンドからのみ割り当てられます。 スレッドに余分のスペースがなくなると、可変バッファは一時的にスレッド外に割り当てられます。 スレッドの圧縮時に、使用されたすべてのバッファ領域はスレッドに圧縮されます。 スレッド内に収容できない場合は、セッションが異常終了します。 このような事態は、特に、大きいダイナミック変数を使用している場合に発生します。
スレッドの圧縮後、可変バッファがスレッド内またはスレッド外の別の場所に移動されていることがあります。 可変バッファのサイズは、要求時に所有コンポーネントによって増減できます。 一部の可変バッファは、スレッド圧縮時に自動的に縮小または解放されるように定義できます。
スレッド外に割り当てられるストレージの総容量を、プロファイルパラメータ OVSIZE
で制限できます。
すべてのバッファは、ソースモジュール NATCONFG
に NTBUFID
マクロ定義によって定義されています。
注意: 以下で説明する最小および最大バッファサイズ以外のバッファ特性は変更しないでください。予期しない結果になることがあります。 |
バッファサイズ制限は、NTBUFID
マクロのパラメータ MIN
および MAX
で変更できます。 これは、可変バッファ(TYPE=VAR
)の場合のみです。 すべてのバッファの制限は、デフォルト(0~2097151 KB)または対応するプロファイルパラメータの制限で定義されます。 詳細については、プロファイルパラメータ DS
を参照してください。 Natural パラメータモジュール(NATPARM
)のバッファサイズプロファイルパラメータの制限は、NTBUFID
のパラメータ MIN
および MAX
の影響を受けませんが、ダイナミックプロファイルバッファサイズパラメータの制限は MIN
および MAX
によって上書きされます。
MAX
パラメータに値(KB 単位)を設定すると、セッション実行中に、このバッファのサイズは設定した値を超えることができなくなります。 これにより、このバッファ以上のバッファストレージが要求されると、ランタイムエラーが発生することがあります。
MIN
パラメータに値(KB 単位)を設定すると、セッション実行中に、このバッファのサイズは設定した値を下回ることができなくなります。 例えば、3GL CALLNAT インターフェイス(NAT3GCAN
)の場合は、バッファの最小値の設定は、以下のバッファに有効です。これらのバッファのサイズは、3GL プログラムによって呼び出される下位レベルの Natural プログラムでは大きくできないからです。
DATSIZE |
データエリア |
GLBTOOL |
ユーティリティ GDA |
GLBUSER |
ユーザー GDA |
GLBSYS |
システム GDA |
AIVDAT |
AIV エリア |
CONTEXT |
コンテキスト変数 |
バッファ特性定義の例:
DATSIZE NTBUFID ID=GETMDATA,TYPE=VAR+INI,MAX=512
バッファサイズに影響するプロファイルパラメータの詳細については、「バッファサイズ」を参照してください。