As part of my CS402 Course at USC, I built Weenix OS. Weenix OS was originally developed at Brown University and you can find out more about it here. As part of the project I implemented the following portions:
- PROCS:- Implemented process management for a uniprocessor with a single thread. The scheduler was a simple non-preemtive FIFO queue. Thread switching happens either when the current process finishes or when it yields voluntarily (through a system call).
- VFS:- Implemented the Virtual File System. This is an interface between the OS and the various file systems implementations that the OS supports (RamFS and SFS). This includes implementing most file related system calls.
- VM:- Implemented Virtual Memory to get a user space shell up and running. This meant I implemented the page fault handler, and the virtual memory map required to have Copy-On-Write working, the
fork()
,brk()
andmmap()
system calls.
These are screenshots from my implementation of the OS:
The Weenix User Space Shell
Output of the ls
command
Output of the cat
command showing the contents of the README file.
Ouptut of the vfstest
command testing the VFS layer.
Ouptut of the memtest
command testing the virtual memory implementation.
Output of the eatmem
command that stress tests the OS by eating at least 10,000 pages.
Output of the forkbomb limit500
command showing that it successfuly forked 500 processes.
Output of the stress limit500
command showing that it successfuly stress tested the system.
Showing that the OS cleanly halts after running these commands.
The code for this project is governed by a closed source license, but I can email a copy of it if required to potiential employers.