MVS エミュレーション

この章では、メインフレーム上の MVS、OS/390、および z/OS のもとで提供される各種機能を MSS でエミュレートする方法について説明します。

MVS 制御ブロック

MSS は、問題プログラム状態で動作しているアプリケーションにアクセスできる MVS 制御ブロックをエミュレートします。これらの制御ブロックに格納される情報は、問題プログラム状態で動作しているアプリケーションにとって価値と意味があるものに限定されます。

制御ブロックは、通信ベクトル・テーブル (Communication Vector Table; CVT) の適切なフィールドを参照することにより、MSS でもメインフレーム上と同じ方法でアクセスできます。CVT のアドレスは、メインフレームの場合と同様に、メモリー内の絶対アドレス 16 に格納されます。

アセンブラーおよび COBOL での低メモリー・アドレス・エミュレーション

メインフレームでは、プレフィックス保存領域 (Prefixed Save Area; PSA) は絶対位置 0 にマップされます。多くのアプリケーション・プログラムは、その PSA の内容にアクセスします。当社では、 COBOL プログラムから PSA の内容にあたかもメインフレーム上で動作しているかのようにアクセスできるようにするソフトウェアを提供しています。

サポートされている制御ブロック

MSS によってエミュレートされる MVS 制御ブロックの一覧、および非メインフレーム・バージョンとメインフレーム・バージョンの違いを、表 13-1 に示します。

名前 説明 メインフレームとの違い
IHAACEE アクセサー制御エレメント ACEEVRSN は 2 に設定されます。
IHAASCB アドレス空間制御ブロック  
IHAASVT アドレス空間ベクトル・テーブル  
IHAASXB アドレス空間拡張ブロック  
CVT 通信ベクトル・テーブル CVTTOD は X'20' に設定されます。これは、時刻機構が操作可能であることを意味します。

CVTMVSE - CVTDCB の X'80' ビットは常にオンです。これは、MVS/XA 以降のもとで実行していることを意味します。

CVT4MPS - MVS 制御ブロックが 16MB ラインより上にある (つまり、3 バイトのアドレスがすべて 4 バイトのアドレスとして同じ場所に格納される) 場合にのみ、CVTDCB の X'04' ビットがオンになります (System/360 Model 65 MP 上で実行していることを意味する)。

CVTDATE は、世紀番号を使用して設定されます (つまり、CVTDATE では "0cyyddds" 形式が使用される。"c" は世紀番号。例:20 世紀は 0、21 世紀は 1 など)。

CVT CVT プレフィックス CVT プレフィックスは、すべてバイナリー・ゼロに設定されます。
IHACDE コンテンツ・ディレクトリー・エントリー 1 つの "null" CDE が割り当てられます。そのため、この制御ブロックは、ロード・モジュールがロードされていないプログラムを使用しているように見えます。
IDADDSA 動的記憶領域 (FSA - 第 1 保存領域) これは、TCBFSA によってポイントされる 88 バイトの保存領域です。TCB 第 1 保存領域として使用されます。
IEFJFCBN ジョブ・ファイル制御ブロック  
IEZJSCB ジョブ・ステップ制御ブロック  
IHAPSA プレフィックス保存領域 MVS 制御ブロックが 16MB ラインより上にある (つまり、3 バイトのアドレスがすべて 4 バイトのアドレスとして同じ場所に格納される) 場合にのみ、バイト 7 (最初のバイトはバイト 0) の X'01' ビットがオンになります。
IEESMCA SMF 制御領域 SMCASID は、「MSTR」に設定されます。
IDADTCA タスク通信領域

PRV アドレスは常にゼロです。

記憶オーバーフロー・ルーチンは、オーバーフロー・セグメントを提供せず、単に異常終了コード S80A で異常終了します。アプリケーションに対して ISA 設定が適切であることを確認する必要があります。

IDADTCA TCA プレフィックス  
IKJTCB タスク制御ブロック TCB 保護キーは、キー 8 に設定されます。
IEFTIOT1 タスク I/O テーブル 最大 256 の TIOT エントリー (ジョブ・ステップにおける最初の 256 DD を表す) がサポートされます。
表 13-1:MSS によってエミュレートされる MVS 制御ブロック

COBOL プログラムからの MVS 制御ブロックへのアクセス

MSS では、COBOL プログラムから MVS 制御ブロックにアクセスできます。次のサンプル・プログラムでは、現在実行中のプログラムのジョブ、ステップ、およびプログラム名にアクセスする方法を示します。

 IDENTIFICATION DIVISION.
 PROGRAM-ID. JOBINFO.

 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 JOB-NAME             PIC X(8).
 01 PROGRAM-NAME         PIC X(8).
 01 STEP-NAME            PIC X(8).

 LINKAGE SECTION.
 01 PSA.
    05 FILLER     PIC X(540).
    05 PSATOLD    POINTER.

 01 TCB.
    05 FILLER     PIC X(12).
    05 TCBTIO     POINTER.
    05 FILLER     PIC X(164).
    05 TCBJSCBB   POINTER.

 01 TIOT.
    05 TIOCNJOB   PIC X(8).
    05 TIOCSTPN   PIC X(8).

 01 JSCB.
    05 FILLER     PIC X(360).
    05 JSCBPGMN   PIC X(8).

 PROCEDURE DIVISION.
*    Address PSA
     SET ADDRESS OF PSA TO NULL

*    Address TCB
     SET ADDRESS OF TCB TO PSATOLD

*    Address TIOT
     SET ADDRESS OF TIOT TO TCBTIO

     MOVE TIOCNJOB TO JOB-NAME
     MOVE TIOCSTPN TO STEP-NAME

*    Address JSCB
     SET ADDRESS OF JSCB TO TCBJSCBB

     MOVE JSCBPGMN TO PROGRAM-NAME
     DISPLAY 'JOB NAME     = ' JOB-NAME
     DISPLAY 'STEP NAME    = ' STEP-NAME
     DISPLAY 'PROGRAM NAME = ' PROGRAM-NAME
     GOBACK
     .

MVS 外部書き出しプログラム

MVS のもとでは、JCL ジョブ・ストリームを SYSOUT データ・セットの形式で動的に出力するプログラムを実行し、外部書き出しプログラムでそのジョブ・ストリームを処理するように指定できます。IBM から提供された外部書き出しプログラム (INTRDR) を使用するか、または独自の外部書き出しプログラムを提供できます。

外部書き出しプログラムは、次のどの方法でも要求できます。

MSS は、IBM から提供された外部書き出しプログラム (INTRDR) をエミュレートします。ユーザーから提供された外部書き出しプログラムはサポートしません。

INTRDR の MSS エミュレーションは、次の点で IBM の INTRDR と異なっています。

DB2 呼び出し接続機能

DB2 サブシステムとそれによって管理されるデータにアクセスするには、DB2 呼び出し接続機能 (Call Attach Facility; CAF) を使用します。この操作は、適切な一連の関数を使用して DSNALI を呼び出すことによって行います。この機能の MSS エミュレーションは、次の例外を除き、メインフレーム上とまったく同じように動作します。