Interactive edition
Operating Systems: Three Easy Pieces
An interactive study companion to the book by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau (Arpaci-Dusseau Books, Version 1.00, August 2018, ostep.org). Every chapter is rebuilt as labeled diagrams, step-through animations, live simulators, and quizzes β the same ideas, made visual.
New here? Start at the top and read straight through, or jump to any chapter below. Use β / β to move between sections; the sidebar tracks what you've read.
Introduction
What an operating system is, and the three problems it exists to solve β a warm-up dialogue, the big picture, and a first look at the process, memory, and persistence abstractions.
Part I β Virtualization
Turning one CPU into many, and one physical memory into many private address spaces β scheduling policies, address translation, segmentation, paging, the TLB, and swapping.
- 3 A Dialogue on Virtualization π¬ pp. 23β24
- 4 The Abstraction: The Process pp. 25β36
- 5 Interlude: Process API pp. 37β48
- 6 Mechanism: Limited Direct Execution pp. 49β64
- 7 Scheduling: Introduction pp. 65β76
- 8 Scheduling: The Multi-Level Feedback Queue pp. 77β88
- 9 Scheduling: Proportional Share pp. 89β102
- 10 Multiprocessor Scheduling (Advanced) pp. 103β116
- 11 Summary Dialogue on CPU Virtualization π¬ pp. 117β118
- 12 A Dialogue on Memory Virtualization π¬ pp. 119β120
- 13 The Abstraction: Address Spaces pp. 121β130
- 14 Interlude: Memory API pp. 131β140
- 15 Mechanism: Address Translation pp. 141β154
- 16 Segmentation pp. 155β166
- 17 Free-Space Management pp. 167β184
- 18 Paging: Introduction pp. 185β198
- 19 Paging: Faster Translations (TLBs) pp. 199β214
- 20 Paging: Smaller Tables pp. 215β230
- 21 Beyond Physical Memory: Mechanisms pp. 231β242
- 22 Beyond Physical Memory: Policies pp. 243β260
- 23 Complete Virtual Memory Systems pp. 261β278
- 24 Summary Dialogue on Memory Virtualization π¬ pp. 279β284
Part II β Concurrency
Threads that share memory without corrupting it β locks built from hardware atomics, condition variables, semaphores, and the deadlocks and races that lurk between them.
- 25 A Dialogue on Concurrency π¬ pp. 285β286
- 26 Concurrency: An Introduction pp. 287β302
- 27 Interlude: Thread API pp. 303β314
- 28 Locks pp. 315β336
- 29 Lock-based Concurrent Data Structures pp. 337β350
- 30 Condition Variables pp. 351β366
- 31 Semaphores pp. 367β384
- 32 Common Concurrency Problems pp. 385β400
- 33 Event-based Concurrency (Advanced) pp. 401β412
- 34 Summary Dialogue on Concurrency π¬ pp. 413β416
Part III β Persistence
Making data survive crashes, failing disks, and lying devices β I/O and disks, RAID, file systems, journaling, log-structured and flash storage, data integrity, and distributed file systems.
- 35 A Dialogue on Persistence π¬ pp. 417β418
- 36 I/O Devices pp. 419β432
- 37 Hard Disk Drives pp. 433β448
- 38 Redundant Arrays of Inexpensive Disks (RAIDs) pp. 449β466
- 39 Interlude: Files and Directories pp. 467β492
- 40 File System Implementation pp. 493β510
- 41 Locality and The Fast File System pp. 511β524
- 42 Crash Consistency: FSCK and Journaling pp. 525β546
- 43 Log-structured File Systems pp. 547β562
- 44 Flash-based SSDs pp. 563β586
- 45 Data Integrity and Protection pp. 587β600
- 46 Summary Dialogue on Persistence π¬ pp. 601β602
- 47 A Dialogue on Distribution π¬ pp. 603β604
- 48 Distributed Systems pp. 605β620
- 49 Sunβs Network File System (NFS) pp. 621β638
- 50 The Andrew File System (AFS) pp. 639β652
- 51 Summary Dialogue on Distribution π¬ pp. 653β655