IEFBR14はIBM メインフレーム ユーティリティプログラムです。z /OSを含むOS/360から派生したすべてのIBM メインフレーム環境で動作します。これはUNIX系システムのtrueコマンドと同様に、終了ステータス0を返すプレースホルダーです。[1]
目的
割り当て(開始とも呼ばれる)
OS/360 および派生メインフレーム システムでは、ほとんどのプログラムはファイル (通常はデータセットと呼ばれる) を直接指定することはなく、プログラムを呼び出すジョブ制御言語DD(JCL) ステートメントを通じて間接的に参照します。これらのデータ定義 (または「 」) ステートメントには、DISP=...ファイルの管理方法 (新しいファイルを作成するか古いファイルを再利用するか、完了時にファイルを削除するか保持するかなど)を示す「処理」( ) パラメータを含めることができます。
IEFBR14 が作成されたのは、DDステートメントで簡単にファイルを作成または削除できる一方で、ジョブ管理システムの特定の特殊性により、実行するプログラムがなければ作成または削除できないためです。ジョブ管理システムでは、たとえそのプログラムが実質的にヌル ステートメントであっても、イニシエーターが実際にプログラムを実行することが常に要求されます。 [2] JCL で使用されるプログラムは、実際にファイルを使用して作成または削除を行う必要はなく、DD DISP=...仕様がすべての作業を行います。したがって、その役割を果たすには、非常に単純な何もしないプログラムが必要でした。
したがって、IEFBR14 は、JCL を使用してデータ セットを作成または削除するために使用できます。
割り当て解除(終了とも呼ばれる)
IEFBR14 を実行する 2 番目の理由は、おそらくそのジョブの JCL のエラーやジョブがエラーで終了したために、前のジョブからマウントされたままになっているデバイス (通常はテープまたはディスク) をアンマウントすることです。いずれの場合も、システム オペレーターはデバイスをアンマウントする必要があり、DEALLOCこの目的のために開始タスク () が提供されることがよくあります。
コマンドを入力するだけで
S 割り当て解除
システム コンソールで、開始されたタスクを実行します。このタスクは 1 つのステップのみで構成されます。ただし、ジョブ管理の設計上、開始コマンドが失敗しないように、DEALLOC はシステムのプロシージャ ライブラリ SYS1.PROCLIB に実際に存在している必要があります。
また、このような開始タスクはすべて単一のジョブステップである必要があります。これは、オペレーティング システムのジョブ管理コンポーネント内の「開始タスク制御」(STC) モジュールが単一ステップのジョブのみを受け入れ、例外なくすべての複数ステップのジョブを失敗させるためです。
//STEP01 EXEC PGM=IEFBR14
解析と検証
少なくともz/OSでは、別のプログラムを実行するために分岐すると、その時点で呼び出し元のプログラムの構文エラーが評価されます。[1]
ネーミング
「IEF」は、 IBM が提供するプログラムを機能または作成者ごとにグループ化し、各グループに 3 文字のプレフィックスを共有するというメインフレーム コンピューターの慣例に由来しています。OS/360 では、最初の文字はほぼ常に「I」であり、ジョブ管理グループ (IEFBR14 を含む) によって作成されたプログラムはすべてプレフィックス「IEF」を使用していました。その他の一般的なプレフィックスには、データセット ユーティリティ プログラム用の「IEB」、システム ユーティリティ プログラム用の「IEH」、プログラム リンクとロード用の「IEW」などがあります。[3]その他の主要なコンポーネントは、「IEA」(オペレーティング システム スーパーバイザー) と「IEC」(入出力スーパーバイザー)でした (現在もそうです) 。
以下に説明するように、「BR 14」は、オペレーティング システムに戻るだけのプログラムの基本的な機能でした。プログラム名のこの部分は、多くの場合、ニーモニックでした。たとえば、IEBUPDTE は、ソース コード ファイルに更新 (UPDTE) を適用するデータセット ユーティリティ (IEB) であり、IEHINITT は、磁気テープ ラベル (T) を初期化 (INIT) するシステム ユーティリティ (IEH) でした。
下の「使用法」でさらに説明されているように、「BR14」という名前は、IBM アセンブラ言語命令「B ranch (to the address in) Rレジスタ14 」に由来しており、慣例により「サブルーチンから戻る」ために使用されます。OS/360 の初期のユーザーのほとんどは IBM アセンブラ言語に精通しており、これをすぐに認識したはずです。
使用法
JCLの例は次のようになります。
// IEFBR14ジョブACCT 、'DELETE DATASET' 、MSGCLASS = J 、CLASS = A // STEP0001 EXEC PGM = IEFBR14 // DELDD DD DSN = xxxxx . yyyyy . zzzzz 、// DISP = ( MOD 、DELETE 、DELETE )、UNIT = DASD
パーティション データ セットを作成するには:
// TZZZ84R JOB NOTIFY =& SYSUID 、MSGCLASS = X // STEP01 EXEC PGM = IEFBR14 // DD1 DD DSN = TKOL084 . DEMO 、DISP = ( NEW 、CATLG 、DELETE )、// DCB = ( RECFM = FB 、LRECL = 80 、BLKSIZE = 80 、DSORG = PO ) 、// SPACE = ( TRK 、( 1、1、1 ) 、RLSE ) 、// UNIT = SYSDA
実装
IEFBR14 は、当初は「レジスタへの分岐」14 という単一の命令で構成されていました。IBMアセンブラで 使用されていたニーモニックはBR であったため、名前は IEF BR 14です。BR 14 は、BCR 15,14 (汎用レジスタ 14 に含まれるアドレスへの常時分岐 [ マスク = 15 = 常時 ]) とまったく同じです。BR は、BCR 15 の疑似命令です。システム アセンブラは、このような疑似命令の多くのケースを、標準的な System/360 命令と論理的に同等なものとして受け入れます。BR 14の標準的なインスタンスはBCR 15,14です。
OS/360 およびその派生製品のリンク規約では、プログラムが呼び出される際に、完了時に制御を戻すアドレスを含むレジスタ 14 と、呼び出されたプログラムがメモリにロードされるアドレスを含むレジスタ 15 が必要です。完了時に、プログラムは戻りコードをレジスタ 15 にロードし、レジスタ 14 に含まれるアドレスに分岐します。ただし、当初 IEFBR14 はこれらの特性を考慮してコーディングされていませんでした。IEFBR14 は当初、実行可能モジュールとしてではなく、単に呼び出し元に返されるダミー制御セクションとして使用されていたためです。
プログラムのオリジナル バージョンではレジスタ 15 はまったく変更されていません。これは、元々の用途がSysgen (システム生成) 中に生成された特定のロード モジュール内のプレースホルダーであり、実行可能プログラムそのものではないためです。IEFBR14 は常に標準のBALR 14,15命令と同等の機能によって呼び出されるため、レジスタ 15 の戻りコードは常にゼロ以外でした。後に、戻りコードをクリアして確定ステータス、つまりゼロで終了するようにする 2 番目の命令が追加されました。当初、プログラマーはジョブ制御言語のすべてのプロパティを使用していたわけではなかったため、不確定な戻りコードが問題になることはありませんでした。しかし、その後、プログラマーは実際にこれらのプロパティを使用するようになったため、確定ステータスが必須になりました。IEFBR14 に対するこの変更は、プレースホルダーとしての元々の使用にはまったく影響しませんでした。
変更されたプログラムのマシン コードは次のとおりです。
SR R15,R15 はゼロ完了コードをレジスタ15に格納します
BR R14 はレジスタ 14 のアドレスに分岐します (これは実際には通信ベクトル テーブル内の SVC 3 命令です)
わかりやすくするために BR を除いた同等のマシン コードは次のようになります。
SR R15,R15 はゼロ完了コードをレジスタ15に格納しますSVC 3はジョブステップを終了するために
EXIT SVCを発行する
これは完全に理にかなっています。OS/360 イニシエーターは最初に ATTACH マクロ命令 (SVC 42) を使用してジョブ ステップ タスクを「アタッチ」し、この ATTACH マクロ (タイプ 2 SVC 命令) の効果を「解除」するには、補完的な命令、つまり EXIT マクロ (必ずタイプ 1 SVC 命令、SVC 3) を実行する必要があるからです。
参照
- true - UNIX と同等の「何もしない」プログラム
参考文献
Trombetta, Michael & Finkelstein Sue Carolyn (1985)。「OS JCL とユーティリティ」。Addison Wesley。152 ページ。
- ^ ab 「IBM Knowledge Center」www.ibm.com . IBM Corporation. 2010 . 2016年12月26日閲覧。
- ^ Schmidt, Sebastian (2004-04-24). 「True in a Nutshell Appendix: IEFBR14」www.miketaylor.org.uk . Mike Taylor . 2016-12-27閲覧。
- ^ Bagwell, David (2005-08-09). 「True in a Nutshell Appendix: IEFBR14: Clarification」www.miketaylor.org.uk . Mike Taylor . 2016-12-27閲覧。
