100% ont trouvé ce document utile (1 vote)
277 vues2 pages

ExamSys2 LMD Epreuve 2013 2014cor

Le document présente un exercice sur la synchronisation de processus partageant des ressources. Il décrit deux processus P1 et P2 accédant à une variable partagée X, et propose d'utiliser un sémaphore mutex pour résoudre le problème d'accès concurrent. Un second exercice traite du problème du producteur-consommateur avec deux producteurs et un consommateur, et un buffer circulaire.

Transféré par

Fatima Laiche
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 PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
277 vues2 pages

ExamSys2 LMD Epreuve 2013 2014cor

Le document présente un exercice sur la synchronisation de processus partageant des ressources. Il décrit deux processus P1 et P2 accédant à une variable partagée X, et propose d'utiliser un sémaphore mutex pour résoudre le problème d'accès concurrent. Un second exercice traite du problème du producteur-consommateur avec deux producteurs et un consommateur, et un buffer circulaire.

Transféré par

Fatima Laiche
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 PDF, TXT ou lisez en ligne sur Scribd

Université de Chlef Mars 2014

Département Informatique
ème
Filière : 3 Année Licence TSW

Examen semestriel Corrigé


Module de « Systèmes d’exploitation2 »

Exercice 1 : (07 points)


Soit X, Y et Z des variables numériques. P1 et P2 sont deux processus dont les codes sont les suivants :

Processus P1 Processus P2
Debut Debut
Si X > 50 Alors
X := X+1
Y := Y +1
sinon
Fin
Y:= Y/2
Finsi;

Z := Z + Y
Fin

Question 1 : Expliquez quel problème peut-on avoir si les deux processus s'exécutent simultanément.
Réponse :

Si les deux processus s'exécutent simultanément, il y'a un problème d'accès concurrents à la variable partagée X. On peut
avoir un résultat incohérent si le processus P1 tente de modifier cette variable alors que le processus P2 tente de son coté de la
consulter.
(3 points)

Question 2 : Corrigez le problème en utilisant des sémaphores. Réécrivez le code des deux processus.

Réponse :

La solution doit assurer l'accès en exclusion mutuelle à la variable partagée X. On utilise un sémaphore mutex , initialisé à 1.

Processus P1 Processus P2
Debut Debut
Wait(mutex)
Wait (mutex)
Si X > 50 Alors
X := X+1 Signal(mutex)
Y := Y +1
Signal(mutex) Sinon
Signal(mutex)
Fin Y:= Y/2
Finsi;

Z := Z + Y
Fin

(4 points)

Page 1 / 2
Exercice 2 : (13 points)
On reprend le problème de synchronisation du Producteur-Consommateur avec buffer circulaire et de taille limitée N,
mais on suppose qu'il y'a maintenant deux producteurs P1 et P2 et un seul consommateur C. Le producteur P2 a une
particularité : il produit et dépose deux messages à la fois (si toutefois, il y'a des places libres dans le buffer).

Travail à faire : Proposez un schéma de synchronisation de ce problème. Ecrivez le code des 3 processus P1, P2 et C.
Soignez vos déclarations.

Réponse :

Déclarations :
In : Entier (Init à 0) indice du dernier élément déposé dans le buffer
Out : Entier (Init à 0) indice de l'élément prêt à être prélevé par le Consommateur
Mutex : Sémaphore (init à 1) assurant l'accès en exclusion mutuelle à la variable partagée In.
Empty : Sméphore (Init à N) permettant de bloquer les producteur si le buffer est plein.
Full : sémaphore (Init à 0) permettant de bloquer le consommateur s'il n'ya aucune case pleine dans le buffer.
(3 points)

Processus Producteur1 Processus Producteur2 Processus Consommateur


Début Début Début
Cycle Cycle Cycle
Produire un message dans Produire un message Wait(Full)
ZoneP dans ZoneP1 et ZoneC :=Buffer[Out] ;
Wait(Empty); ZoneP2 Out :=Out+1 mod N ;
Wait(mutex) Wait(Empty); Signal(Empty) ;
Buffer[In] :=ZoneP ; Wait(Empty); Consommer le message de
In :=In+1 mod N Wait(mutex) ZoneC
Signal(mutex) Buffer[In] :=ZoneP1 ; Fin Cycle
Signal(Full) In :=In+1 mod N Fin.
Fin Cycle Buffer[In] :=ZoneP2 ;
Fin. In :=In+1 mod N
Signal(mutex)
Signal(Full)
Signal(full)
Fin Cycle
Fin.

(3 points)

Page 2 / 2

Vous aimerez peut-être aussi