運用エンジニアのためのMVS入門

第7回 データセットとレコード

概要

メインフレームはあなたの企業を始め、多くの企業の基幹システムを支えています。とりわけ金融、製造、公共など、日本の基幹産業で今日も働いています。新しいニュースは少ないものの、まさに業務を確実に処理するための大きな存在です。世の中にはあまり知られていませんが、オープン系をいまだに超えている技術、ノウハウが生きている分野です。黙って国を支えているITといっても過言ではないと思います。
そんなシステムを品質よく、安定して運用するためには、業務運用マニュアルや先輩・上司からの言い伝えだけでなく、確かな知識が必要です。
ここではメインフレームの代表的OSであるMVS(z/OS)の基本的なしくみについて、運用部門に携わる新人エンジニアに必要なものを解説します。

MVSではデータセットを構成する最小の単位をレコードと呼びます。すべてのデータセットはこのレコードによって構造化されると言う特徴を持っています。またレコードはプログラムから見たI/Oの最小単位でもあって、通常はレコード単位にファイルを読み書きします。レコードはさらにフィールドに細分化されますが、これにはMVSは一切関与しません。あくまでもプログラム側の処理によって行われます。 
 
複数のレコードをまとめたものがブロックです。ブロックはデータセットがディスクやテープなどの記憶装置に記録されるときの単位であり、物理レコードとも呼ばれます(ブロック内の各レコードは論理レコードとなります)。ブロックの中にいくつのレコードが格納できるかを示す数値をブロック化因数(Blocking Factor)と言います。複数の論理レコードをブロックにまとめることをブロッキングと呼び、逆にブロックから論理レコードにばらすことをデブロッキングと呼びます。ブロッキングとデブロッキングは通常のアクセスであればMVSによって行われます。

レコードをブロック化する利点は、記憶装置のスペース節約と、データの転送効率の向上です。ディスクでもテープでも装置内に物理レコードを記録する時、レコードとレコードの間にギャップ(GAP)と呼ばれる隙間が置かれます。ギャップはデバイス上での物理レコードの区切りでもあってハードウェアによって自動的に書き込まれます。ギャップも記録媒体上のスペースを占めるため、小さなレコードを数多く書くと無駄なスペースが増え、実際のデータを書き込める量が少なくなってしまいます。したがってデバイスの使用効率を上げるためには物理レコードを可能な限り(デバイスが許す限り)長くする必要があります。またデバイスは物理レコード単位にデータを読み書きしますので、物理レコードが長ければI/O回数を減らすことができます。I/O回数が減ればMVS側の入出力処理のオーバーヘッドも減りますから転送効率は上がります。反面ブロック(物理レコード)が大きくなると、それだけ転送用のメモリー領域は増えることになります。初期のMVSではメモリーは貴重な資源でしたからやたら大きくすればよいわけではなく、処理内容と資源量のバランスを考えちょうどよい頃合いを見つける必要がありました。現在のMVSでは実記憶もGB単位になり、また仮想メモリーもふんだんに使えるので、そのような気を使う必要はなく、どちらかと言えば大きければ大きい方がよいと言う考え方に変っています。

固定長レコード形式(RECFM=F[B][A|M])

すべてのレコードが同じ長さを持つ形式です。[B]はブロック化されたレコードであることを示します。[A|M]はレコードの先頭1バイトが印刷制御文字であることを示し、ANSI形式と機械形式があります。印刷制御文字は改ページや改行時の送り行数を指定するもので、印刷用データであることをJES2ライターに示すために使われます。[A|M]がなくても印刷用データとして使用できますが、きめ細かな改行制御はできません。 固定長レコードはMVSでは最も多く使われる形式です。単純で取り扱いも容易ですし、プログラムも単純にできます。短所はスペース効率が悪い点です。特に印刷データの場合は、すべての行が同じ長さであることは少なく、印刷文字列が短ければ、レコードの後ろは空白で埋められることが多いです。この場合でも空白は文字としてディスクスペースを占めてしまいます。しかしながら非常にわかりやすいので最もよく使われる形式です。

可変長レコード形式(RECFM=V[B][A|M])

レコードの先頭にそのレコードの長さを示すフィールド(RDW:Record Descriptor Word)を持つ形式です。レコードによって実際のデータとしての長さが異なるので可変長と呼ばれます。[B][A|M]に関しては固定長レコード形式と意味は同じです。ブロック化されたレコードではブロックの先頭にはブロック自身の長さを示すフィールド(BDW:Block Descriptor Word)が付加されます。そのため最小レコード長とブロック長はこれらRDWとBDWの長さ4バイトずつを加えた長さである必要があります。スペース効率重視の形式ですが、極端に短いレコードは可変長形式にすると逆にスペース効率が悪くなります。例えデータが1バイトであってもRDWが加わり計5バイトとなってしまうからです。また各レコードの長さはアクセスして見なければわからないので、プログラムはレコード内フィールドを単純にマッピングできず、処理は固定長形式に比べ複雑になります。

不定長レコード形式(RECFM=U)

長さが一定ではないが、可変長レコードのようにレコード上に長さを示すフィールドを持たないレコードです。長さは書き出し時にはプログラムがMVSにパラメーターで渡しますが、読み込み時はデバイスから転送された長さでMVSから通知されます。U形式も読んでみなければ長さはわからないと言う特徴を持ち、ブロック単位でのみアクセスできます。主にロードモジュール・ライブラリーに使用され、一般のユーザープログラムで使われることはほとんどありません。

データセットはレコードによって構造化される。レコードの形式には固定長、可変長、不定長の3つの基本形式がある。と言う点を理解しておきましょう。 

次回はデータセット編成(データセットの種類)についてお話しします。

 

連載一覧

コメント

筆者紹介

株式会社アルテシード

代表取締役 神居 俊哉(かみい としや)

http://www.arteceed.com
ビーコンITにて約20年にわたり、独SoftwareAG社のTPモニター・ソフトウェア製品などのサポートや同製品の富士通、日立OSへのポーティングのためのシステムプログラム開発などを行ってきた。現在はメインフレーム・コンピュータに関する技術スキルを後進に伝え、基礎知識や実践的な技術を広めることで企業の情報システムを支えるべく、株式会社アルテシードを設立。併せて、メインフレーム・コンピュータ技術情報サイト“「メインフレーム・コンピュータ」で遊ぼう”(http://www.arteceed.net/
を主宰し、z/OSやMSP、VOS3など代表的なメインフレーム・システムのコミュニティ活動を展開開始。基本スキルから高度なプログラミング技術の解説、サンプルの提供、ならびに関連する各種の技術情報の交換なども行っている。

メインフレームでは約20年ぶりの和書、「メインフレーム実践ハンドブック」を3月にリックテレコム社より刊行。

バックナンバー