Vol 3: Computer Systems
You write x + 1; the machine still has to represent the values, execute instructions, and access memory. This volume follows that work into processes, file systems, and virtualization, asking which guarantees come from the language, operating system, or hardware. When a program fails intermittently, “it works on my machine” is a useful clue. It needs more evidence before it becomes a conclusion.
Prerequisites
- Be comfortable with functions, loops, and arrays. The C examples also use pointers and object lifetimes; revisit Volume 1 as needed.
- Know how to compile and run programs in a terminal and read their errors. If those steps are unfamiliar, start with the terminal and debugging labs in Volume 0.
Coverage
The first six chapters cover data representation, processors, and the memory hierarchy. Chapters 7–14 examine how operating systems manage programs and resources. The final four connect these layers through pipelines, the C memory model, assembly, and performance measurement.
Chapter 1
Chapter 2
Chapter 3
Chapter 4
Chapter 5
Chapter 6
Chapter 7
Chapter 8
Chapter 9
Chapter 10
Chapter 11
Chapter 12
Chapter 13
- 13.1 Paths, inodes, and data blocks
- 13.2 File Systems and Crash Recovery
- 13.3 Storage Redundancy, Checking, and Backup
Chapter 14
- 14.1 How Virtual Machines Share a Host
- 14.2 Namespaces, cgroups, and Container Isolation
- 14.3 Running a Guest Instruction with KVM
Chapter 15
Chapter 16
Chapter 17
Chapter 18
Outcomes
- Identify where integer overflow, floating-point error, cache misses, and page faults occur.
- Trace resources shared by processes and threads, and analyze synchronization, deadlock, and file persistence problems.
- Read short C and assembly examples, then check a suspected bottleneck with timing, performance counters, or system observations.
How to use this map
For a first pass, read in order and find a small experiment for each mechanism. When investigating a problem, jump to the relevant chapters: 5, 6, and 16 for memory; 9, 11, and 12 for stuck threads; or 18 for performance measurement. Check the platform and compiler options before each experiment. A different result on another machine can itself be a clue.