Valid HTML 4.01!

ISO 9660
(lokalne systemy plików)

Spis treści

  1. Historia
  2. Założenia i oczeniwania
  3. Struktura ISO 9660
    1. Deskryptory dysków
    2. Katalogi
    3. Tablica dowiązań do katalogów
  4. Poziomy wymiany danych
  5. Rozszerzenia ISO 9660
    1. Apple ISO 9660
    2. Rock Ridge
    3. Joliet
    4. Updatable ISO 9660
    5. The Frankfurt Group Proposal, ECMA 168
  6. Źródła dokumentów

Historia

W czerwcu 1980 roku pojawił się nowy nośnik informacji na świecie - Digital Audio Compact Disc. Szybko okazało się, że płyty CD nadają się znakomicie (z wielu względów) do zastosowań komputerowych. Przed ukazaniem się standardu, każdy napęd CD-ROM mógł odczytać dowolne płyty CD, ale żaden ówczesny system operacyjny nie wspierał urządzeń CD-ROM ani korzystania z systemów plików znajdujących się na płytach CD. Cała obsługa formatu CD-ROM spadała na programistów aplikacji.

Grupa naukowców wchodząca w skład komitetu High Sierra spotkała się w 1985 roku w Del Webb's High Sierra Hotel and Casino w miejscowości Lake Tahoe (stan Nevada, USA) w celu podjęcia próby stworzenia standardu dla płyt CD. Prace trwały do 28 maja 1986 roku, a stworzony format został przesłany do International Organization for Standardization. W czasie ustalania standardu ISO 9660 firmy uczestniczące w tworzeniu formatu High Sierra zaczeły implementować system obsługi plików High Sierra. W kwietniu 1988 roku ISO ogłosiła dokument ISO 9660 -- Volume and File Structure of CD-ROM for Information Interchange określany w skrócie jako format ISO 9660. ISO wykonała wiele mało znaczących zmian w propozycji komitetu High Sierra (m. in. porządek informacji w strukturach katalogu, identyfikacja dysku jako format High Sierra lub ISO 9660). Z powodu wprowadzonych zmian formaty High Sierra i ISO 9660 są niekompatybilne ze sobą, choć w znacznej mierze identyczne.

W późniejszym okresie czasu powstawały różne rozszerzenia standardu ISO 9660.


Założenia i oczekiwania

W przeciwieństwie do wielu systemów plików przeznaczonych dla dysków twardych, system ISO 9660 jest przeznaczony dla dysków CD. Podczas tworzenia standardu ISO 9660 wzięto pod uwagę ograniczenia techniczne urządzeń CD-ROM. Płyty mogły być jednokrotnie wytłaczane i zawierać maksymalnie 650 MB danych. Urządzenia CD-ROM potrafiły jedynie odczytywać wcześniej przygotowane płyty CD.

Kluczowym celem systemu plików ISO 9660 była jego niezależność zarówno od systemu operacyjnego jak i platformy. Projektańci zdawali sobie sprawę, że jednokrotnie stworzone płyty CD będą przeznaczone do użycia w wielu rozmaitych systemach.

Wiele problemów omineło system plików ISO 9660 - brak możliwości dodawania nowych katalogów i plików bądź też ich usuwania, a co za tym idzie - brak problemów z fragmentacją.


Struktura ISO 9660

Struktura dysku ISO 9660 składa się z trzech głównych kategorii:

Desktyptor dysku jest umieszczany na początku dysku i zawiera informacje o położeniu tablicy dowiązań i katalogu głównego. Dzięki tablicy dowiązań do katalogów szybko może odnaleźć położenie dowolnego katalogu. Rysunek 1 przedstawia powyższe zależności. W standardzie ISO 9660 dysk jest podzielony na 2048-bajtowe fizyczne sektory. Dodatkowo wprowadzono podział na logiczne bloki, które mogą być rozmiaru: 512, 1024 lub 2048 bajtów.

W wielu przypadkach ISO 9660 określa zestaw znaków jaki można używać w nazwach - d-chararcert. Zawiera on duże litery alfabetu angielskiego, cyfry i białą spacje.

W architekturach komputerów występują dwa sposoby kodowania słów i podwójnych słów. Dla kompatybilności między różnymi platformami w strukturach będą pojawiały się podwójne pola, po jednym dla poszczególnego kodowania.

