日本-日本語

製品  >  ソフトウェア  >  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 機能説明書


目次 索引

第 3 章
システム・サービスの 64 ビット・アドレッシングのサポート

新規に,OpenVMS システム・サービスが追加されました。また,64 ビット・アドレス空間を管理することを目的として,多くの既存のサービスに変更が加えられました。本章では,64 ビット・アドレッシング,および VLM をサポートするシステム・サービスについて説明します。具体的には,64 ビット・アドレスをサポートするために既存の 32 ビット・サービスに加えられた変更について説明し,新しく追加された 64 ビット・システム・サービスの一覧を示します。

アプリケーション・プログラム内で 64 ビット・アドレッシングをサポートするシステム・サービスの例については, 付録 C を参照してください。本章に示されている OpenVMS システム・サービスについての詳細は,『OpenVMS System Services Reference Manual: A--GETUAI』および『OpenVMS System Services Reference Manual: GETUTC--Z』を参照してください。

3.1 システム・サービスに関する用語

本書では,次に示すシステム・サービス定義を使用します。



32 ビット・システム・サービス

32 ビット・システム・サービスは,すべてのアドレス引数を 32 ビット・アドレスとして受け取ることが定義されているシステム・サービスです。値渡しの場合, 32 ビット仮想アドレスは実際には 32 ビット符号拡張アドレスの可能性があり,この場合は 64 ビットがサービスに渡されます。

64 ビット・フレンドリ・インタフェース

64 ビット・フレンドリ・インタフェースは,すべての 64 ビット・アドレスで呼び出すことができるインタフェースです。インタフェースにまったく変更がなく, 64 ビット・アドレスを処理するのに変更も必要としない場合,その 32 ビット・システム・サービス・インタフェースは, 64 ビット・システム・サービス・フレンドリです。システム・サービスを実現する内部コードは,変更を必要とする場合があります。ただし,システム・サービス・インタフェースは変更の必要はありません。

バージョン 7.0 より前のバージョンの OpenVMS Alpha の OpenVMS Alpha システム・サービスの大部分は,次の理由から 64 ビット・フレンドリ・インタフェースを持っています。

  • 『OpenVMS Calling Standard』では,標準ルーチンへの引数が 64 ビットになるように定義している。ルーチンの呼び出し側は 32 ビット引数を符合拡張して 64 ビットにする。

  • 64 ビットの文字列ディスクリプタは,実行時に 32 ビットの文字列ディスクリプタと区別できる(64 ビットの文字列ディスクリプタについての詳細は『OpenVMS Calling Standard』参照)。

  • ユーザ可視 RMS データ構造は, 32 ビット形式でない構造が使用されているかどうかを RMS ルーチンが識別できるなど,型情報を埋め込むことができる (RMS 64 ビット・アドレッシング・サポートについての詳細は, 第 5 章 を参照)。

64 ビット・フレンドリ・システム・サービスの例には $QIO,$SYNCH, $ENQ,$FAO などがあります。

$CRETVA,$DELTVA,および $CRMPSC など,メモリ管理システム・サービスの大部分は, 64 ビット・フレンドリでないインタフェースを伴うルーチンです。 INADR 引数および RETADR 引数配列を変更して 64 ビット・アドレスを保持することは簡単ではありません。

64 ビット・システム・サービス

64 ビット・システム・サービスは,すべての引数を 64 ビット・アドレスとして受け付けるよう定義されているシステム・サービスです。また 64 ビット・システム・サービスは,すべての仮想アドレスの 64 ビット全体を使用して,64 ビットの仮想アドレスを渡します。

64 ビット・システム・サービスのうち,64 ビット・アドレスを参照渡しで受け取るサービスには,_64 という接尾辞がつきます。 32 ビットと 64 ビットの両方で使用できるシステム・サービスでは,これによって 64 ビット機能のバージョンと,対応する 32 ビット機能のバージョンが区別されます。一方,新規サービスの場合は,この接尾辞によって, 64 ビット長アドレス・セルが読み込み/書き込みされることが明確に示されます。埋め込み 64 ビット・アドレスを含む構造が渡されるとき,この構造が 64 ビット構造として自己識別しない場合にも,この接尾辞が使用されます。ルーチンが受け取るのは 64 ビット・ディスクリプタのため,ルーチン名に "_64" を含める必要はありません。なお,任意の値を参照渡しで渡すときには,接尾辞が必要ないことに注意してください。接尾辞が必要なのは,64 ビット・アドレスを参照渡しで渡すときです。



