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

7 OpenVMS Alphaデバイスの 64ビット・アドレッシングのサポート

RMSサービス,$QIOシステム・サービス,およびOpenVMS Alphaシステムが提供するほとんどのデバイス・ドライバによる入出力操作は, P2またはS2空間と直接行われます。

本章では$QIOシステム・サービスが 64ビット・アドレスをサポートする方法について説明します。 また 64ビット・アドレスをサポートする/しない OpenVMS Alphaデバイス・ドライバ, 64ビット・アドレスをサポートする OpenVMS Alphaディスクおよびテープ・ドライバの一覧を示します。

ユーザが作成したデバイス・ドライバは, 64ビット・アドレスをサポートするよう修正することができます。詳細は 『OpenVMS Alpha Guide to Upgrading Privileged-Code Applications』 を参照してください。すべての関数内で 64ビット・バッファ・アドレスをサポートするよう修正したデバイス・ドライバの例については, SYS$EXAMPLESディレクトリのLRDRIVERデバイス・ドライバを参照してください。


重要
OpenVMS Alphaバージョン7.0は, OpenMVS Alpha特権インタフェースおよびデータ構造が大幅に変更されています。 そのためV7.0より前のバージョンのOpenVMS Alphaで使用していたユーザ作成の特権コード・アプリケーション, およびデバイス・ドライバを OpenVMS Alpha V7.0以降で正しく実行するためには, 再コンパイルおよび再リンクしなければなりません。

必要な変更をV7.0で行った場合は, ユーザが作成した特権コード・アプリケーションを再コンパイルおよび再リンクする必要はありません。

再コンパイルおよび再リンクについての詳細は, 『OpenVMS Alpha Guide to Upgrading Privileged-Code Applications』または 『OpenVMS Version 7.2リリース・ノート[翻訳版]』を参照してください。



7.1 $QIOの64ビット・アドレスのサポート

$QIOおよび$QIOWシステム・サービスは,次の引数を取ることができます。

     $QIO[W] efn,chan,func,iosb,astadr,astprm,p1,p2,p3,p4,p5,p6
これらのサービスは,(第3章 で説明されている) 64ビット・フレンドリ・インタフェースを持ち, 64ビット・アドレスをサポートすることができます。

64ビット・アドレスのサポートを目的として,$QIOおよび $QIOWシステム・サービス引数のデータ型に加えられた変更を 表 7-1に示します。

表 7-1 $QIO[W] 引数の変更

引数 以前の型 新しい型 説明
efn 符号なし
ロングワード
- イベント・フラグ番号。変更なし。
chan 符号なしワード - チャネル番号。変更なし。
func 符号なし
ロングワード
- I/O関数コード。変更なし。
iosb 32ビット・
ポインタ[1]
64ビット・
ポインタ
クォドワードI/O状態ブロック(IOSB)へのポインタ。 IOSB形式は変更なし。
astadr 32ビット・
ポインタ[1]
64ビット・
ポインタ
呼び出し者のASTルーチンのプロシージャ値。Alphaシステムでは, プロシージャ値はプロシージャ・ディスクリプタへのポインタである。
astprm 符号なし
ロングワード[2]
クォドワード ASTルーチンの引数値。
P1 ロングワード[2] クォドワード デバイスに依存する引数。P1はしばしばバッファ・アドレスである。
P2 ロングワード[2] クォドワード デバイスに依存する引数。下位32ビットだけが, P2をバッファ・サイズとして使用するシステム提供のFDTルーチンによって使用される。
P3 ロングワード[2] クォドワード デバイスに依存する引数。
P4 ロングワード[2] クォドワード デバイスに依存する引数。
P5 ロングワード[2] クォドワード デバイスに依存する引数。
P6 ロングワード[2] クォドワード デバイスに依存する引数。 場合によってP6は,診断バッファのアドレスを含むために使用される。

[1] 32ビット・ポインタは,『OpenVMS Calling Standard』 の要求に従い, 64ビットに符号拡張されていた。

