“What I cannot create, I do not understand.” — Richard Feynman (1918-1988)
This little book contains a series of course projects based on egos-2000. The goal is to help students gain experience and confidence in creating their own operating system (OS) or similar computer systems in their future careers.
Core projects
There are 6 core projects that cover key OS concepts for an undergraduate OS course, such as Cornell CS4411. The projects introduce the architectural support for OS one by one, which students have found very helpful. For example, students will play with the timer and scheduler without any knowledge of privilege modes or page tables.
| OS concepts | Architectural support | |
|---|---|---|
| P0: Hello, World! | code, data, heap, stack | user-level ISA |
| P1: Cooperative Threads | thread, yield, context switch | |
| P2: Preemptive Scheduling | interrupt and exception handling | control register, timer |
| P3: System Call & Protection | inter-process communication | privilege mode |
| P4: Virtual Memory | process, virtual address space | page table translation |
| P6: File System | block, inode, file, directory |
Advanced projects
There are 3 advanced projects for a graduate-level OS course, such as Cornell CS5411 or Northeastern CS6640.
| OS concepts | Architectural support | |
|---|---|---|
| P5: I/O Device Driver | memory-mapped I/O | I/O bus, direct memory access |
| P7: Ethernet & TCP/IP | I/O interrupt, IRQ, UDP | platform-level interrupt controller |
| P8: Multicore & Locks | boot loader, mutual exclusion | atomic memory operation |
All the projects can run on the QEMU emulator as well as real RISC-V hardware. Now, let's get our hands dirty and have fun with OS!