9

La désignation des objets externes

Nous avons dit précédemment que l'accès à un objet externe dans un programme se faisait par l'intermédiaire d'un fichier logique, point de vue du programmeur, qui devait être relié à l'exécution avec un tel objet externe. L'établissement du lien proprement dit est réalisé par l'opération d'ouverture du fichier. Les paramètres de cette opération doivent permettre de localiser l'objet externe, et d'en trouver les caractéristiques.

9.1. La définition d'une liaison

Les avis divergent sur l'endroit où doit se trouver cette définition. Dans certains systèmes, cette définition ne fait pas partie du programme, mais de son environnement. Aussi, c'est le langage de commande qui propose des commandes permettant cette définition. Ceci offre l'avantage de bien faire la séparation entre l'algorithme et les objets sur lesquels s'exécute l'algorithme. Par ailleurs, cela permet de prendre en compte un grand nombre de paramètres, avec des valeurs par défaut pour chacun d'eux, ce qui n'est pas toujours possible dans les langages évolués. Enfin cela évite de faire dépendre certaines fonctionnalités du système, de la possibilité de les exprimer dans les langages évolués. Cette méthode est souvent appliquée sur les gros systèmes qui privilégient le traitement par lots, et qui peuvent recevoir des périphériques divers, impliquant un nombre important de paramètres de la définition d'une liaison (près de 150 paramètres pour une commande //DD d'IBM). Cela permet également au système de savoir quels seront les besoins du programme avant d'en lancer l'exécution, et de la retarder si ces besoins ne peuvent être satisfaits. En général, la mise en correspondance entre le programme et le langage de commande est obtenue par un nom logique (identificateur) donné au fichier explicitement par le programmeur ou implicitement par le traducteur, et repris par l'utilisateur dans la commande de définition.
Par opposition, d'autres systèmes supposent que les paramètres de l'ouverture d'un fichier sont déterminés par le programme et sont partie intégrante de la demande d'exécution de l'opération. On évite de trop fortes contraintes entre les langages et le système en ayant assez peu de paramètres, dont au moins un est une simple chaîne de caractères qui n'est pas interprétée par le langage évolué, et qui joue ainsi le rôle de “commande”. Cette méthode offre l'avantage de permettre au programme d'avoir une certaine maîtrise sur la définition de la liaison. En particulier, lorsque le programme est utilisé de façon interactive, il est possible de cacher à l'utilisateur du programme la complexité de l'interface système concernant les objets externes, sans pour autant devoir toujours relier le fichier avec le même objet externe.
Lorsque l'objet externe est directement un périphérique physique, la définition de la liaison est relativement simple, car ces périphériques existent en nombre très limité, et leurs nombres ou caractéristiques varient très peu pour une installation donnée. On peut donc leur donner un nom mnémonique spécifique qui est connu de tous les utilisateurs. Ce nom est ensuite utilisé par le système pour en trouver la localisation et les caractéristiques au moyen d'une recherche dans ses tables internes. Il trouve ainsi, non seulement le descripteur du périphérique, mais également les procédures de traitement des opérations qui le concernent. Par ailleurs ces tables permettent de savoir l'état libre ou occupé de ces périphériques, et d'en assurer ainsi la gestion.
Lorsque l'objet n'est pas un périphérique, mais est un fichier physique sur un support magnétique, la définition doit permettre de:
La notion de volume est souvent utilisée pour permettre la localisation du support, et la notion de répertoire pour permettre la localisation sur le support ainsi que la détermination des caractéristiques de l'objet lorsqu'il existe déjà.

9.2. La notion de volume

La localisation du support par localisation du périphérique n'est pas acceptable dès que le support lui-même est amovible. Le périphérique permet d'accéder au support qui est actuellement monté sur ce périphérique. Pour l'utilisateur, il importe plus d'accéder à un support donné que d'accéder au périphérique sur lequel il est monté. Pour la bonne exécution des opérations, il importe plus au système de savoir quel périphérique est concerné par les opérations. En première approche, on appelle volume un support d'informations, tel que, par exemple, une bande magnétique, une cartouche, une disquette, ou une pile de disque (une gamelle). Il est important de noter que le volume est quelque chose que l'on manipule comme un tout, et que, comme support d'objets externes, il a une structure qui lui est propre. En tant que support, il est de nature physique, mais en tant que structure, il est de nature logique.
Le fait qu'il puisse être amovible, implique qu'il peut ne pas être accessible, et c'est alors sa nature physique seule qui nous intéresse, puisqu'on ne peut lire alors son contenu. Au contraire, pour être accessible, il doit être disponible sur un périphérique particulier, et sa structure reconnue, et c'est donc sa nature logique seule qui nous intéresse. On appelle montage d'un volume l'opération qui rend accessible son contenu, et démontage l'opération qui le rend inaccessible.

