File Allocation Table: Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
ešte štylistika + linky
Riadok 2:
[[Súborový systém]] FAT je relatívne jednoduchý a je podporovaný všetkými [[operačný systém|operačnými systémami]] pre [[PC]]. Táto vlastnosť ho činí vhodným pre použitie na [[disketa|disketách]], flash diskoch a pamäťových kartách, ako schodnú cestu na prenášanie dát medzi rôznymi [[operačný systém|operačnými systémami]]. <br>
 
[[Súborový systém]] FAT bol vytvorený [[Bill Gates|Billom Gatesom]] a [[Marc McDonald|Marcom McDonaldom]] v roku [[1977]]. V auguste [[1980]] [[Tim Paterson]] začlenil FAT do operačného systému 86-DOS. Prvá verzia FAT bola nazvaná ''FAT 12''. Mala množstvo obmedzení: adresy clusterov[[klaster]]ov boli 12 bitové (to obmedzovalo počet clusterovklasterov na 4096) a počet sektorov disku bol daný ako 16 bitové číslo, čo obmedzovalo veľkosť disku na 32 MiBMB. Fat32FAT jeobmedzuje obmedzenymnožstvo vdát množstvektoré datje smožné ktorymiuložiť môžena pracovapevný udisk. U staršich HDD je to 4GB.
 
== Zoznam použitých skratiek ==
:FAT – File Adress Table
:BS - [[boot sector]]
:CLI - Clear interrupt flag
:OEM - [[Original Equipment Manufacture]]
:DBCS - Double Byte Character Set
:OS - [[operačný systém]] (Operating System)
 
== Štruktúra pevného disku ==
[[Pevný disk]] sa skladá z niekoľkých platní, každá z platní má dva povrchy. Tieto povrchy sú číslované od 0. Na každom povrchu sú stopy (taktiež číslované od 0) a sektory (číslované od 1). Stopa je sústredná [[kružnica]] a sektor kruhový výsek tejto kružnice. Prienikom jednej stopy a jedného sektoru vznikne oblasť, na ktorú sa dá zapísať obvykle 1/2 KB (teda 512 B).
 
Na pevnom disku sa používajú súborové systémy [[FAT16]] nebo [[FAT32]], pre [[disketa|diskety]] sa dá použiť [[FAT12]]. Prienikom jednej stopy a jedného alebo viacerých sektorov vznikne tzv. alokovatelná jednotka alebo tiež klaster (cluster). U FAT16 to sú dva sektory, do jedného klastera môžeme zapísať 2*512 = 1024 B, u FAT32 štyri sektory (dá sa vybrať pri prevode na FAT32), môžeme tu zapísať napr. 4*512 = 2048 B.
Prienikom jednej stopy a jedného alebo viacerých sektorov vznikne tzv. alokovatelná jednotka alebo tiež cluster. U FAT16 to sú dva sektory, do jedného clusteru môžeme zapísať 2*512 = 1024 B, u FAT32 štyri sektory (dá sa vybrať pri prevode na FAT32), môžeme tu zapísať napr. 4*512 = 2048 B.
 
Pokiaľ chceme uložiť nejaký [[súbor]], operačný systém vezme prvý voľný clusterklaster, ak tento kapacitne nestačí, pridá ďalší voľný ktorý nájde, pričom hľadá od začiatku disku.
 
Dôsledkom je:
* dochádza k [[fragmentácia súboru|fragmentácii]] priestoru na disku (ďalší voľný clusterklaster sa nenachádza za použitým pre predchádzajúcu časť súboru)
* ak je súbor kratší ako jeden clusterklaster (stačí jeden bajt), je vždy zabraný celý clusterklaster (2 alebo 4 KB)
 
== Master boot record ==
Tomuto miestu na disku sa BIOS pokúsi odovzdať vektor riadenia po naštartovaní systému, pokiaľ je na správnej partícii. Kód uložený v BOOT[[Master boot record|Master boot recorde]] alebo spustí operačný systém, alebo vypíše hlásenie že OS sa tu nenachádza.
 
