Université BORDEAUX 1 U.F.R. Mathématiques et Informatique
Epreuve de J.Bétréma 8 septembre 1999


Maîtrise d'Informatique
Architecture Unix-NT

Durée: 2 heures
Tous documents interdits.

Le barème indicatif indique l'importance relative des questions ; une règle de trois est appliquée lors de la correction pour obtenir des notes échelonnées entre 0 et 20.

Un corrigé est disponible après le sujet.

1. Montage de systèmes de fichiers. Liens.

Voici un extrait d'une session Unix :
+nestor:~$ df /tmp
Filesystem   1024-blocks     Used  Available  Capacity  Mounted on
/dev/hda1        1190014  1052627      75901     93%    /

+nestor:~$ df /home/samba
Filesystem   1024-blocks     Used  Available  Capacity  Mounted on
/dev/hda4        1474727   637319     761204     46%    /home
  1. (2 points) Comment appelle-t-on, dans la terminologie Unix, les répertoires /dev/hda1 et /dev/hda4 ? Quel est leur rôle ?

  2. (2 points) Le répertoire /home est un point de montage ; expliquer de quoi il s'agit, et le principe technique de réalisation.

  3. (1 point) Comparer NT et Unix en ce qui concerne le montage de systèmes de fichiers.
Voici un autre extrait de la même session Unix :
+nestor:~/public_html$ pwd
/usr/labri/betrema/public_html

+nestor:~/public_html$ df .
Filesystem         1024-blocks     Used  Available Capacity Mounted on
raid2:/export/home   175087221 45435453  127900896     26%  /auto/raid2/export/home

+nestor:~/public_html$ ls -li | grep seminaire
832737 -rw-r--r--   2 betrema  combenum    10557 May 17 19:45 seminaire.html
832740 -rw-r--r--   1 betrema  combenum    23552 Sep 29  1997 seminaire96.html
832741 -rw-r--r--   1 betrema  combenum     8012 Oct 14  1998 seminaire97.html
832737 -rw-r--r--   2 betrema  combenum    10557 May 17 19:45 seminaire98.html
  1. (2 points) Quel est (vraisemblablement) le type du fichier /usr/labri/betrema et quel est son rôle ?

  2. (2 points) Quelle est la particularité fondamentale de ce montage, et quel protocole utilise-t-il (vraisemblablement) ?

  3. (2 points) Quel est le premier champ affiché par la commande "ls -li" ? Pourquoi la première et la quatrième lignes du résultat de cette commande sont-elles identiques (au nom près) ?

  4. (2 points) Le résultat de la commande "ls -li" pourrait-il comporter les deux lignes suivantes ?
    832737 -rw-r--r--   2 betrema  combenum    10557 May 17 19:45 seminaire.html
    832737 -rw-rw-rw-   2 betrema  combenum    10557 May 17 19:45 seminaire98.html
    
    Justifier soigneusement la réponse.

  5. (2 points) Peut-on faire en sorte que le résultat de la commande "ls -li /tmp" comporte la ligne suivante ?
    832737 -rw-r--r--   3 betrema  combenum    10557 May 17 19:45 seminaire.html
    
    Justifier soigneusement la réponse.

2. Projection de fichier en mémoire.

