日本-日本語

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


目次 索引



$QIO IO$_DIAGNOSE 関数は強化され, SCSI クラス・ドライバの GKDRIVER, DKDRIVER,および MKDRIVER に対して 64 ビット・アドレッシングをサポートするようになりました。つまり S2DGB の中で指定される仮想アドレスは,ユーザ・アプリケーションの要求に応じて 64 ビット仮想アドレスになります。

$QIO IO$_DIAGNOSE 引数を次に示します。

引数 目的
P1 S2DGB 基底アドレス
P2 S2DGB の長さ
P3 予約。0 を指定する。
P4 予約。0 を指定する。
P5 予約。0 を指定する。
P6 予約。0 を指定する。

STARLET で定義される SCSI Diagnose Buffer (S2DGB) は, 32 ビット・アドレッシングと 64 ビット・アドレッシングの 2 つの形式を認めています。 32 ビット形式は OpenVMS Alpha バージョン6.2 でサポートされている形式と同じです。 32 ビット S2DGB 形式を 図 7-1 に, 64 ビット S2DGB 形式を 図 7-2 に示します。

図 7-1 32 ビットの OpenVMS SCSI-2 Diagnose Buffer (S2DGB) のレイアウト


図 7-2 64 ビットの OpenVMS SCSI-2 Diagnose Buffer (S2DGB) のレイアウト


ユーザ・アプリケーションは,S2DGB$L_OPCODE で形式値を渡すことによって, 2 種類の S2DGB 形式のうちどちらの形式を使用するのかを指定しなければなりません。特に S2DGB$L_OPCODE には,32 ビット形式を要求する OP_XCDB32 (= 1),または 64 ビット形式を要求する OP_XCDB64 (= 2)を割り当てる必要があります。 OP_XCDB64 の値が指定されると,ユーザ・アプリケーションは 64 ビットの S2DGB 形式の使用と,特に,次に説明する S2DGB フィールドに対して 64 ビット名の使用が求められます。同様に,オペレーティング・コードの OP_XCDB32 は,ユーザ・アプリケーションがそのフィールドに対して 32 ビット名を使用することを求めます。

構造の正しい長さは,定数 S2DGB$K_XCDB64_LENGTH (値 : 60 - 10 進) と同様に,定数 S2DGB$K_XCDB32_LENGTH (値 : 60 - 10 進) によって定義されます。

S2DGB 内のフィールドを次に定義します。フィールドの名前が 32 ビットと 64 ビットとでそれぞれ異なる場合は,まず最初に 32 ビット名を示し,次に 64 ビット名を括弧で囲んで示します。アドレスを格納するフィールドを除いて,すべてのフィールドは符号なしのロングワードです。

S2DGB$L_OPCODE

このフィールドは,ユーザ・アプリケーションが S2DGB のほかのフィールドに 32 ビット仮想アドレスを指定するか,または 64 ビット仮想アドレスを指定するかに応じて, S2DGB$K_OP_XCDB32 または S2DGB$K_OP_XCDB64 を含みます。

S2DGB$L_FLAGS

このフィールドは,次の表に示すビット・フィールドを含みます。これらのビット定義はビット 0 で始まり,省略されるビットはありません。これは,Alpha OpenVMS V6.1 以前で使用可能な IO$_DIAGNOSE インタフェースとの互換性のために必要です。

S2DGB$V_READ 実行されている操作が読み込みの場合,このビットは 1 である。操作が書き込みの場合は 0 である。
S2DGB$V_DISCPRIV このビットには,この操作で送られる IDENTIFY メッセージの中で使用される DiscPriv ビット値が含まれる。S2DGB$V_TAGGED_REQ が 1 の場合,このビットは無視される。なお,ポートによってはこのビットが無視される場合があるので注意する。
S2DGB$V_SYNCHRONOUS このビットは,その値を SISC-2 ドライバの中でユーザが制御できないために無視される。
S2DGB$V_OBSOLETE1 このビットは無視される。以前のリリースではこのビットは,コマンドの再送の無効化を表していたが,現在は,SISC-2 ドライバの中でユーザが制御できないために無視される。
S2DGB$V_AUTOSENSE このビットが 1 の場合,S2DGB$L_32SENSEADDR および S2DGB$L_32SENSELEN は,有効なセンス・バッファ・アドレスと長さを含む。 CHECK CONDITION または COMMAND TERMINATED 状態が返される場合, REQUEST SENSE データは, S2DGB$L_32SENSEADDR および S2DGB$L_32SENSELEN で定義されるバッファに返される。
  S2DGB$V_AUTOSENSE が 0 の場合,S2DGB$L_32SENSEADDR および S2DGB$L_32SENSELEN で定義されるバッファは無視される。このような場合,クラス・ドライバはオートセンス・データをプールに保存し,これを次の IO$_DIAGNOSE に返す。ただしこれは,IO$_DIAGNOSE が REQUEST SENSE CDB を持つ場合に限られる。
  S2DGB$L_FLAGS 内のほかのすべてのビットは 0 です。
