1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初学者向け】z/OS PARMLIBメンバーをちょっとずつ知るシリーズ - PROGxx編

1
Last updated at Posted at 2026-02-09

 
当シリーズを始めた経緯や、検証環境の情報についてはこちらのindexページをご覧ください。

PROGxxとは

プログラム管理に関する設定を定義し、APFライブラリー、システム・ライブラリー(LNKLST/LPALST)、出口ルーチンなどを動的に管理・制御するメンバー
 

  • APFライブラリーとは:
    z/OSにおいて「システム保護の制限を回避できる特別な権限」を持つプログラム(実行モジュール)を格納するための専用ライブラリー

    通常、ユーザープログラムはシステムの安定性を保つために、メモリの重要な領域への書き込みや特定のシステム命令の実行が制限されています。しかし、OSの機能拡張やセキュリティソフト、データベースといった重要なプログラムは、これらの制限を超えて動作する必要があります。APFライブラリに登録されたプログラムは、「APF許可(Authorized)」状態となり、システムの中枢にアクセスできるようになります。
     

  • LNKLSTとは:
    システムがプログラムを検索・ロードするためのライブラリー群(LNKLST連結)。プログラムが実行される際、その都度ディスクから各ユーザーのアドレス空間へロードされる。

 

  • LPALSTとは:
    IPL時にページング可能なLPA(PLPA)を構築するためのライブラリー群(LPALST連結)。IPL時、リストされたライブラリからモジュールが共通ストレージ(PLPA)へ一括ロードされる。

 

  • EXIT ROUTINE(出口ルーチン)とは:
    システム内の特定のイベントに対して、独自の処理プログラムを割り当てるための設定。
     
     

想定される注意点/考慮点

IEAAPFxxやLNKLSTxxではなく、PROGxx内の各ステートメントを使用して定義する方法が推奨されている

従来、APFライブラリーやシステム・ライブラリーなどの設定変更を反映するためには、対応するPARMLIBメンバーを編集しIPLを実行する必要がありました。PROGxxで複数のメンバーを集約管理することができ、かつSETPROGコマンドによりIPLなしでシステム定義を即時変更・反映できるため、PROGxxを使用することが推奨されています。
 
また、2025年7月22日付けのz/OS 3.2発表レターで、z/OS 3.2をもってIEAAPFxxとLNKLSTxxはサポート終了を迎える予定だと発表されました。(意向に関する全ての発表は、今後予告なく変更・取り消される場合があります)
IBM z/OS 3.2 unlocks the value of IBM z17
 

実機検証

各パラメーターの詳細についてはリンク先のマニュアルをご参照ください。

静的変更(IPL)

  • APFステートメント:
    APF 許可ライブラリー・リストの定義・管理
     
    APF FORMAT(DYNAMIC) で、定義の動的変更を可能にする運用状態 (DYNAMIC) にすることを設定し、APF ADD DSNAME() VOLUME() でAPFリストにデータセットを追加します。
    image.png
    「MVS Initialization and Tuning Reference」PROGxx APF ステートメントの構文フォーマット
     
    システムは、IPL時にSYS1.LINKLIBとSYS1.SVCLIBを自動的にAPFリストに追加します。 また、LPAにロードされるモジュールはシステムによって自動的にAPF許可されているとみなされます。
     
     
     
  • LNKLSTステートメント:
    システムのプログラム検索パスであるLNKLSTを定義・管理
     
    LNKLST DEFINE NAME() でLNKLSTを定義し、LNKLST ADD NAME() DSN() でそのLNKLSTに追加するデータセットを指定します。
    image.png
    「MVS Initialization and Tuning Reference」PROGxx LNKLST ステートメントの構文フォーマット
     
     
     
  • EXITステートメント:
    z/OSのシステム出口(System Exits)を動的に管理
     
    EXIT ADD EXITNAME() MODNAME() で、特定の出口ポイント(システム内で特定のイベントが発生した際に呼ばれる場所)に対して、実行するモジュールを紐付けます。
    例:SMFのジョブ開始出口(SYS.IEFU83)に、IEFU83というプログラムを割り当てる
    image.png
    「MVS Initialization and Tuning Reference」PROGxx EXIT ステートメントの構文フォーマット
     
    IEFU83:SMFレコードが書き込まれる直前に制御を受け取るインストール出口ルーチン。IBMが提供する標準的な処理の途中に、ユーザー独自の処理を割り込ませるための仕組みを提供する。
     
    例:IEFU83の標準的な処理は特定のSMFレコードをデータセットへ書き込むか、破棄するかを決定するものだが、導入先独自の処理を入れることで、特定の条件(ピーク時間帯の動作など)に合致する場合にのみ記録を残すといった制御が可能。
    「MVS Installation Exits」IEFU83 — SMF レコード出口
     
     
     

