PSデータセットとは?

By kamii - Last updated: 金曜日, 9月 17, 2010

PSデータセット(順次データセット)とは?

順次データセットはMVSにおける最も基本的なファイルです。ファイルの中はレコードという単位で分割されます。データを記録したレコードが順番に並んでいるため順次編成ファイルとも呼ばれます。ディスクやテープなどに書き込まれた順次編成ファイルとしての実体データが順次データセットあるいは順編成データセットということになります。

順次データセットは単に先頭からレコードを並べているだけの単純な構造なので、シンプルでわかりやすくプログラミングも容易です。区分データセットやVSAM、さまざまなデータベースではディスクに格納しなければなりませんが、順次データセットはディスク以外のテープ、紙(印刷用紙)などへの記録もできます。現在では使われませんが、過去には紙カードや紙テープといったメディアもありました。
業務プログラムにおいては処理の中間で作成される作業用データファイルや、帳票データの出力先として多用されています。その他業務処理用のベース・データファイルとしても利用されます。制御プログラムやユーティリティーにおいては、データセットやボリュームのバックアップファイルやログファイルの出力先としてよく使われています。

まとまった量のデータを格納しておくには簡単で便利ですが、レコードは単に順番に並んでいるだけなのでデータの再利用時も先頭から順番にしか取り出せません。そこでレコードの1部をキーとして扱い、キーに対応したレコードがデータセット内のどこにあるかの目次(インデックス)を持って、キーによるレコード検索を可能にする索引順データセット(ISAM)、レコードに番号を付けてその番号を指定してダイレクトに目的のレコードを取り出せるようにした直接データセット(DAM)などのデータセットもありました。ISAMもDAMも順次データセットの応用編ともいうべきものでしたが、今ではVSAMのKSDSとRRDSによって置き換えられています。特にMVS(z/OS)ではISAMはもはやサポートすらされていません。キーやレコード番号によるアクセスはアプリケーションプログラムでは必須のしくみですが、それらはVSAMやデータベース製品を利用するのが一般的になっています。

現在のMVSでは基本的なデータセット編成としては順次データセットと区分データセットの2種類と考えていいでしょう。z/OSにおいてはこの2種類をベースに、ストライピングなどをサポートした拡張順次データセット、自動的に拡張されるディレクトリーや圧縮不要なしくみを持つ拡張区分データセット(PDSE)、のように従来のデータセットにはなかった追加機能をサポートしたり、欠点を克服したり、の拡張がなされています。

データセットを構成するレコードにはいくつかの種類がありますが、大きく固定長レコードと可変長レコードに分かれます。レコードは通常複数でまとめられてブロックとなり、ディスクやテープにはブロック単位で書き込まれます。MVS(MSP、VOS3)ではWindowsやUnixと異なり、ファイル(データセット)は必ずレコードによって構造化される、という特徴を持っています。バイト列が並んでいるだけのストリームではなく、例えばとりあえず2バイトだけ読む、その内容によって次に読むべき長さを変える、改行文字(CRLF)を見つけたらその行は終わり、といったアクセスの仕方ではありません。一般のアプリケーションプログラムではレコードを単位にして読み書きするのが基本です。そのためデータセットのしくみ(ファイルシステム)を理解するには、どのような形式のレコードがあり、どのように長さを表現するか、といった知識も必要になります。またそれらはプログラミングだけでなく、データセットを作成する場合にも必要になるので、プログラマーに限らずMVSシステムに携わる人は職種に限らず覚えておきたいことです。
データセットを構成するレコードの構造、OSが提供する順次データセットのアクセスサービスなどに関しては「z/OSのしくみ:データセットの種類とアクセス法:レコードとブロック、レコード形式および順次データセットとQSAM・BSAM」で解説しています。

Filed in キーワードから(何が知りたいですか)

IEBPTPCH

By kamii - Last updated: 金曜日, 9月 17, 2010

IEBPTPCH:データセットやメンバーのプリント・ユーティリティー

