Vous êtes sur la page 1sur 2

Université de BBA 3ème année ISIL- 2021

Système d’exploitation 2 – TD4

Exercice 1 :
1. On se propose une mauvaise solution au problème de l’exclusion mutuelle :

Monitor SC Code des processus


{
Boolean token = True; While (True)
Condition sc; {
public void EntreeSC() SNC ;
{ SC.EntreeSC() ;
if (token) SC
token = False; SC.SortieSC() ;
else wait(sc); SNC ;
} }
public void SortieSC ()
{
token = True;
signal(sc);
}
}

Une erreur classique en synchronisation de processus s’est glissée dans la solution proposée.
Donnez brièvement l’erreur et proposer une solution.

2. Deux villes A et B sont reliées par une seule voie de chemin de fer. Les règles de
circulation sont les suivantes : − La voie ne doit jamais être empruntée simultanément par
deux trains allant en sens inverse − La voie peut être empruntée par un ou plusieurs trains
allant tous dans le même sens − La priorité de parcours est la même pour les deux sens.
Expliquer pourquoi la solution suivante (avec moniteurs) n’est pas correcte.

Moniteur AB ;
Int nbA=0, nbB=0 ;
Condition ca, cb ;

Entree_A() { Entree_B() {
nbA++ ; nbB++ ;
si (nbB>0) alors ca.wait() si (nbA>0) alors cb.wait()
fsi fsi
} }
Sortie_A() { Sortie_B() {
nbA-- ; nbB - - ;
si (nbA==0) alors cb.signal() si (nbB==0) alors ca.signal()
fsi fsi ;
} }
Exercice 2 (Lecteur -rédacteur) :

Dans une base de données, afin de conserver une certaine cohérence, on ne peut pas
– lire pendant une écriture
– écrire pendant une écriture
– écrire pendant une lecture
Les utilisateurs d'une base de données utiliseront les fonctions lecteur() et ecrivain()
respectivement pour lire et écrire dans la base de données.
lecteur( ){
debut_lire( );
lire(BD);
fin_lire( );
}
ecrivain( ){
debut_ecrire( );
ecrire(BD);
fin_ecrire( );
}
Donner la solution algorithmique en utilisant des moniteurs :
1. Priorité au lecteur de la base de données
2. Priorité au rédacteur de la base de données.

Vous aimerez peut-être aussi