Vous êtes sur la page 1sur 25

Cours de systèmes d’exploitation

centralisés

Chapitre 5
Systèmes de gestion des fichiers
FAT 32

ESI_1CS -1-
3.3 Utilisation des disques physiques
• Un disque est un périphérique sur lequel on peut effectuer des
operations de lecture/écriture sans tenir compte du système de
fichiers.
a) Windows
• Nom d’un disque physiques: \\.\PhysicalDriveN
 N : Numéro du disque physique = 0, 1, 2, ….
 Premier disque dur interne : N=0.
 Exemple : Ouvrir le deuxième disque physique en lecture:
 FILE *disk;
 disk = fopen("\\\\.\\PhysicalDrive1", "rb");
• Nom d’une partition : \\.\X:
 X: = C: , D: , E: , …
 X: Lettre[a…z] suivi de : - Désigne une partition d’un disque dur,
un lecteur de CD-ROM, un flash disk ou une disquette. -2-
b) Linux
• Nom d’un disque physique :
 ATA : hdN
 SCSI, SATA, SSD, carte SD et USB : sdN
 N : Numéro du disque physique : a, b, c, d, ….
 Les disques sont des périphériques qui se trouvent dans le
répertoire /dev
 Exemples:
 /dev/sda /* premier disque physique*/
 /dev/sdb /* deuxième disque physique*/
FILE *disk;
disk = fopen(“/dev/sdb”, "rb"); /* Ouverture du 2e disque */

• Les partitions d’un disque sont désignées(nommées) par des chiffres : la


1ère porte le numéro 1 , la 2eme porte le numéro 2, …
 Exemples :
 /dev/sda1 /* première partition du premier disque */
 /dev/sda2 /* deuxième partition du premier disque */
