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

LLE

LLE(Load List Element)は、タスクがローディングしたロードモジュールを示すコントロール・ブロックです。タスクが最後にロードしたモジュールのLLEがTCBLLSフィールドからポイントされます。LLEには1つ前のLLEへのポインター、およびローディングしたモジュールを管理するCDEへのポインターがあり、LLEのチェインをたどることで、タスクがローディングしたモジュールとその順番がわかります。LLEはIHALLEマクロによってマッピングできます。

CDE

CDE(Contents Directory Entry)は、タスクで実行中のプログラム・モジュールおよびローディングされたロードモジュールを管理するコントロール・ブロックです。LLEはLOADマクロによってローディングされたモジュールに対して作成されますが、CDEはLOADマクロだけでなくLINKやXCTLあるいはATTACHマクロによってローディングされたモジュールに対しても作成されます。また、IDENTIFYマクロやリンケージエディターのALIASなどによる別名に対しても作成されます。
別名だけでモジュールがローディングされた場合は、別名だけでなく元の名前(本名あるいは主名)に対してのCDEも作成されます。別名に対応して作成されたCDEは副CDE(Minor CDE)、本名に対して作成されたCDEは主CDE(Major CDE)と呼ばれます。CDEにはモジュール名、入口点アドレス、モジュールの使用回数、属性情報(再入可能や再使用可能、アドレスモードや常駐モード、APFなどの属性)、ローディングされたサブプール番号、1つ前のCDEへのポインターなどが格納されています。

    CDEの主なフィールド(MVSの場合)
    オフセット フィールド名 意味、内容
    +x00 CDCHAIN JPQ内の次のCDEへのポインター(1つ前にローディングされたモジュールのCDE)
    +x08 CDNAME モジュール(プログラム)の名前
    +x10 CDENTPT モジュール(プログラム)の入口点アドレス
    +x14 CDXLMJP XTLSTもしくは主CDEへのポインター
    +x18 CDUSE モジュールの使用回数
    +x1C CDATTR モジュールの属性を示すフラグバイト

LLEはタスク単位に管理されますが、CDEはジョブステップで共通して管理されます。アドレス空間内でタスクが最後に呼び出したあるいはロードしたモジュールのCDEは、ジョブステップ・タスクのTCBのTCBJPQフィールドからポイントされます。ジョブ・ステップ内のプログラムがローディングしたロードモジュールは、ジョブ・パック・エリア(JPA)と呼ばれるリージョン内のPVT域(サブプール251または252)に格納されます。JPA内のロードモジュールはCDEによって管理され、個々のCDEの次のCDEをポイントすることでJPQ(Job Pack Queue)と呼ばれる一連のCDEチェインを作ります。
なお、CDEはJPQだけでなく実行中プログラムを管理するRBやLLEからもポイントされています。ダンプ・リストにはタスク毎にCDEが編集されて表示されますが、これはJPQのCDEリストではなくRBやLLEからのチェインによってリスト・アップされたタスク内のプログラムによってローディングされたモジュールに関するCDEです。

XTLST

XTLST(Extent List)は、CDEが管理するロードモジュールの実体データを示すコントロール・ブロックです。つまり、ローディングされたロードモジュールのJPA内のアドレスと長さを示します。XTLSTはIHAXTLSTマクロによってマッピングできます。(※入口点アドレスはCDEだが、モジュールの先頭アドレスはXTLSTにある)