日本-日本語
日本HPホーム 製品 & サービス サポート & ドライバー ソリューション ご購入方法
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:仮想アドレス空間の概要
第 3 章:システム・サービスの 64 ビット・アドレッシングのサポート
第 4 章:メモリ管理 VLM 機能
第 5 章:64 ビット・アドレッシングを対象とする RMS インタフェースの強化
第 6 章:ファイル・システムの 64 ビット・アドレッシングのサポート
第 7 章:OpenVMS Alpha デバイスの 64 ビット・アドレッシングのサポート
第 8 章:OpenVMS Alpha 64 ビット API ガイドライン
第 9 章:64 ビット・アドレッシングをサポートする OpenVMS Alpha ツールおよびユーティリティ
第 10 章:言語およびポインタの 64 ビット・アドレッシング・サポート
第 11 章:DEC C RTL の 64 ビット・アドレッシング・サポート
付録 A :64 ビット・アドレッシングのための C マクロ
付録 B :64 ビット・アドレッシングのための MACRO-32 マクロ
付録 C :64 ビット・プログラム例
付録 D :VLM プログラム例
索引
PDF
OpenVMS ホーム
Open VMS Alpha オペレーティング・システム | HPE 日本

Open VMS Alpha オペレーティング・システム
64 ビット・アドレッシングおよび VLM 機能説明書


目次 索引

第 5 章
64 ビット・アドレッシングを対象とする RMS インタフェースの強化

本章では,64 ビット・アドレッシングをサポートし, RMS を使用して P2 または S2 空間への入出力操作を実現するために, RMS インタフェースに加えられた変更について示します。既存の RMS コードにわずかな変更を加えるだけで,この RMS 強化機能をすべて使用することができます。

RMS の 64 ビット・アドレッシングのサポートについての詳細は,『OpenVMS Record Management Services Reference Manual』を参照してください。

RMS ユーザ・インタフェースは,多くの制御データ構造 (FAB,RAB,NAM,XAB) で構成されています。これらは 32 ビット・ポインタで一緒にリンクされ,ファイル名文字列と項目リストに加えて入出力バッファを含む I/O バッファおよびさまざまなユーザ・データ・バッファに対する埋め込みポインタを含みます。 64 ビットのアドレス指定可能リージョンをサポートする RMS を使用すると,次に示すユーザ I/O バッファで 64 ビット・アドレスを使用できます。

  • UBF (ユーザ・レコード・バッファ)

  • RBF (レコード・バッファ)

  • RHB (固定長レコード・ヘッダ・バッファ ; VFC レコード形式の固定部分)

  • KBF (ランダム・アクセス用のキー値を含むキー・バッファ)

ただし,RAB$L_PBF で示されるプロンプト・バッファは例外です。これは,ターミナル・ドライバが 64 ビット・アドレスを使用しないためです。

64 ビット・アドレッシングを実現するため, RMS インタフェースに対して次の強化が行われました。

  • 次のユーザ I/O サービスのために,データ・バッファが P2 または S2 空間に存在する。

    • レコード I/O サービス : $GET, $FIND, $PUT, $UPDATE

    • ブロック I/O サービス : $READ, $WRITE

  • RAB 構造が,これらのサービスで使用するレコードおよびデータ・バッファを指す。

  • 既存の RAB 構造を拡張して,64 ビット・バッファ・ポインタとサイズ用に使用する。

  • RMS ブロック I/O サービス($READ および $WRITE) のバッファ・サイズの最大値を, 64 K バイトから 2 G バイトに増やす。ただし次の場合は例外。

    • RMS ジャーナリングの場合,ジャーナルされた $WRITE サービスは現在の最大値 (65535 からジャーナル・オーバヘッドの 99 バイトを引いた値)に制限される。最大値を超えると, RSZ エラーが返される(RAB$L_STS)。

    • 磁気テープは,デバイス・ドライバ・レベルで引き続き 65535 バイトに制限される。


    RMS レコード I/O サービス($GET,$PUT,$UPDATE) のバッファ・サイズの最大値に変更はない。以前の RMS オン・ディスク・レコード・サイズの制限がそのまま適用される。

