Download - Mémoire partagée avec peu de registres
![Page 1: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/1.jpg)
Displexity1S
Mémoire partagée avec peu de
registres
04/04/13
![Page 2: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/3.jpg)
Displexity304/04/13
![Page 4: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/9.jpg)
Displexity9
SURE, REGULIER, ATOMIQUE
04/04/13
WRITE( 4)
WRITE( 5)
READ 5
![Page 10: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/12.jpg)
Displexity12
REGULIER
04/04/13
WRITE( 4)
WRITE( 5)
READ
4 ou 5
![Page 13: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/14.jpg)
Displexity14
ATOMIQUE
04/04/13
WRITE( 4)
WRITE( 5)
READREAD
5 4
![Page 15: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/25.jpg)
Displexity2504/04/13
Proc 1Proc 0
0 11
![Page 26: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/27.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/32.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/33.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/34.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/35.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/36.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/37.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/38.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/39.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/40.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/41.jpg)
Displexity4104/04/13
![Page 42: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/42.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/43.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/44.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/45.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/46.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/47.jpg)
Displexity47
N=6
04/04/13
P Q R S T
![Page 48: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/48.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/49.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/50.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/51.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/52.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/53.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/54.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/55.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/56.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/57.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/58.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/59.jpg)
Displexity59
Autres résultats ….
La prochaine fois !
04/04/13
![Page 60: Mémoire partagée avec peu de registres](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/60.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/61.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081507/568166e9550346895ddb2a9f/html5/thumbnails/62.jpg)
Displexity62
Mais les algorithmes connus pour le consensus randomisé et pour les estampilles wf utilisent n ou n-1 registres….
04/04/13