My Top 15 OS Books: From Theory and Implementation to Systems Programming
A personal guide to the most useful books for understanding operating systems
Operating systems knowledge is the bedrock of software engineering. It's what separates developers who can write code from those who truly understand how their code runs. Whether you're optimizing performance or debugging complex issues, this knowledge proves invaluable.
I routinely get requested to provide recommendations on books that I've found useful in understanding operating systems and systems programming. In this post, I will share 15 of my favorite books that I've found valuable throughout my career, along with brief remarks about why I found them useful. Some of these books are made freely available by the authors, and I will provide the links where possible.
I will categorize them into three categories:
Theory books: These books, commonly used in computer science courses, cover the theoretical underpinnings of kernel design. While they provide a solid foundation, they usually don't cover specific kernel implementations like Linux or FreeBSD, which can make them feel less practical.
Implementation books: These books focus on specific kernel implementations. Instead of covering all possible approaches to a problem (like page replacement algorithms), they explain the actual solutions implemented in real-world kernels. You learn how production systems work, though at the cost of some theoretical breadth.
Systems programming books: While very few developers work directly on kernel development, many build software that runs on top of these kernels. Whether you're writing a web server, a programming language runtime, a database system, or a distributed system, you need to understand both kernel internals and their programming interfaces to effectively utilize kernel services.
Each category serves different needs and different stages of your systems programming journey. Let's dive in!
Operating System Theory Books
This list is rather short because you usually don’t need to learn the theory multiple times. I studied operating systems in college using the Dinosaur book which was quite good and more recently I refreshed my understanding using the OSTEP book. These are the only two books I’ve ever used as far as theory is concerned.
Operating System: Three Easy Pieces (OSTEP)
This is perhaps the most popular OS book these days, and for a good reason. It breaks down the discussion of a really wide and deep topic into bite-sized chunks. Each chapter is typically less than 20 pages and written in clear, accessible language, making complex concepts digestible without sacrificing depth.
Although the book occasionally references Linux and XV6 for examples, it's not tied to these kernels. Instead, it focuses on universal concepts like how virtual memory works, what happens during a context switch, how file systems manage your data, and how concurrency is handled at the OS level. These concepts remain relevant regardless of which operating system you're working with.
The book is freely available online: https://pages.cs.wisc.edu/~remzi/OSTEP/
Operating System Concepts (AKA The Dinosaur Book)
This is probably the most widely used operating system book in classrooms, my OS course used it as well. I read it 15 years back, so my memory of it is a bit fuzzy. While I initially found its theoretical approach frustrating - I wanted to understand how a real kernel boots and works - I've come to appreciate its value over the years.
The book excels at explaining core OS concepts through abstract models. For example, it walks you through different process synchronization problems like the dining philosophers and the producer-consumer problem, which might seem academic at first but become extremely relevant when you're debugging deadlocks in a real-world application. Its coverage of memory management helps you understand why your program crashes with "segmentation fault" or why adding more RAM doesn't always improve performance.
The theoretical knowledge I gained from it has proven invaluable throughout my career. When you're troubleshooting why your distributed system is experiencing race conditions, or why your high-performance application is page faulting, these fundamental concepts become your debugging toolkit.
Both this and the OSTEP book serve as excellent theory references, but OSTEP has the advantage of being freely available and more digestible. The Dinosaur book remains relevant if you want a more formal, comprehensive treatment of OS concepts.
Implementation Oriented Books
While you don’t need too many books on the theory of operating systems, same cannot be said about the implementation of real-world kernels. Every kernel makes different design choices, and has different characteristics, such as performance vs portability vs security. And even at this level you can have two kinds of books:
Books which discuss the design of the kernel and how the different pieces operate together
Books which are more low level and take you through line by line explanation of a given kernel implementation
I will cover both sub-categories here. My remarks should make it clear what kind of book I’m talking about.