| | Copyright |
| | Prentice Hall: Open Source Software Development Series |
| | Foreword |
| | Acknowledgments |
| | About the Authors |
| | Preface |
| | | Intended Audience |
| | | Organization of Material |
| | | Our Approach |
| | | Conventions |
| | Chapter 1. Overview |
| | | Section 1.1. History of UNIX |
| | | Section 1.2. Standards and Common Interfaces |
| | | Section 1.3. Free Software and Open Source |
| | | Section 1.4. A Quick Survey of Linux Distributions |
| | | Section 1.5. Kernel Release Information |
| | | Section 1.6. Linux on Power |
| | | Section 1.7. What Is an Operating System? |
| | | Section 1.8. Kernel Organization |
| | | Section 1.9. Overview of the Linux Kernel |
| | | Section 1.10. Portability and Architecture Dependence |
| | | Summary |
| | | Exercises |
| | Chapter 2. Exploration Toolkit |
| | | Section 2.1. Common Kernel Datatypes |
| | | Section 2.2. Assembly |
| | | Section 2.3. Assembly Language Example |
| | | Section 2.4. Inline Assembly |
| | | Section 2.5. Quirky C Language Usage |
| | | Section 2.6. A Quick Tour of Kernel Exploration Tools |
| | | Section 2.7. Kernel Speak: Listening to Kernel Messages |
| | | Section 2.8. Miscellaneous Quirks |
| | | Summary |
| | | Project: Hellomod |
| | | Exercises |
| | Chapter 3. Processes: The Principal Model of Execution |
| | | Section 3.1. Introducing Our Program |
| | | Section 3.2. Process Descriptor |
| | | Section 3.3. Process Creation: fork(), vfork(), and clone() System Calls |
| | | Section 3.4. Process Lifespan |
| | | Section 3.5. Process Termination |
| | | Section 3.6. Keeping Track of Processes: Basic Scheduler Construction |
| | | Section 3.7. Wait Queues |
| | | Section 3.8. Asynchronous Execution Flow |
| | | Summary |
| | | Project: current System Variable |
| | | Exercises |
| | Chapter 4. Memory Management |
| | | Section 4.1. Pages |
| | | Section 4.2. Memory Zones |
| | | Section 4.3. Page Frames |
| | | Section 4.4. Slab Allocator |
| | | Section 4.5. Slab Allocator's Lifecycle |
| | | Section 4.6. Memory Request Path |
| | | Section 4.7. Linux Process Memory Structures |
| | | Section 4.8. Process Image Layout and Linear Address Space |
| | | Section 4.9. Page Tables |
| | | Section 4.10. Page Fault |
| | | Summary |
| | | Project: Process Memory Map |
| | | Exercises |
| | Chapter 5. Input/Output |
| | | Section 5.1. How Hardware Does It: Busses, Bridges, Ports, and Interfaces |
| | | Section 5.2. Devices |
| | | Summary |
| | | Project: Building a Parallel Port Driver |
| | | Exercises |
| | Chapter 6. Filesystems |
| | | Section 6.1. General Filesystem Concepts |
| | | Section 6.2. Linux Virtual Filesystem |
| | | Section 6.3. Structures Associated with VFS |
| | | Section 6.4. Page Cache |
| | | Section 6.5. VFS System Calls and the Filesystem Layer |
| | | Summary |
| | | Exercises |
| | Chapter 7. Scheduling and Kernel Synchronization |
| | | Section 7.1. Linux Scheduler |
| | | Section 7.2. Preemption |
| | | Section 7.3. Spinlocks and Semaphores |
| | | Section 7.4. System Clock: Of Time and Timers |
| | | Summary |
| | | Exercises |
| | Chapter 8. Booting the Kernel |
| | | Section 8.1. BIOS and Open Firmware |
| | | Section 8.2. Boot Loaders |
| | | Section 8.3. Architecture-Dependent Memory Initialization |
| | | Section 8.4. Initial RAM Disk |
| | | Section 8.5. The Beginning: start_kernel() |
| | | Section 8.6. The init Thread (or Process 1) |
| | | Summary |
| | | Exercises |
| | Chapter 9. Building the Linux Kernel |
| | | Section 9.1. Toolchain |
| | | Section 9.2. Kernel Source Build |
| | | Summary |
| | | Exercises |
| | Chapter 10. Adding Your Code to the Kernel |
| | | Section 10.1. Traversing the Source |
| | | Section 10.2. Writing the Code |
| | | Section 10.3. Building and Debugging |
| | | Summary |
| | | Exercises |
| | Bibliography |
| | Index |