IEBPTPCHは(z/OS)における、順次データセットまたは区分データセットのメンバー内容のプリントを行うユーティリティー・プログラムの名前です。MSPではJSDPTPCH、VOS3ではJSDPRNTとして提供されています。プログラム名は異なるものの、JCLもSYSIN制御ステートメントも含め、基本的に互換ユーティリティーです。

IEBPTPCHはGENERやCOPY同様に初期のMVSから提供されている基本的(古典的)なユーティリティーの1つです。順次データセットや区分データセットのメンバー内容をそのまま印刷するだけでなく、見出し行を付けたり、パック10進数を見やすく変換したり、といった簡単な編集機能も持っています。
基本的な利用法については、こちらにサンプルJCLを掲載してあります。「データセット(メンバー)を編集して印刷する(IEBPTPCH) 」

初期のMVSではデータセットやメンバーの内容は実際のプリンター装置から紙に印刷リストとして打ち出すことが普通でした。JCL上に定義したSYSOUTは実際に紙に打ち出されていました。今のように気軽にISPFやSDSFなどを使うようなシステムではなかったのです。しかし現在ではISPFなどを使いディスプレイ端末上で内容を確認することが多く、データセットやメンバーの内容を紙に打ち出すようなことは少なくなりました。プリントする場合でもJCLやソースプログラムなどの場合、バッチ・ユーティリティーではなく、ISPFのPRINT機能を使うこともできます。またプリント・データもSYSOUTへの書き出しではなく、VTAMやTCPで接続されたPCプリンターなどに直接送ることのできるソフトウェアを導入しているユーザーもいます。例えばIBMのKDSP(漢字端末印刷プログラム)などです。
またバッチ・ユーティリティーであっても、編集せずにそのまま用紙に打ち出すだけならGENERユーティリティーを利用することもできます。この場合はデータセットをSYSOUTへコピーする、ということになります。その他AMSユーティリティーのPRINTやREPROコマンドでもプリントすることができます。

Filed in キーワードから(何が知りたいですか)

IEBCOPY

By kamii - Last updated: 木曜日, 9月 16, 2010

IEBCOPY:区分データセットのコピー・ユーティリティー

IEBCOPYは(z/OS)における、区分データセットのコピーを行うユーティリティー・プログラムの名前です。MSPではJSECOPY、VOS3ではJSDPCPYとして提供されています。プログラム名は異なるものの、JCLもSYSIN制御ステートメントも含め、基本的に互換ユーティリティーです。

IEBCOPYはIEBGENER同様にMVS(z/OS)と言うオペレーティング・システムに携わることになった人が、最初に使うであろう基本中の基本とも言えるものです。GENERが順次データセット用、COPYが区分データセット用のユーティリティーです。IEBCOPYの主な機能は2つの区分データセット間でのメンバーのコピーですが、他にも複数の区分データセットのメンバーをマージして1つのデータセットにコピーしたり、コピーする際にメンバー名を変更したり、区分データセットを順次データセットに変換(アンロードという)して磁気テープなどへのバックアップを行ったり、区分データセットの管理やメンテナンスに必要なさまざまな機能を持っています。z/OSにおいてはPDSEデータセットもIEBCOPYで処理できます。PDSとPDSE間の相互コピーも可能です。
基本的な利用法については、こちらにサンプルJCLを掲載してあります。「区分データセットのコピー(IEBCOPY)」


Filed in キーワードから(何が知りたいですか)

PDSデータセットとは?

By kamii - Last updated: 水曜日, 9月 15, 2010

PDSデータセット(区分データセット)とは?

