OS内で稼働中のアドレス空間を求める

By 神居 - Posted: 2012/04/01 Last updated: 2012/04/01 - 2 Comments

OS上で動作しているジョブの一覧を作る、などアクティブなアドレス空間をリストアップしたい場合がある。例えば、SDSFのDAコマンドやMVSコマンドのD A,Lで得られるようなリストである。
MVSではアドレス空間はASCBと呼ばれる制御表で管理されており、ASCBは共通域であるSQAに展開されているのでどの空間からでもアクセスできる。ASCBを順番に参照することで、どのようなアドレス空間(ジョブ)が存在するかを(実行されているかを)求めることができる。

各空間のASCBのアドレスはASVTと呼ばれるテーブルからポイントされている。ASVT内では、空間ID(ASID)順にASCBアドレスが格納された4バイトのフィールドが並んでおり、このフィールドを参照することで順番にあるいは直接に目的のアドレス空間のASCBを求めることができる。
ASVTそのもののポイント方法やASVTの構造は、MVS、MSP、VOS3共に似ているので、ほぼ同じロジックで参照することができるが、テーブルそのものの構造はそれぞれ微妙に異なる。特にMSPはMVSとVOS3と大きく異なる点がある。


アクティブなアドレス空間の求め方

Posted in API、インターナルの違い • • Top Of Page

2 Responses to “OS内で稼働中のアドレス空間を求める”

Comment from masu
Time 2012年4月5日 at 00:26

アセンブラ勉強中のmasuと申します。

「アクティブなアドレス空間の求め方」の例で2点質問させていただけますでしょうか。

上記の例では、「L R2,CVTPTR」と一気にCVTを参照していますが、実際は、CVTの先頭アドレスをPSAのFLCCVT等から引っ張ってくる必要がある部分を省略している、という理解でよろしいでしょうか。

また、ASCBを求めるのであれば、CVTのCVTASCBLにて直接アドレスが分かりますが、ASVTを経由して算出している理由がありましたらご教示いただけますと幸いです。

IBM提供のマニュアル(MVS Data Areas Volume 1 (ABEP-DCQ))を見る限り、ASCBのPointed to byは多数ありましたので、複数ある算出ロジックのうちの一つ、ということでしょうか。

Comment from arteceed
Time 2012年4月5日 at 08:30

1.いいえ違います。CVTPTRとFLCCVTの両方を使ってアセンブルリストを見ると簡単にわかると思います。

2.ASVTからだと漏れなく参照できる(はず)と理解しています。全空間のリストアップであればASID順でわかりやすいのもあります。
CVTASCBL/CVTASCBHはディスパッチ順序に関連したASCBキューのポインターなので、全空間のリストアップという目的で使うのにはそぐわないかと。
アセンブラー・プログラミング勉強中とのことでもありますので、CVTからのポイントでASCBチェインをたどって、それぞれの実行結果を比べられると具体的に違いがわかると思います。

3.もちろんサンプル以外の方法であっても目的が果たせればいいでしょう。使いやすいものを選べばよいと考えます。
紹介した方法は自分が扱っていた商用ソフトのロジックから得た方法ですが、IBMのSDSFのDAコマンドでもASVTからASCBを求めています。