Stockage et systèmes de fichiers Flashcards
(53 cards)
Quel est le rôles du système de fichiers ?
Persistence, Organisation, Abstraction
+ protection, performance, robustesse
Persistence
- Conserver les données même quand la machine est éteinte
- Dissocier les données du processus qui les a créées
▶ stockage en dehors de la mémoire principale (RAM)
▶ notion de fichier non structuré = une séquence d’octets
Organisation
- Identifier chaque fichier par un nom intelligible
- Grouper des noms ensemble pour ranger les fichiers
▶ notion de répertoire (= dossier)
▶ hiérarchie arborescente de répertoires et sous-répertoires
Abstraction
- Masquer les détails technologiques : disque, flash, réseau
▶ architecture logicielle en couches
Fichier
VO file
= séquence d’octets, identifié par un nom
= impl : éparpillé sur plusieurs secteurs de disque
convention : suffixe du nom (.mp3, .jpg…) = format des données
Comment l’application interagit avec un fichier ?
Elle interprète «librement» le contenu binaire
Répertoire (dossier)
VO directory (folder)
= contient des fichiers et d’autres dossiers
= impl : fichier spécial contenant des noms
Systèmes de fichiers : pourquoi c’est difficile
- Non-volatilité : chaque écriture sur le disque est définitive
- Comment résister aux pannes et aux plantages
- Comment offrir une performance acceptable ?
Rôle du système de fichiers (en VO File system = FS)
Lors de chaque accès à un fichier, le FS doit traduire une paire nom + position vers une « adresse disque » no secteur+offset
Disque
tableau de secteurs numérotés
1 secteur
= Unité de transfert atomique entre disque et RAM
= unité atomique de lecture ou écriture
taille typique : 512B ou 4kB
Quels sont les syscall de l’interface utilisateur pour intergagir avec les fichiers ?
read et write
ssize_t read(int fd, void *buf, size_t count);
Lire count octets dans le fichier fd et les écrire en mémoire à l’adresse buf (donc de buf jusqu’à buf+count–1)
ssize_t write(int fd, const void *buf, size_t count);
Lire en mémoire les count octets commençant à l’adresse buf, et les écrire dans le fichier fd
Le numéro fd est un file descriptor
attribué par le noyau
~~~
int open(char *pathname, int flags)
``` rend un fd
Notion de position courante dans chaque fichier ouvert
off_t lseek(int fd, off_t offset, int whence);
liste des fichiers ouverts (et positions dans…
… le PCB
Opérations disponibles sur un fichier
créer un nouveau fichier : creat()
* supprimer un fichier : unlink()
* ouvrir : open() et fermer close()
* lire n octets depuis la position courante : read()
* écrire n octets à la position courante : write()
* se repositionner dans le fichier :lseek()
* ajouter n octets en fin de fichier : append()
* lire les méta-données : stat()
* changer les méta-données : chmod(), utime()
* renommer un fichier : rename()
Attention, piège : renommer̸ = déplacer !
Comment organise-t-on les fichiers ?
Organisation des fichiers en dossiers
Quelle approche est utilisée pour pouvoir retrouver un fichier à partir de son nom ?
Approche moderne : structure de nommage récursive
- file system = arbre
- dossier contient fichiers et sous-dossiers
Implémentation de la structure de nommage récursive
Un répertoire = un fichier spécial
* contient la liste de ses sous-dossiers et fichiers
* appels système idoines : opendir(), readdir()..
Arborescence de fichiers Unix
Noms spéciaux du système de fichiers
- racine du système de fichiers** /**
- répertoire courant .
- répertoire parent ..
Répertoire courant (CWD)
Chaque processus a un current working directory (CWD)
* appel système chdir() pour changer de CWD
* cd truc demande au shell de faire un chdir(“truc”)