System plików ISO9660

Jest to standardowy system plików płyt CD-ROM.

Jego pierwsza wersja powstała w 1986 roku pod nazwą "High Sierra", a następnie została zaadaptowana przez ISO (International Organization for Standardization) jako standard nr 9660 - stąd jego nazwa. Formaty "High Sierra" i ISO 9660 różnią się nieznacznie, przy czym obecnie używany jest jedynie nowszy ISO.

Główne cechy systemu ISO 9660

Poziomy wymiany (Levels of interchange)

Standard ISO definiuje 3 poziomy w jakich mogą być systemy plików, nakładające dodatkowe ograniczenia:

Ograniczenia te (szczególnie poziom 1) pozwalają bezproblemowo używać dysków np. w systemie DOS.

Struktura dysku

Dysk podzielony jest na sektory logiczne, o rozmiarze co najmniej 2048 bajtów i będącym potęgą dwójki (2048 wynika z rozmiaru sektora fizycznego standardowych płyt CD-ROM). Zdefiniowany jest też równoległy podział na bloki logiczne. Rozmiar bloku także musi być potęgą 2 nie mniejszą niż 2Kb, i, dodatkowo, nie może być on większy niż rozmiar sektora logicznego.
Numery sektorów logicznych używane są do adresowania informacji o samym dysku oraz katalogach, zaś bloki logiczne wyznaczają granice plików.
Zarówno sektory jak i bloki logiczne numerowane są od 0.
W praktyce prawie zawsze oba te rozmiary są równe i wynoszą dokładnie 2048 bajtów.

Struktura systemu ISO

Struktury danych

Wszystkie struktury danych systemu ISO rozpoczynają się na granicy logicznego bloku (niektóre - logicznego sektora) i zajmują spójny obszar (pewną liczbę kolejnych bloków), nazywany extentem. Są trzy typy struktur:

Także pliki zapisywane są w spójnych obszarach, jednak możliwe jest dodatkowo ich przeplatanie (Interleaving) i zapisanie w kilku extentach.

Pierwsze 16 sektorów logicznych dysku jest zarezerwowanych dla systemu operacyjnego i ich zawartość nie jest zdefiniowana przez standard ISO.

Deskryptory woluminu

Od 16. logicznego sektora rozpoczyna się spójny obszar tzw. deskryptorów woluminu. Każdy deskryptor zajmuje kolejny sektor logiczny i ma przypisany odpowiedni typ; system, który go nie rozpoznaje, przechodzi do następnego deskryptora. Każdy deskryptor może występować w kilku kopiach (na wypadek uszkodzenia nośnika), całą serię kończy specjalny typ (Volume Descriptor Set Terminator). W standardzie ISO zdefiniowanych jest kilka typów deskryptorów:

Położenie deskryptorów woluminu jest jedynym adresem bezwzględnym zapisanym w standardzie. Wzajemne położenie pozostałych struktur może być dowolne, o ile odpowiednie są wzajemne dowiązania między nimi.

Tablice ścieżek

Tablice ścieżek są ciągami rekordów zmiennej długości, opisującymi całą hierarchię katalogów na woluminie. Każdemu katalogowi odpowiada jeden rekord, zawierający:

Rekordy są posortowane ze względu na poziom zagłębienia, numer kolejny nadkatalogu i nazwę. Ponieważ główny katalog jest jedynym o poziomie zagłębienia 1, zajmuje on zawsze pierwszy wpis w tablicy.

Takie ułożenie pozwala odnaleźć katalog nadrzędny każdego pliku używając tylko jednego przestawienia głowicy (szczególnie powolnego w czytnikach CD) - wystarczy sekwencyjnie przeczytać tablicę ścieżek, która jest stosunkowo niewielka, wyszukując kolejnych fragmentów pełnej ścieżki pliku.

Tablica ścieżek zawsze istnieje w 2 wersjach: LSB i MSB, a każdy z tych typów może dodatkowo mieć kopię. Zapisywanie informacji w obu formatach w jednej tablicy byłoby niepraktyczne, bo zwiększyłoby jej rozmiar i sekwencyjne przeglądanie trwałoby dłużej. Z tego samego względu rekordy w tablicach ścieżek mogą przekraczać granicę bloków (nie są wyrównywane, w przeciwieństwie do formatu w katalogach).
Z kolei istnienie drugiej kopii tablicy, poza zwiększeniem bezpieczeństwa, pozwala zmniejszyć odległość o jaką musi zostać przesunięta głowica podczas wyszukiwania nowego pliku.

