Vous êtes sur la page 1sur 29

Système de fichier

• Qu’est-ce qu’un système de fichiers?

• Qu’est-ce qu’un fichier ?

• Répertoires de fichiers

• Stockage des fichiers

• L’antémémoire

• Systèmes de fichiers UNIX (FFS), Linux Ex2, MS-DOS (FAT) et NTFS

• Partage de fichiers
– Liens physiques et liens symboliques
– Verrouillage de fichier

• La cohérence du système de fichiers

• La protection

Génie Informatique Chapitre 10.1


Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers
Partie 2

• Partage de fichiers
– Liens physiques et liens symboliques
– Verrouillage de fichier

• La cohérence du système de fichiers

• La protection

Génie Informatique Chapitre 10.2


Systèmes d’exploitation
École Polytechnique de Montréal

1
Qu’est ce qu’un système de fichiers ?

• Un système de fichiers est la partie du système d’exploitation qui se


charge de gérer le stockage et la manipulation de fichiers (sur une unité
de stockage : partition, disque, CD, disquette).

• Avant qu’un système de fichiers puisse créer et gérer des fichiers sur
une unité de stockage, son unité doit être formatée selon les spécificités
du système de fichiers.

• Le formatage inspecte les secteurs, efface les données et crée le


répertoire racine du système de fichiers.

• Il crée également un superbloc pour stocker les informations nécessaires


à assurer l’intégrité du système de fichiers.

Génie Informatique Chapitre 10.3


Systèmes d’exploitation
École Polytechnique de Montréal

Qu’est ce qu’un système de fichiers ? (2)

• Un superbloc contient notamment :


– L’identifiant du système de fichiers (C:, D : ..)
– Le nombre de blocs dans le système de fichiers.
– La liste des blocs libres.
– L’emplacement du répertoire racine.
– La date et l’heure de la dernière modification du système de fichiers
– Une information indiquant s’il faut tester l’intégrité du système de
fichiers.

• Si le superbloc est corrompu, le système de fichiers risque ne plus pouvoir


accéder aux fichiers.

• Pour réduire le risque, il maintient plusieurs copies du superbloc.

• Ces copies permettent de vérifier l’intégrité du superbloc et de le restaurer.

Génie Informatique Chapitre 10.4


Systèmes d’exploitation
École Polytechnique de Montréal

2
Qu’est ce qu’un système de fichiers ? (3)

Génie Informatique Chapitre 10.5


Systèmes d’exploitation
École Polytechnique de Montréal

Qu’est ce qu’un fichier ?

• Un fichier désigne un ensemble de données manipulées comme une seule


unité ou individuellement :
– create, open, close, unlink, copy, rename, list….
– read, write…

• Il a un ensemble d’attributs qui peuvent être regroupés en deux catégories :


– Les attributs qui servent à contrôler les accès (code de protection, mot
de passe, propriétaire …).

– Les attributs qui définissent le type et l’état courant du fichier (indicateur


du type ASCII/binaire, taille courante, location, date de création, date
de la dernière modification, …).

• Pour le système d’exploitation, un fichier est une suite d’octets.

• Par contre, les utilisateurs peuvent donner des significations différentes au


contenu d’un fichier (suites d’octets, suite d’enregistrements, arbre…)

Génie Informatique Chapitre 10.6


Systèmes d’exploitation
École Polytechnique de Montréal

3
Qu’est ce qu’un fichier ? (2)
• Chaque fichier a un nom composé en général de deux parties séparées par
un point.
– La partie qui suit le point est appelée extension (prog.c, entete.h,
fich.doc, toto.pdf …).
– L’extension est nécessaire dans certains cas. Par exemple, le
compilateur C rejettera le fichier prog.txt même si son contenu est un
programme C.

• Chaque fichier est identifié par une référence (un chemin d’accès)
permettant de le localiser.

• Dans un système, il existe plusieurs types de fichiers :


– Les fichiers ordinaires (ASCII ou binaires).
– Les répertoires sont des fichiers système qui maintiennent la structure
du système de fichiers.
– Les fichiers spéciaux caractère sont liés aux E/S et permettent de
modéliser les périphériques d’E/S série tels que les terminaux, les
imprimantes et les réseaux.
– Les fichiers spéciaux bloc modélisent les disques, les disquettes...

