ファイルシステム-1
MVSのファイルシステムの最も大きな特徴はファイル(データセット)は構造化されたレコードを持つ点です。WindowsやUnixのファイルシステムとはあらゆる点で異なります。ファイルそのものの構造について比べると、Windowsなどではファイル自体は可変長の大きさを持ち、ファイルの大きさはデータ量によって増減します。ファイルの中がどのような形式でフォーマットされているかはOSは関与しません。OSから見れば構造化されていない連続したストリーム・データの集合です。MVSで言えばRECFM=U・BLKSIZE=32760のデータセットが最も近いでしょう。
反面MVSではRECFM=U形式のデータセットはアプリケーション・データに使われることはほとんどありません。基本的にデータはレコードによってまとめられ、レコード単位にファイルが構成されます。データの集合がレコード、レコードの集合がブロック、ブロックの集合がデータセットです。ブロックはディスクやテープに記録される時の単位でもあることから物理レコードとも呼ばれます。
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 <- name -><- address -><- phone ->
レコードにはこんな感じでデータが並べられます。メインフレーム・コンピューターの原点がパンチカード・システムあったことから、アプリケーション・データは古くからこのように業務処理で使うデータが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 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固定長レコードを意識する必要はまったくありません。
難易度についてはアセンブラー言語によるプログラミングが必要かどうか、よりハードウェア寄りの知識がいるかどうかで付けてみました。同じ構造のデータなら一般的には高水準なアクセス法(より抽象的、仮想的)ほどプログラミングもやさしくなります。ただし高水準なアクセス法ほど機能も豊富になりますので、それらも含めて使いこなそうとすればやさしいプログラミングだけでは済みませんし、データ設計もきちんと行わなければなりません。そう言う意味では難易度の幅は広くなります。