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 specification available here
- Due date: 11:59PM, June 21.
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 specification available here
- Due date: 11:59PM, May 24.
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 specification available here
- Due date: 11:59PM, May 3.
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 specification available here
- Due date: 11:59PM, April 12.
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 specification available here
- Due date: 11:59PM, April 5.
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.
- Project specification available here
- Due date: 11:59PM, March 25.
xv6 Resources
- xv6 source code: https://github.com/snu-csl/xv6-riscv-snu (our customized version)
- xv6: a simple, Unix-like teaching operating system
- RISC-V User-level ISA Cheat Sheet (excerpted from Computer Architecture class, Fall 2019)
- RISC-V: An Overview of the Instruction Set Architecture
- RISC-V Instruction Set Manual Volume I: User-Level ISA Version 2.2
- RISC-V Instruction Set Manual Volume II: Privileged ISA Version 1.10