Jaká je struktura ST diskety, jak jsou na ní uložené soubory a data organizovány a jak se v tom všem operační systém vyzná?
Jak jste si mohli přečíst už v článku "Struktura stopy" (Narsil 36), při formátování se povrch disku rozdělí na soustředné stopy (mezikruží) a ty se pak dále dělí na sektory. Když rozlepíte plastové pouzdro diskety, uvidíte uvnitř pružný plastový kotouček pokrytý z obou stran vrstvou magneticky citlivého materiálu podobně jako na magnetofonovém pásku. Disk se v ochranném plastovém pouzdru otáčí okolo své osy. V pozdru diskety je okénko, kryté pohyblivým plíškem. To je čtecí oblast pro snímací a zapisovací zařízení disketové mechaniky (hlavičky). Hlavička, podobně jako magnetofonová hlava v magnetofonu, zaznamenává při průchodu nad povrchem disku změny magnetického pole a převádí je na změny el. napětí. Tento signál je dále zpracováván elektronikou a interpretován jako signál digitální, tj. jako řada čísel. Vaše data jsou tedy na disketě uložena jako změny orientace magnetických domén na povrchu plastového kotoučku. Jak čtecí hlavička pozná, nad kterou je stopou, sektorem atd. (formátování) jste mohli vyčíst z výše zmíněného článku. My se teď podíváme do vyšších pater organizační struktury dat na disku. Máme tedy naformátovanou oboustranou DD disketu. A to na 80 stop (0. na vnějším okraji a 79. u středu). Každá stopa je ještě rozdělena na 9 stejných dílů - sektorů. Celkem tedy máme 2 x 80 x 9 = 1040 sektorů. Na takto naformátované disketě je tedy 1040 oblastí, které čtecí hlavičky mohou kdykoliv najít podle jejich jednoznačné adresy. Bude-li disketa naformátovaná například takto: 2 strany, 82 stop, 10 sektorů na stopu, budeme mít k dispozici 2 x 82 x 10 = 1640 adres. Z tohoto množství je na disketě několik prvních sektorů vyhraženo pro potřeby operačního systému. Zde hledá operační systém některé důležité informace: jaký má disketa formát, jaké soubory obsahuje, jak a kde jsou soubory na disku umístěny, kolik místa ještě zbývá atd.
struktura ST diskety:
sektor 0 ..................boot sektor (boot track)
sektor 1 až 5 ........FAT (1. kopie)
sektor 6 až 10 .....FAT (2. kopie)
sektor 11 až 17 ...hlavní adresář (root directory)
zbytek ......................data
boot sektor
Zapisuje se při formátování nebo kopírování diskety. Obsahuje "BIOS Parameter Block" (BPB) s důležitými informacemi. Zde si mj. OS počítače přečte jestli má v mechanice boot (boot loader), nebo non-boot disk, jak je disketa naformátovaná, kolik bytů má jeden sektor, kolik sektorů obsahuje jeden cluster atd. Bootsektorem se teď podrobněji zabývat nebudeme, snad někdy příště.
FAT (File Allocation Table)
Tabulka, která obsahuje informaci o skutečném fyzickém umístění jednotlivých souborů (které jsou v root directory) na disketě. FAT na ST disketách je 12tibitová (1,5 bytu). Nejvyšší číslo, které pomocí 12ti bitů dokážeme zapsat je 4096 (2 na 12tou). To znamená, že FAT může obsahovat nejvýše 4096 12tibitových adres.
Harddisky používají 16tibitovou FAT. Protože jeden sektor je velký 512 bytů mohli bychom na harddisku s 16tibitovou FAT adresovat jen 32 MB (2 na 16tou = 65 536 x 512), což je málo. To se řeší pomocí clusterů (bloků). Jeden cluster může obsahovat 2, 4, 8 nebo více sousedních sektorů. Neadresujeme tedy sektory ale clustery - to je skupinu několika sousedních sektorů. Čím více sektorů na cluster tím více MB dokážeme adresovat. Pokud ale máme mnoho malých souborů, není pak místo na disku využito hospodárně. Soubor o velikosti 1 kB zabere celý cluster. A jestliže má cluster např. 4 kB budou 3 kB nevyužity.
Na ST disketách se používají dva sectory na cluster. Jeden cluster má tak 2 x 512 = 1024 Bytů. Vystačili bychom klidně i bez clusterů, ale takto se urychlí čtení a zápis disket.
První dostupný cluster pro adresování ve FAT tabulce má číslo 2 (sektory 18 a 19). Je to tedy ve FAT tabulce třetí 12bitové číslo v pořadí. První dva zápisy (0 a 1) ve FAT tabulce jsou použity k jiným účelům. Jak probíhá čtení souboru z diskety? TOS čte postupně všechny clustery které obsahují daný soubor. Adresa prvního clusteru je vždy umístěna za jménem souboru v hlavním adresáři (sektory 11 až 17, viz níže - struktura adresáře). TOS nahraje data z tohoto clusteru diskety do paměti a jde do FATu na odpovídající pozici. Tam je adresa dalšího clusteru. Například: TOS zjistí počáteční adresu v hlavním adresáři, třeba číslo 2 nahraje do paměti obsah clusteru 2 (sectory 18 a 19) a jde do FAT tabulky na pozici 2, zde je napsána adresa dalšího clusteru, třeba 5. TOS nahraje do paměti obsah clusteru 5 a jde do FAT na pozici 5. V FAT tabulce přečte na pozici 5 třeba číslo 68. Nahraje cluster 68 a jde do FATu na pozici 68. Tady je číslo 4095. TOS pozná, že je na konci souboru a čtení z diskety ukončí.
Každý zápis ve FAT ukazuje tedy na následující blok. Lépe to snad pochopíte podle obrázku. Jak TOS vypočítá první sektor clusteru? Přečte číslo, odečte 2 (první cluster má číslo 2), násobí dvěma (sektory na blok) a přičte 18 (první sektor pro data je 18). Některá čísla ve FAT tabulce neukazují na cluster, ale mají jiný význam:
0 - blok je volný
4081 až 4087 - cluster je nepoužitelný kvůli formátovací chybě (vadný sektor)
4088 až 4095 - zde je konec souboru (poslední cluster souboru)
Mámeli prázdnou, právě naformátovanou disketu ukládá na ní TOS soubory do clusterů které následují v řadě za sebou. Když po uložení například deseti souborů však smažeme pátý soubor, jím obsazené clustery se přepíší nulami a tedy uvolní k dalšímu použití. Pokud zabíral soubor třeba tři clustery, je teď v řadě obsazených clusterů volná mezera. Budeme-li nyní ukládat na disk soubor vyžadující sedm clusterů, popíše TOS nejprve tyto tři clustery první částí souboru a zbytek uloží do čtyř vzdálených clusterů na konci řady. Toto rozptýlení k sobě náležejících clusterů se nazývá fragmentace. Čím častěji na disku mažeme a znovu zapisujeme, tím se zvyšuje rozkouskování souborů. Čtecí hlava potom musí jeden soubor doslova vyzobávat z jednotlivých částí disku a prodlužují se tak čtecí časy.
Pokud jste omylem smazali nějaký soubor není ještě vše ztraceno. Když na to přijdete včas a na disketě se od té doby co nejméně zapisovalo a mazalo můžete ho ještě zachránit. A to díky informacím z hlavního adresáře, kde jsou stále ještě údaje o smazaných souborech, jejich počátečních clusterech a celkových délkách. Jestli používáte vždy diskety nové a nebo máte ve zvyku starší diskety plné už nepotřebných souborů, než je opět použijete znovu naformátovat, máte velkou šanci na úspěch. Clustery smazaného souboru totiž jednoduše následují v řadě za sebou a ostatní volné clustery neobsahují žádná data. Zachraňujete-li třeba textový soubor, velice snadno podle obsahu volných clusterů poznáte (ASCII text), že jste na správné stopě. Zachraňujete-li něco jiného, velmi vám pomůže znalost datové struktury hledaného souboru. Když dobře víte, co hledáte, nepotřebujete ani FAT tabulku.
hlavní adresář
Je v sedmi po sobě jdoucích sektorech. Počet souborů, které mohou být zapsány v hlavním adresáři je omezen. Pro subadresáře toto omezení neplatí. Subadresář má stejnou strukturu jako hlavní adresář, ale je v FAT tabulce zapsán jako datový soubor a jeho velikost může být tedy omezena jen velikostí datového prostoru na disketě. Každý zápis do hlavního adresáře je dlouhý 32 bytů, na sektor tak připadne 16 zápisů.
struktura zápisu v hlavním adresáři:
byt 0 až 7 ...........jméno souboru
byt 8 až 10 .........koncovka
byt 11 ...................atributy
byt 12 až 21 .......volný prostor
byt 22 až 23 .......časové značení
byt 24 až 25 .......datum
byt 26 až 27 .......počáteční cluster (integer)
byt 28 až 31 ...délka souboru v bytech (4-byte integer)
Když je první byt nula, je zápis nepoužit. 229 znamená, že soubor byl vymazán a 46 (tečka) znamená speciální typ subadresáře. Jméno i koncovka můžou být do své správné délky doplněny zprava mezerami. Vyhrazené byty jsou obvykle nuly.
Atributy určují další vlastnosti a systémové zařazení souboru:
bit 0 - pouze ke čtení
bit 1 - utajený (hidden) soubor
bit 2 - systémový soubor
bit 3 - jméno diskety (volume label)
bit 4 - subadresář (nemá pevnou délku)
bit 5 - archivní bit (harddisk)
bit 6 - nepoužit
bit 7 - nepoužit
čas:
bit 0 až 4 - sekundy/2 (0-29)
bit 5 až 10 - minuty (0-59)
bit 11 až 15 - hodiny (0-23)
datum:
bit 0 až 4 - dny (1-31)
bit 5 až 8 - měsíce (1-12)
bit 9 až 15 - roky (+ 1980)
Počáteční cluster má formát jako Intel 8088 integer. Byty jsou zaměněny, nejdříve jsou low bity a pak high bity.
Délka souboru má formát jako Intel 8088 long integer. Slova (words) a byty slova jsou zaměněny. Udává počet užitých bytů na disku.
/JS/ z různých zdrojů