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...|