IPL時に参照されるIEASYSxxに、使用するPROGxxのサフィックスを指定します。
image.png

IPL時に IEE252I:MEMBER xxxx FOUND IN ... のメッセージが表示されます。
image.png

IEE252I:
メンバー member がメッセージ・テキストの parmlib データ・セット parmdsname で検出されたときに、ハードコピー・ログでのみ出される通知メッセージです。
「MVSシステム・コード」IEEメッセージ IEE252I


Displayコマンドでの確認

 


動的変更

 

  • SETPROG APF,ADD,DSNAME=ライブラリ名,VOL=VOLSER で、APFリストにライブラリを追加することができます。
    image.png
    「MVS System Commands」 SETPROGコマンド APF リストの更新
     
     
     

  • SETPROG LNKLST,ADD,NAME=LNKLST名,DSNAME=ライブラリー名 で、データセットを指定したLNKLSTに追加することができます。
     
    現在使用されているLNKLSTを確認し、OTANI.LINKLIB を追加してみます。
    image.png
    SETPROG LNKLST,ADD,NAME=LNKLST00,DSNAME=OTANI.LINKLIB
    image.png
     
    CSV510I LNKLST SET lnklstset WAS NOT CHANGED. IT IS IN USE 表示されました。

    CSV510I:
    使用中の LNKLST セットに対して追加または削除することはできません。 LNKLST セットが特定のジョブまたはアドレス・スペースに関連付けられているとき、あるいは LLA がその LNKLST セットを使用して LNKLST を監視しているときは、LNKLST セットは使用中です。
    「MVS System Messages,Vol4 (CBD-DMO)」CSVメッセージ CSV510I

     
    現在使用中のLNKLSTに対して、データセットを追加・削除することはできないようです。そのため、別のLNKLSTを定義→新LNKLSTにモジュールを追加→新LNKLSTを動的に反映させるという手順が必要です。
     
    SETPROG LNKLST DEFINE NAME(LNKLST01) COPYFROM(CURRENT) で、現在アクティブなLNKLSTの内容を引き継いで新LNKLSTを作成します。COPYFROM()でLNKLST名を明示的に指定することもできます。
    image.png
     
    SETPROG LNKLST,ADD,NAME=LNKLST01,DSNAME=OTANI.LINKLIB で、データセットを追加します。
    image.png
     
    SETPROG LNKLST,ACTIVATE,NAME=LNKLNST01 で、指定したLNKLSTに切り替えます。
    image.png
    LNKLST01がアクティブになりました。
    image.png
     
    再度 D PROG,LNKLST を実行します。
    image.png
    LNKLST01の中にOTANI.LINKLIBが追加されていることを確認できました。
    image.png
     
    ATTOP パラメーターを指定すると、* LNKLSTの先頭に自動的に追加されるデータセットの次に指定したデータセットを連結します。省略時は ATBOTTOM パラメーターが指定され、SETPROGコマンドで追加したデータセットはLNKLSTの最後に連結されます。
    *:SYS1.LINKLIB、SYS1.MIGLIB、SYS1.CSSLIB、SYS1.SIEALNKE、SYS1.SIEAMIGE
     
    SETPROG LNKLST,ADD,NAME=LNKLST01,DSNAME=OTANI.LINKLIB,ATTOP
    image.png
    D PROG,LNKLST
    image.png
     
    「MVS System Commands」 SETPROGコマンド LNKLST 連結の更新
     

    ライブラリー内のモジュールを更新した後は、F LLA,REFRESH コマンドでライブラリのディレクトリ情報を最新状態に更新する必要がある
     
     
    LLAとは、プログラムのロードを高速化し、システム全体のパフォーマンスを向上させるための管理機能です。通常は、ディスク上のデータセットから「どこにモジュールがあるか」という目次情報を探しに行きますが、メモリ上にその目次情報を置くことで、頻繁に使われるモジュールを効率的に実行することができます。LLAはメモリ上の目次情報を参照するので、LNKLSTに含まれている既存のデータセットの中にあるプログラムをリンク・エディットなどで上書き更新した場合は、F LLA,REFRESH を実行する必要があります。
     
    image.png

    CSV210I {LNKLST | LIBRARY} LOOKASIDE:
    「MVS System Messages Volume 4 (CBD-DMO)」CSV メッセージ CSV210I

    今回は SETPROG LNKLST,ACTIVATE で新LNKLSTをアクティブにしました。その時点で新LNKLSTの情報を元にディレクトリ情報が更新されたので、F LLA,REFRESH コマンドの実行は必要ありませんでした。

 
 
 

  • SETPROG LPA,ADD で、指定したモジュールを追加します。
     
    今回は動的に追加する練習として、IEFBR14(何もしないプログラム)をテスト用のライブラリーにコピーしてSETPROGコマンドを実行してみました。
    image.png
    SETPROG LPA,ADD,MODNAME(MYTEST01),DSN=OTANI.TESTLIB
    MYTEST01が動的に追加されたことを確認できました。
    image.png
     
    モジュールを削除してみます。
    SETPROG LPA,DELETE,MODNAME(MYTEST01),DSN=OTANI.TESTLIB を実行するとエラーになりました。
    image.png
     
    モジュールを動的に削除するには FORCE(YES) パラメーターを指定する必要があり、SETPROG LPA,DELETE,MODNAME(MYTEST01),FORCE(YES) で、追加したモジュールを削除することができました。出口ルーチンを削除するときは、指定したルーチンを実行中の出口がないことを確認する必要があります。
    image.png
    「MVS System Commands」 SETPROGコマンド 動的 LPA の内容の管理
     
     
     

  • SETPROG EXIT,ADD で、作成したシステム出口と出口ルーチンを動的に紐づけます。
     
    システムに存在しないシステム出口に対してIEFBR14を紐づけてみたところ、そのコマンドで指定されたEXITNAMEでシステム出口を自動的に作成してくれました。
    SETPROG EXIT,ADD,EXITNAME=OTANI.DUMMY.EXIT,MODNAME=IEFBR14
    image.png
    image.png
    マニュアルを調べると、システム出口を定義する前に出口ルーチンを紐づけると、そのシステム出口は暗示的に定義されるとありました。
    「MVS Programming: Authorized Assembler Services Reference, Volume 1 (ALESERV-DYNALLOC)」 CSVDYNEX  Define an exit
     
    SETPROG EXIT,DELETE,EXITNAME=OTANI.DUMMY.EXIT,MOD=IEFBR14
    システム出口と出口ルーチンの紐づけを解除できました。
    image.png
     
    このDELETEパラメーターはシステム出口に紐づく出口ルーチンを削除する指定なので、通常は SETPROG EXIT,DELETE を実行してもシステム出口自体は残るはずです。
    image.png
     
    しかし D PROG,EXIT,EXITNAME=OTANI.DUMMY.EXIT を実行したところ、CSV463I NO EXIT MATCHING OTANI.DUMMY.EXIT EXISTS というメッセージが表示されさました。
     

    CSV463I NO EXIT MATCHING exitname EXISTS
    DISPLAY PROG,EXIT コマンドが、特定の出口 (または、総称文字 * で終わる出口名の 指定による出口グループ) の表示を要求しました。 そのような出口または出口グループが現在定義されていません。
    「MVS System Messages Volume 4 (CBD-DMO)」CSV メッセージ CSV463I

    存在しないシステム出口に出口ルーチンを紐づけ、 SETPROG EXIT,DELETE で紐づけを解除すると、システム出口自体も定義が削除されるようです。
     
     

終わりに

ここまでお読みいただきありがとうございました。
他のPARMLIBメンバーについてもぜひご覧ください。

PARMLIBメンバー記事indexページはこちら

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?