• Aucun résultat trouvé

Licence 2 - I4b Semaine du 31/03 au 04/04/2008

N/A
N/A
Protected

Academic year: 2022

Partager "Licence 2 - I4b Semaine du 31/03 au 04/04/2008"

Copied!
2
0
0

Texte intégral

(1)

Licence 2 - I4b

Semaine du 31/03 au 04/04/2008

TD 5 • R´evision, TP

Exercice 1. S´emaphores

(d’apr`es Philippe Durifhttp://www2.lifl.fr/˜durif/)

La d´efinition de sections critiques, au moyen de s´emaphores, de verrous ou de moniteurs permet le r´esoudre le probl`eme des acc`es concurrent `a une ressource partag´ee par plusieurs threads. Cependant, la notion de sec- tion critique ne permet pas `a plusieurs threads de sesynchroniserles uns par rapport aux autres. Par exemple un thread doit pouvoir attendre qu’un autre soit arriv´e `a un certain point de son ex´ecution pour terminer un calcul.

La classeObjectpropose les m´ethodeswait()etnotify()pour r´ealiser cette forme de synchronisation.

Ainsi, en plus d’un verrou interne utilis´e par le moniteur (via la primitivesynchronized), chaque objet Java poss`ede unwait-set. Le wait-setd’un objet est constitu´e de l’ensemble des threads qui ont ex´ecut´e la m´ethode wait()sur cet objet. Ces threads sont dit en attente. Un de ces threads sera d´ebloqu´e lorsqu’un autre thread appellera la m´ethodenotify()sur ce mˆeme objet.

Lewait-setpeut ˆetre manipul´e par les m´ethodes suivantes de la classeObject:

– wait()permet au thread qui l’ex´ecute de se mettre en attente dans lewait-setde l’objet r´ecepteur.

Ainsi, un thread peut d´ecider de suspendre sa propre ex´ecution ;

– notify() permet `a un thread de r´eveiller un des threads qui ´etait en attente dans lewait-set de l’objet r´ecepteur de l’appel de la m´ethode. Attention, le choix du thread r´eveill´e parnotify()n’est pas sp´ecifi´e par le langage, ainsi il se peut qu’on observe des ph´enom`enes de famine quand plusieurs threads sont en attente sur le mˆeme objet ;

– notifyAll()est semblable `anotify(), cette m´ethode r´eveille tous les threads qui ´etait en attente au moment de son ex´ecution.

Pour assurer la coh´erence duwait-set, les m´ethodes doivent ˆetre ex´ecut´ees dans une section critique verrouill´ee par l’objet dont on manipule lewait-set. Ceci n’est v´erifi´e qu’`a l’ex´ecution. Pendant lewait() le verrou est relˆach´e et le thread devra le reprendre lorsqu’il sera r´eveill´e. En revanche, les autres verrous

´eventuellement obtenus par le thread en attente ne sont pas relˆach´es.

1. Pourquoi la classe Java pr´esent´ee dans le Listing 1 n’est pas correcte pour r´ealiser un s´emaphore. D’ailleurs lors de l’ex´ecution la machine virtuelle retourne une erreur :Illegal Monitor State Exception 2. Corriger la d´efinition de la classe s´emaphore du Listing 1.

3. Donner un programme exemple montrant comment l’utiliser.

4. La classe du listing 2 peut provoquer un interblocage, identifier le probl`eme et proposez un correction.

5. Reprendre votre correction de la classe s´emaphore du listing 1 en consid´erant le probl`eme de l’interblo- cage vu pr´ec´edement. Comment expliquez vous ce ph´enom`ene ?

1 package Verrouillage;

public class SemaphorePreemptif{

3 private int compteur=0;

public SemaphorePreemptif (int c){

5 compteur=c;

}

7 public void P() throws InterruptedException{

while (compteur==0) {this.wait(); }

9 compteur--;

}

11 public void V() { compteur++;

13 this.notify();

}

15 }

Listing 1 – Classe s´emaphore

1 package Verrouillage;

public class SemaphoreSpinLock{

3 private int compteur=0;

Eric Leclercq —http://ludique.u- bourgogne.fr/˜leclercq— D´epartement IEM —http://ufrsciencestech.u- bourgogne.fr 1

(2)

public SemaphoreSpinLock (int c){

5 compteur=c;

}

7 public synchronized void P() {

if (compteur==0) System.out.println("Attente P");

9 while (compteur==0) { ; } compteur--;

11 System.out.println("Verrou obtenu");

}

13 }

public synchronized void V() {

15 compteur++;

System.out.println("Verrou relache");

17 }

}

Listing 2 – Classe s´emaphore

