Reference and Selective Reading
You do not need to read the source books front-to-back for this module. Use the concept pages and practice pages first. Open these local chunks only when you need alternate exposition, more worked examples, or a deeper exercise lane.
Source Roles
| Source | Role | Why it is here |
|---|---|---|
| Operating Systems: Three Easy Pieces (OSTEP), persistence chapters | Primary teaching source | Clearest operational presentation of inodes, layout, journaling, LFS, ZFS, and disks |
| Operating System Concepts (Silberschatz) | Formal support | Stronger coverage of the I/O subsystem (drivers, DMA, scheduling) and VFS framing |
| Unix Network Programming (Stevens) | I/O models support | Canonical treatment of blocking/non-blocking/select/poll and their worked examples |
| kernel.org documentation | Current Linux truth | ext4 and block layer specifics, io_uring behavior |
| LWN.net | Evolution and nuance | fsync corner cases, COW-vs-fsync tension, io_uring history |
Read Only If Stuck
Cluster 1: The File Abstraction
- OSTEP: Files and directories
- OSTEP: Reading and writing files
- OSTEP: Reading and writing but not sequentially
- OSTEP: Making directories
- OSTEP: Hard links
- OSTEP: Symbolic links
- OSTEP: Making and mounting a file system
- OSTEP: Summary of file and directory API
- OSTEP: Aside - the inode data structure
- OSTEP: Directory organization
- OSTEP: Access paths - reading and writing
- OSTEP: Reads don't access allocation structures
- OS Concepts: File operations
- OS Concepts: File types
- OS Concepts: Two-level directory
- OS Concepts: Tree-structured directories
- OS Concepts: Acyclic-graph directories
- OS Concepts: Types of access
- OS Concepts: Virtual file systems
Cluster 2: On-Disk Layout and Structure
- OSTEP: System architecture
- OSTEP: The interface
- OSTEP: A simple disk drive
- OSTEP: I/O time - doing the math
- OSTEP: Computing the average seek
- OSTEP: Disk scheduling
- OSTEP: Summary of the disk
- OSTEP: RAID interface and internals
- OSTEP: RAID consistent-update problem
- OSTEP: The way to think
- OSTEP: Overall organization
- OSTEP: A five-year study of FS metadata
- OSTEP: Poor performance (FFS motivation)
- OSTEP: Cylinder groups
- OSTEP: Allocation policies
- OSTEP: Measuring file locality
- OSTEP: Large file exception
- OSTEP: FFS summary
- OSTEP: LFS - writing sequentially
- OSTEP: LFS - sequentially and effectively
- OSTEP: LFS - inode map
- OSTEP: LFS - garbage collection
- OSTEP: LFS summary
- OS Concepts: File systems
- OS Concepts: FS overview
- OS Concepts: Contiguous allocation
- OS Concepts: Linked allocation
- OS Concepts: Indexed allocation
Cluster 3: Crash Consistency
- OSTEP: A detailed example (crash consistency)
- OSTEP: fsck
- OSTEP: Data journaling
- OSTEP: Aside - forcing writes to disk
- OSTEP: Optimizing log writes
- OSTEP: Optimizing log writes (part 2)
- OSTEP: Other approaches to crash consistency
- OSTEP: ZFS appendix
- OSTEP: Copy-on-write mappings
- OSTEP: Journaling file system appendix
- OSTEP: Disk failure modes
- OSTEP: Detecting corruption - the checksum
- OSTEP: Misdirected writes
- OSTEP: Data integrity summary
- OS Concepts: Consistency checking
- OS Concepts: Linux ext3
Cluster 4: Caching and Performance
- OSTEP: Caching and buffering
- OSTEP: Cache management (paging)
- OSTEP: Aside - forcing writes to disk
- OSTEP: I/O time math
- OSTEP: Measuring file locality
- OSTEP: Large file exception
- OSTEP: LFS writing sequentially
Cluster 5: I/O Models and the Syscall Path
- UNP: I/O models
- UNP: select function (part 1)
- UNP: select function (part 2)
- UNP: select function (part 3)
- UNP: pselect function
- UNP: Advanced polling (part 1)
- UNP: Advanced polling (part 2)
- UNP: Nonblocking reads and writes
- UNP: Nonblocking connect
- UNP: Nonblocking accept
- OSTEP: System architecture
- OSTEP: Canonical protocol
- OSTEP: DMA
- OSTEP: Device driver
- OSTEP: IDE driver case study
- OS Concepts: Polling
- OS Concepts: DMA
- OS Concepts: I/O scheduling
- OS Concepts: Transforming I/O to hardware
Optional Deep Dive
- OSTEP: Flash-based SSDs - FTL intro - internals of flash storage.
- OSTEP: Log-structured FTL - LFS concepts applied inside SSDs.
- OSTEP: Wear leveling - why SSDs spread writes around.
- OSTEP: Alleviating SSD performance degradation - the GC problem in flash.
- OSTEP: NFS / distributed FS material - groundwork for networked FSes.
- ext4 design documentation (kernel.org) - authoritative ext4 reference.
- OpenZFS developer docs - ZFS internals.
- Btrfs documentation - Btrfs on-disk format.
- Jens Axboe: Efficient IO with io_uring - canonical design paper.
- Lord of the io_uring - hands-on
io_uringreference. - LWN: The rapid growth of io_uring - evolution narrative.
- LWN: PostgreSQL's fsync surprise - historic fsync gotcha.
- LWN: Improved fsync error handling - error propagation semantics.
- LWN: COW filesystems vs fsync - subtleties on Btrfs / ZFS.
- Brendan Gregg: Linux performance tools - diagnostic catalog.
- Brendan Gregg: Linux disk latency - anatomy of storage latency.
- Dan Kegel: The C10K problem - why
epollexists.
Concept-to-Source Map
| Primary concept | Best source if stuck | Why this source |
|---|---|---|
| What a file is (inode, name, data) | OSTEP: Files and directories | Operational framing with all three parts |
| Directories as files | OSTEP: Directory organization | Directory-as-data view |
| File descriptors and open-file tables | OSTEP: Access paths | End-to-end through the three tables |
| Disk block interface | OSTEP: The interface | Clean block-device contract |
| FS layout | OSTEP: Overall organization | Canonical ext-style layout |
| FAT vs ext vs LFS | OSTEP: LFS - writing sequentially | Clearest contrast with in-place FS |
| Crash consistency problem | OSTEP: A detailed example | The canonical enumeration |
| Journaling | OSTEP: Data journaling | WAL and commit-block discipline |
| Copy-on-write | OSTEP: ZFS appendix | COW FS in production |
| Page cache | OSTEP: Caching and buffering | The cache-above-the-FS model |
fsync and barriers | OSTEP: Forcing writes to disk | Barriers and FLUSH ordering |
| Sequential vs random I/O | OSTEP: I/O time math | Quantitative model |
select / poll / epoll | UNP: I/O models | Best taxonomy |
aio / io_uring | Lord of the io_uring (unixism.net) | Best hands-on intro |
| Device I/O and DMA | OSTEP: DMA | Why CPU is not the bottleneck |