9.2.1. La structuration d'un volume

Le fait qu'un volume puisse être amovible implique que l'ensemble des informations qui y sont mémorisées doivent être suffisantes pour en définir le contenu. Il est donc nécessaire que l'on y trouve deux types d'informations:
Le permier type d'informations est directement lié à la localisation des objets sur le support. Nous verrons ultérieurement les structures permettant de résoudre ce problème. Le deuxième type d'informations est en fait la représentation de l'espace libre dont nous avons parlé dans le chapitre précédent.
Lorsqu'un volume n'est pas monté, c'est sa nature physique qui nous intéresse. Encore faut-il être capable de l'identifier parmi l'ensemble des volumes existants pour l'installation. Ceci passe en général par une étiquette collée directement sur le support, qui permet à l'opérateur d'accéder à cette identification. Pour permettre un contrôle par le système de cette identification, le contenu de cette étiquette est souvent recopié dans le volume lui-même. C'est ce que nous appellerons le nom du volume (en Anglais le label du volume).
L'ensemble de ces informations de gestion doivent évidemment être placées à des endroits prédéfinis par le système de façon à lui permettre de les retrouver. Ceci doit être fait avant de faire un accès quelconque au support. C'est ce que l'on appelle le formatage du volume. Il consiste à lui donner un nom, à construire la représentation de l'espace libre initial et à initialiser la structure de données qui permet de localiser les objets existants sur le volume.
Ce formatage peut être conforme à un standard international (ANSI) ou national (AFNOR), ce qui permettra aux utilisateurs d'échanger ces volumes pour communiquer des données. C'est souvent le cas pour les bandes magnétiques. Ce formatage peut également être un “standard de fait”, défini par un système et universellement adopté par d'autres systèmes, comme par exemple les disquettes MS-DOS. Ce formatage peut être propre à un constructeur pour tout ou partie de sa gamme. C'est souvent le cas pour les disques, car ils sont assez peu utilisés pour permettre la communication entre machines, mais essentiellement pour la mémorisation locale. La portabilité n'est pas alors un critère important, alors que l'efficacité de l'exploitation du support l'est.

9.2.2. Le montage de volume

L'opération de montage de volume est constituée de trois étapes: choix du périphérique, montage physique du volume sur le périphérique et modification des tables du système. Lorsque ces opérations sont terminées, le système connaît l'association entre le nom du volume logique et le périphérique. L'utilisateur n'a plus à s'en préoccuper et peut donc localiser le périphérique par le nom du volume logique. L'opération de démontage est elle en deux étapes: modification des tables du système puis démontage physique. Il est en effet important qu'il y ait accord préalable entre l'opérateur et le système pour qu'aucun lien ne soit établi au moment du démontage physique, ce qui pourrait nuire à la cohérence des objets sur le support.
Le choix du périphérique, que l'on appelle l'allocation, peut être fait par le système de façon automatique. En effet, le système connaît un besoin immédiat d'un programme, soit par la présence de la définition d'un lien dans les commandes qui précèdent la demande d'exécution d'un programme, soit par une demande d'établissement du lien par le programme. Si le volume désiré n'est pas monté, le système peut alors allouer lui-même un périphérique parmi ceux qui sont libres, c'est-à-dire, ceux qui ne sont pas associés à un volume, et demander à l'opérateur de faire le montage physique du volume concerné sur ce périphérique. Cette méthode est surtout appliquée lorsque la définition des liens est donnée dans le langage de commandes, car le système peut anticiper les allocations et faire les choix en fonction de l'ensemble des besoins de tous les programmes qui sont en attente d'exécution.
L'allocation peut être faite par l'opérateur, par anticipation, car il a connaissance du besoin avant qu'il ne soit effectivement exprimé au système. C'est souvent le cas lorsque l'on désire permettre les accès aux objets mémorisés sur un volume pendant une période définie de la journée. Notons que l'opérateur peut constater de visu l'état libre d'un périphérique par le fait qu'aucun support n'y est actuellement monté physiquement.
Le montage physique est une opération manuelle (sauf pour les robots spécialisés de montage de cartouches). L'opérateur retrouve dans un stock plus ou moins important de volumes, celui qui est demandé et qui est désigné par son étiquette, et le place sur le périphérique alloué. Durant cette opération, le périphérique est “déconnecté” de l'ordinateur, c'est-à-dire, que celui-ci ne peut y accéder. On dit qu'il est en mode local (ou encore off line). Lorsque le placement est terminé, l'opérateur le fait passer en mode distant (ou encore on line). Cette opération n'est en général pas instantanée, car elle demande, par exemple, un positionnement sur les dérouleurs de bande, et une mise en rotation sur les tourne-disques.
Lorsque le montage physique est terminé, le système doit mettre à jour ses tables. Ceci peut être fait manuellement par une commande de l'opérateur, ou automatiquement lorsque le système détecte le passage en mode distant d'un périphérique. Dans ce dernier cas, on dit qu'il y a reconnaissance automatique de volume. Le système peut alors lire le nom du volume sur le périphérique, et mémoriser dans ses tables ce nom associé au périphérique. Notons que même si l'allocation de périphérique a été faite par le système, l'opérateur peut néanmoins placer le volume sur un autre périphérique libre. C'est bien au moment où le système lit le nom du volume sur le périphérique que l'association est faite. Avant cet instant, il ne s'agit que de propositions.

