Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-05-os-networking/books. Use this page as a source map, not as an instruction to read everything.

Source Stack

BookRoleHow to use it in this module
Operating Systems: Three Easy Pieces (OSTEP), persistence chaptersPrimary teaching sourceDefault escalation for every FS concept; the clearest operational explanations of inodes, layout, journaling, LFS, and disks
Operating System Concepts (Silberschatz)Selective supportUse for the I/O subsystem (drivers, DMA), VFS framing, and consistency-checking perspective
Unix Network Programming (Stevens)Selective supportUse for select, poll, and advanced polling; also the canonical I/O models framing
kernel.org documentationCurrent Linux truthUse for ext4, block layer, io_uring, and anything the textbooks predate
LWN.netEvolution and nuanceUse for fsync failure modes, COW vs fsync interactions, and io_uring history

Resource Map by Cluster

Cluster 1: The File Abstraction

NeedBest local chunkWhy
what a file and directory areOSTEP: Files and directoriesOperational introduction to the abstraction
reading and writing filesOSTEP: Reading and writing filesHow syscalls touch the inode
non-sequential I/OOSTEP: Reading and writing but not sequentiallylseek and offsets
directory structureOSTEP: Directory organizationDirectory as a special kind of file
making directoriesOSTEP: Making directoriesmkdir trace
hard linksOSTEP: Hard linksLink count semantics
symbolic linksOSTEP: Symbolic linksPath-based indirection
the inode data structureOSTEP: Aside - the inode data structureLayout and pointer scheme
access pathsOSTEP: Access paths - reading and writingEnd-to-end trace through kernel tables
VFS framingOS Concepts: Virtual file systemsHow Linux unifies many FS types

Cluster 2: On-Disk Layout and Structure

NeedBest local chunkWhy
disk interfaceOSTEP: The interfaceThe block device contract
disk modelOSTEP: A simple disk drivePlatters, sectors, LBAs
I/O timing mathOSTEP: I/O time - doing the mathQuantitative model
disk schedulingOSTEP: Disk schedulingSSTF, C-SCAN, and the elevator
FS design philosophyOSTEP: The way to thinkFraming for layout decisions
overall layoutOSTEP: Overall organizationCanonical block arrangement
FFS - why block groupsOSTEP: The problem - poor performanceMotivation for locality
cylinder groupsOSTEP: Organizing structure - the cylinder groupGrouping related data
allocation policyOSTEP: Policies - how to allocate files and directoriesWhere new data goes
locality measurementOSTEP: Measuring file localityReal measurements
large filesOSTEP: The large file exceptionWhy large files break naive locality
LFS designOSTEP: Writing to disk sequentiallyThe sequential-only idea
LFS bufferingOSTEP: Writing sequentially and effectivelySegment buffering
LFS indirectionOSTEP: Solution through indirection - the inode mapFinding latest inodes
LFS garbage collectionOSTEP: A new problem - garbage collectionCost of log-structured
ext4 format referenceext4 documentation (kernel.org)Authoritative on-disk layout

Cluster 3: Crash Consistency

NeedBest local chunkWhy
worked crash exampleOSTEP: A detailed exampleThe canonical four-case analysis
fsckOSTEP: Solution 1 - the file system checkerPre-journal recovery
data journalingOSTEP: Data journalingCommit ordering and transaction model
forcing writesOSTEP: Aside - forcing writes to diskBarriers and FLUSH
log optimizationOSTEP: Aside - optimizing log writesReducing journal cost
log optimization (part 2)OSTEP: Optimizing log writes - part 2Continued
other approachesOSTEP: Solution 3 - other approachesSoft updates, optimistic crash consistency
COW framingOSTEP: Copy-on-write mappingsCOW pattern in general
ZFSOSTEP: ZFSCOW FS in production
journaling FS appendixOSTEP: Journaling file systemCompact summary
consistency checkingOS Concepts: Consistency checkingFSCK-style perspective
disk failure modesOSTEP: Disk failure modesBeyond power loss
checksumsOSTEP: Detecting corruption - the checksumSilent corruption
misdirected writesOSTEP: Misdirected writesWhy just a checksum isn't enough

Cluster 4: Caching and Performance

NeedBest local chunkWhy
caching and bufferingOSTEP: Caching and bufferingPage and buffer cache
cache managementOSTEP: Cache management (paging)Replacement policies that carry over
forcing writesOSTEP: Forcing writes to diskfsync barrier discussion
sequentialityOSTEP: I/O time - doing the mathQuantitative gap
measuring localityOSTEP: Measuring file localityReal workload data
Linux performanceBrendan Gregg: Linux performance toolsCurrent practical reference
fsync failuresLWN: PostgreSQL's fsync() surpriseReal-world gotcha
fsync error handlingLWN: Improved fsync error handlingEvolution of the semantics

Cluster 5: I/O Models and the Syscall Path

NeedBest local chunkWhy
I/O models framingUNP: I/O modelsCanonical five-model taxonomy
selectUNP: select function (part 1)Classical multiplexing
select continuedUNP: select (part 2)Usage details
select workedUNP: select (part 3)Echo server example
pselectUNP: pselect functionSignal-safe variant
advanced pollingUNP: Advanced polling (part 1)poll and extensions
advanced polling 2UNP: Advanced polling (part 2)Continued
device architectureOSTEP: System architectureHow devices attach
device protocolOSTEP: The canonical protocolCommand/status/interrupt
DMAOSTEP: More efficient data movement with DMAWhy CPU is not the bottleneck
driversOSTEP: Fitting into the OS - the device driverWhere drivers sit
IDE case studyOSTEP: Case study - a simple IDE disk driverWorked simple driver
epoll man pageepoll(7) man pageAuthoritative semantics
io_uring primerLord of the io_uring (unixism.net)Best hands-on intro
io_uring paperJens Axboe: Efficient IO with io_uring (PDF)Canonical design document
io_uring evolutionLWN: rapid growth of io_uringHistorical arc

External Resources (Read-If-Curious)

Only use these if you want a second exposition or a supplementary problem source. The module is completable from the local chunks alone.

Use Rules

  • If you are stuck on any FS layout or crash scenario, go to OSTEP first. It is the best operational reference for persistence.
  • If you need the I/O models taxonomy or socket-style readiness patterns, go to UNP.
  • If you need current Linux specifics (ext4 format, io_uring, fsync corner cases), go to kernel.org and LWN.
  • Open one chunk for one concept gap; do not wander through a whole appendix sequence.
  • If rereading does not fix the problem, stop and draw the on-disk structures in your own hand before reading more.