Archive for '中級編' Category
11.2DASD空きスペースの取得(LSPACE)
ボリュームにどのくらいの空きスペースがあるかを知りたい場合は、OBTAINマクロで空きスペース情報を管理するDSCBや、CVAFでVTOCインデックスデータセットの空きスペースマップを読み込み、それを解析することもできま […]
10.3定義されているDD文の取得(TIOTの探索)
JCLにどのようなDD文が定義されているかを知りたい場合は、TIOTをスキャンします。TIOT(Task Input/Output Table)は、JCLに定義されたDD文に基づいて作成される制御表で、ステップ開始時のデ […]
03.3ENQされているリソースを求める(GQSCAN)
資源の排他制御を行うためにはENQおよびDEQを使用します。MVSでは8バイトのQ名と255バイトまでのR名を組み合わせて資源に名前を付けて排他制御を行います。ENQ/DEQについては「資源の逐次化(排他制御)を行う(E […]
04.4MCS仮想コンソール機能
コンソールをプログラムでハンドリングしたい、という要望は古くからありました。SDSFのような対話型の操作ツールに乏しかった当時は、コンソールはOSを操作する上で最も基本となるデバイスでした。専門のオペレーターをコンソール […]
01.4共通域のGETMAINとアンカーポインター(NAME/TOKEN)
複数のジョブで構成されるソフトウェア、ジョブをまたがってデータをやり取りするようなソフトウェア(例えば通信サーバー、データベースなど)では共通域を使ってデータをやり取りすることができます。多重アドレス空間のMVSではジョ […]
01.3獲得済み領域の管理(VSMLIST)
プログラムが仮想記憶内のどの領域をGETMAINしているかをマッピングすることができます。一般のプログラムではほとんど必要とされませんが、サーバー・プログラムなどで、自分が使用しているリソース量の詳細を得る機能などを実装 […]
07.2複数の非同期事象をFIFOで処理する(EVENTS)-2
EVENTSマクロによって複数のECBをFIFOで処理できることは解説しました。複数のECBにPOSTがなされている状態でも、WAIT=YES指定のEVENTSマクロ発行毎に完了済みのECBが順番に通知されます。しかし同 […]
07.2複数の非同期事象をFIFOで処理する(EVENTS)-1
非同期事象(「いつ来るかわからない」「いつ終わるかわからない」と言った事象)の待ち合わせを行うAPIとして基礎編では WAIT マクロを解説しました。1つ、あるいは数個のイベントを待ち合わせる場合はWAITマクロが利用で […]
06.3タスクの生成(ATTACH/DETACHとIDENTIFY)-2
ATTACHマクロのEPまたはEPLOCキーワードで指定できるのはロードモジュール・メンバーの名前です。したがってこの点だけで考えるとATTACHできるのはLINKやXCTLのように独立したロードモジュールになっているプ […]
06.3タスクの生成(ATTACH/DETACHとIDENTIFY)-1
MVS(z/OS)はマルチタスクのオペレーティング・システムです。一般のアプリケーションでも複数のタスクに処理を振り分けることで、より実行効率のよいプログラム構造を持つこともできます。同時に複数のイベント(処理要求)が発 […]
05.4ABENDリカバリーを行う(ESTAE)
ESTAEは、プログラム独自のリカバリー環境を作成するためのAPIです。リカバリーとは、プログラムが異常終了する際に行われる一連の回復手順です。ESTAEを使用すれば、プログラムは異常終了の発生を受け取り、必要な診断情報 […]
04.3複数行メッセージの出力
コンソールにメッセージを出すために、WTOマクロを使うことはすでに説明しました。一般には1つのメッセージが1つのWTOマクロによって出力されますが、オペレータ・コマンドの処理結果など、プログラムの処理結果を複数のメッセー […]
05.3プログラム割込みのトラップ(SPIE,ESPIE)
業務用アプリケーションでは、誤ったデータによる演算の結果、プログラムが異常終了することがしばしば起こります。プログラムロジックには問題がないのにデータが原因でプログラム割り込みが引き起こされるためです。このようなことを防 […]
04.2オペレーター応答とコマンドを受け取る(WTORとQEDIT)
プログラムがコンソール・オペレーターと通信(会話)を行うには2つの方法があります。1つはメッセージを出力して、そのメッセージに対する応答を受け取る方法です。もう1つはメッセージとは無関係にオペレーターがMODIFYコマン […]
01.2ストレージ・プールの作成(CPOOL)
リエントラントプログラムでは書き込みを行うレジスター保管域や作業域はプログラムの外に確保するため、GETMAIN/FREEMAINマクロを利用します。しかし頻繁に呼び出されるモジュールでは呼び出しの度にこれらの領域の獲得 […]
09.1プログラムをスーパーバイザー・モードに切り替える(MODESET)
一般のアプリケーション・プログラムではほとんど必要ありませんが、システム・プログラムでは処理によっては監視プログラム(スーパーバイザー)モードに切り替える必要が生じます。例えば監視プログラム状態を要求するAPIの使用(M […]
06.2CSECT名でプログラムのローディングを行う
LOADマクロでのローディングや、LINKマクロでの呼び出し時にEP/EPLOCで指定できる名前はロードモジュールのメンバー名です。CSECT名でのローディングや呼び出しはできません。動的構造のプログラムでCSECT名を […]
03.2資源の逐次化その2(SETLOCKとCS,CDS命令)
システムリソースの逐次化 —-+—-1—-+—-2—-+—-3—-+—-4—-+—-5—-+—-6—-+—-7– SETLOCK OBTAIN, OBTAIN L […]