exclusion mutuelle -...

53
Exclusion Mutuelle Arnaud Labourel Courriel : [email protected] Universit´ e de Provence 9 f´ evrier 2011 Arnaud Labourel (Universit´ e de Provence) Exclusion Mutuelle 9 f´ evrier 2011 1 / 53

Upload: others

Post on 23-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Arnaud LabourelCourriel : [email protected]

Universite de Provence

9 fevrier 2011

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 1 / 53

Page 2: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Contexte “Epistemologique”

Comment etre sur qu’un programme est vraimentcorrect ?

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 2 / 53

Page 3: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Sections Critique et Exclusion Mutuelle

Etant donne du code, on peut y definir des portionsparticulierement importantes que l’on denote par sectioncritique (SC).Exemple: manipulation d’une variable partagee.

/* Du code */

...

/* Section Critique */

... // variable partagee

/* Fin de la Section Critique */

/* Encore du Code */

...

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 3 / 53

Page 4: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Une solution

Exclusion Mutuelle : Il y a au plus une entite ensection critique.

⇒ Permet de reguler l’acces aux donnees.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 4 / 53

Page 5: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Mais ...

Cette specification est incomplete pour pouvoir etreutilisee rigoureusement...

La solution “il est interdit d’entrer en sectioncritique” respecte cette “specification”...Il faut ajouter une contrainte qui garantisse quetoute demande soit satisfaite.

pas de faminepas d’interblocage (etreinte fatale)

Cette satisfaction peut etre precisee :l’ordre de satisfaction doit etre le meme que l’ordre dedemande d’entreeune certaine equite est requisel’attente est bornee...

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 5 / 53

Page 6: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Famine

DefinitionAucune garantie pour un thread d’avoir l’acces a lasection critique qu’il demande.

⇒ Algorithme d’exclusion mutuelle non equitable.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 6 / 53

Page 7: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Interblocage (Etreinte fatale)

DefinitionL’interblocage se produit lorsque deux processusconcurrents s’attendent mutuellement. Les processusbloques dans cet etat le sont definitivement, il s’agitdonc d’une situation catastrophique.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 7 / 53

Page 8: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Exemple d’interblocage

Exemple :Thread 1 Thread 2

Obtenir M1 Obtenir M2Obtenir M2 Obtenir M1section critique section critiqueRendre M2 Rendre M1Rendre M1 Rendre M2

Le Thread 1 obtient M1.Le Thread 2 obtient M2.Les deux attendent la ressource obtenue par l’autre

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 8 / 53

Page 9: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Dıner des philosophes

cinq philosophes, chacun a un plat de spaghetti etune fourchette a gauche3 etats : affame, penseur, mangeurpour manger on a besoin des deux fourchettes

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 9 / 53

Page 10: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Specification du Probleme de l’ExclusionMutuelle

Etant donnes des sections critiques (SC), un algorithmed’exclusion mutuelle doit satisfaire :

1 exclusion mutuelle (EM) : si un thread est enSC, aucun autre thread ne peut y etre.

2 progres (P) : si un groupe de thread demande aentrer en SC, l’un d’eux doit obtenir d’entrer en SC

3 equite (E) : tout thread demandant a entrer enSC doit y entrer ( au bout d’un certain temps)

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 10 / 53

Page 11: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Surete et Vivacite

EM est une contrainte de sureteP et E sont des contraintes de vivacite

P =⇒ pas d’etreinte fataleE =⇒ pas de famine

Les algorithmes d’exclusion mutuelle sont des compromisentre surete et vivacite...

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 11 / 53

Page 12: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Garantir l’Exclusion Mutuelle

Pour mettre en place de l’exclusion mutuelle, il existe denombreux outils :

conditions variables

moniteurs

semaphores

...

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 12 / 53

Page 13: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Les Conditions Variables

Boucle sur une condition (partagee)

while ( condition ); // boucle infinie

// sur condition partagee

/* Section Critique */

NB : attente active

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 13 / 53

Page 14: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Moniteurs

Un mecanisme supplementaire evitant l’attente active

if ( condition )

wait(); // Appel bloquant

/* Section Critique */

notify(); //reveil d’un thread bloque

Seul mecanisme avec synchronized pour Java < 1.5

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 14 / 53

Page 15: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Semaphores

Une generalisation de la notion de verrou

P(sem); // acquerir le semaphore sem

/* Section Critique */

V(sem); // liberer le semaphore sem

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 15 / 53

Page 16: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Implementation

Comment mettre en place ces outils et les primitivesassociees?... ou “Peut-on se passer de synchronized en Java?”

On supposera dans la suite que la lecture et l’ecriture enmemoire est atomique pour les types simples (ce qui estpresque vrai en Java).

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 16 / 53

