Systems Projects

This page contains the list of projects completed in Operating Systems and Computer Networks courses.  Each project has a brief description, technologies used and contains relevant links of GitHub, papers in PDF format, slides and YouTube demo.

Abstract

Our objective is to implement a CSMA/CD based medium access control scheme and Dijkstra routing protocol to deliver data between any pair of end nodes for a simulation time of 30 seconds in a virtual network. The packet movement and associated statistics are shown through a web simulation. The simulation has a HTML and javascript frontend which makes API call to a python backend to get JSON data, and uses the information to modify the GUI components accordingly.

GitHub   PDF   YouTube

Technologies Used

Python, Flask, Javascript

Abstract

In this project we build a secure key value file system for Linux systems. When designing a “modern” file system, we care about performance of accessing from multiple clients as well as the security. In this project, we implemented a file system that “somewhat” fits the above goal using the fuse — SKVFS (Secure KeyValue File System).

The SKVFS is different from conventional file systems in two ways:

  • First, to make the file system efficient for sharing among multiple clients, the file system uses a flat key-value structure as GoogleFS. There is no real directory supports. Every file, including directories, is translated into a 256-bit key. The file system maintains some data structure to map the key to a real location. 
  • Second, to make the file system more secure, the file system uses MD5 to hash file names. As a result, anyone else cannot easily figure out what was the original filename, directory structure. Although MD5 can be brute-force attacked these days, it still take quite a while for an attacker to figure out.

GitHub 

Technologies Used

C, FUSE & Linux kernel

Abstract

In order to keep the kernel small but also provide the flexibility and generality for machines with different tasks, most modern operating systems support “loadable kernel modules”. In this way, the system can boot with a simpler, smaller kernel and then load these modules into kernel space when necessary. In this project, I implemented a loadable kernel module under Ubuntu Linux. This kernel module creates a pseudo device that maintains a key-value store in the kernel and allow different processes to share data through accessing this device. An automated shell script test_suit.sh is provided. Running that will spawn 30,000 threads to test every aspect of the key-value device. It will generate appropriate messages when it finishes to let you know whether the device is working as expected or not.

GitHub 

Technologies Used

C, Linux kernel

Close Menu
Scroll Up