This is an online course on operating systems design, one of the important courses that lay the foundation for computer science and engineering.
Episode 1: Introduction
Episode 2, Part 1: OS: a bird’s-eye view (Part 1)
Source code from the live demo: intro-code.zip
Required reading after class: Chapter 2: Introduction to Operating Systems
Episode 2, Part 2: OS: a bird’s-eye view (Part 2)
Required reading after class: Chapter 6: (Mechanism: Limited Direct Execution) 6.1, 6.2, 6.3 (before “Saving and Restoring Context”)
Episode 3: Processes
Required reading after class: Chapter 4 (The Abstraction: The Process), Chapter 5 (Interlude: Process API)
Source code from the live demo about the process API: process-code.zip
Episode 4: Threads: An Instant Primer
Required reading after class: Chapter 26 (Concurrency: An Introduction): 26.3, 26.4, 26.5, 26.6, 26.7
Episode 5: Race Conditions
Required reading after class: Chapter 28 (Locks): 28.1 – 28.8, 28.13 – 28.14
Episode 6: Semaphores: A First Cut
April 27 2022
Required reading after class: Chapter 31: “Semaphores”, 31.1-31.4, 31.7
Episode 7: Threads and Context Switching in BLITZ
“The Thread Scheduler and Concurrency Control Primitives,” pages 1-31 on the Thread Scheduler; Lab 2 source code: Synch.c
, Synch.h
, Thread.c
, Thread.h
, Runtime.s
, Switch.s
Episode 8: Monitors and Condition Variables
Required reading after class: Chapter 30 (Condition Variables)
Episode 9: The Dining Philosophers
Required reading after class: Chapter 31.6 (The Dining Philosophers)
Episode 10: The Sleeping Barber
Episode 11: Threads: A Deep Dive
Required reading after class: Chapter 26.1 and 26.2 (Concurrency: An Introduction)
Episode 12: Context Switching: A Deep Dive
Episode 13: Scheduling Policies: Introduction
Required reading after class: Chapter 7 (Scheduling: Introduction)
Episode 14: MLFQ Scheduling Download MLFQ Scheduling
Required reading after class: Chapter 8 (Scheduling: MLFQ), the Linux O(1) CPU Scheduler
Episode 15: Proportional Share Scheduling
Episode 16: Multiprocessor Scheduling
Required reading after class: Chapter 9 (Lottery Scheduling), Chapter 10 (Multiprocessor Scheduling)
Episode 17: Virtualizing Memory: Introduction
Required reading after class: Chapter 13 (The Abstraction: Address Spaces), Chapter 15 (Mechanism: Address Translation)
Episode 18: Segmentation
Required reading after class: Chapter 16 (Segmentation)
Episode 19: Free Space Management
Required reading after class: Chapter 17 (Free Space Management)
Episode 20: Paging: Introduction
Required reading after class: Chapter 18 (Paging: Introduction)
Episode 21: Paging: Smaller Tables
Required reading after class: Chapter 20 (Paging: Smaller Tables)
Episode 22: Paging: Faster Translations
Required reading after class: Chapter 19 (Paging: Faster Translations)
Episode 23: Beyond Physical Memory
Required reading after class: Chapter 21 (Beyond Physical Memory: Mechanisms), Chapter 23 (Complete Virtual Memory Systems)
Episode 24: Page Replacement
Required reading after class: Chapter 22 (Beyond Physical Memory: Policies)
Episode 25: File System Implementation
Required reading after class: Chapter 37.1-37.3 (Hard Disk Drives), Chapter 39 (Files and Directories), 40 (File System Implementation)
Episode 26: Journaling File Systems
Required reading after class: Chapter 42 (FSCK and Journaling)
Episode 27: Input/Output Devices
Required reading after class: Chapter 36.1 – 36.7 (I/O Devices)
Episode 28: Virtual Machine Monitors
Required reading after class: Appendix B (Virtual Machine Monitors)
Episode 29: Security: An Introduction
Episode 30: Systems Security