Books on operating systems
The next layer a system programmer encounters on top of a HW platform with CPU and a particular instruction set is firmware (BIOS, UEFI) and/or operating system. There are many OSes around; even more of them were left in the past. Moreover, it is sometimes hard to define what is an OS, and where its boundaries lie. With raise of portable devices we witnessed a surge of interest in mobile operating systems, not just desktops/servers, deemed as “traditional” targets.
I was curios to compare how similar things are done in different OSes. I’ve collected a list of books that describe internals of most popular operating environments. For general questions on operating system design the reader is welcome to look for Andrew Tanenbaum’s book.
When comparing books about operating systems, one can clearly see how their “nature” affects information available about a particular specimen. E.g., a book on Linux goes down to many details of algorithms, because the source code is freely available. Books on Microsoft Windows tend to speak about interfaces available to programmers, but usually not how things are inside, because sources are not readily there. Apple’s Mac OS is somewhere in between, as some of its sources have been made available as XNU/Darwin, but a great deal of the rest is closed. The same statement applies to Google’s Android. Speaking of iOS, one can not practically say anything about its internals unless word “jailbreak” is spoken every now and then.
M. Russinovich , D. Solomon , A. Ionescu. Windows Internals, 6th Edition, 2012. A book with a long history from great Windows tinkerers. The latest edition grew so huge that it got split into two.
Understanding the Linux Kernel, 3rd Edition, by Daniel P. Bovet, Marco Cesati, 2005. The book touches every minute detail of scheduling, file system, process creation etc. Sometime it is too verbose, given that sources are available anyways. This becomes especially evident when one understands that Linux gets continuously rewritten, and a book of 2005 cannot be that accurate, as everything it talks about might has been changed shortly after it was published. Actually, it is a thankless task to write a [paper] book on a technology — it’s like trying to catch a full-speeded train.
Mac OS X and iOS
Mac OS X Internals - A Systems Approach by Amit Singh, 2006. The cornerstone of knowledge about spaghetti that Mac OS X is: NEXTStep, BSD, Mach. Unfortunately, it is getting old. For instance, the book mostly talks about Mac OS for PowerPC hosts. Fortunately, we now have…
Mac OS X and iOS Internals, To the Apple’s Core by Jonathan Levin, 2013. This book appeals to me a lot as it clearly states its goal: to be to Apple OSes what “Understanding the Linux Kernel” is for Linux OS and “Windows Internals” to Windows OS, that is — a reference for internals. The author acknowledges strong need for such books and tries to fill the niche left by Apple, quite successfully to my taste.
Also, having comparison of internals for both desktop Mac OS X and mobile iOS in one place by one author also creates a good opportunity for deeper understanding of trends in system software.
Embedded Android by Karim Yaghmour, 2013. This book is a bit different from others, as it talks about a specific area of deployment for a mobile-first OS — inside embedded environments. This fact actually helps achieving the goal of uncovering internals, as knowledge about close-to-metal details is what needed for an architecture port.
The Design and Implementation of the FreeBSD Operating System (link is broken, so removed) by Marshall Kirk McKusick, George V. Neville-Neil, 2004. This was the first book about OS internals that I’ve ever read. Unfortunately, not the best one. First of all, I bought a Russian translation, and it was mediocre. Sometimes I felt like I was reading machine-translated nonsense. Sometimes I remembered that I had already seen this paragraph somewhere, and it turned out to be a (badly translated) copy of a MAN-page of FreeBSD. Second, the same thing about the Linux book applies to the FreeBSD book: as the sources are available, there is a temptation to start describing them. And, of course, 2004 was a decade ago.