Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


ストレージとそのアドレス可能度

COBOL プログラムを実行するときは、プログラムおよびプログラムで使用されるデータは仮想記憶域にあります。COBOL で使用するストレージは、16MB 境界より下でも 16MB 境界より上でも構いませんが、2GB の境界を超えないようにしてください。このストレージをアドレッシングするときは、24 ビットおよび 31 ビットの 2 つのアドレッシング・モードが使用可能です。

24 ビット・アドレッシングを使用して、16MB 境界より下のストレージをアドレッシングすることができます (ただし、16MB 境界より上のアドレッシングはできません)。31 ビット・アドレッシングを使用すると、16MB 境界より上と 16MB 境界より下のどちらのストレージでもアドレッシングできます。31 ビット・アドレッシングを使用して、無制限のストレージ をアドレッシングできます。したがって、16MB 境界より上と 16MB 境界より下の両方を含む、プログラムで使用可能なすべてのストレージをアドレッシングできます。

Enterprise COBOL は、z/OS の 64 ビットの仮想アドレッシング機能を直接には利用しませんが、31 ビット・アドレッシング・モードまたは 24 ビット・アドレッシング・モードで実行している COBOL アプリケーションは、64 ビット z/OS システムで完全にサポートされます。

アドレッシング・モード (AMODE) は、ユーザーのプログラムによってどのハードウェア・アドレッシング・モードがサポートされるかを示す属性です。24 ビット・アドレッシング、31 ビット・アドレッシング、24 ビットまたは 31 ビット・アドレッシングのいずれかを示す属性があります。この属性はそれぞれ AMODE 24AMODE 31、または AMODE ANY になります。オブジェクト・プログラム、ロード・モジュール、および実行プログラムにはそれぞれ AMODE 属性があります。Enterprise COBOL オブジェクト・プログラムはすべて AMODE ANY です。

常駐モード (RMODE) は、仮想記憶域のどこにプログラムが常駐するかを示すプログラム・ロード・モジュールの属性です。16MB 境界の下、16MB 境界の下または上の 2 つの属性があります。この属性は RMODE 24 または RMODE ANY です。

Enterprise COBOL は、言語環境プログラムのサービスを使用して、実行時に使用されるストレージを制御します。 したがって、COBOL コンパイラー・オプションおよび言語環境プログラムのランタイム・オプションは、単独でまたは組み合わせによって、プログラムとデータの AMODE 属性および RMODE 属性に影響を与えます。

DATA
プログラムが RENT を指定してコンパイルされている場合、WORKING-STORAGE データ、入出力バッファー、パラメーター・リスト用ストレージのロケーションに影響を及ぼすコンパイラー・オプション。
RMODE
常駐モードに影響を及ぼすコンパイラー・オプション。 プログラムが NORENT を指定してコンパイルされている 場合、WORKING-STORAGE データ、入出力バッファー、 パラメーター・リスト用のストレージのロケーションにも影響を及ぼします。
RENT
再入可能プログラムを生成するためのコンパイラー・オプション。
HEAP
ランタイム・ヒープのストレージを制御するランタイム・オプション。 例えば、COBOL WORKING-STORAGE は、ヒープ・ストレージから割り振られます。
STACK
ランタイム・スタックのストレージを制御するランタイム・オプション。 例えば、COBOL LOCAL-STORAGE は、スタック・ストレージから割り振られます。
ALL31
アプリケーションを完全に AMODE 31 で実行できるかどうかを指定するランタイム・オプション。

RMODE の設定

RMODE オプションと RENT オプションは、プログラムの RMODE 属性を決定します。

表 1. RMODE 属性に対する RMODE および RENT コンパイラー・オプションの影響
RMODE コンパイラー・オプション RENT コンパイラー・オプション RMODE 属性
RMODE(AUTO) NORENT RMODE 24
RMODE(AUTO) RENT RMODE ANY
RMODE(24) RENT または NORENT RMODE 24
RMODE(ANY) RENT または NORENT RMODE ANY

リンク・エディットに関する考慮事項: COBOL が生成するオブジェクト・コードに属性 RMODE 24 がある場合には、RMODE 24 でオブジェクト・コードをリンク・エディットする必要があります。 COBOL が生成するオブジェクト・コードに属性 RMODE ANY がある場合には、RMODE ANY または RMODE 24 でオブジェクト・コードをリンク・エディットすることができます。

