• Aucun résultat trouvé

Lorsque la localisation du support physique est obtenue, il faut localiser l'objet externe sur le support. La méthode qui consiste à le localiser explicitement par les informations numériques dont nous avons parlé dans le chapitre 8, a été utilisée pendant quelques années, mais s'est avérée très vite inappropriée car elle est beaucoup trop sujette à erreurs. Il est plus judicieux de donner, aux objets externes, un nom symbolique constitué d'une chaîne de caractères. Un répertoire (ou encore un catalogue, en anglais directory) est en fait une table qui associe le nom symbolique d'un objet externe et le descripteur de cet objet externe, c'est-à-dire, les informations de localisation de l'objet sur le support ainsi que ses caractéristiques. Il est naturel de conserver ces informations sur le support lui-même, puisqu'elles sont nécessaires si et seulement si le volume correspondant est monté.

9.3.1. Le répertoire sur bande magnétique

Sur une bande magnétique, la nature séquentielle du support conduit naturellement à faire précéder l'objet externe d'un bloc spécial (appelé label de fichier) qui contiendra son nom symbolique et ses caractéristiques. Aucune information de localisation n'est alors nécessaire, puisqu'il est situé immédiatement derrière, si ce n'est un autre bloc spécial (appelé label de fin de fichier) qui en indique la fin. Pour accélérer les accès lors de la recherche d'un objet externe par son nom, la suite des blocs est structurée à l'aide de blocs drapeaux: ce sont des blocs physiques sur la bande, qui sont écrits par des commandes particulières et qui sont reconnus par le matériel même lorsque le déroulement se fait à grande vitesse (défilement rapide avant ou arrière). La figure 9.1 donne un exemple d'une telle structuration. Notons que si le dernier fichier est multi-volumes, la marque de fin de fichier n'est pas présente, et on trouve directement la marque de fin de volume.

label de volume

label de "FIC1" bloc 1 bloc 2 bloc n EOF label de "FIC2"

fin de volume

bloc 1 bloc 2 bloc m EOF label de "FIC3" bloc 1 bloc 2 bloc p EOF

Fig. 9.1. Exemple de structuration d'une bande magnétique. représente un bloc drapeau, EOF le

label de fin de fichier.

9.3.2. Répertoire simple sur disque

Sur disque, le secteur 0 est en général dédié pour donner les informations de base sur sa structure. Il faut en effet que ce soit au même endroit sur tous les volumes, et les fabricants garantissent que ce

Désignation des objets externes

- 83 -

secteur est exempt de tout défaut. Si le disque est partitionné, son secteur 0 définit la carte d'implantation des partitions, et le secteur 0 de chacune d'elles reçoit les informations de base sur la structure de la partition. Ce secteur peut donc en particulier contenir le nom du volume, mais aussi la localisation des informations nécessaires à la gestion de l'espace libre.

Une première solution consiste à réserver une partie dédiée de l'espace à la représentation du répertoire. Si elle est de taille fixe, cela limite le nombre d'objets externes que l'on peut mettre sur ce disque. Cette taille doit alors être judicieusement choisie. La localisation du répertoire peut être fixe ou variable en fonction du volume. Lorsque sa localisation est variable, elle est en générale repérée par des informations situées dans le secteur qui contient le nom du volume. Lorsque le disque doit recevoir des objets externes appartenant à plusieurs utilisateurs différents et indépendants, il peut être gênant d'avoir un seul répertoire, car les noms des objets doivent être distincts, et les utilisateurs doivent alors se mettre d'accord sur les noms qu'ils utilisent. Une solution consiste à ajouter implicitement devant les noms des objets les noms des utilisateurs. On peut aussi découper le répertoire en tranche, chaque tranche étant attribuée à un utilisateur particulier. En fait, on dispose plutôt d'un super-répertoire qui permet la localisation des répertoires individuels des utilisateurs. Seul ce super-répertoire doit être localisé de façon absolue, les autres sont considérés comme des objets externes particuliers, qui peuvent être créés au fur et à mesure des besoins. MS-DOS, dans ses premières versions, mais aussi certains gros systèmes utilisent cette méthode.

