Antivirus
Marco Bisetto
blug@lists.linux.it
Sun, 22 Sep 2002 22:56:36 +0000
>> N.B. doze con la FAT muove le testine dell'HD molto piu` spesso di un
>> filesystem serio, quindi l'HD si rompe prima
>
>mi incuriosisce questa tua osservazione e vorrei andare pił a fondo, mi
La FAT e` stata inventata per il DOS, o forse ancora prima per il
CP/M, allora il sistema operativo riusciva a stare in 64KB di RAM
(qualche volta 32), assieme ai programmi, e fare tutto. Molti computer
non avevano un HD, il filesystem doveva gestire solo i floppy da 5
pollici e 1/2: tra singola e doppia densita`, singola e doppia faccia,
nel migliore dei casi non si superavano i 360KB. E` chiaro che in tale
situazione ottimizzare significava scrivere del codice il piu`
compatto possibile, spartano al massimo.
La FAT sta all'inizio della partizione, piu` una copia di backup a
meta` partizione. Le directory sono dei file praticamente come gli
altri, ma nascosti, e come tutti gli altri file finiscono nel primo
posto libero che capita. Se ci sono dei settori liberi qua e la`, i
file possono frammentarsi. Fa eccezione la directory root, che
comincia appena alla fine della FAT, e ha la caratteristica di essere
fissa in lunghezza (prova a salvare tanti piccoli file in un floppy e
vedrai nascere un grosso problema se non li hai messi in una
subdirectory). La FAT e` come una mappa in cui ogni casellina
rappresenta un grappolo (cluster) di settori sul disco. In ogni
casellina c'e` l'indirizzo al cluster successivo, oppure, se il file
finisce in quel cluster, il contenuto e` un EOF. [Vedi a fondo pagina.]
Quando salvi o devi leggere un file, la testina deve spostarsi tra il
file, la directory e la FAT, e viceversa. Il cammino medio che deve
percorrere ogni volta che apri un file e` notevole. Smartdrive ha
attenuato il problema con una cache, e in effetti senza smartdrive,
che ora non s'installa piu` da CONFIG.SYS, ma e` nascosto nel
bloatware, al giorno d'oggi un computer 'doze sarebbe totalmente
inutilizzabile anche per chi ora si fa convincere dai cartelloni
pubblicitari M$. Comunque la logica rimane invariata: amenoche' tu non
faccia una copia in RAM di tutto il disco, la testina sara` costretta
a spostarsi in almeno tre posizioni tra loro lontane ogni volta che
tocchi un file nuovo.
Con la VFAT, e gente che scrive nomi antologici, le directory si sono
ingrandite e ancora piu` frammentate. Certe volte 'doze sembra
completamente bloccato da quanto l'hard disk continua a sgrattuggiare
avanti indietro.
Oggi un kernel relativamente piccolo occupa circa 8MB (e non sto
parlando di 'doze), puo` permettersi del codice piu` sofisticato per
gestire il filesystem e c'e` gente che ritiene limitante avere
partizioni piu` piccole di un Terabyte (non so che HD abbiano
quelli!). Un filesystem puo` essere cosi` complicato che qualcuno ci
ha costruito intorno una ditta e vive solo di quello [cfr. Hans
Reiser]. I filesystem unix possono basarsi su idee svariate ed essere
molto diversi tra loro. In ogni caso gli oggetti che contengono i
metadati, ovvero informazioni relative ai dati, vengono messi in
posizioni strategiche, il piu` possibile fisicamente vicino ai dati
stessi, in modo da non dover muovere le testine, perche' il loro
spostamento meccanico e` oneroso in termini di tempo, e non solo.
A pensarci e` incredibile che da DOS 1 a win ME l'unica modifica fatta
al filesystem M$ sia stata introdurre delle estensioni che ne hanno
ridotto ulteriormente l'efficienza. Presumo che ci sia dietro comunque
l'ennesima pensata di marketing, perche' NTF$ invece e` un filesystem
moderno, lo hanno scopiazzato dall'HPFS di OS/2. Data l'importanza del
filesystem nel far funzionare un PC (specialmente quando le
applicazioni sono enormi e per salvare un file "Ciao Mamma" in formato
.doc ci vuole l'equivalente di un floppy intero) e` chiaro che si
incentiva il cliente a comprare le nuove versioni tipo 2K XP...
Se vuoi immergerti nello studio di queste cose, puoi partire dal
Filesystems-HOWTO.
m
Ecco un tipico esempio dell'inizio di una FAT 32. Si vede bene che
questo pezzo non e` frammentato, perche' ogni cluster punta al
successivo, oppure e` un EOF. Pero` i dati non si trovano sulla stessa
traccia, nel peggiore dei casi stanno dall'altra parte dell'HD. In
particolare questo e` un pezzetto di partizione che conservo proprio
per l'operazione di riportare allo stato primitivo un computer 'doze
in caso di autoincasinamento.
00004000 f8 ff ff 0f ff ff ff 0f ff ff ff 0f e9 07 00 00 |................|
00004010 ff ff ff 0f ff ff ff 0f 07 00 00 00 08 00 00 00 |................|
00004020 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 |................|
00004030 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 |................|
00004040 11 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 |................|
00004050 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 |................|
00004060 19 00 00 00 1a 00 00 00 1b 00 00 00 1c 00 00 00 |................|
00004070 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 |............ ...|
00004080 21 00 00 00 22 00 00 00 23 00 00 00 24 00 00 00 |!..."...#...$...|
00004090 25 00 00 00 26 00 00 00 27 00 00 00 28 00 00 00 |%...&...'...(...|
000040a0 29 00 00 00 2a 00 00 00 2b 00 00 00 2c 00 00 00 |)...*...+...,...|
000040b0 ff ff ff 0f 2e 00 00 00 2f 00 00 00 30 00 00 00 |......../...0...|
000040c0 31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 |1...2...3...4...|
000040d0 35 00 00 00 36 00 00 00 37 00 00 00 ff ff ff 0f |5...6...7.......|
000040e0 39 00 00 00 3a 00 00 00 3b 00 00 00 3c 00 00 00 |9...:...;...<...|
000040f0 3d 00 00 00 3e 00 00 00 ff ff ff 0f 40 00 00 00 |=...>.......@...|
00004100 41 00 00 00 ff ff ff 0f 43 00 00 00 44 00 00 00 |A.......C...D...|
00004110 45 00 00 00 46 00 00 00 47 00 00 00 48 00 00 00 |E...F...G...H...|
00004120 49 00 00 00 4a 00 00 00 4b 00 00 00 4c 00 00 00 |I...J...K...L...|
00004130 4d 00 00 00 4e 00 00 00 4f 00 00 00 50 00 00 00 |M...N...O...P...|
00004140 51 00 00 00 52 00 00 00 53 00 00 00 54 00 00 00 |Q...R...S...T...|
00004150 ff ff ff 0f 56 00 00 00 57 00 00 00 58 00 00 00 |....V...W...X...|
00004160 59 00 00 00 5a 00 00 00 5b 00 00 00 5c 00 00 00 |Y...Z...[...\...|
00004170 5d 00 00 00 5e 00 00 00 5f 00 00 00 60 00 00 00 |]...^..._...`...|
00004180 61 00 00 00 62 00 00 00 63 00 00 00 64 00 00 00 |a...b...c...d...|
00004190 ff ff ff 0f 66 00 00 00 67 00 00 00 68 00 00 00 |....f...g...h...|
000041a0 69 00 00 00 6a 00 00 00 6b 00 00 00 6c 00 00 00 |i...j...k...l...|