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