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

- penser à convertir le numéro de cluster en numéro de secteurs physiques.
- connaître le contenu du fichier