[2] 32ビット・ロングワード値は,『OpenVMS Calling Standard』 の要求に従い, 64ビットに符号拡張されていた。

通常,$QIO P1引数はバッファ・アドレスを指定します。 読み込み関数および書き込み関数をサポートする,システム提供の上位レベル FDTルーチンはすべて,この規則を使用します。P1引数によって, $QIOサービスの呼び出し者が,64ビット・サポートを要求するかどうかが決定されます。 $QIOシステム・サービスが64ビットのI/O要求を拒否すると, 次に示す回復不可能なシステム・エラー状態が返ります。

     SS$_NOT64DEVFUNC  64-bit address not supported by device for this function
この回復不可能な状態値は,次の環境のもとで返されます。 $QIO,$QIOW,および$SYNCHシステム・サービスについての詳細は, 『OpenVMS System Services Reference Manual: GETQUI-Z』を参照してください。


7.2 64ビット・アドレスをサポートするOpenVMSドライバ

デバイス・ドライバは,64ビット・アドレスのサポートを I/O関数コードごとに宣言します。 ディスク・デバイス・ドライバおよびテープ・デバイス・ドライバは,仮想,論理, および物理的な読み込み関数と書き込み関数において, ディスク・デバイスとテープ・デバイスを対象とするデータ転送で 64ビット・アドレスをサポートします。たとえば,OpenVMS SCSIディスク・クラス・ドライバのSYS$DKDRIVERは,IO$_READVBLK関数および IO$_WRITEVBLK関数において 64ビット・アドレスをサポートしますが, IO$_AUDIO関数ではサポートしません。

64ビット・アドレスをサポートするOpenVMS Alphaデバイス・ドライバには, 次のドライバが含まれます。

少なくとも1つの関数で64ビット・アドレスをサポートする OpenVMS Alphaデバイス・ドライバを 表 7-2に示します。

表 7-2 64 ビット・アドレスをサポートするドライバ

ドライバ 説明
SYS$DADDRIVER ローカル・エリア・ディスク・クライアント・ディスク・ドライバ
SYS$DKDRIVER SCSIディスク・クラス・ドライバ
SYS$DUDRIVER DSAディスク・クラス・ドライバ
SYS$DVDRIVER Intel 83077AAのフロッピー・ディスク
SYS$ECDRIVER LAN driver for PMAI
SYS$ERDRIVER LAN driver for DE422
SYS$ESDRIVER LAN driver for DESUA
SYS$EWDRIVER TULIP LAN, PCI
SYS$EXDRIVER DEMNA LAN, XMI
SYS$EZDRIVER SGEC/INEC/TGEC LAN
SYS$FADRIVER FDDI for Futurebus
SYS$FCDRIVER DEFZA, DEFTA LAN, TC
SYS$FRDRIVER DEFEA LAN, EISA
SYS$FXDRIVER DEMFA LAN, XMI
SYS$GKDRIVER SCSI汎用クラス・ドライバ
SYS$HCDRIVER OTTOクラスATM
SYS$ICDRIVER TMS380 LAN, TC
SYS$IRDRIVER TMS380 EISAトークン・リング
SYS$LADDRIVER Local Area Disk
SYS$LASTDRIVER Local Area System Transport
SYS$LRDRIVER VL82C106 parallel printer driver
SYS$MADDRIVER ローカル・エリア・クライアント・テープ
MBDRIVER メールボックス・ドライバ
SYS$MKDRIVER SCSIテープ・クラス・ドライバ
NLDRIVER ヌル・デバイス・ドライバ
SYS$PADRIVER SHAC CIおよびDSSIポート・ドライバ
SYS$PEDRIVER NI SCSポート・ドライバ
SYS$PIDRIVER NCR 53C710 DSSIポート
SYS$PKCDRIVER SCSI NCR 53C94ポート
SYS$PKEDRIVER NCR53C810 SCSIポート
SYS$PKJDRIVER ADAPTEC 1742A SCSIポート
SYS$PKSDRIVER SIMport TC-SCSIポート
SYS$PKTDRIVER NCR 53C710 SCSIポート
SYS$PKZDRIVER XZA SCSIポート
SYS$PNDRIVER NPORT SCSポート
SYS$PUDRIVER CI UDAポート・ドライバ
SYS$SHDRIVER ボリューム・シャドウィング
SYS$TUDRIVER MSCP/DSAテープ・クラス
SYS$WPDRIVER ウォッチポイント・ドライバ