Génie Informatique Chapitre 10.7


Systèmes d’exploitation
École Polytechnique de Montréal

Qu’est ce qu’un fichier ? (3)


Dans le cas d’UNIX,
• chaque type de fichiers est désigné par un symbole :
– «-» les fichiers ordinaires,
–«d » les répertoires,
–«c » les périphériques caractères,
–«b » les périphériques blocs, et
–«p » les tubes nommés (named pipe).

• Les périphériques sont aussi des fichiers désignés par des références.

Exemple :
On copie le texte : « abcd », tapé au clavier, dans un fichier par la
commande :
$ cat > fichier
abcd
^D
• et sur un terminal, par la commande :
$ cat > /dev/tty
abcd
^D
Génie Informatique Chapitre 10.8
Systèmes d’exploitation
École Polytechnique de Montréal

4
Qu’est ce qu’un fichier ? (4)
Quelques appels système

Génie Informatique Chapitre 10.9


Systèmes d’exploitation
École Polytechnique de Montréal

Qu’est ce qu’un fichier ? (5)


Appel système stat (La structure de buf)

Génie Informatique Chapitre 10.10


Systèmes d’exploitation
École Polytechnique de Montréal

5
Répertoires de fichiers

• Les systèmes de fichiers organisent leurs fichiers dans des répertoires.

• Chaque répertoire comporte des fichiers et éventuellement des sous-


répertoires.

• Chaque système de fichier a un répertoire racine (/, C:, E:).

• Chaque processus a un répertoire de travail désigné par « . »

• Le répertoire père est désigné par « ..»

• La référence à un fichier indique le chemin d’accès au fichier :

– Chemin d’accès relatif

– Chemin d’accès absolu

Génie Informatique Chapitre 10.11


Systèmes d’exploitation
École Polytechnique de Montréal

Répertoires de fichiers (2)

• L’organisation la plus appropriée pour les fichiers est hiérarchique (un


graphe acyclique)

Génie Informatique Chapitre 10.12


Systèmes d’exploitation
École Polytechnique de Montréal

6
Répertoires de fichiers (3)
Montage de systèmes de fichiers

• Le montage permet de regrouper dans une même structure


hiérarchique plusieurs systèmes de fichiers.

Génie Informatique Chapitre 10.13


Systèmes d’exploitation
École Polytechnique de Montréal

Répertoires de fichiers (4)


Structure d’un répertoire : cas de MS-DOS

Génie Informatique Chapitre 10.14


Systèmes d’exploitation
École Polytechnique de Montréal

7
Répertoires de fichiers (5)
Structure d’un répertoire : cas d’UNIX

Nom i-noeud

. Répertoire i-noeud 342


..
.
.. Répertoire i-noeud 256
Marie
Jean .
..
Répertoire i-noeud 2
Josée clés 758
textes 3265
Chaque fichier a un i-nœud

Génie Informatique Chapitre 10.15


Systèmes d’exploitation
École Polytechnique de Montréal

Répertoires de fichiers (6)


Structure d’un répertoire : cas d’UNIX

Génie Informatique Chapitre 10.16


Systèmes d’exploitation
École Polytechnique de Montréal

8
Répertoires de fichiers (7)
Quelques appels système

Génie Informatique Chapitre 10.17


Systèmes d’exploitation
École Polytechnique de Montréal

Stockage des fichiers


• Chaque fichier (ordinaire ou répertoire) d’un système de fichiers est stocké
sur l’unité de stockage du système de fichiers. Ses données sont dans des
blocs de taille fixe (512, 1024, ou 2048 octets, …).

• À chaque fichier est alloué un nombre de blocs. Le bloc est l’unité


d’allocation => fragmentation interne

• La lecture ou l’écriture d’un élément d’un fichier impliquera le transfert vers


la mémoire du bloc entier qui contient cet élément.

• Le système de fichiers conserve, dans un ou plusieurs blocs spécifiques


(superblocs), un certain nombre d’informations telles que le nombre de ses
blocs, leur taille, la liste des blocs libres….