S2DGB$V_TAGGED_REQ このビットが 1 の場合,タグ付きコマンド・キュー登録を使用しているものとして操作が処理され,S2DGB$V_TAG は使用するタグ値を定義しておく必要がある。このビットが 0 の場合,タグ付きコマンド・キュー登録を使用せずに操作が処理される。タグ付きコマンド・キュー登録をサポートしないポートは常に,このビットが 0 として動作する。なお,ポートによっては,適切なタグ付き操作を使用して,非タグ付き操作をシミュレーションするので注意する。 S2DGB$V_TAGGED_REQ が 1 の場合,この 3 ビットのフィールドは次のコード化された定数値を含まなければならない。
S2DGB$K_SIMPLE は,コマンドが SIMPLE キュー・タグで送られることを指定する。


S2DGB$K_ORDERED は,コマンドが ORDERED キュー・タグで送られることを指定する。


S2DGB$K_EXPRESS は,コマンドが HEAD OF QUEUE キュー・タグで送られることを指定する。


S2DGB$V_TAGGED_REQ が 0 の場合,このフィールドは無視される。タグ付きコマンド・キュー登録をサポートしないポートは,常に S2DGB$V_TAG フィールドを無視し,すべてのコマンドを非タグ付き操作として送信する。

IO$_DIAGNOSE 関数からは,自動的条件付き忠実処理 (automatic contingent allegiance processing) はアクセスできない。また,これは 3 ビット・フィールドだが,現在は 2 ビットのみ使用されている。つまり,上の 3 つの定数は,ビット位置ではなく値を表す。


1これらのガイドラインは 64 ビット・アドレッシングに適用されます。ただしフィールド名 S2DGB$PQ_64SENSEADDR および S2DGB$L_64SENSELEN だけが異なる。

S2DGB$L_32CDBADDR (S2DGB$PQ_64CDBADDR)

このフィールドは,この IO$_DIAGNOSE 操作によってターゲットに送られる, SCSI コマンド・データ・ブロック (CDB) の 32 ビット (または 64 ビット) 仮想アドレスを含みます。

なお,S2DGB$PQ_64CDBADDR はクォドワードへのポインタであるのに対して, S2DGB$L_32CDBADDR はロングワードへのポインタであることに注意してください。

S2DGB$L_32CDBLEN (S2DGB$L_64CDBLEN)

このフィールドは,この IO$_DIAGNOSE 操作によってターゲットに送られる, SCSI コマンド・データ・ブロック (CDB) 内のバイト数を含みます。 (有効値 : 2 〜 248 。ただし,ポートによってはより小さな長さに CDB を制限している場合もあります。推奨値 : 2 〜 16。)

S2DGB$L_32DATADDR (S2DGB$PQ_64DATADDR)

このフィールドは,この SCSI 操作で使用される DATAIN または DATAOUT バッファの 32 ビット (または 64 ビット) 仮想アドレスを含みます。ターゲットに送られる CDB が DATAIN または DATAOUT バッファを使用しない場合,このフィールドの値は 0 です。

なお,S2DGB$PQ_64DATADDR はクォドワードへのポインタであるのに対して, S2DGB$L_32DATADDR はロングワードへのポインタであることに注意してください。

S2DGB$L_32DATLEN (S2DGB$L_64DATLEN)

このフィールドは,この操作に関連する DATAIN または DATAOUT バッファ内のバイト数を含みます。ターゲットに送られる CDB が DATAIN または DATAOUT バッファを使用しない場合,このフィールドの値は 0 です。 (有効値 : 0 〜 UCB$L_MAXBCNT。推奨値 : 0 〜 65,536。ポートはすべて,少なくとも 65,536 バイトのデータ転送をサポートすることが求められます。)

S2DGB$L_32PADCNT (S2DGB$L_64PADCNT)

このフィールドは,この操作で必要なパディング DATAIN または DATAOUT バイト数を含みます。 (有効値 : 0 〜このシステム上のディスク・ブロック内の最大バイト数から 1 を引いた値。現在の有効値 : 0 〜 511。)

S2DGB$L_32PHSTMO (S2DGB$L_64PHSTMO)

このフィールドは,フェーズ遷移が発生するまで,または期待される割り込みの実行要求までの,ポート・ドライバの待ち時間(秒数)を含みます。 S2DGB$V_TAGGED_REQ が 1 の場合,またはこのフィールドが 0 または 1 を含む場合,現在設定されているフェーズ遷移の時間切れの値は変更しません。 (有効値 : 0 〜 300 {5 分})

S2DGB$L_32DSCTMO (S2DGB$L_64DSCTMO)

このフィールドは,切断していたトランザクションが再び接続するまでの,ポート・ドライバの待ち時間(秒数)を含みます。 S2DGB$V_TAGGED_REQ が 1 の場合,またはこのフィールドが 0 または 1 を含む場合,現在設定されている切断の時間切れの値は変更しません。 (有効値 : 0 〜 65,535 {約 18 時間})

S2DGB$L_32SENSEADDR (S2DGB$PQ_64SENSEADDR)

