Vous êtes sur la page 1sur 54

Chapitre 3

Systèmes de gestion de fichiers

Jean Privat
Université du Québec à Montréal

INF3172 — Principes des systèmes d’exploitation


Automne 2016

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 1 / 54


Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 2 / 54


Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 3 / 54


Rappel

Rôles d’un SE
Gestion des processus
Gestion de l’espace mémoire
Gestion de l’espace disque
Gestion des entrées-sorties

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 4 / 54


Gestion de l’espace disque

Objectifs
Gérer l’espace, répondre aux demandes d’allocation
et de libération de l’espace
Donner à l’utilisateur une abstraction cohérente et
indépendante du mode de gestion de l’espace

Notion de base : le fichier


La partie du SE qui s’occupe des fichiers :
Système de gestion de fichiers (SGF)

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 5 / 54


Les fichiers

Besoins de l’utilisateur (et des logiciels)


Contenu défini par l’utilisateur
Fichiers nommés (plutôt que numérotés)
Organisés pour les retrouver facilement
Notion de propriétaire et droits d’accès
Indépendants du matériel
Il veut aussi un SGF extensible

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 6 / 54


Hiérarchie de fichiers

Sous Unix
La racine s’appelle / (slash) et elle est unique

Sous Windows
Plusieurs racines possibles (C :, etc.)

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 7 / 54


Fichiers sous Unix
Un principe Unix de base
Tout est fichier
Fichiers standards
Textes, exécutables, code source, images...
Contenu décidés par l’utilisateur

Fichiers spéciaux
Répertoires, fichiers physiques (dans /dev), liens
symboliques, tubes nommés...
Manipulation par des appels systèmes spécifiques
Règles au cas par cas
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 8 / 54
Partitions

Morceau du système de fichier


Chaque partition est indépendante
Mais partie d’un grand tout

Montage et démontage
Une partition est montée dans un répertoire

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 9 / 54


Partitions
Partition de l’espace disque
= Système de fichier simple
Contient tout le nécessaire pour sa bonne gestion

Se compose de deux parties


Espace de gestion
Espace de donnée

Différents types de partition


(différents systèmes de fichier)
FAT32, NTFS, HFS+, EXT4, BTRFS, XFS...

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 10 / 54


Partitions

Espace de gestion
Table des i-nodes (i-nœuds) : matricule des fichiers
Un moyen de connaître les blocs libres

Espace de données
Contient les contenus des fichiers
Utilisation de blocs de taille identique (en général)

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 11 / 54


Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 12 / 54


Table des inodes
Une entrée = un fichier
numéro d’inode
type de l’inode (fichier standard, répertoire...)
propriétaire (uid, gid)
droits (utilisateur, groupe, autre)
taille du fichier en octets
dates (plusieurs sortes)
nombre de liens durs
pointeurs vers blocs de donnée

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 13 / 54


Nom de fichiers et répertoires

Le nom des fichiers n’apparaît pas dans la tables des


inodes
Les donnés d’un répertoire contiennent uniquement
la liste des fichiers avec leurs numéros d’inodes et
leurs noms
253 ..
146 .
540 ficelle
490 repondeur

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 14 / 54


Droits et propriétaires

Système utilisateur-groupe-autres
Chaque utilisateur et associé à une identité (uid) et
à un groupe (gid)
Chaque processus lancé par un utilisateur est associé
à son uid et son gid
Chaque fichier du système possède un utilisateur
propriétaire et un groupe propriétaire

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 15 / 54


Droits des fichiers

Un triplet de 3 droits (rwx) est assigné à chaque


classe de propriétaire (ugo)
r (read/lecture) : Le contenu du fichier/répertoire
est accessible en lecture
w (write/écriture) : Le contenu du fichier/répertoire
est accessible en écriture (modifiable)
x (execute/exécution) : Le fichier est exécutable. Le
répertoire est traversable

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 16 / 54


Exemple
Table des inodes
inode type droits prop taille
2 d rwxr−xr −x 0;0 2048
795 d rwxr−xr −x 470;47001 1024
1450 − rwxr−x−−− 470;47001 125

Contenu répertoires
/ repus /
2 .. 2 ..
795 . 2 .
1450 fifre 795 repus

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 17 / 54


Dates (Unix)

Trois types de dates


mtime : date de dernière modification du fichier
ctime : date de dernière modification de l’entrée
dans la table des inodes
atime : date de dernier accès au fichier (lecture)

Représentation
Stockées en temps Unix

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 18 / 54


Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 19 / 54


Liens durs

Définition
Des entrées dans un ou plusieurs répertoires (avec
possiblement des noms de fichiers distincts) qui
référencent un même inode
Le champ nombre de liens durs de la table des
inodes compte le nombre de références

Piège
Les liens durs ne sont pas des liens

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 20 / 54


Création de liens durs

Commande ln et appel système link()


$ ln oldpath newpath

int link (const char ∗oldpath, const char ∗newpath)

Attention :
pas de distinction entre l’original et le lien
Tous les deux « sont » le même fichier

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 21 / 54


