Chapitre V : La gestion des disques et l’organisation des fichiers
Eric.Leclercq@u-bourgogne.fr
D´epartement IEM
http://ufrsciencestech.u-bourgogne.fr http://ludique.u-bourgogne.fr/~leclercq
March 7, 2013
Plan
1 Les supports de stockage Terminologie
2 Syst`eme de fichiers Syst`eme de fichiers Table d’allocation
3 Organisation interne des fichiers Fichiers s´equentiel ind´ex´es Index de type B-arbre Acc`es al´eatoire ou dispers´e
Introduction
La gestion des disques :
concerne les m´ethodes d’acc`es au blocs de donn´ees par le noyau du SE
la d´efinition d’une structure pour accueillir les fichiers La gestion des fichiers recouvre plusieurs activit´es :
Une gestion effectu´ee par le noyau du SE : allocation, gestion des m´eta-donn´ees (taille, date de cr´eation, propri´etaire), localisation
Une gestion en mode utilisateur : gestion interne du contenu du fichier (ouverture, lecture, ´ecriture)
Acc` es s´ equentiel ou direct
Les anciens supports de stockage ´etaient essentiellement `a acc`es s´equentiel
Exemple :
analogie avec les K7 de magn´etoscope, bandes magn´etiques, rubans perfor´es etc.
Aujourd’hui, il existe toujours des bandes mais leur utilisation est r´eserv´ee pour les sauvegardes. Les disques magn´etiques pr´esentent des caract´eristiques essentielles :
Rapidit´e des acc`es (acc`es direct `a une zone) Fiabilit´e
Grande capacit´e Exemple :
capacit´e actuelle d’un disque sur un PC 500Go, acc`es 5-10ms, transfert 50M/s.
Structure d’un disque
1 Plateaux
2 Moteur (axe)
3 M´ecanisme de d´eplacement des bras
4 bras supportant les tˆetes de lecture ´ecriture (5)
Structure d’un disque
Structure d’un disque : r´ esum´ e
Structure d’un disque : terminologie
Structure d’un disque : terminologie
Notion de syst` eme de fichiers
Formatage : le disque est d´ecoup´e en zones logiques appel´ees secteurs regroup´es sur des pistes
L’ensemble des pistes de mˆeme num´ero sur diff´erent plateaux forme un cylindre
Les blocs sont des regroupement de secteurs (en g´en´eral 512 octets / secteur)
La cr´eation d’un syst`eme de fichiers (formatge dans le monde Windows) cr´ee une structure de donn´ees pour affecter des blocs `a des fichiers (commandemkfs dans le monde Unix)
Notion de syst` eme de fichiers
Les syst`emes de fichier sont g´er´es `a partir d’uneseule et mˆeme racine (’/’)
Les utilisateurs sont tous possesseurs d’une branche dans laquelle ils sont maˆıtres (home directory)
les utilisateur peuvent d´evelopper leur branche : cr´eer de nouveaux fichiers et de nouveaux r´epertoires
Contrairement `a Windows, l’utilisation de disquettes n’est pas vue comme l’ajout d’un nouveau volume (disque), mais comme le raccordement d’un syst`eme de fichiers `a l’arborescence existante
Les disquettes ou tout autre support de stockage sont greff´es sur l’arbre principal par une commande mount :
mount /dev/fd0 /mnt/floppy
Fichier sp´ eciaux, liens symboliques
Il existe plusieurs cat´egories de fichiers sp´eciaux sous Unix : les r´epertoires
les tubes nomm´es
les p´eriph´eriques : syst`eme de fichier /dev
le descriptif de l’´etat de l’OS via le syst`eme de fichiers/proc Quelques fois il est utile de nommer les fichiers de plusieurs fa¸cons (alias) ou bien de pouvoir acc´eder `a un fichier depuis plusieurs emplacements dans l’arborescence. On a alors recours aux :
Liens symboliques sous UNIX :
ln /home/eric/toto18.java /home/eric/toto.java Aux raccourcis sous Windows (traitement non pr´evu par le FS) Aux alias sur MACOS
Notion de fichier
Les disques permettent un acc`es direct aux donn´ees au moyen d’une adresse de bloc, un fichier est un ensemble logique de bloc appartenant `a une mˆeme entit´e (le fichier).
on peut sp´ecifier un premier bloc et ensuite chaˆıner les blocs (ajouter l’adresse du suivant)
on peut ´etablir une liste de blocs dans une table
Probl`eme : utilisateur ne connaˆıt pas l’emplacement du fichier sur le disque, il ne connaˆıt que son nom
Vers la notion de table d’allocation
Solution 1 :
On int`egre au d´ebut de chaque fichier son nom
On place le fichier sur le disque au premier endroit o`u on trouve de la place
Le recherche d’un fichier est alors s´equentielle : ´etant donn´e le nom, on lit les blocs du disque `a partir du d´ebut et on
recherche la premi`ere occurrence du nom du fichier Inconv´enient : on n’utilise alors pas du tout l’acc`es direct permit par la structure physique du disque dur
Solution 2 :
le premier secteur contient un tableau T qui s’´etend sur la globalit´e de la premi`ere piste et qui associe `a chaque nom de fichier le num´ero du secteur qui le contient
Inconv´enient : fragilit´e de la table d’allocation (File Allocation Table)
File Allocation Table
File Allocation Table
´Etant donn´e un nom M, le positionnement de la tˆete de lecture sur le premier secteur (secteur 0) permet :
de charger l’index
de le parcourir `a la recherche de la chaˆıne de caract`eres M de d´eterminer le secteur qui contient le d´ebut du fichier la tˆete de lecture du disque se positionne alors sur la piste en question et recherche plus pr´ecis´ement le fichier (le secteur)
i-node sous Unix
D´efinition :
Les inodes (index node) ou i-nœuds sont des structures de donn´ees contenant les informations qui d´ecrivement comment les fichiers stock´es dans un file system
Les inodes contiennent les m´etadonn´ees des fichiers (propri´etaires, droits, etc.).
Les inodes sont cr´e´es lors de l’initialisation du syst`eme de fichiers.
Le nombre d’inodes cr´ees est d´etermin´ee lors de l’intitiaisation du file system et d´ependent de la taille de la partition.
Le nombre de i-node d´etermine le nombre maximum de fichiers du syst`eme de fichier.
La structure d’un i-node d´etermine la taille maximum d’un fichier.
Exemple avec ext2 de Linux
Un inode contient environ 64 champs, dont 13 contiennent des blocs (d´edi´es donn´ees) pouvant ˆetre de deux types :
blocs d’adresses : contiennent des pointeurs vers d’autres blocs ;
blocs de donn´ees : contiennent les donn´ees du fichier.
De plus :
Les 10 premiers champs (sur les 13) contiennent les adresses des 10 premiers blocs de donn´ees du fichier (d’une adresse par bloc).
Si les 10 premiers (blocs) champs sont suffisants pour contenir le fichier, les champs 11, 12 et 13 ne sont pas utilis´es.
Exemple avec ext2 de Linux
Dans le cas contraire, en plus des 10 premiers blocs, les blocs 11, 12 et 13 sont utilis´es pour 3 niveaux d’indirections.
la simple indirection, utilis´ee par le champ 11 ; la double indirection, utilis´ee par le champ 12 ; la triple indirection, utilis´ee par le champ 13.
Chacun de ces trois champs pointe vers un bloc d’adresses, qui pourra pointer vers un ou plusieurs blocs d’adresses ou de donn´ees.
Plus le niveau d’indirection est ´elev´e, plus le nombre final de blocs de donn´ees sur lequel pointe le champ (11, 12 ou 13) sera ´elev´e.
Exemple avec ext2 de Linux : exemple
Hypoth`eses
les blocs ont une taille 1024 octets ;
chaque adresse (dans le cas d’un bloc d’adresses) est stock´ee sur 32 bits (4 octets) ;
chaque bloc d’adresses peut contenir 256 adresses.
Mise en oeuvre des indirection pour des fichiers volumineux :
1 Le champ 11 pointe vers un bloc d’adresses qui contient des pointeurs vers des blocs de donn´ees (256 pointeurs). Si cela est suffisant pour contenir le fichier, les champs 12 et 13 ne sont pas utilis´es.
2 Le champ 12 pointe vers un bloc d’adresses qui pointe vers 256 autres blocs d’adresses. Ce sont ces 256 blocs d’adresses qui pointeront vers 256 blocs de donn´ees.
3 Le champ 13 pointe ajoute un troisieme niveau.
Exemple avec ext2 : taille maximale de fichier
D´eterminer le nombre de bloc de donn´ees utilisables : Les 10 premiers champs pointent chacun sur 1 bloc de donn´ees ;
Le champ 11 pointe vers 256 blocs de donn´ees ; Le champ 12 pointe vers 2562 blocs de donn´ees ; Le champ 13 pointe vers 2563 blocs de donn´ees.
La taille maximale d’un fichier peut alors ˆetre calcul´ee avec l’hypoth`ese de blocs de 1024 octets :
1024×(10 + 256 + 2562+ 2563) = 17247250432
Structure de fichiers : m´ eta-donn´ ees et contenu
Un fichier regroupe un ensemble de donn´ees appel´e contenu Un fichier est associ´e `a des m´eta-donn´ees stock´ees ou non dans la table d’allocation : un nom, une date, un
emplacement, un propri´etaire, des attributs de lecture etc.
Le contenu d’un fichier est un ensemble structur´e enregistrements (appel´es aussi articles ourecords) Chaque article repr´esente une information unitaire (unit´e d’information)
Exemple :
le fichier du personnel d’une entreprise
Enregistrements et champs
Les articles se d´ecomposent en champs
Chaque champ repr´esente une propri´et´e de l’article
Les champs sont l’association entre un attribut et une valeur d’un type donn´e.
Exemple :
Dans le fichier du personnel le champ nom repr´esente le nom d’une personne (Nom, Adresse, etc.) et une valeur (’toto’, ’rue
Quimonte’, etc.)
Enregistrements et champs
Le plus souvent la structure des articles est identique dans un mˆeme fichier :
nombre d’attributs fixe et champs de taille fixe
Ainsi, tous les articles ont la mˆeme taille et on peut calculer la position d’un ´el´ement en fonction de son num´ero d’ordre On parle alors d’article de longueur fixe par opposition aux fichiers comportant des articles de longueur variable Quand peut-on rencontrer des articles de taille variable ? Avantages/Inconv´enients de ces deux formats
Organisation des fichiers en enregistrements
G´en´eralement l’organisation doit optimiser : la restitution du contenu des fichiers
mˆeme lorsque les donn´ees sont complexes (beaucoup de champs, reli´ees) il est n´ecessaire que les acc`es en lecture soient rapides
Exemple :
dictionnaire, plan de ville, images satellitales
Pour la modification du contenu des fichiers plusieurs probl`emes sont `a prendre en compte :
Comment ins´erer au mieux un nouvel article dans un fichier Comment replacer un information qui augmente de volume Comment ne pas laisser de trous apr`es une suppression (fragmentation)
Organisation en fonction d’un acc` es par adresse
Tout acc`es r´eel `a un enregistrement se fait en sp´ecifiant son adresse avec les hypoth`eses suivantes :
implantation contigu¨e des enregistrements
utilisation d’une table d’allocation associ´ee `a un fichier si les enregistrements sont de taille variable
utilisation d’une table des zones libres pour g´erer la fragmentation
On peut souhaiter demander au syst`eme l’acc`es `a un
enregistrement qui a certaines propri´et´es mais dont on ne connaˆıt pas l’adresse (fichier tr`es grand)
Exemple :
recherche du num´ero de t´el´ephone d’une personne en fonction de son nom, ou de sa ville, ou de plusieurs crit`eres
Notion de cl´ e ou d’identifiant
Certains champs (attributs) permettent de discriminer totalement une information :
ces attributs sont appel´es des cl´es
deux valeurs diff´erentes de la cl´e font r´ef´erence `a des
enregistrements diff´erents, ainsi, dans un fichier il ne peut pas y avoir deux enregistrements diff´erents ayant la mˆeme valeur de cl´e
Conclusion : chaque valeur de cl´e correspond `a une seul adresse d’enregistrement dans le fichier
Comment utiliser cette propri´et´e pour acc´eder au contenu d’un article en se basant sur la valeur de la cl´e ?
Acc` es au contenu via une cl´ e
Diff´erents types d’organisations ont ´et´e ´etudi´es depuis plus de 40 ans :
S´equentielle (fichiers tri´es selon la cl´e) S´equentielle index´ee
B-Arbre Al´eatoire
Principe de l’index
Le principe de l’indexation consiste `a bˆatir une table de correspondances (table d’index) entre :
les valeurs de la cl´e
es adresses des enregistrements sur le disque Pour faciliter les acc`es (rapidit´e) cette table doit ˆetre :
tri´ee
stock´ee dans un fichier (pas reconstruite `a chaque op´eration) charg´ee ou chargeable en m´emoire centrale
On parle alors de fichiers´equentiel index´eet plusieurs index peuvent ˆetre associ´e `a un mˆeme fichier et stock´es eux mˆeme dans des fichiers tri´ees.
Exemple d’index
Am´ elioration de l’index
Le principe de l’indexation peut ˆetre compl´et´e de plusieurs mani`eres :
Au lieu de la cl´e on peut utiliser un attribut discriminent (qui n’est pas une cl´e stricte), il y aura des doublons dans l’index On peut constituer une cl´e de l’index `a partir de plusieurs attributs (par exemple nom + pr´enom s’il y a des
homonymes) Exemple : mots d’un dictionnaire (1 mot = plusieurs sens donc plusieurs d´efinitions)
On peut cr´eer et combiner plusieurs index suivant les recherches effectu´ees (par nom, par adresse etc.)
On peut fragmenter l’index lorsque la la table est trop grande pour tenir en m´emoire principale
Exemple d’index
Organisation en arbre : B-arbre
Invent´e chez Boeing : B pour Boeing ou Balanced (´equilibr´e) L’id´ee principale est d’utiliser une cl´e pour naviguer
rapidement un article
Au lieu d’une table d’index, on utilise une structure plus adapt´ee aux recherches : un arbre donc chaque nœud a au plus n fils
Principe du B-Arbre :
Les articles dont la valeur de la cl´e est inf´erieure
(respectivement sup´erieure) `a l’enregistrement du nœud courant sont plac´es `a sa gauche (respct. `a sa droite)
cette structure comme l’index ne contient pas les articles mais seulement la valeur de la cl´e et la position (adresse) de l’enregistrement dans le fichier
Cette strat´egie est efficace si l’arbre est bien organis´e : ’il a autant de fils gauche que droits
Exemple d’index B-arbre
Organisation en arbre : B-arbre
Cette technique est int´eressante car la parcours de l’arbre revient `a une recherche dichotomique dont le nombre de comparaison est fix´e par la profondeur maximum de l’arbre Ce n’est v´erifi´e que si l’arbre est ´equilibr´e (balanced)
Chaque nœud doit avoir autant de descendants gauches que droit
Le principe est de construire d`es le d´epart un arbre ´equilibr´e puis de maintenir l’´equilibre au fur et `a mesure de sa croissance
On doit donc couper des branches et les regreffer ailleurs ? Que faire des suppressions dans l’arbre ?
B-arbre stock´ e comme un tableau
Organisation al´ eatoire : hash-coding
Les techniques pr´ec´edentes consistaient `a voir diff´eremment le fichier sans le modifier :
en lui associant une structure compl´ementaire l’index La technique de hash-coding consiste `a r´eorganiser le fichier :
on r´eserve une zone contigu¨e pour ranger des enregistrements cette zone est divis´ee enp paquets num´erot´es de 0 `ap−1 de taille fixe t
on utilise une fonction dite de hachage qui fait correspondre `a chaque valeur de cl´e un num´ero de paquet entre 0 et p−1 l’adresse r´eelle d’un enregistrement est l’adresse du paquet et un d´eplacement relatif au d´ebut du paquet
les cl´es peuvent ˆetre de type vari´es et le r´esultat est imp´erativement un nombre entier
Organisation al´ eatoire : hash-coding
L’acc`es `a un enregistrement s’effectue en appliquant la fonction de hachage `a la valeur de la cl´e pr´esent´ee pour obtenir un num´ero de paquet candidat :
Au sein d’un paquet, la recherche est s´equentielle Les articles dont rang´es par ordre d’arriv´ee
Pour d´efinir une fonction de hachage, il faut d’abord transformer les valeurs de la cl´e, souvent une chaˆıne en une valeur num´erique (un nombre entier) :
on se sert t du codage interne de la valeur des caract`eres qui est num´erique 8 bits ASCII 16 bits Unicode
on utilise abondamment la fonction modulo D. Knuth, Volume 3, Sorting and Searching (1973).
Organisation al´ eatoire : exemple
Organisation al´ eatoire : les limites
Lorsque le syst`eme fonctionne bien, pour une recherche : il y a seulement un acc`es direct
ensuite un petit d´eplacement (s´equentiel) Le probl`eme du hash-coding provient de ce que :
en fonction des donn´ees pr´esentes, certains paquets peuvent rester vides (m´emoire sous utilis´ee)
des paquets peuvent ˆetre en ´etat de d´ebordement (paquet satur´e)
il n’est pas possible de garantir `a l’avance ce qui se produira Pour pallier ces difficult´es en amont on doit faire en sorte que la fonction de hachage :
reste le plus possible repr´esentative de la valeur de la cl´e. Il y a alors peu de valeurs de cl´e diff´erentes pour un mˆeme num´ero de paquet
donne une r´epartition statistique uniforme des valeurs de cl´es sur les num´eros de paquets (?)
Organisation al´ eatoire : les limites
En aval en essaie de g´erer la saturation des paquets en utilisant des techniques de redirection des articles surnum´eraires :
Adressage ouvert
http://fr.wikipedia.org/wiki/Table_de_hachage Chaˆınage
Rehachage
Dans tous les cas le d´ebordement d´et´eriore les performances du syst`eme
Tables de hachage en Java
Une table de hachage Java qui permet une association
cl´e-´el´ements et propose au moins les fonctionnalit´es suivantes : put(key, value) : qui permet d’associer une valeur (objet)
`
a une cl´e ;
get(key): qui retourne l’objet qui a ´et´e associ´ee `a la cl´e, ou null s’il n’y en a pas ;
remove(key): qui supprime l’entr´ee associ´ee `a la cl´e dans la table (mais pas n´ecessairement l’objet).
Contraintes :
il ne peut pas y avoir deux entr´ees de mˆeme cl´e dans une table de hachage (on a bien un Setsur les cl´es);
une mˆeme valeur peut ˆetre associ´ee `a plusieurs cl´es diff´erentes, il s’agit donc d’une Collection.
Comportement abstrait des HT
L’interfaceMap<K,V>:
put(K key, V value),get(K key) etremove(K key) keySet(): retourne l’ensemble des cl´es de la table de hachage sous la forme d’unSet<K>
values(): retourne l’ensemble des valeurs stock´ees dans la table de hachage sous la forme Collection<V>
entrySet() : retourne l’ensemble des entr´ees de cette table de hachage c’est-`a-dire unSet dont les ´el´ements sont des Map.Entry.
clear(),size(),isEmpty(),containsKey(K key)et containsValue(V value)
putAll(Map map) pour d’ajouter toutes les cl´es de la table pass´ee en param`etre `a la table courante.
Entr´ ee de HT : l’interface Map.Entry
L’interfaceMap.Entry repr´esente la structure des couples (cl´e/valeur) d’une table de hachage et propose les m´ethodes :
getKey() getValue()
Pour obtenir un objetMap.Entry, faire un appel `a la m´ethode Map.entrySet(), it´erer sur leSetobtenu en retour.
Tables ordonn´ ees : interface SortedMap
L’interfaceSortedMap permet de stocker des tables de hachage tri´ees selon l’ordre des cl´es.
l’ordre doit ˆetre d´efini de mani`ere implicite (objets
Comparable) ou explicite au moyen d’un Comparator(objet qui impl´emente)
firstKey() etlastKey() : retournent la plus petite cl´e et la plus grande
headMap(K toKey) et tailMap(K fromKey): retournent des vues sur la table
subMap(K fromKey, K, toKey) : retourne une vue sur la table (entre les deux cl´es)
Tables ordonn´ ees : interface NavigableMap
NavigableMap est une sp´ecialisation de SortedMap avec des m´ethodes de s´election :
ceilingKey(K key) etfloorKey(K key) : retournent respectivement la plus petite cl´e sup´erieure ou ´egale, ou la plus grande cl´e inf´erieure ou ´egale `a la cl´e pass´ee en param`etre ceilingEntry(K key) et floorEntry(K key)
higherKey(K key) et lowerKey(K key) higherEntry(K key)et lowerEntry(K key) firstEntry() etlastEntry()
headMap(K sup, boolean inclusive)et tailMap(K inf, boolean inclusive)
subMap(K fromKey, K, toKey)
Impl´ ementations
L’API Java Collection fournit cinq impl´ementations de l’interface Map:
Hashtable, pr´esente depuis Java 1.2 synchronis´ee ; HashMap autorise les valeurs nulles mais n’est pas synchronis´ee ;
LinkedHashMap´etend HashMapet entretient une liste chaˆın´ee permettant d’it´erer sur les entr´ees dans un ordre fixe.
IdentityHashMap utilise l’op´erateur== pour savoir si deux cl´es sont identiques (les autres utilisent le r´esultat de la m´ethode equals)
WeakHashMapsi la cl´e n’est plus r´ef´erenc´ee ailleurs dans le programme, le couple est automatiquement supprim´e de la collection
L’interfaceSortedMap a une impl´ementation TreeMap. Cette classe impl´emente ´egalementNavigableMap.
Collections et concurrence
Depuis la version 1.2 l’orientation de Java pour les collections est l’am´elioration de la performance, par cons´equent les collections ne sont pas thread-safe. Cependant la classe collection permet d’ajouter un comportement sp´ecifique :
Collections.synchronizedCollection(Collection<T> c) Collections.synchronizedList(List<T> list)
Collections.synchronizedMap(Map<K,V> m) Collections.synchronizedSet(Set<T> s)
Collections.synchronizedSortedMap(SortedMap<K,V> m) Collections.synchronizedSortedSet(SortedSet<T> s)
Exemple
1 i m p o r t j a v a . u t i l .*;
2
3 c l a s s A r b r e { 4 S t r i n g n o m C o m m u n ; 5 S t r i n g g e n r e ; 6 S t r i n g f a m i l l e ; 7 S t r i n g r u s t i c i t e ; 8 int d u r e e V i e ;
9 p u b l i c A r b r e ( S t r i n g nom , S t r i n g f a m i l l e ) { 10 n o m C o m m u n = nom ;
11 t h i s. f a m i l l e = f a m i l l e ;
12 }
13 } 14
15 p u b l i c c l a s s T r e e H a s h {
16 p u b l i c s t a t i c v o i d m a i n ( S t r i n g arg []) { 17 A r b r e a1 =new A r b r e ( " ´e r a b l e " , " a c ´e r a c ´e e s " ) ; 18 A r b r e a2 =new A r b r e ( " h ^e t r e " , " f a g a c ´e e s " ) ;
19 // on c r ´e e une H a s h M a p p o u r des r e c h e r c h e sur le nom c o m m u n 20 Map < String , Arbre > l e s A r b r e s = new HashMap < >() ;
21 l e s A r b r e s . put ( a1 . n o m C o m m u n , a1 ) ; 22 l e s A r b r e s . put ( a2 . n o m C o m m u n , a2 ) ;
23 S y s t e m . out . p r i n t l n ( " E l ´e m e n t s : " + l e s A r b r e s . s i z e () ) ; 24 S y s t e m . out . p r i n t l n ( " - > " + l e s A r b r e s . get ( " ´e r a b l e " ) ) ; 25 for ( Map . Entry < String , Arbre > e n t r y : l e s A r b r e s . e n t r y S e t () )
26 S y s t e m . out . p r i n t l n ( " [ " + e n t r y . g e t K e y () + " ] - > " + e n t r y . g e t V a l u e () . f a m i l l e ) ;
27 }
28 }
Quelques lectures essentielles ` a un informaticien :
Algorithmique - 3`eme ´edition - Dunod - Edition 2010 Thomas Cormen, Charles Leiserson, Ronald Rivest , Clifford Stein Donald Knuth - The Art of Computer Programming, Volumes 1-3, le volume 3 chapitre 4 traite des tables de hachage.