Struktura ISO 9660
Rysunek 1: Struktura ISO 9660

Deskryptory dysków

ISO 9660 definiuje cztery możliwe desktyptory dysku:

Głównie używany jest tylko pierwszy (reszta opcjonalnie). Boot Record może być wykorzystany do inicjacji pewnych czynności przed dostępem do dysku. Supplementary Volume Descriptor jest używany do definiowania innych znaków niż zawarte w ISO 646. Volume Partition Descriptor był stworzony do podziału dysku na mniejsze partycje, ale ISO 9660 nie definiuje w jaki sposób to wykonać, jedynie zaznacza taką możliwość. Standard ISO 9660 wymusza rozpoczęcie Primary Volume Descriptor od 17 sektora na dysku, przy czym nie specyfikuje zawartości pierwszych 16. Każdy deskryptor ma rozmiar jednego sektora.

Primary Volume Descriptor

Standard Identifier (CD001)
Volume Identifier
Volume Set Identifier
System Identifier
Volume Size
Number of Volumes in this Set
Number of this Volume in the Set
Logical Block Size
Size of the Path Table
Location of the Path Table
Root Directory Record
Other Identifiers
Time Stamps

Tabela 1: Primary Volume Descriptor

W Primary Volume Descriptor zapisane są główne informacje o zawartości dysku CD. Zawiera on m. in. pola:

Tablica dowiązań służy do szybkiego wyszukiwania położenia katalogów na płycie CD. System operacyjny może przeczytać zawartość całej tablicy, umieścić ją w pamięci lokalnej (RAM) i odwoływać się do niej, oszczędzając czas.

Struktura PVD (Primary Volume Descriptor):

typedef unsigned char Byte; 
typedef unsigned short Word; 
typedef unsigned long Long; 

struct PVD
{ 
	Byte    VDType;                 /* Must be 1 for primary volume descriptor. */ 
	char    VSStdId[5];             /* Must be "CD001". */ 
	Byte    VSStdVersion;           /* Must be 1. */ 
	Byte    volumeFlags;            /* 0 in primary volume descriptor. */ 
	char    systemIdentifier[32];   /* What system this CD-ROM is meant for. */ 
	char    volumeIdentifier[32];   /* The volume name. */ 
	char    Reserved2[8];           /* Must be 0's. */ 
	Long    lsbVolumeSpaceSize;     /* Volume size, least-significant - byte order. */ 
	Long    msbVolumeSpaceSize;     /* Volume size, most-significant - byte order. */ 
	char    escapeSequences[32];    /* 0's in primary volume descriptor */ 
	Word    lsbVolumeSetSize;       /* Number of volumes in volume set (must be 1). */ 
	Word    msbVolumeSetSize; 
	Word    lsbVolumeSetSequenceNumber; /* Which volume in volume set (not used). */ 
	Word    msbVolumeSetSequenceNumber; 
	Word    lsbLogicalBlockSize;    /* We'll assume 2048 for block size. */ 
	Word    msbLogicalBlockSize; 
	Long    lsbPathTableSize;       /* How many bytes in path table. */ 
	Long    msbPathTableSize; 
	Long    lsbPathTable1;          /* Mandatory occurrence. */ 
	Long    lsbPathTable2;          /* Optional occurrence. */ 
	Long    msbPathTable1;          /* Mandatory occurrence. */ 
	Long    msbPathTable2;          /* Optional occurrence. */ 
	char    rootDirectoryRecord[34];   /* Duplicate root directory entry. */ 
	char    volumeSetIdentifier[128];  /* Various copyright and control fields follow. */ 
	char    publisherIdentifier[128]; 
	char    dataPreparerIdentifier[128]; 
	char    applicationIdentifier[128]; 
	char    copyrightFileIdentifier[37]; 
	char    abstractFileIdentifier[37]; 
	char    bibliographicFileIdentifier[37]; 
	char    volumeCreation[17]; 
	char    volumeModification[17]; 
	char    volumeExpiration[17]; 
	char    volumeEffective[17]; 
	char    FileStructureStandardVersion; 
	char    Reserved4;               /* Must be 0. */ 
	char    ApplicationUse[512]; 
	char    FutureStandardization[653]; 
}; 