残りの RMS インタフェースは現時点では 32 ビットに制限される。

  • FAB, RAB, NAM,および XAB は 32 ビット空間に引き続き割り当てなければならない。

  • ファイル名へのディスクリプタ,または埋め込みポインタ,項目リストなどは,引き続き 32 ビット・ポインタでなければならない。

  • RMS システム・サービスへ渡される引数は,32 ビット引数のままである。 64 ビット引数を渡そうとすると,エラー SS$_ARG_GTR_32_BITS が返される。



5.1 RAB64 データ構造

RMS ユーザ・インタフェース構造である RAB64 は, RAB を拡張したもので,64 ビット・バッファ・アドレスに対処することができます。 RAB64 データ構造は, 図 5-1 に示すように, 32 ビットの RAB 構造と,これに続く 64 ビット拡張で構成されています。

図 5-1 RAB64 データ構造


RAB64 に含まれるフィールドは RAB フィールドとすべて同一ですが,フィールド名には,RAB 接頭辞ではなく RAB64 接頭辞が含まれます。 RAB64 はまた,拡張部に次の新フィールドを含みます。

フィールド このフィールドの
拡張
説明
RAB64$Q_CTX RAB64$L_CTX ユーザ・コンテキスト。 RMS はこのフィールドを使用しないが,ユーザが使用する。 CTX フィールドは,ポインタを格納しておくために使用されることがある。非同期 I/O の場合,ユーザに AST パラメータに相当する機能を提供する。
RAB64$PQ_KBF RAB64$L_KBF ランダム・アクセスするためのキー値を含むキーバッファ・アドレス ($GET および $FIND)。
RAB64$PQ_RBF RAB64$L_RBF レコード・バッファ・アドレス($PUT, $UPDATE,および $WRITE)。
RAB64$PQ_RHB RAB64$L_RHB レコード・ヘッダ・バッファ・アドレス(VFC レコード形式の固定部分)。
RAB64$Q_RSZ RAB64$W_RSZ レコード・バッファ・サイズ。
RAB64$PQ_UBF RAB64$L_UBF ユーザ・バッファ・アドレス($GET および $READ)。
RAB64$Q_USZ RAB64$W_USZ ユーザ・バッファ・サイズ。

名前に PQ タグを含むフィールドは, 64 ビット・アドレス,または 32 ビット・アドレスの符合拡張による 64 ビット・アドレスのいずれも持つことができます。そのため 64 ビット・アドレスの使用に関わらず,すべてのアプリケーションでこれらのフィールドを使用することができます。

大部分のレコード I/O サービス要求では,デバイスとユーザのデータ・バッファとの間に RMS 内部バッファがあります。 RMS サービスの $PUT は唯一の例外です。デバイスがユニット・レコード・デバイスでネットワーク越しにアクセスされない場合, RMS はユーザ・レコード・バッファ(RBF) のアドレスを $QIO システム・サービスに渡します。 64 ビット・アドレス空間をサポートしないレコード単位取り扱い装置を対象として, 64 ビット・アドレス空間に割り当てられているレコード・バッファ(RBF) を不適切に $PUT に指定すると,SS$_NOT64DEVFUNC が返されます ($QIO についての詳細は 第 7 章 を参照してください)。 RMS は RAB64$L_STV の 2 番目の状態値として SS$NOT64DEVFUNC でエラー状態 RMS$_SYS を返します。

RMS システム・サービスは,RAB64 構造と RAB 構造をサポートします。

5.2 64 ビット RAB 拡張の使用

アプリケーションが 64 ビット RMS サポートを使用するには,最小限のソース・コードの変更だけが必要です。

