[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

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ビット・アドレスを使用できます。

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

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

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


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つの条件が満たされるときに限って使用されます。

クォドワード・サイズ・フィールド内の値は, 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ビット拡張をサポートします。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]