Theoretical Aspects: Logical Clocks Causal Ordering Global State Recording Termination Detection
Theoretical Aspects: Logical Clocks Causal Ordering Global State Recording Termination Detection
Logical Clocks
Causal Ordering
Global State Recording
Termination Detection
B. Prabhakaran 1
Lamport’s Clock
Happened before relation:
a -> b : Event a occurred before event b. Events in the same
process.
a -> b : If a is the event of sending a message m in a process
and b is the event of receipt of the same message m by another
process.
a -> b, b -> c, then a -> c. “->” is transitive.
Causally Ordered Events
a -> b : Event a “causally” affects event b
Concurrent Events
a || b: if a !-> b and b !-> a
B. Prabhakaran 2
Space-time Diagram
Space P1 e11 e12 e13 e14
Internal
Events
Messages
P2
e21 e22 e23 e24
Time
B. Prabhakaran 3
Logical Clocks
Conditions satisfied:
Ci is clock in Process Pi.
If a -> b in process Pi, Ci(a) < Ci(b)
Let a: sending message m in Pi; b : receiving message m in Pj;
then, Ci(a) < Cj(b).
Implementation Rules:
R1: Ci = Ci + d (d > 0); clock is updated between two
successive events.
R2: Cj = max(Cj, tm+ d); (d > 0); When Pj receives a message
m with a time stamp tm (tm assigned by Pi, the sender; tm =
Ci(a), a being the event of sending message m).
A reasonable value for d is 1
B. Prabhakaran 4
Space-time Diagram
Space P1 e11 e12 e13 e14 e15 e16 e17
(1) (2) (3) (4) (5) (6) (7)
B. Prabhakaran 5
Limitation of Lamport’s Clock
Space P1 e11 e12 e13
(1) (2) (3)
B. Prabhakaran 7
Vector Clocks Comparison
1. Equal: ta = tb iff i, ta[i] = tb[i]
2. Not Equal: ta != tb iff ta[i] != tb[i], for at least one i
3. Less than or equal: ta <= tb iff ta[i] <= tb[i], for all i
4. Less than : ta < tb iff ta[i] <= tb[i] and ta[i] != tb[i], for all i
5. Concurrent: ta || tb iff ta !< tb and tb !< ta
6. Not less than or equal ...
7. Not less than ..
B. Prabhakaran 8
Vector Clock …
Space P1 e11 e12 e13
(1,0,0) (2,0,0) (3,4,1)
P3 e31 e32
(0,0,1) (0,0,2)
Time
B. Prabhakaran 9
Causal Ordering of Messages
Space Send(M1)
P1
Send(M2)
P2
P3 (1)
(2)
Time
B. Prabhakaran 10
Message Ordering …
Not really worry about maintaining clocks.
Order the messages sent and received among all processes
in a distributed system.
(e.g.,) Send(M1) -> Send(M2), M1 should be received
ahead of M2 by all processes.
This is not guaranteed by the communication network since
M1 may be from P1 to P2 and M2 may be from P3 to P4.
Message ordering:
Deliver a message only if the preceding one has already been
delivered.
Otherwise, buffer it up.
B. Prabhakaran 11
BSS Algorithm
B. Prabhakaran 12
BSS Algorithm ...
1. Process Pi increments the vector time VTpi[i], time stamps,
and broadcasts the message m. VTpi[i] - 1 denotes the number
of messages preceding m.
2. Pj != Pi receives m. m is delivered when:
a. VTpj[i] == VTm[i] - 1
b. VTpj[k] >= VTm[k] for all k in {1,2,..n} - {i}, n is the
total number of processes. Delayed message are queued
in a sorted manner.
c. Concurrent messages are ordered by time of receipt.
3. When m is delivered at Pj, VTpj updated according Rule 2 of
vector clocks.
2(a) : Pj has received all Pi’s messages preceding m.
2(b): Pj has received all other messages received by Pi
before sending m.
B. Prabhakaran 13
BSS Algorithm …
P1 (0,0,0) (buffer) (0,0,1) (0,1,1)
deliver
from buffer
P2 (0,0,1) (0,1,1)
P3
(0,0,1) (0,1,1)
P4
B. Prabhakaran 14
SES Algorithm
SES: Schiper-Eggli-Sandoz Algorithm. No need for
broadcast messages.
Each process maintains a vector V_P of size N - 1, N
the number of processes in the system.
V_P is a vector of tuple (P’,t): P’ the destination
process id and t, a vector timestamp.
Tm: logical time of sending message m
Tpi: present logical time at pi
Initially, V_P is empty.
B. Prabhakaran 15
SES Algorithm
Sending a Message:
Send message M, time stamped tm, along with V_P1 to P2.
Insert (P2, tm) into V_P1. Overwrite the previous value of
(P2,t), if any.
(P2,tm) is not sent. Any future message carrying (P2,tm) in
V_P1 cannot be delivered to P2 until tm < tP2.
Delivering a message
If V_M (in the message) does not contain any pair (P2, t), it can
be delivered.
/* (P2, t) exists */ If t ≥ Tp2, buffer the message. (Don’t
deliver).
else (t < Tp2) deliver it
B. Prabhakaran 16
SES Algorithm ...
What does the condition t ≥ Tp2 imply?
t is message vector time stamp.
t > Tp2 -> For all j, t[j] > Tp2[j]
This implies some events occurred without P2’s knowledge in
other processes. So P2 decides to buffer the message.
When t < Tp2, message is delivered & Tp2 is updated
with the help of V_P2 (after the merge operation).
B. Prabhakaran 17
SES Buffering Example
P1 (0,0,0) Tp1: (1,1,0) (2,2,2)
V_P2:
Tp2: (P1, <0,1,0>)
P2 (0,1,0) (0,2,0) (P3, <0,2,0>)
M1 M2
V_P2 V_P2:
empty (P1, <0,1,0>) V_P3:
P3 M3 M4 (P1,<0,2,2>)
Tp3: (0,2,1) (0,2,2) V_P3:
(P1,<0,1,0>)
B. Prabhakaran 18
SES Buffering Example...
M1 from P2 to P1: M1 + Tm (=<0,1,0>) + Empty V_P2
M2 from P2 to P3: M2 + Tm (<0, 2, 0>) + (P1, <0,1,0>)
M3 from P3 to P1: M3 + <0,2,2> + (P1, <0,1,0>)
M3 gets buffered because:
Tp1 is <0,0,0>, t in (P1, t) is <0,1,0> & so Tp1 < t
When M1 is received by P1:
Tp1 becomes <1,1,0>, by rules 1 and 2 of vector clock.
After updating Tp1, P1 checks buffered M3.
Now, Tp1 > t [in (P1, <0,1,0>].
So M3 is delivered.
B. Prabhakaran 19
SES Algorithm ...
On delivering the message:
Merge V_M (in message) with V_P2 as follows.
If (P,t) is not there in V_P2, merge.
If (P,t) is present in V_P2, t is updated with max(t[i] in Vm,
t[i] in V_P2). {Component-wise maximum}.
Message cannot be delivered until t in V_M is
greater than t in V_P2
Update site P2’s local, logical clock.
Check buffered messages after local, logical clock
update.
B. Prabhakaran 20
SES Algorithm …
P1 (1,2,1) (2,2,1)
P2 (0,1,1) M2
(0,2,1) V_P2 is
empty
P3
M1 (0,2,2)
(0,0,1)
V_P3 is
empty
B. Prabhakaran 21
Handling Multicasts
Each node can maintain n x n matrix M, n being the
number of processes.
Node i multicasts to j and k: increments Mi[i,j] and
Mi[i,k]. M sent along with the message.
When node j receives message m from i, it can be
delivered if and only if:
Mj[i,j] = Mm[i,j] - 1
Mj[k,j] >= Mm[k,j] for all k != i.
Else buffer the message
On message delivery: Mj[x,y] = max(Mj[x,y], Mm[x,y])
B. Prabhakaran 22
Handling Multicasts: Example
000 000 000 000
000 101 000 101
P1 000 110 110 110
000
000
P2 110 M2
000
101
110
P3
M1 000
000 101
000 110
110
B. Prabhakaran 23
Global State
Global State 1
C1: Empty
$500 $200
A C2: Empty B
Global State 2
C1: Tx $50
$450 $200
A C2: Empty B
Global State 3
C1: Empty
$450 $250
A C2: Empty B
B. Prabhakaran 24
Recording Global State...
(e.g.,) Global state of A is recorded in (1) and not in (2).
State of B, C1, and C2 are recorded in (2)
Extra amount of $50 will appear in global state
Reason: A’s state recorded before sending message and C1’s state
after sending message.
Inconsistent global state if n < n’, where
n is number of messages sent by A along channel before A’s state
was recorded
n’ is number of messages sent by A along the channel before
channel’s state was recorded.
Consistent global state: n = n’
B. Prabhakaran 25
Recording Global State...
Similarly, for consistency m = m’
m’: no. of messages received along channel before B’s state recording
m: no. of messages received along channel by B before channel’s state was
recorded.
Also, n’ >= m, as in no system no. of messages sent along the
channel be less than that received
Hence, n >= m
Consistent global state should satisfy the above equation.
Consistent global state:
Channel state: sequence of messages sent before recording sender’s state,
excluding the messages received before receiver’s state was recorded.
Only transit messages are recorded in the channel state.
B. Prabhakaran 26
Recording Global State
Send(Mij): message M sent from Si to Sj
rec(Mij): message M received by Sj, from Si
time(x): Time of event x
LSi: local state at Si
send(Mij) is in LSi iff (if and only if) time(send(Mij)) <
time(LSi)
rec(Mij) is in LSj iff time(rec(Mij)) < time(LSj)
transit(LSi, LSj) : set of messages sent/recorded at LSi
and NOT received/recorded at LSj
B. Prabhakaran 27
Recording Global State …
inconsistent(LSi,LSj): set of messages NOT sent/recorded
at LSi and received/recorded at LSj
Global State, GS: {LS1, LS2,…., LSn}
Consistent Global State, GS = {LS1, ..LSn} AND for all i
in n, inconsistent(LSi,LSj) is null.
Transitless global state, GS = {LS1,…,LSn} AND for all
i in n, transit(LSi,LSj) is null.
B. Prabhakaran 28
Recording Global State ..
LS1 M2
S1 M1
S2
LS2
M1: transit
M2: inconsistent
B. Prabhakaran 29
Recording Global State...
Strongly consistent global state: consistent and transitless,
i.e., all send and the corresponding receive events are
recorded in all LSi.
LS11 LS12
LS22 LS23
LS21
B. Prabhakaran 30
Chandy-Lamport Algorithm
Distributed algorithm to capture a consistent global state. Communication channels
assumed to be FIFO.
Uses a marker to initiate the algorithm. Marker sort of dummy message, with no effect
on the functions of processes.
Sending Marker by P:
P records its state.
For each outgoing channel C, P sends a marker on C before P sends further
messages along C.
Receiving Marker by Q:
If Q has NOT recorded its state: (a). Record the state of C as an empty sequence.
(b) SEND marker (use above rule).
Else (Q has recorded state before): Record the state of C as sequence of messages
received along C, after Q’s state was recorded and before Q received the marker.
FIFO channel condition + markers help in satisfying consistency
condition.
B. Prabhakaran 31
Chandy-Lamport Algorithm
Initiation of marker can be done by any process, with its own unique
marker: <process id, sequence number>.
Several processes can initiate state recording by sending markers.
Concurrent sending of markers allowed.
One possible way to collect global state: all processes send the
recorded state information to the initiator of marker. Initiator process
can sum up the global state.
Seq
Si Sj
Sc
Seq’
B. Prabhakaran 32
Chandy-Lamport Algorithm ...
Example:
Pi Pj Pk
Send Send
Record Marker Record Marker Record
channel channel channel
state state state
Channel state example: M1 sent to Px at t1, M2 sent to Py at t2, ….
B. Prabhakaran 33
Chandy-Lamport Algorithm ...
Pi
Pj
B. Prabhakaran 34
Cuts
Cuts: graphical representation of a global state.
Cut C = {c1, c2, .., cn}; ci: cut event at Si.
Consistent Cut: If every message received by a Si before
a cut event, was sent before the cut event at Sender.
One can prove: A cut is a consistent cut iff no two cut
events are causally related, i.e., !(ci -> cj) and !(cj -> ci).
B. Prabhakaran 35
Time of a Cut
C = {c1, c2, .., cn} with vector time stamp VTci. Vector
time of the cut, VTc = sup(VTc1, VTc2, .., VTcn).
sup is a component-wise maximum, i.e., VTci =
max(VTc1[i], VTc2[i], .., VTcn[i]).
Now, a cut is consistent iff VTc = (VTc1[1], VTc2[2], ..,
VTcn[n]).
B. Prabhakaran 36
Termination Detection
Termination: completion of the sequence of algorithm. (e.g.,) leader
election, deadlock detection, deadlock resolution.
Use a controlling agent or a monitor process.
Initially, all processes are idle. Weight of controlling agent is 1 (0 for
others).
Start of computation: message from controller to a process. Weight: split
into half (0.5 each).
Repeat this: any time a process send a computation message to another
process, split the weights between the two processes (e.g., 0.25 each for the
third time).
End of computation: process sends its weight to the controller. Add this
weight to that of controller’s. (Sending process’s weight becomes 0).
Rule: Sum of W always 1.
Termination: When weight of controller becomes 1 again.
B. Prabhakaran 37
Huang’s Algorithm
B. Prabhakaran 38
Huang’s Algorithm
1/4 P1 0.5 P1
P4 P5 0 P4 0 P5
1/8 1/16
B. Prabhakaran 39