64 ビット・アドレスをサポートする OpenVMS Alpha システム・サービスを 表 3-1 に示します。

RMS システム・サービスもいくつかの 64 ビット・アドレッシング機能を提供しますが,完全な 64 ビット・システム・サービスではないため,次の表には示されていません。詳細は, 第 5 章 を参照してください。

表 3-1 64 ビット・システム・サービス
サービス 引数
アライメント・システム・サービス
$GET_ALIGN_FAULT_DATA buffer_64, buffer_size, return_size_64
$GET_SYS_ALIGN_FAULT_DATA buffer_64, buffer_size, return_size_64
$INIT_SYS_ALIGN_FAULT_REPORT match_table_64, buffer_size, flags
AST システム・サービス
$DCLAST astadr_64, astprm_64, acmode
条件ハンドラ・システム・サービス
$FAO ctrstr_64, outlen_64, outbuf_64, p1_64...pn_64
$FAOL ctrstr_64, outlen_64, outbuf_64, long_prmlst_64
$FAOL_64 ctrstr_64, outlen_64, outbuf_64, quad_prmlst_64
$GETMSG msgid, msglen_64, bufadr_64, flags, outadr_64
$PUTMSG msgvec_64, actrtn_64, facnam_64, actprm_64
$SIGNAL_ARRAY_64 mcharg, sigarg_64
CPU スケジューリング・システム・サービス
$CPU_CAPABILITIES cpu_id, select_mask, modify_mask, prev_mask, flags
$FREE_USER_CAPABILITY cap_num, prev_mask, flags
$GET_USER_CAPABILITY cap_num, select_num, select_mask, prev_mask, flags
$PROCESS_AFFINITY pidadr, prcnam, select_mask, modify_mask, prev_mask, flags
$PROCESS_CAPABILITIES pidadr, prcnam, select_mask, modify_mask, prev_mask, flags
$SET_IMPLICIT_AFFINITY pidadr, prcnam, state, cpu_id, prev_mask
イベント・フラグ・システム・サービス
$READEF efn, state_64
高速 I/O システム・サービス
$IO_CLEANUP fandle
$IO_PERFORM fandle, chan, iosadr, bufadr, buflen, porint
$IO_PERFORMW fandle, chan, iosadr, bufadr, buflen, porint
$IO_SETUP func, bufobj, iosobj, astadr, flags, return_fandle
I/O システム・サービス
$QIO(W) 1 efn, chan, func, iosb_64, astadr_64, astprm_64, p1_64, p2_64, p3_64, p4_64, p5_64, p6_64
$SYNCH efn, iosb_64
ロッキング・システム・サービス
$DEQ lkid, vablk_64, acmode, flags
$ENQ(W) efn, lkmode, lksb_64, flags, resnam_64, parid, astadr_64, astprm_64, blkast_64, acmode
論理名システム・サービス
$CRELNM attr, tabnam, lognam, acmode, itmlst
$CRELNT ttr, resnam, reslen, quota, promsk, tabnam, partab, acmode
$DELLNM tabnam, lognam, acmode
$TRNLNM attr, tabnam, lognam, acmode, itmlst
メモリ管理システム・サービス
$ADJWSL pagcnt, wsetlm_64
$CREATE_BUFOBJ_64 start_va_64, length_64, acmode, flags, return_va_64, return_length_64, return_buffer_handle_64
$CREATE_GDZRO gsdnam_64, ident_64, prot, length_64, acmode, flags, ...
$CRMPSC_GDZRO_64 gsdnam_64, ident_64, prot, length_64, region_id_6 4, section_offset_64, acmode, flags, return_va_64, return_length_64, ...
$CREATE_GFILE gsdnam_64, ident_64, file_offset_64, length_64, chan, acmode, flags, return_length_64, ...
$CREATE_GPFILE gsdnam_64, ident_64, prot, length_64, acmode, flags
$CREATE_GPFN gsdnam_64, ident_64, prot, start_pfn, page_count, acmode, flags
$CREATE_REGION_64 length_64, region_prot, flags, return_region_id_64, return_va_64, return_length_64, ...
$CRETVA_64 region_id_64, start_va_64, length_64, acmode, flags, return_va_64, return_length_64
$CRMPSC_FILE_64 region_id_64, file_offset_64, length_64, chan, acmode, flags, return_va_64, return_length_64, ...
$CRMPSC_GFILE_64 gsdnam_64, ident_64, file_offset_64, length_64, chan, region_id_64, section_offset, acmode, flags, return_va_64, return_length_64, ...
$CRMPSC_GPFILE_64 gsdnam_64, ident_64, prot, length_64, region_id_64, section_offset_64, acmode, flags, return_va_64, return_length_64, ...
$CRMPSC_GPFN_64 gsdnam_64, ident_64, prot, start_pfn, page_count, region_id_64, relative_page, acmode, flags, return_va_64, return_length_64, ...
$CRMPSC_PFN_64 region_id_64, start_pfn, page_count, acmode, flags, return_va_64, return_length_64, ...
$DELETE_BUFOBJ buffer_handle_64
$DELETE_REGION_64 region_id_64, acmode, return_va_64, return_length_64
$DELTVA_64 region_id_64, start_va_64, length_64, acmode, return_va_64, return_length_64
$DGBLSC flags, gsdnam_64, ident_64
$EXPREG_64 region_id_64, length_64, acmode, flags, return_va_64, return_length_64
$GET_REGION_INFO function_code, region_id_64, start_va_64, ,buffer_length, buffer_address_64, return_length_64
$LCKPAG_64 start_va_64, length_64, acmode, return_va_64, return_length_64
$LKWSET_64 start_va_64, length_64, acmode, return_va_64, return_length_64
$MGBLSC_64 gsdnam_64, ident_64, region_id_64, section_offset_64, length_64, acmode, flags, return_va_64, return_length_64, ...
$MGBLSC_GPFN_64 gsdnam_64, ident_64, region_id_64, relative_page, page_count, acmode, flags, return_va_64, return_length_64, ...
$PURGE_WS start_va_64, length_64
$SETPRT_64 start_va_64, length_64, acmode, prot, return_va_64, return_length_64, return_prot_64
$ULKPAG_64 start_va_64, length_64, acmode, return_va_64, return_length_64
$ULWSET_64 start_va_64, length_64, acmode, return_va_64, return_length_64
$UPDSEC_64(W) start_va_64, length_64, acmode, updflg, efn, iosa_64, return_va_64, return_length_64, ...
プロセス制御システム・サービス
$GETJPI(W) efn, pidadr, prcnam, itmlst, iosb, astadr, astprm
$PROCESS_SCAN pidctx, itmlst
時刻システム・サービス
$ASCTIM timlen, timbuf, timadr, cvtflg
$ASCUTC timlen, timbuf, utcadr, cvtflg
$BINTIM timbuf, timadr
$BINUTC timbuf, utcadr
$CANTIM reqidt_64, acmode
$GETTIM timadr_64
$GETUTC utcadr
$NUMTIM timbuf, timadr
$NUMUTC timbuf, utcadr
$SETIME timadr
$SETIMR efn, daytim_64, astadr_64, reqidt_64, flags
$TIMCON timadr, utcadr, cvtflg
他のシステム・サービス
$CMEXEC_64 routine_64, quad_arglst_64
$CMKRNL_64 routine_64, quad_arglst_64
$GETSYI(W) efn, csidadr, nodename, itmlst, iosb, astadr, astprm
$IDTOASC id, namlen, nambuf, resid, attrib, contxt