区分編成データセットはMVSにおけるライブラリーファイルのことです。PDS(Partitioned DataSet)あるいはPO(Partitioned Organization)データセット(ファイル)などと呼ばれます。
JCLやプログラム・モジュール、パラメーターなど、プロジェクトなどにおいて使用されるさまざまなデータや、プログラムを構成する複数のモジュールなどは、それぞれが独立したファイルとして作成されますが、1つ1つを独立した順次データセットとして作るのでは、ファイルの数は膨大になり、それらの管理も非常に煩雑になります。
そこで同じグループに属する1つ1つの異なる内容のファイルを、1つの器に格納してまとめ上げることができるように区分データセットというライブラリーファイルが用意されています。区分データセットでは「器」がデータセットそのもので、器の中に格納される1つ1つのファイルがメンバーとなります。さらに器の中のどの場所にどのメンバーがいるかを記したディレクトリと呼ばれるINDEX情報を持っています。

ライブラリーということで、区分データセットは主にプログラム・モジュール(ソースコード、オブジェクトモジュール、ロードモジュールなど)、JCLやプロシージャー、CLIST、パラメーター・データなどを格納するために使われます。例えばOS自身のロードモジュールを格納しているSYS1.LINKLIB、SYS1.LPALIB、OSを起動するためのさまざまなパラメーターを格納しているSYS1.PARMLIBなどがあります。アプリケーションにおいても、業務データの格納にはデータベースやVSAMあるいは順次データセットなどが使われますが、アプリケーションのプログラムそのものや、アプリケーションを実行するためのJCLなどは大半が区分データセットに格納されます。ライブラリーといってもすべてのプログラムを1つの区分データセットでまかなうことはなく、最低でもOSとユーザープログラムは別のデータセットで運用されます。メーカーやISVから提供される各種のミドルウェア類もそれぞれ独立した区分データセットで管理されます。アプリケーションであっても業務プログラムの種類やバージョンなどでそれぞれ専用の区分データセットを使って管理するのが一般的です。

なおロードモジュールは区分データセットにしか格納できません。区分データセットのディレクトリエントリー(INDEXエントリー)にはメンバーそのものの内容に加え、ユーザー独自の追加データを持つことができます。ロードモジュールの場合はモジュール・データをローディングするために必要なメモリーの大きさや、モジュール種類(RENT属性か否か、APF許可コードなど)など、OSがメモリーにモジュールを読み込んで管理するための制御情報が書き込まれているためです。ロードモジュール以外でも、例えばISPFエディターではソースやJCLメンバーの最終更新日や更新者のIDなどを追加情報としてディレクトリエントリーに書き込みます。ただしロードモジュールと異なり、ISPFエディターでは追加の情報があってもなくてもかまわないオプションデータです。

区分データセットも順次データセット同様にOS/360当時から使われている基本的な(古典的な)データセット編成の1つです。ディスク上の物理的な構造がそのままプログラム上にも展開され使われます。数十年の長きに渡り現在でも主力データセットとして使われていますが、最初に格納する最大メンバー数を見積もっておく必要があり、それを超えるとデータセット自体に空き容量があっても新しいメンバーが追加できないことや、メンバーの書き換えや追加を繰り返すたびにデータセット内の空きスペースが断片化し、やがてはメンバー書き換えや追加ができなくなること、またそのような状態を解消し(フラグメンテーションの解消)再びメンバー書き換えや追加を行えるようにするために「圧縮」という操作が必要になること、などが運用上のウィークポイントとしてありました。
圧縮操作はデータセット内のすべてのメンバーの格納位置をずらす場合もあり、もし失敗すればデータセット内のすべてのメンバーをパァにしてしまうこともあり得るため、圧縮処理中は他のジョブから書き込みはもちろん、読み込みであってもできないように排他制御を掛けることが普通です。したがって業務用の区分データセットを常駐プログラムなどでアロケーションしていると、それらのソフトウェアを一旦止めることになったり、業務を止められないため夜間にバッチで定期的に圧縮したり、が行われていました。

