The book provides an introduction to architecture, concepts and algorithms of the Linux kernel. The guiding principle is to keep balance between the description of concepts and the corresponding in-kernel implementation. We achieve this by discussing the relevant data structures and the algorithmic code, but also keep a special focus on connection and interplay of all parts in the big picture. The huge size of the kernel sources and the large number of connections between the numerous subsystems require providing clear guidance to the reader. The book is a translation sponsored by Hewlett-Packard, and has been updated to kernel version 2.6.78, a recent release in the stable series. The chapters are conceptually divided into three parts: An overview summarizes relevant structures and functions exported by the kernel to userland, especially if they tend to be unknown to the average programmer (for instance memory mappings, how system call tracing is implemented, etc.). A short, informal treatment of theoretical and conceptual aspects helps to put the problems into context within the Linux kernel as well as within different Unix derivatives and other operating systems. A description of the data structures employed in the particular subsystem follows the introduction. Special emphasis is placed on the interconnection between the structures. This is usually not directly visible from the definition alone, but very important for a deeper understanding of the kernel. A thorough analysis of the algorithms which manipulate the data structures and interact with userland follows. Code flow diagrams are extensively employed to visualize the program logic and code paths in a clear and concise manner the book contains more than 230 figures. To keep close contact with the sources, the most important parts are discussed line by line. Great care is taken to ensure that code doesnt take too much space, because we dont simply want to be a listing of the Linux source code as some other books are. One of the foremost concerns is to reduce the vast amount of information contained in the kernel sources and to split the comprehensive material into easily digestible pieces. Connections between different subsystems are illuminated, to assist the reader in gaining all skills necessary to understand the sources on his or her own.