• Pour pouvoir récupérer l’état des blocs (libre ou alloué), les systèmes de
fichiers maintiennent :
– une liste chaînée des blocs libres ou
– une table de bits contenant un bit pour chaque bloc (0 pour libre).

• Les blocs d’un même fichier sont contiguës ou non contiguës


Génie Informatique Chapitre 10.18
Systèmes d’exploitation
École Polytechnique de Montréal

9
Stockage des fichiers (2)
Allocation contiguë

(a) Allocation d’espace disque pour 7 fichiers


(b) Suppression des fichiers D et F
=> Fragmentation externe

Génie Informatique Chapitre 10.19


Systèmes d’exploitation
École Polytechnique de Montréal

Stockage des fichiers (3)


Allocation non-contiguë : Chaînage des blocs

Pas pratique pour un accès direct à un bloc

Génie Informatique Chapitre 10.20


Systèmes d’exploitation
École Polytechnique de Montréal

10
Stockage des fichiers (4)
Allocation non-contiguë
Table d’allocation de fichiers (FAT)
• La FAT permet de localiser les blocs de chaque fichier du système de fichiers.

• Elle comporte une entrée pour chaque bloc de l’unité de stockage.

• Le numéro du premier bloc d’un fichier est un attribut du fichier.

Numéro du Bloc 1 du fichier A


Numéro du Bloc 1 du fichier B

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 …

X X EOF 13 2 9 8 L 4 12 3 E EOF EOF L …

Génie Informatique Chapitre 10.21


Systèmes d’exploitation
École Polytechnique de Montréal

Stockage des fichiers (5)


Allocation non-contiguë : Tables d’index des i-noeuds

Génie Informatique Chapitre 10.22


Systèmes d’exploitation
École Polytechnique de Montréal

11
L’antémémoire
• Les processus ne peuvent pas manipuler directement les données du disque. Ils doivent être déplacés en
mémoire centrale.

• De nombreux systèmes de fichiers cherchent à réduire le nombre d’accès au disque car le temps d’accès
moyen au disque est égal à quelques dizaines de millisecondes.

• La technique la plus courante pour réduire les accès au disque, consiste à utiliser une antémémoire (buffer
cache ou block cache).

• L’antémémoire est un espace de la mémoire centrale réservé aux transferts de blocs de données du
disque.

• A chaque demande d’accès à un élément d’un fichier, on examine d’abord si le bloc désiré (celui qui
contient l’élément du fichier) se trouve dans l’antémémoire.

• Si c’est le cas, la demande est satisfaite sans avoir à accéder au disque.


• Sinon, pour satisfaire la demande, le bloc désiré doit être d’abord chargé à partir du disque dans
l’antémémoire.

• S’il faut charger un bloc et que l’antémémoire est pleine, il faut retirer un des blocs de l’antémémoire pour
le remplacer par celui demandé. Le bloc retiré doit être recopié sur le disque s’il a été modifié depuis son
chargement.

• Pour choisir le bloc à retirer, il est possible d’utiliser un des algorithmes de remplacement de pages (FIFO,
LRU, etc.).

Génie Informatique Chapitre 10.23


Systèmes d’exploitation
École Polytechnique de Montréal

L’antémémoire (2)
Problème

• Si des blocs placés dans l’antémémoire ont été modifiés et une panne
survient avant de les copier sur disque, le système de fichiers passe dans
un état incohérent.

• Pour minimiser les risques d’incohérence, le système Unix, recopie les


blocs contenant les i-nœuds et les répertoires immédiatement après leur
modification.

• Les blocs de données ordinaires sont recopiés s’ils doivent être retirés de
l’antémémoire ou automatiquement par un démon toutes les 30 secondes.
On peut également déclencher ce démon par l’appel système sync().

• Dans MS-DOS, les blocs de l’antémémoire sont recopiés sur disque à


chaque modification.

• L’antéménoire n’est pas la seule façon d’améliorer les performances d’un


système de fichiers. Une autre technique consiste à réduire le temps de
recherche du bloc dans le disque (voir la séance suivante).

Génie Informatique Chapitre 10.24


Systèmes d’exploitation
École Polytechnique de Montréal