S2DGB$V_AUTOSENSE が 1 の場合,このフィールドは,この SCSI 操作で使用されるセンス・バッファの 32 ビット (または 64 ビット) 仮想アドレスを含みます。 S2DGB$V_AUTOSENSE が 0 の場合,このフィールドは無視されます。

なお,S2DGB$PQ_64SENSEADDR はクォドワードへのポインタであるのに対して, S2DGB$L_32SENSEADDR はロングワードへのポインタであることに注意してください。

S2DGB$L_32SENSELEN (S2DGB$L_64SENSELEN)

S2DGB$V_AUTOSENSE が 1 の場合,このフィールドは,この操作に関連するセンス・バッファ内のバイト数を含みます。 (有効値 : 0 〜 255。注意 : 値 0 はクラス・ドライバに対して,受信したセンス・データの廃棄を指定します。推奨値 : 18。ポートによってはセンス・バイト数を 18 に制限しています。) S2DGB$V_AUTOSENSE が 0 の場合,このフィールドは無視されます。

7.4.1 64 ビット S2DGB 例

64 ビットの S2DGB の設定例を示します。


#include <s2dgbdef.h>                                  /* Define S2DGB   */ 
#include <far_pointers.h>                              /* Define VOID_PQ */ 
 
   S2DGB diag_desc; 
 
   /* Set up some default S2DGB descriptor values */ 
 
   diag_desc.s2dgb$l_opcode = OP_XCDB64               /* Use 64-bits  */ 
   diag_desc.s2dgb$l_flags =  (S2DGB$M_READ |         /* Flags*/ 
                         S2DGB$M_TAGGED_REQ | 
                         S2DGB$M_AUTOSENSE); 
   diag_desc.s2dgb$v_tag = S2DGB$K_SIMPLE;           /* SIMPLE que tag */ 
   diag_desc.s2dgb$pq_64cdbaddr = (VOID_PQ)(&cdb[0]);/* Command addr  */ 
   diag_desc.s2dgb$l_64cdblen =  6;                  /* Command length */ 
   diag_desc.s2dgb$pq_64dataddr = (VOID_PQ)(&buf[0]);/* Data addr      */ 
   diag_desc.s2dgb$l_64datlen = 20;                  /* Data length    */ 
   diag_desc.s2dgb$l_64padcnt = 0;                   /* Pad length    */ 
   diag_desc.s2dgb$l_64phstmo = 20;                  /* Phase timeout */ 
   diag_desc.s2dgb$l_64dsctmo = 10;                  /* Disc timeout  */ 
   diag_desc.s2dgb$pq_64senseaddr = (VOID_PQ)(&asn[0]);/* Autosense addr */ 
   diag_desc.s2dgb$l_64senselen = 255;               /* Sense length  */ 
   diag_desc.s2dgb$l_reserved_1 = 0;                 /* Reserved     */ 
        . 
        . 
        . 
 
   status = sys$qiow(0, target_chan, IO$_DIAGNOSE, &iosb, 0, 0, 
            &diag_desc,  S2DGB$K_XCDB64_LENGTH,  0,  0,  0,  0); 

パラメータがすべて有効な場合,クラス・ドライバは必要なポート関数を起動して, CDB の送信とデータの転送に加えて,入力 S2DGB によって定義されるセンス・データの戻し,保存,または廃棄を行います。終了時には,戻り IOSB の形式を 図 7-3 に示します。

図 7-3 戻り IOSB の形式


ほかの QIO 関数を実現する DKDRIVER,GKDRIVER,および MKDRIVER クラス・ドライバは, IO$_DIAGNOSE 要求と共にほかのタグ付き要求を混合します。要求が送られる順序は一般に,ドライバに対して要求が指定される順序に一致します。ただしこの順序には例外があり,ドライバが REQUEST SENSE を受け取り,これに対してオートセンス・データが以前に復元および保存されている場合がこれに相当します。この場合,IO$_DIAGNOSE が直ちに終了し,コマンドがターゲットに送られることはありません。

DKDRIVER,GKDRIVER,および MKDRIVER クラス・ドライバは,次に説明する場合を除き,任意の時点で,1 つの IO$_DIAGNOSE 操作に限って (開始の入出力ルーチンの中で) アクティブであることを許可します。しかしアプリケーションは,センス・データの存在を正しく検出し,要求される REQUEST SENSE コマンドを送信するために, IO$_DIAGNOSE 要求を単一スレッド化する必要があります。これは,VAX IO$_DIAGNOSE の動作に一致するものです。たとえば,3 つの読み込みが警告メッセージを伴わずに実行されると,最初の読み込みが CHECK CONDITION を受け取り, 2 番目の読み込みが到着するときにセンス・データがターゲットによって廃棄されます。

DKDRIVER,GKDRIVER,および MKDRIVER ドライバは,すべてのアクティブ操作の S2DGB$V_AUTOSENSE フラグが 1 に等しいときに限って,複数の IO$_DIAGNOSE 操作が (開始の入出力ルーチンの中で) アクティブであることを許可します。 S2DGB$V_AUTOSENSE が 0 に等しい IO$_DIAGNOSE が発生した時点で,クラス・ドライバは上で説明した制限を適用します。


目次 索引

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