Suppression d’un fichier
Algorithme
Supprimer l’entrée dans le répertoire;
Décrémenter le nombre de liens durs;
si nombre de liens durs = 0 alors
Supprimer l’inode dans la table;
Libérer les blocs pointés;
fin

Commande rm et appel système unlink()


$ rm pathname
int unlink (const char ∗pathname)
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 22 / 54
Limites de liens durs

Forcément sur la même partition


Pas de liens durs entre répertoires
Pas forcément l’effet voulu lors de l’écrasement de
fichiers

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 23 / 54


Liens symboliques

Objectif
Résoudre les limitations des liens durs

Nouveau type de fichier (L)


Contenu : un chemin (relatif ou absolu)
Même vers un fichier spécial : répertoire, fichier
périphérique, un autre lien symbolique
Même vers une autre partition

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 24 / 54


Création de liens symboliques
Appel système symlink(), commande ln
$ ln −s oldpath newpath
int symlink(const char ∗oldpath,
const char ∗newpath)

Comportement
Le nombre de liens dur de l’orginal reste inchangé
Accéder au lien symbolique revient à manipuler le
fichier lié
Le SE fait le travail automatiquement

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 25 / 54


Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 26 / 54


Accès à l’inode

Commandes ls et stat
$ ls −li monfichier
4965657 −rwx−−−−−− 1 p r i v a t p r o f 2975
2007−08−29 1 7 : 1 5 m o n f i c h i e r

Appel système stat() et lstat()


int stat (const char ∗path, struct stat ∗buf);
int lstat (const char ∗path, struct stat ∗buf);

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 27 / 54


Modification de l’inode

Droits d’accès
chmod et chmod()

Propriétaires
chown, chgrp et chown()

Dates
touch et utime()

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 28 / 54


Manipulation des fichiers

Déplacer, renommer
Commande mv, appel système rename()

Copier
Commande cp, pas d’appel système

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 29 / 54


Manipulation de fichiers

Niveau Unix (norme POSIX, volume 2 du man)


creat(), open(), read(), write(), close()

Niveau C (norme C89, volume 3 du man)


fopen(), fread(), fwrite(), fprintf(), fclose()

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 30 / 54


Répertoires
Les répertoires sont des fichiers spéciaux
Manipulés de façon spéciale
Associent numéro d’inode et nom de fichier

Fonctions Unix (portables)


DIR *opendir(const char *nom) ;
struct dirent *readdir(DIR *dir) ;
int closedir(DIR *dir) ;
int chdir(const char *path) ;
char *getcwd(char *buf, size_t size) ;

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 31 / 54


Descripteurs de fichiers

Désignent un fichier ouvert


Dans un processus, chaque fichier ouvert manipulé
via un descripteur de fichier
C’est un entier de type int

Trois descripteurs par défaut


0 : entrée standard
1 : sortie standard
2 : sortie standard pour les messages d’erreur

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 32 / 54


Utilisation des descripteurs

Ouverture d’un fichier


int creat(const char *pathname, int mode) ;
retourne le descripteur de fichier (ou -1)

Exemple plus long


char ∗ message = " H e l l o World " ;
i n t f d = c r e a t ( " h e l l o " , S_IRWXU ) ;
w r i t e ( fd , message , s t r l e n ( message ) ) ;
close ( fd ) ;

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 33 / 54


Masque de création de fichiers
Quels droits pour les fichiers crées
C’est l’utilisateur qui choisit ?
C’est le programme qui choisit ?
C’est l’administrateur qui choisit ?
⇒ Il y a un moyen de combiner les trois
umask, le masque de création de fichiers
Chaque processus a un masque
Les droits de l’umask sont éliminés des fichiers crées
Règle de bonne programmation
Utiliser les droits les plus larges
L’umask fera le reste
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 34 / 54
Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 35 / 54


Adressage des fichiers
Rappel
L’espace de donnée est divisé en blocs
Les données d’un fichier sont réparties entre blocs
(la table des inodes en contient l’adresse)

Pointeurs vers les blocs de donnée


Pointeur direct : contient l’adresse d’un bloc de
donnée
Pointeur indirect : contient l’adresse d’un bloc
contenant des pointeurs directs
Pointeur indirect double : contient l’adresse d’un
bloc contenant des pointeurs indirects
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 36 / 54
Adressage des fichier
Exercice
Dans la table des inodes
Il y a 13 pointeurs de blocs :
10 sont des pointeurs directs
1 est indirect
1 est indirect double
1 est indirect triple
Un bloc fait 2k
Un pointeur de bloc est représenté sur 32 bits

Question
Quel est la taille maximale d’un fichier ?
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 37 / 54
Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 38 / 54


Table des descripteurs
Rappel
Un processus manipule des descripteurs de fichiers
Le SE s’occupe de l’accès et de la cohérence des
fichiers
Mise en œuvre
Une table des descripteurs par processus
Le descripteur est un indice de cette table
Le SE s’occupe des tables des inodes
Le SE gère un tampon pour optimiser les accès

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 39 / 54


