Clock Logici

Anuncio
Middleware Laboratory
Clock Logici
Il tempo - i clock logici
20
Middleware Laboratory
Nozione di Tempo Logico
Basato sulle seguenti ovvie
assunzioni:
- Due eventi nello
stesso processo sono
“naturalmente” ordinati
- Una trasmissione
precede sempre una
ricezione
- Gli eventi sono così
ordinati secondo la
nozione di causaeffetto (precedenza
causale o happened
before)
Il tempo - i clock logici
21
1
Middleware Laboratory
Happened-before
Dati due eventi e ed e’ allora e precede e’, indicandolo con
e → e’ se:
1. gli eventi e ed e’ appartengono allo stesso processo
ed e accade prima di e’;
2. gli eventi e ed e’ appartengono invece a processi
distinti, e è l’evento di invio di un messaggio ed e’
l’evento di ricezione di tale messaggio;
3.
se esiste un evento e’’ t.c. e → e’’ e e’’ → e’
Dati due eventi e ed e’ se ¬(e → e’) ed ¬(e’ → e ), i due
eventi sono detti concorrenti: e || e’
22
Il tempo - i clock logici
Middleware Laboratory
Happened-before/esempio
Dato un diagramma spazio-tempo allora e → e’ se è possibile tracciare un percorso
da e ad e’, procedendo da sinistra verso destra, altrimenti sono concorrenti
Nell’ esempio: e32→e22, e23→e13 e quindi e32 →e13, mentre gli eventi e21 e e33 sono
concorrenti.
P1
e11
e31
e21
e41
e51
e61
j-esimo evento
del processo Pi
ej i
P2
e12
e22
e32
e42
e52
e62
e72
P3
e13
e23
e33
e43
e53
Il tempo - i clock logici
e63
23
2
Middleware Laboratory
Clock Logico Scalare
L’idea è di ordinare gli eventi del sistema assegnando
un numero naturale ad ogni evento: timestamping
scalare
L’ordinamento è basato sulla relazione
“happened before →”
Ad ogni evento e del sistema viene associato un
timestamp C(e), tale che:
se e → e’ allora C(e) < C(e’)
Il tempo - i clock logici
24
Middleware Laboratory
Algoritmo per il timestamping scalare
Pi mantiene un contatore Ci inizializzato a 0 e segue le
seguenti regole di aggiornamento:
1.
quando Pi esegue un evento, prima incrementa il
contatore Ci di una unità (Ci := Ci +1) e quindi
associa un timestamp Ti all’evento il cui valore è
pari al valore corrente di Ci;
2.
quando Pi invia un messaggio, esegue l’evento di
trasmissione e allega al messaggio il timestamp Ti
associato a tale evento ricavato dalla regola 1;
3.
quando a Pi arriva un messaggio con timestamp T,
esso pone Ci:= max(Ci ,T) e quindi esegue l’evento
di ricezione del messaggio (applica la regola 1).
Il tempo - i clock logici
25
3
Middleware Laboratory
Timestamping scalare-esempio
P1
P2
1
2
e1
e2
1
1
5
6
e3
1
e4
1
4
5
e3 2
e4 2
3
7
e5
1
8
8
e6
1
9
eji
1
10
k
e1 2
P3
1
e1 3
e2 2
2
3
e2 3
e3 3
e 32  e 1 3
e5 2
6
e4 3
e6 2
7
e5 3
j-esimo evento
del processo Pi
e7 2
11
Timestamp
scalare associato
all’evento dal
processo
e6 3
e14 || e3 5 : hanno timestamp diversi
e31 || e1 1 : hanno stesso timestamp
Il tempo - i clock logici
26
Middleware Laboratory
Clock Scalare -limiti
Il clock logico scalare non cattura completamente la
relazione happened-before. Infatti pur soddisfacendo la
seguente proprietà:
- se e → e’ allora C(e) < C (e’),
non soddisfa il viceversa:
- C(e) < C(e ’) non implica e → e ’
In sostanza non permettono di stabilire se due eventi sono
concorrenti
Mattern nel 1988 ha introdotto la nozione di clock vettoriale,
che invece caratterizza completamente la relazione di
causalità.
Il tempo - i clock logici
27
4
Middleware Laboratory
Clock Vettoriale
Ad ogni evento e viene assegnato un vettore V(e) di
dimensione pari al numero dei processi con la
seguente proprietà:
e → e’ se e solo se V(e) < V(e’)
Che significato ha il comparatore di minoranza tra
vettori?
V(e’) > V(e) se e solo se
∀x∈[1,…,n]: V(e’)[x] ≥ V(e)[x]
∧
∃x∈[1,…,n]: V(e’)[x] > V(e)[x]
Il tempo - i clock logici
28
Middleware Laboratory
Clock Vettoriale
1
2
0
1
2
2
V(e)
V(e’)
1
2
0
1
0
2
V(e)
V(e’)
⇒
⇒
Comparare il valori di due
e → e’ clock vettoriali associati a due
eventi distinti permette di
capire la relazione che lega i
due eventi (se uno precede
l’altro o se sono concorrenti)
e || e’
Associare clock vettoriali ad
eventi  timestamping
vettoriale
Il tempo - i clock logici
29
5
Middleware Laboratory
Algoritmo per timestamping vettoriale
Ogni processo Pi gestisce un vettore di interi V ad n
componenti Vi[1…n] , una componente per ogni processo.
La componente Vi[x] indica la stima che il processo Pi fa
sul numero di eventi eseguiti da Px
Il vettore è inizializzato a [-,-,…,0,…,-] e viene
aggiornato in base alle seguenti regole:
1.
quando Pi esegue un evento, incrementa Vi[i] di una
unità (Vi[i]:= Vi[i]+1) e poi associa un timestamp T
all’evento il cui valore è pari al valore corrente
di Vi;
2.
quando Pi esegue un evento di trasmissione, allega al
messaggio il timestamp di quell’evento ottenuto dalla
regola 1;
3.
quando arriva un messaggio a Pi con un timestamp T, Pi
esegue la seguente operazione: ∀x ∈ [1…n] :
Vi[x]:=max(Vi[x],T[x]), quindi esegue l’evento di
ricezione (esegue la regola 1);
30
Il tempo - i clock logici
Middleware Laboratory
Timestamping vettoriale-esempio
1
2
3
4
5
6
-
-
3
3
3
3
-
-
2
2
2
2
e5 1
e6 1
ej i
P1
e1 1
e3 1
e2 1
e4 1
l
P2
-
-
-
-
-
1
2
3
4
5
-
2
2
2
5
e3 2
e4 2
e1 2
-
P3
e2 2
e5 2
5
6
5
e6 2
5
m
7
k
5
e7 2
-
-
-
5
-
-
4
4
7
1
2
3
4
5
6
e3 3
e4 3
e5 3
Il tempo - i clock logici
Timestamp
vettoriale associato
all’evento dal
processo
e14 || e3 5
-
e1 3 e2 3
j-esimo evento
del processo Pi
e 13  e 2 6
e6 3
31
6
Middleware Laboratory
Esercizi-applichiamo i clock logici
Applicazione di tipo newsgroup universitario, studenti e professori
Il secchione e il meno secchione si sentono ogni giorno dopo lezione sulla newsgroup
Il secchione vuole sempre studiare, il meno secchione deve trovare un buon motivo per
studiare
Il professore anticipa l’esame al giorno dopo. Al solito il secchione ed il meno secchione si
sentono. E’ una bella giornata. Il meno secchione va al mare tutto il pomeriggio. La sera
la brutta sorpresa :)
Poiché m1 precede causalmente m2, allora m2 non deve essere consegnato finchè non
viene consegnato m1
m1:
“esame anticipato a
domani”
Prof
Quello secchione
m2:
“studiamo oggi? ”
Quello
meno
secchione
m3:
“io me ne vado al mare”
Il tempo - i clock logici
32
Middleware Laboratory
Applichiamo i clock logici
Proviamo con i clock scalari
m1: 1
“esame anticipato a
domani”
Prof
Quello secchione
Quello
meno
secchione
m2: 3
“studiamo oggi? ”
Vede che questo
messaggio ha
timestamp 3. Cosa
puo’ inferire?
Il tempo - i clock logici
33
7
Middleware Laboratory
Applichiamo i clock logici
Proviamo con i clock scalari
NB: le frecce non rilevanti
non sono disegnate,
comunque il messaggio è
inviato a tutti
m1: 1
“esame anticipato a domani
mattina”
Prof A
m2: 3
“studiamo oggi? ”
Secchione A
Quello
meno
secchione
Secchione B
m3:
“si, ma poi vado al mare ”
Cosa puo’ inferire?
m5: 3
“studiamo oggi? ”
m’3:
“vado al mare ”
Prof B
m4: 1
“esame anticipato a
domani pomeriggio”
Il tempo - i clock logici
34
Middleware Laboratory
Esercizi
1.
2.
3.
4.
5.
Definire un algoritmo per assicurare che ogni processo consegni i messaggi rispettando la loro
relazione di precedenza causale
Assumendo la presenza di un algoritmo di sincronizzazione e di lavorare in un sistema sincrono dire
se e come si possono utilizzare i clock locali (reali) per risolvere il problema definito al punto 1.
Discutere in maniera comparativa la capacità di catturare relazioni tra eventi dei clock logici scalari e
dei clock logici vettoriali. Fare un’ esempio di applicazione in cui i clock scalari non sono sufficienti
mostrando uno scenario.
Definire tutte le possibili sequenze di consegna dei messaggi che rispettino la loro relazione di
precedenza causale.
Definire tutte le possibili sequenze che il processo p3 può consegnare rispettando la relazione di
precedenza causale.
I testi degli esercizi 7-8-9 riguardanti la sincronizzazione dei clock sono direttamente riportati nelle slide
dove sono svolti.
Il tempo - i clock logici
35
8
Descargar