agence de voyage
Automne 2006
Partie 4 : Synchronisation
Exercice 1 :
Considérez un système multicouche composé de trois couches P0, P1 et P2. Les couches sont des processus concurrents qui communiquent au moyen de deux tampons T0 et T1 de même taille N :
- P0 et P1 partagent le tampon T0 et
- P1 et P2 partagent le tampon T1.
Chaque couche se charge d’un traitement particulier :
- Le processus P0 se charge de lire du clavier des messages qu’il traite avant de les déposer dans le tampon T0. Le traitement d’un message par la couche P1 consiste à l’encrypter. Il est réalisé par la fonction Encrypter suivante :
Message Encrypter (Message);
La fonction Message Lire (); permet de lire un message du clavier.
- Le processus P1 se charge de transférer directement les messages du tampon T0 vers le tampon T1.
- Le processus P2 récupère les messages du tampon T1 pour les envoyer à un destinataire.
L’envoi d’un message est réalisé par la fonction Envoyer :
Envoyer (Message );
1
INF3600+INF2610
clavier
Automne 2006
P0
T0
P1
T1
P2
Envoyer (m)
a) Expliquez comment les processus peuvent utiliser les sémaphores pour contrôler les accès aux tampons partagés (exclusion mutuelle, pas d’interblocage).
b) Donnez les pseudocodes des trois processus.
Exercice 2 :
1) Expliquez ce qui peut arriver si la file d’attente d’un sémaphore est gérée selon la discipline LIFO (last in first out).
2) Expliquez un avantage de l’utilisation de moniteurs sur les sémaphores pour la synchronisation de processus.
3) Complétez, en ajoutant les sémaphores et les opérations P et V nécessaires, les codes du producteur et du consommateur suivants. Le producteur produit plusieurs ressources à la fois alors que le consommateur consomme une seule ressource à la fois. char T[N]; // tableau de N caractères
Semaphore Plein =0, Vide=N, Mutex=1
2
INF3600+INF2610
Automne 2006
Producteur { int ip=0, M; char ch[N];
Repeter
{
M=Lire(ch,N);
Pour