そういった区分データセットの弱点をなくし運用を止めなくてもいいようにするためさまざまなライブラリー管理システムがソフトウェア製品として提供されました。例えばMVS用では「LIBRARIAN」「PANVALET」という製品が日本でも有名です。元々は別会社の別製品でしたがどちらもCA社に買収されて現在ではCA-XXXXXXXXとして提供されています。LIBRARIANやPANVALETは、圧縮の要らない区分データセットのように使うこともできますが、書き換えたメンバーの修正箇所の履歴を残すこともできます。そのため日本でも多くのユーザーがソースプログラムやJCLの格納ライブラリーとして利用していました。LIBRARIANは一時MSPにも移植されていたようですがMSPにはGEMという富士通自身が提供するライブラリー管理製品があります。VOS3には日立自身が提供するLIMEという製品があります。
以前はこれらのライブラリー管理製品が多くのユーザーで使われ、さまざまなISVソフトウェアでも拡販のためLIBRARIANやPANVALETとインタフェースを持つようなことも多く、またライブラリー管理製品側でもプログラムからは区分データセットとしてアクセス可能にするサブシステム・インタフェースなどが追加されたりしていました。

しかしその後MVS(MVS/ESA)ではDFSMSによって従来の区分データセットの欠点を解消した新しい区分データセットとしてPDSE(拡張区分データセット)が使えるようになりました。PDSEはVSAMのようにデータセットの物理的構造とプログラムから見た論理的構造が分かれています。物理的には4KBの固定長順次データセットの構造ですが、プログラムには従来通りのディレクトリ+メンバーの構造を見せており、RECFMやLRECLも論理的な値です(VTOC上はアプリケーションから見たRECFMとLRECL、BLKSIZEとなるがディスク・トラック上は4KB固定長のデータブロックで書かれている)。PDSEは実体はPSデータセットですが、プログラムからは区分データセットに見える「仮想区分データセット」でもあります。PDSEでは、ディレクトリ部が自動的に拡張される、圧縮が不要(内部で必要に応じ自動的に行われる)、より高速なメンバー探索、複数のジョブでの同時更新(同じライブラリーに違うメンバーを同時に書き込むなど)ができる、などの特長を持っています。さすがにメンバー書き換え時に変更点の履歴を残すような機能はないものの、圧縮不要で複数ジョブによる同時更新もできるので、ISVによるライブラリー管理ソフトに代わりPDSEによる運用に移行したユーザーも多いようです。


区分データセットがどのような構造を持っているかは「z/OSのしくみ:データセットの種類とアクセス法:区分データセットとBPAM」で解説しています。

Filed in キーワードから(何が知りたいですか)

PDSメンバーを移動する

By kamii - Last updated: 火曜日, 9月 14, 2010

PDSメンバーを移動する

区分データセットのメンバーを移動するにはいくつかの方法があります。以下にその方法をいくつか示します。「PDSメンバー 移動」というキーワードだけでどのOSかがわかりませんでしたので、MVS(z/OS)の例で示します。



いろいろな方法がありますが、バッチ処理で自動化するような場合はIEBCOPYで移動したいメンバーをコピーし、コピーの処理が正しく終了した場合のみ元のデータセットからコピー済みメンバーを消す方法がわかりやすいでしょう。この方法はMVSだけでなくMSPでもVOS3でも共通に利用できます。

Filed in キーワードから(何が知りたいですか)

OPコマンドを待ち合わせるECBをECBLISTでWAITする時の注意

By kamii - Last updated: 金曜日, 9月 10, 2010

オペレーター・コマンド待ち合わせのECBをECBLISTに含める場合の注意

MODIFY/STOPコマンドによってオペレーター・コマンドを受け取るには、EXTRACTマクロでCOMエリアのアドレスを求め、そこからポイントされているMODIFY/STOPコマンドECBを求めます。その後QEDITマクロによってコマンド・キューを初期設定してから、MODIFY/STOPコマンドECBでWAITします。コンソールからMODIFY/STOPコマンドが投入されるとECBがPOSTされます。COMエリアからCIBをたどり、入力されたコマンド文字列を得る、という流れになります。
MSPでもVOS3でもこの流れに関しては同じです。しかしMODIFY/STOPコマンドECBによって単独でWAITするのではなく、自分自身のプログラム・イベントのECBと共にマルチイベントでWAITする場合は注意が必要です。MODIFY/STOPコマンドECBを含めたマルチイベントでのWAITを行う場合、MODIFY/STOPコマンドECB領域の記憶保護キーが0になっていることが理由です。


