This repository contains projects from my operating systems course - CS537 Fall 2014. It is a good representation of my C programming skills.
Each project was split into two parts: Part A and Part B. Part A usually involved creating programs that were similar to standard UNIX programs, while Part B always involved extending the functionality of xv6, a simple UNIX-like operating system designed for educational purposes.
A simple program that demonstrates the birthday paradox. This was a warm up project intended to refresh students' C programming skills.
Added a new system call to xv6 that incremented a counter. This project served as an introduction to the xv6 environment.
A simple UNIX shell that supports output redirection and pipes.
Changed xv6's CPU scheduler to use a lottery scheduling policy.
A dynamic memory allocator similar to malloc, with three different versions that are each optimized for different workloads.
Rearranged the xv6 memory layout so that the stack grew from the bottom towards the top, with the heap growing from top to bottom.
A web server that demonstrates the producer-consumer problem in concurrency.
Implement threads in xv6, however I did not do this project because we were allowed to drop one project from our grade and it was Thanksgiving break :)
A fully functional network file server, using UDP and RPC. This was by far my favorite project of the course. It taught me a great deal about file systems, as it required me to implement one from scratch. The name of the file system I had to implement is MFS.
Implemented a new file type in xv6 that supported mirroring, similar to RAID. A file of this type is gauranteed to always have two copies on disk.