VTOC:Volume Table Of Contents(ボリューム目録)

VTOCは、ボリューム内に格納されているデータセットとボリュームの空きスペースを管理する、DASDボリュームの目次ともいえるものです。目次を構成する一つ一つの項目は、140バイトのレコードで出来ており、VTOCそのものは140バイトの固定長レコードを持つ順次データセットと同じ構造になっています。

DSCBの種類

VTOCを構成するレコードは、DSCB(Data Set Control Block)と呼ばれ、用途に応じてFormat-0、Format-1、Format-3、Format-4、Format-5、Format-7、Format-8およびFormat-9の8種類があります。いずれのDSCBレコードも、先頭の44バイトがキー部、残りの96バイトがデータ部となっています。VTOC内の目的レコードを探す際、キー部の値を示すことで、DASDボリュームのハードウェア検索機能によって対応するDSCBレコードに位置付けられます。

DSCBは、Format-n DSCBとして区別されますが、単にDSCBnと呼ばれることもあります。例えばFormat-1 DSCBは、DSCB1というようにです。

    Format-0 DSCB

    140バイトの2進ゼロ(x00)値で上書きされたレコードで、VTOC内の未使用レコードを示します。

    Format-1 DSCB

    データセットを示すレコードで、キー部にはデータセット名が入ります。データ部には、データセットの種類や形式、ブロック長やレコード長、ボリューム上の場所と大きさなどを示すフィールドで構成されています。このFormat-1 DSCBをリストアップしたものが、いわゆるVTOCリストと呼ばれるもので、DASDボリューム内のデータセットの一覧表になります。

    データセットの削除とは、このFormat-1 DSCBを消去してFormat-0 DSCBに変えることです。つまり、目次から消し去るだけで、データ自体は元の場所に残っています。ただし、元の場所は新たな空き領域として再利用されるので、新しいデータセットを作成したり既存のデータセットが拡張されたりすると、そのデータ・レコードによって上書きされることになります。消した直後であればまだデータは残っている、ということです。

    Format-3 DSCB

    データセットの4番目以降のエクステントを管理するDSCBです(最初の3エクステントまではDSCB1で管理される)。DSCB3では13個のエクステントが管理できるため、DSCB1と合わせて合計16個のエクステントが管理できます。1つのデータセットの最大エクステント数が16個であるのは、このことに起因しています。ただし、現在のz/OSでは、PDSE、HFS、PS/E、VSAMなどのデータセットは、DSCB3レコードそのものをチェインして複数持ち、最大で123(VSAMは255)エクステントまで拡張できるようになっています。SMS管理のVSAMでは、エクステント数の制限を外すことも可能となっています。

    Format-4 DSCB

    VTOCの先頭のDSCBレコードで、ボリュームとデバイスの特性を示します。

    Format-5 DSCB

    ボリューム内の空きスペースを管理するレコードです。1つのFormat-5 DSCBで、26個の空きエクステントを管理でき、26空きエクステント毎にFormat-5 DSCBが作られます。最初のFormat-5 DSCBは、Format-4 DSCBの直後(つまり2番目のDSCBレコードとして)に置かれます。インデックス付きVTOCではFormat-5 DSCBは使用されないため、ダミーのFormat-5 DSCBがFormat-4 DSCBの直後に置かれます。

    Format-7 DSCB

    インデックス付きVTOCではない大容量ボリューム(3390-9、27、54型などの4369を超えるシリンダー数を持つボリューム)内の空きスペースを管理するレコードです。1つのFormat-7 DSCBで、16個の空きエクステントを管理でき、16空きエクステント毎にFormat-7 DSCBが作られます。

    Format-8 DSCB

    拡張アドレスボリューム(EAV)で使用されるDSCB1レコード。シリンダー管理スペースに作成されるデータセットでは、Format-1の代わりにFormat-8 DSCBが使われます。

    Format-9 DSCB

    Format-8 DSCBからチェインされる、追加のメタ・データなどを格納するDSCBレコード。Format-3 DSCBもこのFormat-9 DSCBからチェインされます。

VTOCの場所と大きさ

VTOCは、DASDボリュームの任意の位置に置くことができます(※シリンダー0、トラック0を除く)。一般的には、シリンダー0、トラック1に配置されることが多いです。昔のMVSでは、VTOCの位置もDASDパフォーマンスのチューニング手段の1つでした。VTOCは、データセットのオープンに先立って必ずアクセスされるため、VTOCが先頭にあると、ボリュームの後方にあるデータセットにアクセスする際のディスク・アームの移動量が多くなり、その分時間が掛かるというものです。そのため、ボリューム内のデータセットへの位置付けの時間を平準化するため、VTOCをボリュームの真ん中に置く、などということが行われたりしました。

また、頻繁にアクセスされるデータセットをVTOCの近くに配置する、などということも行われたりしました。しかし、現在のディスクには大容量キャッシュが搭載され、CPUによって制御されるストレージ・サブシステム内の論理的な装置となり、ディスクの回転やアクセス・アームの移動などの物理的な特性を考慮する必要性は少なくなりました。

VTOCの大きさは、そのボリュームにどれだけのデータセットを格納するかの数によって決まります。3390ディスクの場合は、VTOC 1トラックあたり50個のDSCBが格納できます。1つのデータセットは最低でも1つ、そのデータセットのエクステント数が増えればそれに応じてさらに1つ、となりますのでこれに基づいて必要な大きさを決めます。

VTOCがボリューム内のどこにあるかは、ボリューム・ラベルに示されています。ボリューム・ラベルの位置は、シリンダー0、トラック0の第3レコードと決まっているので、VTOCがどこにあっても必ずポイントすることができます。オンライン・ボリュームの場合は、MVSのUCBにもVTOCのアドレスが格納されています。

VTOCのアクセス

VTOCへのアクセス用に、MVSはいくつかのサービス(API)を用意しています。これらのサービスは、DADSMマクロとCVAFの2つに大別されます。

    VTOCアクセス用DADSMマクロ
    マクロ名 機能
    OBTAIN 指定したDSCBレコードを読み取る。
    LSPACE 空きスペース情報を戻す。
    CVAFマクロ
    マクロ名 機能
    CVAFDIR 指定したDSCBレコードを読み取る。
    CVAFDSM 空きスペース情報を戻す。
    CVAFSEQ DSCBレコードを順次に読み取る。
    CVAFFILT データセット名(部分修飾名含む)に対応したDSCBのリストを作成する。

VTOCは、固定長非ブロック化レコードの順次データセットと同じ構造なので、順次データセットとしてBSAMでアクセスすることもできます。ただし、特定のDSCBからチェインされている他のDSCB(例えばFormat-3 DSCB)は、必ずしもチェイン元のDSCBの後ろにあるとは限らないので、Format-1とFormat-3などを正確に関連付けるためにはそれなりの工夫が必要です。また、読み込んだDSCBレコードのDASD上のアドレス位置を求めるには、DECBからBSAMの作業域をポイントしてチャネル・プログラム発行用のデータ域(IOB)などを解析する必要もあり面倒です。アクセス自体は簡単ですが、単にFormat-1 DSCBなどから、ボリューム内に格納されたデータセット名などを求める用途にしか向きません。マクロ自体は少し複雑ですが、CVAFSEQとCVAFDIRを組み合わせるのが一般的です。

Print Friendly, PDF & Email