9.2.3. La relation entre volume et support

La notion de volume est évidemment liée au support, ce qui implique des contraintes de taille de l'espace total, qui peuvent être jugées trop fortes. D'une part, un support peut être de taille trop faible pour contenir un objet externe donné, qui pourtant doit se trouver sur un seul volume. D'autre part, nous avons vu dans le chapitre précédent qu'un support de très grande taille était parfois mal adapté pour recevoir beaucoup de petits objets.
Le premier cas est surtout celui des bandes magnétiques. Certains systèmes offrent la notion de multi-volumes. Elle peut être vue comme une facilité du logiciel, de définir la localisation du support non plus au moyen d'un volume unique, mais par une collection de volumes. Le système considèrera la collection comme une seule bande, les volumes étant dans l'ordre où la collection est définie.
Le deuxième cas est celui des disques. Dans ce cas, il est assez courant maintenant de découper l'ensemble de l'espace d'un disque en partitions qui sont des portions indépendantes du disque, et qui en tant que tel seront considérées comme des supports séparés. Chaque partition est ensuite structurée en volume. Lorsque le disque est monté, (passage en mode distant), le système explore son découpage en partition pour identifier chacun de ces supports permettant ensuite le montage des volumes qui les structurent.
Certains systèmes combinent les deux principes, en permettant d'agréger plusieurs partitions situées éventuellement sur des disques différents en un seul support qui peut ainsi être structuré en un volume unique. Cela permet d'obtenir un volume de grande taille à partir de plusieurs petits disques, ou d'utiliser au mieux de petites partitions restantes éparpillées sur plusieurs disques. Notons que la répartition des données d'un volume sur plusieurs disques peut améliorer les performances, car elle permet les accès simultanés. Nous verrons d'autres applications dans le chapitre suivant.

9.3. La notion de répertoire

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.

Fig. 9.1. Exemple de structuration d'une bande magnétique. O 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 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.

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 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.

9.4. Construction d'une arborescence unique à la Unix

La structure de désignation à laquelle nous venons d'aboutir dans le paragraphe précédent s'apparente à une arborescence unique: à la racine se trouve la désignation des volumes ou des périphériques, permettant l'accès à une sous-arborescence locale à chaque volume. Le système Unix présente à l'utilisateur l'ensemble des objets sous une véritable arborescence unique et une désignation uniforme dans cette arborescence.

9.4.1. Les fichiers spéciaux comme périphériques

