ダンプ・リスト解析入門 ⑥:ダンプ解析に関連するOSコントロール・ブロック②

ASCB

ASCB(Address Space Control Block)は、アドレス空間を管理するコントロール・ブロックです。RBや後述のTCBなど空間内のローカル・リソースを管理するコントロール・ブロックと違ってシステムの共通域(SQA)に存在します。バッチジョブの場合、ASCBはイニシエーター空間を管理します。ABENDダンプではリストの冒頭にフォーマットされて出力されますが、たいていのプログラムではデバッグのためにASCBを見るようなことはほとんどありません。

ASCBの主なフィールド(MVSの場合)
オフセット フィールド名 意味、内容
+x04
+x08
ASCBFWDP
ASCBBWDP
ASCBキューの次あるいは1つ前のASCBへのポインター
+x24 ASCBASID アドレス空間の識別番号(ASID)
+x2B ASCBDP 空間のディスパッチング・プライオリティー
+x30 ASCBLDA LDA(空間内の仮想記憶を管理するコントロール・ブロック)領域へのポインター
+x40 ASCBEJST アドレス空間の累積CPU時間
+x6C ASCBASXB ASCB拡張部へのポインター
+xAC ASCBJBNI バッチジョブのジョブ名フィールドへのポインター
+xB0 ASCBJBNS STCタスクやTSOユーザー空間のジョブ名フィールドへのポインター
(バッチジョブの場合はイニシエーターの名前「INIT」が入る)
+xD8 ASCBTCBS 空間内の実行可能TCBの数
+x11C ASCBXTCB ジョブステップタスクのTCBアドレス
+x150 ASCBASSB ASSB(2次ASCB)へのポインター

アドレス空間の管理と制御に関する情報は、ASCBの他、ASCBからポイントされるASSB(Address Space Secondary Block)およびASXB(Address Space Extension Block)にも格納されています。ASSBは拡張SQAに存在していて、ジョブ・スケジューラーのアドレス空間管理用コントロール・ブロックであるJSABへのポインターなど追加の管理、制御用情報が格納されます。JSABを参照すればジョブのジョブ番号を求めることもできます。ASXBは共通域ではなくPVT内に存在し、空間内のタスク数、TCBキューへのポインター、割込みキュー・エレメントやACEE(RACFなどがセキュリティー制御のために使用するコントロール・ブロック)コントロール・ブロックへのポインターなどの追加の管理、制御用情報が格納されます。

TCB

TCB(Task Control Block)は、アドレス空間内の個々のタスクを管理するコントロール・ブロックです。MVSでは、1つのアドレス空間には必ず複数のタスクが存在します。例え、アプリケーション・プログラムが1つのタスクで実行されるシングルタスクのプログラムであっても、空間が生成される時に制御用のタスクが複数個作られます。TCBは空間固有域のLSQAに作成されています。たいていの場合、TCBを参照しなくてもデバッグは可能ですが、RBと併せて参照することでより詳細な情報を得ることができます。

TCBの主なフィールド(MVSの場合)
オフセット フィールド名 意味、内容
+x00 TCBRBP 現在タスクで実行されているプログラムのRBアドレス
+x08 TCBDEB タスクで使用中(OPEN済み)のデータセットのDEBキューへのポインター
+x0C TCBTIO TIOT(DDステートメント定義テーブル)のアドレス
+x11 TCBCMPC タスクの完了コード
+x1C TCBPKF タスクに割り当てられた記憶保護キー
+x1D TCBFLGS タスク制御のための各種のフラグ領域
+x23 TCBDSP タスクのディスパッチング・プライオリティー
+x28 TCBJLB JOBLIBのDCBアドレス
+x2D TCBJPQB ジョブパックエリア・キューへのポインター
(タスクでローディングされたロードモジュールが管理される)
+x30 TCBGRS 割込み発生時にタスクで実行中のプログラムの汎用レジスター内容を退避するフィールド
(浮動小数点レジスターはTCBプレフィックス部、アクセスレジスターと64ビット汎用レジスターの上位32ビットはSTCB:セカンダリーTCBに保管される)
+x71 TCBFSAB タスクで最初に実行されるプログラムが使用するレジスター退避領域のアドレス
(EXECステートメントのPGMパラメーターで指定されるなど、最初に実行されるプログラムが制御を受け取った際にGR13がポイントしている領域)
+x74 TCBTCB 空間内の次のタスクのTCBアドレス
+x78 TCBTME アクティブなTQE(タイマーキューエレメント:STIMERマクロなどで設定したタイマー管理のコントロール・ブロック)キューへのポインター
+x7C TCBJSTCB ジョブステップ・タスクのTCBアドレス
+x80 TCBNTC 兄弟タスクのTCBアドレス
+x84 TCBOTC 親タスクのTCBアドレス
+x88 TCBLTC 最後に生成した子タスクのTCBアドレス
+x8C TCBIQE タスク終了時に実行されるATTACH終了出口ルーチンを実行するためのIQEのアドレス
+x90 TCBECB タスク終了時にPOSTされるECBのアドレス
+xA8 TCBUSER ユーザーが自由に使用できる1ワード・フィールド
+xB5 TCBJSCBB ジョブステップ・コントロール・ブロックへのポインター
+xD0 TCBEXT2 TCB拡張部へのポインター
+x138 TCBSTCB セカンダリーTCBへのポインター
+x13C TCBTTIME タスクで使用した累積CPU時間
+x154 TCBSENV タスクのACEE(RACFなどがセキュリティー制御のために使用するコントロール・ブロック)へのポインター

タスクの管理と制御に関する情報はTCBの他に、TCBの直前に位置するTCBプレフィックス部(浮動小数点レジスターが退避される)、TCBからポイントされるTCBXTNT2(TCB拡張部)およびSTCB(Secondary Task Control Block)にも格納されています。STCBには、アクセス・レジスターや64ビット汎用レジスターの上位32ビット(High Halves)、RACF用データ領域、VTAMやDB2用のフィールド、その他の追加の管理、制御用情報が格納されます。