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.
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.
C, FUSE & Linux kernel
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.
C, Linux kernel