On peut remarquer qu'une entrée particulière d'un répertoire associe un nom, local au répertoire, et un descripteur d'objet. Si l'objet est un fichier au sens classique du terme, le descripteur doit contenir les caractéristiques du fichier (organisation, par exemple) et les informations de localisation du contenu. Si l'objet est un répertoire, le descripteur doit contenir également les caractéristiques, en particulier, l'indication qu'il s'agit d'un répertoire, et les informations de localisation du contenu. Ce descripteur doit donc permettre de distinguer la nature fichier ou répertoire de l'objet associé.
L'idée des concepteurs d'Unix est que l'on peut créer un descripteur de nature différente des précédentes, appelé fichier spécial, pour désigner cette fois un périphérique de l'installation. Un tel descripteur contient, en particulier, un numéro de périphérique majeur qui détermine le type du périphérique (terminal, disque, bande, etc...) et un numéro de périphérique mineur qui détermine le périphérique particulier du type correspondant. Évidemment ces numéros n'ont de sens que sur une installation donnée.
Dans la plupart des installations, un répertoire particulier (/dev) regroupe les descripteurs de tous les périphériques, et les noms locaux qui leur sont associés. Par exemple /dev/lp désigne l'objet de nom lp dans le répertoire de nom dev situé à la racine. C'est la nature du descripteur de l'objet qui permet au système de constater qu'il s'agit de l'imprimante de l'installation. L'intérêt est donc essentiellement dans la désignation uniforme ainsi obtenue.

9.4.2. Le montage de volume dans Unix

Comme nous l'avons dit, un volume contient sa propre arborescence locale qui permet la désignation des objets sur le volume. Pour obtenir une arborescence unique lorsque l'on monte un volume, il faut raccrocher cette arborescence locale quelque part dans l'arborescence courante. L'option adoptée par le système est de permettre de la raccrocher n'importe où, à la place d'un répertoire. L'arborescence locale vient alors remplacer la sous-arborescence issue de ce répertoire. En général, on utilise un répertoire vide, mais ce n'est pas obligatoire. Si ce n'est pas le cas, les objets qu'il contenait sont momentanément inaccessibles.

Fig. 9.3. Exemple de montage d'un volume dans Unix. L'arborescence locale du volume remplace l'arborescence de /developt.
La figure 9.3 montre le résultat du montage du volume dont l'arborescence a été présentée en figure 9.2, sur le répertoire de nom absolu /developt dans l'arborescence initiale. Lorsque le montage est terminé, on accède aux objets du volume en faisant précéder le nom local de l'objet sur le volume par le nom absolu du répertoire sur lequel le volume a été monté, comme, par exemple, dans:
/developt/appl_graph/sources/module1.c
En général les opérations de montage sont effectuées par l'opérateur qui choisit le périphérique (allocation manuelle) et le répertoire sur lequel les volumes sont montés. Pour l'utilisateur, il ne voit qu'une arborescence unique, et n'a plus à se préoccuper du support de ses objets. Comme les périphériques sont aussi désignés dans l'arborescence, il a donc un mécanisme uniforme de désignation de tous les objets externes.

9.4.3. Les fichiers multi-répertoires

Lorsque plusieurs utilisateurs travaillent sur un projet commun, ils doivent pouvoir accéder à des fichiers qu'ils ont en commun. En fonction de ce que nous avons dit ce n'est pas difficile, puisque tout objet a un nom absolu. Il arrive souvent que chacun aimerait le voir à un endroit précis de l'arborescence, qui n'est pas le même pour tous. Certains systèmes qui offrent une arborescence de fichiers (VMS, Unix, Multics) permettent de situer un même fichier à plusieurs endroits de cette arborescence. Évidemment, nous n'avons plus tout à fait un arbre, mais un graphe orienté sans cycle.
Deux méthodes sont utilisées pour cela. La première utilise ce que l'on appelle les liens physiques. Ils ne sont autorisés que pour les fichiers de données (et donc interdits pour les répertoires ou les fichiers spéciaux). Pour pouvoir prendre en compte les liens physiques, les descripteurs d'objets ne sont pas mis dans les répertoires, mais dans une zone particulière du disque, et sont repérés par un numéro appelé i-nœud dans le système Unix. Les répertoires associent les noms symboliques locaux et les numéros de descripteurs d'objets. Il est ainsi possible de créer une autre association entre un nom et ce numéro dans un autre répertoire. Le fichier possède alors deux (ou plus) noms absolus. L'utilisateur ne détruit plus les objets directement, mais les liens physiques vers ces objets. La destruction d'un objet externe intervient lorsque le système constate qu'il n'y a plus de lien physique pour cet objet. Évidemment si un utilisateur détruit un lien physique dans un répertoire vers un objet commun, et recrée un nouvel objet de même nom dans ce répertoire, l'objet ancien reste désigné par ses autres noms symboliques absolus.
La deuxième méthode utilise ce que l'on appelle les liens symboliques. Lorsque l'on crée un lien symbolique n dans un répertoire pour un objet O situé ailleurs, le système n'associe pas le nom local avec le descripteur de l'objet O, mais avec le nom symbolique absolu de l'objet O. L'objet O peut d'ailleurs ne pas exister au moment où l'on crée le lien symbolique. Par contre lorsque l'on cherche à accéder à l'objet par le nom n, le système interprètera à ce moment le nom symbolique absolu qui lui est associé pour trouver O. Évidemment comme le nom symbolique absolu est réinterprété à chaque désignation qui utilise n, cela est plus coûteux, mais on est sûr alors de ne pas trouver une ancienne version de l'objet. Par ailleurs, les liens symboliques sont autorisés pour les objets de toute nature, y compris les répertoires. Cette méthode se généralise bien aux systèmes répartis.