-3-
/* Lecture séquentielle et écriture caractère par caractère du fichier
lireseq.c de la partition G: ou «G:\lireseq.c» */
Remarque : Dans cet exemple on lit un fichier d’une partition 
#include <stdio.h>
main()
{ int n;
char buffer; /* article de taille = 1 octet */
FILE *fichier=NULL;
fichier = fopen("G:\\lireseq.c","r"); /* Windows */
if(fichier == NULL) printf("\n le fichier n'est pas ouvert : %d\n", fichier);
else{
n=fread(&buffer, 1, 1, fichier);
while(n>0){
printf("%c",buffer);
n=fread(&buffer, 1, 1, fichier);
}
}
fclose(fichier);
return;
}
-4-
/* Lecture séquentielle et impression des 10 premiers secteurs du 1 er disque physique */
#include <stdio.h>
main()
{ int n,s,i,j;
unsigned char buffer[512]; /* bloc = 512 octets*/
FILE *disk=NULL;
disk = fopen("\\\\.\\PhysicalDrive0", "rb"); /* Windows */
/*disk = fopen("/dev/sda", "rb"); */ /* Linux */
if(disk == NULL) printf("\n le disque n'est pas ouvert\n");
else{
for( i=0; i<10; i++){
n=fread(buffer, 512, 1, disk); /*lecture d'un enregistrement ou bloc de 512 octets*/
if(n<=0) printf("\n Erreur de fread = %d ",n);
else{
printf("\n Secteur%d: Nombre d'elements lus = %d\n",i,n);
for(j=0; j<512; j++) printf("%02x", buffer[j]);
}
}
}
fclose(disk);
return;
}
-5-
/* Lecture en accès direct du secteur 10 (LBA 10) du 2 eme disque physique */
#include <stdio.h>
main()
{ int n,s;
unsigned char buffer[512];
long int a=512*10; /* secteur 10 */
FILE *disk=NULL;
disk = fopen("\\\\.\\PhysicalDrive1", "rb"); /* Windows */
disk = fopen("/dev/sdb", "rb"); /* Linux */
if(disk == NULL) printf("\n Erreur le disque physique1 n'est pas ouvert\n" );
else{ s=fseek(disk, a, SEEK_SET); /*seek par rapport au début du fichier : 0 */
if(s!=0) printf("\n Erreur de fseek : s= %d",s);
else{ n=fread(buffer,512, 1, disk);
if(n<=0) printf("\n Erreur de fread = %d ",n);
else printf("\n Lecture du secteur 10; Nombre d’éléments lus = %d\n",n);

}
fclose(disk);
return;
}
-6-
4.5 Système de fichiers FAT32
4.5.1 Structure d’un système de fichiers FAT32
• Une partition FAT32 est composée de:
 Un secteur boot,
 une zone réservée,
 une table d’allocation FAT (deux copies),
 l’espace réservé aux répertoires et fichiers.
 Cet espace est divisé en blocs appelés clusters.
Le cluster est l’unité d’allocation de l’espace disque.

• Contrairement aux systèmes FAT16 et FAT12, Le répertoire racine d’une


partition FAT32 commence à partir du cluster numéro deux et partage le
même espace que les autres répertoires et fichiers.

-7-
Structure d’une Partition FAT32

MBR(Master Record Boot): 512 octets

Partition FAT32 Partition2 Partiton


3 Partition4

- Secteur Boot
- Zone réservée(avec secteur boot):
Octets 14-15 du secteur boot

- FAT1
- FAT2

Clusters 
Répertoires et Fichiers

-8-
1. Secteur boot
• Le premier secteur d’une partition contient:
 Le programme de démarrage appelé ‘bootstrap’ ou secteur boot,
 Une table contenant les paramètres du BIOS et des informations
concernant le système de fichiers(section FAT ).
Structure du secteur Boot d’une Partition FAT32
Dépl Contenu Taill
e
00 Instruction de saut : JMP; (EBxx90) 3
03 Nom fabricant et n° de version 8
11-35 Bloc de paramètres du BIOS (BIOS Parameters Bock) 25

36-89 Informations concernant le système de fichiers (section 54


FAT32)
xx-509 Suite du Programme de démarrage ou bootstrap 420
510-511 Signature hexa : AA55 (Little Endian : 55AA) 2

-9-
2. Bloc des paramètres du BIOS (BIOS Parameters Bock)

Position Contenu Taille


11 Nombre d’octets par secteur 2
13 Nombre de secteurs par cluster 1
14 Nombre de secteurs réservés 2
16 Nombre de FAT 1
17 Nombre d’entrées pour le répertoire racine «\» (FAT 12 et 16) 2
19-20 Nombre de secteurs par partition(partition de petite capacité < 32Mo) 2
21 Descripteur du support (valeur hexadécimale, disque : dur F8) 1
22 Nombre de secteurs par FAT(FAT12 et 16; Pour FAT32 octets 36 à 2
39)
24 Nombre de secteurs par piste 2
26 Nombre de têtes de lecture-écriture 2
28 Nombre de secteurs avant la partition (0 si disque non partitionné) 4
32 Nombre de secteurs de la partition (si positions 19,20 = 0) 4
- 10 -
3. Section FAT
Position Contenu Taille
36 Nombre de secteurs par FAT32 (remplace positions 22-23) 4
40 Flags : utilisé pour le « mirroring » de la FAT 2
42 Version du système de fichiers 2

44 Premier cluster du répertoire racine(\) : cluster 2  4


(cette valeur peut changer si cluster 2 est défectueux)

48 Numéro de Secteur dans la zone réservée (secteur 1) du fichier 2


d’information système : (Fsinfo sector)
50 Copie du Secteur boot (secteur 6 de la zone réservée) 2
52 12 octets réservés (12*0) 12
64 BIOS driver : valeur hexa : 8x (exemple : 80) 1
65 Réservé : (utilisé par Windows NT) 1

66 Extension de la signature boot  (0x29) : cela signifie que les 3 1


champs suivants existent dans le secteur boot.
67 Numéro de série du volume 4
71 Label de volume(nom donné lors du formatage de la partition) 11
82 Système de fichiers : ‘FAT32 ‘ 8
- 11 -
4.5.2 Les répertoires
• Le répertoire racine ‘\’
Il est créé lors du formatage du disque logique(partition).

4.5.2.1 Entrée d’un répertoire


• Une entrée d’un répertoire peut être:
 Un fichier,
 Un répertoire,
 Un label de volume(disque).

• A la création d’un répertoire, le système crée deux répertoires ‘.’ et ‘..’


 ‘.’ : Répertoire courant,
 ‘..’ : Répertoire père.
- 12 -
• Dans la zone (adresse d’implantation) réservée au numéro du premier
cluster on trouve:
 Le N° du premier cluster du répertoire courant pour le répertoire ‘.’ ,
 Le N° du premier cluster du père pour le répertoire ‘..’ ; ou
Zéro si le répertoire parent est ‘\’.
 La zone réservée à la taille du fichier contient zéro.
• Ces répertoires(. et ..) permettent de remonter dans l’arborescence.

Exemple : Entrées d’un répertoire vide.


 2E20202020202020202020 10 00 44 CF70 AF4C AF4C 1800 D070 AF4C 7E16 00000000 .

Rep . ; Cluster : 1800 7E16  0018167E ; Taille = 0.


 2E2E202020202020202020 10 00 44 CF70 AF4C AF4C 1800 D070 AF4C 8615 00000000 ..

Rep . . ; Cluster : 1800 8615  00181586 ; Taille = 0.

- 13 -
• Dans la zone (adresse d’implantation) réservée au numéro du premier
cluster on trouve:
 Le N° du premier cluster du répertoire courant pour le fichier ‘.’ ,
 Le N° du premier cluster du père pour le ficher ‘..’ ; ou
Zéro si le répertoire parent est ‘\’.
 La zone réservée à la taille du fichier contient zéro.
• Ces fichiers(. et ..) permettent de remonter dans l’arborescence.

• Chaque entrée est constituée de 32 octets.


• Le nombre maximal d’entrées des répertoires FAT32 est égal à 65534.
• On distingue deux types d’entrées :
1. Entrée pour nom en format court(11 caractères(8.3)) :
nom.extension ;
2. Entrée pour nom en format long(255 caractères).
- 14 -
4.5.2.2 Structure d’une entrée format court
• Le nom d’un fichier est composé de deux parties:
 le nom sur 1 à 8 caractères ascii ,
 l’extension de 0 à 3 caractères ascii.
• Exemple : command.com prog.c ; Le point séparant le nom de
l’extension n’est pas représenté.
• Remarque :
 la suppression d’une entrée(descripteur de fichier) du répertoire est
réalisée en affectant la valeur 0xE5 au premier octet de l’entrée : c’est
une suppression logique.
 Entrée libre  premier octet = 0x00.

- 15 -
Structure d’une entrée format court

dépl Taille Contenu


00 8 Nom : Caractères ASCII
08 3 Extension : caractères ASCII

11 1 Attribut (Bit0: lecture seule, Bit1: caché, Bit2: système, Bit3: label de


volume, Bit4:répertoire, Bit5:archive, 2 bits non utilisés)
12 1 Réservé pour Windows NT
13 1 Partie « millième de seconde » du temps de création
14 2 Heure de création: secondes(0 à 29), minute(0 à 59) , heure(0 à 23)
16 2 Date de création(date calculée à partir de 01/01/1980)
18 2 Date du dernier accès
20 2 Numéro du premier cluster dans la FAT (poids fort pour FAT32)
22 2 Heure de la dernière modification
24 2 Date de la dernière modification
26 2 Numéro du premier cluster dans la FAT (poids faible)
28 4 Taille du fichier en octets(taille maxi= 4Giga octets)

- 16 -
4.5.2.2 Structure d’une entrée format long
• Le nom d’un fichier est composé de 1 à 255 caractères.
• Un fichier est représenté dans le répertoire au moyen de :
 Une à vingt entrées de format long
 Une entrée = 32 octets.
 Chaque entrée peut contenir au plus 13 caractères du nom.
 Les caractères constituant les noms en format long sont représentés
en UNICODE (UTF16: 2 octets par caractère),
 Une entrée format court.
Dans une entrée en format court, le nom est constitué des six premiers
caractères(lettres ou chiffres) suivi du caractère ~ qui est suivi d’un
chiffre(numéro) et enfin l’extension(sans le point).
 Le nom est converti en Majuscule.
 Les caractères constituant les noms en format court sont
représentés en ASCII (1 octet par caractère).
- 17 -
Entrées composant un nom en format long

Dernière entrée format long d’un fichier f

Avant dernière entrée format long d’un fichier f



Deuxième entrée format long d’un fichier f

Première entrée format long d’un fichier f

Entrée format court d’un fichier f

Remarque : Un répertoire utilisant le format long ne doit jamais être trié car
l’ordre des entrées représentant un fichier est très important.

- 18 -
• Contenu d’une entrée format Long :

dépl Taille Contenu

00 1 N° de l’entrée ; bit 6 (à partir de 0) de la dernière entrée = 1

01 10 Nom : Caractères 1-5 (UNICODE : UTF16)

11 1 Attribut LFN = ‘0F ‘ : Nom en format long

12 1  Réservé

13 1 Caractère de contrôle : checksum

14 12 Suite du nom : caractères 6-11 (UNICODE)

26 2 0000

28 4 Suite du nom : caractères 12-13 (UNICODE)

• L’attribut LFN=0F  entrée d’un nom en format long.

- 19 -
• Exemple de nom de fichier : ‘‘nom en format long.exemple.doc’’
 Nom de fichier = 30 caractères  3 entrées en format long
 Nom en Format court = NOMENF~1DOC (le point ‘.’ n’est pas
représenté )

• Une seule entrée en format court :


- Pour les noms de fichiers/répertoires en lettres majuscules ou en
lettres minuscules et de longueur inférieure ou égale à 8 caractères,
- Pour les répertoire . et ..
• Le répertoire racine \ ne contient pas de répertoires . et ..
• Le répertoire racine peut contenir une entrée en format court pour le label
de volume.
- 20 -
4.5.3 Allocation dans le système de fichiers FAT32
• L’espace disque réservé aux fichiers et aux répertoires est divisé en n
clusters numérotés de 2 à n+1.
• Chacun d’eux est composé de 2k secteurs (k0).
• L’unité d’allocation est le cluster.
• L’espace est alloué dynamiquement au fichier: un cluster à la fois.
• L’espace disque est représenté dans un fichier d’allocation que l’on appelle
FAT(File Allocation Table).
• L’entrée numéro i de la FAT correspond au cluster numéro i de l’espace
disque.
• Une entrée peut être sur 12 bits (FAT12), sur 16 bits (FAT16) ou 32 bits
(FAT32).
• Les deux premières entrées sont réservées au système:
Le premier octet contient le code caractéristique du support (ex : F8
disque dur) le reste des octets contiennent la valeur ‘FF’.
- 22 -
• Une entrée de la FAT32 peut contenir les valeurs suivantes:
Valeur Signification
0x00000000 Cluster libre
0x0FFFFFF0 – 0x0FFFFFF6 Cluster réservé
0x0FFFFFF7 Cluster défectueux
0x0FFFFFF8 – 0x0FFFFFFF Dernier cluster du fichier(EOF)

Autres valeurs supérieures à 2 : N° du cluster suivant dans le fichier.


(28 bits de droites) Premier cluster da la FAT = 2

• Les entrées correspondant aux clusters alloués aux fichiers sont chainées entre
elles.
 Adresse LBA de la FAT = Adresse début LBA de la partition + nombre de secteurs
réservés.
 Adresse LBA premier cluster = Adresse début LBA de la partition + nombre de
secteurs réservés + Nombre FAT * Nombre secteurs par FAT.
 Adresse LBA d’un cluster i = Adresse LBA premier cluster + (i - 2) * nombre secteurs
par cluster.
- 23 -
1er Cluster
Fichier1 …
0100

FAT32
0
1
2
Fichier1 avec 3 clusters
… …
Remarque : Les n° des
clusters sont en little 00000101 100
endian

00000102 101

0FFFFFFF 102
… …

- 24 -
41 54 00 50 00 5F 00 53 00 59 00 0F 00 F8 53 00  AT P _ S Y øS
43 00 32 00 2E 00 64 00 6F 00 00 00 63 00 78 00  C2.docx
54 50 5F 53 59 53 7E 31 44 4F 43 20 00 8D B7 61  TP_SYS~1DOC ·a
B3 4C B3 4C 18 00 08 5D 72 4C 68 16 02 6A 00 00  ³L³L ]rLh j
Cluster = 8 secteurs = 4096 octets.
Taille du fichier = 00006A02 = 27138 octets  27138/4096 = 6,626  7 clusters
Premier cluster du fichier TP_SYSC2.doc = 0x68161800  0x00181668 = 1778600
Adresse début de la FAT = Secteur 3996
F8FFFF0F FFFFFF7F 633C1900 FFFFFF0F FFFFFF0F FFFFFF0F 07000000 08000000 09000000 0A000000
0B000000 0C000000 0D000000 0E000000 0F000000 10000000 11000000 12000000 13000000 14000000
15000000 16000000 17000000 18000000 19000000 1A000000 1B000000 1C000000 1D000000 1E000000
1F000000 20000000 21000000 22000000 23000000 24000000 25000000 26000000 27000000 28000000
29000000 2A000000 2B000000 2C000000 ………………

