Summary
Physical clocks can be imprecise for the sake of total ordering across multiple processes
- Logical clocks abstract the idea of ordering away from physical time, by assigning a number to an event for the purpose of ordering
- the clock condition states that for sequential events, where
a happens before b, then the clock function C should yield C(a) < C(b), which in implementation requires that the logical clock be incremented between events
Back to Research-Papers
distributedsystems
A system is distributed if the message transmission delay is non negligable relative to the time between events in a single process
- In distributed systems, the concept of an event happening before another one is partial ordering
- paper examines a distributed algorithm for synchronizing a system of logical clocks for totally ordering events
- sometimes precise ordering cannot be determined, and is thus partial ordering
- concept of time and "happened before" to us is based on physical time and physical clocks, but in a system it may be more beneficial to care about observed
- we define a system as a collection of processes, each with a sequence of a priori totally ordered event
- notationally,
-> is relation between two events in a system, where a -> b means a happend before b
- intuitively, this means that
a causally affects event b
- two events are concurrent if they cannot causally affect each other, denoted by
a -|-> b, concurrency is commutative
- physically, it is intuitive that
a -|-> a, reflexive, since it doesn't make sense if an event can happen before itself
-
-> can be thought of as an irreflexive -|->
- even if phyically event
a on process A happens before event b on process B, they can be effectively concurrent when A doesn't know what B did until later- effectively, since they didn't communcative, we can think intuitively that they had no causal effect on on another
Lamport's Logical Clocks
Abstractly, a clock doesn't need to be physical. We represent it as C(x) which is a function that assigns a number to an event, x
- for multiple processes, each Pi has a clock Ci, then C(a) = Ci(a) for event
a in process Pi
-
Clock condition states
if a -> b then C(a) < C(b) (implication because partial ordering exists and events could be concurrent, even when C(a) ≠ C(b))- holds only if during message transmission, a is sending event and b is recieving event, if
a -> b from Pi to Pj, then Ci(a) < Cj(b)
- for an implementation of such a system with correct logical clocks, we must satisfy the clock condition
- each process Pi must increment Ci between any successive events
- if event
a is a message sent by Pi with a timestamp = Ci(a), then recieving event b on process Pj must set its clock Cj greater than Ci(a)