MVSのファイルシステム

MVSのファイル・システムの最も大きな特徴は、ファイル(データセット)は構造化されたレコードを持つ点です。WindowsやUnix(Linux)のファイル・システムとはあらゆる点で異なります。ファイルそのものの構造について比べると、Windowsなどではファイル自体は可変長の大きさを持ち、ファイルの大きさはデータ量によって増減します。ファイルの中がどのような形式でフォーマットされているかはOSは関与しません。OSから見れば構造化されていない連続したストリーム・データの集合です。MVSで言えば、RECFM=U、BLKSIZE=32760のデータセットが最も近いでしょう。

しかしながら、MVSではRECFM=U形式のデータセットが、アプリケーション・データに使われることはほとんどありません。基本的にデータは、レコードによってまとめられ、レコード単位にファイル(データセット)が構成されます。データの集合がレコード、レコードの集合がブロック、ブロックの集合がデータセットです。ブロックは、ディスクやテープに記録される際の単位でもあることから「物理レコード」とも呼ばれます。

レコードには、こんな感じでデータが並べられます。メインフレーム・コンピューターの原点がパンチカード・システムあったことから、アプリケーション・データは、古くからこのように業務処理で使うデータが1つのレコードに並べられ、それを複数集めて、処理データを構成するファイル(データセット)を作りました。パンチカードの名残では、データセットはRECFM=F、BLKSIZE=LRECL=80の1形式しかありませんが、現在のMVSでは、RECFM=F[B]|V[B]|U、BLKSIZE|LRECL=1~32760の範囲で、さまざまな組み合わせによって構成することができます。

レコード形式(RECFM)、ブロック長(BLKSIZE)およびレコード長(LRECL)は、データセットの物理的な構造を示した属性ですが、レコードの配列の種類を示すデータセット編成(DSORG)と呼ばれるものが別にあります。代表的なものが順次編成(PS)と区分編成(PDSまたはPO)およびVSAMです。他にも直接編成(DA)、索引順次編成(IS)データセットもありますが、現在ではVSAMまたはデータベース・システムに取って代わられ、互換目的以外で使われることはありません。新たに学ぶ必要もないでしょう。

データセットをアクセスするためのサービス(API)はアクセス方式(アクセス方式)と呼ばれ、データセット編成毎に用意されます。MVSが標準で提供するもの以外にも、データベース・システム(DB2、IMS/DB、AIM/DB、ADABASなど)やライブラリー管理システム(CA-LIBRARIAN、CA-PANVALETなど)がメーカーだけでなくISVからもソフウェア製品として提供されています。

しかし、どのような編成のデータセットやデータベース・システムであっても、ディスク上ではいずれかのRECFMとBLKSIZE、LRECLを持つブロックの集合体です。レコード形式やデータセット編成については「データセットの種類とアクセス方式」に解説があります。

MVSのファイル・システムでは、OSもデータセットのレコード形式や長さを意識してアクセスの制御を行います。データのアクセス単位がデータの構造によって変わるためです。アクセス方式によってレコード単位、ブロック単位など何種類かに分かれます。このあたりが他のプラットフォームに慣れた人には複雑に見える点でしょう。元々の発想点が、1枚80文字の紙カードから来ていて、文字単位ではなくカード単位での(何文字読んだ?ではなく何枚読んだ?)処理が原点だからです。

編成(アクセス方式)別に見たデータセットの特徴

    編成(アクセス方式) 抽象度 難易度
    PDSE 高い(抽象的) QSAMまたはBSAMに同じ
    データベース とても高い(抽象的) 幅広い
    VSAM 高い(抽象的) 比較的やさしいが極めれば複雑になる
    QSAM やや高い(抽象的) やさしい
    BSAM 低い(物理的) 少し面倒
    EXCP(CKD) とても低い(物理的) むずかしい

上段ほど新しいアクセス方式です。最も下段にあるEXCPは、チャネルプログラムを直接使う方法ですが、アプリケーションがこれを使うことはまずありません。さらに下段(BIOSコール)もありますがここでは省きます。下段に行くほどデータセットの物理的な構造と、ハードウェア特性がわかっていないとアクセスできません。EXCPの場合は、データセットの物理構造だけでなく、ディスクやテープ装置自体のデータ記録方法も知っている必要があります。

QSAMあたりにくると、論理レコード単位のアクセスができるようになり、物理的な構造からかなり解放されます。COBOLやPL/I言語でのファイルアクセスも、QSAMあるいはVSAMを通じて行われます。VSAMからはデータセットの物理的な構造とプログラムが扱うデータ構造は1対1に対応しなくなってきます。VSAMは、その名の通り仮想記憶を利用した、デバイスの物理構造に依存しないファイル・システムを実現するものです。VSAMをさらに発展させたものがデータベースです。データベースの物理的な器であるMVSデータセットは、VSAMあるいは順次編成データセットがよく使われます。プログラムが扱うレコードは、データベース・システムが提供する機能に基づき仮想記憶内にマッピングされ、物理的な構造にはまったく関わる必要がありません。

PDSEは、MVSが提供する拡張区分編成データセットですが、その物理的な実体は4096バイト固定長レコードの順次データセットです。プログラム上は、従来の区分データセット同様に、RECFM、BLKSIZE、LRECLを持ちますが、あくまでも仮想のもので従来と同じアクセス方式(BPAM,QSAM)でアクセスできる互換性があります。もちろん、プログラムは物理的構造である4KB固定長レコードを意識する必要はまったくありません。

難易度については、アセンブラー言語によるプログラミングが必要かどうか、よりハードウェア寄りの知識が求められるかどうかで付けてみました。同じ構造のデータなら、一般的には高水準なアクセス方式(より抽象的、仮想的)ほどプログラミングもやさしくなります。ただし、高水準なアクセス方式ほど機能も豊富になりますので、それらも含めて使いこなそうとすれば、やさしいプログラミングだけでは済みませんし、データ設計もきちんと行わなければなりません。そう言う意味では難易度の幅は広くなります。