Operating Systems#

Understanding operating systems is fundamental to becoming an effective software engineer. The OS is the layer between your applications and hardware — it manages processes, memory, files, and I/O devices, providing the abstractions that all software relies on.

This learning path covers OS internals from processes and scheduling through memory management, file systems, and concurrency, culminating in how modern container technology builds directly on OS primitives.

What You’ll Learn#

SectionTopicKey Concepts
01Processes & ThreadsProcess model, states, PCB, context switching, thread models
02CPU SchedulingFCFS, SJF, Round Robin, multilevel queues, Linux CFS
03Memory ManagementPaging, TLB, page faults, replacement algorithms, thrashing
04Virtual MemoryMulti-level page tables, swap, COW, NUMA, huge pages
05File SystemsInodes, journaling, ext4/XFS/Btrfs, VFS, FUSE
06I/O SystemsInterrupts, DMA, I/O scheduling, epoll/io_uring, SSD vs HDD
07Concurrency PrimitivesMutexes, semaphores, deadlock, classic problems
08Containers from the OS PerspectiveNamespaces, cgroups, seccomp, overlay FS, runtimes

Prerequisites#

  • Programming fundamentals — comfortable reading C or pseudocode
  • Basic computer architecture — CPU, RAM, disk, bus concepts
  • Command-line proficiency — navigating a Linux/Unix terminal
  • Data structures — linked lists, queues, trees, hash tables
  • Operating System Concepts (Silberschatz, Galvin, Gagne) — the classic “Dinosaur Book”
  • Operating Systems: Three Easy Pieces (Arpaci-Dusseau) — free online, excellent explanations
  • Linux Kernel Development (Robert Love) — for Linux-specific internals
  • The Linux Programming Interface (Michael Kerrisk) — systems programming reference

How to Use This Path#

Each section builds on previous ones. Processes and threads are the foundation; scheduling decides which process runs; memory management gives each process its own address space; virtual memory extends that abstraction; file systems provide persistent storage; I/O systems connect to hardware; concurrency primitives coordinate parallel execution; and containers tie all these OS mechanisms together into modern deployment units.

Work through them in order. Each section includes diagrams, pseudocode, and real-world examples from Linux.