Weenix

Semester-long project completed as a half-credit addition to Brown CS 167 - Operating Systems (known as CS 169).

Weenix is modeled after the early Unix kernel, can run arbitrary C programs with dynamic linking, and required student implementation of:

  • Single-processor kernel threads
  • A tty line discipline
  • Drivers for /dev/zero and /dev/null
  • Virtual file system - a kernel-facing API to abstract system call implementations away from the particular file system implementation
  • The System V File System (S5FS)
  • A virtual memory system that handles pagefaults with permissions checking and maintains shadow memory objects for private mappings
  • The following system calls:
    • fork()
    • mmap() and munmap()
    • brk() and sbrk()
    • open() and close()
    • dup() and dup2()
    • read() and write()
    • lseek()
    • mknod()
    • link() and unlink()
    • mkdir() and rmdir()
    • rename()
    • stat() and getdents()
    • chdir()
    • waitpid() and getpid()

Code for this project is not public on GitHub, but can be made available on request.