Précédent Remonter

3  Exercices


Exercice 1  [Examen de septembre 1995]   Soient 3 processus qui exécutent les programmes suivants :

P1: loop A1 end_loop
P2: loop A2 end_loop     
P3: loop A3 end_loop        
Utiliser des sémaphores pour synchroniser ces 3 processus de telle manière que:
Question 1   Les actions Ai ne soient jamais simultanées.

Question 2   Les actions Ai ne soient jamais simultanées et se déroulent toujours dans l'ordre A1A2A3A1A2A3...

Question 3   Les actions Ai ne soient jamais simultanées et se déroulent toujours dans l'ordre A1(A2 ou A3)A1(A2 ou A3)...

Question 4   Les actions Ai se déroulent toujours séquentiellement mais dans un ordre quelconque, par exemple : (A2A1A3)(A2A3A1)...

Exercice 2  [Examen de juin 1996]   Soient les deux processus P1 et P2 suivants. Ils se partagent deux sémaphores, S1 et S2 initialisés à 0.

  P1 {                     P2 {
       procedure A1;            procedure A2;
       V(S2);                   V(S1);
       P(S1);                   P(S2);
       procedure B1;            procedure B2;
     }                        }
Question 1   Quelle synchronisation a-t-on imposée sur les exécutions des procédures A1, A2, B1 et B2 ?

Question 2   Écrire le code afin d'imposer la même synchronisation pour N processus en utilisant N sémaphores.

Question 3   On peut résoudre le problème pour N processus avec uniquement deux sémaphores (et un compteur). Donner le code des processus dans ce cas.

Exercice 3  [La mangeoire (d'après Tim Roberts)]   Un abri pour oiseaux comporte de nombreuses portes. Chaque porte possède un bouton à l'intérieur et un bouton à l'extérieur. L'abri peut contenir au maximum trois oiseaux.

Les oiseaux sont dressés pour appuyer sur les boutons s'ils veulent entrer ou sortir. Ils sont aussi dressés pour que un seul d'entre-eux ne rentre ou sorte quand une porte s'ouvre.

Quand un oiseau utilise un des boutons, les fonctions suivantes sont appelées :

int birds_in = 0 ; 

bird_wants_to_leave (int button)
{
  birds_in-- ; 
  open_door (button) ; 
}

bird_wants_to_enter (int button) 
{
  if (birds_in < 3) {
    birds_in++ ;
    open_door (button) ; 
  }
}
Le code de ces fonctions est faux et pose de nombreux problèmes.
Question 1   Établir une liste des problèmes pouvant survenir.

Question 2   Utiliser des sémaphores pour résoudre ces problèmes.

Exercice 4  [La salle de bain (à nouveau d'après Tim Roberts)]   La salle de bain commune d'une pension mixte est utilisée par les filles et les garçons. Les règles suivantes sont observées :
  1. au plus MAX filles utilisent simultanément la salle de bain ;
  2. au plus MAX garçons utilisent simultanément la salle de bain ;
  3. la salle de bain n'est jamais utilisé simultanément par des garçons et des filles ;
  4. les filles ont priorité sur les garçons pour utiliser la salle de bain ;
  5. les garçons ne peuvent entrer dans la salle de bain que si aucune fille n'utilise ou n'attend pour utiliser la salle de bain.
Question 1   À quelle condition une fille peut-elle entrer dans la salle de bain ? Et un garçon ?
Question 2   Identifier les événements qui peuvent bloquer un processus (fille ou garçon).
Question 3   Donner le code des quatre fonctions
void boy_wants_to_use_bathroom () ; 
void boy_leaves_bathroom () ; 
void girl_wants_to_use_bathroom () ; 
void girl_leaves_bathroom () ; 


Précédent Remonter