Goldrake_xyz
22-05-2004, 11:16
Cosa è e come funziona la FAT (File Allocation Table)
-----------------------------------------------------------------------------------
Per comodità si analizza la FAT a 12 Bit di un floppy disk da 720k,
ma il ragionamento è perfettamente equivalente per la FAT a 32 bit di un Hard Disk !
Caratteristiche Fisiche di un Floppy Disk da 720K
Tracce da 0 a 79 , Lati da 0 a 1 , Settori da 1 a 9 ( 1 Settore = 512KByte )
se si considera:
================
traccia 0 , faccia 0 , settore 1 = absolute sector 0
traccia 0 , faccia 0 , settore 2 = absolute sector 1
.... .... .... ..... .....
traccia 0 , faccia 0 , settore 9 = absolute sector 8
traccia 0 , faccia 1 , settore 1 = absolute sector 9
traccia 0 , faccia 1 , settore 2 = absolute sector 10
.... .... .... ..... .....
traccia 0 , faccia 1 , settore 9 = absolute sector 17
traccia 1 , faccia 0 , settore 1 = absolute sector 18
.... .... .... ..... .....
e cosi via fino a:
traccia 79 , faccia 1 , settore 9 = absolute sector 1439
Il Sistema Operativo lo usa così :
absolute sector 0 = BOOT SECTOR (serve per caricare il S.O.)
absolute sector 1 - 3 = FAT
absolute sector 4 - 6 = FAT seconda copia (deve essere uguale alla prima)
absolute sector 7 - 13 = ROOT DIRECTORY
absolute sector 14 - 1439 = DATA SECTOR
il S.O. raggruppa i data sector in cluster.
1 cluster = 2 settori , quindi 1 cluster = 1024 byte = 1Kbyte
I cluster sono così numerati:
absolute sector : cluster :
14 ----------------------- 002 ( primo DATA CLUSTER )
15
16 ----------------------- 003
17
18 ----------------------- 004
19
... ... ... ...
1438 ------------------- 714 ( ultimo DATA CLUSTER )
1439
( se settore 10 = cluster 000 allora 9-1439 = 1430 settori da
raggruppare 2 a 2 per 1 cluster = 1430/2 = 715 cluster, ma se il
primo cluster ‚ 000 l'ultimo allora sarà… 714 )
LA FAT:
=======
Nel disco ci sono due copie della FAT , per sicurezza.
Quindi devono essere identiche altrimenti il S.O. segnala un errore.
La FAT serve per comunicare al S.O. la disposizione di un file nell' interno del disco.
Ad esempio, un file può essere sparpagliato nei data sector così :
inizio al cluster 8 , segue al cluster 23 , continua al cluster 21,
e finisce al cluster 2.
( questo metodo ‚è usato per impaccare il maggior numero di dati sul
disco, senza lasciare spazi vuoti. Pensare a scritture e cancellazioni
di file di differenti dimensioni. )
La FAT ‚è appunto una specie di array di interi senza segno a 12-bit (32 bit x FAT32)
e serve per indicare il collegamento di un file nei vari data cluster.
Un esempio può essere :
file PROVA.TXT dim = 4004 byte , Entry point = indice 8
allora il primo cluster dove leggere il file è il cluster 8.
il cluster 8 contiene i primi 1024 byte del file PROVA.TXT.
per leggere i successivi byte, si ricorre alla FAT.
all' indice 8 della FAT (pensare all' indice di un array) c'è‚ un
dato (di 12 bit) che vale , ad esempio 23.
Allora bisogna andare al cluster 23 per leggere i successivi 1024 byte
del file. ma il file non è ancora terminato.
Si và allora ancora all' indice 23 della FAT, che contiene il numero 11.
ciò significa che si prosegue la lettura del file al cluster 11.
fin ora sono stati letti 1024x3 = 3072 byte del file PROVA.TXT
allora bisogna andare ancora alla FAT all' indice 11, dove è contenuto
il numero 34, si legge allora il cluster 34.
Ora, avendo letto 4 cluster, cioè 1024x4=4096 byte , sono stati letti
allora tutti i cluster occupati dal file PROVA.TXT che aveva dimensione
4004 byte. perch‚ 4096 > 4004 (al limite possono essere uguali) .
( 4096 - 4004 = 92 byte che il S.O. è costretto a leggere, ma che
non contengono informazione utile. Ecco perchè è indispensabile
specificare la dimensione del file , perchè‚ si possano separare
le informazioni utili dal totale che il S.O. è costretto a leggere )
Quindi all' indice 34 della FAT c'è un numero che non corrisonde a
nessun cluster, è il numero di Fine File , che indica che il cluster
34 era l'ultimo cluster di un file e che non ci sono più collegamenti.
La situazione può essere riassunta così :
ROOT DIR : PROVA.TXT dim 4004 byte Entry Point 8
FAT : .. ......... .. [23] ... .. [34] ... [11] ..... [EOF] ....
indice : 2,3,4,5, .. .. ,8, .. .. ,11, ... ,23, ...... ,34, ........,40, ...
il File è messo nella sequenza, nei cluster : 8 - 23 - 11 - 34
-------------------------------------------------------------------------------------------------
ESEMPIO CONCRETO:
=================
Se in un disco vuoto ho messo un file LETTERA.TXT di 7280 byte ,
allora esso occupa 8 cluster cioè 1024x8 = 8192 byte , 8192 >= 7280.
8192 è il più piccolo maggiore uguale, di 7820 (per gruppi di 1024)
(non è possibile 7 cluster perchè 7x1024=7168 byte)
Se il file LETTERA.TXT inizia dal primo data cluster del disco, ed
è messo contiguamente, esso allora occuperà
i cluster : 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
e sarà descritto nella ROOT DIRECTORY :
LETTERA.TXT dim 7280 byte Entry Point 2
(la root dir. contiene inoltre data ora e attributi che ho omesso)
la FAT sarà allora : (in esadecimale)
F9 FF FF 03 40 00 05 60 00 07 80 00 09 F0 FF 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 ecc.
per leggere questa FAT bisogna innanzitutto togliere i 3 byte iniziali
che sono Riservati ! Rimane:
03 40 00 05 60 00 07 80 00 09 F0 FF 00 00 00 ecc.
Quindi bisogna invertire ogni nibble del byte , si ha:
30 04 00 50 06 00 70 08 00 90 0F FF 00 00 00 ecc.
essendo una fat a 12 bit , si prendono 3 cifre in 3 cifre ,
ciò in esadecimale corrisponde ad un numero di 12 bit.
allora:
300 400 500 600 700 800 900 FFF 000 000 000 ecc.
tali gruppi vanno letti al contrario , cioè :
__003 004 005 006 007 008 009 FFF 000 000 000 ecc.
| | | | | | | | | | |
i = 2 3 4 5 6 7 8 9 10 11 12 (indice)
Il numero FFF hex indica il valore EOF , End Of File.
In questo caso allora, l'entry point del File LETTERA.TXT
è uguale a 2, e significa leggi il cluster 2.
Poi si và nella FAT , che all' indice 2 contiene il valore 3.
significa, prosegui la lettura al cluster 3.
e cosi via , fino a leggere il cluster 9.
Avendo l'indice 9 della FAT il valore EOF
si può capire che l'ultimo cluster del file ‚ il cluster 9.
Avendo quindi l'entry point nella FAT, e la FAT stessa, posso leggere
un file disseminato nei vari cluster del disco.
Ora si può capire a che servono i programmi di deframmentezione disco,
essi non fanno altro che spostare i vari pezzi del file disseminati frà i vari
cluster e metterli in modo sequenziale, come nel file visto sopra.
-----------------------------------------------------------------------------------------------------------------
Qualche considerazione:
===================
in un disco da 720k,
per la FAT sono riservati 3 settori da 512 byte ciacuno.
allora 512x3=1536 byte nella FAT , cioè 1536x8=12288 bit nella FAT.
raggruppandoli per 12 , si ha : 12288/12=1024 pezzi da 12 bit.
(se ne devono togliere 2 perchè sono la sequenza riservata F9 FF FF)
totale 1022 indici per 715 cluster, cioè in abbondanza.
12 bit = 4096 combinazioni, allora si possono collegare fino a 4096
cluster, ammesso che la FAT sia di dimensione più grande.
Se il cluster è di 1024 byte allora 4096x1024=4194304 byte = 4096 kbyte
= 4 Mbyte.
Per un Hard Disk che ha una capacità ben maggiore di 4 Mbyte
si usa una FAT composta da 16 bit. o 32 bit.
(e quindi si dimensiona opportunamente anche l'area di memoria cosicchè ci
siano tanti indici quante possibili combinazioni abbia il dato a 16 bit o 32bit)
E si devono usare anche cluster più grandi.
(ad es. i cluster sono generalmente di 2048 byte per gli H.D.)
Con FAT a 16 bit e cluster a 2048 byte si può fare un hard disk di massimo
65536x2048 = 128 Mbyte (altri tempi...)
Con FAT a 32 bit e cluster a 2048 byte si può fare un hard disk di massimo
8 Tbyte (TeraByte !)
Ma con il piccolo inconveniente che la FAT occuperebbe 4.294.967.296 pezzi
da 32 bit cioè 16 Gbyte di FAT !
Naturalmente sui sistemi con FAT 32 la dimensione della stessa è molto
più limitata, ecco perchè non si raggiunge neanche 1 TeraByte !
-------------------------------------------------------------------------------------------------------------------------
Qualche nota in più sugli H.D.
======================
A differenza di un floppy disk l' HD è strutturato in maniera leggermente diversa,
cioè si hanno : Traccia, Numero Testina, Settore, cioè il famoso indirizzamento
CHS = Cylinder, Head, Sector (Cylinder stà per traccia)
A questo proposito và detto che qualsiasi H.D. sul primary channel può essere
indirizzato da Bios in modo CHS, anche quelli LBA, questo per ragioni di
compatibilità con i più vecchi calcolatori.
Un'altra differenza è che sulla prima traccia di un HD c'è la Partition Table !
Poi viene il boot sector dell' unità C: , Root Directory di C: data sector di C:
(la P.T. serve principalmente per dividere l'HD in più unità logiche)
è Interessante notare che la Partition Table è costituita da pochi Kbyte
e viene scritta principalmente da 2 famosi programmi :
FDISK e PARTITION MAGIC...
FDISK è molto lento perchè si preoccupa anche di verificare l'intera area
della partizione, mentre Partition Magic si limita solo a modificare la P.T.
Accidenti, con i caratteri proporzionali le righe non sono
allineate .... :cry:
Cordiali Saluti.:)
P.S. sono molto apprezzati suggerimenti e/o correzzioni, Grazie !
x il Moderatore .... se è il caso spostare questo su sezione
più appropriata ... Grazie !
-----------------------------------------------------------------------------------
Per comodità si analizza la FAT a 12 Bit di un floppy disk da 720k,
ma il ragionamento è perfettamente equivalente per la FAT a 32 bit di un Hard Disk !
Caratteristiche Fisiche di un Floppy Disk da 720K
Tracce da 0 a 79 , Lati da 0 a 1 , Settori da 1 a 9 ( 1 Settore = 512KByte )
se si considera:
================
traccia 0 , faccia 0 , settore 1 = absolute sector 0
traccia 0 , faccia 0 , settore 2 = absolute sector 1
.... .... .... ..... .....
traccia 0 , faccia 0 , settore 9 = absolute sector 8
traccia 0 , faccia 1 , settore 1 = absolute sector 9
traccia 0 , faccia 1 , settore 2 = absolute sector 10
.... .... .... ..... .....
traccia 0 , faccia 1 , settore 9 = absolute sector 17
traccia 1 , faccia 0 , settore 1 = absolute sector 18
.... .... .... ..... .....
e cosi via fino a:
traccia 79 , faccia 1 , settore 9 = absolute sector 1439
Il Sistema Operativo lo usa così :
absolute sector 0 = BOOT SECTOR (serve per caricare il S.O.)
absolute sector 1 - 3 = FAT
absolute sector 4 - 6 = FAT seconda copia (deve essere uguale alla prima)
absolute sector 7 - 13 = ROOT DIRECTORY
absolute sector 14 - 1439 = DATA SECTOR
il S.O. raggruppa i data sector in cluster.
1 cluster = 2 settori , quindi 1 cluster = 1024 byte = 1Kbyte
I cluster sono così numerati:
absolute sector : cluster :
14 ----------------------- 002 ( primo DATA CLUSTER )
15
16 ----------------------- 003
17
18 ----------------------- 004
19
... ... ... ...
1438 ------------------- 714 ( ultimo DATA CLUSTER )
1439
( se settore 10 = cluster 000 allora 9-1439 = 1430 settori da
raggruppare 2 a 2 per 1 cluster = 1430/2 = 715 cluster, ma se il
primo cluster ‚ 000 l'ultimo allora sarà… 714 )
LA FAT:
=======
Nel disco ci sono due copie della FAT , per sicurezza.
Quindi devono essere identiche altrimenti il S.O. segnala un errore.
La FAT serve per comunicare al S.O. la disposizione di un file nell' interno del disco.
Ad esempio, un file può essere sparpagliato nei data sector così :
inizio al cluster 8 , segue al cluster 23 , continua al cluster 21,
e finisce al cluster 2.
( questo metodo ‚è usato per impaccare il maggior numero di dati sul
disco, senza lasciare spazi vuoti. Pensare a scritture e cancellazioni
di file di differenti dimensioni. )
La FAT ‚è appunto una specie di array di interi senza segno a 12-bit (32 bit x FAT32)
e serve per indicare il collegamento di un file nei vari data cluster.
Un esempio può essere :
file PROVA.TXT dim = 4004 byte , Entry point = indice 8
allora il primo cluster dove leggere il file è il cluster 8.
il cluster 8 contiene i primi 1024 byte del file PROVA.TXT.
per leggere i successivi byte, si ricorre alla FAT.
all' indice 8 della FAT (pensare all' indice di un array) c'è‚ un
dato (di 12 bit) che vale , ad esempio 23.
Allora bisogna andare al cluster 23 per leggere i successivi 1024 byte
del file. ma il file non è ancora terminato.
Si và allora ancora all' indice 23 della FAT, che contiene il numero 11.
ciò significa che si prosegue la lettura del file al cluster 11.
fin ora sono stati letti 1024x3 = 3072 byte del file PROVA.TXT
allora bisogna andare ancora alla FAT all' indice 11, dove è contenuto
il numero 34, si legge allora il cluster 34.
Ora, avendo letto 4 cluster, cioè 1024x4=4096 byte , sono stati letti
allora tutti i cluster occupati dal file PROVA.TXT che aveva dimensione
4004 byte. perch‚ 4096 > 4004 (al limite possono essere uguali) .
( 4096 - 4004 = 92 byte che il S.O. è costretto a leggere, ma che
non contengono informazione utile. Ecco perchè è indispensabile
specificare la dimensione del file , perchè‚ si possano separare
le informazioni utili dal totale che il S.O. è costretto a leggere )
Quindi all' indice 34 della FAT c'è un numero che non corrisonde a
nessun cluster, è il numero di Fine File , che indica che il cluster
34 era l'ultimo cluster di un file e che non ci sono più collegamenti.
La situazione può essere riassunta così :
ROOT DIR : PROVA.TXT dim 4004 byte Entry Point 8
FAT : .. ......... .. [23] ... .. [34] ... [11] ..... [EOF] ....
indice : 2,3,4,5, .. .. ,8, .. .. ,11, ... ,23, ...... ,34, ........,40, ...
il File è messo nella sequenza, nei cluster : 8 - 23 - 11 - 34
-------------------------------------------------------------------------------------------------
ESEMPIO CONCRETO:
=================
Se in un disco vuoto ho messo un file LETTERA.TXT di 7280 byte ,
allora esso occupa 8 cluster cioè 1024x8 = 8192 byte , 8192 >= 7280.
8192 è il più piccolo maggiore uguale, di 7820 (per gruppi di 1024)
(non è possibile 7 cluster perchè 7x1024=7168 byte)
Se il file LETTERA.TXT inizia dal primo data cluster del disco, ed
è messo contiguamente, esso allora occuperà
i cluster : 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
e sarà descritto nella ROOT DIRECTORY :
LETTERA.TXT dim 7280 byte Entry Point 2
(la root dir. contiene inoltre data ora e attributi che ho omesso)
la FAT sarà allora : (in esadecimale)
F9 FF FF 03 40 00 05 60 00 07 80 00 09 F0 FF 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 ecc.
per leggere questa FAT bisogna innanzitutto togliere i 3 byte iniziali
che sono Riservati ! Rimane:
03 40 00 05 60 00 07 80 00 09 F0 FF 00 00 00 ecc.
Quindi bisogna invertire ogni nibble del byte , si ha:
30 04 00 50 06 00 70 08 00 90 0F FF 00 00 00 ecc.
essendo una fat a 12 bit , si prendono 3 cifre in 3 cifre ,
ciò in esadecimale corrisponde ad un numero di 12 bit.
allora:
300 400 500 600 700 800 900 FFF 000 000 000 ecc.
tali gruppi vanno letti al contrario , cioè :
__003 004 005 006 007 008 009 FFF 000 000 000 ecc.
| | | | | | | | | | |
i = 2 3 4 5 6 7 8 9 10 11 12 (indice)
Il numero FFF hex indica il valore EOF , End Of File.
In questo caso allora, l'entry point del File LETTERA.TXT
è uguale a 2, e significa leggi il cluster 2.
Poi si và nella FAT , che all' indice 2 contiene il valore 3.
significa, prosegui la lettura al cluster 3.
e cosi via , fino a leggere il cluster 9.
Avendo l'indice 9 della FAT il valore EOF
si può capire che l'ultimo cluster del file ‚ il cluster 9.
Avendo quindi l'entry point nella FAT, e la FAT stessa, posso leggere
un file disseminato nei vari cluster del disco.
Ora si può capire a che servono i programmi di deframmentezione disco,
essi non fanno altro che spostare i vari pezzi del file disseminati frà i vari
cluster e metterli in modo sequenziale, come nel file visto sopra.
-----------------------------------------------------------------------------------------------------------------
Qualche considerazione:
===================
in un disco da 720k,
per la FAT sono riservati 3 settori da 512 byte ciacuno.
allora 512x3=1536 byte nella FAT , cioè 1536x8=12288 bit nella FAT.
raggruppandoli per 12 , si ha : 12288/12=1024 pezzi da 12 bit.
(se ne devono togliere 2 perchè sono la sequenza riservata F9 FF FF)
totale 1022 indici per 715 cluster, cioè in abbondanza.
12 bit = 4096 combinazioni, allora si possono collegare fino a 4096
cluster, ammesso che la FAT sia di dimensione più grande.
Se il cluster è di 1024 byte allora 4096x1024=4194304 byte = 4096 kbyte
= 4 Mbyte.
Per un Hard Disk che ha una capacità ben maggiore di 4 Mbyte
si usa una FAT composta da 16 bit. o 32 bit.
(e quindi si dimensiona opportunamente anche l'area di memoria cosicchè ci
siano tanti indici quante possibili combinazioni abbia il dato a 16 bit o 32bit)
E si devono usare anche cluster più grandi.
(ad es. i cluster sono generalmente di 2048 byte per gli H.D.)
Con FAT a 16 bit e cluster a 2048 byte si può fare un hard disk di massimo
65536x2048 = 128 Mbyte (altri tempi...)
Con FAT a 32 bit e cluster a 2048 byte si può fare un hard disk di massimo
8 Tbyte (TeraByte !)
Ma con il piccolo inconveniente che la FAT occuperebbe 4.294.967.296 pezzi
da 32 bit cioè 16 Gbyte di FAT !
Naturalmente sui sistemi con FAT 32 la dimensione della stessa è molto
più limitata, ecco perchè non si raggiunge neanche 1 TeraByte !
-------------------------------------------------------------------------------------------------------------------------
Qualche nota in più sugli H.D.
======================
A differenza di un floppy disk l' HD è strutturato in maniera leggermente diversa,
cioè si hanno : Traccia, Numero Testina, Settore, cioè il famoso indirizzamento
CHS = Cylinder, Head, Sector (Cylinder stà per traccia)
A questo proposito và detto che qualsiasi H.D. sul primary channel può essere
indirizzato da Bios in modo CHS, anche quelli LBA, questo per ragioni di
compatibilità con i più vecchi calcolatori.
Un'altra differenza è che sulla prima traccia di un HD c'è la Partition Table !
Poi viene il boot sector dell' unità C: , Root Directory di C: data sector di C:
(la P.T. serve principalmente per dividere l'HD in più unità logiche)
è Interessante notare che la Partition Table è costituita da pochi Kbyte
e viene scritta principalmente da 2 famosi programmi :
FDISK e PARTITION MAGIC...
FDISK è molto lento perchè si preoccupa anche di verificare l'intera area
della partizione, mentre Partition Magic si limita solo a modificare la P.T.
Accidenti, con i caratteri proporzionali le righe non sono
allineate .... :cry:
Cordiali Saluti.:)
P.S. sono molto apprezzati suggerimenti e/o correzzioni, Grazie !
x il Moderatore .... se è il caso spostare questo su sezione
più appropriata ... Grazie !