※MSP/VOS3におけるこのような現象は、1990年代前半頃に調査した結果です。データベース製品を担当してた先輩から「昔、お客さんからソフトを立ち上げてるだけで使ってないのに何でこんなにCPUが上がってるの?って聞かれたことがある、そしたらさ...」という話が発端でした。同じようにECBLISTでマルチイベントのWAITしている自分の担当製品では同じMSPでそんなことは起きてないのに何で?ということから自分でもいろいろ調べてみたわけです。その後機会があって2001年にもテストしましたが変わっていませんでした。しかしそれから10年近く経ってますので、もしかしたらOSの動きも変わっているかも知れません。

Filed in API、インターナルの違い, システムプログラマーのための手引きいろいろ

07.2複数の非同期事象をFIFOで処理する(EVENTS)-2

By kamii - Last updated: 木曜日, 9月 9, 2010

EVENTSマクロによって複数のECBをFIFOで処理できることは解説しました。複数のECBにPOSTがなされている状態でも、WAIT=YES指定のEVENTSマクロ発行毎に完了済みのECBが順番に通知されます。しかし同時に多くの非同期事象が完了するような場合は、1つのECB毎にEVENTS SVCを呼び出していてはオーバーヘッドが大きいです。そこで通知済みのECBをまとめてプログラムで認識できれば、より少ないオーバーヘッドで複数のECBを完了順に知ることができます。


完了済みECBのピックアップ処理の例

Filed in 中級編

07.2複数の非同期事象をFIFOで処理する(EVENTS)-1

By kamii - Last updated: 木曜日, 9月 9, 2010

非同期事象(「いつ来るかわからない」「いつ終わるかわからない」と言った事象)の待ち合わせを行うAPIとして基礎編では WAIT マクロを解説しました。1つ、あるいは数個のイベントを待ち合わせる場合はWAITマクロが利用できます。
しかしWAITマクロで複数のイベントを待ち合わせる場合、どのECBに対応したイベントが最初に終了したかはわかりません。ECBLISTにはイベントが完了したことを示すPOSTビットは立ちますが、複数のイベントが完了していても、イベントが完了した(POSTされた)順番はわかりません。そのためオンライン・システムのTPモニターやTCP/IPによるサービスを提供するサーバープログラムなど、接続された端末やクライアントのデータ受信などに対応してECBを用意しデータ受信が完了した順にトランザクション・サービスを提供するようなプログラムなどでは、受信データが到着した順番がわからないので正確なFIFOでの処理ができません。
マルチイベントの待ち合わせ処理では、イベントに優先度がある場合を除けば事象が完了した順に対応した処理を行うのが一般的です。先着順にFIFOで処理をすることで均一のサービスを提供できます。しかしWAITマクロのECBLISTではどのイベントが完了したかはわかりますがその順番はわかりません。たいていはECBLISTの先頭から完了したECBを探したりしますので、複数の端末やクライアントからデータ受信が集中しても、実際の先着順ではなくECBLISTの順番で処理することになったりします。そこで前回POSTビットの立っていたECBの次のECBから探索を行う、などの工夫が考えられます。それでも不公平さ(LISTの先頭にいるほど見つけてもらいやすい)が少しは解消されますがFIFOになるわけではありません。