164 ビット・アドレッシングをサポートする $QIO(W) 引数についての詳細は 第 7 章 参照。



表 3-1 に示されていない OpenVMS システム・サービス,および 64 ビット・アドレスを受け取ることが明示的に指定されていないユーザ作成システム・サービスはすべて,符号拡張チェックを受けます。これらのサービスに渡される引数が正しく符号拡張されていないと, SS$_ARG_GTR_32_BITS というエラー状態が返ります。

3.4 言語の 64 ビット・システム・サービスのサポート

システム・サービスの C 関数プロトタイプは SYS$LIBRARY:SYS$STARLET_C.TLB (または STARLET) にあります。

システム・サービスに 64 ビット MACRO-32 マクロはありません。 MACRO-32 呼び出し者は, AMACRO ビルトイン EVAX_CALLG_64 マクロ,または $CALL64 マクロを使用しなければなりません。 MACRO-32 プログラミングでの 64 ビット・アドレッシングのサポートについての詳細は, Chapter 12 を参照してください。

3.5 C の NEW STARLET 定義

OpenVMS Alpha V7.0 以降, SYS$LIBRARY:SYS$STARLET_C.TLB (または STARLET) は,新規および拡張データ構造体定義,およびシステム・サービスの C 関数プロトタイプを提供します。新しい定義は, OpenVMS C 言語のコーディング規則および SYS$LIBRARY:SYS$LIB_C.TLB で使用されている定義 (typedefs) との一貫性が向上しています。