Exercice 2. Mod`ele producteur consommateur

Ce mod`ele d’interaction consiste `a caract´eriser certains programmes comme ´etant des producteurs et cer- tains autres comme des consommateurs. Producteurs et consommateurs partageant un buffer born´e. Un pro- ducteur ne peut pas d´eposer de valeur dans le buffer si il est plein. Un consommateur ne peut pas consommer de valeur si le buffer est vide.

1. R´ealiser le programme simulant une interaction producteur consommateur au moyen d’une classe buffe.

2. On modifie le fonctionnement de la synchronisation, les producteurs et les consommateurs doivent se synchroniser sur le buffer selon le sch´ema suivant : le buffer ne comporte qu’un seule place, un produc- teur doit attendre que le buffer soit vide pour mettre la valeur produite dans le buffer. Le producteur attend que le buffer soit plein pour consommer la valeur. R´ealiser le programme.

Exercice 3. Sleeping Barber

Le probl`eme ditSleeping-Barber Problemest un exemple classique, il illustre les probl`emes d’acc`es concur- rents aux ressources et la synchronisation des processus. On consid`ere un salon de coiffure qui comporte une salle d’attente avecnchaises et une autre salle avec un fauteuil et un coiffeur. Si il n’y a pas de client, le coiffeur dort. Si un client entre et que toutes les chaises sont occup´ees, le client s’en va. Si le coiffeur est occup´e et qu’au moins une chaise est libre le client s’assied et attend. Si le coiffeur est endormi l’arriv´ee d’un client le r´eveille.

1. On souhaite programmer l’activit´e du coiffeur au moyen de threads. Identifier les ressources et les threads n´ecessaires.

2. Y-a-t’il des probl`emes de concurrence ? Si oui expliquez de fac¸on pr´ecise la m´ethode que vous choisissez pour les ´eviter ?

3. ´Ecrire le programme et l’ex´ecuter.

4. On consid`ere non plus 1 coiffeur mais 4 coiffeurs, quels sont les ´el´ements `a changer dans votre solution ?

Exercice 4. Barri`ere de synchronisation

On souhaite pouvoir ex´ecuter des activit´es1 ´etape par ´etape en utilisant des barri`eres de synchronisation.

Pour passer d’une ´etape `a une autre, une activit´e doit attendre que toutes les autres activit´es ex´ecut´ees par d’autres threads aient termin´e l’´etape pr´ec´edente. Ainsi, on peut ainsi r´ealiser dans un syst`eme asynchrone (par exemple cluster de calcul) des calculs qui n´ecessitent des parties synchrones (pour l’assemblage de r´esultats par exemple).

Du point de vue impl´ementation, une barri`ere est un compteur qui peut ˆetre incr´ement´e et d´ecr´ement´e (mais en restant toujours entre une valeur minimalevalMinet une valeur maximalevalMax). Si l’op´eration d’incr´ementation ou de d´ecr´ementation ne peut pas se faire sans invalider cette contrainte, alors l’op´eration est rendue bloquante jusqu’a ce que la condition soit valid´ee.

1. Comment utiliser une barri`ere pour attendre l’arriv´ee des processus dans l’exemple de la course de pro- cessus ?

2. R´ealiser une classe barri`ere.

1ensemble d’instructions relative `a la r´ealisation d’une tˆache

Eric Leclercq —http://ludique.u- bourgogne.fr/˜leclercq— D´epartement IEM —http://ufrsciencestech.u- bourgogne.fr 2

Références

Documents relatifs

L’´ equipement Rep est un r´ ept´ eteur qui a pour fonction de recopier des trames Ethernet d’un segment de cˆ able ` a un autre.. Donner l’adresse IP de la machine X et son

Pendant l’ex´ ecution d’un portion de code synchronis´ ee par une thread A , toute autre thread essayant d’ex´ ecuter une portion de code synchronis´ ee sur le mˆ eme objet

– au probl` eme de l’exclusion mutuelle pour l’acc` es ` a des donn´ ees (objets) ou ` a du code (m´ ethodes) ; – au probl` eme de la synchronisation sur des ´ ev´

Reprendre l’exercice du TD qui entraine une cr´ eation non contrˆ ol´ ee de processus pour repro- duire son comportement sur le

Avec plusieurs threads, l’application peut poursuivre l’ex´ecution des autres threads pendant que le thread qui attend le r´esultat d’un processus lent est bloqu´e ;1.

– au probl`eme de l’exclusion mutuelle pour l’acc`es `a des donn´ees (objets) ou `a du code (m´ethodes) ; – au probl`eme de la synchronisation sur des ´ev´enements (attente

– les processus d’une file d’attente i n’ont acc`es au processeur que lorsque les files d’indice inf´erieur (1 `a i-1) sont vides ;. – l’arriv´ee d’un processus dans

Pour d´emarrer une op´eration d’entr´ee sortie, le processeur charge les registres appropri´es `a l’int´erieur du processeur d’entr´ees sorties.. Celui-ci, `a son tour, examine