the kernel, but required to understand what the kernel does, is encountered in this book, I will brieﬂy introduce you to it. To gain a more thorough understanding, however, consult the books on computing fundamentalsthat I recommend.Naturally, thereis a large selection of texts,but some booksthat I found particularly insightful and illuminating include C Programming Language, by Brian W. Kernighan and Denis M. Ritchie [KR88]; Modern Operating Systems, by Andrew S. Tanenbaum [Tan07] on the basics of operatingsystemsingeneral;OperatingSystems:DesignandImplementation,byAndrewS.Tanenbaumand Albert S. Woodhull [TW06]onUnix(Minix) inparticular; Advanced Programming in theUnix Environment, by W. Richard Stevens and Stephen A. Rago [SR05] on userspace programming; and the two volumes Computer Architecture and Computer Organization and Design, on the foundations of computer architecture by John L. Hennessy and David A. Patterson [HP06, PH07]. All have established themselves as classics in the literature.
Additionally, Appendix C contains some information about extensions of the GNU C compiler that are used by the kernel, but do not necessarily ﬁnd widespread use in general programming.
When the ﬁrst edition of this book was written, a schedule for kernel releases was more or less nonexistent. This has changed drastically during the development of kernel 2.6, and as I discuss in Appendix F, kernel developers have become pretty good at issuing new releases at periodic, predictable intervals. I have focused on kernel 2.6.24, but have also included some references to 2.6.25 and 2.6.26, which were released after this bookwas written but before all technical publishing steps had been completed. Since a number of comprehensive changes to the whole kernel have been merged into 2.6.24, picking this release as the target seems a good choice. While a detail here or there will have changed in more recent kernel versions as compared to the code discussed in this book, the big picture will remain the same for quite some time.