In Spring 2019, I developed the majority of a operating system kernel known as “Weenix” as part of the CSCI1670: Operating Systems course (and its optional half-credit lab CSCI1690: Operating Systems Laboratory) at Brown University.
Weenix was designed to be developed over the course of the entire semester. I did my best to start things as early as possible, and after writing over 6,000 lines of code, I ended up finishing the project three weeks early. (Phew!)
I implemented the following features as part of Weenix:
- Procs. Threads, processes, and synchronization primitives.
- Drivers. Device drivers for terminals, disks, and the memory devices
- VFS (Virtual File System). A common interface between the operating system kernel and the various file systems (such as S5FS and device drivers).
- S5FS (System V File System). A file system based on the original Unix file system.
- VM (Virtual Memory). User address space management, running user-level code, servicing system calls, and basically everything else needed to combine all of the previous componenets into a fully functioning operating system. This includes virtual memory maps, handling page faults, memory management via anonymous objects and shadow objects, and system calls (in particular, the elusive