UNIX: Système de Gestion de Fichiers

Transcription

UNIX: Système de Gestion de Fichiers
UNIX:
Système de Gestion de Fichiers
C. Crochepeyre Cnam
UNIX: SGF
1
INTRODUCTION
•
Système de Gestion de Fichiers
– Sous système Unix
– Les fichiers sont:
• des fichiers du système d’exploitation
– programmes
– bibliothèques
– données paramètres
• des fichiers « périphériques »
• des moyens de communication entre processus
• des fichiers de données
C. Crochepeyre Cnam
UNIX: SGF
2
Interface appels système
système d’E/S
Système de
gestion des fichiers
Système de
gestion des processus
cache
caractères
blocs
contrôleurs
Interface matériels
C. Crochepeyre Cnam
UNIX: SGF
3
•
Les périphériques
– Système de gestion des E/S
• couche entre le S.G.F et le matériel
– Primitives d’accès aux périphériques dans les pilotes
• pilotes périphériques type caractères
• pilotes périphériques type blocs
– Actions sur les contrôleurs
un contrôleur par type de périphérique (ou 1 seul)
– Caractéristique Unix:
• l’interface d’appel périphérique utilise le SGF
• un périphérique = un fichier type caractère ou bloc
C. Crochepeyre Cnam
UNIX: SGF
4
•
Disque sous Unix
– Périphérique vu comme un fichier de type bloc
• /dev/hdxn (ide)
/dev/sdxn (scsi)
x = <a, …. >
le lecteur a, b,….
n = n°
n° de la partition
– Partitions du disque
• Partition primaire ou logique
– hda1, hda2, hda3 partitions primaires (maxi 4 si pas de
partition étendue)
– hda4 partition étendue ayant hda5, hda6…partitions logiques
• Utilisation des partitions
– une seule partition active : celle du SE
– 1 FS associé
– une partition pour le swap
– une partition dédiée si besoin (SGBD)
Remarques: lilo (LInux LOader) permet de booter plusieurs SE sur un PC
C. Crochepeyre Cnam
UNIX: SGF
5
GÉNÉRALITÉS
•
Les systèmes de fichiers / Unix
– une seule arborescence
– composé de un ou plusieurs systèmes de fichiers
– montage possible: système unique
– un système de fichiers accessible sur disque par:
• un n° périphérique logique
n° du système = n° de périphérique
• des adresses physiques calculées par le pilote
– FS Unix monté sur la racine /
• exécution /etc/rc avec fichier fstab (suite des FS à monter dans
l’ordre)
• vfs: virtual file system permet au noyau Linux de reconnaître le FS
– Plusieurs variantes de FS
C. Crochepeyre Cnam
UNIX: SGF
6
•
Quelques systèmes de fichiers sur linux
Non journalisés (pas de journal de récupération en cas de panne)
– Ext2fs
– FAT12. FAT16, FAT32 ,VFAT….
Journalisés
– ext3fs
– reiserfs
– XFS
– NTFS….
Et pour les réseaux
– NFS….
Certains de ces systèmes sont issus ou supportés sur d’autres systèmes d’exploitation
C. Crochepeyre Cnam
UNIX: SGF
7
•
L’arborescence FHS (File Hierarchy Standard).
/
boot
bin dev
etc
home
mnt
proc
root
sbin tmp
usr
var
Point de montage
cdrom
floppy
/
marc
include
local
bin
jean
C. Crochepeyre Cnam
mount /dev/hda2 /home
UNIX: SGF
8
•
VFS: système gestion de fichiers virtuel
– Cohabitation de plusieurs systèmes de gestion de fichiers
– Un seul système de fichiers virtuel
– VFS est une couche logicielle insérée dans le noyau au dessus
des FS.
Appels système
VFS
Ext2fs
C. Crochepeyre Cnam
NTFS
UNIX: SGF
BSD
9
Modèle de fichier commun VFS: 4 objets
– Chaque objet pointe sur les fonctions associées à cet objet
• Objet super bloc: bloc de contrôle du FS monté
• Objet i-nœud: bloc de contrôle, associé à un nombre d’inœuds, qui identifie les fichiers du FS
• Objet fichier: liaison entre le fichier ouvert et un processus
• Objet dentry ou nom de fichier : liaison entre l’entrée du
répertoire et le fichier
C. Crochepeyre Cnam
UNIX: SGF
10
Les Fichiers
•
•
Fichier
– ensemble de données: fichier de données
• répertoire (d)
• réguliers ou ordinaires : programmes, données.... (-)
• liens symboliques (l)
– Communication: fichiers d’échange
• tube nommé (p)
• socket (s)
– ressource périphérique: fichier matériel
• bloc (b)
• caractères (c)
Identification : un nom
C. Crochepeyre Cnam
UNIX: SGF
11
Organisation disque
– bloc
• unité d’échange: 1024... octets
– blocs du système
• boot: 1er bloc ou autres blocs sur disque
• super-bloc: état du système de fichiers
– n° premiers blocs libres
– liste des i-nœuds libres
• table des i-nœuds configurée à l’installation
• blocs des données
– i-nœud (i-node) est un descripteur conservant les informations du
fichier sur disque
bloc boot
C. Crochepeyre Cnam
super-bloc
table des i-nœuds
UNIX: SGF
données
12
Exemple: allocation des blocs Linux Ext2fs
• Partition en groupes de blocs
• Choix taille des blocs: 1024 à 4096
• Une partition est composée de :
– un bloc d’amorçage
– un ensemble de groupes de blocs
– avec les blocs de données
bloc
d’amorçage
•
•
Bloc groupe 0
Bloc groupe 1
Bloc groupe n
Taille maxi d’une partition 4TO (avec VFS)
Objectif: localisation rapprochée des données pour chaque fichier
C. Crochepeyre Cnam
UNIX: SGF
13
Chaque groupe de bloc Ext2 contient:
– une copie du super bloc du FS (1 bloc)
– une copie des descripteurs de groupe de blocs (n blocs)
– table d’occupation des blocs du groupe (bitmap) (1 bloc)
– table d’occupation des i-nœuds du groupe (bitmap) (1 bloc)
– table des i-nœuds du groupe (n blocs)
– blocs de données du fichier (n blocs)
exemple:
– Si une partition est de 4GO, un bloc est de 2KO
• Bitmap des blocs de données = 8(bits) * 2K = 16K bits car 1 bit/ bloc
• Nb de blocs dans un groupe : 16K blocs de données (16384 blocs)
• Nb d’octets de données dans un groupe : 2KO(1 bloc) * 16K = 32 MO
• Pour 4GO il faudra 4GO/32MO = 128 groupes de blocs
C. Crochepeyre Cnam
UNIX: SGF
14
• Le super bloc - Gestion de l’espace disque
–
–
–
–
–
–
–
–
–
–
la taille du FS. (nb de blocs)
le nombre de blocs libres dans le FS
une liste des blocs libres disponibles dans FS
l’indice du 1er bloc libre dans la liste des blocs libres
la taille de la table des i-nœuds
le nombre d’i-nœuds libres dans le FS
une liste d’i-nœuds libres dans le FS.
l’indice du 1er i-nœud libre dans la liste des i-nœuds libres
des champs verrous pour les listes des blocs et i-nœuds libres
un drapeau indiquant si le super bloc a été modifié
C. Crochepeyre Cnam
UNIX: SGF
15
Exemple : super bloc Linux Ext2
•
•
•
•
•
•
•
•
•
•
•
identification du système de fichiers
heure de la dernière opération de montage, de la dernière écriture
taille du système de fichiers en blocs
taille d’un bloc
taille de la structure i_noeud
nb de blocs et i-nœuds libres
nb de blocs et i-nœuds par groupe
n° du 1er bloc utilisable
n° du 1er i_noeud non alloué
heure dernier contrôle de cohérence et fréquence
et des informations complémentaires
Le super bloc est dupliqué dans chaque groupe lors du contrôle de cohérence
C. Crochepeyre Cnam
UNIX: SGF
16
descripteurs Linux Ext2
•
Descripteurs groupe de blocs
– un descripteur / groupe de blocs
• les n° des blocs bitmap gérant
– la liste des blocs libres
– la liste des i-nœuds libres
• le nb de blocs libres , le nb d’i-nœuds libres
• le nb de répertoires dans le groupe
• n° du premier bloc de la table des i-nœuds
•
Bitmap
– Vecteurs de bits pour gérer
• La liste des i-nœuds libres
• La liste des blocs libres
• 0/ libre 1/ occupé
Descripteurs dupliqués dans chaque groupe de blocs
C. Crochepeyre Cnam
UNIX: SGF
17
• Arborescence
racine
dir_3
toto.c
•
•
situer un fichier dans l’arborescence
• son nom
• son chemin d’accès: /dir_3/ toto.c
fichiers système: idem mais avec protections renforcées
C. Crochepeyre Cnam
UNIX: SGF
18
• Notion de fichier
– identification: nom du fichier
– localisation fichier par un algorithme (‘namei’)
• parcours des blocs de données type‘répertoire’
• recherche du nom du fichier dans le répertoire
dir_3
17
prog.c
26
toto.c
21 dir_b
nom du fichier
n° i-nœud
• i-nœud du fichier dans la table des i-nœuds
– pointeurs vers blocs de données
C. Crochepeyre Cnam
UNIX: SGF
19
répertoire
– fichier de type ‘d’ référencé dans la table des i-nœuds
• pointe vers des blocs de données type ‘répertoire’
• bloc données répertoire = n * 16 octets
– n° i-nœud
– nom du fichier ou répertoire
– racine /: i-nœud n° 2
bloc de données type ‘répertoire’
17 prog.c 26 toto.c
21 dir_b
2 octets
nom du répertoire
14 octets
n° i-nœud
C. Crochepeyre Cnam
UNIX: SGF
20
Algorithmes
– L’algorithme ‘namei’ appelle d’autres algorithmes:
• ‘iget’
attribuer i-nœud en mémoire
• ‘iput’
libérer i-nœud en mémoire
• ‘bmap’
maj paramètres noyau pour accès fichier
– D’autres algorithmes:
• ‘alloc’
réservation espace fichier sur disque
• ‘free’
libération espace fichier
• ‘ialloc’
réservation i-nœud pour un fichier
• ‘ifree’
libération i-nœud d’un fichier
C. Crochepeyre Cnam
UNIX: SGF
21
Exemple : répertoire Linux Ext2
– Un répertoire contient:
•
•
•
•
•
n° i-nœud
longueur de l’entrée du répertoire
longueur du nom du fichier (max 255)
type du fichier
nom du fichier
C. Crochepeyre Cnam
UNIX: SGF
22
LES I-NOEUDS
• Définition
– i-nœud (i-node) est un descripteur conservant les informations du
fichier sur disque
– i-nœud = nœud d’index
– structure de taille fixe (ex 64 octets/i-nœud)
– table des i-nœuds configurée à l’installation
n°1
blocs défectueux
n°2
racine pour le système de fichiers
– gestion des i-nœuds
• sur disque
• en mémoire
C. Crochepeyre Cnam
UNIX: SGF
23
• i-nœud sur disque
–
–
–
–
un fichier = un i-nœud -> bloc de données
table des i-nœuds après le super-bloc
un n° = n° entrée dans table des i-nœuds du disque
i-nœud utilisé par le noyau
– contenu des informations dans un i-nœud (64 octets):
•
•
•
•
•
•
•
nom propriétaire
type du fichier
permissions
date dernier accès
nombre de liens vers d’autres fichiers (répertoire)
taille: nombre d’octets
table des adresses des blocs de données
C. Crochepeyre Cnam
UNIX: SGF
24
•
Exemple
un i-nœud
dupont
etudiants
ordinaire
rwxr--r-x
23 nov 1999 14:25
22 nov 1999 12:54
23 nov 1999 14:15
5412 octets
table d’adresses des blocs de données
C. Crochepeyre Cnam
UNIX: SGF
• propriétaire
• groupe
• type du fichier
• droits d’accès
• date dernier accès
• date fichier modifié
• date i-nœud modifié
• taille
• adresses données
25
Exemple: i-nœud Linux Ext2
– taille d’un i-nœud: 128 octets
– bloc de 1024 octets = 8 i-nœuds/bloc
– Contenu structure
•
•
•
•
•
•
•
•
•
•
type fichier et droits
identifications propriétaire et groupe
heures du dernier accès,
heure de la dernière maj de l’i-nœud, maj des données
nb liens vers d’autres fichiers
taille fichier
nb blocs de données du fichier
listes de contrôles d’accès: répertoire et fichier
table des adresses des blocs de données, etc…
et pointeurs sur les blocs de données
C. Crochepeyre Cnam
UNIX: SGF
26
• i-nœud en mémoire
– Au montage du système de fichiers, des données du disque sont
transférées en mémoire, tampon et cache de tampon. Exemple:
super bloc dans tampon
– appel fichier => copie i-nœud en mémoire
– ajout d’informations pour accès physique aux données
• état i-nœud: bloqué ou non
• n° logique périphérique
• n° ligne dans table des i-nœuds en mémoire
• pointeurs: chaînage des i-nœuds en mémoire
• compteurs de fichiers ouverts
C. Crochepeyre Cnam
UNIX: SGF
27
Exemple: données Linux Ext2 en mémoire
– Super bloc (tampon)
– Descripteurs de groupe (tampon)
– Bitmap de blocs (cache de tampon, nb limité)
– Bitmap d’i-nœuds (cache de tampon, nb limité)
– i-nœud (cache de tampon si utilisation)
– Bloc de données (cache de tampon si utilisation)
Ne sont pas en mémoire
– i-nœud libre
– bloc de données libre
C. Crochepeyre Cnam
UNIX: SGF
28
Attribuer un i-nœud mémoire
– demande d’accès à un fichier:
• procédure ‘namei’
nom fichier -> n° i-nœud -> table des i-nœuds disque
– procédure d’attribution i-nœud mémoire
• iget ()
• deux cas:
– i-nœud n’est pas en mémoire
– i-nœud est en mémoire
• dans les i-nœuds (actif)
• dans la liste des i-nœuds libres (inactif)
C. Crochepeyre Cnam
UNIX: SGF
29
i-nœud n’est pas en mémoire
– recherche adresse physique de l’entrée de l’i-nœud dans table des inœuds disque
– copie i-nœud dans les i-nœuds en mémoire en récupérant une place
dans la liste des i-nœuds libres
C. Crochepeyre Cnam
UNIX: SGF
30
i-nœud est en mémoire
• actif
– verrouillé alors attente
– non verrouillé compteur accès +1
• inactif dans le cache
– ré allocation i-nœud mémoire
– compteur accès +1
C. Crochepeyre Cnam
UNIX: SGF
31
Libération d’un i-nœud mémoire
– libération i-nœud: accès libéré
– procédure libération i-nœud de la mémoire
• iput ()
• compteur = compteur -1
– si compteur = 0, utilisé par aucun processus
• copie i-nœud maj sur disque
• i-nœud mémoire placé dans la liste des i-nœuds
libres en mémoire
– remarque: si compteur de liens nul (plus aucune donnée dans le
fichier) alors suppression des blocs de données
C. Crochepeyre Cnam
UNIX: SGF
32
• Création d’un i-nœud disque
– création d’un fichier
– paramètres:
• nom du fichier
• chemin d’accès jusqu’au répertoire
• type du fichier
– procédure d’allocation d’un i-nœud sur disque
• ialloc() recherche i-nœud libre
– scrute liste des i-nœuds libres dans super-bloc
• la liste est vide
• la liste n’est pas vide
C. Crochepeyre Cnam
UNIX: SGF
33
•
•
•
Cas liste vide :
– recherche de tous les i-nœuds libres de la table des i-nœuds (type = 0)
– maj de la liste des i-nœuds libres dans super bloc
– si aucun i-nœud libre alors ... plus de place
Cas liste non vide:
– choix i-nœud ‘plus grand n° libre’
– accès à l’i-nœud disponible dans la table des i-nœuds
Dans les deux cas:
– écrire les éléments dans l’i-nœud de la table des i-nœuds
– décompter le nombre d’i-nœuds libres dans super bloc
– libérer l’i-nœud dans la liste des i-nœuds libres du super bloc
C. Crochepeyre Cnam
UNIX: SGF
34
liste des i-nœuds libres (super-bloc)
12
17 54 125 127 250
vide
table des i-nœuds
d
blocs de données
entrée 0
n°250
l
d
C. Crochepeyre Cnam
UNIX: SGF
35
•
Suppression d’un i-nœud disque
– suppression d’un fichier
– paramètres:
• nom du fichier
• chemin d’accès jusqu’au répertoire
– procédure de suppression d’un i-nœud sur disque
• ifree() suppression dans table des i-nœuds disque
– verrou super bloc doit être libéré
– scrute liste des i-nœuds libres dans super-bloc
• encore de la place dans la liste
• la liste est pleine
C. Crochepeyre Cnam
UNIX: SGF
36
•
•
•
Cas place dans la liste:
– ajout n° i-nœud libéré
– maj ‘plus grand n° libre’ dans super bloc
– maj compteur nombre i-nœuds libres
Cas liste pleine:
– si n° i-nœud libéré < ‘plus grand n° libre’
• n° i-nœud libéré remplace ‘plus grand n° libre’
– sinon pas de maj liste
Dans les deux cas:
– maj table des i-nœuds disque (type = 0)
– suppression des blocs de données
Cette gestion des i-nœuds, sur disque et en mémoire , (version SystemV)
diffère selon les FS.
C. Crochepeyre Cnam
UNIX: SGF
37
L’INTERFACE D’ACCÈS
•
Primitives d’accès à un fichier
– par une commande du shell ou script
– par une requête lors d’un appel dans un programme
– Appels système : mode noyau
•
Deux types de données
– données mémoire:
• procédures système d’accès
• informations temporaires
– données disque:
• données attachées au fichier sur disque
C. Crochepeyre Cnam
UNIX: SGF
38
•
Descripteur
–
–
–
–
infos fichier transférées en mémoire lors de l’ouverture du fichier
un descripteur créé par fichier
une table des descripteurs par processus
interface entre le processus et le FS. pour les échanges
•
Descripteurs particuliers
– entrée standard (clavier): n° 0
– sortie standard (écran): n°1
– sortie erreur (fichier erreurs): n°2
•
Structure d’un descripteur:
– /usr/sys/include/sys/user.h
C. Crochepeyre Cnam
UNIX: SGF
39
•
Table des fichiers
–
–
–
–
une table des fichiers pour tous les processus est gérée par le noyau
créée à partir de la table des i-nœuds disque
description des propriétés du fichier et éléments pour l’accès
un appel fichier = une entrée dans la table
• avec opération demandée (r,w,r/w)
– structure d’une entrée dans /usr/sys/include/sys/file.h
– chaque élément de la table pointe l’i-nœud du fichier dans table des inœuds en mémoire
C. Crochepeyre Cnam
UNIX: SGF
40
descripteurs
table des fichiers
proc_1
Fic_A
Fic_A
R
Fic_A
R/W
table des i-nœuds
Fic_A
proc_2
Fic_A
C. Crochepeyre Cnam
UNIX: SGF
41
•
exemple: structures VFS
T fichiers ouverts
Processus 1
Objets fichier
F3
Objet dentry
Objet i-node
2
T fichiers ouverts
Processus 2
F3
C. Crochepeyre Cnam
UNIX: SGF
42
LES PERMISSIONS
•
•
•
Contrôle des accès aux fichiers renforcé sous Unix:
– système multi utilisateurs
– fichiers système et fichiers utilisateurs sous le même système de
gestion des fichiers
niveaux de protection:
– droits -> r: lecture w: écriture x: exécution
– pour le propriétaire du fichier
– pour le groupe d’usagers dans lequel se situe le propriétaire
– pour tous les autres utilisateurs
décision des niveaux de protection:
– le propriétaire
– le su
C. Crochepeyre Cnam
UNIX: SGF
43
ORGANISATION DES FICHIERS SUR DISQUE
•
•
Organisation
– non contigüe, aléatoire
– Gestion dynamique de l’espace du disque
Blocs
– de taille égale
– 2 types de blocs
• blocs de données
• blocs d’adresses: adresses vers des blocs de données ou vers des
blocs d’adresses
– table des i-nœuds sur disque utilise ces différents types de blocs
C. Crochepeyre Cnam
UNIX: SGF
44
•
•
•
Pour chaque i-nœud de la table des i-nœuds:
– 13 entrées: une table des adresses des blocs fichiers
• 10 @ directs: 10 n° de blocs de données (ou 12 pour Ext2)
• 3 @ indirectes:
– n° bloc indirect simple: n° du bloc ayant 256 n° de blocs de
données
– n° bloc indirect double: n° du bloc ayant 256 n° de blocs
d’adresses
– n° bloc indirect triple: n° du bloc ayant 256 n° de blocs
d’adresses de blocs d’adresses
Si adresse sur 32 bits et bloc de 1024 octets
=> taille maxi / fichier 16 GO (en théorie)
un bloc libre est à zéro
C. Crochepeyre Cnam
UNIX: SGF
45
Ta ble de s a dre sse s
da ns un i-noe ud
ta ble blocs
1 0 n° de blocs
indire ction 1
indire ction 2
indire ction 3
blocs indire cts 1
C. Crochepeyre Cnam
UNIX: SGF
blocs donné e s
46
•
Attribution des blocs
•
super bloc
– nb de blocs libres
– une liste
• de 50 n° de blocs libres (cache)
• un pointeur vers d’autres listes de blocs libres
utilitaire mkfs: création S.F.
– chaînage des blocs libres
algorithme alloc()
– allocation d’un bloc à un fichier à partir de la liste
• si liste pleine: n° bloc pris dans la liste
• si liste épuisée: liste suivante remplace liste super bloc
•
•
C. Crochepeyre Cnam
UNIX: SGF
47
Exemple
liste des blocs libres dans super bloc
super bloc
14
21
105
52
25
10
27
103
18
46
pointeur
82
72
68
261
bloc 14
Le 1er n° pointe vers une autre liste de blocs libres
C. Crochepeyre Cnam
UNIX: SGF
48
Récupération d’un bloc libre:
liste des blocs libres dans super bloc pleine
super bloc
14
21
105
52
25
10
25
10
107
alors bloc 107 attribué :
super bloc
14
C. Crochepeyre Cnam
21
105
52
UNIX: SGF
---
49
Récupération d’un bloc libre
liste des blocs libres dans super bloc vide
11
super bloc
14
21
105
52
25
10
107
77
107
77
bloc n°11
bloc 11 attribué alors:
liste des blocs libres dans super bloc
super bloc
C. Crochepeyre Cnam
14
21
105
52
UNIX: SGF
25
10
50
•
Libération des blocs
•
super bloc
– recherche d’un bloc libre
•
algorithme free()
– libération des blocs d’un fichier
– attachement à la liste des blocs libres du super bloc
• si liste non pleine: maj dans cette liste
• si liste pleine: liste pleine écrite dans ce bloc libéré et un
pointeur dans la liste sur ce nouveau bloc libre
C. Crochepeyre Cnam
UNIX: SGF
51
liste des blocs libres dans super bloc pleine
super bloc
14
21
105
52
25
10
107
77
bloc 11 libre alors:
super bloc
11
14
21
105
52
25
10
107
77
bloc n°11
C. Crochepeyre Cnam
UNIX: SGF
52
liste des blocs libres dans super bloc non pleine
super bloc
14
21
105
52
25
10
107
52
25
10
107
bloc 11 libre alors:
super bloc
C. Crochepeyre Cnam
14
21
105
UNIX: SGF
11
53
•
Répertoires
– Fichier de type ‘d’
– Accéder à un i-nœud d’un répertoire permet d’accéder aux blocs
de données du répertoire
– Blocs de données du répertoire
• n entrées dans un bloc
– Données au format:
• n° i-nœud du fichier
• nom de fichier
C. Crochepeyre Cnam
UNIX: SGF
54
– Chemin d’accès
• Définir le chemin d’accès au fichier
• syntaxe:
– chaîne de caractères
– plusieurs éléments séparés par /
– chaque élément est un nom de répertoire
– dernier élément est le nom du fichier
– le premier / est le répertoire racine
/users/étudiants/informatique/gaston/fichier.exe
C. Crochepeyre Cnam
UNIX: SGF
55
– répertoire particuliers
.
..
nom du répertoire courant
nom du répertoire parent
– un n° i-nœud associé à chacun des noms de fichier dont:
• le répertoire courant
• le répertoire parent
C. Crochepeyre Cnam
UNIX: SGF
56
.
bloc répertoire
..
1
.
bloc 125 répertoire
..
9
1
1
4
bin
7
-
5
lib
3
etc
9
i-nœud 9
Infos
17
claude
57
luc
44
prog.exe
infos
125
688
/usr
/usr/prog.exe
usr
nom fichier
i-nœud 44
n° i-nœud
C. Crochepeyre Cnam
UNIX: SGF
57
– Conversion nom_fichier en i-nœud
• n° i-nœud et nom fichier dans bloc données du répertoire
• l’algorithme ‘namei’
– pour chaque niveau, convertit nom et n°
– vérifie les droits d’accès
– parcourt les niveaux jusqu’à trouver le nom du fichier
C. Crochepeyre Cnam
UNIX: SGF
58
LES PRIMITIVES
•
Structure commune des fichiers
– dans /usr/sys/include/sys/stat.h
struct stat
{ dev_t st_dev;
identif disque logique
ino_t st_ino;
n° fichier sur disque
mode_t st_mode;
type du fichier et droits accès
nlink_t st_nlink;
nb liens physiques
uid_t st_uid;
propriétaire
gid_t st_gid;
groupe
dev_t st_rde;
identif disque logique (bloc/car)
off_t st_size;
taille en octets
time_t st_atime;
date dernier accès
C. Crochepeyre Cnam
UNIX: SGF
59
int st_spare1;
time_t st_mtime; date dernière modif
int st_spare2;
time_t st_ctime; date dern modif i-noeud
int st_spare3;
uint_t st_blksize; taille d’un bloc dans un fichier
int st_blocks;
blocs alloués pour le fichier
uint_t st_flags; flags utilisateur
uint_t st_gen;
n° génération du fichier
};
C. Crochepeyre Cnam
UNIX: SGF
60
•
Informations fichier
– récupération dans une structure stat des informations du fichier
#include <sys/types.h>
#include <sys/stat.h>
int stat (const char *ef, struct stat *pt_stat)
int fstat (const int desc, struct stat *pt_stat)
ex:
C. Crochepeyre Cnam
struct stat bufstat
if (stat(“fic1.c”, &bufstat) ==-1)
perror (“erreur stat”);
UNIX: SGF
61
•
Les liens
– Association: nom fichier <-> i-noeud
– Nombre de liens: nombre de fois qu’un i-nœud est référencé dans
les répertoires
– 2 types : lien physique et symbolique
i-nœud xxxxx
C. Crochepeyre Cnam
UNIX: SGF
62
17
Fichier.doc
23
prog.exe
vers un fichier de données
nb lien = 1
données
i-nœud 17
17
usr
23
prog.exe
vers un fichier répertoire
nb lien = 2
17
.
10
..
i-nœud 17
C. Crochepeyre Cnam
UNIX: SGF
63
cas d’un fichier répertoire ayant un sous-répertoire
17
usr
23
prog.exe
nb lien = 3
17
.
10
..
42
bin
4
2
.
i-nœud 17
nb lien = 2
i-nœud 42
C. Crochepeyre Cnam
UNIX: SGF
17
..
64
•
Créer un lien physique (synonyme)
– deux entrées de répertoire pointent sur un même fichier de données
– un seul i-nœud
% ln fichier fichierBis
ou
#include <unistd.h>
link (const char *fichier, const char * fichierBis)
– i-nœud indique 2 liens: fichier et fichierBis
– un seul fichier de données pour plusieurs utilisateurs
C. Crochepeyre Cnam
UNIX: SGF
65
répertoire
11
fichier
i-nœud n°11
infos
11
fichierBis
527
527
données
nombre de liens = 2
C. Crochepeyre Cnam
UNIX: SGF
66
– Supprimer un lien physique
unlink (const char *fichierBis)
répertoire
11
fichier
i-nœud n°11
infos
11
fichierBis
527
527
données
Dans ce cas le fichier de données existe toujours
mais le compteur de lien = 1
C. Crochepeyre Cnam
UNIX: SGF
67
répertoire
11
fichier
i-nœud n°11
infos
527
527
données
Dans ce cas le compteur de lien = 0
Le fichier de données est supprimé
Si fichier ouvert: attente fermeture
L’i-nœud devient i-nœud libre
C. Crochepeyre Cnam
UNIX: SGF
68
– Cas des fichiers répertoires
• Même mécanisme
• Commandes: mkdir et rmdir
• Un fichier répertoire a au moins deux liens
2122 -rw-rw-rw- 1 durand groupa 2134 jun 21 09:21 fichier
2123 drw-rw-rw- 3 durand groupa 512 jun 21 09:21 usr
Deux liens ou plus si un ou plusieurs autres fichiers sous-répertoire
C. Crochepeyre Cnam
UNIX: SGF
69
– Lien symbolique
• nouveau fichier de type lien: l
• i-nœud créé
• le lien permet un raccourci vers un autre fichier
% ln -s fichier lien_fichier
– le fichier lien_fichier apparaît lors de la commande ls
– le nombre de lien dans i-nœud est inchangé
• la suppression de ‘lien_fichier’ ne détruit pas ‘fichier’
2122 -rw-rw-rw- 1 durand groupa 2134 jun 21 09:21 fichier
2123 lrw-rw-rw- 1 durand groupa 512 jun 21 09:21 lien_fichier > fichier
C. Crochepeyre Cnam
UNIX: SGF
70
11
fichier
i-nœud n°11
- infos
527
nombre de liens = 1
527
données
24
fichier_lien
i-nœud n°24
l infos
527
nombre de liens = 1
C. Crochepeyre Cnam
UNIX: SGF
71
•
Copie
– copier un fichier
• copie physique
• nouvel i-nœud
• nouveau nom
% cp fichier1 fichier2
2122 -rw-rw-rw- 1 durand groupa 2134 jun 21 09:21 fichier1
2123 -rw-rw-rw- 1 durand groupa 512 jun 21 09:21 fichier2
fichier1 et fichier2 ont chacun un seul lien
C. Crochepeyre Cnam
UNIX: SGF
72
•
Renommer un fichier
– Changer de nom de fichier
• nouveau nom
• même i-nœud
#include <unistd.h>
int rename(const char *ref_src, const char *ref_dest)
Commande:
C. Crochepeyre Cnam
mv fic_src fic_dest
UNIX: SGF
73
•
Les attributs d’un fichier
#include <unistd.h>
int access (char *ref, int acces)
Commande: ls -la
C. Crochepeyre Cnam
UNIX: SGF
74
•
Créer un i-nœud
#include <sys/stat.h>
int mknod(const char *ref, mode_t mode, dev_t ressource)
Dans le cas d’un fichier ordinaire:
- open() ou creat()
Dans le cas d’un tube nommé:
- mkfifo ()
Dans le cas d’un répertoire:
- commande mkdir
C. Crochepeyre Cnam
UNIX: SGF
75
•
Changer les droits d’accès
#include <sys/stat.h>
int chmod(const char *ref, mode_t mode)
Commande: chmod mode fichier
•
Changer de groupe
Commande: chgrp nv_grp fichier
•
Changer de propriétaire
#include <unistd.h>
int chown(const char *ref, uid_t id_util, gid_t id_grp)
Commande: chown nv_prop fichier
C. Crochepeyre Cnam
UNIX: SGF
76
•
Ouverture de fichier
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *ref, int mode_ouv, [mode_t mode] )
ou
int creat (const char *path, mode_t mode );
•
Fermeture de fichier
#include <unistd.h>
int close( int desc )
C. Crochepeyre Cnam
UNIX: SGF
77
•
Lecture d’un fichier
#include <unistd.h>
ssize_t read( int desc, void *ptr_buf, size_t nb_octets )
•
Ecriture de fichier
#include <unistd.h>
ssize_t write( int desc, void *ptr_buf, size_t nb_octets )
C. Crochepeyre Cnam
UNIX: SGF
78
BIBLIOTHEQUE E/S
•
Appels système: read(), write(), open(), close()
–
–
–
–
•
accès par les descripteurs
définition des zones de réception/émission
nb d ’octets transmis
pas de formatage des E/S, pas de conversion
Appels fonctions en bibliothèque stdio.h
–
–
–
–
gestion tampon utilisateur
descripteurs transparents
formatage des entrées/sorties
réduction du temps UC /appel système
• pas de changement de contexte
• pas de changement de processus
C. Crochepeyre Cnam
UNIX: SGF
79
•
•
Principe du tampon
– en lecture:
• tampon se remplit par un read()
• les caractères sont récupérés dans ce tampon jusqu ’à
épuisement
– en écriture
• les caractères remplissent le tampon
• le tampon plein est vidé par un write()
– mémoire cache avant écriture disque
Structure FILE dans stdio.h pour la gestion du tampon
– pointeurs du tampon du fichier
– n° du descripteur
C. Crochepeyre Cnam
UNIX: SGF
80
•
Bibliothèque stdio.h
– fopen()
– fread()
– fwrite()
– fclose()
– fprintf()
– fgetc()
– autres…
C. Crochepeyre Cnam
UNIX: SGF
81
BIBLIOGRAPHIE
•
Linux Programmation Système et réseau
– Joëlle DELACROIX – Ed. Dunod 2003
•
Conception d’un système Unix
– M.J. BACH - Ed. Masson 1993
•
La programmation sous Unix
– J.M. RIfflet - Ed. Ediscience 1993
•
Système d’exploitation
– A. Tanenbaum - Ed Dunod 1999
•
Programmation système en C sous Linux
– Christophe Blaess - Ed Eyrolles 2000
C. Crochepeyre Cnam
UNIX: SGF
82
Uilisation de dup() pour rediriger la sortie standard
descripteurs du processus A
0
1
2
3
4
5
6
DUP()
1) on crée un tube:
STDIN
STDOUT
STDERR
tube input
tube output
- deux descripteurs: 3 et 4 qui pointent sur la table des
fichiers: ici tube
2) on ferme le descripteur 1
- l’entrée 1 est libre
3) on duplique le descripteur 4 avec retour = dup (4)
- le descripteur 4 est recopié dans le descripteur 1 (dup
prend la pemière entrée libre)
- valeur de retour: le nouveau descripteur ici le 1
4) on ferme les descripteurs 3 et 4 qui ne servent plus
5) tout envoi vers le descripteur 1 concernera le tube
C. Crochepeyre Cnam
UNIX: SGF
83