Voici le texte source du programme mystere (on a omis volontairement la liste des fichiers d'en-têtes à inclure) :
void main (int argc, char **argv) {
  struct stat buf;
  int desc;
  char *ptr_debut, *ptr_fin;
  int debut, fin;

  sscanf (argv[2], "%d", &debut);
  sscanf (argv[3], "%d", &fin);
  
  stat (argv[1], &buf);
  if (buf.st_size < fin)
    fin = buf.st_size;
  desc = open (argv[1], O_RDONLY);
  ptr_debut = mmap (
    NULL,            /* adresse de projection non spécifiée */
    debut - 1,       /* taille du segment */
    PROT_READ,
    MAP_PRIVATE,
    desc,
    (off_t) 0        /* offset = décalage */
  );
  ptr_fin = mmap (
    NULL,
    buf.st_size - fin,
    PROT_READ,
    MAP_PRIVATE,
    desc,
    (off_t) fin
  );

  close (desc);
  desc = open (argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666);

  write (desc, ptr_debut, debut - 1);
  write (desc, ptr_fin, buf.st_size - fin);
  close (desc);
} 
  1. (12 points) Décrire en détail l'exécution du processus lancé par la commande "mystere essai 5 8", où essai désigne un fichier de 15 octets. Commenter précisément chaque appel-système.

    De façon générale, quelle est la fonction de ce programme ?

  2. (3 points) Ajouter les instructions nécessaires pour traiter les principaux cas d'erreurs.
Note : cet exercice est emprunté à l'ouvrage Unix, 99 exercices corrigés, de Jean-Marie Rifflet, publié chez Ediscience en 1996.

Corrigé

1. Montage de systèmes de fichiers. Liens.

  1. Les répertoires /dev/hda1 et /dev/hda4 sont des fichiers spéciaux qui désignent des pilotes de périphériques, ici des pilotes de disques. Il est vraisemblable qu'ici un seul pilote gère deux partitions du même disque, numérotées 1 et 4.

  2. Le répertoire /home est un point de montage qui correspond à la racine d'un système de fichiers. Techniquement, le montage est réalisé par "superposition" de deux inodes ; les points de montage sont conservés dans une table du système.

    Voici par exemple un extrait du répertoire / fourni par un programme de lecture directe des répertoires :

    +nestor:~/systemes$ dir /
    inode      2, .                inode  32641, root
    inode      2, ..               inode  34681, sbin
    inode     11, lost+found       inode  36721, usr
    inode   2041, home             inode  10221, misc
    inode   4081, var              inode  24632, net
    inode   6121, dev              inode 186000, dos
    inode   8161, etc              inode 120646, opt
    inode  10201, tmp              inode 120680, tftpboot
    inode  14281, bin              inode 269658, cdrom
    inode  16321, boot             inode  24619, c
    inode  20401, lib              inode    213, bookmarks
    inode  24481, mnt              inode  34963, nsmail
    inode  30601, proc             inode 263241, sam
    
    Et voici le résultat de la commande ls, qui tient compte des points de montage :
    +nestor:~$ ls -Ui /
         11 lost+found    14281 bin           34681 sbin         120680 tftpboot
          2 home          16321 boot          36721 usr          269658 cdrom
          2 var           20401 lib           10221 misc          24619 c
       6121 dev           24481 mnt               3 net             213 bookmarks
       8161 etc               1 proc         186000 dos           34963 nsmail
      10201 tmp           32641 root         120646 opt               2 sam     
    
    Les répertoires home, sam et var, qui ont apparemment le même inode (numéro 2), sont des points de montage (les répertoires proc et net sont des points de montage de systèmes de fichiers virtuels).

  3. NT ignore le concept de montage de systèmes de fichiers. L'ensemble des fichiers accessibles ne forme donc pas un arbre, mais une forêt. Un chemin absolu commence par une lettre, qui identifie la partition. Exemple : C:\home\...

  4. Le fichier /usr/labri/betrema est probablement un lien symbolique sur /auto/raid2/export/home/betrema.

  5. Ce montage concerne un système de fichiers d'une machine distante, et utilise le protocole NFS.

  6. Le premier champ affiché est le numéro d'inode. La première et la quatrième lignes correspondent à deux liens (hard links) sur le même fichier. Autrement dit le répertoire contient deux entrées avec le même numéro d'inode.

  7. Non. Les droits d'accès font partie des attributs enregistrés dans l'inode. Donc deux liens sur le même inode ne peuvent pas apparaître avec des droits d'accès différents.

  8. Non. On pourrait penser qu'il suffit de créer un troisième lien :
    +nestor:~/public_html$ ln seminaire.html /tmp/seminaire.html
    
    ln: cannot create hard link `/tmp/seminaire.html' to `seminaire.html':
    Invalid cross-device link
    
    mais c'est impossible entre systèmes de fichiers différents, comme le rappelle le message ci-dessus.