This document discusses clock synchronization in distributed systems. It begins by defining distributed systems and noting that clock discrepancies can cause issues. It then discusses the need to resynchronize clocks to account for clock skew and drift. The document outlines several common clock synchronization algorithms, including Cristian's algorithm, the Berkeley algorithm, and the Network Time Protocol. It also discusses logical clocks, like Lamport's clocks and vector clocks, which provide a logical ordering of events. Finally, it briefly introduces election algorithms, like the Bully algorithm and ring algorithm, which are used to select a coordinator process in distributed systems.