Katalogi

Struktura katalogów w systemie plików ISO 9660 jest zorganizowana w sposób hierarchiczny (jak w większości innych systemów). Na samym szczycie znajduje się katalog główny, który jest zdefiniowany w Primary Volume Descriptor. ISO 9660 wyznacza limit na maksymalną głębokość katalogów - osiem (wraz z katalogiem głównym). Także ograniczona jest maksymalna długość ścieżki - 255, która jest wyliczana jako długość nazw wszystkich katalogów, ilości katalogów i długość nazwy pliku.

Katalogi w ISO 9660
Rysunek 2: Powiązania katalogów w ISO 9660

Katalog jest zapisany w systemie ISO 9660 jako plik zawierający zbiór rekordów. Każdy rekord może opisywać plik lub inny katalog. Każdy katalog zawiera dowiązanie do swojego ojca. Katalog główny posiada dowiązanie do samego siebie.

Struktura katalogu:
typedef unsigned char Byte;
typedef unsigned short Word;
typedef unsigned long Long;

struct DirRecord
{ 
	Byte    len_dr;         /* Directory record length. */
	Byte    XARlength;      /* Extended attribute record length. */
	Long    lsbStart;       /* First logical block where file starts. */
	Long    msbStart;
	Long    lsbDataLength;  /* Number of bytes in file. */
	Long    msbDataLength;
	Byte    year;           /* Since 1900. */
	Byte    month;
	Byte    day;
	Byte    hour;
	Byte    minute;
	Byte    second;
	Byte    gmtOffset;      /* 15-minute offset from Universal Time. */
	Byte    fileFlags;      /* Attributes of a file or directory. */
	Byte    interleaveSize; /* Used for interleaved files. */
	Byte    interleaveSkip; /* Used for interleaved files. */
	Word    lsbVolSetSeqNum;  /* Which volume in volume set contains this file. */
	Word    msbVolSetSeqNum;
	Byte    len_fi;         /* Length of file identifier that follows. */
	char    fi[37];         /* File identifier: actual is len_fi. */
	                        /* Contains extra blank byte if len_fi odd. */
	AppleExtension apple;   /* This actually fits immediately after the fi[] */
	                        /* field, or after its padding byte. */
};

Nazwy plików

Każdy plik i katalog ma nazwe przypisaną do niego, która jest jego identyfikatorem - File Identifier.

Nazwa pola: Zawartość:
Nazwa pliku napis (d-characters)
Separator 1 .
Rozszerzenie pliku napis (d-characters)
Separator 2 ;
Wersja pliku Liczba od 1 do 32767

Tabela 2: File Identifier

Suma długości Nazwy pliku i Rozszerzenia pliku nie może przekroczyć 30 znaków. ISO 9660 specyfikuje porządek rekordów w katalogu - muszą być posortowane względem pola File Identifier.

Tablica dowiązań do katalogów

Tablica dowiązań służy do szybkiego wyszukiwania katalogów na dysku CD. Została stworzona do zwiększenia wydajności w odczycie danych z płyt CD. Czas dostępu do urządzeń CD-ROM wahał się w granicach 1/4 sek., dlatego bezpośrednie wyszukiwanie katalogu docelowego (poprzez hierarchie) wydłużało czas dostępu do danych. Utrzymywanie tablicy dowiązań w pamięci lokalnej (RAM) znacznie zwiększa wydajność przy odczycie wielu plików.
Struktura tablicy dowiązań:
typedef unsigned char Byte;
typedef unsigned short Word;
typedef unsigned long Long;
typedef char   dirIDArray[8]; 

struct PathTableRecord
{ 
	Byte    len_di;         /* Length of directory identifier. */ 
	Byte    XARlength;      /* Extended attribute record length. */ 
	Long    dirLocation;    /* First logical block where directory is stored. */ 
	Word    parentDN;       /* Parent directory number. */ 
	dirIDArray  dirID;      /* Directory identifier: actual length is */ 
	                        /* len_di; there is an extra blank */ 
	                        /* byte if len_di is odd. */ 
}; 

Poziomy wymiany danych

