240 likes | 421 Views
Système de Fichiers. Principe d’utilisation, de gestion et de mise en œuvre des systèmes de fichier dans les systèmes informatiques Par Gilles Grimaud U niversité des S ciences et T echnologies de L ille http://www.lifl.fr/~grimaud/Cours. Shell.
E N D
Système de Fichiers Principe d’utilisation, de gestion et de mise en œuvre des systèmes de fichier dans les systèmes informatiques Par Gilles Grimaud Université des Sciences et Technologies de Lille http://www.lifl.fr/~grimaud/Cours
Shell Architecture en couche pour l’exploitation des mémoires persistantes Appli. –A– Appli. –B– Interface d’exploitation C Système de fichier Volume Volume Volume Volume Disque dur -1- Disque dur -2-
Plan • Périphériques de mémoires persistantes • Virtualisation des disques : les volumes • Secteur d’amorce et « SuperBloc » • Système de fichiers • Protections selon Unix • Manipulation de fichiers et de répertoires en C • Fichiers mappés en mémoire
Périphériques de mémoires persistantes Mémoire persistante : mémoire dont le contenu n’est pas perdu après un arrêt du système informatique. Objets premiers : • stocker les informations utiles au démarrage d’un système ouvert ; • stocker des données « long terme » ; • Sauvegarder des données. Type de supports physiques : • Disque dur, disques amovibles, … • Disquettes, Disques opto-magnétique, … • bandes magnétiques, … • EEPROM, FlashRam, Fe-RAM, M-RAM, …
Périphériques de mémoires persistantes Les disques magnétiques (Disques dur) : • plateaux, cylindres, secteurs • 4000 t/mn à 10000 t/mn • 512 à 16384 octets stocker sur chaque secteur • 20 à 200 secteurs par cylindre • 800 à 4000 cylindres (jusqu’à 12 ms de déplacement) • 1 à 16 plateaux • Adressage par interface <p,c,s> • Capacité standard en 2002 : • 40 Go, • 7200 tours/minute, • Déplacement 7 ms, • Ultra DMA 100 Mhz => de 20Mo/s à 40Mo/s
Périphériques de mémoires persistantes • Interface d’accès aux disques : • Contrôleur de disque IDE : interface normées ATA, ATA-2, … • Contrôleur de disque SCSI / SCSI-2 ; Contrôleurde disque tampon Processeur Mémoirevive Bus d’adresses 32 Bus de données 32 • Accès au données persistantes : • Accès direct au travers d’un tampon de lecture/écriture ; • DMA (U-DMA) pour copie des données dans/depuis la mémoire centrale.
Périphériques de mémoires persistantes • Exemple interface logicielles d’accès au disque : • Lecture : void rdSectors( int device, // plusieurs disques sur un même contrôleur int head, // n° du plateau int cylender, // n° du cylindre de départ int sector, // n° du secteur de départ int nsectors, // nombre de secteurs à lire unsigned char *buffer); // adresse de stockage des données lue • Ecriture : void wrSectors( int device, // plusieurs disques sur un même contrôleur int head, // n° du plateau int cylender, // n° du cylindre de départ int sector, // n° du secteur de départ int nsectors, // nombre de secteurs à lire unsigned char *buffer); // adresse ou sont stockées les données à écrire • Format : void frSectors(int device, int p, int c, int s, int nsectors); Dans la pratique, l’interface d’accès au matériel ne saurait se résumer à un appel de fonction. On parle de programmation du contrôleur de disque (via des registres).
Virtualisation des disques :les volumes • Simplifier/homogénéiser les systèmes d’adressage des disques :<n° plateau,n° cylindre,n° secteur> devient <identifiant de volume, n° bloc> • Multiplexer l’usage d’un disque unique en construisant plusieurs parties dédiées à des usages distincts (partitions ou volumes) • Gérer les systèmes d’amorce et les systèmes d’amorce multiples • Permettre à d’autres supports de stockage physique d’être utilisés en temps que volumes
Virtualisation des disques : les volumes • Exemple interface logicielles d’accès au disque : • Lecture : void readBloc( int volume, // identifiant de volume visé int bloc, // identifiant du bloc dans le volume int nbloc, // nombre de bloc concernés unsigned char *buffer); // adresse de stockage des données lue • Ecriture : void writeBloc( int volume, // identifiant de volume visé int bloc, // identifiant du bloc dans le volume int nbloc, // nombre de bloc concernés unsigned char *buffer); // adresse ou sont stockées les données à écrire • Format : void formatBloc(int v, int b, int nbloc); Sous cette interface, on peut placer autre chose qu’un contrôleur de disque (EEPROM, liaison réseau, …).
Virtualisation des disques : les volumes Définir un découpage Boot sector Super bloc i-nodes Disque Dur Master Boot Record Data blocs volume 1 Boot sector volume 2 FAT
Virtualisation des disques : les volumes A un bloc correspond un secteur sur une piste du disque. Aussi les opérations de lecture/écriture sont équivalents. Cependant, le système doit convertir une numéro de bloc en n° de secteur/n° de piste. MBR P1 Offset P2 Max Piste P2 Max Secteur nBloc = Offset P2 + Secteur + Piste x Max Secteur
Démarrage d’un système • Exécution du code en ROM, se termine par : • Chargement/Exécution du code en MBR, se termine par : • Chargement/Exécution du code du « secteur d’amorce », démarrage du système… MémoireMorte(EEPROM) Contrôleurde disque MBR Boot sector P.1 tampon Boot sector P.2 Processeur Mémoirevive Bus d’adresses 32 Bus de données 32
Secteur d’amorce et Secteur d’amorce maître 0000 FA cli 0001 33C0 xor ax,ax 0003 8ED0 mov ss,ax 0005 BC007C mov sp,0x7c00 ; set stack top at 0000:7C00 0008 8BF4 mov si,sp ; SI = 7C00 000A 50 push ax 000B 07 pop es 000C 50 push ax 000D 1F pop ds ; DS = ES = 0 000E FB sti ; enable interrupts 000F FC cld 0010 BF0006 mov di,0x600 ; DI = 0600 0013 B90001 mov cx,0x100 ; 256 words (= 512 bytes) 0016 F2A5 repne movsw ; copy ourselves to 0000:0600 0018 EA1D060000 jmp 0x0:0x61d ; and jump to the new location 001D BEBE07 mov si,0x7be ; SI = 07BE 0020 B304 mov bl,0x4 ; 4 entries 0022 803C80 cmp byte [si],0x80 ; check bootable flag 0025 740E jz 0x35 0027 803C00 cmp byte [si],0x0; check if valid entry 002A 751C jnz 0x48 ; jump if invalid 002C 83C610 add si,byte +0x10 002F FECB dec bl 0031 75EF jnz 0x22 ; try next entry 0033 CD18 int 0x18 ; no bootable partitions,GOBASIC 0035 8B14 mov dx,[si] ; get drive nr, head 0037 8B4C02 mov cx,[si+0x2] ; get cyl, sect 003A 8BEE mov bp,si ; keep ptr to parttable entry 003C 83C610 add si,byte +0x10; verify next entries 003F FECB dec bl 0041 741A jz 0x5d 0043 803C00 cmp byte [si],0x0 0046 74F4 jz 0x3c 0048 BE8B06 mov si,0x68b ; "Invalid partition table" 004B AC lodsb ; print message 004C 3C00 cmp al,0x0 004E 740B jz 0x5b 0050 56 push si 0051 BB0700 mov bx,0x7 0054 B40E mov ah,0xe 0056 CD10 int 0x10 0058 5E pop si 0059 EBF0 jmp short 0x4b 005B EBFE jmp short 0x5b ; hang system 005D BF0500 mov di,0x5 ; try 5 times 0060 BB007C mov bx,0x7c00 0063 B80102 mov ax,0x201 0066 57 push di 0067 CD13 int 0x13 ; read bootsector to 0000:7c00 0069 5F pop di 006A 730C jnc 0x78 ; ok, proceed 006C 33C0 xor ax,ax 006E CD13 int 0x13 0070 4F dec di 0071 75ED jnz 0x60 ; try again 0073 BEA306 mov si,0x6a3 ; "Error loading OS" 0076 EBD3 jmp short 0x4b ; print message 0078 BEC206 mov si,0x6c2 ; "Missing operating system" 007B BFFE7D mov di,0x7dfe 007E 813D55AA cmp word [di],0xaa55; check if valid bootsector 0082 75C7 jnz 0x4b ; print message if invalid 0084 8BF5 mov si,bp ; SI = ptr to parttable entry 0086 EA007C0000 jmp 0x0:0x7c00 ; jump to bootsector Sélection de la partition de démarrage selon MS(MBR MS)
Virtualisation des disques :les volumes Administration des volumes sous Unix : Fdisk Plusieurs mode dont mode interactif : • lister les volumes • créer les volumes • changer de volume actif (boot de 2nd niveau) • terminer / abandonner Sur architecture X86, le secteur d’amorce primaire est celui défini dans /usr/plateform-name/lib/fs/ufs/mboot
Système de fichiers Un système de fichiers est un modèle d’organisation de l’information stocké dans un ou plusieurs volumes. Un système de fichiers définit : • Un modèle d’organisation de l’information : • Notion de répertoires et de fichiers, • Classement arborescent des répertoires, • Notion de flux, accès séquentiels, … • Un système de liaison de l’information : • Identification des fichiers par un nom symbolique/home/rd2p/grimaud/public_html/index.html • Accès aux données par l’intermédiaire de leurs nom symbolique :cat home/rd2p/grimaud/public_html/index.html
Système de fichiers Les volumes, et les disques physiques stockent l’information dans des blocs d’octets de taille fixe. Les systèmes de fichiers gèrent l’allocation et la libération de ces blocs, ainsi que leurs regroupement pour former des supports logiques : les fichiers. int blocAlloc (int volume); void blocFree (int volume, int bloc); Différentes stratégies pour réaliser ces opérations élémentaires dans un volume visant à : • allouer en séquences des blocs contigus afin de réduire les temps de latence d’accès aux fichiers • permettre la restauration des blocs libres après une défaillance matérielle
Système de fichiers • Mécanisme d’allocation : FAT Floppy Allocation Table : Table des blocs utilisés/libres X 4 octets Secteur Boot Magic Number X 32 octets Volume Name SuperBloc (MBR) X 32 octets Fomater ID FAT X 32 octets Fomat Date X 4 octets … FAT Size X 4 octets Secteur utilisable First Dir Block X 4 octets CheckSum val … Unused space Allouer un bloc :chercher un 0 dans la FATet le remplacer par un 1Libérer un bloc :Mettre un 0 dans la FAT. 1110000110001011100011101010111011100… 1er bloc utilisé 19ème bloc libre Avec des blocs de 4096 octets il suffit d’un bloc de FAT pour couvrir un volume de 128 Mo
Système de fichiers • Mécanisme d’allocation : FreeList FreeList : Liste des blocs libres dans le volume. X 4 octets Secteur Boot Magic Number X 32 octets Volume Name SuperBloc (MBR) X 32 octets Fomater ID Bloc libre X 32 octets Fomat Date X 4 octets Bloc occupé FAT Size X 4 octets Bloc libre First Dir Block X 4 octets CheckSum val Bloc occupé X 4 octets First Free Block Bloc libre Unused space Bloc occupé Bloc libre Bloc occupé
Type i-node Taille Direct 0 … indirect Id 0 Id 0 Id 0 Id 0 Indirect 2 Id 1 Id 1 Id 1 Id 1 Id 2 Id 2 Id 2 Id 2 … … … … Système de fichiers Un fichier est un assemblage de blocs. Files Data Files Data Files Data Files Data Files Data Files Data
Système de fichiers Sous Unix, un répertoire est un fichier qui liste les noms de fichiers et de répertoires qu’il contient, ainsi que l’information suffisante pour pouvoir trouver le fichier/répertoire désigné sur le disque. Il peut aussi contenir, éventuellement, des informations de droits d’accès relatif à chaque fichiers/répertoires. Par exemple : Nom de fichier Droit d’accès Bloc de départ Nom de fichier Droit d’accès Bloc de départ … … …
Système de fichiers Unix Le mécanisme de liaison symbolique proposé par le systeme de fichiers est, pour les systèmes d’exploitation Unix, le mécanisme de liaison préféré, non seulement pour les données persistante mais aussi pour la majorité des flux (entrées-sorties audio, terminaux textes). Pour les systèmes Unix il n’existe qu’un seul système de fichier qui regroupe l’ensemble des données persistantes manipulées par le système, ainsi qu’un certain nombre de flux propres au matériel informatique. Tout nouveau volume structuré en système de fichier peut être insérer dans le système de fichier Unix par la commande :/user/sbin/mount /dev/hdb2 /tmp/ Tout nouveau support physique manipulable par le système est définit par le système comme un fichier « virtuel » du système de fichier :/dev/hda1 / ufs rw 1 1 /dev/hda2 swap1 ufs rw 0 2/dev/hdb1 /usr ufs rw 1 2table de définition du système de fichiers définie dans /etc/fstab
Protections selon Unix Chaque répertoire, en définissant un nom de fichier, lui associe un propriétaire, ainsi que des droits d’accès. trwxrwxrwx 6134octets mel.txt type user group other
Manipulation de fichiers et de répertoires en C Chemin d’accès (char* path) • Open(2), truncate(2) • Stat(2),chmod(2), fcntl(2) Fichier ouvert (int fd) • Fstat(2), fchmod(2),fcntl(2) • Lseek(2), flock(2) • Read(2),write(2),close(2) Fichier ouvert avec tampon(FILE *file) • Fopen(3), fdopen(3), freopen(3) • Fread(3), fwrite(3) • Putc(3), fputc(3) • Getc(3), fgetc(3) • Puts(3),fputs(3) • Printf(3), fprintf(3) • Scanf(3), fscanf(3) • Fflush(3) • Fileno(3) • Feof(3) • Ferror(3)
Fichiers mappés en mémoire centrale Un exemple de translation de symboles entre différents mécanismes de liaisons… void *mmap((void *) NULL, long mapSize, int fileAccess, int mapProperty, int fileid); Exemple d’utilisation (avec la bibliothèque sys/mman.h) : void *MapFileRW(char* file) { void *ptr; struct stat st;if( stat(file,&st) != 0 || (fd = open(file, O_RDWR)) < 0 ) { printf("%s cannot bee read\n",file); return NULL; } ptr = mmap((void *) NULL, (size_t) st.st_size, (int) PROT_READ | PROT_WRITE, (int) MAP_FILE | MAP_VARIABLE | MAP_SHARED, (int) fd, (off_t) 0);close(fd);if( (caddr_t) ptr == (caddr_t) -1 ) { printf("%s: cannot map",file); return NULL;}return ptr; }