Snow OS is a 64-bit cooperative multi-tasking operating system implemented in C. In short, it supports memory management, paging, context switching, terminal, shell and file management for tarfs.
The project was completed as a part of the graduate course CSE 506 Operating Systems by Prof. Mike Ferdman at Stony Brook University in Fall '17.
- Memory Subsystem (page descriptors, free list, virtual memory, page tables, kmalloc)
- Process Subsystem (kernel threads, context switch)
- User-level Subsystem (VMAs/vm_map_entrys, switch to ring 3, page faults)
- COW fork(), auto-growing stack, dynamic heap allocation, graceful SEGV
- I/O subsystem (syscalls, terminals, VFS, tarfs file access, elf loading)
- tarfs: open, read, close, opendir, readdir, closedir
- Terminal: read(stdin), write(stdout), write(stderr)
- Virtual File System
- kprintf, IDT, keyboard, timer interrupts
- Shell with PATH, PS1, cd, and &
- Script handling with shebang (#!)
- bin/init user process to launch shell using /etc/rc
- Reaper/Idle process to cleanup zombie processes
- Reused PIDs
- Binaries implemented: init, echo, sleep, cat, ls, kill -9, ps
- Background processes
- Runs its own Shell
cd: change current working directory
echo <input>: print the given input
export PATH=<_path>: update path variable with _path
export PS1=<_ps1>: update PS1 variable with _ps1
ls: list the current directory contents
ps: list all process in the OS
sleep: sleep for given input time in seconds
kill -9: kills the process with given pid
cat <file>: prints the given file content
./<binary_file>: execution of binary file with name binary_file
<command> &: execution of background process
make clean
make
qemu-system-x86_64 -curses -drive id=boot,format=raw,file=$USER.img,if=none -drive id=data,format=raw,file=$USER-data.img,if=none -device ahci,id=ahci -device ide-drive,drive=boot,bus=ahci.0 -device ide-drive,drive=data,bus=ahci.1 -gdb tcp::9999
ls
cat /etc/test.txt
.//etc/test.sbush
sbush /etc/test.sbush
ls /etc
ps
echo hello
export PS1=SHELL
Under the rootfs/etc/ folder, the following test files can be found:
- test: test directory for cd
- test.txt: simple text file for cat
- test.sbush: simple sbush script
- stress_test.sbush: stress test sbush script with 60+ commands to spawn 60+ processes, system remains stable
chdir
close
closedir
execvpe
exit
fork
free
getcwd
getpid
getppid
kill
malloc
open
opendir
ps
read
readdir
sleep
wait
waitpid
write
yield
Ankit Aggarwal
Saraj Munjal