この記事では、OS/360 および後継OS/360に含まれる、または利用可能なサポート プログラムについて説明します。IBM は、これらのプログラムの一部をユーティリティ[ 1 ] [ a ]、その他をサービス エイド[ 2 ]に分類していますが、その境界は必ずしも一貫しているとは限らず、明確ではありません。これらのプログラムの多くはユーティリティ ソフトウェアのタイプに一致しますが、すべてではありません。
以下のリストは、OS/360および後継OSに関連するプログラムについて説明しています。DOS 、 TPF 、VMユーティリティは含まれていません。
IBM はモジュールの命名規則を使用しており、最初の 3 文字でモジュールが属する「コンポーネント」を識別します。[ 3 ] [ 4 ] [ 1 ] OS/VS では、IBM はOS/VS2では IMx メッセージの大部分を AMx 、 OS/VS1では HMx に名前変更しました。
これらのプログラムの多くは、IBMユーザーがSHAREグループを通じて設計し、その後、ユーザーが最初に作成したバージョンをIBMが修正または拡張したものです。
これらのプログラムは通常、ジョブ制御言語(JCL)を介して呼び出されます。データセットには、(OS、現在のz/OSオペレーティングシステムでは)共通のJCL DD識別子を使用する傾向があります。
IDCAMS(アクセス方式サービス)は、仮想ストレージアクセス方式(VSAM)および非VSAMデータセットを生成および変更します。IDCAMSはOS/VSでVSAMとともに導入されました。「アクセス方式」という名称は、OS/VSの当初の「VSAMが他のすべてのアクセス方式に取って代わる」という考え方に由来しています。IDCAMSは、VSAMファイルと非VSAMファイルの両方に対して多くの機能を実行するため、おそらくすべてのユーティリティプログラムの中で最も多くの機能を備えています。
次の例は、IDCAMSを使用してデータセットをディスクにコピーする方法を示しています。データセットは80バイトのレコードで構成されており、システムは出力用のブロックサイズを自動的に選択します。
// XXXXXXXW JOB XXXXXXX 、AAAA 、CLASS = G 、MSGCLASS = 1 、NOTIFY =& SYSUID // STEP001 EXEC PGM = IDCAMS // SYSIN DD * REPRO INFILE(FILE01) OUTFILE(FILE02) /* // FILE01 DD DSN = PROD . FILE1 . INPUT 、disp = shr ..... // FILE02 DD DSN = PROD . FILE2 . OUTPUT 、// DISP = ( NEW 、CATLG 、DELETE ) 、// UNIT = DASD 、// SPACE = ( TRK 、( 100 、10 ) 、RLSE ) 、// DCB = ( RECFM = FB 、BLKSIZE = 0 、LRECL = 80 ) 、// SYSPRINT DD SYSOUT = * 、// SYSOUT DD SYSOUT = * 、// SYSUDUMP DD SYSOUT = * 、// SYSUDUMP DD SYSOUT = * 、// SYSUDUMP DD SYSOUT = * 、// SYSUDUMP 、 ///*上記の例では、SYSIN制御カードはインストリームファイルから取得されていますが、必要に応じて、制御カードを含む任意のシーケンシャルファイル、PDSメンバー、または一時データセットを指定することもできます。SYSINファイルを使用する例は次のようになります。
// SYSIN DD DSN = PROD.MYFILE.REPRO 、DISP = SHRまたはこれ:
// SYSIN DD DSN = PROD.MYLIB.CNTLLIB ( REPRO ) , // DISP = SHRIEBCOMPRは、連続データセットまたはパーティション化されたデータセット内のレコードを比較します。
IEBCOMPRユーティリティは、2つの連続データセットまたはパーティション化されたデータセットを比較するために使用されます。このデータセットの比較は、論理レコードレベルで実行されます。そのため、IEBCOMPRは、データセットのバックアップコピーが正しいこと(オリジナルと完全に一致すること)を検証するためによく使用されます。
処理中、IEBCOMPR は各データセットの各レコードを 1 つずつ比較します。レコードが一致しない場合、IEBCOMPR はSYSOUTに次の情報を出力します。
連続するデータセットを比較する場合、IEBCOMPR は以下の条件が満たされている場合にデータセットを等しいとみなします。
分割されたデータセットの場合、IEBCOMPR は、以下の条件が満たされている場合にデータセットを等しいとみなします。
処理中に10回の不一致比較が検出された場合、IECOMPRは適切なメッセージを表示して終了します。
// XXXXXXXW JOB XXXXXXX 、AAAA . A . A 、CLASS = G 、MSGCLASS = 1 、NOTIFY = XXXXX // STEP01 EXEC PGM = IEBCOMPR 、ACCT = PJ00000000 // INCLUDE MEMBER=@BATCHS //*SYSIN DD DUMMY // SYSIN DD * COMPARE TYPORG=PO /* // SYSUT1 DD DSN = XXXXXXX . OLDFILE 、UNIT = DASD 、DISP = SHR // SYSUT2 DD DSN = XXXXXXX . NEWFILE 、UNIT = DASD 、DISP = SHR // SYSUT # DD
注: IEBCOMPRは、柔軟性や使いやすさの点で優れた比較プログラムではありません。比較対象を特定の列に限定したり、空白の違いを無視したり、レコード内の違い箇所を通知したり、10箇所以上違いがあると停止したりといった制限があります。一方で、高速で、OS/360以降のOSを搭載したすべてのIBMメインフレームに搭載されています。そのため、再ブロックされていないロードモジュールを比較する場合や、コピーが正しく動作したかどうかを確認する場合など、完全一致が求められる場面では非常に便利です。プログラムやレポートの比較には、 ISPF SuperC(ISRSUPC)比較プログラムが代わりによく使用されます。
IEBCOPYは、パーティション化されたデータセットをコピー、圧縮、およびマージします。また、コピー操作中に特定のメンバーを選択または除外したり、メンバーの名前を変更または置換したりすることもできます。
IEBCOPYが実行できるタスクには、以下のようなものがあります。
IEBCOPYユーティリティの場合、コピーに必要なジョブ制御ステートメントは以下のとおりです。
//ステップ名EXEC PGM = IEBCOPY // SYSPRINT DD SYSOUT = class // MYDD1 DD DSN = xxxx . ppp . psps , DISP = SHR // MYDD2 DD DSN = xxxx . ppp . pssp , DISP = SHR // SYSIN DD * COPY INDD=MYDD1,OUTDD=MYDD2 SELECT MEMBER=(MEM1,MEM2,MEM3)/ EXCLUDE MEMBER=(SF,DF,SA)MYDD1 および MYDD2 DD ステートメントは、それぞれパーティション化された入力データセットと出力データセットに対してユーザーが選択する名前です。デフォルト値はSYSUT1とSYSUT2です。これら 2 つの DD ステートメントには、有効な DDNAME を任意に使用できます。これらの DDNAME は、ユーティリティ制御ステートメントで指定され、IEBCOPY に入力データセットと出力データセットの名前を指示します。PDS を圧縮するには、DD ステートメントは 1 つだけで十分です。
IEBDG(データジェネレータ)は、パターン化されたデータで構成されるテストデータセットを作成します。制御ステートメントは、作成するレコードのフィールド(位置、長さ、フォーマット、初期化処理など)を定義します。IEBDGは、既存のデータセットを入力として使用し、制御ステートメントで指定されたとおりにフィールドを変更できます。たとえば、名前フィールドをランダムなアルファベットテキストに置き換えることができます。各フィールドの内容はレコードごとに変更可能で、たとえば、英数字フィールドの文字を後続のレコードごとに左右に回転させることができます。
例:
// XXXXXXXW JOB XXXXXXX 、AAAA 、CLASS = G 、MSGCLASS = 1 、NOTIFY =& SYSUID //********************************************************************** //* 後で使用するデータセットの作成//********************************************************************** // CRSTEP EXEC PGM = IEFBR14 // DDCREA DD DSN =& SYSUID .. MVSUT . SEQOUT 、DISP = ( NEW 、CATLG ) //********************************************************************** //* テストデータの作成//********************************************************************** // STEP1 EXEC PGM = IEBDG // SYSPRINT DD SYSOUT = * // SEQOUT DD DSN =& SYSUID .. MVSUT . SEQOUT , DISP = OLD // SYSIN DD DATA DSD OUTPUT=(SEQOUT) FD NAME=FIELD1,LENGTH=30,STARTLOC=1,FORMAT=AL,ACTION=TL FD NAME=FIELD2,LENGTH=30,STARTLOC=31,FORMAT=AL,ACTION=TR FD NAME=FIELD3,LENGTH=10,STARTLOC=71,PICTURE=10, X P'1234567890',INDEX=1 CREATE QUANTITY=500,NAME=(FIELD1,FIELD2,FIELD3),FILL=X'FF' END /* //********************************************************************** //* テストデータをSYSOUTに印刷//********************************************************************** // STEP2 EXEC PGM = IEBGENER // SYSPRINT DD SYSOUT = * // SYSUT1 DD DSN = * . STEP1 . SEQOUT , DISP = SHR // SYSIN DD DUMMY //SYSUT2 DD SYSOUT = * //********************************************************************** //* 前のステップが異常終了した場合でも、作成されたデータセットを削除します//********************************************************************** // DLSTEP EXEC PGM = IEFBR14 、COND = EVEN // DDDEL DD DSN =& SYSUID .. MVSUT . SEQOUT 、DISP = ( OLD 、DELETE 、DELETE ) //IEBEDITはJCLの一部を選択的にコピーします。
IEBEDITプログラムの例:
// IEBEDITJ JOB ACCT 、'' 、CLASS = P 、MSGCLASS = T 、MSGLEVEL = ( 1 、1 ) 、NOTIFY =& SYSUID // STEP0001 EXEC PGM = IEBEDIT // SYSPRINT DD SYSOUT = * // SYSUT1 DD DSN = xxxxx . yyyyy . zzzzz 、DISP = SHR // SYSUT2 DD SYSOUT = ( * 、INTRDR ) // SYSIN DD * EDIT TYPE=INCLUDE,STEPNAME=(STEP10,STEP5,STEP15) /* //この例では、データセット xxxxx.yyyyy.zzzzz にはジョブ (STEP5、STEP10、STEP15 という名前のステップを含む) が含まれている必要があります。この IEBEDIT ルーチンは、ジョブの選択されたステップを SYSUT2 出力ファイル (この例では内部リーダー) にコピーします。
EDIT文の構文は次のとおりです。
[ラベル] 編集 [開始=ジョブ名] [,タイプ={ポジション|含める|除外}] [,ステップ名=(名前リスト)] [,印刷しない]START=jobnameEDIT ステートメントを適用する入力ジョブの名前を指定します。各 EDIT ステートメントは、それぞれ別のジョブに適用する必要があります。TYPE と STEPNAME を指定せずに START を指定した場合、指定されたジョブの JOB ステートメントとすべてのジョブ ステップが出力に含まれます。
デフォルト: START が省略され、かつ EDIT ステートメントが 1 つだけ指定されている場合、入力データセット内で最初に見つかったジョブが処理されます。最初のステートメント以外の EDIT ステートメントで START が省略されている場合、処理は入力データセット内で見つかった次の JOB ステートメントへと続行されます。
TYPE={POSITION|INCLUDE|EXCLUDE}出力データセットの内容を指定します。これらの値は以下のようにコード化できます。
POSITION出力は、JOB ステートメント、STEPNAME パラメーターで指定されたジョブ ステップ、およびそのジョブ ステップに続くすべてのステップで構成されることを指定します。指定されたステップより前のすべてのジョブ ステップは、この操作から除外されます。POSITION がデフォルトです。
INCLUDE出力データセットには、JOBステートメントとSTEPNAMEパラメーターで指定されたすべてのジョブステップが含まれることを指定します。
EXCLUDE出力データセットには、JOB ステートメントと、STEPNAME パラメーターで指定されたステップを除く、そのジョブに属するすべてのジョブステップが含まれることを指定します。
STEPNAME=(namelist)処理したいジョブステップの名前を指定します。
namelist単一のジョブステップ名、カンマで区切られたステップ名のリスト、またはハイフンで区切られた連続したステップ範囲(例:STEPA-STEPE)を指定できます。これらの組み合わせは、1つの名前リスト内で使用できます。複数のステップ名を指定する場合は、名前リスト全体を括弧で囲む必要があります。
STEPNAMEを指定するとTYPE=POSITION、出力データセットに配置される最初のジョブステップを指定します。このステップより前のジョブステップは出力データセットにコピーされません。
TYPE=INCLUDESTEPNAME は、またはとともに記述するとTYPE=EXCLUDE、操作に含めるか除外するかを指定するジョブ ステップの名前を指定します。たとえば、STEPNAME=(STEPA,STEPF-STEPL,STEPZ)STEPF から STEPL までのジョブ ステップと STEPZ は、操作に含めるか除外するかを指定します。
STEPNAMEを省略した場合、EDITステートメントで指定された名前の入力ジョブ全体がコピーされます。ジョブ名が指定されていない場合は、最初に見つかったジョブが処理されます。
NOPRINTメッセージデータセットには出力データセットのリストを含めないことを指定します。
デフォルト:出力結果はメッセージデータセットに一覧表示されます。
詳細はこちらをご覧ください。
IEBGENERは、シーケンシャルデータセットからレコードをコピーするか、パーティション化されたデータセットを作成します。
IEBGENERが実行できるタスクには、以下のようなものがあります。
あるデータセットを別のデータセットにコピーするIEBGENERプログラムの例:
// IEBGENER JOB ACCT 、'DATA COPY' 、MSGCLASS = J 、CLASS = A // STEP010 EXEC PGM = IEBGENER // SYSUT1 DD DSN = xxxxx . yyyyy . zzzzz 、DISP = SHR // SYSUT2 DD DSN = aaaaa . bbbbb . ccccc 、DISP = (、CATLG ) 、// UNIT = SYSDA 、SPACE = ( TRK 、( 5 、5 ) 、RLSE ) 、// DCB = ( RECFM = FB 、LRECL = 1440 ) // SYSPRINT DD SYSOUT = * // SYSIN DD DUMMY単純なコピー処理の場合、ソートプログラムはIEBGENERよりも高速に処理できることが多い。そのため、多くのメインフレームシステムでは、このような処理をIEBGENERではなくソートプログラムであるICEGENERに自動的にルーティングするオプションが利用されている。
システムによっては、バッチジョブの出力を「 」外部ライターに送ることで、バッチジョブからメールを送信することが可能です。そのようなシステムでは、その方法は次のとおりです。SMTP
// IEBGENER JOB ACCT , 'DATA COPY' , MSGCLASS = J , CLASS = A // NORMRC EXEC PGM = IEBGENER // SYSPRINT DD SYSOUT = * // SYSUT1 DD * , LRECL = 80 HELO <SYSTEMID> MAIL FROM:<USERID@SYSTEMID> RCPT TO:<USERID@SYSTEMID> DATA From: <USERID@SYSTEMID> To: <USERID@SYSTEMID> Subject: Test Mailメインフレームからのテストメール。終了/* // SYSUT2 DD SYSOUT = ( B , SMTP ), LRECL = 80 // SYSIN DD DUMMYメインフレームからメールを送信する際に、ファイルを添付することも可能です。
IEBIMAGEは、IBM 3211プリンタ、IBM 3800レーザー印刷サブシステム、およびIBM 4248プリンタ用の複数の種類の定義(別名イメージ)を操作します。一般的な用途としては、フォーム制御バッファ( FCB)、文字配置テーブル、文字定義、テキストとともに出力に印刷されるフォームのイメージ、ページに印刷される会社のロゴ、または「グレーバー」ページ(前のグリーンバー用紙に合わせてグレーと白の水平方向の背景が交互に表示される)の印刷などがあります。このユーティリティを使用すると、さまざまなフォームやロゴをイメージとして保存し、必要なときに同じ標準の白紙を使用して印刷できるため、多数の印刷済みフォームを在庫する必要がなくなり、オペレーターがプリンタを停止して用紙を交換する必要もなくなります。
IEBISAMはISAMデータセットのアンロード、ロード、コピー、および印刷を行います。
IBMマニュアルSC26-7414-08「z/OS DFSMSdfpユーティリティ」より抜粋:IEBISAMプログラムは配布されなくなりました。z/OS V1R7以降、ISAMデータセットは処理(作成、オープン、コピー、ダンプ)できなくなりました。現在も使用されているISAMデータセットは、VSAMキーシーケンスデータセットに変換する必要があります。
z/OS V1R7より前のバージョンでは、アクセス方式サービスを使用してVSAMキーシーケンスデータセットを割り当て、ISAMデータセットをそこにコピーすることができました。
IEBPTPCH(「印刷およびパンチ」)は、順次データセットまたは分割データセットからレコードを印刷またはパンチします。
IEBPTPCHが実行できるタスクには、以下のようなものがあります。
// IEBPTPCH JOB // EXEC PGM=IEBPTPCH // SYSIN DD * PRINT MAXFLDS=2 TITLE ITEM=('Name',22), ITEM=('GPA',50) TITLE ITEM=(' ',1) RECORD FIELD=(25,1,,22), FIELD=(4,51,,50) /* // SYSPRINT DD SYSOUT = * // SYSUT1 DD * Person 1 307 C Meshel Hall 3.89 Second person 123 Williamson Hall 2.48 3rd person 321 Maag Library 1.52 /* // SYSUT2 DD SYSOUT = * //空のデータセットのチェック:チェック対象のデータセットが空の場合は RC=4、そうでない場合は 0 となります。
// IEBPTPCHジョブ// EXEC PGM=IEBPTPCH // SYSUT1 DD DSN = <ファイル名>, DISP = SHR // SYSUT2 DD DUMMY , // DCB = ( BLKSIZE = <ブロックサイズ>,RECFM=FA) // SYSIN DD * PRINT TYPORG=PS /* // SYSPRINT DD SYSOUT = * //IBM 2495テープカートリッジリーダーからレコードを読み取ります。IEBTCRIN の最終サポートは、2002 年に z/OS 1.3.0 で終了しました。[ 5 ]
シーケンシャルデータセットまたはパーティションデータセットのメンバー内のレコードを変更します。IEBUPDTE に置き換えられましたが、互換性はありません。
IEBUPDTE(「UPDaTE」)は、シーケンシャルデータセットまたはパーティションデータセットへの変更を組み込みます。UNIXpatchユーティリティは同様のプログラムですが、入力フォーマットマーカーが異なります(例:./ INSERT ...MVSの は@@...Unix Patchでは になります)。
プログラマーの中には「IEBアップディティ」と発音する人もいます。
IEBUPDTEユーティリティは、ソースライブラリを管理するために使用されます。IEBUPDTEが実行できる機能には、以下のようなものがあります。
IEBUPDTEは、ソースライブラリをテープからDASDに配布するためによく使用されます。
IEBUDPTEは、ほとんどのIEBタイプのユーティリティで必要とされるジョブ制御ステートメントと同じものを使用します。例外は以下のとおりです。
SYSIN DDSYSUT1 DDSYSIN DDSYSUT1 DDSYSUT1 DDIEBUPDTE は、ステートメントまたはステートメントのいずれかから入力データセットを読み取りますSYSIN DD。IEUPDTEで使用されるジョブ制御は以下のとおりです。
//ステップ名EXEC PGM = IEUPDTE 、PARM = NEW // SYSPRINT DD SYSOUT = class // SYSUT1 DD ... // SYSUT2 DD ... // SYSIN DD ...IEFBR14はダミープログラムであり、通常はデータセットの割り当てまたは削除のみを目的とする場合にJCLに挿入されます。
IEFBR14ステップの例:
// IEFBR14ジョブアカウント、'DELETE DATASET' // STEP01 EXEC PGM = IEFBR14 // DELDD DD DSN = xxxxx . yyyyy . zzzzz 、// DISP = ( MOD 、DELETE 、DELETE )、UNIT = DASDOS/360の呼び出しシーケンスでは、レジスタ14にリターンアドレスが格納されていました。そのため、レジスタ14への分岐命令はプログラムを即座に終了させます。ただし、このプログラムの実行前後に、オペレーティングシステムはDDステートメントで指定されたとおりにデータセットを割り当てたり解放したりするため、データセットの設定や削除を迅速に行う方法としてよく用いられます。
当初は単一の命令「レジスタへの分岐」14で構成されていました。IBMアセンブラで使用されていたニーモニックはBRであり、そのためIEF BR 14という名前が付けられました。IEFはOS/360の「ジョブ管理」サブシステムの「プレフィックス」です。
この単一命令プログラムにはエラーがありました。戻りコードが設定されていなかったのです。そのため、正しいステータスで終了するように、戻りコードをクリアする2つ目の命令を追加する必要がありました。
この2命令構成のプログラムには、IBMによって修正された追加のエラーがありました。このエラーは、IEFBR14プログラムが再入力可能(複数の呼び出し元が同時に使用可能)としてリンク編集されていなかったことが原因でした。
一部のハッカーはIEFBR14を取り上げ、BR 14命令をBR 15に変更することで、「世界最短のループ」を作り出しました。レジスタ15にはIEFBR14モジュール自体のアドレスが格納されており、BR 15命令は単にモジュールを永久に再呼び出しするだけだからです。
これらのユーティリティは通常、プログラマがシステム上でアプリケーション開発を行うためではなく、システムの運用を維持するためにシステムプログラマによって使用されます。
ICKDSF(「デバイスサポート施設」)は、オペレーティングシステムの下、またはスタンドアロンでDASDをインストール、初期化、および保守します。
故障した線路には代替線路を割り当てる。
IEHDASDR [ 1 ] : 161–187 は、直接アクセスストレージデバイス[ b ] (DASD)に対していくつかの操作を実行できます。
IBMは最終的にIEHDASDRへの新しいデバイスタイプのサポートの追加を中止し、ボリュームの初期化には無料のDSFを、ダンプ/リストアには有料のDASDR(5740-UT1)およびデータファシリティ/データセットサービス(5740-UT3、DF/DSS)を利用するよう顧客に指示した。
IBM は MVS/XA で IEHDASDR を削除しました。[ 6 ]
IEHINITT(「テープ初期化」)は、テープラベルを書き込むことでテープを初期化します。このユーティリティを一度実行すれば、複数のテープにラベルを付けることができます。IBM標準ラベルまたはASCIIラベルを書き込むことができます。
IEHINITTプログラムの例:
// IEHINITT JOB ACCT 、'LABEL TAPES' 、MSGCLASS = J 、CLASS = A // STEP0001 EXEC PGM = IEHINITT 、REGION = 8 M // SYSPRINT DD SYSOUT = A // LABEL DD DCB = DEN = 2 、UNIT = ( 3490 、1 、DEFER ) // SYSIN DD * LABEL INITT SER=123450、NUMBTAPE=3 /*この例では、3490型磁気テープ装置に装着された3本のテープにラベルを貼ります。各テープにはIBM標準ラベルが貼付されます。ラベルが貼付されたテープごとにVOLSER値が1ずつ増加します。ラベル貼付後、各テープは巻き戻され、テープから取り出されます。
IEHIOSUP は、SYS1.SVCLIB 内のタイプ IVスーパーバイザコール(SVC) ルーチンの相対トラック アドレス (TTR) リンクを更新します。IEHIOSUP は OS/VS2 以降ではサポートされなくなりました。[ 7 ]
OPEN、CLOSE、およびEOV機能は、順次実行される一連のSVCモジュールによって実行されます。一部のモジュールには、XCTLマクロがシリーズの次のモジュールにリンクするために使用するテーブルが含まれています。パフォーマンス上の理由から、毎回ディレクトリ検索を回避するために、これらのテーブルにはモジュールの名前ではなく、モジュールのディスクアドレスが含まれています。SYS1.SVCLIBの更新によりこれらのアドレスが変更される可能性があるため、正しいアドレスをインストールするにはIEHIOSUPを実行する必要があります。[ 8 ]
これは、IEHIOSUP を実行するために必要な JCL の例です。[ 1 ]
// IHEIOSUPジョブ// EXEC PGM=IEHIOSUP // SYSUT1 DD DSNAME = SYS1 . SVCLIB ~ DISP = OLD , UNIT = 2311 , // VOLUME = SER = 111111 // SYSPRINT DD SYSOUT = A //IEHLIST は、パーティションデータセット (PDS) ディレクトリ内のエントリを一覧表示したり、ボリューム目次 ( VTOC ) の内容を一覧表示したりするために使用されるユーティリティです。
IEHLISTユーティリティは、以下のいずれかに含まれるエントリを一覧表示するために使用されます。
IEHLISTプログラムの例:
// IEHLIST JOB ACCT 、'LIST PDS' 、MSGCLASS = J 、CLASS = A // STEP0001 EXEC PGM = IEHLIST 、REGION = 8 M // SYSPRINT DD SYSOUT = A // PDS1 DD DSN = xxxx . yyyy . zzzz 、DISP = OLD // SYSIN DD * LISTPDS DSNAME=xxxx.yyyy.zzzz,FORMAT /*このジョブは、xxxx.yyyy.zzzz という名前の PDS ディレクトリのフォーマット済みリストを生成します。
VTOCを一覧表示するIEHLISTプログラムの例は、これと非常によく似ています。
// IEHLIST JOB ACCT 、'LIST VTOC' 、MSGCLASS = J 、CLASS = A // STEP0001 EXEC PGM = IEHLIST 、REGION = 8 M // SYSPRINT DD SYSOUT = A // VOL1 DD VOL = SER = vvvvvv 、DISP = OLD // SYSIN DD * LISTVTOC VOL=SER=vvvvvv,FORMAT /*IEHMOVE は、データ コレクションを移動またはコピーします。ただし、現在では DFSMS (システム管理ストレージ) 環境が一般的になっており、IBM はこれらの環境で IEHMOVE ユーティリティを使用することを推奨していません。移動はコピーとは異なり、移動後に元のデータセットが削除または消去されます。IEHMOVE で実行できるタスクには、次のようなものがあります。
一見すると、IEHMOVEはIEBGENERおよびIEBCOPYユーティリティと重複しているように見えるかもしれません。しかし、IEHMOVEはより強力です。IEHMOVEを使用する主な利点は、新しいデータセットの領域やDCB情報を指定する必要がないことです。これは、IEHMOVEが既存のデータセットに基づいてこれらの情報を割り当てるためです。
IEHMOVEのもう一つの利点は、データセットのグループだけでなく、データボリューム全体をコピーまたは移動できることです。データセットのグループやボリュームを簡単に移動できるため、IEHMOVEユーティリティはシステムプログラマーに広く利用されています。
IEHMOVEジョブのサンプル:
//ステップ名EXEC PGM = IEHMOVE 、PARM = 'LINECNT=xx,POWER=n' // SYSPRINT DD SYSOUT = class // SYSUT1 DD UNIT = aaaa 、VOL = SER = bbbbbb 、DISP = OLD // anyname1 DD UNIT = cccc 、VOL = SER = dddddd 、DISP = OLD // anyname2 DD UNIT = eeee 、VOL = SER = ffffff 、DISP = OLD // SYSIN DD ...IEHMOVE の DD ステートメントは、SYSPRINT と SYSIN を除き、個々のデータセットではなくDASD ボリュームまたは磁気テープボリュームを参照します。ただし、ボリュームを指定すると、そのボリュームへの排他的アクセス権が取得されるため、ボリュームを参照すると問題が発生する可能性があります。そのため、IEHMOVE ジョブの実行中は、そのボリューム全体(およびそのボリューム上のすべてのデータセット)は他のユーザーからアクセスできなくなります。これは、テープやマウント可能な DASD ボリュームなどのプライベート ボリュームでは許容されますが、パブリック ボリュームでは許容されません。DISP=OLD
SYSUT1 DD ステートメントは、IEHMOVE で必要とされる 3 つのワーク データ セットが割り当てられる DASD ボリュームを指定します。この DD ステートメントでは、ユニットとボリュームの情報を指定する必要があります。
IEHMOVEは、 PL/Sで開発された最初のシステムの1つでした。
この例では、3つの連続したデータセット(SEQSET1、SEQSET2、SEQSET3)が、1つのディスクボリュームから3つの別々のディスクボリュームに移動されます。3つの受信ボリュームはそれぞれ、IEHMOVEによって必要に応じてマウントされます。ソースデータセットはカタログ化されません。領域はIEHMOVEによって割り当てられます。
//ジョブを移動... // STEP1 EXEC PGM = IEHMOVE // SYSPRINT DD SYSOUT = A // SYSUT1 DD UNIT = disk , VOLUME = SER = 333333 , DISP = OLD // DD1 DD UNIT = ( disk ,, DEFER ), DISP = OLD , // VOLUME = ( PRIVATE ,, SER = ( 222222 )) // DD2 DD UNIT = ( disk ,, DEFER ), DISP = OLD , // VOLUME = ( PRIVATE ,, SER = ( 222333 )) // DD3 DD UNIT = ( disk ,, DEFER ), DISP = OLD , // VOLUME = ( PRIVATE ,, SER = ( 222444 )) // DD4 DD VOLUME = ( PRIVATE , RETAIN 、SER = ( 444444 ))、// UNIT = disk 、DISP = OLD // SYSIN DD * MOVE DSNAME=SEQSET1,TO=disk=222222,FROM=disk=444444 MOVE DSNAME=SEQSET2,TO=disk=222333,FROM=disk=444444 MOVE DSNAME=SEQSET3,TO=disk=222444,FROM=disk=444444 /*IEHPROGMは、システム制御データの構築と維持管理を行います。また、データセットの名前変更や削除(スクラッチ)にも使用されます。
IEHPROGMが実行できるタスクには、以下のようなものがあります。
目録作成用:
// SYSIN DD * CATLG DSNNAME=data-set-name, VOL=device-name=volume-number /* //テープエラーを検出するために、SMFレコードを選択してフォーマットします。
これらのプログラムはオペレーティングシステムの制御下では実行されません
これらは、IBM がサービス補助資料や診断マニュアル[ 9 ]に文書化したユーティリティ プログラムです。オリジナルの OS/360 サービス補助資料は、 IFCおよびIM*で始まる名前でしたが、IBM はOS/VS1では HM*、 OS/VS2では AM*に命名規則を変更しました。IBM は IFC の命名規則を変更しませんでした。
ソート/マージユーティリティは、ファイル内のレコードを指定された順序に並べ替えたり、事前にソートされたファイルをマージしたりするプログラムです。非常に頻繁に使用され、メインフレーム環境では最もよく使われるアプリケーションプログラムの一つです。最新のソート/マージプログラムは、特定のレコードを選択または除外したり、レコードを要約したり、重複を削除したり、レコードのフォーマットを変更したり、簡単なレポートを作成したりすることもできます。ソート/マージは非常に重要な機能であるため、IBMメインフレーム向けに独自のソート/マージパッケージを販売する企業が複数存在します。例えば、Computer Associates社のCA-SORTやSYNCSORTなどが挙げられます。
IBMのオリジナルのOS/360ソート/マージプログラムである360S-SM-023(プログラム名IERRCO00)は、IBMの第1世代ダイレクトアクセスストレージデバイス(DASD)[ d ]とテープ(2400)のみをサポートしていました。第2世代ディスクドライブのサポートは、5734-SM1や後の5740-SM1(DFSORT )、ICEMANなどのIBMプログラム製品によって提供されました。インストール時に優先されるソート/マージプログラムには、通常SORTという別名が付けられていました。
SORT は、スタンドアロン プログラムとして実行されることが多く、通常は DD で識別されるファイルから入力を読み込みSORTIN、DD で識別されるファイルにソートされた出力を書き込みますSORTOUT。また、COBOLSORT動詞やPL/I ルーチンの呼び出しを介して、他のアプリケーションから呼び出されることもよくあります。その場合、SORT は DD ファイルまたはDD ファイルのPLISRTxいずれかを使用したり、呼び出し元からソート対象のレコードを受け取ったり、ソートされたレコードを 1 つずつ呼び出し元に返したりします。SORTINSORTOUT
SORT の操作は、IBM およびサードパーティ製のさまざまなソート プログラム間でほぼ互換性のある制御ステートメントによって制御されます。SORTまたはMERGEステートメントは、ソート キー、つまりデータのソートまたはマージの対象となるフィールドを定義します。このステートメントは、各キーの位置、長さ、およびデータ型RECORDを識別します。ステートメントは、入力ファイル内のレコードの形式と長さを記述します。その他のステートメントを使用すると、ユーザーはソートに含めるレコードと除外するレコードを指定したり、データに対して実行するその他の変換を指定したりできます。
キーは、 EBCDICまたはASCII文字データ、ゾーンまたはパック10進数、符号付きまたは符号なし固定小数点バイナリ、または16進浮動小数点の任意の組み合わせにすることができます。キーはレコード内のどこにでも配置でき、連続している必要はありません。ソートは、キーによる昇順と降順の任意の組み合わせで指定できます。[ 12 ]
OS/360 のソート プログラム IERRCO00 は、入力データをセクションに分割し、各セクションをメイン メモリでソートし、ソートされたセクションを直接アクセス ストレージ デバイス(DASD) または磁気テープ上の中間データセットに書き込むことで動作します。最終的なマージ フェーズでは、セクションをマージしてソートされた出力を生成します。SORT は、セクションを二次ストレージ デバイスに分散するためのいくつかの手法のいずれかを使用します。通常、SORT は最適な手法を選択できますが、これはユーザーが上書きできます。[ 13 ] 中間ストレージがテープの場合は SORT で使用できる手法が 3 つあり、ディスクの場合は 2 つあります。[ 14 ]
テープを使ったテクニックは以下の通りです。
ディスク技術は以下のとおりです。
OS/360には、いくつかの構成で利用可能なリンケージエディタしかありませんでした。DFSMSdfpでは、ロードモジュールの代替手段として、またプログラムオブジェクトの唯一のオプションとしてバインダーが追加されました。
リンケージ エディターは、制御カード、オブジェクト モジュール、その他のロード モジュールの組み合わせから、パーティション データ セット内のロード モジュールを作成および置換します。制御セクション (CSECT) の名前を変更または置換したり、その他のさまざまな機能を実行したりできます。当初は、ストレージ要件に応じていくつかの構成で利用可能でした。E レベルのリンケージ エディターには、それぞれ 15KB と 18KB の利用可能なストレージで動作できる IEWLE150 と IEWLE180 の 2 つのバージョンがありました。F レベルのリンケージ エディターにも、それぞれ 44KB と 88KB を必要とする IEWLF440 と IEWLF880 の 2 つのバージョンがありました。[ 15 ] E レベルのリンケージ エディターは利用できなくなり、F レベルのリンケージ エディターは現在、単にリンケージ エディターとして知られています。z /OSでは、リンケージ エディターは互換性のためにのみ存在します。
フレッド・ブルックスは、 System/360 Linkage Editorを第二のシステム効果の代表的な例として挙げている。
この基本機能に加えて、プログラムオーバーレイも処理します。これまでに構築されたオーバーレイ機能の中で最も優れたものの1つです。...しかし、マルチプログラミングが通常のモードであり、動的コア割り当てが基本的な前提となっているシステムに属しているため、恐竜の最後の、そして最も優れたものでもあります。これは、静的オーバーレイを使用するという概念と直接的に矛盾しています。...さらに、リンケージエディタは非常に多くのスペースを必要とし、それ自体が多くのオーバーレイを含んでいるため、オーバーレイ管理なしでリンケージのみに使用した場合でも、ほとんどのシステムコンパイラよりも遅くなります。この皮肉な点は、リンカの目的が再コンパイルを回避することにあるということです。[ 16 ]
DFSMSで追加されたバインダーは、リンケージエディタと同じ機能を実行します。さらに、パーティションデータセット拡張(PDSE)のロードモジュールと機能的に同等の、多くの追加機能を備えた新しいフォーマットであるプログラムオブジェクトをサポートしています。
システム生成(SYSGEN)とカスタマイズに必要だったため、通常は1つのアセンブラが標準で含まれていた。
コンピュータショップで使用される各プログラミング言語には、ソースプログラムを機械語オブジェクトモジュールに変換するコンパイラが1つ以上存在します。そして、コンパイラから生成されたオブジェクトモジュールは、リンケージエディタ(IEWL)によって処理され、実行可能なロードモジュールが作成されます。
IGYCRCTLはコンパイラの一般的な例であり、現在のIBM Enterprise COBOL for z/OS製品用のコンパイラです。これまでにもIBM COBOLコンパイラはいくつか存在し、それぞれ異なる名前が付けられていましたが、COBOL現在のバージョンにはユーザーが別名を付けている場合もあります。
他にも様々なプログラミング言語用のコンパイラが多数存在します。OS/360にバンドルされているコンパイラには、ALGOL、COBOL、FORTRAN、PL/I、RPGなどがあります。 2026年現在z/OSでサポートされているコンパイラは、COBOL、FORTRAN、CおよびC++、PL/I、Python、Go、Node.js(Javascript)、およびJavaです。[ 17 ]
例えばAdaなどの古いコンパイラの中には、z/OS上で動作するものもあるかもしれませんが、現在はサポートされていません。
システム変更プログラム(SMP)は、OS/360および後継システムにサービスをインストールするためのツールであり、スタンドアロンのアセンブリ、リンク編集、IMAPTFLEジョブなどの従来の手法に取って代わるものです。当初はオプション機能でしたが、MVS/SP以降では必須となり、プログラム製品バージョンであるSMP/Eは、z/OSなどの最新システムに組み込まれています。
特定のソート/マージ アプリケーションで、ソート/マージ プログラムが最も効率的な手法を選択しないことがわかった場合は、ソートに別の手法を使用するように要求できます。