- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

GETMAIN

GETMAIN:メモリー領域を割り当てるOSのAPI

GETMAINはプログラム・モジュールの外にメモリー領域を割り当てるためのOSのプログラミングサービス機能です。プログラムが動的にメモリーを確保する時に使います。このサービスの名前から、メモリー領域を割り当てることそのものをGETMAINとも言います。例えば、「サブルーチンが使うワークエリアをGETMAINする」のようにです。C言語におけるmalloc関数に相当します。

プログラムで使うと言っても、GETMAINサービスを直接使うことが出来るのはアセンブラ言語に限ります。GETMAINサービスはGETMAINマクロを使いSVCによって呼び出します。z/OSではGETMAINの他にSTORAGEマクロによるサービスも利用できます。クロスメモリー・モードのプログラムなど、SVC命令が発行できない場合はGETMAINではなく、STORAGEマクロを利用します。STORAGEではSVCではなく、PC命令によってサービスが呼び出されます。

    GETMAINマクロ

    ----+----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マクロの使用例です。RUはGETMAINサービスのタイプの1つを示し、LVパラメーターによって確保したい領域の長さを指定します。GETMAINが成功すると確保された領域の内容は汎用レジスタ1に設定されます。
    GETMAINの説明とサンプルはこちらにあります。»»» ここ [1]