ENICarthage 2ème année Génie Informatique
SYSTEMES D’EXPLOITATION
SERIE N°5
Exercice 1 :
On considère trois processus P1, P2 et P3 qui partagent une même variable (x initialisée à 3) :
P1 P2 P3
(a) P(S) ; (d) P(S) ; (g) P(S) ;
(b) x = x + 1 ; (e) x = x * 2 ; (h) x = x - 4 ;
(c) V(S) ; (f) V(S) ; (i) V(S) ;
1. Que doit être la valeur initiale du sémaphore S ?
2. On considère le scénario d’exécution suivant : a, d, b, g, c, e, f, h, i :
a. Est-il possible?
b. Si oui quelle est la valeur finale de x ?
3. Même questions avec le scénario a, d, e, b, c, f, g, h, i.
4. Donner les valeurs finales possibles pour x.
Exercice 2 :
On considère les processus P1 et P2 suivants :
· P1 est un processus qui fait augmenter de 1 la valeur d'une variable X et reste bloqué si cette valeur atteint 4 ;
· P2 est un processus qui fait diminuer de 1 la valeur de la variable X et reste bloqué si X=0.
On envisage d’utiliser des sémaphores pour assurer l’exclusion mutuelle et la synchronisation des deux
processus. Une solution est présentée ci-dessous :
Processus P1 Processus P2
Répéter indéfiniment Répéter indéfiniment
P(exMut) P(exMut)
P(S1) P(S2)
Lire X Lire X
X=X+1 X=X-1
Ecrire X Ecrire X
V(S2) V(S1)
V(exMut) V(exMut)
La variable X est initialisée à zéro ; l’initialisation des sémaphores est la suivante : S1 à 4, S2 à 0 et exMut à 1.
1. Précisez l’utilité de chacun des sémaphores utilisés.
2. Que pensez-vous de cette solution :
a. Est-elle correcte ? Pourquoi ?
b. Faudrait-il un sémaphore supplémentaire ?
3. Proposez votre solution.
Exercice 3 :
Le but de cet exercice est la gestion du trafic aérien. On ne dispose que d’une seule piste à la fois d'atterrissage et
de décollage. En plus, cette piste ne peut accepter qu'un seul avion quelque soit la manœuvre (atterrissage ou
décollage). Pour cela, on dispose de deux files d'attente :
- en air de taille N pour les avions souhaitant atterrir
- et au sol de taille M pour les avions souhaitant décoller.
La gestion de ce trafic des avions nécessite, alors, quatre fonctions :
• une fonction SortirAvions ( ) qui fait sortir les avions du hangar (dépôt) et les placer dans la file d’attente de
décollage,
Page 1 sur 3
• une fonction Decollage ( ) qui prend un avion cloué en sol dans la file d’attente de décollage et le fait
décoller en utilisant la piste,
• une fonction AmenerAvions ( ) qui fait entrer, dans la file d’attente d’atterrissage, des avions en vol
• et une fonction Atterrissage ( ) qui prend un avion de la file d’attente d’atterrissage et le fait atterrir en
utilisant la piste.
Ciel AmenerAvions
()
Taille :+
Atterrissage ( ) Decollage ( ) SortirAvions (
Hangar
)
Taille :
Piste
+
1. Quelle est l’utilité de chaque sémaphore ?
2. Donner une solution au problème en complétant le pseudo code suivant :
#define N 5
#define M 5
semaphore Decollage_vide, Decollage_plein, Atterrissage_vide, Atterrissage_plein, Piste;
Sem_Init (Decollage_vide, M); Sem_Init (Decollage_plein, 0);
Sem_Init (Atterrissage_vide, N); Sem_Init (Atterrissage_plein, 0);
Sem_Init (Piste, 1);
void SortirAvions ( )
{
……………………………………………………………………………………………..
Ajouter_un_avion_dans_la_zone_attente_decollage( );
……………………………………………………………………………………………..
}
void Decollage ( )
{
……………………………………………………………………………………………..
Faire_decoller_un_avion ( );
……………………………………………………………………………………………..
}
void AmenerAvions ( )
{
……………………………………………………………………………………………..
Ajouter_un_avion_dans_la_zone_attente_atterrissage( );
……………………………………………………………………………………………..
}
void Atterrissage ( )
{
……………………………………………………………………………………………..
Faire_Atterrir_un_avion ( );
……………………………………………………………………………………………..
}
Exercice 4 :
Une illustration classique du problème de la synchronisation est celui du salon de coiffure.
Dans ce salon, il y a un coiffeur, un fauteuil dans lequel se met le client pour être coiffé et N sièges pour
attendre.
o En absence de clients, le coiffeur somnole dans le fauteuil.
Page 2 sur 3
oQuand le premier client arrive, il doit réveiller le coiffeur. Ce dernier se lève et le client s'assoit
alors pour se faire coiffer.
o Cependant si un client arrive pendant que le coiffeur est entrain de travailler :
▪ il s'assoit et attend si un des N sièges est libre,
▪ sinon il sort.
Il s'agit donc de synchroniser les activités du coiffeur et de ses clients avec des sémaphores. L’entête du
programme est comme suit :
#define N 5
semaphore SClient, SCoiffeur, exMut ;
Sem_Init (SClient, 0); //initialisation du sémaphore
Sem_Init (SCoiffeur, 0);
Sem_Init (exMut, 1);
int waiting = 0 ; //nombre de clients en attente
void Coiffeur()
{……………………………………………………………………………………………..
}
void Client()
{……………………………………………………………………………………………..
}
On suppose l’existence de deux fonctions coiffer() et se_faire_coiffer() et on vous demande de :
1. Détaillez le code de deux fonctions Coiffeur et Client.
2. Précisez le rôle de chacun des sémaphores SCleint, SCoiffeur et exMut ?
3. Refaire la solution en utilisant les moniteurs
Exercice 5 :
Soient les deux processus P1 et P2 suivants qui se partagent deux sémaphores : S1 et S2 initialisées à 0.
void P1 ( ) void P2 ( )
{ {
procedure A1; procedure A2;
V(S2); V(S1);
P(S1); P(S2);
procedure B1; procedure B2;
} }
Quelle synchronisation a-t-on imposée sur les exécutions des procédures A1, A2, B1 et B2? Donner le graphe
de précédence correspondant.
1. Modifier les programmes afin d’avoir le graphe de précédence suivant :
a.
P1 P2
b.
A1 A2 B1 B2
Exercice 6 :
En utilisant les moniteurs :
a. Donner la solution de lecteurs/écrivain
b. Donner la solution de repas des philosophes
Page 3 sur 3