9.3.3. Arborescence de répertoires

Lorsque le nombre d'objets externes devient important, les solutions précédentes ne sont plus viables. Dans un système Unix, par exemple, on a constaté qu'il y avait 47000 fichiers sur un disque de 400 Mo. Même si on suppose que ces fichiers appartiennent à 100 utilisateurs différents, cela donne 470 fichiers en moyenne par utilisateurs. Même sur un ordinateur personnel, il n'est pas rare d'avoir près de 5000 fichiers sur un disque de 500 Mo. Si tous ces fichiers sont repérés dans un répertoire unique, cela implique d'une part de bien choisir les noms pour n'avoir pas de confusion, d'autre part cela entraîne des temps de recherche importants dans le répertoire.

La solution qui est couramment adoptée actuellement est de partitionner l'espace des noms des objets externes. Notons que, dans l'approche du paragraphe précédent, nous avions introduit la notion de super-répertoire permettant de disposer de répertoires séparés pour les utilisateurs. Ceci nous a conduit à considérer qu'un répertoire était un objet externe particulier. La généralisation de cette idée consiste à considérer qu'un répertoire est une table qui associe un nom et un descripteur d'objet externe au sens large, c'est-à-dire fichier de données manipulé par un programme, ou répertoire. Au lieu d'un répertoire plat, on obtient une arborescence de répertoire, dont seule la racine est localisée de façon absolue.

spécifications documents appl_graph graph.spec program sources objets graph.doc lib_objets module1.o module2.o includes module1.c module2.c

Fig. 9.2. Exemple d'arborescence de répertoire.

La figure 9.2 donne un exemple d'une telle arborescence. Le répertoire racine contient trois entrées pour les répertoires de nom documents, appl_graph et specifications. Le répertoire

Environnement externe

- 84 -

appl_graph contient aussi trois entrées, la première associe le nom program et un fichier, alors que

les deux autres associent les noms sources et objets avec deux répertoires. Enfin, le répertoire sources contient une entrée pour le répertoire includes et deux entrées pour les fichiers de nom module1.c et module2.c. Cet exemple montre tout le bénéfice qu'un utilisateur peut retirer d'une

arborescence, en regroupant dans un même répertoire des entités qui présentent une propriété de cohérence donnée. Ainsi, le répertoire documents pourrait regrouper les fichiers de documentation,

et le répertoire sources regrouper les fichiers sources de l'application appl_graph, dont includes

constitue le sous-groupe des fichiers qui peuvent être inclus dans les fichiers sources par les préprocesseurs.

La désignation d'un objet externe doit permettre d'une part d'identifier le volume qui contient l'objet et d'autre part de localiser l'objet sur ce volume. Lorsqu'on a une arborescence de répertoires, la localisation de l'objet sur le volume consiste donc à définir le chemin depuis la racine jusqu'à l'objet dans cette arborescence. C'est donc une suite de noms qui doivent être utilisés, pour désigner la suite des répertoires à parcourir pour atteindre l'objet recherché. Chacun de ces noms permet de désigner le répertoire suivant (ou l'objet recherché) dans le répertoire courant. Un nom étant une chaîne de caractères, il est courant de définir une structure lexicale rudimentaire qui permet de définir sous la forme d'une seule chaîne de caractères l'identification du volume et la suite de noms précédente. C'est ce que l'on appelle le nom absolu de l'objet ou encore le chemin d'accès à l'objet (en Anglais le pathname).

Par exemple, les versions récentes de MS-DOS utilisent le caractère “:” comme séparateur entre le

nom du volume (en fait le nom symbolique du périphérique) et le nom de l'objet sur le volume, et le caractère “\” comme séparateur entre les noms de répertoires, ce que l'on peut énoncer de la façon

suivante:

[nom_de_volume:]{\nom_répertoire}\nom_objet

Ainsi le nom absolu “C:\appl_graph\sources\module1.c” désigne un objet sur le volume C. Sur

ce volume, il faut rechercher dans le répertoire racine le répertoire appl_graph, puis dans celui-ci

le répertoire sources, et dans ce dernier l'objet module1.c.