Informace na nosiči jsou rozděleny do logických sektorů, které jsou číslované vzestupně od 0. Každý sektor obsahuje několik 8bitových slov - bytů. Zatím jsem se nesetkal s jinou délkou, než 2048. Podle normy však může být i odlišná délka sektoru, přesněji 2n+9 kde n>= 0.
Nosič dat je rozdělen na dvě části :
Systémovou část je tvořena sektory 0 až 15 a norma se jí vůbec nezabývá.
Datová část se začíná sektorem číslo 16. Na jejím začátku jsou umístěny následující informace :
Za těmito popisy jsou zaznamenány obsahy souborů. Každý soubor bude určen deskriptorem v adresáři. Adresář bude uložen podobně jako soubor a bude určen deskriptorem adresáře buď v adresáři nebo deskriptoru nosiče dat. Každý adresář bude také určen záznamem v tabulce cest. A každá tabulka cest bude určena v deskriptoru nosiče dat. Datová část může být navíc rozdělena do tzv. segmentů, které tvoří souvislé oblasti. Segmenty jsou rovněž definovány v deskriptoru nosiče dat.
Obsah souboru je zaznamenán v jedné či více souvislých oblastech - tzv. sekcích. Každá sekce má záznam v adresáři. Správný sled sekcí je určen pořadím korespondujících záznamů v adresáři. Každá sekce může být součástí více souborů a také se může v jednom souboru vyskytovat vícekrát. Některá ze sekcí souboru se může dokonce nacházet na jiném nosiči dat v tzv. sadě nosičů, která je popsána v následujícím odstavci.. Na počátku sekce může být i záznam rozšířeného atributu souboru. Pokud je přítomen záznam rozšířeného atributu, vlastní obsah souboru začíná počínaje novým sektorem. Soubory mohou být také v prokládaném módu, kdy je pro danou sekci určena velikost bloku a velikost mezery mezi jednotlivými bloky.
Sada nosičů dat je složena z jednoho nebo více nosičů, které mají společné označení. Nosiče jsou číslovány vzestupně od 1. Každý nosič v sadě nosičů bude obsahovat také popis souborové struktury předchozích nosičů (nosiče s menším číslem).
Z předešlého textu vyplývá, že norma podporuje hierarchickou strukturu adresářů s následujícími vlastnostmi :
Každý adresář má v tabulce cest svůj záznam. Tento záznam určuje samotný adresář a jeho nadřízený adresář. Záznamy jsou v tabulce cest seřazeny takto :
Za tabulkou cest může být zaznamenána ještě její kopie. Na nosič je možno zaznamenávat postupně. Ve shodě s každou další hierarchií adresáře zaznamenanou na nosiči budou zaznamenány i další tabulky cest, které budou určovat odpovídající hierarchii. Podle toho, jak jsou v tabulce cest reprezentovány číselné hodnoty, norma rozlišuje tabulku cest typu L a tabulku cest typu M. Typ L podporuje Little Endian, typ M Big Endian reprezentaci.
Nyní k výše zmíněné reprezentaci čísel. 16-bit čísla jsou na nosiči dat zaznamenána jako :
Jako typ deskriptoru nosiče dat může být:
Hodnoty položek standardní identifikátor, verze nosiče dat a dále verze struktury souborů (u hlavního deskriptoru) budou identifikovat tuto mezinárodní normu.
Zaváděcí záznam je určen pro možnost zavedení nějakého systému přímo z nosiče dat.
Zaznamenaná sada deskriptorů bude ukončena jedním nebo více koncovými znaky deskriptoru nosiče dat.
Formát záznamu adresáře bude objasněn později.
Má-li 1. byte u identifikátoru vydavatele a u aplikačního identifikátoru hodnotu 5F, pak to znamená, že zbývající bytes určují identifikátor souboru (maximálně 8.3 znaků), který je součástí hlavního adresáře. Jiné pravidlo hovoří, že jsou-li pole identifikátorů vyplněna znakem mezery, pak to znamená, že obsah těchto identifikátorů nebyl vůbec definován.
Obdobně nulová hodnota v položce počátku sekundární tabulky cest znamená, že tato tabulka neexistuje.
Tento deskriptor se podobá hlavnímu deskriptoru až na položky příznaky nosiče a escape sekvence. Příznaky nosiče dat jsou spjaty s escape sekvencemi, což nás nemusí zajímat.
Deskriptor segmentu nosiče dat určuje nějaký segment nosiče dat.
Velikost sekce souboru nezahrnuje případný přidružený záznam rozšířeného atributu. Datum a čas již nejsou reprezentovány ascii hodnotami cifer, jako tomu bylo u deskriptorů nosiče dat.
Jestli-že v položkách velikost bloku (jednotky) souboru a velikost prokládané mezery jsou 0, pak je sekce souboru zaznamenána v neprokládaném módu. Zarovnávací byte bude v tabulce pouze tehdy, je-li délka identifikátoru souboru lichá.
Identifikátor souboru se skládá z názvu souboru, oddělovače 2E, přípony, oddělovače 3B, čísla verze souboru (1 až 32767). Pokud je název souboru prázdný, pak přípona musí obsahovat alespoň jeden znak, a naopak. Název i přípona mohou být dlouhé max. 30 znaků. Identifikátor adresáře nemá žádnou příponu a verzi.
Závěrem bych naznačil, jak by se mohlo postupovat při snaze o získání obsahu nějakého souboru. Při inicializaci by bylo vhodné zkontrolovat, zda-li se jedná o nosič zapsaný podle této normy. Sektor č. 16 by měl obsahovat hlavní deskriptor nosiče dat, a další sektory volitelně zbývající deskriptory nosiče dat. Tyto deskriptory musí mít jasně identifikovány offsetem 1-6, což jsou položky std. identifikátor nosiče dat a verze deskriptoru nosiče dat.
Jak zjistit obsah hlavního adresáře? V hlavním deskriptoru nosiče dat je na offsetu 156 umístěn záznam hlavního adresáře, jehož struktůru tvoří několik důležitých položek - viz tabulka formát záznamu adresáře, který platí jak pro samotný hlavní adresář, tak i pro všechny ostatní soubory a adresáře umístěné na nosiči. Je tedy nutno přihlédnout k možnosti výskytu rozšiřeného atributu před vlastním obsahem souboru, což bude mít za následek zvýšení čisla počátečního sektoru a také možnost uložení v prokládaném módu. Z hlavního destriptoru nemusíme však načíst obsah celého hl. adresáře. Je nutné zjistit, zda-li se mezi hlavním a koncovým desktriptorem nosiče dat nevyskytuje ještě deskriptor(y) určující další segment. Potom předpokládím, že prvních n sektorů takového segmentu je opět tvořeno sadou deskriptorů a zbytek obsahu hl. adresáře lze načíst obdobně jako první část.
Nyní, když jsme již někde v hl. adresáři, tak jak se dostat na obsah souboru, či jiných podardresářů? Obdobným způsobem, že obsah hl. adresáře není nic jiného, než formáty záznamu jednotl. souborů a podadresářů, přičemž soubor může mít za sebou více záznamů popisujících jednotl. sekce souboru.
Nakonec bych ještě podotkl, že strukturu jednotl. adresářů lze pohodlněji získat z tabulky cest, která může být s každým dalším segmentem doplňována. Poč. sektor a délku tabulky cest lze jednoduše získat z hl. deskriptoru nosiče dat.
připomínky: mojmir.rychly.fei@vsb.cz,l90377@vsb.cz
dokument je součást projektu vývoje operačního systému
Tuox, společné semestrální práce do předmětu Operační systémy, zimní semestr
1997.
http://www.cs.vsb.cz/~gry72/tuox/sources2/cd/iso9660.html