Vous êtes sur la page 1sur 2

Exercice 1

2.1 Expliquez ce qui peut engendrer un interblocage ? Donnez un exemple.

2.3 Expliquez ce qu’est une opération de communication « collective » ?

Exercice 2

On vous demande de synchroniser à l'aide de sémaphores trois processus concurrents. Vous disposez d'un
type sémaphore que vous pouvez initialiser (par exemple : var exm: sémaphore := 0 ) et des deux primitives
P_wait() et V_signal(). Vous pouvez également utiliser des variables globales. Il ne faut pas oublier de
déclarer les sémaphores et les variables.
Dans un atelier automatisé, un plateau tournant sert au transport des pièces entre deux machines situées de
chaque côté du plateau. Le plateau dispose de deux supports pour recevoir les pièces (disposés à 180 degrés),
et ne peut tourner que dans une seule direction. Un processus Plateau permet de faire tourner le plateau d’un
demi-tour à la fois.
La machine de gauche produit des pièces et les place sur le plateau. Un processus mGauche représente cette
machine. La machine peut placer la pièce seulement lorsque le plateau est arrêté et que le support de gauche
est vide.
La machine de droite retire les pièces du plateau et les consomme. Elle est représentée par un processus
mDroite. Elle peut retirer une pièce seulement lorsque le plateau est immobile et qu'il y a une pièce sur le
support de droite. Il faut donc faire tourner le plateau après que la machine de gauche y ait placé une pièce et,
selon le cas, que la machine de droite ait terminé le retrait d'une pièce. Il faut considérer qu'au début il n'y a
aucune pièce sur le plateau.
A) On vous demande de compléter chacun des processus (en remplaçant les lignes indiquées par
<<synchro>> pour assurer l'exécution dans le bon ordre des différentes parties des 3 processus.
B) Vous devez maintenant considérer le cas où il y a un seul support de pièce sur le plateau. Après
avoir placer une pièce sur le plateau, il faut donc :
1) tourner le plateau d'un demi-tour,
2) retirer la pièce,
3) tourner le plateau d'un demi-tour, avant de pouvoir placer une nouvelle pièce.
Complétez les trois processus pour assurer la synchronisation appropriée.

Exercice 3

1) On considère le programme utilisant les primitives parbegin/parend donné ci-dessous :

Begin
parbegin
lire(a)
lire(b)
parend ;
parbegin
c := a*a
begin
d := a*b ;
e := d*a ;
end
parend ;
e := c + d + e
end

Donner le graphe de précédence en précisant les tâches que vous considérez.

2) Donner un exemple simple de système de tâche (sous forme d’un graphe de précédence) ne pouvant pas
être décrit avec les primitives parbegin/parend.
3) soit le graphe de précédence suivant :

Donner le programme parallèle correspondant en utilisant les primitives fork/join.