A book about modern operating systems. Topics are broken down into three major conceptual pieces: Virtualization, Concurrency, and Persistence. Includes all major components of modern systems including scheduling, virtual memory management, disk subsystems and I/O, file systems, and even a short introduction to distributed systems.
Remzi Arpaci-Dusseau is the Grace Wahba professor and Associate Chair of Computer Sciences at UW-Madison. He co-leads a research group with Professor Andrea Arpaci-Dusseau. Together, they have graduated 24 Ph.D. students and won numerous best-paper awards; many of their innovations are used by commercial systems. For their work, Andrea and Remzi received the 2018 ACM-SIGOPS Weiser award for "outstanding leadership, innovation, and impact in storage and computer systems research."
Remzi has won the SACM Professor-of-the Year award six times, the Rosner "Excellent Educator" award, and the Chancellor's Distinguished Teaching Award. Andrea and Remzi's operating systems book () is downloaded millions of times yearly and used at numerous institutions worldwide.
Textbooks should be hard to read, that's what makes them useful. But making them as sterile as possible isn't helping anyone.
Arpaci-Dusseau start each chapter with a high level and lighthearted "dialogue". The casual voice works well, warming me up to the author and easing me into the topic. Digging in, the content is still rich/dense while still maintaining a hint of a human voice.
This is exactly what a textbook should be: Dense in information and approachable in voice.
قرأنا نصف الكتاب ضمن مقرر نظم التشغيل 1 ومن المتوقع إكمال نصفه الثاني في نظم 2 من أفضل الكتب التقنية التي قرأتها نظرًا لأسلوب الكاتب. السمات التي أعجبتني: - تدرج رهيب في شرح المعلومة - إيضاح المشكلة التي يحاول الكتاب حلها في بداية كل فصل - الاعتماد على إثارة التساؤل لدى القارئ - مختصر يعرض الجوانب الضرورية فقط
أتطلع حقًا لمتابعة قراءة الكتاب
تحديث يناير 2023 أجل، أنهينا النصف الثاني من الكتاب، تقريبًا ضمن مقرر نظم الحاسوب 2 تحت كود 3306 أعتقد أن الكتاب يصلح لمن يرغب بالقراءة والدراسة بشكل ذاتي عن نظم التشغيل لذات السمات التي ذكرتها أعلاه من المواد الممتعة التي تركز على الناحية النظرية في فهم جميع التفاصيل المتعلقة ببناء وتشغيل نظام حاسوب
The best book you can ever find on operating systems.It provides great overview while digging into details where ever necessary. Stuffed with humour, reading this book is like watching a YouTube video. I'll probably never get bored of this book no matter how many times I read it.
This book is a great position for introducing a reader into world of low-level, performant design. Yes, it's about operating systems, even if you aren't writing one, you will gain a lot. Especially, if you want to know how to design software to operate efficiently. When reading it, despite knowing a large part of the content, I was pleased with the narrative and the way authors introduced new concepts, like threading (mentioned around 100 page).
Nowadays, with the computation moving to the commodity area (public cloud, PaaS, FaaS) one could think that books like this are no longer needed. After spending sometime in the cloud area, I can tell that it's totally opposite. There's so much to gain from a general knowledge about designing and writing well performing code, and to apply it to the new cloudy era.
If you have read Tanenbaum and ground your way through "if parallel programming so hard.." this book wont blow you mind. But this one was such a pleasure to read. It's a textbook that doesn't feel like a textbook. The writing style is live, witty and super clear. Most of the concepts are built up from "lets try the easiest approach" and then gradually increases complexity in order to overcome most obvious challenges. I remember reading Tanenbaum and thinking "why is this so complex?". I don't think I had this question once while reading this book. The style of writing, the structure and just the way concepts are explained is so much better.
Considering all the praise about this book, I expected highly informative content in this textbook. I cannot say that this book is bad, the first parts about CPU and Memory virtualization are quite dense and contain detailed description.
But further I read the worse it was. Concurrency part is somewhat acceptable, but it is very uneven in delivering explanation. It is acceptable, but very boring in the way it reveals information. I got tired of author's puns already and it became a chore to read.
The worst is part about persistence. It tries to be everywhere and arrives nowhere. Skimming over details here and there I felt like reading some magazine and not the book. I am sorry, but this part does not look focused and finished at all, even though I have purchased the 1.00 version.
Don't get attracted by the high rating, I am not sure why it is so high. If you are looking into detailed description of hardware/software interface - look somewhere else. Maybe Hennesy & Patterson or Tanennbaum.
Beware, the hardcover edition might not satisfy your eyes. I have ordered the 1.00 version from LuLu, hardcover edition, and was immensely saddened by the quality. Text is too gray and too small. Font for the source code is too thin and unbearable to look at. Linespacing is very small. Margins on the top and bottom waste so much space.
Сложно поверить, что можно читать учебник по операционными системам и не скрипеть зубами от тяжести изложения. Не сильно теряет в глубине материала, но оставляет за скобками процесс разработки: архитектура, монолитные/микро ядра, модульность, вот это вот всё. Да кто такие эти ваши "кольца защиты" про которые я постоянно слышу, выяснить так и не удалось. Примеры практически полностью разбираются в контексте Linux, ставлю звёздочку в дневник.
Очень вкусно собраны после каждой главы ссылки на источники с пояснениями. Хочется из них собрать отдельный список на "летнее чтение" (осилит его только какой-нибудь graduate student с фуллтайм работой посвященной чтению пейперов).
Неплохой старт, после которого можно прочитать что-нибудь более подробное.
Extremely clear. Authors build up to explaining key OS concepts by establishing a strong foundation and providing lots of examples. The chapters go through a trial-and-error process of explanation that I found very helpful. For example, the text will walk through faulty designs of process schedulers and then explain why they wouldn't work. It iteratively improves on it until we reach a good design. Only gripe is that they should include more material on distributed systems.
Best nonfiction book I have ever read. Adds so much value to you as a programmer. Suitable even for those who don't plan to work with os since you gain great insight into what your computer does behind the scenes. It is a must for every IT folk out there.
Ever since computers began to enter the commercial markets, application makers had unrestricted access to the underlying hardware, which led to some unexplained behaviors. Applications needed to be custom fit for a particular hardware, and making them work across different hardware proved to be cumbersome. This created a need for a common layer that abstracts the compute power the hardware was providing and acts as a supervisor for all the applications, managing their lifecycle, restricting access, and providing them a way to store data for future use. This need led to the birth of the operating system.
The operating system, as the name suggests, refers to a bunch of software programs that take control of the underlying hardware to provide numerous functionalities to all other software. Think of it like a symbiote (OS) taking control of Eddie Brock’s body (hardware) to become Venom, thus unlocking numerous powers that wouldn’t have been possible otherwise.
Operating systems had to ensure three important things: virtualization, concurrency, and persistence to make sure all applications can run without any problems.
Virtualization: You have a peach, and you have five consumers needing a peach. You solve this problem by virtualizing five peaches and granting one to each, convincing them that they have the complete peach. This is what an operating system does with the CPU and memory for all of its applications.
The operating system has a tricky job of allocating CPUs to each process, putting processes to sleep when they’re not running on the CPU, and regaining control from the processes when needed. It achieves this by pre-empting process execution through dedicated time slices. If a rogue process tries to monopolize the CPU without honoring the time slice, the OS regains control through system calls. The operating system also virtualizes memory through a hybrid approach of segmentation and paging, chunking the physical memory into fixed-size pages while applying bounds on them. This level of indirection helps the operating system optimize physical memory consumption without causing significant internal or external fragmentation.
Concurrency: You have a peach, and you have lots of consumers needing a peach. You solve this problem by handing the peach to one consumer; after they’re done, give it to the next consumer, and so on. Virtualization guarantees the ability to run many applications on a single hardware platform. This could mean that one process runs on the CPU but is waiting for input from either a peripheral device like a keyboard or a network. Since this idle time wastes compute resources, the OS puts that process to sleep and runs another process until the first one gets the input it needs to resume. It does this at astonishing speed across many processes, making it appear as if the processes are running in parallel.
Challenges arise when processes share access to the same data and transition between states of sleep and running. Many processes sharing data could cause undefined behaviors that cannot be handled by their code. To synchronize data access, primitives like mutexes (mutual exclusion) and semaphores were created. These tools help create order from chaos and allow the operating system to prevent data corruption by different processes.
Persistence: You have a peach, and you want to store the peach to be used later. It can be done by pickling it, drying it out, or making a jam out of it for later consumption. Applications require a means to store and retrieve their data or information later. Older mechanical drives used a spinning motor and arm to access the numerous tracks available on a disk. Information was divided into two parts: the actual data and the data about the data (metadata). All information was stored in inodes (information nodes), which contained pointers to locations on the disk holding the data. There were direct pointers (containing actual data) and indirect pointers, which were inode blocks containing a mix of direct and indirect pointers. This indirection allowed for more data chunks to be stored efficiently.
Crash detection and file integrity checking posed significant challenges since memory and disk do not share the same bandwidth speeds. Disks lagged behind memory, meaning memory often contained newer data than what had been written to the disk. Integrity checks using CRC and checksums were introduced as part of data recovery mechanisms in case of corruption. While not perfect, these methods allowed for partial data recovery in most cases.
This entire review has been hidden because of spoilers.
I’ve read the parts on virtualization and concurrency entirely and solved about half of the problems in them. I’ve skimmed through some chapters in the part on persistence but skipped most chapters and all problems.
This is an excellent book. It introduced me to the big ideas in operating systems and the low-level details relevant to real-world use of these big ideas. The book is the opposite of dry. It’s playful and exciting, but it still delivers the material relevant to the subject fairly completely and thoroughly. A glowing example of what undergrad-level engineering literature should be like.
Exceptionally good book on fundamentals. It manages to convey crux of the problems and solutions without being too academic. There are ton of good references to explore the topic further. Must read!
Great stuff. Freely available online and the printed version is cheap. I think it is difficult to understate the importance of this. Textbooks should not be prohibitively expensive!
It was an excellent introduction to the OS world, and the journey through the book was full of happiness and headaches at the same time... the first two pieces were very interesting and I had a great appetite to finish them, my only take on the book is that the last piece for me was kinda all over the place but, who am I to judge... I'm only a passer after all:)
I picked up a paper copy of this as a review for a graduate-level OS course. While I had taken an undergrad course and have also studied operating systems in my free time, I wanted something to refresh my memory on all of the concepts I might need to know for the course, as well as to fill in any gaps I might have missed. I can say that this is the best text for a high-level comprehensive look at operating systems I've found. While there might be better books for specific operating systems, or ones that go deeper into the implementation details, Operating Systems: Three Easy Pieces is a very easy read that covers all the material one would need to a get a feel for how operating systems work. Compared to the dinosaur book, OSTEP doesn't waste any time getting the reader up to speed, and the text is organized in a thematic way that feels more like a narrative than simply a reference book.
I had no basis in computer science and got huge frustration when I debug some applications. I read this book to understand how applications interact under the hood. The book has 3 parts, each part provides details about 1 pillar of the operating system. Some concepts are easy to absorb and solve exercises such as process, thread, and address spaces in part I. Part II and II are a bit harder to absorb. I got stuck in the concepts of distributed systems and event-based concurrency. I think this book gives me a good base to learn higher concepts.
Great book for new to the subject matter. requires no pre-knowledge. And most importantly, It's free online put as nicely html. Best of it is you can go back any time to check each subject whenever you find unfamiliar concepts. I never really finished the whole book line by line, but did read through the major cpu memory part which personally I think is the key to have a basic understanding for any operating systems.
Absolutely a great book. I highly recommend this book for any undergraduate students. The author covered 4 essential parts of operating systems: Vitualization, Concurrency, Persistence in great detail and a little bit of Distributed systems. After reading this book, I've not only gathered knowledge of operating systems, but also taken a lot of useful tips about software development. I think it would have been even better if I had finished every homework listed after each lesson.
A Great Free Resource to Start an Operating Systems Journey Rating: 3.5/5
This book is a solid starting point—and probably the best free resource out there—for anyone beginning their journey into Operating Systems. It introduces key concepts like virtual memory, process management, and the virtual file system in a way that’s approachable for beginners.
But—and it’s a big but—this book is not for those who already have a foundational understanding of OS principles. If you're familiar with basic concepts, you'll find the level of depth here frustratingly shallow. It simply doesn't offer enough to help you master these topics.
One of the biggest issues is how unstructured the content feels. For example, you can read over 200 pages on memory management and still not know where the chapter is heading. There's no clear narrative thread, and transitions between topics are abrupt or nonexistent. Process management is discussed without properly covering system calls, interrupts, or interrupt handlers. Memory management lacks any meaningful discussion of memory regions or how they’re initialized during boot. The file systems chapters? Disjointed and superficial at best.
The book also spends too much time rehashing obsolete mechanisms used in older systems—without offering a cohesive understanding of how modern systems handle those same areas. You're left with fragments of knowledge rather than a complete picture of any system.
And let’s be honest: the constant puns and quirky jokes are exhausting. They're not funny, they’re distracting, and they dilute the value of the content. The book could easily be shorter without all the unnecessary fluff.
That said, I genuinely appreciated the list of recommended papers at the end of each chapter. Those are invaluable for readers who want to dig into the historical background and expand their knowledge further.
In summary: a good book for beginners, especially given that it’s free. But if you're serious about building deep, technical OS knowledge, you’ll need to move on to more advanced resources. For those looking to level up, I highly recommend starting with the following two books:
Очень неплохое введение в основные концепции, связанные с ОС. Все темы были для меня более или менее новыми, но проблем с пониманием излагаемого материала не возникало. Книга написана живым и увлекательным языком, скучно не становится даже при обсуждении технически довольно сложных тем. Кроме того, книга отлично структурирована: она разделена на несколько десятков коротких глав, которые хорошо читаются как подряд, так и вразнобой. Отдельно хочется отметить подход к списку литературы. Он приводится по частям, в конце каждой главы. Каждый источник сопровождается комментариями авторов, благодаря которым список ценен и в отрыве от самой книги. Выбор тем для обсуждения, на мой взгляд, несколько... спорный. Книге не удалось убедить меня, что примитивы синхронизации и особенности хранения данных в энергонезависимой памяти являются неотъемлимыми частями ОС. Из-за этого ближе к середине у меня начало возникать ощущение, что повествование несколько теряет фокус. Впрочем, я асболютно точно не эксперт в этой предметной области, могу серьезно ошибаться.
It's a really good overview of the most fundamental parts of an operating system. Starting with virtualization, which isn't about virtual machines, but about running multiple processes preemptively on one computer and emulating an exclusive access to memory for every process, the story goes to concurrency, a sufficiently complicated topic on its own, and persistence, which is "just" about hard disks, file systems, SSDs, RAID; there is even a small part about distributed systems. I really liked the distinction of mechanisms and policies. There is even event-based programming (and STM, although unnamed) with continuations in here; not FRP though, I guess that high-level stuff isn't in an OS. Overall, this is an interesting and deep enough book even if you're not building an OS; lots of useful "background" information for almost any programmer.
As someone who has both taken and taught an undergraduate Introduction to OS course, I found this to be excellent revision material and it gave me some additional knowledge deeper under the hood.
This book covers the fundamental theory behind the 3 pieces of the OS: Virtualisation, Concurrency, and Persistence, along with practical information like how various parts are implemented in Linux, and different C library functions to make system calls.
The only gripe I have is that the author has a tendency to bombard you with new terminology, which could possibly be overwhelming to a student who's unfamiliar with such jargon.
This is a great text book. 1. The chapters are structred very well. There are ton but they encapsulate to topics and make it easy to choose bite sized reading sessions. 2. It is written in very accessible language. You do need some familiarity of computers and the C language, but that is really it. 3. IT IS FREE which is amazing. You could honestly get a free undergrad course on Operating Systems by just reading this book and doing some the of the exercises.
The only con I had was I thought the humor wasn't always that funny but it wasn't bad and it does not detract from the book at all.
Extremely clear presentation of OS material. I was largely using the book as quick primer on OS rather than as a launching pad for in-depth work in systems programming, so I didn't work through most of the exercises. That being said, there was an abundance of them as well as plenty of references to further material for interested people, so there's likely as much depth in this book as you hope to take away from it. Overall, really well put-together book, with great explanations, graphics, and motivations provided throughout.