Mémoire partagée avec peu de registres

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

description

Mémoire partagée avec peu de registres. Système distribué. Processus Communication/coopération: Par messages Par objets ( mémoire partagée== par registres). Que veut-on résoudre e t comment on le spécifie?. Tâche Entrées, Sorties Spécification :une relation entrées / sorties - PowerPoint PPT Presentation

Transcript of Mémoire partagée avec peu de registres

Page 1: Mémoire partagée avec peu de registres

Displexity1S

Mémoire partagée avec peu de

registres

04/04/13

Page 2: Mémoire partagée avec peu de registres

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

Displexity304/04/13

Page 4: Mémoire partagée avec peu de registres

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

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

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

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

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

Displexity9

SURE, REGULIER, ATOMIQUE

04/04/13

WRITE( 4)

WRITE( 5)

READ 5

Page 10: Mémoire partagée avec peu de registres

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

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

Displexity12

REGULIER

04/04/13

WRITE( 4)

WRITE( 5)

READ

4 ou 5

Page 13: Mémoire partagée avec peu de registres

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

Displexity14

ATOMIQUE

04/04/13

WRITE( 4)

WRITE( 5)

READREAD

5 4

Page 15: Mémoire partagée avec peu de registres

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

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

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

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

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

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

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

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

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

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

Displexity2504/04/13

Proc 1Proc 0

0 11

Page 26: Mémoire partagée avec peu de registres

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Displexity4104/04/13

Page 42: Mémoire partagée avec peu de registres

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

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

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

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

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

Displexity47

N=6

04/04/13

P Q R S T

Page 48: Mémoire partagée avec peu de registres

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

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

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

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

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

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

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

Displexity55

Shared variable :array of n MWMR-register : R

Code for process pLocal variable: set of Values View = ensemble vide ;integer k = 0

04/04/13

Page 56: Mémoire partagée avec peu de registres

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

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

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

Displexity59

Autres résultats ….

La prochaine fois !

04/04/13

Page 60: Mémoire partagée avec peu de registres

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

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

Displexity62

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

04/04/13