ISO 9660 definiuje trzy poziomy wymiany danych (ang. levels of interchange) oraz restrykcje w nich obowiązujące:

Rozszerzenia ISO 9660

Standard ISO 9660 posiada znaczne ograniczenia. Utrudnia to korzystanie z tego formatu w niektórych systemach operacyjnych. Dlatego powstały liczne propozycje i rozszerzenia standardu ISO 9660.

Apple ISO 9660

Systemy operacyjne Macintosh wymagają wiele specjalistycznych danych dla obsługi interfejsu graficznego. Te dane są przechowywane w dwóch miejscach w systemie plików HSF. Część znajduje się w strukturze katalogu, ale większość jest przechowywana w specjalnym miejscu dla każdego pliku zwanym resource fork. Pozostałe dane są nazywane data fork i nie różnią się od zwykłych danych z innego systemu.

Problem podwójnych plików został łatwo rozwiązany. Data fork jest zapisywany jako zwykły plik, a dodatkowe informacje - resource fork - są przechowywane w oddzielnym pliki skojarzonym z danymi.

Brakowało jednak informacji ze struktury katalogu. Dlatego Macintosh wprowadził własne rozszerzenie wykorzystując pole System Use Field (pole które istnieje w definicji ISO 9660, ale nie jest wyspecyfikowane). Nie wyeliminowało to wszystkich problemów, ale zaproponowane rozszerzenie umożliwiło zapis płyt CD wyglądających jak system plików HSF.

Rock Ridge

Rock Ridge jest grupą firm, która od lipca 1990 roku próbowała rozwiązać problem przystosowania standardu ISO 9660 do użytku w systemach Unix. Stworzyli dwie główne propozycje ulepszeń ISO 9660:

Rock Ridge System Use Sharing Protocol (SUSP)

SUSP umożliwia umieszczania wielu rozszerzeń ISO 9660, które wykorzystują pole System Use Field poprzez zdefiniowanie ogólnego formatu dla pola System Use Field. SUSP pozwala na zapisanie tego pola poza rekordem katalogu.

Znaczniki wykorzystywane w formacie SUSP:

Rock Ridge Interchange Protocol (RRIP)

RRIP jest rozszerzeniem umożliwiającym wykorzystanie ISO 9660 w systemach Unix. Systemy plików w Unix'ach posiadają wiele atrybutów plików poza faktem ich istnienia:

Rozszerzenie RRIP wspiera wymienione możliwości systemów Unix.

Dodatkowo nie ma ograniczeń głębokości katalogów do max. 8. Jest to sprytnie rozwiązane poprzez przemieszczenie katalogów z poziomu 9 i niższych do katalogu RR_MOVED. Podczas gdy w strukturach RRIP zapisana jest informacja o rzeczywistym położeniu przeniesionych katalogów.

Joliet

Jest to rozszerzenie firmy Microsoft w celu wykorzystania długich nazw (do 64 znaków) i głębokich struktur katalogów. Znaki mogą być zakodowane w standardzie UNICODE.

Updatable ISO 9660

Postęp technologiczny umożliwił nagrywanie płyt (nie tylko wytłaczanie). Stało się także możliwe wieloczęściowe nagrywanie danych. Dla obsługi wielu sesji potrzebne było rozszerzenie standardu ISO 9660.

W każdej sesji nagrywana jest nowa struktura ISO 9660. Aby nie zamazać wcześniej nagranych danych w strukturze Root dir przechowywane są dowiązania do rekordów, które były zawarte w Root dir poprzednich sesji.

Aby umożliwić korzystanie z multisesji urządzenie CD-ROM musi być przygotowane do rozpoznawania dodatkowych struktur ISO 9660, tak aby można było skorzystać z informacji Primary Volume Descriptor z ostatniej sesji.
Nagranie dodatkowej sesji wymaga informacji o poprzedniej sesji.

Multisesje
Rysunek 3: Multisesje

The Frankfurt Group Proposal, ECMA 168

Propozycja The Frankfurt Group jest znacznie elastyczniejsza od Updatable ISO 9660, ale jest także dość skomplikowana.


Źródła dokumentów


Michał Malinowski
mm189420@zodiac.mimuw.edu.pl
Ostatnia Modyfikacja: Fri Dec 6 01:30:58 CET 2002