Suite de la FAT : Secteur 7f9000


01161800 02161800 03161800 04161800 05161800 06161800 07161800 08161800 09161800 0A161800
0B161800 0C161800 0D161800 0E161800 FFFFFF0F 10161800 11161800 12161800 13161800 14161800
51161800 52161800 53161800 54161800 55161800 56161800 57161800 58161800 59161800 5A161800
…………… 60161800 61161800 62161800 63161800 64161800 65161800 66161800 67161800 FFFFFF0F

Les 7 entrées : 68161800-6E161800 (00181668-0018166E ou 1778600-1578606)

69161800 6A161800 6B161800 6C161800 6D161800 6E161800 FFFFFF0F


00000000 71161800 72161800 73161800 74161800 75161800 76161800 77161800 78161800 79161800
7A161800 7B161800 7C161800 7D161800 FFFFFF0F 00000000 - 25 -
La taille d’un cluster dépend de la capacité des disques:

Capacité disque Taille du cluster


513 Mo-8 Go 4 Ko
8 Go - 16 Go 8 Ko
16 Go - 32 Go 16 Ko
32 Go et plus 32 Ko

• Remarque :
 Si un disque ou une partition FAT32 est formaté avec Windows XP ou
Windows7, sa capacité ne peut pas dépasser 32 Giga octets.
 Pour pouvoir utiliser un disque de capacité supérieure à 32Go (max
128Go) sur ces systèmes, on doit le formater avec un autre système tel
que linux.
==============================================
- 26 -

Vous aimerez peut-être aussi