Mémoire partagée avec peu de registres 04/04/13Displexity1.

62
S Mémoire partagée avec peu de registres 04/04/13 Displexity 1

Transcript of Mémoire partagée avec peu de registres 04/04/13Displexity1.

Page 1: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity1

S

Mémoire partagée avec peu de

registres

04/04/13

Page 2: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity2

Système distribué

Processus

Communication/coopération: Par messages Par objets ( mémoire partagée== par registres)

04/04/13

Page 3: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity304/04/13

Page 4: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity4

Que veut-on résoudre et comment on le spécifie?

Tâche Entrées, Sorties Spécification :une relation entrées / sorties

Problème/ spécification: exclusion mutuelle

Objets

04/04/13

Page 5: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity5

Objets (déterministes)

Registres ( Val read(), write(Val v))

Pile, file, …( mettre(Val v), Val enlever())

Test and set (Boolean tas(Boolean v))

Compare and set ( Boolean cas(Val C,Val x, Val y)

Consensus ( Val decide( Val x))

04/04/13

Page 6: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity6

Implémenter les objets

Correction

Progression ( aussi valable pour les tâches,….)

04/04/13

Page 7: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity7

Correction

Spécification séquentielle: elle décrit le comportement de l’objet si les processus l’utilisent en séquence.

Quelle est la condition de correction quand plusieurs processus l’utilisent concurremment ?

par rapport à la spécification séquentielle

04/04/13

Page 8: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity8

Registres

Spécification séquentielle: une lecture retourne la dernière valeur écrite (la valeur initiale s’il n’y a pas de valeur écrite précédemment).

Spécification concurrente: (sûre) si une écriture et une lecture sont concurrentes la

lecture peut retournée n’importe quelle valeur (Régulier) si une écriture et une lecture sont concurrentes,

la lecture peut retourner une des écritures concurrentes ou la valeur écrite précédemment (valeur initiale si pas d’écriture avant)

04/04/13

Page 9: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity9

SURE, REGULIER, ATOMIQUE

04/04/13

WRITE( 4)

WRITE( 5)

READ 5

Page 10: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity10

SURE, REGULIER, ATOMIQUE

04/04/13

WRITE( 4)

WRITE( 5)

READ

WRITE( 4) WRITE( 5) READ

5

Page 11: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity11

SÛRE

04/04/13

WRITE( 4)

WRITE( 5)

READ

4 ou 5 ou 87 !!!

Page 12: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity12

REGULIER

04/04/13

WRITE( 4)

WRITE( 5)

READ

4 ou 5

Page 13: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity13

REGULIER

04/04/13

WRITE( 4)

WRITE( 5)

READREAD

4 ou 5 4 ou 5

Page 14: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity14

ATOMIQUE

04/04/13

WRITE( 4)

WRITE( 5)

READREAD

5 4

Page 15: Mémoire partagée avec peu de registres 04/04/13Displexity1.

15

ATOMIQUE

04/04/13 Displexity

WRITE( 4)

WRITE( 5)

READ

WRITE( 4) WRITE( 5)5 5

Page 16: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity16

ATOMIQUE

Chaque appel à une opération semble être instantanée et apparaitre entre le moment de son invocation et de sa réponse. Point de linéarisation

La séquence d’opérations ainsi obtenue respecte la spécification séquentielle

04/04/13

Page 17: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity17

ATOMIQUE

Cette définition s’applique pour tous les objets

Bonne propriété de composition

Très forte

D’autres types de corrections sont considérées: séquentielle, quiescente …..

Objets atomiques/ implémentation d’objet linéarisable

04/04/13

Page 18: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity18

Registres

Combien de lecteurs/ écrivains peuvent y accéder? SWSR, SWMR, MWSR, MWMR

Contenu du registre: booléen, multi-valué

Correction: sûr (safe), régulier, atomique

04/04/13

Page 19: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity19

Années : 85-90

A partir d’un SWSR booleen sûr (le plus faible) on peut construire un MWMR multi valué atomique (le plus fort)

Tous les processus qui invoquent une opération font des pas.

04/04/13

Page 20: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity20

Progression

Que se passe-t-il si certains processus ne font pas de pas?

( la définition formelle de l’atomicité tient compte du fait qu’une opération peut être débutée mais pas terminée « pendante »)

04/04/13

Page 21: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity21

Digression: consensus

Spécification: Accord: tous les processus qui décident, décident la

même valeur Validité: si un processsus décide il décide une valeur

proposée Terminaison: Tous les processus corrects décident

Tâche: ( I,O, )D

Objet: Spécification séquentielle :Tous les decide retournent l’argument du premier decide

04/04/13

Page 22: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity22

Wait free

Un processus, s’il fait des pas, (quoi que fassent les autres) peut toujours finir son opération Très fort

04/04/13

Page 23: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity23

Wait free

On peut faire peu de choses wait free: snapshot ( instantanée de la mémoire) oui, renommage (2n-1) oui ; exact non pile file etc…. non

Impossibilité du consensus

04/04/13

Page 24: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity24

Impossibilité du consensus WF

Il est impossible de faire du consensus wait free pour n>=2 processus avec des registres Une configuration bivalente initiale : (0,1)

04/04/13

Proc 1Proc 0

0 1

0 1

Page 25: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity2504/04/13

Proc 1Proc 0

0 1

1

Page 26: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity26

Une configuration bivalente et les suivantes monovalentes

04/04/13

QP

0 1

0 1

Page 27: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity27

Une configuration bivalente et les suivantes monovalentes

04/04/13

QP0 1

0 1

R R’QP

0 1

0 1

R R’

Contradiction

Page 28: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity28

Une lecture et une écriture ou deux écritures sur le même registres

04/04/13

QP0 1

0 1

R/W W’QP

0 1

0 1

R/W W’

Contradiction

Page 29: Mémoire partagée avec peu de registres 04/04/13Displexity1.

29

2 écritures sur des registres différents

04/04/13 Displexity

QP0 1

0 1

W W’QP

0 1

0 1

W W’

Contradiction

Page 30: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity30

Consensus WF pour 2 processus avec une file

Init: 1, 0

04/04/13

Page 31: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity31

Consensus WF pour 2 processus avec une file

Init: 1, 0

Pour le processus i Val Decide (Val v)==

{R[i]:=v;

x=enlever();

si x==1 alors return v

sinon return R[1-i]}

04/04/13

Page 32: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity32

Pour 2 processus

On peut faire du consensus wait free pour 2 processus avec une file + des registres

On ne peut pas faire du consensus wait free avec des registres

on ne peut pas faire de file wait free avec des registres

04/04/13

Page 33: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity33

Non blocking

Parmi les processus un d’entre eux finit son opération Les autres peuvent être bloqués

04/04/13

Page 34: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity34

Snapshot

Un ensemble de registres, le registre R[i] est écrit par le processus i et lu par tous.

2 opérations : update( val v) , Val [] scan()

Implémentation naïve: update(val v) exécuté par le processus i : R[i]=v; Scan lecture séquentielle de tous les registres

( Collect )

04/04/13

Page 35: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity35

Cette implémentation n’est pas atomique

04/04/13

1

2

3

Update (11)

Update (22)

(0, 22)

Page 36: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity36

Scan()= {

A=collect (); B=collect();

while ( A<>B){A:=B; B=collect();}

Return A;}

Atomique: point de linéarisation entre les 2 derniers collects

04/04/13

Page 37: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity37

Non blocking : un processus qui écrit peut empêcher tous les autres de terminer le scan (un processus progresse (celui qui fait les write))

Pas wait free

Il est possible de le réaliser wait free

04/04/13

Page 38: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity38

Obstruction free

Si un processus est seul alors il termine son opération propriété faible On peut « tout » faire obstruction free Attention il faut toujours assurer la correction quand il

y a des exécutions concurrentes

Page 39: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity39

Retour sur les registres

n processus dont on connait les identités 1..n

Si on peut réaliser un objet (une tâche, un pb) avec des registres alors on peut le faire avec n registres SWMR (un par processus)

Faut-il n registres pour tout tâche/objet/pb ????

04/04/13

Page 40: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity40

n processus dont les identités sont dans un ensemble 1..M avec M>>n.

Avec M registres on peut « tout » faire

A-t-on besoin de M registres???

04/04/13

Page 41: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity4104/04/13

Page 42: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity42

Moins de registres que de processus: problèmes

3 processus, 2 registres:

Proc A écrit dans le registre 1

Proc B écrit dans le registre 2

Proc C écrit alternativement dans 1 et dans 2: C peut n’être jamais vu

04/04/13

Page 43: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity43

Pas de registres pré-alloués: problème

A et B exécutent le même code et écrivent répétitivement dans le registre 1 puis le registre 2.

A ne voit jamais les écritures de B ( par contre B voit A)

04/04/13

Page 44: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity44

N processus qui ont des identités dans 1..M avec M>>N

Peut on « tout » faire avec moins de M registres??

Les registres ne peuvent pas être alloués suivant les noms des processus

Peut on « simuler » le fait qu’il y a un registre SWMR par processus?

04/04/13

Page 45: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity45

Premiere approche

On commence par faire du renommage wait free. Les processus ont alors un nom entre 1 et 2n-1

Chaque processus a alors un accès exclusif à un des 2n-1 registres auxquels il accède suivant son nom.

Mais il faut d’abord faire du renommage

04/04/13

Page 46: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity46

Borne inférieure

On ne peut pas faire une telle émulation avec n-1 registres

Argument de couverture: un processus couvre un registre si son prochain pas consiste à écrire dans ce registre

Preuve par contradiction: on construit une exécution où n-1 processus couvrent chacun un registre

04/04/13

Page 47: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity47

N=6

04/04/13

P Q R S T

Page 48: Mémoire partagée avec peu de registres 04/04/13Displexity1.

48

Borne inférieure

Puis le dernier processus réalise une Ecriture en écrivant dans les registres

04/04/13 Displexity

P Q R S T

Page 49: Mémoire partagée avec peu de registres 04/04/13Displexity1.

49

Borne inférieure

Puis le dernier processus réalise une Ecriture en écrivant dans les registres

04/04/13 Displexity

P Q R S T

Page 50: Mémoire partagée avec peu de registres 04/04/13Displexity1.

50

Borne inférieure

Puis le dernier processus réalise une Ecriture en écrivant dans les registres

04/04/13 Displexity

P Q R S T

Page 51: Mémoire partagée avec peu de registres 04/04/13Displexity1.

51

Borne inférieure

Puis le dernier processus réalise une Ecriture en écrivant dans les registres

Ecriture terminée

04/04/13 Displexity

P Q R S T

Page 52: Mémoire partagée avec peu de registres 04/04/13Displexity1.

52

Borne inférieure

Les n-1 processus recouvrent les registres et l’Ecriture est perdue

04/04/13 Displexity

Page 53: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity53

Borne inférieure

Il faut au moins n registres MWMR pour simuler n registres SWSR.

04/04/13

Page 54: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity54

Autre approche

On peut simuler (non blocking) n registres SWMR avec n registres MWMR

04/04/13

Page 55: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity55

Shared variable :

array of n MWMR-register : R

Code for process p

Local variable:

set of Values View = ensemble vide ;

integer k = 0

04/04/13

Page 56: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity5604/04/13

Write( x):1 v = (x; p; k) //valeur, processus, numero2 next = 03 View = View U {v}4 do5 Snap = NBScan()6 View = Snap U View7 write(R[next]; V iew)8 next = (next + 1) mod m9 until (card {r s.t v in Snap[r])}=n)10 k = k + 1

Page 57: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity57

read(q): //lecture du registre de q

View = Collect()

return x such that (x; q; u) in View with maximal u

04/04/13

Page 58: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity58

LA simulation non blocking permet de réaliser toute tâche wf ( qui était possible avec un registre par processus)

04/04/13

Page 59: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity59

Autres résultats ….

La prochaine fois !

04/04/13

Page 60: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity60

Résultats connus

(Modèle où il n’y a pas de pannes: un processus qui a commencé à faire des pas en fera une infinité)

O(Log(n)) registres MWMR sont nécessaires et suffisants pour faire une élection de leader. Styer et Peterson (PODC89)

n registres pour faire de l’exclusion mutuelle ( Burn et Lynch (Information and Computation 1993)

04/04/13

Page 61: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity61

Résultat connus

Des bornes inf :

Il faut au moins sqrt(n) registres pour le consensus (randomisé)

obstruction free (Ellen et Al [JACM98]) sqrt( n-1)/2 pour avoir des estampilles (obstruction

free)

04/04/13

Page 62: Mémoire partagée avec peu de registres 04/04/13Displexity1.

Displexity62

Mais les algorithmes connus pour le consensus randomisé et pour les estampilles wf utilisent n ou n-1 registres….

04/04/13