Département INFormatique 
  CSC4508/M2 : Concepts des systèmes d'exploitation et mise en œuvre sous Unix
    Évaluation

Institut National des Télécommunications
Télécom INT 2è année

TP Noté CS21 du 24/06/03
(2è session)

Corrigés

Modalités

Durée : 1h30

Tous documents autorisés

Les questions 1 à 5 sont indépendantes les unes des autres. La question 6 dépend de la question 5.

Le barême est donné à titre indicatif. Pour le code, seront notés :
  • La clarté du code,
  • Le fait que le code compile (sans warning),
  • La justesse du code par rapport à la question posée,
  • Le fait que le retour de chaque appel système, s'il y en a un, est testé avec appel à perror(), puis exit(1) en cas de problème détecté,
  • La libération des ressources système réservées pendant l'exécution du programme, à la fin de son exécution.
La "livraison de la copie" en fin de TP noté pour les questions 5 et 6 se fera par envoi d'un mail à Michel.Simatic@int-evry.fr, sujet "TP noté 2 CS21" avec en pièce jointe le fichier d'extension tgz constitué de la manière suivante :
cd ~/CS21
tar cvfz $USER.tgz TPNote2

Préparation

cd
mkdir CS21
cd CS21
cp ~simatic/CS21/tpNote2.tgz .
tar xvfz tpNote2.tgz
cd TPNote2

Question 1 : Mémoire (2 points)

Vous avez développé une application CPU-intensive qui, au cours de son exécution, effectue un million d'accès mémoire.
Cette application étant lente, vous lui appliquez la commande time pour en faire une première analyse. Voici le résultat de la commande time :

$ /usr/bin/time monAppli

0.15user 20.37system 8:03.29elapsed 4%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (540837major+100000minor)pagefaults 0swaps

Expliquer, sur feuille, le(s) problème(s) de performances de votre application (5 lignes maximum).
Puis présenter brièvement (3 lignes maximum par cas) les solutions envisageables dans les cas suivants :
  1. Vous avez du temps.
  2. Vos finances permettent un investissement.

Question 2 : Communications et synchronisations (3,5 points)

Le nouveau système d'exploitation "Winux" ne dispose que de tubes pour les communications inter-processus (il n'offre donc pas de file de messages, de sémaphore, de moniteur ou de mémoire partagée).
Parmi les paradigmes de synchronisation de processus suivants :
  1. Exclusion mutuelle
  2. Cohorte
  3. Passage de témoins : Envoi de signaux
  4. Producteurs/consommateurs
  5. Lecteurs/rédacteurs
Choisir 2 paradigmes qui vous semblent implémentables sous "Winux" avec un seul tube.
Expliquer, sur feuille, l'implémentation envisagée (5 lignes maximum par paradigme retenu).

Question 3 : Client-serveur (1,5 points)

Une société souhaite coder une application client-serveur permettant à des clients d'envoyer un message ping vers le serveur, ce dernier répondant par un message pong.
Quel type d'architecture client-serveur proposer pour minimiser le temps de réponse du serveur quand :
  1. Le serveur répond immédiatement au ping ?
  2. Le serveur ne répond au ping qu'après avoir interrogé une machine distante (ce qui lui nécessite en moyenne 10 secondes) ?
Répondre, sur feuille, en justifiant rapidement (3 lignes maximum pour chacun des cas).

Question 4 : Thread (2 points)

Répondre brièvement (3 lignes maximum par question), sur feuille, aux questions suivantes :
  1. Qu'est-ce qu'un thread ?
  2. Quels sont les différents types d'implantation de threads ?

Question 5 : Méthode pour trouver "instantanément" la iè ligne d'un fichier texte (6 points)

On se propose de développer (dans le répertoire Q5) un programme gl.c (pour GotoLigne) permettant de trouver "instantanément" la iè ligne d'un fichier texte dont les lignes ont des longueurs différentes (inférieures à 1024 caractères, caractère de nouvelle ligne inclus).
Le principe de la solution retenue est le suivant pour trouver la iè ligne du fichier exemple.txt :
  • Avant l'utilisation de gl.c, on construit (à l'aide d'un programme d'initialisation gli fourni) un fichier exemple.txt.idx tel que :
    • Les 4 premiers octets du fichier exemple.txt.idx contiennent le décalage de la 1ère ligne de exemple.txt (par rapport au début de exemple.txt), i.e. 0 (zéro).
    • Les 4 suivants contiennent le décalage de la 2è ligne de exemple.txt, i.e. longueur de la 1ère ligne. Par exemple, 7, si la 1ère ligne de exemple.txt contient "Coucou\n".
    • Les 4 suivants contiennent le décalage de la 3è ligne de exemple.txt, i.e. longueur de la 1ère ligne + longueur de la 2è. Par exemple, 13, si la 2è ligne contient "Hello\n".
  • Au moment de l'exécution de gl.c :
    • On ouvre le fichier exemple.txt.idx
    • On se décale pour se placer au niveau des octets correspondant au décalage du numéro de ligne cherchée
    • On lit, dans un entier, les 4 octets correspondant au numéro de ligne cherchée
    • On lit également les 4 octets correspondant au numéro de ligne recherché + 1 (on connaît ainsi la longueur de la ligne cherchée)
    • On ouvre le fichier exemple.txt
    • On se décale de la valeur des 4 octets correspondant à la ligne cherchée
    • On lit le fichier pour récupérer toute la ligne
Écrire le programme gl.c (à l'aide des fonctions système Unix ou des fonctions de la bibliothèque C d'entrées-sorties). Ce programme lit sur la ligne de commande le nom du fichier et le numéro de ligne (convertible en entier grâce à la fonction atoi), puis il affiche la ligne recherchée.
NB :
  • La 1ère ligne du fichier a pour numéro de ligne 0 (zéro).
  • Votre programme peut utiliser lseek, fseek ou mmap.

Question 6 : Même méthode, mais avec un enfant (5 points)

Se placer dans le répertoire Q6 et y recopier le fichier gl.c réalisé à la question 5.
Modifier gl.c pour que dans le main(), on crée une activité (processus enfant ou thread) A :
  • A exécute l'algorithme de lecture de la ligne.
  • Une fois la ligne lue, A la transmet à P, le père de la hiérarchie.
  • P affiche la ligne.
NB : le mode de transmission d'information entre A et P est libre... du moment qu'il fonctionne correctement.

Page mise à jour le 15 mai 2006