2007年05月21日

ISO9660 その3 ボリュームの要素とファイルへのアクセス

ISO9660 のボリュームは、次の要素で構成されます。

システムエリア(先頭16論理セクタ)
データエリア
 ボリューム記述子群(PVD、SVD、EVD、VDTなど)
 パステーブル
 ディレクトリ(ディレクトリ内の子ディレクトリ情報とファイル情報の列)
 ファイル本体

システムエリアは、ボリューム(トラックのIndex01)の先頭から 0〜15 論理セクタのことで、普通全てゼロです。

残りがデータエリアです。データエリアは論理ブロックで構成され、数えます。

 ファイル本体のデータを読み出すには、16 論理セクタ目にあるボリューム記述子群から始めます。ここにルートディレクトリの情報も書いてあります。そこからディレクトリを階層順に辿ってゆくわけです。

ボリューム記述子群→ルートディレクトリ→子ディレクトリ→ファイル本体

この順序です。
もう少し詳しく書くと、

先頭から16セクタ目より始まるボリューム記述子群
 →ボリューム記述子群内の PVD または SVD または EVD
  →PVD / SVD / EVD 内のルートディレクトリの情報
→ルートディレクトリ
 →ルートディレクトリ内の目的の子ディレクトリの情報
→子ディレクトリ
 →子ディレクトリ内の目的の孫ディレクトリの情報

→ディレクトリ
 →ディレクトリ内の目的のファイルの情報
→ファイル本体

もう一つ、パステーブルを経由する方法があります。パステーブルからは全てのディレクトリの情報が入っています。

ボリューム記述子群→パステーブル→ディレクトリ→ファイル

もう少し詳しく書くと、

先頭から16セクタ目より始まるボリューム記述子群
 →ボリューム記述子群内の PVD または SVD または EVD
  →PVD / SVD / EVD 内のパステーブルの情報
→パステーブル
 →パステーブル内の目的のディレクトリの情報
→ディレクトリ
 →ディレクトリ内の目的のファイルの情報
→ファイル本体

となり、ディレクトリの階層を順次辿ってゆく必要がありません。

なお、ファイルの一覧を取得したり検索するだけならば、ファイル本体までアクセスする必要はありません。各ディレクトリ内のファイル情報を読み取るだけで十分です。


パステーブル、ディレクトリ、ファイル、は、論理ブロックの最初のバイトから始まります。大抵、パステーブルとファイルでは、それが論理ブロックの大きさより大きい場合、そのまま次の論理ブロックに続きます。ディレクトリでは、一つのディレクトリレコードが論理ブロックを跨がないよう、足りない場合は余った部分に 0x00 を入れ、次の論理ブロックからディレクトリレコードを記述しなおします。いずれも、最後の論理ブロックの終わりのほうが余った場合、0x00 で埋めます。


シンプルな CD-ROM では、
ボリューム記述子群
パステーブル
ディレクトリ群
ファイル群
の順で記録されています。ディレクトリはパステーブルのルールに従って並べられており、ディレクトリ内のディレクトリレコードは識別子(名前)コード順に並べられます。多くの場合、ファイル本体もまたこれらのルールに倣って並べられています。
ですがパステーブルとディレクトリとファイルの位置に厳密なルールが存在するわけではありません。ディレクトリとファイルがごっちゃ(フルパス名でのソートや、OS上のファイルを再帰を使って検索したそのままの順序)になっている場合もあります。ファイルを先に記録し、後ろにパステーブルとディレクトリ群を置く人もいます。PVD と SVD が並存したり、UDF Bridge のように他のシステムと共存させている場合にはより複雑です。

posted by 七癖 at 07:23| Comment(0) | TrackBack(0) | ファイルシステム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。