For project submission and automatic grading, we are running a dedicated server at http://sys.snu.ac.kr. If you want to access the sys server outside of the SNU campus, please send a mail to the instructor.

Project #6: Kernel threads

A kernel thread is a thread that always runs in the kernel space. Modern operating systems heavily use kernel threads to perform a certain task asynchronously. Currently, xv6 does not support kernel threads, so it’s your task in this project to extend xv6 so that it can support the creation and termination of kernel threads. Also, you will need to implement preemptive priority scheduling (for both kernel threads and user processes) and priority donation for sleeplock.

Project #5: Memory sharing across fork()

When the fork() system call is invoked, xv6 simply copies all the memory used by the parent process to the child process. In this project, you will implement efficient memory sharing between the parent and child process. The goal of this project is to understand the paging hardware of RISC-V and how the operating system manages virtual-to-physical address mapping to improve memory efficiency.

Project #4: Simplified Linux 2.4 scheduler

Currently, the CPU scheduler of xv6 uses a simple round-robin policy. The goal of this project is to understand the scheduling subsystem of xv6 by implementing a simplified version of the Linux 2.4 scheduler algorithm.

Project #3: Terminating processes

xv6 does not provide any way to terminate the currently running process. Hence, when a user runs a process that falls into an infinite loop, there is no way to terminate that process. The goal of this project is to implement a mechanism that can terminate one or more processes at once when the ctrl-c key is pressed in the shell prompt, using the notion of process group introduced in the previous project assignment.

Project #2: System calls

System call is a mechanism that allows user applications to ask a variety of services to the operating system kernel. The goal of this project is to understand how those system calls are implemented in xv6-riscv.

Project #1: Hello world, xv6

xv6 is an instructional operating system developed by MIT based on Dennis Ritchie and Ken Thompson’s Unix version 6 (v6). In this course, we will use xv6-riscv that is the version recently ported to a modern RISC-V multiprocessor. The goal of this project is to make your Linux or macOS development environment ready and say hello to xv6.

xv6 Resources