GETMAINは、メモリー領域(仮想記憶域)を割り当てる、MVSのアセンブラー・サービス(API)の1つです。C言語におけるmalloc関数に相当します。
プログラムが、プログラム・モジュールの外側に動的にメモリーを獲得する時に使います。このサービスの名前から、メモリー領域を割り当てることそのものを、GETMAINとも言います。例えば、「サブルーチンが使うワークエリアをGETMAINする」のようにです。
GETMAINの反対に、獲得した領域を解放するのがFREEMAINです。
プログラムで使うと言っても、GETMAINサービスを直接使うことが出来るのはアセンブラー言語に限ります。GETMAINサービスは、GETMAINマクロを使いSVC命令によって呼び出します。z/OSでは、GETMAINの他にSTORAGEマクロによるサービスも利用できます。クロスメモリー・モードのプログラムなど、SVC命令が発行できない場合は、GETMAINではなくSTORAGEマクロを利用します。STORAGEではSVCではなく、PC命令によってサービスが呼び出されます。
1 2 3 4 5 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- GETMAIN RU,LV=LWORK, GETMAIN OUR LOCAL WORKAREA + LOC=31 LR R6,R1 GR6 --> OUR LOCAL WORKAREA USING DWORK,R6 ADDRESS IT |
- GETMAINマクロ
GETMAINマクロの使用例です。RUは、GETMAINサービスのタイプの1つを示し、LVパラメーターによって獲得したい領域の長さを指定します。GETMAINが成功すると、獲得された領域のアドレスは汎用レジスター1に設定されます。GETMAINサービスとGETMAINマクロの詳細は、マニュアル「z/OS MVSプログラミング:アセンブラー・サービスガイド」(SA88-7092)の「仮想ストレージの管理」の章およびマニュアル「z/OS MVSプログラミング:アセンブラー・サービス解説書 第1巻(ABE-HSP)」(SC43-4143)に解説されています。