既存ユーザの STARLET.H とのソース・レベルでの互換性を保持するために, 古い形式の 関数宣言および定義が,省略時の設定としてそのまま提供されています。新しいシステム・サービス関数プロトタイプおよびタイプ定義を利用するには,これらを明示的に有効にしなければなりません。

これには,__NEW_STARLET シンボルを DEC C コマンド行修飾子で定義する方法と,定義をソース・プログラムに直接指定する方法があります。次の例を参照してください。

  • _NEW_STARLET シンボルを DEC C コマンド行修飾子で定義する。


     /DEFINE=(__NEW_STARLET=1) 
    


    または

  • SYS$STARLET_C.TLB ヘッダ・ファイルをインクルードする前に, C ソース・プログラムの中で __NEW_STARLET シンボルを定義する。


    #define __NEW_STARLET 1  
     
    #include  <starlet.h> 
    #include  <vadef.h> 
    

Librarian ユーティリティを使用すると, STARLET.H の中で現在有効なシステム・サービス関数プロトタイプを確認できます。次の例を参照してください。


$ LIBRARY/OUTPUT=STARLET.H SYS$LIBRARY:SYS$STARLET_C.TLB/EXTRACT=STARLET 

次の例は,STARLET.H に定義されている新しいシステム・サービス関数プロトタイプを示します。


    #pragma __required_pointer_size __long 
 
     int sys$expreg_64( 
               struct _generic_64 *region_id_64, 
               unsigned __int64 length_64, 
               unsigned int acmode, 
               unsigned int flags, 
               void *(*(return_va_64)), 
               unsigned __int64 *return_length_64); 
 
    #pragma __required_pointer_size __short 

DEC C ポインタ・サイズ・プログマについての詳細は,『DEC C User's Guide for OpenVMS Systems』を参照してください。

次のソース・コード例は,プログラムの中で参照されている sys$expreg_64 関数プロトタイプを示します。


 
#define __NEW_STARLET 1               /* Enable "New Starlet" features */ 
 
#include <starlet.h>                  /* Declare prototypes for system service 
s */ 
#include <gen64def.h>                 /* Define GENERIC_64 type */ 
#include <vadef.h>                    /* Define VA$ constants */ 
 
#include <ints.h>                     /* Define 64-bit integer types */ 
#include <far_pointers.h>             /* Define 64-bit pointer types */ 
 
{ 
    int status;                       /* Ubiquitous VMS status value */ 
    GENERIC_64 region = { VA$C_P2 };  /* Expand in "default" P2 region */ 
    VOID_PQ p2_va;                    /* Returned VA in P2 space */ 
    uint64 length;                    /* Allocated size in bytes */ 
    extern uint64 page_size;          /* Page size in bytes */ 
 
    status = sys$expreg_64( &region, request_size, 0, 0, &p2_va, &length ); 
    ... 
 
} 

新しい関数プロトタイプで使用されるデータ構造体を 表 3-2 に示します。

表 3-2 _NEW_STARLET プロトタイプが使用する構造体
プロトタイプが使用する構造体 定義されているヘッダ・ファイル 構造体メンバ名の
共通接頭辞
説明
struct _cluevthndl cluevtdef.h cluevthndl$ クラスタ・イベント・ハンドル
struct _fabdef fabdef.h fab$ ファイル・アクセス・ブロック
struct _generic_64 gen64def.h gen64$ 汎用クォドワード構造体
struct _ieee ieeedef.h ieee$ IEEE 浮動小数点制御構造体
struct _ile2 1 iledef.h ile2$ 項目リスト・エントリ 2
struct _ile3 1 iledef.h ile3$ 項目リスト・エントリ 3
struct _ilea_64 1 ilea_64$ iledef.h 64 ビット項目リスト・エントリ A 構造体
struct _ileb_64 1 ileb_64$ iledef.h 64 ビット項目リスト・エントリ B 構造体
struct _iosa iosadef.h iosa$ 入出力状態領域
struct _iosb iosbdef.h iosb$ 入出力状態ブロック
struct _lksb lksbdef.h lksb$ ロック状態ブロック
struct _rabdef rabdef.h rab$ RMS レコード・アクセス・ブロック
struct _secid seciddef.h secid$ グローバル・セクション識別子
struct _va_range va_rangedef.h va_range$ 32 ビット仮想アドレス範囲

1starlet.h 内の関数プロトタイプで,この構造体型の使用を要求するものはない。この構造体型は便宜上提供されており,適切な場所で使用できる。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項