Experiment descriptions are for you to read & reproduce. The assignments will be on Collab. They include Q&A and coding assignments.
Get the code:
git clone https://github.com/fxlin/p1-kernel
A tiny kernel incrementally built for OS education.
Start with minimal, baremetal code. Then add kernel features in small doses.
Each experiment is a self-contained and can run on both Rpi3 hardware and QEMU.
The kernel must run on cheap & modern hardware.
Showing the kernel's evolution path is important. Along the path, each version must be self-contained runnable.
We deem the following kernel functions crucial to implement:
- protection modes
- interrupt handling
- preemptive scheduling
- virtual memory
Experimenting with these features is difficult with commodity kernels due to their complexity.
Primary:
- Learning by doing: the core concepts of a modern OS kernel
- Experiencing OS engineering: hands-on programming & debugging at the hardware/software boundary
- Daring to plumb: working with baremetal hardware: CPU protection modes, registers, IO, MMU, etc.
Secondary:
- Armv8 programming. Arm is everywhere, including future Mac.
- Working with C and assembly
- Cross-platform development
Non-goals:
- Non-core or advanced functions of OS kernel, e.g. filesystem or power management, which can be learnt via experimenting with commodity OS.
- Rpi3-specific hardware details. The SoC of Rpi3 is notoriously unfriendly to kernel hackers.
- Implementation details of commodity kernels, e.g. Linux or Windows.
- Sharpen your tools! (p1 exp0)
- Helloworld from baremetal (p1 exp1)
- Exception elevated (p1 exp2)
- Heartbeats on (p1 exp3)
- Process scheduler (p1 exp4)
- A world of two lands (p1 exp5)
- Into virtual (p1 exp6)
Exp | Weights |
---|---|
00 Sharpen your tools | 10 |
01 Helloworld from baremetal | 10 |
02 Exception elevated | 10 |
03 Heartbeats on | 10 |
04a Process scheduler - cooperative | 10 |
04b Process scheduler - preemptive | 10 |
05 A world of two lands | 20 |
06 Into virtual | 20 |
The weights are relative and may not necessarily add up to 100.
Derived from the RPi OS project and its tutorials, which is modeled after the Linux kernel.