SWE3004: Operating Systems (Spring 2017)


  • You will have several projects based on the xv6 instructional operating system. To successfully complete these projects, you must have excellent C programming skill and be familiar with the Linux platform.
  • Required skills
    • Fluent C programming (must!)
    • Basic knowledge on Intel x86 architecture
    • Intel x86 assembly programming
    • Basic knowledge on Unix/Linux systems
    • Ability to read a large, complex program

[Lab. Class]

  • When: 19:30 - 21:00 (Tuesday)
  • Where: #26312

Project #0 (Deadline: 3/19 11:59PM)

  • Install Ubuntu 16.04 -- This is an official Linux distribution we will use.
  • Install xv6 & qemu
  • Print your student ID and name in the xv6 boot message. Your name and student ID should be printed before the shell is running. This means that you have to insert a code (yeah, just a single line) into one of the xv6 kernel code.
  • Submit your screenshot to the TA.

Project #1 (Deadline: 3/26 11:59PM)

  • Implement getnice, setnice, and ps system calls in xv6
  • When a process calls fork() system call, the nice value of child process is same as its parent process.

Project #2 (Deadline: 4/2 11:59PM)

  • Implement priority-based scheduler on xv6

Project #2-2 (Deadline: 4/9 11:59PM)

Project #3 (Deadline: 4/30 11:59PM)

  • Implement a byte-level allocator on xv6
  • Since a page-size bitmap has up to 2^15 entries, we modifies the maximum number of allocated pages per each slab from 100 to 64 (in case of 8bytes slab).

Project #4 (Deadline: 5/14 11:59PM)

  • Implement copy-on-write on xv6

Project #5 (Deadline: 5/28 11:59PM)

  • Implement thread-support on xv6

Project #6 (Deadline: 6/11 11:59PM)

  • Support mutex and condition variable on xv6