WAITマクロの代わりにEVENTSマクロを使うと、事象の完了した順番でECBを通知してもらえるので、オンラインやサーバーなどのプログラムでは、トランザクションが到着した順に処理をして、公平なサービスを提供することが容易になります。使用するECBの数が処理に応じて増減するような場合もEVENTSマクロは向いています。
また待ち合わせの対象となるECBが多い場合(数個ではなく数十、数百)、EVENTSマクロの方が少ないオーバーヘッドで処理されます。VOS3のマニュアルではEVENTSマクロを”高速多重ウェイト機能”と解説しています。


EVENTSテーブルの作成(初期設定処理)


ECBの初期化(ECBの登録)


完了事象の待ち合わせ


EVENTSテーブルの削除


EVENTSマクロではWAITマクロよりやらねばならない手続きが増えます。しかしEVENTSテーブルの作成と削除はタスクの開始時と終了時に行えばいいので、実際にプログラム内で都度都度必要なのはECBの初期化です。WAITマクロでもECB内のWAIT/POSTビットのクリアーはプログラム自身で行うことになりますから、その代わりにECB指定のEVENTSマクロを発行する、と考えればいいでしょう。WAITに比べると一見面倒そうですが、一回書いてしまえばどうということはありません。
POSTする側の処理は、待っている側がWAITを使おうがEVENTSを使おうが違いを意識する必要はありません。

Filed in 中級編

FIBGET

By kamii - Last updated: 水曜日, 9月 8, 2010

FIBGET:AIFからサブミットしたジョブのSOUTファイルを取り出すコマンド(XSP専用)


富士通のXSPシステムにおいても、MSP同様にジョブの出力をシステムが管理する特殊なデータセットとして書き出すことができます。しかしOSが違うためその方法は異なります。MSPではJESと呼ばれるスプーリングサブシステムが、スプールと呼ばれるDASD上の特殊なデータセット内にSYSOUTと呼ばれる仮想データセットとして書き出して管理します。
XSPにはJESに相当するものはなく、XSP自身のジョブ管理機能がジョブのスケジューリングやジョブ入力と出力を管理します。MSPのSYSOUTデータセットに相当するのがSOUTファイルで、XSPでもJCLによってSOUTへの書き出しを指定します。SOUTもクラス(AからTの1文字)や出力部数、フォーム(用紙コード)、文字セット、オーバーレイなどMSPと似たような属性を持っています。

\ JOB BACKUP1,LIST=(A,JS)
\ EX  LIBE
\ FD  LIST=DA,SOUT=A  ← ファイル名LISTをSOUTへ出力する指定
\ FD  SYSUT1=DA,FILE=UAP1.MASTER
\ FD  SYSUT2=DA,FILE=UAP1.MASTER.UNLOAD,
      CYL=(1,1),VOL=000002,DISP=CAT
\ FD  COIN=*
/ BACKUP +,IN=SYSUT1,OUT=SYSUT2
/ FIN
\ JEND

XSPにはMSPのJESのようなスプールデータセットはなく、SOUTファイルの出力先はJCLによってディスクやテープなどのデバイスが指定されます。デバイス種別に加えボリュームを特定することもできます。指定しなければOSが適切なボリュームを割り振ります。MSPではSYSOUTデータセットにはJESが識別するための名前(DSN)が付けられますが、XSPでもOSがSYSOUTにファイル名を付け直接DASDボリュームなどに書き出します。

XSPにはジョブスタックファイルというものがあるが、そこで管理されるのは解釈されたJCLとジョブスケジューリングのためのジョブ入出力待ち行列で、SOUTファイルそのものの内容は含まれない。

書き出されたSOUTファイルはクラスに対応したプリンターやテープなどに出力されますが、印刷が不要なものはディスプレイ端末で内容を確認して消去することもできます。これを行うのがAIFのFIBGETコマンドです。AIFはMSPのTSSと同じものです。PFDなどのエディターからSUBMITしたジョブ(FIBジョブ:Foreground Initiated Backgroundジョブ)の実行結果はわざわざ印刷せずにディスプレイ端末でその内容を確認できれば十分なことが多いです。MSPではPFDのOUTLISTユーティリティー(オプション3.8)を利用すればスプール内のSYSOUTデータセットの内容を直接参照できますが、XSPではSOUTファイルの内容を直接PFDブラウザーなどで参照できません。そこでAIFのコマンドプロンプトから「FIBGET」というコマンドを使って、SOUTファイルの内容を一旦順次編成ファイルへ移してから、その順次編成ファイルをPFDのブラウザーなどで参照します。


