Syncing Clocks

A complete guide to synchronize clocks in distributed environment

This project is maintained by rajeshsurana

Welcome to the Clock Synchronization - Linux wiki by Rajesh!

This project is created in response to the requirement in CSE536- Advanced Operating System. We choose Linux for our project because it is open source as well as free. In addition, it is easily customizable because we have source code, compiling tools as well as online forums and blogs for help. In all, in terms of cost, support and legality of use, Linux is the best choice. For this project we used Ubuntu 14.04.1 LTS. The project itself is divided in 3 parts.

Before using any tool or software, the basic requirement is that we should be able to install it on our system. That’s why first step of part-1 is installation of Ubuntu. Goal is to make ourselves comfortable with the GUI of the Ubuntu and its functionalities such as terminal, text editor or compiler. It is important to understand how to update the software to get the latest security mechanisms as well as new utilities. Same analogy applies to kernel also. In fact, update of kernel is not just meant to be better functionality but an environment which is more secure and bug free. That’s why our second step of part-1 is to understand how to update a kernel to its latest revision. Perk of part-1 is at last where we get to know the typical structure of kernel module. We even devise a way to debug a kernel module on top of which debugger run.

In part-2, we build a communication channel that uses normal read/write system calls to communicate over IP. Here, we replace the standard socket interface used by most network programs and allow one application to communicate in full duplex via ipv4. Ipv4 is not to be altered. A write on system A will fill a read buffer on system B and visa-versa.

Part-3 uses part-2 to communicate between machines to implement a logical clock. When sending a message from system A to system B we want to have an ordering to determine among several messages which came first.

For complete report please click here.

Snapshots of the application

  1. Sender (IP address = Sender (IP address =

  2. Kernel Traces on sender side Kernel Traces on sender side

  3. Receiver (IP address = Receiver (IP address =

  4. Kernel Traces on receiver side Kernel Traces on receiver side

  5. Monitor after the events and acknowledgements Monitor after the events and acknowledgements

*Note: The problem statements are provided by prof. Skousen.