Page 17: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Premiere Tentative I

Une variable partagee tour designe le thread dont c’estle tour :

static volatile Thread tour = null;

Cette variable est utilisee pour verifier si l’on peut entreren section critique ou s’il faut attendre.

public void Acquerir () {

while (tour != Thread.currentThread ()) {

if (tour == null) // la voie est libre

tour = Thread.currentThread ();

}

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 17 / 53

Page 18: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Premiere Tentative II

On remet tour a null en sortant de la section critique.

public void Liberer () {

tour = null;

}

Chaque thread execute une boucle infinie de tentatived’acces a la section critique :

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 18 / 53

Page 19: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Premiere Tentative III

public void run() {

while(true) {

Acquerir ();

// Section critique

System.out.println("C’est le tour de "+

Thread.currentThread (). getName ());

try { Thread.sleep((int)(Math.random ()*200));

} catch (Exception e) {}

System.out.println(" Fin du tour de "+

Thread.currentThread (). getName ());

Liberer ();

try { Thread.sleep((int)(Math.random ()*400));

} catch (Exception e) {}

}

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 19 / 53

Page 20: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Premiere Tentative IV

Mais ce code ne verifie EM.

⇐= considerer une execution synchrone...

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 20 / 53

Page 21: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Deux processus I

On va commencer avec uniquement deux processus.

ExclusionMutuelle.java : classe abstraiteExclusionMutuelle

Tache.java : classe definissant des threadseffectuant une boucle infinie de tentativesd’acces/sortie de section critique

Test.java : definition du main : creation des deuxthreads et leur demarrage.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 21 / 53

Page 22: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Algorithme1.java I

public class Algorithme1

extends ExclusionMutuelle{

public Algorithme1 () {

turn = 0;

}

public void Pmutex(int t) {

while (turn != t)

Thread.yield ();

}

public void Vmutex(int t) {

turn = 1-t;

}

private volatile int turn;

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 22 / 53

Page 23: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Algorithme1.java II

Le probleme est que la condition P n’est pas verifiee : eneffet, seule une execution en tourniquet est possible.

En outre, il a ete prouve que pour n processus, il faut aumoins n variables partagees.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 23 / 53

Page 24: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Deux Variables : l’Etat des Processus I

public class Algorithme2

extends MutualExclusion

{

public Algorithme2 () {

flag [0] = false;

flag [1] = false;

}

public void Pmutex(int t) {

int other;

other = 1-t;

flag[t] = true;

while (flag[other] == true)

Thread.yield ();

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 24 / 53

Page 25: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Deux Variables : l’Etat des Processus II

}

public void Vmutex(int t) {

flag[t] = false;

}

private volatile boolean [] flag

= new boolean [2];

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 25 / 53

Page 26: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Deux Variables : l’Etat des Processus III

Considerons Algorithme2.java

La condition EM n’est pas verifiee.Considerons l’execution :

thread 0 thread 1 flag[t] flag[other]

flag[1]=false?: OUI flag[0]=false?: OUI false false

flag[0]:= true flag[1]:=true true true

Section Critique Section Critique - -

Si on initialise a true, alors ce sont les conditions P et Equi ne sont pas verifiees.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 26 / 53

Page 27: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

public class Algorithme4 extends ExclusionMutuelle

{

public Algorithme4 () {

flag [0] = false;

flag [1] = false;

}

public void Pmutex(int t) {

int other;

other = 1-t;

flag[t] = true;

while (flag[other] == true) {

flag[t] = false;

while (flag[other])

Thread.yield ();

flag[t] = true;

}

public void Vmutex(int t) {

flag[t] = false;

}

private volatile boolean [] flag = new boolean [2];

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 27 / 53

Page 28: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Algorithme4.java

Une execution synchrone provoque un etreinte fatale...=⇒ regle de politesse

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 28 / 53

Page 29: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

public class Dekker extends ExclusionMutuelle{

public Dekker () {

flag [0] = false;

flag [1] = false;

turn = 0;

}

public void Pmutex(int t) {

int other;

other = 1-t;

flag[t] = true;

while (flag[other] == true)

if (turn == other) {

flag[t] = false;

while (turn == other)

Thread.yield ();

flag[t] = true;

}

}

public void Vmutex(int t) {

turn = 1-t;

flag[t] = false;

}

private volatile int turn;

private volatile boolean [] flag = new boolean [2];

}Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 29 / 53

Page 30: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Dekker (1965)

L’equite est verifiee si l’ordonnanceur sous-jacent estequitable.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 30 / 53

Page 31: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

public class Peterson extends ExclusionMutuelle{

public Peterson () {

flag [0] = false;

flag [1] = false;

turn = 0;

}

public void Pmutex(int t) {

int other;

other = 1-t;

flag[t] = true;

turn = t;

while (flag[other] && (turn == t))

Thread.yield ();

}

public void Vmutex(int t) {

flag[t] = false;

}

private volatile int turn;

private volatile boolean [] flag = new boolean [2];

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 31 / 53

Page 32: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Peterson (1981)

Cet algorithme est bien une solution au probleme del’exclusion mutuelle.

Comment s’en convaincre reellement apres toutes nosprecedentes et infructueuses tentatives ?

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 32 / 53

Page 33: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Correction d’Algorithmes Distribues

Correction d’algorithme necessaire

fiabilite ( pas d’etreinte fatale )securite ( =⇒ pas de faille de type “race condition” )

Algorithme = objet mathematique ( cf Cours LDP )

=⇒ preuve formelle

Algorithme distribue : encore plus difficile

Methode d’annotation du code Hoare ( 1969 ) puisOwicki, Gries (1975),

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 33 / 53

Page 34: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Principe

On associe a chaque transition du programme deuxformules logiques. Ces formules expriment des invariantsen ce point du programme.

{p}Instruction ;

{q}

Si la formule p est vraie, alors apres execution deInstruction, la formule q doit aussi etre vraie.

On infere ainsi logiquement le comportement correct duprogramme.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 34 / 53

Page 35: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Exemple d’Annotations

G. Winskel. The formal semantics of programminglanguages. The MIT Press, 1993.

{x = x0 ∧ y = y0}q = 0;

while (x >= y) {{x = x0 − qy0 ∧ y = y0}q = q+1;

{x = x0 − (q − 1)y0 ∧ y = y0}x = x-y;

{x = x0 − qy0 ∧ y = y0}}

{x = x0 − qy0 ∧ x < y ∧ y = y0}Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 35 / 53

Page 36: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Non-Interference

Attention Une fois la preuve faite pour le cas sequentiel(ie. un thread), il faut prouver que les invariants restentbien invariants si un autre thread s’execute entre deuxinstructions.

Les hypotheses sur le modele sont preponderantes

Quelles sont les operations atomiques?

=⇒ il faut rajouter des variables correspondant aupoint de controle du programme.

Il s’agit en general plus de non-interference des preuvesque des executions ...

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 36 / 53

Page 37: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Exemple d’Annotations pour laNon-Interference

{x = x0 ∧ y = y0 ∧ c = 0}q = 0;

while (x >= y) {{x = x0 − qy0 ∧ y = y0 ∧ c = 1}q = q+1;

{x = x0 − (q − 1)y0 ∧ y = y0 ∧ c = 2}x = x-y;

{x = x0 − qy0 ∧ y = y0 ∧ c = 3}}

{x = x0 − qy0 ∧ x < y ∧ y = y0 ∧ c = 4}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 37 / 53

Page 38: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Conditions de Non-Interferences

On a

les processeurs Pi

la k−ieme instruction Ikles preconditions preik et postconditions postik (bienentendu postik = preik+1 )

alors la condition de non-interference signifie que chaqueinstruction Ijl ne peut alterer preik .

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 38 / 53

Page 39: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Conditions de Non-Interferences

On doit donc verifier, si Ijl = x=u; :

en terme de triplet de Hoare,

{preik ∧ prejl}x = u ;

{preik}

en terme logique,

preik ∧ prejl =⇒ preik [x ←− u]

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 39 / 53

Page 40: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Simplification pour Peterson

Comme il y a ici une seule variable partagee on simplifieen ne numerotant pas toutes les instructions.

On introduit deux variables auxiliaires after[0] etafter[1]

=⇒ vrai si le controle est apres l’instruction turn = t;

(t = 0, 1).On rajoute after[t]= true; apres celle-ci.

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 40 / 53

Page 41: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Notations

On note

I0 = {turn = 0}I1 = {turn = 1}preSC0 ={flag0 ∧ after0 ∧ (¬(flag1 ∧ after1) ∨ turn = 1)}preSC1 ={flag1 ∧ after1 ∧ (¬(flag0 ∧ after0) ∨ turn = 0)}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 41 / 53

Page 42: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Peterson pour le Thread 0

{¬flag0}flag [0]= true; after [0]= false;

{flag0 ∧ ¬after0}turn =0; after [0]= true;

{flag0 ∧ after0 ∧ I0}while (flag [1] && (turn ==0)) do

{flag0 ∧ after0 ∧ I0}Thread.yield ();

{flag0 ∧ after0 ∧ (¬(flag1 ∧ after1) ∨ turn = 1)}[ Section Critique CS0]

{flag0}flag [0]= false;

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 42 / 53

Page 43: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Peterson pour le Thread 1

{¬flag1}flag [1]= true; after [1]= false;

{flag1 ∧ ¬after1}turn =1; after [1]= true;

{flag1 ∧ after1 ∧ I1}while (flag [0] && (turn ==1)) do

{flag1 ∧ after1 ∧ I1}Thread.yield ();

{flag1 ∧ after1 ∧ (¬(flag0 ∧ after0) ∨ turn = 0)}[ Section Critique CS1]

{flag1}flag [1]= false;

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 43 / 53

Page 44: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Preuve de Correction I

En sequentiel : OK

Non-interference :Il y a un probleme a la troisieme assertion=⇒ on remplace I0 et I1 par I ={turn = 0 ∨ turn = 1}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 44 / 53

Page 45: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Peterson pour le Thread 0 (version 2)

{¬flag0}flag [0]= true; after [0]= false;

{flag0 ∧ ¬after0}turn =0; after [0]= true;

{flag0 ∧ after0 ∧ I}while (flag [1] && (turn ==0)) do

{flag0 ∧ after0 ∧ I}Thread.yield ();

{flag0 ∧ after0 ∧ (¬(flag1 ∧ after1) ∨ turn = 1)}[ Section Critique CS0]

{flag0}flag [0]= false;

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 45 / 53

Page 46: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Peterson pour le Thread 1 (version 2)

{¬flag1}flag [1]= true; after [1]= false;

{flag1 ∧ ¬after1}turn =1; after [1]= true;

{flag1 ∧ after1 ∧ I}while (flag [0] && (turn ==1)) do

{flag1 ∧ after1 ∧ I}Thread.yield ();

{flag1 ∧ after1 ∧ (¬(flag0 ∧ after0) ∨ turn = 0)}[ Section Critique CS1]

{flag1}flag [1]= false;

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 46 / 53

Page 47: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Preuve de Correction I

Non-interference :Maintenant, seules les preSC contiennent des referencesmanipulees par l’autre thread (en premiere, deuxieme etderniere lignes)

→ Il reste a verifier la non interference pour preSC0

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 47 / 53

Page 48: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Preuve de Correction IIpreSC0 = flag0 ∧ after0 ∧ (¬(flag1 ∧ after1) ∨ turn = 1)

{preSC0 ∧ ¬flag1}flag [1]= true; after [1]= false;

{preSC0}

{preSC0 ∧ (flag1 ∧ ¬after1)}turn =1; after [1]= true;

{preSC0}

{preSC0 ∧ flag1}flag [1] = false;

{preSC0}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 48 / 53

Page 49: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Preuve de Correction III

preSC0 = flag0 ∧ after0 ∧ (¬(flag1 ∧ after1) ∨ turn = 1)preSC1 = flag1 ∧ after1 ∧ (¬(flag0 ∧ after0) ∨ turn = 0)

Par symetrie, cela est aussi vrai pour le thread 1. Or

preSC0 ∧ preSC1 =⇒ turn = 0 ∧ turn = 1

Par consequent, on a bien l’exclusion mutuelle EM .

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 49 / 53

Page 50: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Et pour n Threads ?

Si on itere Peterson n − 1 fois on obtient une solution an threads. (cf PetersonN).

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 50 / 53

Page 51: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

Peterson pour n Threads

turn of size nproc − 1flag = [-1,-1, ... , -1] of size nproc

for(j=0; j<nproc -1; j++)

flag[t]=j;

turn[j]=t;

cond =∨nproc−1

k=0 (flag [k] ≥ j)while (cond et turn[j] = t)

yield ();

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 51 / 53

Page 52: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

public class PetersonN

{

private volatile int[] turn;

private int nproc;

private volatile int[] flag;

public PetersonN(int nb) {

int i;

nproc = nb;

turn = new int[nproc -1];

flag = new int[nproc];

for (i=0; i < nproc; i++) {

flag[i] = -1; }

}

}Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 52 / 53

Page 53: Exclusion Mutuelle - pageperso.lif.univ-mrs.frpageperso.lif.univ-mrs.fr/~arnaud.labourel/PPD/cours4.pdf · Thread 1 Thread 2 Obtenir M1 Obtenir M2 Obtenir M2 Obtenir M1 section critique

Exclusion Mutuelle

public class PetersonN{

public void Pmutex(int t) {

int j, k;

boolean cond;

for (j=0; j < nproc -1; j++) {

flag[t] = j;

turn[j] = t;

cond = true;

for (k=0; (k < nproc) && (k != t); k++)

cond = cond || (flag[k] >= j);

while (cond && (turn[j] == t))

Thread.yield ();

}

}

public void Vmutex(int t) {

flag[t] = -1;

}

}

Arnaud Labourel (Universite de Provence) Exclusion Mutuelle 9 fevrier 2011 53 / 53