Katalogi

Katalogi są także ciągami rekordów zmiennej długości, jednak zawierają także informacje o plikach. Każdy katalog zaczyna się od granicy logicznego sektora, a poszczególne rekordy nie mogą przekraczać granicy bloku (puste miejsce zostaje wypełnione zerami).

Kolejność wpisów w katalogu wyznacza porządek leksykograficzny. Ponieważ nazwą katalogu bieżącego (odpowiednik ".") jest znak o kodzie 0, a katalogu nadrzędnego ("..") kod 1, to są to dwa pierwsze rekordy w każdym katalogu

Każdy rekord zawiera następujące informacje:

Identyfikator pliku jest w formacie: nazwa.rozszerzenie;wersja. Większość implementacji usuwa ten ostatni fragment.

Pliki opisane jednym wpisem katalogu mogą zajmować tylko jeden spójny fragment dysku. Aby plik mógł składać się z kilku extentów, musi pojawić się w katalogu kilkukrotnie (z powodu posortowania będą to sąsiednie rekordy), a także mieć ustawioną odpowiednią flagę (Multi-Extent). Jest to opcja użyteczna przy plikach nagrywanych w kilku sesjach.

Z plikami mogą być związane rekordy rozszerzonych atrybutów - zajmują one wtedy podaną tu liczbę początkowych bloków logicznych pliku (rozszerzonych atrybutów nie mogą mieć katalogi). Używają ich głównie systemy Apple.

Możliwe jest zapisanie plików (ale nie katalogów) w trybie Interleave. Służy on do takiego zapisywania dwóch plików, by czytane naraz (sekwencyjnie) nie powodowały przemieszczania głowicy. Dane tych plików zostają ze sobą przeplecone, np:

Plik 1
Blok 1
Plik 1
Blok 2
Plik 1
Blok 3
Plik 2
Blok 1
Plik 2
Blok 2
Plik 1
Blok 4
Plik 1
Blok 5
Plik 1
Blok 6
Plik 2
Blok 3
Plik 2
Blok 3
 ... 
Zapis taki miał zapewne wspomagać odtwarzanie plików multimedialnych (np. z filmem i dźwiękiem), które muszą być odczytywane jednocześnie. Jednak większość formatów (np. MPEG, AVI) implementuje przeplot w ramach logicznej struktury pliku i nie potrzebuje wsparcia systemu plików.

Obługa wielosesyjności

System plików ISO9660 jest na tyle elastyczny, że dał się dostosować do dysków CD-R nagrywanych w kilku sesjach. Stworzenie nowej sesji polega na dograniu pewnych plików do istniejącego woluminu.

Z punktu widzenia systemu plików, podział na sesje jest przezroczysty. Dysk widziany jest jako spójny, jednolity ciąg bloków o kolejnych numerach, niezależnych od rzeczywistych granic ścieżek i sesji. Przykładowo:

Jedyną cześcią systemu ISO o sztywno zdefiniowanym położeniu są deskryptory woluminu. Położenie pozostałych struktur określone jest jedynie przez wzajemne dowiązania.

Jednak deskryptory zostały już zapisane w sektorze 16 podczas tworzenia pierwszej sesji, i nie da się ich zmienić. Aby rozwiązać ten problem, zmieniono sposób odnajdowania deskryptorów: jako aktualne traktowane są deskryptory zapisane od 16. sektora ostatniej stworzonej sesji (w szczególności jedynej, gdy dysk jest jednosesyjny). Poprzednie struktury nadal są na dysku, ale w niczym nie przeszkadzają.

W każdej nowej sesji zapisywane są:

Z uwagi na wzajemne dowiązania nad- i podkatalogów, trzeba skopiować całą ich hierarchię do nowej sesji (ze zmodyfikowanymi wskaźnikami). W przypadku płyt CD nie jest to duży problem, bo dopisanie nowej sesji wiąże się z dużo większymi stratami.
Z poprzednimi sesjami współdzielone są jedynie niezmienione pliki.

Przykładowa struktura dysku wielosesyjnego