510 likes | 660 Views
8INF341. Les systèmes de fichiers. Disque. Géométrie physique à deux zones d'un disque Géométrie virtuelle du même disque. Formatage de disque (1). Un secteur de disque Préambule: Séquence de bits permettant au matériel de reconnaître le début d’un secteur
E N D
8INF341 Les systèmes de fichiers
Disque • Géométrie physique à deux zones d'un disque • Géométrie virtuelle du même disque
Formatage de disque (1) Un secteur de disque • Préambule: • Séquence de bits permettant au matériel de reconnaître le début d’un secteur • Contient également: numéro de cylindre, numéro de secteur, etc. • Données: • Habituellement 512 octets • ECC: Bits de redondance pour la récupération des donées en cas d’erreur • Après un formatage de bas niveau, la capacité du disque est réduite d’environ 20%
Formatage de disque (2) Les cylindres sont décalés afin d’améliorer la performance Une illustration du décalage des cylindres
Formatage de disque (3) Absence d’entrelacement Entrelacement simple Entrelacement double Pour éviter l’entrelacement, le contrôleur de disque doit pouvoir mettre une piste complète en mémoire tampon.
Formatage de disque (4) • Après le formatage de bas niveau, on partitionne le disque. • Chaque partition est l’équivalent d’un disque différent • Sur plusieurs sytèmes, le secteur 0 contient l’enregistrement de démarrage principal (master boot record) qui contient: • Code de démarrage • Table des partitions • Secteur de départ de chaque partition • Taille de chaque partition • La partition contenenant le système d’exploitation est désignée comme partition active dans la table.
Formatage de disque (5) • La dernière étape est le formatage de haut niveau • Pour chaque partition • Mis en place d’un bloc d’amorçage • Liste des espaces libres • Répertoire racine • Système de fichier vide • Un code est placé dans la table des partition pour indiquer le type de système de fichiers utilisé
Formatage de disque (6) • Lorsque l’on active le système: • Le BIOS lit l’enregistrement de démarrage principal (secteur 0) • Le BIOS lit le secteur de démarrage de la partition active • Ce secteur contient un programme qui recherche le répertoire contenant le SE ou un programme d’initialisation plus important • Ce programme est chargé en mémoire puis exécuté
Disque vs disquette Comparaisons des paramètres d'une disquette originale IBM PC (1978) et d'un disque dur Western Digital WD 18300
Temps • Le temps d'accès est déterminé par 3 facteurs • Recherche du premier secteur • Délaie de rotation • Temps de transfert • Le premier facteur domine
Structure des fichiers • 3 principales sortes de fichiers • Séquence d'octets • Séquence d'enregistrements • Arbre
Types d'accès • Séquentiel • lire tous les octets/enregistrements depuis le début • Ne peut faire de saut, peut revenir au début • utile avec les ruban magnétique • Direct (ou aléatoire) • octets/enregistrements lus dans n'importe quel ordre • Essentiel pour les bases de données • Deux méthodes • déplacer un marqueur de fichier (seek), puis lire • Lire en indiquant le position de départ
Types de fichiers • Fichiers ordinaires • Généralement des fichiers ASCII ou binaires • Répertoires • Fichiers spéciaux caractère: • Servent à modéliser les périphériques d’E/S série tels que les terminaux, les imprimantes et les réseaux. • Fichiers spéciaux bloc • Servent à modéliser les disques
Exemple de fichiers binaires a) Fichier exécutable en UNIX b) Fichier d’archive en UNIX
Attributs Attributs possibles pour les fichiers
Opérations sur les fichiers • Créer • Détruire • Ouvrir • Fermer • Lire • Écrire • Ajouter (append) • Déplacer (Seek) • Obtenir les attributs • Modifier les attributs • Renommer
Appels système: Exemple (1/2) /* Programme de copie de fichiers. La vérification des erreurs et leur renvoi sont très basiques */ #include <sys/types.h> /* Définitions de types */ #include <fcntl.h> /* Définit des constantes O_RDONLY… */ #include <stdlib.h> /* Prototypes des appels système */ #include <unistd.h> /* Prototypes des appels système */ #define TAILLE_BUFFER 4096 /* Utilisation d’une mémoire de 4 096 octets */ #define MODE 0700 /* Mode de protection du fichier (rw-rw-rw-) */ int main(int argc, char *argv[]) /* argc : nombre d’arguments, argv : pointeurs sur arguments */ { int df_src; /* Descripteur du fichier source */ int df_cib; /* Descripteur du fichier cible */ int nb_in,nb_out; /* Valeurs lues, écrites */ char zone[TAILLE_BUFFER]; /* Zone mémoire */ if (argc != 3) exit(1); /* Nombre de paramètres incorrect */ /* Ouvrir le fichier source et créer le fichier cible */ df_src=open(argv[1],O_RDONLY); /* Ouverture du fichier source en lecture seule */ if (df_src<0) exit(2); /* Impossible d’ouvrir le fichier source */
Appels système: Exemple (2/2) df_cib=creat(argv[2],MODE); /* Création du fichier cible */ if (df_cib<0) exit(3); /* Impossible de créer le fichier cible */ /* Tout s’est bien passé, boucle de copie */ while (TRUE) { /* Boucle infinie */ /* Lecture depuis le fichier source */ nb_in=read(df_src,zone,TAILLE_BUFFER); if (nb_in<=0) break; /* Quitter en fin de fichier */ /* Écriture dans le fichier cible */ nb_out=write(df_cib,zone,nb_in); if (nb_out<=0) exit(4); /* Quitter en cas d’erreur */ } close(df_src); /* Fermeture du fichier source */ close(df_cib); /* Fermeture du fichier cible */ if (nb_in==0) exit(0); /* Sortie sans erreur */ else exit(5); /* Sortie avec une erreur en lecture */ }
Répertoires Un système hiérarchisé de répertoire
Chemin d'accès Windows: \usr\jim\toto.txt UNIX: /usr/jim/toto.txt MULTICS: >usr>jim>toto.txt • Répertoire maîson • Répertoire courant • Chemin d’accèes absolu • Chemin d’accèes relatif
Opérations sur les répertoires • Créer • Détruire • Ouvrir • Fermer • Lire • Renommer • Link • Unlink
Implémentation des systèmes de fichier Une configuration possible Superbloc: contient le type de système de fichier, le nombre de blocs,etc. I-nodes: un I-node par fichier Bloc: Unité d’allocation sur le disque Master boot record
Allocation contiguë (a) Allocation contiguë de 7 fichiers sur les 40 premiers blocs (b) État du disque après que les fichiers D et E aient été enlevés Ce système est utilisé sur les CD et les DVD
Allocaion par liste chainée Stocker un fichier comme une liste chaînée.
Table d’allocation (FAT) Allocation par liste chaînée utilisant une table en mémoire principale • Pour être efficace, la table doit être entièrement en mémoire • Avec un disque de 200 Go et des blocs de 1 Ko, la table contient 200 millions d’entrées.
Les noeuds d’index (i-node) FAT: Taille proportionnele à la taille du disque Tableau des i-nodes: Taille proportionnelle au nombre maximal de fichiers qui peuvent être ouverts simultanément. On associe un i-node à chaque fichier Un i-node est un enregistrement qui contient les attributs et les adresses disque des blocs du fichier.
Implémenter les répertoires (1) (a) Un répertoire simple Entrées de taille fixe comprenant l'adresses de disque et les attributs (b) Répertoire dans lequel chaque entrée est un i-node.
Implémenter les répertoires (2) • Anciennement le noms de fichiers et de répertoires étaient courts: • 8 caractères sur MS DOS (plus 3 pour l’extension) • 14 sur les anciennes version de UNIX • Champs de longueur fixe dans le répertoire • Aujourd’hui les noms peuvent être beaucoup plus longs • Windows, UNIX: 255 caractères
Implémenter les répertoires (3) • 2 façons d'implémenter les longs nom de fichiers
Fichiers partagés (1) • Dans les projets réalisés par plusieurs programmeurs, il est nécessaire de partager les fichiers • Une solution consiste à faire apparaître un même fichier dans plusieurs répertoires appartenant à différents usagers.
Fichiers partagés (2) (a) Situation avant la création du lien (b) Après que le lien soit créé (c) Après que le propriétaire original ait enlever le fichier
Gestion de l'espace disque (1)Comment déterminer la taille des bloc? • Conflit entre l’utilisation efficace de l’espace disque et la vitesse de transfert. • On suppose des fichiers de 2KB
Gestion de l'espace disque (2) (a) Stocker les blocs libres dans une liste (b) Utilisation d'un bitmap
Appels systèmes sur Unix • s est un code d'erreur • fd est un descripteur de fichier • position est un déplacement
L'appel système lstat Champs retournés par l'appel système lstat.
Appels systèmes pour les répertoires • s est un code d'erreur • dir est un pointeur • dirent est un pointeur
Exemple dirp = opendir("."); while (dirp) { /* seulement si opendir a réussi */ errno = 0; if ((dp = readdir(dirp)) != NULL) { /* prochain fichier */ if (strcmp(dp->d_name, "toto") == 0) { closedir(dirp); return FOUND; } } else { /* pas de prochain fichier */ if (errno == 0) { /* fin du répertoire */ closedir(dirp); return NOT_FOUND; } closedir(dirp); /* erreur de lecture */ return READ_ERROR; } } return OPEN_ERROR;
Exemple (Mac OS X) struct dirent { ino_t d_ino; /* numéro d’i-node */ __uint16_t d_reclen; /* longueur de cet enregistrement */ __uint8_t d_type; /* type de fichier */ __uint8_t d_namlen; /* longueur du nom de fichier*/ char d_name[__DARWIN_MAXNAMLEN + 1]; /* nom du fichier */ }; /* * Types de fichier */ #define DT_UNKNOWN 0 #define DT_FIFO 1 #define DT_CHR 2 #define DT_DIR 4 #define DT_BLK 6 #define DT_REG 8 #define DT_LNK 10
UNIX (1) Structure d'une partition sous UNIX Le superbloc contient de l’information critique: nombre de i-nodes, nombre de blocs sur le disque, début de la liste des blocs libres, etc. Le noyau maintient une table des i-nodes qui contient les numéro de i-nodes des fichiers et des répertoires ouverts.
UNIX (2) Directory entry fields. Structure d'un i-node (contient entre autres: information retourné par lstat)
UNIX (3) Relation entre la table des descripteurs de fichiers, la table des fichiers ouverts et la table des i-nodes.
UNIX BSD • Permet des noms de fichier de 255 caractères • Un répertoire BSD avec 3 fichiers • Le même répertoire après que le fichier volumineux ait été enlevé Implémenter les répertoires (1)
Windows NT • Supporte plusieurs systèmes de fichiers: • FAT-16 (partitions jusqu’à 2 Go) • FAT-32 (partitions jusqu’à 2 To ) • NTSF (NT File System) (adresses 64 bits, partition jusqu’à 264 octets) • Un fichier NTSF n’est pas une simple séquence d’octets comme en UNIX • Un fichier est constitué de nombreux attributs, chacun étant représenté par un flot d’octets dont le nom est précédé par le nom du fichier et du symbole « : » • Nom_fichier:flot • Ces flots sont détruits lorsque le fichier est déplacé vers un autre système de fichiers tel que FAT-32 • Les liens symbolique existent depuis Windows Vista mais est restreinte aux administrateurs.
Appels système du système de fichiers sur Windows NT (2) Copier un fichier sur Windows XP (en pratique on utilise CopyFile): /* ouvre les fichiers pour lecture/écriture */ inhandle = CreateFile("data", GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL) ; outhandle = CreateFile("newf", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ; /* copie le fichier */ do { s = ReadFile(inhandle, buffer, BUF_SIZE, &count, NULL) ; if (s && count>0) WriteFile(outhandle, buffer, count, &ocnt, NULL); } while (s>0 && count>0); /* ferme les fichiers */ CloseHandle(inhandle) ; CloseHandle(outhandle) ;
Structure du sytème de fichier (0) Contient, entre autres, l'adresse du premier bloc de la MTF Structure d'un volume avec NTFS Fichiers systèmes: • Copie des trois premiers enregistrement de la MFT. • Bitmap des blocs utilisés. • Table des définition d'attributs. • Fichier de log pour la reconstruction • etc. Fichiers systèmes Bloc de boot MFT Fichiers usagers
Structure du sytème de fichier (1) La MFT (master file table) de NTFS La MFT est une suite d’enregistrement de 1 Ko Chaque enregistrement décrit un fichier
Structure du sytème de fichier (2) Attributs utilisés dans un enregistrement MFT