2010
TD n°5 : Communication et Synchronisation
Exercice 1 – Notions de cours
Solution :
- Un autre processus peut accéder aux ressources partagées avant qu'un processus n'ait terminé leur utilisation (modification).
- Oui, par exemple les sémaphores, les tubes et les files d'attente de messages.
- Une séquence d'instructions qui accède à des objets partagés entre plusieurs processus.
- Réponse : B.
Exercice 2 – Sémaphores de synchronisation
Solution :
Voici les sémaphores nécessaires pour synchroniser les processus :
Semaphore 1vers2 = 0;Semaphore 1vers3 = 0;Semaphore 1vers4 = 0;Semaphore 2vers5 = 0;Semaphore 3vers5 = 0;Semaphore 4vers6 = 0;Semaphore 5vers6 = 0;
Process P1 {S1;1vers2.P();1vers3.P();}Process P2 {1vers2.V();S2;2vers5.V();}Process P3 {S3;1vers3.V();3vers5.V();}Process P4 {1vers4.V();}Process P5 {2vers5.P();4vers6.P();S4;3vers5.P();5vers6.P();}Process P6 {4vers6.V();S5;S6;5vers6.V();}Remarque : Il aurait suffi de trois sémaphores pour une synchronisation optimale.
Exercice 3 – Sémaphores d'exclusion mutuelle
Solution :
- Non, car si
P2est en section critique etP1a exécutéP(mutex1), alorsP1est bloqué et empêcheP3d'entrer en section critique. Code du processus P1 :
mutex1.P();n = n - 1;mutex1.V();mutex2.P();Out = Out + 1;mutex2.V();
Exercice 4 – Lecteurs/Rédacteurs (Problème de la voie ferrée)
Solution :
Voici un modèle de synchronisation pour les trains circulant sur une voie ferrée bidirectionnelle :
Semaphore Mutex = 1; // Protection de l'accès à la voieSemaphore mutexAB = 1; // Protection du nombre de trains utilisant la voie de A vers BSemaphore mutexBA = 1; // Protection du nombre de trains utilisant la voie de B vers Aint NbAB = 0; // Compteur de trains A vers Bint NbBA = 0; // Compteur de trains B vers A// Processus Train AversBmutexAB.P(); // Entrée du train A vers Bif (NbAB == 0) autorisation.P();NbAB = NbAB + 1;mutexAB.V(); // Circulation sur la voie de A vers B// Processus Train BversAmutexBA.P(); // Entrée du train B vers Aif (NbBA == 0) autorisation.P();NbBA = NbBA + 1;mutexBA.V(); // Circulation sur la voie de B vers A// Sortie par B (Train AversB)mutexAB.P();if (NbAB == 1) autorisation.V();NbAB = NbAB - 1;mutexAB.V();// Sortie par A (Train BversA)mutexBA.P();if (NbBA == 1) autorisation.V();NbBA = NbBA - 1;mutexBA.V();
Exercice 5 – Producteurs/Consommateurs
Solution :
Version avec un seul producteur et consommateur :
Semaphore Mutex = 1;Semaphore Plein = 0;Message tampon[];Producteur() {Message m;Tant que vrai faire {m = creermessage();Mutex.P();EcritureTampon(m);Mutex.V();Plein.V();}}Consommateur() {Message m;Tant que vrai faire {Plein.P();Mutex.P();m = LectureTampon();Mutex.V();}}Version avec un tampon de taille maximale Max :
Semaphore Mutex = 1;Semaphore Plein = 0;Semaphore Vide = Max;Message tampon[Max];Producteur() {Message m;Tant que vrai faire {Vide.P();m = creermessage();Mutex.P();EcritureTampon(m);Mutex.V();Plein.V();}}Consommateur() {Message m;Tant que vrai faire {Plein.P();Mutex.P();m = LectureTampon();Mutex.V();Vide.V();}}