Tables du SE (globales)
Table des inodes en mémoire (TIM)
Une entrée par fichier ouvert
C’est l’ensemble des caches de l’ensemble des
fichiers ouverts du SE
Le SE essaye de minimiser les accès disques
Il y a un asynchronisme entre les demandes de
l’utilisateur et les écritures effectives sur le disque.

Table des fichiers ouverts (TFO)


Une entrée par demande d’ouverture de fichiers

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 40 / 54


Contenu des tables
Table des descripteurs (TD)
pointeur vers la table fichiers ouverts

Table fichiers ouverts (TFO)


nbre descripteurs (de TD)
mode d’ouverture (lecture, écriture)
position (voir appel système lseek())
pointeur vers la table des inodes en mémoire

Table inodes en mémoire (TIM)


nombre pointeurs (de TFO)
données des fichiers (méta-infos, caches)
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 41 / 54
Ouverture multiple de fichiers
Principe
Un même fichier peut être manipulé
indépendamment par deux processus

Exemple
Deux processus font un open() d’un même fichier
Chacun a un descripteur
Chaque descripteur pointe vers une entrée de la
table des fichiers ouverts
Chaque entrée de la table des fichiers ouvert pointe
vers le même inode en mémoire

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 42 / 54


Héritage entre processus

Lors d’un fork() (en plus du reste)


La table des descripteurs est dupliquée
Les compteurs de la tables des fichiers ouverts sont
incrémentés
L’entrée dans la tables des fichiers ouverts est
partagée en particulier le compteur de position

Exemple
Entrée et sorties standard

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 43 / 54


Duplication de descripteurs

Descripteurs synonymes
Deux descripteurs d’un même processus peuvent
pointer une même entrée dans la table des fichiers
ouverts
Appels systèmes dup() et dup2()

Quel est l’intérêt ?


Redéfinir les entrées et sorties standard
Communication par tube (pour plus tard)

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 44 / 54


Exemple

Redirection de la sortie standard


int o = creat ( " s o r t i e " , 0666);
i f ( o == −1)
{
perror (" Impossible d ’ ouvrir ’ sortie ’" );
exit (1);
}
close (1);
dup2 ( o , 1 ) ;
p r i n t f ( " H e l l o World ! \ n " ) ;

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 45 / 54


Fermeture d’un fichier
Algorithme du close()
Le descripteur est libéré;
Le compteur dans la TFO est décrémenté;
si compteur FO == 0 alors
L’entrée dans la TFO est libérée;
Le compteur dans la TIM est décrémenté;
si compteur IM == 0 alors
L’entrée dans la TIM est synchronisée;
L’entrée est libérée;
fin
fin

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 46 / 54


Fin des processus

Le SE nettoie
Lors de la terminaison d’un processus, le SE ferme
tous les descripteurs restés ouverts.

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 47 / 54


Pour résumer
Lors d’un open()
Une entrée dans la TFO est crée
Le processus obtient un descripteur vers cette entrée

Cette entrée pointe vers la TIM


Soit vers une nouvelle entrée
Soit vers une entrée existante
Deux descripteurs peuvent pointer une même
entrée dans la TFO
Soit par héritage : fork()
Soit par duplication de descripteurs : dup()
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 48 / 54
Plan
1 Systèmes de fichiers
2 Table des inodes
3 Liens durs et liens symboliques
4 Accès et modification des fichiers
5 Adressage des fichiers
6 Traitement des fichiers ouverts
7 Fiabilité de l’espace disque

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 49 / 54


Besoin de fiabilité
L’important
Les données sont la partie essentielle d’un système
informatique
« Système d’information » : la valeur est dans les
informations, pas dans le système

Administrateur système
Un des rôle d’un administrateur système est de
garantir que les données ne sont ni perdues ni
corrompues

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 50 / 54


Sauvegarde (backup)
Objectifs
Récupérer d’une catastrophe naturelle
Récupérer d’une erreur humaine

Moyens
Dupliquer les données
Conserver un historique
Stocker le double ailleurs
Deux approches
Sauvegarde physique vs. sauvegarde logique

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 51 / 54


Cohérence d’un SGF

Cohérence
L’incohérence d’un système de fichier peut amener à
des pertes de données
Dans l’idéal, la cohérence doit pouvoir être garantie
par le SGF

En pratique, cet idéal n’est pas atteignable


besoin de vérifier la cohérence
besoin de corriger les incohérences

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 52 / 54


Incohérences d’un SGF
Quelques exemples
Un bloc est à la fois libre et utilisé
Le nombre des liens durs est incohérent
Deux fichiers occupent un même bloc
Les dates indiquent le futur
La taille est plus grande que le maximum
Un répertoire contient un fichier avec un numéro
d’inode inexistant
Deux problèmes
Détecter
Corriger
Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 53 / 54
Comment vérifier

Certaines vérifications prennent du temps


parcours nécessaire de l’arborescence
parcours de la table des inodes et des blocs
d’indirection
Quand faire les vérifications
le moins souvent possible
quand un risque incohérence est détecté

Jean Privat (UQAM) 03 — SGF INF3172 — Automne 2016 54 / 54

Vous aimerez peut-être aussi