12
Système de fichiers d’UNIX (FFS)

Mode
Link count
UID
GID
File size
Times
Structure d’un i-noeud Address of the first block
Address of the second block


Table d’index
Address of the 10 block
Pointeur indirect simple
Pointeur indirect double
Pointeur indirect triple

Génie Informatique Chapitre 10.25


Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers d’UNIX (2)

Génie Informatique Chapitre 10.26


Systèmes d’exploitation
École Polytechnique de Montréal

13
Système de fichiers d’UNIX (3)
• Les i-nœuds de tous les fichiers d’un même système de fichiers sont regroupés
dans une même table -> la table des i-nœuds.

• Chaque i-nœud est identifié par un numéro -> sa position dans la table.

• Pour faciliter l’accès aux fichiers, le système maintient en mémoire une table
contenant tous les fichiers ouverts -> la table des fichiers ouverts.

• Chaque entrée de la table contient notamment :


– Mode d’ouverture, Pointeur de fichier, Numéro d’i-nœud,…

• L’opération d’ouverture ou de création de fichier retourne un descripteur de fichier


qui contient un pointeur vers la table des fichiers ouverts.

• Les descripteurs d’un même processus sont rassemblés dans une table -> la
table des descripteurs de fichier du processus). Lorsqu’un processus est créé
par un fork, la table des descripteurs du père est dupliquée.
Génie Informatique Chapitre 10.27
Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers d’UNIX (4)

Relation entre la table des descripteurs de fichiers et la table des fichiers ouverts
Génie Informatique Chapitre 10.28
Systèmes d’exploitation
École Polytechnique de Montréal

14
Système de fichiers de Linux Ex2

Génie Informatique Chapitre 10.29


Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers de MS-DOS


FAT
Disque
Deux copies Répertoire Données et
Boot
de la FAT Racine Répertoires

Répertoire

FAT
Numéro du Bloc 1 du fichier A
Numéro du Bloc 1 du fichier B

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 …

X X EOF 13 2 9 8 L 4 12 3 E EOF EOF L …

Génie Informatique Chapitre 10.30


Systèmes d’exploitation
École Polytechnique de Montréal

15
Système de fichiers de MS-DOS (2)
FAT

Génie Informatique Chapitre 10.31


Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers NTFS


(Windows)

• Chaque volume (partition) NTFS contient des fichiers, des répertoires,


des bitmaps et d’autres structures de données.
volume = {blocs = clusters= 512octets à 64ko} en général = 4ko

• La structure de données principale est Master File Table


MFT = { enregistrements de 1ko}

• Chaque enregistrement décrit un fichier ou un répertoire.

• Un fichier ou un répertoire très long peut avoir plusieurs enregistrements chaînés.

• Une bitmap permet de récupérer les enregistrements libres dans la MFT.

• MFT est aussi un fichier.

Génie Informatique Chapitre 10.32


Systèmes d’exploitation
École Polytechnique de Montréal

16
Système de fichiers NTFS
(Windows)

Génie Informatique Chapitre 10.33


Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers NTFS (2)


Les attributs de la « Master File Table »

Chaque entrée de la table décrit un fichier ou un répertoire


Génie Informatique Chapitre 10.34
Systèmes d’exploitation
École Polytechnique de Montréal

17
Système de fichiers NTFS (3)
1 fichier -> une entrée de la MFT

Une entrée de la MFT -> Un fichier de 3 groupes de blocs


Génie Informatique Chapitre 10.35
Systèmes d’exploitation
École Polytechnique de Montréal

Système de fichiers NTFS (4)


1 fichier -> plusieurs entrées de la MFT

Un fichier nécessitant 3 entrées de la MFT

Génie Informatique Chapitre 10.36


Systèmes d’exploitation
École Polytechnique de Montréal

18
Partage de fichiers
Liens physiques et liens symboliques
• Un lien est une entrée d’un répertoire qui référence un fichier (ordinaire ou
répertoire) qui se trouve dans un autre répertoire.

• Les liens facilitent la navigation dans le système de fichiers et le partage de


fichiers.

• Deux types de liens :


– Liens physiques
– Liens symboliques :