FIBGETコマンド

FIBGET jobname [CLASS(class)] DATASET(filename)

例:
AIFログオン・ユーザーID=USER01、ジョブ名=MYJOB01、である時、
FIBGET MYJOB01 DATASET(JOBOUT)
とすれば、
ジョブMYJOB01のSOUT内容が、USER01.JOBOUT.LIST というファイルに書き出される。

ピックアップしたいジョブ名、出力先ファイル名を指定します。クラスを省略した場合は、AからTの順番で探され見つかったジョブのSYSOUTが選択されます。出力先の順次編成ファイルはRECFM=VB、LRECL=136の属性を持ちます。FIBGET実行後、書き出されたSYSOUTは消去されますのでSYSOUTから順次編成ファイルへの移動コマンド、と考えていいでしょう。
ファイル名を完全修飾名で指定する場合は、ファイル名をクォーテーション記号’で囲みます。例えばDATASET(‘MY.SOUT’)のようにです。コマンドの詳細は「AIFコマンド文法書」に記載されています。

出力先順次編成ファイルの形式は、AIFそのもののオプションパラメーターでVBかVBAかを選択することもできる。

次のようなコマンドプロシージャを作成して実行すれば、ジョブ名を指定するだけでSYSOUTの内容をPFDブラウザーで表示できます。

          PROC 1 JOBNAME
          CONTROL MSG
          FIBGET &JOBNAME DATASET('MY.SYSOUT')
LOOP:     READ
          IF &LENGTH(&SYSDVAL) NE 0 THEN GOTO CALLPDF
          GOTO LOOP
CALLPDF:  PFDEXEC BROWSE DATASET('MY.SYSOUT')

FIBGETコマンドの要求によって、AIFWTRというシステムプログラムがSYSOUTを順次編成ファイルに書き出します。AIFWTRはあらかじめSTARTコマンドによって起動されている必要がありますが、多くのセンターではIPL後にAIFと共に起動されているようです。

Filed in キーワードから(何が知りたいですか)

06.3タスクの生成(ATTACH/DETACHとIDENTIFY)-2

By kamii - Last updated: 火曜日, 9月 7, 2010

ATTACHマクロのEPまたはEPLOCキーワードで指定できるのはロードモジュール・メンバーの名前です。したがってこの点だけで考えるとATTACHできるのはLINKやXCTLのように独立したロードモジュールになっているプログラムになってしまいます。しかしながらタスクを分けるが故にプログラムも分割しなければならないのは不便です。タスク構造とプログラム構造が一対一になっていなければならない決まりはありません。自由度はもっと高いのです。
では静的リンクされた単純構造プログラム(06.1プログラムのローディングと実行(LOAD,LINKとXCTL)を参照)内の別CSECTのプログラムをサブタスクとしてATTACHしたい場合はどうすればいいのでしょうか?
そのためには2つの方法があります。

ATTACHしたいプログラムがCSECTで定義されていれば、バインダーのモジュールをリンクする際にCSECT名メンバーの別名として追加することができます。割り当てた別名をEPあるいはEPLOCキーワードで指定すればATTACHすることができます。

もう1つはIDENTIFYマクロを使い、メインプログラム内で動的に入口点を追加する方法です。LOADマクロなどによって既にメモリー内にローディングされたモジュール内(EXEC文のPGMパラメーターで指定されたメインプログラムも含む)であれば任意のアドレスを入口点として追加できます。


入口点の追加(IDENTIFY)


バッチ・ユーティリティーの呼び出しにATTACHを使う

Filed in 中級編