Complément d'informations sur la FAT 12

Le système de gestion de fichier FAT utilise une table d'allocation de fichiers pour mémoriser la liste des clusters occupés par les fichiers.

Quand un fichier est créé sous la racine, les informations le concernant (nom, extension, date, taille etc..) sont mémorisées dans des espaces de 32 octets de la Root Directory. Parmi ces informations, figure le numéro du premier cluster attribué par le système de gestion de fichiers au fichier. Si le fichier a besoin de plus de clusters, le système d'exploitation les lui alloue. Il stocke le numéro des différents clusters attribués au fichier dans la Table d'Allocation des fichiers (File Allocation Table).

Selon la nature du support (disquette, petit disque dur, grand disque), le numéro de cluster est exprimé sur 12, 16 ou 32 bits.

Chaque cluster dispose d'une 'case' dans la table. Ainsi la case 3 est réservée pour le cluster 3, la case 17 est réservée pour le cluster 17.

Question : que contient la case 3 ? Elle peut contenir plusieurs valeurs :

 
FAT12
FAT16
une valeur indiquant que le cluster 3 est disponible
000
0000
une valeur indiquant que le cluster 3 est défectueux
FF7
FFF7
une valeur indiquant que le fichier qui occupe le cluster 3 se termine dans ce cluster 3
FF8 à FFF
FFF8 à FFFF
une valeur indiquant que le fichier occupant le cluster 3 continue dans un autre cluster. La valeur est alors égale au numéro du cluster qui contient la suite du fichier
003 à FF6
0003 à FFF6

La FAT12 pose un petit problème de déchiffrage, car la taille du mot mémoire est de 16 bits (soit 2 octets, 4 caractères hexadécimaux). Le numéro du cluster s'écrit sur 12 bits (soit 1 octet et demi, 3 caractères hexadécimaux). Si le quatrième caractère était mis systématiquement à 0, de la place serait perdue. Dans un souci d'optimisation, 2 entrées successives se combinent (2 x 12 bits = 24 bits soit 3 octets)

Exemple :

Soit une disquette formatée et contenant un seul fichier. Ce fichier de 2000 octets occupe les clusters 2, 3, 4 et 5.

Adresses Hexa
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000 0000
F0
FF
FF
03
40
00
05
F0
FF
00
00
00
00
00
00
00
Entrées imbriquées
0 et 1
2 et 3
4 et 5
6 et 7
8 et 9
 

Comment déchiffer tout cela, il faudrait avoir

une Idée de Programme.

Il faut trouver les octets de la FAT qui correspondent à l'entrée cherchée. Pour cela, il faut différentier les entrées de numéro pair et les entrées de numéro impair. Appliquer l'algorithme suivant :

SI entrée_paire ALORS

Numéro_Octet1_ALire <-- (N° entrée * 3) /2

Numéro_Octet2_ALire <-- (Numéro_Octet1_ALire + 1)

Inverser les 2 octets //* technologie Intel poids faible chargé en premier *//

Supprimer le caractère hexa décimal de gauche

Traduire en Décimal

SINON

Numéro_Octet1_ALire <-- PartieEntière[(N° entrée *3)/2]

Numéro_Octet2_ALire <-- (Numéro_Octet1_ALire + 1)

Inverser les 2 octets //* technologie Intel poids faible chargé en premier *//

Supprimer le caractère hexa décimal de droite

Traduire en décimal

FINSI

Si nous examinons l'algorithme, nous constatons que la seule difficulté est de 'savoir' si le caractère hexadécimal à retirer est le caractère de gauche ou le caractère de droite. Dans l'introduction, j'ai parlé d'une idée de programme, cela n'est pas par hasard.

Questions :

Comment écrit-on programme en abrégé ?

Réponse : Pg

Comment écrit-on 'phonétiquement' le mot Idée

Réponse : I D

Donc 'Idée de Programme' donne 'ID PG'

Et alors me direz-vous ?

Dans l'algo, nous avons vu que pour les entrées Impaires, il fallait enlever le caractère de Droite

et que pour les entrées Paires, il fallait enlever le caractère de Gauche

En résumé : Idée de Programme ===> I D .. P G ====> Impaire Droite ..... Paire Gauche

Appliquons cela à notre exemple et nous arrivons au tableau ci-dessous :

Remarques : il ne faut pas oublier que les numérotations des octets, des clusters, des secteurs commencent à 0. Pour les clusters, les entrées 0 et 1 sont réservées. Le premier fichier commence donc dans le cluster 2. Pour vérifier le chainage avec un éditeur hexadécimal, il faut