Liens physiques :
• La référence est dans ce cas un numéro d’i-nœud. Plusieurs chemins
d’accès sont donc associés à un même fichier physique.

• Ce type de lien est possible uniquement si les chemins d’accès font


références uniquement à des répertoires gérés par un même système de
fichiers.

• L’appel système qui permet de créer un lien physique :


int link(char* oldpath, char* newpath)
Génie Informatique Chapitre 10.37
Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (2)


Liens physiques et liens symboliques

• Par exemple, l’appel système link(″origref″, ″../autreref″) opère comme suit :


– Il recherche dans le répertoire courant l’entrée du fichier ″origref″ puis
récupère son numéro du i-nœud. Il incrémente le nombre de références
à l’i-nœud (link count).

– Il ajoute dans le répertoire père du répertoire courant une entrée :


(″autreref″, numéro d’i-nœud du fichier ″origref″).

• La commande shell équivalente à link est : ln oldpath newpath

• Les deux chemins désignent le même fichier (newpath et oldpath


référencent le même fichier).

• Une fois les liens établis, le fichier pourra être désigné par l’un des deux
noms (chemins d’accès).

Génie Informatique Chapitre 10.38


Systèmes d’exploitation
École Polytechnique de Montréal

19
Partage de fichiers (3)
Liens physiques et liens symboliques

jupiter% cat origref


exemple de fichier avec plusieurs références
jupiter% ln origref ../autreref
jupiter% ls -l origref ../autreref
-rw------- 2 bouchene professeur 45 nov 15 11:06 origref
-rw------- 2 bouchene professeur 45 nov 15 11:06 autreref
jupiter% cat ../autreref
exemple de fichier avec plusieurs références
jupiter% rm origref
rm : supprimer origref (yes/no) ? y
jupiter% ls -l origref ../autreref
origref: Ce fichier ou ce répertoire n'existe pas
-rw------- 1 bouchene professeur 45 nov 15 11:06 autreref
jupiter% cat ../autreref
exemple de fichier avec plusieurs références
jupiter%

Génie Informatique Chapitre 10.39


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (4)


Liens physiques et liens symboliques
Problèmes :
• Les liens physiques peuvent devenir invalides après une opération de
défragmentation ou tout autre entraînant la modification des i-nœuds.

• Il y a risque de traiter plusieurs fois un même fichier physique.

Répertoire i-
. noeud 342
..
. Répertoire i-
.. noeud 256
Marc
Jean .
..
Répertoire
Mine clés 758
i-noeud 2 120
LMine 120

Génie Informatique Chapitre 10.40


Systèmes d’exploitation
École Polytechnique de Montréal

20
Partage de fichiers (5)
Liens physiques et liens symboliques

• L’appel système unlink permet de supprimer un lien physique à un fichier :


int unlink(char * path)

• Il supprime la référence path à un fichier. Si le fichier n’a plus de référence,


il est supprimé du disque.

Par exemple, unlink (″origref″) opère comme suit :


• Il localise, dans le répertoire courant, l’entrée telle que le nom de fichier est
″origref″.

• Il récupère le numéro de l’i-nœud puis supprime cette entrée du répertoire.

• Il décrémente le nombre de références au i-nœud.

• Si le nombre de références devient égal à 0, le fichier est supprimé du


disque (blocs des données et i-nœud).

Génie Informatique Chapitre 10.41


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (6)


Liens physiques et liens symboliques

Liens symboliques :
• La référence est dans ce cas un chemin d’accès (un pointeur indirect).

• Les liens symboliques permettent de créer des liens vers des fichiers qui ne
sont pas forcément gérés par le même système de fichiers.

• La destruction d’un lien symbolique vers un fichier n’affecte pas le fichier.

• La commande shell d’UNIX qui crée des liens symboliques est ln avec
l’option s pour symbolique. L’appel système est symlink

Par exemple,
• la commande «ln –s /usr/include/stdio.h stdio.h» crée une nouvelle
entrée dans le répertoire courant pour un nouveau fichier dont le nom est
stdio.h.
• Le contenu de ce nouveau fichier est le chemin d’accès
«/usr/include/stdio.h ». Le type du fichier créé est link (l).

