Title: Systme de Fichiers
1Système de Fichiers
- Principe dutilisation, de gestion et de mise en
uvre des systèmes de fichier dans les systèmes
informatiques - Par Gilles Grimaud
- Université des Sciences et Technologies de Lille
- http//www.lifl.fr/grimaud/Cours
2Architecture en couche pour lexploitation des
mémoires persistantes
Appli. A
Appli. B
Interface dexploitation C
Système de fichier
Volume
Volume
Volume
Volume
Disque dur -1-
Disque dur -2-
3Plan
- Périphériques de mémoires persistantes
- Virtualisation des disques les volumes
- Secteur damorce et SuperBloc
- Système de fichiers
- Protections selon Unix
- Manipulation de fichiers et de répertoires en C
- Fichiers mappés en mémoire
4Périphériques de mémoires persistantes
- Mémoire persistante mémoire dont le contenu
nest pas perdu après un arrêt du système
informatique. - Objets premiers
- stocker les informations utiles au démarrage dun
système ouvert - stocker des données long terme
- Sauvegarder des données.
- Type de supports physiques
- Disque dur, disques amovibles,
- Disquettes, Disques opto-magnétique,
- bandes magnétiques,
- EEPROM, FlashRam, Fe-RAM, M-RAM,
5Périphériques de mémoires persistantes
- Les disques magnétiques (Disques dur)
- plateaux, cylindres, secteurs
- 4000 t/mn à 10000 t/mn
- 512 Ã 16384 octets stocker sur chaque secteur
- 20 Ã 200 secteurs par cylindre
- 800 à 4000 cylindres (jusquà 12 ms de
déplacement) - 1 à 16 plateaux
- Adressage par interface ltp,c,sgt
- Capacité standard en 2002
- 40 Go,
- 7200 tours/minute,
- Déplacement 7 ms,
- Ultra DMA 100 Mhz gt de 20Mo/s à 40Mo/s
6Périphériques de mémoires persistantes
- Interface daccès aux disques
- Contrôleur de disque IDE interface normées ATA,
ATA-2, - Contrôleur de disque SCSI / SCSI-2
Contrôleurde disque
tampon
?Processeur
Mémoirevive
Bus dadresses
32
Bus de données
32
- Accès au données persistantes
- Accès direct au travers dun tampon de
lecture/écriture - DMA (U-DMA) pour copie des données dans/depuis
la mémoire centrale.
7Périphériques de mémoires persistantes
- Exemple interface logicielles daccès au disque
- Lecture
- void rdSectors( int device, // plusieurs
disques sur un même contrôleur int head, //
n du plateau int cylender, // n du cylindre
de départ int sector, // n du secteur de
départ - int nsectors, // nombre de secteurs à lire
unsigned char buffer) // adresse de stockage
des données lue - Ecriture
- void wrSectors( int device, // plusieurs
disques sur un même contrôleur int head, //
n du plateau - int cylender, // n du cylindre de départ
- int sector, // n du secteur de départ
- int nsectors, // nombre de secteurs à lire
- unsigned char buffer) // adresse ou sont
stockées les données à écrire - Format
- void frSectors(int device, int p, int c, int s,
int nsectors) - Dans la pratique, linterface daccès au matériel
ne saurait se résumer à un appel de fonction. On
parle de programmation du contrôleur de disque
(via des registres).
8Virtualisation des disques les volumes
- Simplifier/homogénéiser les systèmes dadressage
des disques ltn plateau,n cylindre,n secteurgt
devient ?ltidentifiant de volume, n blocgt - Multiplexer lusage dun disque unique en
construisant plusieurs parties dédiées à des
usages distincts (partitions ou volumes) - Gérer les systèmes damorce et les systèmes
damorce multiples - Permettre à dautres supports de stockage
physique dêtre utilisés en temps que volumes
9Virtualisation des disques les volumes
- Exemple interface logicielles daccès au disque
- Lecture
- void readBloc( int volume, //
identifiant de volume visé int bloc, //
identifiant du bloc dans le volume int
nbloc, // nombre de bloc concernés unsigned
char buffer) // adresse de stockage des données
lue - Ecriture
- void writeBloc( int volume, //
identifiant de volume visé int bloc, //
identifiant du bloc dans le volume int
nbloc, // nombre de bloc concernés unsigned
char buffer) // adresse ou sont stockées les
données à écrire - Format
- void formatBloc(int v, int b, int nbloc)
- Sous cette interface, on peut placer autre chose
quun contrôleur de disque (EEPROM, liaison
réseau, ).
10Virtualisation des disques les volumes
Boot sector
Super bloc
i-nodes
Disque Dur
Master Boot Record
Data blocs
volume 1
Boot sector
volume 2
FAT
11Virtualisation des disques les volumes
- A un bloc correspond un secteur sur une piste du
disque. - Aussi les opérations de lecture/écriture sont
équivalents. Cependant, le système doit convertir
une numéro de bloc en n de secteur/n de piste.
MBR
P1
Offset P2
Max Piste
P2
Max Secteur
nBloc Offset P2 Secteur Piste x Max Secteur
12Démarrage dun système
- Exécution du code en ROM, se termine par
- Chargement/Exécution du code en MBR, se termine
par - Chargement/Exécution du code du secteur
damorce , démarrage du système
MémoireMorte(EEPROM)
Contrôleurde disque
MBR
Boot sector
P.1
tampon
Boot sector
P.2
?Processeur
Mémoirevive
Bus dadresses
32
Bus de données
32
13Secteur damorce et Secteur damorce maître
0000 FA cli 0001 33C0 xor
ax,ax 0003 8ED0 mov ss,ax 0005 BC007C
mov sp,0x7c00 set stack top at
00007C00 0008 8BF4 mov si,sp SI
7C00 000A 50 push ax 000B 07
pop es 000C 50 push ax 000D 1F
pop ds DS ES 0 000E FB
sti enable interrupts 000F FC
cld 0010 BF0006 mov di,0x600 DI
0600 0013 B90001 mov cx,0x100 256
words ( 512 bytes) 0016 F2A5 repne movsw
copy ourselves to 00000600 0018
EA1D060000 jmp 0x00x61d and jump to the new
location 001D BEBE07 mov si,0x7be SI
07BE 0020 B304 mov bl,0x4 4
entries 0022 803C80 cmp byte si,0x80
check bootable flag 0025 740E jz 0x35 0027
803C00 cmp byte si,0x0 check if valid
entry 002A 751C jnz 0x48 jump if
invalid 002C 83C610 add si,byte 0x10 002F
FECB dec bl 0031 75EF jnz 0x22
try next entry 0033 CD18 int 0x18
no bootable partitions,GOBASIC 0035 8B14
mov dx,si get drive nr, head 0037
8B4C02 mov cx,si0x2 get cyl, sect 003A
8BEE mov bp,si keep ptr to
parttable entry 003C 83C610 add si,byte
0x10 verify next entries 003F FECB dec
bl 0041 741A jz 0x5d 0043 803C00 cmp
byte si,0x0 0046 74F4 jz 0x3c
0048 BE8B06 mov si,0x68b "Invalid
partition table" 004B AC lodsb
print message 004C 3C00 cmp
al,0x0 004E 740B jz 0x5b 0050 56
push si 0051 BB0700 mov bx,0x7 0054 B40E
mov ah,0xe 0056 CD10 int 0x10 0058
5E pop si 0059 EBF0 jmp short
0x4b 005B EBFE jmp short 0x5b hang
system 005D BF0500 mov di,0x5 try 5
times 0060 BB007C mov bx,0x7c00 0063
B80102 mov ax,0x201 0066 57 push
di 0067 CD13 int 0x13 read
bootsector to 00007c00 0069 5F pop
di 006A 730C jnc 0x78 ok,
proceed 006C 33C0 xor ax,ax 006E CD13
int 0x13 0070 4F dec di 0071 75ED
jnz 0x60 try again 0073 BEA306
mov si,0x6a3 "Error loading OS" 0076 EBD3
jmp short 0x4b print message 0078
BEC206 mov si,0x6c2 "Missing operating
system" 007B BFFE7D mov di,0x7dfe 007E
813D55AA cmp word di,0xaa55 check if valid
bootsector 0082 75C7 jnz 0x4b
print message if invalid 0084 8BF5 mov
si,bp SI ptr to parttable entry 0086
EA007C0000 jmp 0x00x7c00 jump to
bootsector
- Sélection de la partition de démarrage selon
MS(MBR MS)
14Virtualisation des disques les volumes
- Administration des volumes sous Unix Fdisk
- Plusieurs mode dont mode interactif
- lister les volumes
- créer les volumes
- changer de volume actif (boot de 2nd niveau)
- terminer / abandonner
- Sur architecture X86, le secteur damorce
primaire est celui défini dans - /usr/plateform-name/lib/fs/ufs/mboot
15Système de fichiers
- Un système de fichiers est un modèle
dorganisation de linformation stocké dans un ou
plusieurs volumes. - Un système de fichiers définit
- Un modèle dorganisation de linformation
- Notion de répertoires et de fichiers,
- Classement arborescent des répertoires,
- Notion de flux, accès séquentiels,
- Un système de liaison de linformation
- Identification des fichiers par un nom
symbolique/home/rd2p/grimaud/public_html/index.ht
ml - Accès aux données par lintermédiaire de leurs
nom symbolique cat home/rd2p/grimaud/public_html
/index.html
16Système de fichiers
- Les volumes, et les disques physiques stockent
linformation dans des blocs doctets de taille
fixe. Les systèmes de fichiers gèrent
lallocation et la libération de ces blocs, ainsi
que leurs regroupement pour former des supports
logiques les fichiers. - int blocAlloc (int volume)
- void blocFree (int volume, int bloc)
- Différentes stratégies pour réaliser ces
opérations élémentaires dans un volume visant à - allouer en séquences des blocs contigus afin de
réduire les temps de latence daccès aux fichiers - permettre la restauration des blocs libres après
une défaillance matérielle
17Système de fichiers
- Mécanisme dallocation FAT
Floppy Allocation Table Table des blocs
utilisés/libres
X 4 octets
Secteur Boot
Magic Number
X 32 octets
SuperBloc (MBR)
Volume Name
X 32 octets
Fomater ID
FAT
X 32 octets
Fomat Date
X 4 octets
FAT Size
X 4 octets
Secteur utilisable
First Dir Block
X 4 octets
CheckSum val
Unused space
Allouer un bloc chercher un 0 dans la FATet le
remplacer par un 1Libérer un bloc Mettre un 0
dans la FAT.
1110000110001011100011101010111011100
1er bloc utilisé
19ème bloc libre
Avec des blocs de 4096 octets il suffit dun bloc
de FAT pour couvrir un volume de 128 Mo
18Système de fichiers
- Mécanisme dallocation FreeList
FreeList Liste des blocs libres dans le volume.
X 4 octets
Secteur Boot
Magic Number
X 32 octets
SuperBloc (MBR)
Volume Name
X 32 octets
Fomater ID
Bloc libre
X 32 octets
Fomat Date
X 4 octets
Bloc occupé
FAT Size
X 4 octets
First Dir Block
Bloc libre
X 4 octets
CheckSum val
Bloc occupé
X 4 octets
First Free Block
Bloc libre
Unused space
Bloc occupé
Bloc libre
Bloc occupé
19Système de fichiers
- Un fichier est un assemblage de blocs.
Files Data
Files Data
Files Data
Files Data
Files Data
Files Data
20Système de fichiers
- Sous Unix, un répertoire est un fichier qui liste
les noms de fichiers et de répertoires quil
contient, ainsi que linformation suffisante pour
pouvoir trouver le fichier/répertoire désigné sur
le disque. Il peut aussi contenir,
éventuellement, des informations de droits
daccès relatif à chaque fichiers/répertoires. - Par exemple
Nom de fichier
Droit daccès
Bloc de départ
Nom de fichier
Droit daccès
Bloc de départ
21Système de fichiers Unix
- Le mécanisme de liaison symbolique proposé par le
systeme de fichiers est, pour les systèmes
dexploitation Unix, le mécanisme de liaison
préféré, non seulement pour les données
persistante mais aussi pour la majorité des flux
(entrées-sorties audio, terminaux textes). - Pour les systèmes Unix il nexiste quun seul
système de fichier qui regroupe lensemble des
données persistantes manipulées par le système,
ainsi quun certain nombre de flux propres au
matériel informatique. - Tout nouveau volume structuré en système de
fichier peut être insérer dans le système de
fichier Unix par la commande /user/sbin/mount
/dev/hdb2 /tmp/ - Tout nouveau support physique manipulable par le
système est définit par le système comme un
fichier virtuel du système de fichier
/dev/hda1 / ufs rw 1 1 /dev/hda2 swap1 ufs
rw 0 2/dev/hdb1 /usr ufs rw 1 2table de
définition du système de fichiers définie dans
/etc/fstab
22Protections selon Unix
- Chaque répertoire, en définissant un nom de
fichier, lui associe un propriétaire, ainsi que
des droits daccès. -
- trwxrwxrwx 6134octets mel.txt
- type user group other
?
?
?
23Manipulation de fichiers et de répertoires en C
- Chemin daccès (char path)
- Open(2), truncate(2)
- Stat(2),chmod(2), fcntl(2)
- Fichier ouvert (int fd)
- Fstat(2), fchmod(2),fcntl(2)
- Lseek(2), flock(2)
- Read(2),write(2),close(2)
- Fichier ouvert avec tampon(FILE file)
- Fopen(3), fdopen(3), freopen(3)
- Fread(3), fwrite(3)
- Putc(3), fputc(3)
- Getc(3), fgetc(3)
- Puts(3),fputs(3)
- Printf(3), fprintf(3)
- Scanf(3), fscanf(3)
- Fflush(3)
- Fileno(3)
- Feof(3)
- Ferror(3)
24Fichiers mappés en mémoire centrale
Un exemple de translation de symboles entre
différents mécanismes de liaisons void
mmap((void ) NULL, long mapSize, int
fileAccess, int mapProperty, int
fileid) Exemple dutilisation (avec la
bibliothèque sys/mman.h) void MapFileRW(char
file) void ptr struct stat st if(
stat(file,st) ! 0 (fd open(file, O_RDWR))
lt 0 ) printf("s cannot bee read\n",file)
return NULL ptr mmap((void ) NULL,
(size_t) st.st_size, (int) PROT_READ
PROT_WRITE, (int) MAP_FILE MAP_VARIABLE
MAP_SHARED, (int) fd, (off_t) 0)
close(fd) if( (caddr_t) ptr (caddr_t) -1 )
printf("s cannot map",file) return NULL
return ptr