“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 or similar computer systems in their future career.
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!