Test de TPs système n° 2 : (19 nov. 1999 – durée : 2h)


Tout document autorisé

Sommaire

Sémaphores
Communication par pipes
Utilisation du paramètre rusage de la fonction wait3()

Sémaphores

1) - La classe CSemaphore (exercice 2 des I.P.C.s) permet de créer des sémaphores binaires (ou mutex). Quelles modifications faut-il faire pour les transformer en sémaphores n-aires ?

Corrigé

2) - Dans la classe CSemaphore, ajoutez la fonction membre :
 
bool P_WouldBlock (void);

qui ne bloque jamais le processus mais qui renvoie vrai chaque fois que le processus aurait dû être bloqué.

Corrigé

3) - Ecrire la classe CSemaphoreUser dérivée de la classe CSemaphore, afin que la fonction P() soit bloquante dès qu'il ne reste plus qu'un nombre minimal de sémaphores (passé en paramètre du constructeur).

Corrigé

Sommaire

Communication par pipes

    L'exercice 6 concernant les fonctions exec..() (répertoire direxec) met en œuvre l'algorithme de Dahl-Connway en décomposant le traitement en deux activités indépendantes et communiquantes. On souhaite maintenant compliquer le problème en ajoutant la règle suivante :

les couples de voyelles(1)  "ai",  "au", "ei" et "eu" doivent être
remplacés respectivement par les voyelles "E", "O", "E" et "U"

1) - Selon le même modèle que les programmes exo_05a et exo_05b, écrire le programme exo_05c (fichier exo_05c.cxx) qui ne traite que la règle ci-dessus.

Corrigé

2) - Réécrire le fichier exo_06.cxx ("Les processus sous Unix", p. 24) afin de faire fonctionner l'ensemble, l'exercice exo_05c devant être inséré entre les programmes exo_05a et exo_05b.

Corrigé

(1) : majuscules ou minuscules

Sommaire

Utilisation du paramètre rusage de la fonction wait3()

1) - Dans un premier temps, écrire dans le fichier question_03a.cxx le programme qui, dans une boucle répétée NbreDeFois (passé en paramètre de la commande) :
 
>question3a <NbreDeFois>

se contente d'ouvrir en lecture seulement et de refermer aussitôt un fichier (pourquoi pas question_03a.cxx).

2) - La structure struct rusage (troisième paramètre de la fonction wait3()) est composée d'un certain nombre de champs dont deux seulement nous intéressent pour ce qui suit :
 
struct rusage
{
    struct timeval ru_utime; /* user   time used */
    struct timeval ru_stime; /* system time used */
    ....
};

    Dans le fichier question_03.cxx, écrire le programme qui, lancé par la commande :
 
>question3a <NbreDeFois>

crée un fils qui exécute le programme question_03a, attend  la mort de ce fils, puis affiche les deux informations précédemment décrites ru_utime et ru_stime.

Sommaire