9.4.4. La désignation par rapport à l'environnement

L'arborescence de répertoire conduit à une désignation des objets relativement longue. On a donc cherché à alléger cette désignation. De fait, si une installation comporte plus de 100 000 objets externes, un utilisateur n'a besoin d'accéder qu'à une petite partie d'entre eux à un instant donné. Plusieurs solutions ont été proposées, en particulier, la notion de répertoire de travail et la notion de règles de recherche.
Pour tout utilisateur actif, le système privilégie un répertoire particulier de l'arborescence, et que l'on appelle le répertoire de travail. Des commandes permettent à l'utilisateur de changer son répertoire de travail à tout instant. Outre la désignation des objets par leur nom absolu, c'est-à-dire, en partant de la racine de l'arborescence, l'utilisateur peut désigner un objet en donnant son chemin d'accès à partir de ce répertoire courant. En Unix, tout chemin d'accès ne commençant pas par “/” est considéré comme relatif au répertoire courant. Il en va de même pour MS-DOS, si le chemin ne commence pas par “\”. Pour permettre de remonter dans l'arborescence, chaque répertoire de ces systèmes contient une entrée, dont le nom est prédéfini “..”, qui est associée au répertoire situé au-dessus dans l'arborescence. Pour être complet, signalons qu'il existe une deuxième entrée de nom prédéfini “.” qui est associée au répertoire lui-même. Ainsi, après la commande suivante qui définit le répertoire courant:
	cd /developt/appl_graph/sources
le fichier de nom absolu /developt/appl_graph/sources/module1.c peut être désigné simplement par module1.c.
La notion de règles de recherche consiste à définir une liste de noms absolus de répertoires qui sont utilisés pour la recherche d'un objet dans un contexte particulier. Par exemple, on définit couramment une liste de répertoire pour la recherche du programme exécutable d'une commande, ce qui évite de devoir se rappeler dans quel répertoire il est situé. De même, on peut définir une liste de répertoire dans lequel il faut rechercher les fichiers d'un manuel en ligne du système. Ces règles de recherche peuvent être définies implicitement par le système, et modifiables au gré de l'utilisateur qui peut ainsi adapter son environnement à sa convenance.

9.5. Conclusion

+ La définition d'une liaison doit permettre de localiser le support physique de l'objet, de localiser l'objet sur le support et de déterminer les caractéristiques de l'objet. Elle est donnée soit par le langage de commande soit par les programmes.
+ Un volume est un support d'informations. Pour être accessible il doit être monté physiquement sur un périphérique et logiquement reconnu par le système, c'est-à-dire que le système associe ce périphérique à son nom.
+ Le formatage d'un volume consiste à lui donner une structure qui comporte en particulier son nom, la représentation de l'espace libre et les structures de données nécessaires à la localisation des objets qu'il contient.
+ Un répertoire est une table qui associe un nom symbolique et le descripteur d'un objet externe. Mémorisé sur un volume, il permet de localiser les objets de ce volume. Lorsque le nombre d'objets est grand, on utilise une arborescence de répertoire.
+ Le chemin d'accès à un objet est la concaténation du nom de volume sur lequel il se trouve et de la suite des noms dans les répertoires de l'arborescence qui permet de l'atteindre.
+ Unix construit une arborescence unique pour tous les objets, y compris les périphériques, qui ont ainsi une désignation uniforme qui permet à l'utilisateur de s'abstraire des périphériques.
+ Les liens physiques ou symboliques permettent de donner plusieurs noms absolus aux objets.
+ La désignation peut être allégée en faisant référence à l'environnement, au moyen de la notion de répertoire de travail et de règles de recherche.