Génie Informatique Chapitre 10.42


Systèmes d’exploitation
École Polytechnique de Montréal

21
Partage de fichiers (7)
Liens physiques et liens symboliques

fich1 467

fich2 843

:
: Lien physique vers fich1
fich1_physique 467

fich1_symbolique ./fich1

Lien symbolique vers fich1

Génie Informatique Chapitre 10.43


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (8)


Liens physiques et liens symboliques

Problèmes :
• Les liens symboliques vers un fichier deviennent invalides après
suppression ou déplacement du fichier.

• Il y a risque de traiter plusieurs fois un même fichier physique.

fich1 467
fich2 843
:
:
fich1_physique 467 Lien physique vers fich1
fich1_symbolique ./fich1

Génie Informatique Chapitre 10.44


Systèmes d’exploitation
École Polytechnique de Montréal

22
Partage de fichiers (9)
Liens physiques et liens symboliques

jupiter% ln /usr/include/stdio.h stdio.h


ln : stdio.h : se trouve dans un système de fichiers différent

jupiter% ln –s /usr/include/stdio.h stdio.h

jupiter% ls –l stdio.h
lrwxrwxrwx 1 inf3600 cours 20 nov 21 09 : 15 stdio.h ->
/usr/include/stdio.h

jupiter% cat stdio.h


//cette commande affiche le contenu du fichier /usr/include/stdio.h

Génie Informatique Chapitre 10.45


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (10)


Verrouillage de fichier

• Les processus qui désirent effectuer des accès exclusifs à un fichier peuvent
verrouiller, en une seule opération atomique, aussi bien un octet qu’un fichier entier.

• Deux sortes de verrouillage sont disponibles : partagé et exclusif.

• Si une portion d’un fichier est verrouillée par un verrou partagé, une seconde
tentative d’y superposer un verrou partagé est autorisée, mais toute tentative d’y
poser un verrou exclusif sera rejetée tant que le verrou n’est pas relâché.

• Si une partie de fichier contient un verrou exclusif, toute tentative d’en verrouiller une
quelconque portion sera rejetée tant que le verrou n’est pas relâché.

• Lorsqu’un processus demande la pose d’un verrou, il doit spécifier s’il veut être mis
en attente (bloqué) dans le cas où le verrou ne peut être posé.

• S’il choisit d’être bloqué, lorsque le verrou existant sera levé, le processus sera
débloqué et son verrou pourra être posé.

• S’il ne veut pas être bloqué, l’appel système se termine immédiatement, avec un
code qui indique si le verrouillage a pu être ou non effectué.

Génie Informatique Chapitre 10.46


Systèmes d’exploitation
École Polytechnique de Montréal

23
Partage de fichiers (11)
Verrouillage de fichier : Exemple
• 4 processus concurrents A, B, C et D partagent un même fichier. Les processus
font dans les l’ordre les demandes de verrouillage suivantes :
– Le processus A demande la pose d’un verrou partagé sur les octets 4 à 7 du
fichier.
– Le processus B demande de mettre un verrou partagé sur les octets 6 à 9.
– Le processus C demande la pose d’un verrou partagé sur les octets 2 à 11.
– Enfin, le processus D demande un verrouillage exclusif de l’octet 9 avec une
requête bloquante en cas d’échec.
Verrou partagé de A Verrou partagé de B

0 1 2 3 4 5 6 7 8 9 10 11 12
Verrou partagé de C

Le processus D est bloqué jusqu’à ce que l’octet 9 devienne libre


(jusqu’à ce que B et C libèrent leurs verrous).

Génie Informatique Chapitre 10.47


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (12)


Verrouillage de fichier : Appels système

• Le système UNIX offre plusieurs appels système pour poser ou libérer des
verrous sur des parties d’un fichier (fcntl, lockf etc).

• L’appel système lockf est l’un des plus simples :

int lockf(int fd, int function, int size) ;

• Il permet d’effectuer l’action indiquée par function sur la partie de taille size
(nombre d’octets), pointée par le pointeur de fichier.

• fd est le descripteur du fichier. Le mode d’ouverture doit être O_WRONLY


