- Lecture 1 (January 23): Course introduction
- Lecture 2 (January 25): x86-64 page tables
- Lecture 3 (January 30): Task switching and
%gs
register
- Lecture 4 (February 1): Boot process and memory layout
- Lecture 5 (February 6): Exercises
- Lecture 6 (February 8): Task switching exercises
- Section 1 (February 8): Meltdown
- Lecture 7 (February 13): Buddy allocator testing
- Lecture 8 (February 15): Wait queues
- Lecture 9 (February 20): Debugging in real operating systems
- Lecture 10 (February 22): Virtual file system design
- Section 2 (February 22): The microkernel debate
- Lecture 11 (February 27): File system disk structures
- Lecture 12 (March 1): Lambdas, virtual functions, and reference counting
- Lecture 13 (March 6): VFS design tournament
- Lecture 14 (March 8): File system correctness and speed
- Section 3 (March 8): Kernels and programming languages
- Lecture 15 (March 20): NCQ and journal design
- Lecture 16 (March 22): Large-scale file systems and GFS
- Section 4 (March 22): Kernel and file system bugs
- Lecture 17 (March 27): Scheduling and BVT
- Lecture 18 (March 29): System call performance
- Lecture 19 (April 3): Lock design
- Section 5 (April 4): Scalability
- Lecture 20 (April 5): Scalable and read-write locks
- Lecture 21 (April 10): RCU
- Lecture 22 (April 12): System call design, file system invariants
- Lecture 23 (April 17): Networking
- Lecture 24 (April 19): Special seminar: Mothy Roscoe talk
- Section 6 (April 19): Containers
- Lecture 25 (April 24): Virtualization