MVSのファイル・システムの最も大きな特徴は、ファイル(データセット)は構造化されたレコードを持つ点です。WindowsやUnix(Linux)のファイル・システムとはあらゆる点で異なります。ファイルそのものの構造について比べると、Windowsなどではファイル自体は可変長の大きさを持ち、ファイルの大きさはデータ量によって増減します。ファイルの中がどのような形式でフォーマットされているかはOSは関与しません。OSから見れば構造化されていない連続したストリーム・データの集合です。MVSで言えば、RECFM=U、BLKSIZE=32760のデータセットが最も近いでしょう。
しかしながら、MVSではRECFM=U形式のデータセットが、アプリケーション・データに使われることはほとんどありません。基本的にデータは、レコードによってまとめられ、レコード単位にファイル(データセット)が構成されます。データの集合がレコード、レコードの集合がブロック、ブロックの集合がデータセットです。ブロックは、ディスクやテープに記録される際の単位でもあることから「物理レコード」とも呼ばれます。
1 2 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 <- Name -><- Address -><- Phone -><- Other -> |
レコードには、こんな感じでデータが並べられます。メインフレーム・コンピューターの原点がパンチカード・システムあったことから、アプリケーション・データは、古くからこのように業務処理で使うデータが1つのレコードに並べられ、それを複数集めて、処理データを構成するファイル(データセット)を作りました。パンチカードの名残では、データセットはRECFM=F、BLKSIZE=LRECL=80の1形式しかありませんが、現在のMVSでは、RECFM=F[B]|V[B]|U、BLKSIZE|LRECL=1~32760の範囲で、さまざまな組み合わせによって構成することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 Block-1 <- Record-1 -><- -><- -><- -> <- Record-2 -><- -><- -><- -> <- Record-3 -><- -><- -><- -> <- Record-4 -><- -><- -><- -> <- Record-5 -><- -><- -><- -> <- Record-6 -><- -><- -><- -> <- Record-7 -><- -><- -><- -> <- Record-8 -><- -><- -><- -> <- Record-9 -><- -><- -><- -> <- Record-10 -><- -><- -><- -> Block-2 <- Record-11 -><- -><- -><- -> <- Record-12 -><- -><- -><- -> <- Record-13 -><- -><- -><- -> <- Record-14 -><- -><- -><- -> <- Record-15 -><- -><- -><- -> <- Record-16 -><- -><- -><- -> <- Record-17 -><- -><- -><- -> <- Record-18 -><- -><- -><- -> <- Record-19 -><- -><- -><- -> <- Record-20 -><- -><- -><- -> : : レコードをいくつかまとめたものがブロック。 この例では10レコードをまとめてブロックにしている。 レコード長を72バイトとした場合、BLKSIZE=720、LRECL=72となる。 この場合、ディスクやテープには720バイト単位でデータが記録される。 |
レコード形式(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固定長レコードを意識する必要はまったくありません。
難易度については、アセンブラー言語によるプログラミングが必要かどうか、よりハードウェア寄りの知識が求められるかどうかで付けてみました。同じ構造のデータなら、一般的には高水準なアクセス方式(より抽象的、仮想的)ほどプログラミングもやさしくなります。ただし、高水準なアクセス方式ほど機能も豊富になりますので、それらも含めて使いこなそうとすれば、やさしいプログラミングだけでは済みませんし、データ設計もきちんと行わなければなりません。そう言う意味では難易度の幅は広くなります。