OpenVMS Alphaバージョン7.0で64ビット・アドレスをサポートしない OpenVMS Alphaデバイス・ドライバを 表 7-3に示します。

表 7-3 32 ビット・アドレスに制限されるドライバ

ドライバ 説明
SYS$CTDRIVER CTERMドライバ
SYS$FBDRIVER ターミナル・フォールバック・ドライバ
SYS$FTDRIVER 擬似ターミナル・ドライバ
SYS$FYDRIVER DUP DSAプロトコル・クラス・ドライバ
SYS$GQADRIVER QVISIONドライバ
SYS$GTADRIVER DECwindows TX driver for Flamingo
SYS$GXADRIVER Flamingo CXTurbo (aka SFB, aka HX)ドライバ
SYS$GYADRIVER SFB+ aka HX+, aka FFBドライバ
SYS$GYBDRIVER PCIバス上のTGAグラフィクス用ドライバ
SYS$IEDRIVER DECwindows拡張
SYS$IKBDRIVER DECwindows PCXALキーボード
SYS$IKDRIVER DECwindows LKxxxキーボード
SYS$IMBDRIVER DECwindows PCXAS (PS2)マウス
SYS$IMDRIVER DECwindows VSxxxマウス
SYS$INDRIVER DECwindows入力ドライバ
SYS$LTDRIVER LATターミナル・ドライバ
NDDRIVER DECnet Phase IV DLE (MOPサポート)
NETDRIVER DECnet Phase IV
SYS$RTTDRIVER リモートDECnetターミナル・ドライバ
SYS$SODRIVER AMD79C30A Audio/ISDNドライバ
SYS$TTDRIVER ターミナル・クラス・ドライバ
DECW$XTDRIVER Xターミナル・クラス・ドライバ
SYS$YRDRIVER Z85C30 SCCターミナル・ポート・ドライバ
SYS$YSDRIVER PC87312ターミナル・ポート・ドライバ

32ビット・バッファ・アドレスに制限されるドライバについて, 特に次の点に注意してください。


7.3 64ビット・アドレスをサポートする機能コード

64ビット・アドレスをサポートするOpenVMS Alpha I/O機能コードを 表 7-4に示します。

表 7-4 64 ビット・アドレスが使用できる機能コード

ドライバのタイプ 機能コード 64ビット・アドレス
ディスク IO$_READLBLK P1
IO$_READPBLK P1
IO$_READVBLK P1
IO$_WRITECHECK P1
IO$_WRITELBLK P1
IO$_WRITEPBLK P1
IO$_WRITEVBLK P1
磁気テープ IO$_READLBLK P1
IO$_READPBLK P1
IO$_READVBLK P1
IO$_WRITELBLK P1
IO$_WRITEOF P1
IO$_WRITEPBLK P1
IO$_WRITEVBLK P1
メールボックス IO$_READLBLK P1
IO$_READPBLK P1
IO$_READVBLK P1
IO$_WRITELBLK P1
IO$_WRITEPBLK P1
IO$_WRITEVBLK P1
Local AreaNetwork
(LAN)
IO$_READLBLK P1,P5
IO$_READPBLK P1,P5
IO$_READVBLK P1,P5
IO$_WRITELBLK P1,P4,P5
IO$_WRITEPBLK P1,P4,P5
IO$_WRITEVBLK P1,P4,P5


7.4 SCSIクラス・ドライバ用の 64ビットIO$_DIAGNOSE関数

$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つの定数は, ビット位置ではなく値を表す。

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が発生した時点で, クラス・ドライバは上で説明した制限を適用します。


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