For my second semester at OMSCS, I decided to take Graduate Intro to Operating System. The course has a class rating of 4.4 and covers concurrency, synchronization, memory management, networking and distributed services. The hands-on projects were written in C/C++ and focused on implementing multithreaded programming, inter-process communication, and distributed interactions via RPC.

The course was not easy, and I spent around 20 hours or more every week working on assignments. However, looking back at this course, grinding through the projects really helped me build a solid foundation in system level programming and design. I was able to come out of the class with an A and a better understanding of multithreaded programming design, shared-memory interprocess communication mechanisms and working with with gRPC framework.

Below are the projects that I worked on throughout the course.

Projects

The first project involved designing and implement a multi-threaded server that serves static files and a multi-threaded client that acts as a load generator for the server. Both the server and client will be written in C and supported both IPv4 and IPv6.

The second project built upon the first project and implements the getfile server as a proxy server for other servers that hosts the actual files. The second part of the project also builds on implementing shared-memory interprocess communication. I used semaphores and POSIX shared-memory API to accomplish this task.

The third project involves designing and implementing a simple distributed file system (DFS) using gRPC and protocol buffers. A weakly consistent synchronization system was used to manage cache consistency between multiple clients and a single server.