ou O_RDWR.

• lockf retourne 0 en cas de succès et –1 en cas d’échec.

Génie Informatique Chapitre 10.48


Systèmes d’exploitation
École Polytechnique de Montréal

24
Partage de fichiers (13)
Verrouillage de fichier : Appels système

• function indique l’action à faire :


– F_ULOCK libère le verrou posé sur la partie spécifiée par le pointeur de
fichier et size (nombre d’octets).

– F_LOCK pose un verrou (bloquante). Le processus n’est pas mis en


attente si le système détecte un interblocage.

– F_TLOCK pose un verrou (non bloquante). Si la partie à verrouiller n’est


pas libre, l’appel système lockf retourne –1.

– F_TEST teste si la partie spécifiée est verrouillée. Si la partie n’est pas


libre (verrouillée), l’appel système lockf retourne –1.

Génie Informatique Chapitre 10.49


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (14)


Verrouillage de fichier : Exemple 1

// programme partage.c
#include <unistd.h>
int main ( )
{ int i, fd=1; jupiter% gcc partage.c -o partage
if(fork()) jupiter% partage
{ for(i=0; i<5; i++) pere ecrit
{ write(fd,"pere ecris \n",13); fils ecrit
sleep(1); fils ecrit
} pere ecrit
} else { fils ecrit
for(i=0; i<4; i++) pere ecrit
{ write(fd,"fils ecrit \n",12); fils ecrit
sleep(1); pere ecrit
} pere ecrit
} jupiter%
return 0;
}

Génie Informatique Chapitre 10.50


Systèmes d’exploitation
École Polytechnique de Montréal

25
Partage de fichiers (15)
Verrouillage de fichier : Exemple 2
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h> else // il s’agit du fils
int main ( ) { lseek(fd,0,0); // verrouillé l’octet 0
{ int i, fd=1; if( lockf(fd, F_LOCK,1) <0)
if(fork()) //il s’agit du père { write(fd,"fils lockf failed\n",18);
{ lseek(fd,0,0); return (-1);
if( lockf(fd, F_LOCK,1) <0) }
{ write(fd,"pere lockf failed",18); for (i=0; i<4; i++)
return (-1); { write(fd,"fils ecrit \n",12);
} sleep(1);
for (i=0; i<5; i++) }
{ write(fd,"pere ecrit \n",13); write(fd,"fils va libérer le verrou\n",26);
sleep(1); lseek(fd,0,0);
} lockf(fd,F_ULOCK,0);
write(fd,"père va libérer le verrou\n",26); }
lseek(fd,0,0); close(fd);
lockf(fd,F_ULOCK,0); return 0;
wait(NULL); }
}

Génie Informatique Chapitre 10.51


Systèmes d’exploitation
École Polytechnique de Montréal

Partage de fichiers (16)


Verrouillage de fichier : Exemple 2 (suite)

jupiter% lockf jupiter% lockf


fils ecrit pere ecrit
fils ecrit pere ecrit
fils ecrit pere ecrit
fils ecrit pere ecrit
fils va libérer le verrou pere ecrit
pere ecrit père va libérer le verrou
pere ecrit fils ecrit
pere ecrit fils ecrit
pere ecrit fils ecrit
pere ecrit fils ecrit
père va libérer le verrou fils va libérer le verrou

Génie Informatique Chapitre 10.52


Systèmes d’exploitation
École Polytechnique de Montréal

26
La cohérence du système de fichier

• La plupart des ordinateurs ont un programme utilitaire qui vérifie la cohérence du


système de fichiers.

• Ce programme est exécuté à chaque démarrage du système surtout à la suite d’un


arrêt forcé.

• La vérification de la cohérence peut se faire à deux niveaux : blocs ou fichiers.

Au niveau des blocs :

• Au niveau des blocs, le vérificateur construit deux tables.

• La première indique pour chaque bloc occupé, le nombre de fois où le bloc est
référencé dans les i-nœuds des fichiers.

• La seconde indique pour chaque bloc libre le nombre de fois où il figure dans la liste
des blocs libres (ou la table de bits des blocs libres).

• Si le système de fichiers est cohérent, chaque bloc a un 1 soit dans la première table,
soit dans la seconde.