=== Štruktúra Master boot sektora ===
Riadok 46:
|-
|00Dh
|SectorySector/Cluster
|
|-
Riadok 90:
|-
|024h
|Kód propre bootstrapdrive
|
|-
Riadok 125:
Súborový systém v MS DOSe a jemu podobných systémoch je organizovaný pomocou FAT. Rozoznávame FAT12 a FAT16 (FAT32) podľa toho, koľko bitov vyhradzuje na (logickú) adresáciu disku. FAT je jednorozmerná tabuľka (pole), ktorá obsahuje údaje o obsadenosti jednotlivých oblastí (cluster=klaster) disku/diskety. Väčšinou existujú dve kópie (ak by sa jedna (prvá) fyzicky porušila). FAT spolu s adresármi určuje fyzické uloženie súborov.
 
Disketa aj disk sú delené na klastre, ktoré sú z hľadiska súborového systému MS DOSu najmenšou adresovateľnou jednotkou (sú to vlastne logické bloky). Priestor na diskete sa súborom prideľuje po klasteroch. Ak napr. klaster pozostáva z 8 sektorov, t.j. má 4KB, a v adresári je 100 súborov po 100B, vznikne 10KB údajov, ale v súborovom systéme zaberajú 100x4KB=400KB miesta, t.j. využívate priestor na 2,5%. Nanešťastie počet klasterov je zhora ohraničený typom FAT: 4096 pre FAT12 (reálne o niečo menej), 65536 pre FAT16 (reálne zase o niečo menej). To je najväčší problém súborového systému typu FAT hlavne pri veľkých diskoch - vynucuje veľké clustreklastre a tým plýtva priestorom.
 
