「メインフレーム・コンピューター」で遊ぼうこんな時代に今さらメインフレーム・コンピューターに取り組むハメになったみんなが助けあうサイトです。RSSWordPress.orgコスパのいい社内システムの作り方メインフレームを扱っていると、軽い開発やメンテナンスにリソースを割けない、しかし、BPCも考えねば。解決策のひとつがクラウドにおくFileMakerです。Comment印刷用ページの表示ダンプリスト解析入門9:ダンプ解析に関連するOSコントロール・ブロック&#9316タスクで実行中のプログラムがGETMAINマクロなどで獲得した仮想記憶域は、サブプール毎に獲得済みの領域とフリー領域が管理されています。これを行うためのコントロール・ブロックがSPQE、DQEおよびFQEです。Element)は、タスクで使用しているサブプールを示すコントロール・ブロックです。サブプール番号とストレージ・キー、オーナー・タスクおよびサブプール内の領域を管理するDQEへのアンカー領域であるSPQAへのポインターなどで構成されています。SPQEは、TCBのTCBMSSフィールドからポイントされ、サブプール単位にSPQEがチェインされます。Anchors)は、サブプール内の獲得済み領域を示すDQEをポイントします。Extension)からポイントされます。SPQAとSPQXはSPQEからそれぞれ別にポイントされ、サブプール番号が同じでも、獲得される領域の位置(16MB境界の上下いずれなのか)によって異なるアンカー領域が使われます。対応するDQEが存在しない場合、DQEポインターはそのSPQAもしくはSPQX自身のアドレスを示しています。SPQEはIHASPQEマクロによって、SPQA/SPQXはIHASPQAマクロによってマッピングできます。最後のDQEへのポインター(16MB境界より上の領域を示すDQEキュー)SPQEはタスク毎に作られてSPQEキューとしてチェインされます。サブプール0についてはタスク間で共用できます。この場合、SPQEはタスク毎に作成されますが、そこからポイントされるSPQAとSPQXについては同じコントロール・ブロックを共用しています。サブプール0を共用しないタスクの場合は、SPQEからポイントされるSPQXとSPQEもそのタスク固有のコントロール・ブロックとなります。Element)は、SPQEが示すサブプール内の獲得済み領域を示します。1つのDQEは1つの連続した領域ブロックを管理します。サブプール内に複数の獲得済み領域がある場合は、それぞれの領域毎にDQEが作られます。GETMAINが発行された際に新しい仮想ページが割り振られるとDQEが作られ、割り振られた仮想ページ内のすべての領域が解放されるとそこを管理していたDQEも消滅します。DQEはIHADQEマクロによって、FQEはIHAFQEマクロによってマッピングできます。Element)は、DQEが管理する仮想ページ内のフリー領域(GETMAINされていない領域)を管理します。DQEはSPQE/SPQAからチェインされていますが、FQEは1つ1つのDQE単位に管理されDQEからチェインされます。GETMAINが要求されると、指定されたサブプールのDQEからFQEをたどります。要求長を満たすフリー領域が見つかると、そのFQEが指すフリー領域の後方から前方に向かって領域を切り出します。Element)によって管理されます。Area)からポイントされています。LDAは、アドレス空間に固有の仮想記憶域を管理するコントロール・ブロックで、16MB境界の上下それぞれのリージョン域の開始アドレスとサイズ、使用可能なリージョン・サイズ、使用済みの仮想ストレージサイズなどが格納されています。FBQEはIHAFBQEマクロによって、LDAはIHALDAマクロによってマッピングできます。このFBQEが管理する未使用領域のアドレスダンプリスト上の仮想記憶マッププログラムがS878やS80AといったコードでABENDすることはよくあります。一般的にはJCLで指定したリージョンサイズが小さすぎる場合に起きるため、まずはJCL側のリージョンサイズを修正して再実行する対応が行われます。いくらリージョンサイズを増やしても、再発するような場合はリージョンサイズの問題ではなく、プログラム側で獲得した領域を解放していない、あるいは獲得時のサイズと解放時のサイズが異なっている、といったバグによるものもあります。MAP**」を参照することでわかる場合があります。フォーマットして出力したもの。4096バイトの内、3616バイトが空きとなっている。残りの480バイトがGETMAINされたままになっている。GETMAINとFREEMAINの長さが合っていないことも考えられる。