Génie Informatique Chapitre 10.53


Systèmes d’exploitation
École Polytechnique de Montréal

La cohérence du système de fichier (3)


Au niveau des blocs

Génie Informatique Chapitre 10.54


Systèmes d’exploitation
École Polytechnique de Montréal

27
La cohérence du système de fichier (2)
Au niveau des blocs

• Si un bloc n’apparaît ni dans la première table, ni dans la deuxième, le bloc est dit
manquant. Le vérificateur ajoute les blocs manquants à la liste des blocs libres.

• Si le bloc apparaît deux fois dans la liste des blocs libres, le vérificateur reconstruit la liste
des blocs libres.

• Le pire qui puisse arriver est qu’un bloc appartienne à deux fichiers (ou plus). Si on détruit
l’un des deux fichiers, le bloc sera placé dans la liste des blocs libres (il sera alors à la fois
libre et utilisé). Si on détruit les deux fichiers, le bloc figurera deux fois dans la liste des
blocs libres.

• Dans ce cas, la meilleure solution consiste à allouer un bloc libre, à y copier le bloc
commun et à remplacer le bloc commun dans l’un des deux fichiers par le nouveau.

• La dernière possibilité d’incohérence dans les deux tables est qu’un bloc soit, à la fois,
utilisé et libre. La solution dans ce cas consiste à retirer le bloc de la liste des blocs libres.

Génie Informatique Chapitre 10.55


Systèmes d’exploitation
École Polytechnique de Montréal

La cohérence du système de fichier (4)


Au niveau des fichiers

• Le vérificateur vérifie la cohérence du point de vue des liens. Chaque numéro de


nœud d’index (i-nœud) doit apparaître autant de fois dans la structure arborescente
qu’il possède de liens.

• Il commence au catalogue racine et parcourt récursivement toute l’arborescence pour


déterminer pour chaque numéro d’i-nœud le nombre de références.

• Il compare ensuite le nombre de références obtenu pour chaque numéro d’i-nœud


avec celui contenu dans l’i-nœud correspondant.

• Si les deux nombres sont différents, le système est dans un état incohérent. La
solution consiste à corriger dans l’i-nœud, la valeur du nombre de références.

• Dans la plupart des systèmes Unix, le programme fsck effectue cette tâche à chaque
démarrage, si nécessaire (man fsck pour plus de détails).

Génie Informatique Chapitre 10.56


Systèmes d’exploitation
École Polytechnique de Montréal

28
La protection
• Les systèmes de fichiers contiennent parfois des informations très importantes. Ils
doivent donc protéger ces informations contre les accès non autorisés et les pertes.

• Les causes des pertes sont les catastrophes naturelles, les erreurs matérielles ou
logicielles, les erreurs humaines.

• La plupart de ces problèmes peuvent être résolus si l’on effectue des sauvegardes
régulières.

• Le problème des intrus est beaucoup plus complexe. Pour assurer la protection
contre les intrus plusieurs mécanismes ont été mis en œuvre, par exemple :

– identification de l’utilisateur (mots de passe ou identification physique…)

– code de protection des objets

– Cryptage et décryptage des données.

Génie Informatique Chapitre 10.57


Systèmes d’exploitation
École Polytechnique de Montréal

Exercice

• On considère un système disposant d’un système de fichiers similaire à


celui d’UNIX avec une taille de blocs de données de 4KO (4096 octets) et
des pointeurs (numéros de blocs) définies sur 4 octets.

• On suppose que le i-noeud de chaque fichier compte 12 pointeurs directs, 1


pointeur indirect simple, 1 pointeur indirect double et 1 pointeur indirect
triple.

• On désire créer un fichier contenant un total de 20.000.000 (vingt millions)


de caractères (caractères de fin de ligne et de fin de fichier compris).
Quelle est la fragmentation interne totale sur le disque résultant de la
création de ce fichier ?
20 000 000 octets = 4882 * 4096 + 3328 octets
4883 = 12 + 4096 + 775
4096 – 3328 = 768

Génie Informatique Chapitre 10.58


Systèmes d’exploitation
École Polytechnique de Montréal

29