== Štruktúra boot sektoru ==
Riadok 146:
|13
|1
|Počet sektorov v jednom logickom clusteriklasteri. Počer clusterovklasterov vo FAT je obmedzený, preto veľkosť clusterovklasterov závisí na veľkosti disku. Väčší disk znamená viac sektorov na clusterklaster.
|-
|Reserved Sectors
Riadok 205:
Na médiu môže byť jedna alebo dve FAT. V prípade, že na médiu je len jedna FAT, logické číslo prvého sektora druhej FAT je nulové a tak isto je nulový aj bit 6 v identifikačnom bajte média (offset #20). Každá FAT je umiestnená na médiu kvôli efektívnemu prístupu v sektoroch ktoré idú bezprostredne za sebou od prvého sektora ktorého číslo je definované v boot sektore. Tento prístup umožňuje mať FAT umiestnenú kdekoľvek na médiu (hoci aj kvôli efektívnemu seekovaniu v strede média) avšak FAT musí ostať celá pokope, nemôže byť rozptýlená po médiu.
 
FAT sa skladá z položiek, každá položka zodpovedá jednému sektoru média. Položky zaberajú podľa potreby 16 alebo 32 bitov. Podľa toho potom rozlišujeme či sa jedná o systém FAT16 alebo FAT32. Bajty sú v položke usporiadané vždy od najnižšieho po najvyšší. FAT32 sa používa, ak počet sektorov na médiu je väčší než umožňuje adresovať FAT16, čo je 2^14-256 alebo 16128 sektorov, alebo ak veľkosť sektora (clusteraklastera) je väčšia ako 2^14 alebo 16384 bajtov.
 
Posledný sektor súboru obsahuje po vynulovaní najvyššieho bitu položky presný počet bajtov ktoré ešte súbor zaberá v tomto sektore. Ak je tento počet nulový, potom skutočný počet týchto bajtov je rovný veľkosti sektora, t. j. sektor je využitý celý, čiže dĺžka súboru je deliteľná veľkosťou sektora v bajtoch.
Riadok 213:
Voľné sektory pripravené na alokovanie sa od už obsadených alokovaných sektorov jednoznačne líšia najvyšším bitom položky. Voľné sektory ho majú nulový, obsadené položky jednotkový. Preto sa pri alokácii ďalších sektorov na médiu môžu vyberať len sektory ktoré majú tento bit nulový.
 
FAT tabuľka definuje spojový zoznam rozsahu súboru (clusteryklastery). FAT začína na logickom sektore prvého segmentu.
 
Prvý byte FAT sa nazýva Deskriptor media alebo tiež identifikačný byte FAT. Od ďalšieho 5 bytu (12b FAT) alebo 7 bytu (16b FAT) sú samé 0ffH. Zbytok FAT sa skladá z 12 alebo 16 bitových buniek, ktoré reprezentujú jeden clusterklaster disku. Význam hodnôt položiek vo FAT:
 
{| class="wikitable"
Riadok 225:
|000
|0000
|voľný clusterklaster
|-
|002-FEF
|0002-FFEF
|obsadený clusterklaster
|-
|FF0-FF6
|FFF0-FFF6
|rezervovaný clusterklaster
|-
|FF7
|FFF7
|chybný clusterklaster (fyzická chyba diskety)
|-
|FF8-FFF
|FFF8-FFFF
|posledný clusterklaster súboru
|-
|}
 
== Štruktúra dátovej časti ==
Klastery (clusterscluster) dátovej časti sú očíslované. FAT obsahuje pre každý klaster jeden záznam ktorý zaberá 2 alebo 4 bajty (podľa typu FAT). Ak je v klastri súbor alebo adresár, záznam obsahuje odkaz na záznam klastrov na ktorom súbor pokračuje ak nejde o posledý klaster súboru (0xFF). Adresárový alebo súborový kontajner vo FAT je bežný súbor - 32 bajtový záznam FAT adresára. FAT mapuje oblasti dát vo zväzku podľa čísla klastera. Prvý dátový klaster je klaster 2. Prvý sektor klastera 2 je vypočítaný použitím BPB polí pre zväzok.
 
Dátová oblasť sa skládá z položiek:
Riadok 272:
:Atribút S - určuje súbory dôležité pre operačný systém.
:Atribút H - označuje skryté súbory. Aby sme ju mohli vidieť napr. v Prieskumníkovi Windows alebo pri použití DIR v DOS-e, musíme tuto voľbu nastaviť v menu Nástroje-Možnosti.
:Atribút R - znamená, že súbor sa dá iba čítať, ale nedá sa doň zapisovať.
 
== Štruktúra adresára ==
Riadok 290:
Ďalej nasledujú 2 byty nesúce informácie o čase poslednej modifikácie súboru. Ďalšie 2 byty nesú informácie o dátume poslednej modifikácie. Ešte sú tu dva byty, ktoré ukazujú na číslo prvého klastera súboru alebo adresára. Posledná informácia je 4 bytová položka, ktorá udáva dĺžku súboru. Pre adresár je tam 0.
 
=== DlhéDlhý adresárovéadresárový záznamyzáznam ===
Dlhé mena sú obmedzene na 255 znakov bez zakončovacieho NUL. Celková dĺžka potom nesmie prekročiť 260 znakov. Dá použiť akákoľvek kombinácia znakov definovaných pre krátke mená a naviac je pridaná ".", ktorá môže byť použitá opakovane. Medzera je tiež platný znak dlhého mena, rovnako ako u krátkeho mena kde sa tiež často nevyužívala. Nasledujúcich šesť znakov bolo v prípade krátkeho mena zakázané, ale u dlhého mena je možno ich použiť.
 
Riadok 308:
FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors;
 
=== Vytvorenie položky v adresári (kratkykrátky, dlhydlhý nazovnázov) ===
1. alokuj voľný clusterklaster<br />
2. zapíš prvú časť súboru do tohoto klastera<br />
3. ak neexistuje ďalšia časť súboru koniec<br />
4. alokuj voľný clusterklaster<br />
5. zápis ďalšiu časť súboru do tohto clustraklastera<br />
6. goto 3
 
=== Zmazanie položky v adresári (krátky, dlhy názov) ===
1. nájdi začiatočný clusterklaster súboru<br />
2. nastav obsah tohto clusteraklastera na hodnotu 0xE5
 
===Prehľadávanie adresára - hľadanie zadaného súboru===
Riadok 325:
3. ak nie, goto 1
 
===Určenie nasledujúceho clustraklastera v reťazci===
1. načítaj obsah aktuálneho clustraklastera<br />
2. ďalší clusterklaster = obsah aktuálneho clustraklastera
 
===Alokácia voľného klastera===
1. prehľadaj FAT dokiaľ nenájdeš voľný clusterklaster<br />
2. nastav tento clusterklaster ako nasledujúci použiteľný
 
===Čítanie n bajtov zo súboru===
1. nájdi prvý klaster súboru<br />
2. prečítaj obsah klastraklastera<br />
3. i = i + 1<br />
4. ak je n > veľkosť klastera*1 goto 1