“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 systems or similar computer systems in their future careers.
Core projects
There are 6 core projects covering the key OS concepts for an undergraduate-level 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 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 Scheduler | 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 master-level OS course such as Cornell CS5411.
OS concepts | Architectural support | |
---|---|---|
P5: Serial Device Driver | synchronous I/O | serial bus, memory-mapped I/O |
P7: Ethernet & TCP/IP | asynchronous I/O | platform-level interrupt controller |
P8: Multicore & Locks | bootloader, mutual exclusion | atomic memory operation |
All the projects can run on QEMU as well as real RISC-V hardware. Now, let's get our hands dirty and have fun with OS!