100% ont trouvé ce document utile (1 vote)
504 vues3 pages

Synchronisation et Sémaphores: Solutions et Exercices

Le document contient plusieurs exercices sur la communication et la synchronisation entre processus avec des solutions utilisant des sémaphores. Les exercices portent sur l'exclusion mutuelle, le problème du producteur-consommateur et le problème lecteur/rédacteur.

Transféré par

fatma tliba
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
504 vues3 pages

Synchronisation et Sémaphores: Solutions et Exercices

Le document contient plusieurs exercices sur la communication et la synchronisation entre processus avec des solutions utilisant des sémaphores. Les exercices portent sur l'exclusion mutuelle, le problème du producteur-consommateur et le problème lecteur/rédacteur.

Transféré par

fatma tliba
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Correction du TD n°3

Communication et synchronisation entre


processus
Exercice 1
1. Soit la séquence d’exécution suivante :
- P1 exécute P(mutex1)
- P2 exécute P(mutex2)
- P3 exécute P (mutex1) et se bloque
- P1 exécute P(mutex2) et se bloque
 P3 est bloqué alors qu’aucun processus n’utilise la variable in.
 L’avancement n’est pas garanti.
 La proposition n’est pas correcte.
2. Solution : désassocier l’utilisation de in et out dans le code de P1comme suit :
Processus P1 Processus P2 Processus P3
P(mutex2) P(mutex2) P(mutex1)
out out + 1 out out -1 in  in + 1
V(mutex2) V(mutex2) V(mutex1)
P(mutex1)
in  in -1
V(mutex1)

Exercice 2
mutex : sémaphore
mutex.val1
Processus A Processus B
Rouler_G_D Rouler_D_G
P(mutex) P(mutex)
Rouler-tunnel Rouler-tunnel
V(mutex) V(mutex)
Rouler_G_D Rouler_D_G

Exercice 3
1. C’est un problème d’exclusion mutuelle. Donc, il faut utiliser le même sémaphore pour les
trois processus.
mutex : sémaphore
mutex.val1

Processus P1 Processus P2 Processus P3


Début Début Début
Cycle Cycle Cycle
P(mutex) P(mutex) P(mutex)
A1 A2 A3
V(mutex) V(mutex) V(mutex)
Fin Cycle Fin Cycle Fin Cycle
Fin Fin Fin
2.
S1, S2 S3 :sémaphore
S1.val1, S2.val0, S3.val0
Processus P1 Processus P2 Processus P3
Début Début Début
Cycle Cycle Cycle
P(S1) P(S2) P(S3)
A1 A2 A3
V(S2) V(S3) V(S1)
Fin Cycle Fin Cycle Fin Cycle
Fin Fin Fin

3.
S1, S23: sémaphore
S1.val1 //pour que P1 puisse commencer le premier.
S23.val0 //pour bloquer P2 et P3 au début.

Processus P1 Processus P2 Processus P3


Début Début Début
Cycle Cycle Cycle
P(S1) P(S23) P(S23)
A1 A2 A3
V(S23) V(S1) V(S1)
Fin Cycle Fin Cycle Fin Cycle
Fin Fin Fin

Exercice 4
1. La section critique est Jouer ( ).Ainsi, la solution est :
stade, mutexA, mutexB, mutexC: sémaphore
nb_A, nb_B, nb_C : entier
stade.val2, mutexA.val1, mutexB.val1, mutexC.val1
nb_A0, nb_B0, nb_C0
Processus A Processus B Processus C
Début Début Début
P(mutexA) P(mutexB) P(mutexC)
nb_A nb_A+1 nb_B nb_B+1 nb_C nb_C+1
Si (nb_A = 1) Si (nb_B = 1) Si (nb_C = 1)
alors P(stade) alors P(stade) alors P(stade)
Finsi Finsi Finsi
V(mutexA) V(mutexB) V(mutexC)
Jouer ( ) Jouer ( ) Jouer ( )
P(mutexA) P(mutexB) P(mutexC)
nb_Anb_A - 1 nb_Bnb_B - 1 nb_Cnb_C - 1
Si (nb_A = 0) Si (nb_B = 0) Si (nb_C = 0)
alors V(stade) alors V(stade) alors V(stade)
Finsi Finsi Finsi
V(mutexA) V(mutexB) V(mutexC)
Fin Fin Fin
2.Oui, il y a un risque de famine :
- si le club A et B occupent le stade alors si des athlètes du club C arrivent, ils doivent
attendre  c’est correcte
- Mais, si des athlètes des clubs A et B viennent d’une façon continue, les athlètes du
club C vont indéfiniment attendre pour entrer au stadefamine !

Exercice 5
C’est un problème Lecteur/Rédacteur : Voiture/Camion avec accès autorisé pour 3 voitures au
maximum. Alors la solution est :
pont, mutex, voit : sémaphore
nb_voiture : entier
pont.val1
mutex.val1
voit.val3
nb_voiture0
Processus Camion Processus Voiture
P(mutex)
nb_voiturenb_voiture + 1
P(pont) Si (nb_voiture=1)
Camion_roule alors P(pont)
V(pont) Finsi
V(mutex)
P(voit)
Voiture_roule
V(voit)
P(mutex)
nb_voiturenb_voiture -1
Si (nb_voiture=0)
alors V(pont)
Finsi
V(mutex)

Vous aimerez peut-être aussi