MVSでは当初からQSAM、BSAM、BPAM等によるデータセットのアクセスは24ビットモード・プロセッシングが基本でした。LOWレベルなI/OメカニズムはCCWも含めMVS/XAの時点で既に31ビット化されていましたが、QSAMなどのアクセス方式レベルではMVSがESAになってDFPがDFSMSに統合された時から31ビットモード・プロセッシングが可能になりました。APIのパラメーター(1部を除く)やデータセットのI/Oバッファーが16MBラインの上へ配置できるようになったことはプログラムを作成する上でも恩恵が大きいです。しかしながら、従来の24ビットモード・インタフェースではMVSとMSPおよびVOS3にはほぼ完全な互換がありましたが、31ビットモード・インタフェースでは各社各様の仕様になっておりAPIの互換はありません。なお、MSPでは31ビットモード・インタフェースはサポートされていません。
DCBの大きさ(QSAM)
MVS/DFP | 96バイト(24ビットモードAPI) |
MSP/データ管理 | 96バイト(24ビットモードAPI) |
VOS3/データ管理 | 96バイト(24ビットモードAPI) |
XSP/データ管理 | 100バイト(24ビットモードAPI) |
MVS/DFSMS | 96バイト(31ビットモードAPI) ※ただしDCB領域は16MBラインの下に置かねばならない |
VOS3/データ管理 | 104バイト(31ビットモードAPI) ※ただしDCB領域は16MBラインの下に置かねばならない |
拡張DCB(DCBE)の大きさ(QSAM)
MVS/DFSMS | 56バイト(31ビットモードAPI) |
VOS3/データ管理 | なし(不要) |
QSAMバッファプールの解放
従来はCLOSEマクロの後でFREEPOOLが必要であったが、DCBEでQSAM I/Oバッファを31ビットにする場合はCLOSEルーチン内で自動的に解放されるため不要となった。(FREEPOOLマクロはエンハンスされず24ビットモードのバッファしか解放できないため:DFSMS/MVS Macro Instructions for Data Sets SC26-4913)
サンプルコード
MVS/DFSMS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
OPEN (dcb,mode),MODE=31 PLISTはRMODE=ANYでOK CLOSE (dcb,mode),MODE=31 PLISTはRMODE=ANYでOK GET dcb,area GET,PUTはAMODE=31で発行できる PUT dcb,area dcb DCB DCBE=dcbe, DCB領域はRMODE=24でなければならない EXLST=, EXLST領域はRMODE=24でなければならない EXLST領域で指定するEXITルーチンは RMODE=24でなければならない (AMODE=24で制御を受ける) dcbe DCBE RMODE31=BUFF, DCBE領域はRMODE=ANYでOK EODAD=, EODADルーチンはRMODE=ANYでOK SYNAD= SYNADルーチンはRMODE=ANYでOK |
VOS3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
OPEN (dcb,mode) PLISTはRMODE=ANYでOK CLOSE (dcb,mode) PLISTはRMODE=ANYでOK MVSのようにマクロのパラメーターでなく SPLEVELマクロの設定で決まる GET dcb,area GET,PUTはAMODE=31で発行できる PUT dcb,area dcb DCB DATAMD=ANY, DCB領域はRMODE=24でなければならない EXITAD=ANY, EXLST=, EXLST領域はRMODE=24でなければならない EXLST領域で指定するEXITルーチンは RMODE=24/ANYいずれでもよいが、 RMODE=ANYの場合はEXLST内では 出口ルーチンのアドレスではなく、 入口点アドレスを格納した フルワードのポインター領域の アドレスを指定する |
MSPでは従来通りのため、AMODE=31のプログラムではGET,PUT発行前にAMODEを24に変更しなければならない。EODADも24ビットのまま入ってくるので注意しなければならない。