Chapitre 3 Systèmes de gestion de fichiers

Transcription

Chapitre 3 Systèmes de gestion de fichiers
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
490
..
.
ficelle
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
2
795
1450
type
d
d
−
droits
rwxr−xr −x
rwxr−xr −x
rwxr−x−−−
prop
0;0
470;47001
470;47001
taille
2048
1024
125
Contenu répertoires
/ repus
2
..
795
.
1450
fifre
Jean Privat (UQAM)
/
2
2
795
03 — SGF
..
.
repus
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