|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 984
|
Come funziona la FAT
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 .... 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 ! Ultima modifica di Goldrake_xyz : 22-05-2004 alle 12:19. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Chiedimelo prima
Qui c'è scritto cosa bisogna fare: http://forum.hwupgrade.it/showthread...hreadid=585879 Comunque dai per stavolta va bene...quando ho tempo me la leggo tutta e la metto fra le faq Per far rispettare l'indentazione includi le tabelle all'interno del tag (code)(/code) con le quadre al posto delle tonde... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 984
|
Ok, ricevuto, e che sono abbastanza nuovo su questo forum
e non sono pratico delle varie procedure. Thank You ! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
utile
può far comodo a chi studia sistemi operativi (quindi anche il FS) |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Aug 2010
Messaggi: 2
|
ma come si trova il primo cluster di un file?
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:34.



