データの受け渡しに関するストレージ制限

16MB 境界より上のストレージで割り振られたパラメーターを AMODE 24 サブプログラムに渡してはなりません。31 ビット・アドレッシング・モードで実行しているプログラムの場合は、WORKING-STORAGE データおよびパラメーター・リストを強制的に境界より下に配置して、AMODE 24 で実行しているプログラムにデータを渡してください。

  • DATA(24) を指定して、再入可能プログラム (RENT) をコンパイルする。
  • RMODE(24) または RMODE(AUTO) を指定して、再入不可プログラム (NORENT) をコンパイルする。
  • RMODE(ANY) を指定してコンパイルされた再入不可プログラム (NORENT) は、RMODE 24 を指定してリンク・エディットする必要があります。NORENT プログラムに対するデータ域は、プログラムが DATA(24) でコンパイルされている場合でも、プログラムのロード先に応じて、16MB 境界より上または下になります。 DATA オプションは、NORENT を指定してコンパイルされたプログラムに影響を与えません。

データ域のロケーション

再入可能プログラムの場合は、DATA コンパイラー・オプションおよび HEAP ランタイム・オプションによって、データ域のストレージ (WORKING-STORAGE SECTIONFD レコード域など) を 16MB 境界より下から獲得するのか、制限のないストレージから獲得するのかを制御します。プログラムが 16MB 境界より上の仮想記憶域アドレスで 31 ビット・アドレス方式で実行される場合は、プログラムを RENT または RMODE(ANY) でコンパイルしなければなりません。DATA オプションは、NORENT を指定してコンパイルされたプログラムに影響を与えません。

ランタイム・オプション HEAP(,,BELOW) を指定すると、 DATA コンパイラー・オプションの効果はなくなります。WORKING-STORAGE SECTION データ域のストレージは、 16MB 境界より下から割り振られます。 しかし、HEAP(,,ANYWHERE) をランタイム・オプションとして指定すると、データ域のストレージは、プログラムを DATA(24) コンパイラー・オプションを使用してコンパイルした場合は 16MB 境界より下から割り振られ、DATA(31) コンパイラー・オプションを使用してコンパイルした場合は、制限のないストレージから割り振られます。

LOCAL-STORAGE データのストレージ

LOCAL-STORAGE データ項目のロケーションは、STACK ランタイム・オプションおよびプログラムの AMODE によって制御されます。LOCAL-STORAGE データ項目は、STACK(,,ANYWHERE) ランタイム・オプションが有効で、プログラムが AMODE 31 で実行されているときは、制限のないストレージで獲得されます。それ以外の場合、LOCAL-STORAGE は 16MB 境界より下で獲得されます。DATA コンパイラー・オプションは、LOCAL-STORAGE データのロケーションに影響を与えません。

外部データに対するストレージ

DATA コンパイラー・オプションは、動的データ域 (WORKING-STORAGEFD レコード域、およびパラメーター・リスト) のストレージ獲得方法に影響を与えるだけでなく、EXTERNAL データ用のストレージをどこから獲得するかにも影響を与えることがあります。EXTERNAL データに必要なストレージは、次の条件が満たされる場合には、制限のないストレージから獲得されます。

  • プログラムが、DATA(31) および RENT コンパイラー・オプション、または RMODE(ANY) および NORENT コンパイラー・オプションでコンパイルされている。
  • HEAP(,,ANYWHERE) ランタイム・オプションが有効である。
  • ALL31(ON) ランタイム・オプションが有効である。

これ以外の場合はすべて、EXTERNAL データ用のストレージは 16MB 境界より下から獲得されます。ALL31(ON) ランタイム・オプションを指定するためには、実行単位内のすべてのプログラムが 31 ビット・アドレッシング・モードで実行可能でなければなりません。

QSAM 入出力バッファー用のストレージ

DATA コンパイラー・オプションは、QSAM ファイルの入出力バッファーをどこに獲得するかにも影響する場合があります。QSAM ファイルのバッファーの割り振りおよび DATA コンパイラー・オプションについては、以下の関連参照情報を参照してください。

関連概念
AMODE 切り替え  
言語環境プログラム プログラミング・ガイド
(ヒープ・ストレージの概要: AMODE の考慮事項)


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)