RMS では,RAB を使用できる場所で,RAB64 を使用することを認めています。たとえば,ある RMS レコードやブロック I/O サービスに渡される先頭引数として, RAB の代わりに RAB64 を使用することができます。

RAB64 は,既存の RAB の拡張で上位互換性があります。そのため大部分のソース・モジュールは,RAB64 内のフィールドへの参照を,まるで RAB への参照であるかのように取り扱うことができます。一方,64 ビット・バッファ・アドレスの場合は,次の 2 つの条件が満たされるときに限って使用されます。

  • RAB64$B_BLN フィールドが RAB64$C_BLN64 に初期化され,拡張が存在することを示している。

  • RAB の 32 ビット部分内の 32 ビット・アドレス・フィールドが -1 を含んでいる。

クォドワード・サイズ・フィールド内の値は, 32 ビット・アドレス・フィールドの内容がその使用を指定しているときに限って使用されます。この例を次に示します。

このアドレス・フィールドが -1 を含む場合 このフィールド内の
アドレスが使用される
このフィールド内の
サイズが使用される
RAB64$L_UBF RAB64$PQ_UBF 1 RAB64$Q_USZ
RAB64$L_RBF RAB64$PQ_RBF 1 RAB64$Q_RSZ
RAB64$L_KBF RAB64$PQ_KBF RAB64$B_KSZ
RAB64$L_RHB RAB64$PQ_RHB FAB$B_FSZ

1このフィールドは,64 ビット・アドレス,または 64 ビットに符号拡張された 32 ビット・アドレスのいずれかを含むことができる。

RMS は,RAB を使用できる場所での RAB64 の使用を認めていますが,ソース言語によっては,ほかの制限が課せられる場合があります。詳細は,使用しているソース言語のマニュアルを参照してください。

5.3 ユーザRAB構造をサポートするマクロ

次の新しい MACRO-32 マクロおよび BLISS マクロが実装され,ユーザ RAB 構造に対する 64 ビット拡張をサポートします。

  • MACRO-32 マクロ

    • $RAB64 ($RAB のカウンタパート)

    • $RAB64_STORE ($RAB_STORE のカウンタパート)


    これらのマクロを使用することによって,次の状態が発生する。

    • RAB$B_BLN に RAB$C_BLN64 の定数が代入される。

    • 元のロングワード I/O バッファが -1 に初期化され, USZ および RSZ ワード・サイズが 0 に初期化される。

    • UBF,USZ,RBF,RSZ, RHB,または KBF キーワードを使用して指定した値が,これらのキーワードのクォドワード・フィールドに移動する (これに対して,$RAB および $RAB_STORE マクロは,これらの値を,これらのキーワードのロングワード [またはワード] フィールドに移動する)。

  • BLISS マクロ
    次の BLISS マクロは,STARLET.R64 ライブラリでだけ使用できる。これは,マクロが使用する QUAD キーワードが, BLISS-64 でだけ使用できるためである。このため,このマクロを参照する BLISS ルーチンはすべて, BLISS-64 コンパイラを使用してコンパイルされなければならない。

    • $RAB64 ($RAB のカウンタパート)

    • $RAB64_INIT ($RAB_INIT のカウンタパート)

    • $RAB64_DECL ($RAB_DECL のカウンタパート)


    先頭の 2 つのマクロ($RAB64 および $RAB64_INIT)を使用することによって,次の状態が発生する。

    • RAB$B_BLN に RAB$C_BLN64 の定数が代入される。

    • 元のロングワード I/O バッファが -1 に初期化され, USZ および RSZ ワード・サイズが 0 に初期化される。

    • キーワード UBF,USZ,RBF,RSZ,RHB, KBF に代入された値は,これらのキーワードのクォドワード・フィールドに移動される (これに対して,$RAB および $RAB_INIT マクロは,これらの値を,これらのキーワードのロングワード [またはワード] フィールドに移動する)。


    3 番目のマクロ($RAB64_DECL)は, RAB$C_BLN64 の長さのバイトのブロック構造を割り当てる。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