See below for the tentative class schedule!
CPUs: Pipelines, virtual memory, and interrupts
- Lecture 1 (January 26): Course introduction and overview of processor architecture
- Lecture 3 (February 2): Multitasking and preemption
Synchronization: Ensuring correctness on single-core and multi-core machines
- Section 1 (Week of February 9): Kernel extensions
- Lecture 5 (February 9): Multithreading and synchronization
- Lecture 6 (February 11): Interrupts, concurrency, and synchronization
- Andi Kleen's discussion of how Linux was changed to work on multi-core machines: Read up to and including Section 6 ("History of Linux kernel scalability"). This document was written in 2009, but it provides a very readable discussion of the benefits and challenges of writing concurrent software in general (and concurrent OSes in particular).
- Chapter 7 ("Locking") in the xv6 textbook: Read up to and including Section 7.1 ("Races"), and read Sections 7.3 ("Code: Using locks"), 7.4 ("Deadlock and lock ordering"), and 7.8 ("Real world"). xv6 is MIT's teaching OS; xv6 has a different codebase than Chickadee, but the basic ideas are all the same!
- NO CLASS: PRESIDENTS DAY (February 16)
- MIDTERM 1: IN CLASS (February 18)
- Section 2 (Week of February 23): The microkernel debate
- Lecture 7 (February 23): Wait queues
- ops-class.org's discussion of synchronization: These lecture notes provide a high-level overview of various synchronization topics like critical sections, locks, and condition variables. If you want to understand Chickadee-style wait queues, you should first understand classic condition variables.
- Chickadee's documentation on wait queues: In pset2, you'll need to write the code which implements the Chickadee wait queue interface!
Interacting with hardware devices: Storage devices, file systems, DMA, memory-mapped IO
- Lecture 8 (February 25): Swapping and memory maps
- ops-class.org's discussion of swapping: Note that ops-class.org's assignments use the teaching operating system OS/161, which was created at Harvard and was used in the older version of the Harvard class that is now called CS 1610! OS/161 runs on an emulated MIPS processor that uses a software-managed TLB: in other words, when a TLB miss happens, the OS decides how the TLB should be updated. In contrast, Chickadee runs on x86-64 chips that use hardware-managed TLBs: when a TLB miss occurs, the processor automatically walks the page table to try to locate the relevant TLB entry.
- "Reconsidering swapping" by Jonathan Corbet: An older but still relevant article which discusses the difference between anonymous pages (which hold dynamic run-time data like stack pages) and file-backed memory pages (like chunks of executable code that are backed by equivalent on-disk blocks in a program's executable binary). A nice follow-up read is Chris Down's discussion of swapping.
- Lecture 9 (March 2): VFS
- Lecture 10 (March 4): Storage devices and data layout
- Section 3 (Week of March 9): Optimizing context switches
- Lecture 11 (March 9): Journaling
- Lecture 12 (March 11): Device interactions
- NO CLASS: SPRING BREAK (March 16)
- NO CLASS: SPRING BREAK (March 18)
- Section 4 (Week of March 23): TBD
- Lecture 13 (March 23): Log-structured file systems
- Lecture 14 (March 25): Synchronization and memory ordering
Security, Resource Isolation, and Advanced Systems Programming
- Lecture 15 (March 30): DAC, MAC, and iOS
- Lecture 16 (April 1): Writing kernels in high-level languages
- Section 5 (Week of April 6): TBD
- Lecture 17 (April 6): Scheduling
- NO CLASS: HACKING DAY (April 8)
- Lecture 18 (April 13): Virtualization
- Lecture 19 (April 15): Networking
- Lecture 20 (April 20): EthiCS
- Lecture 21 (April 22): GPUs
- Lecture 22 (April 27): Security
- MIDTERM 2: IN CLASS (April 29)