Clock Synchronization in Distributed Systems