Copyright
Preface
The Audience for This Book
Organization of the Material
Overview of the Book
Background Information
Conventions in This Book
How to Contact Us
Acknowledgments
Chapter 1. Introduction
Linux Versus Other Unix-Like Kernels
Hardware Dependency
Linux Versions
Basic Operating System Concepts
An Overview of the Unix Filesystem
An Overview of Unix Kernels
Chapter 2. Memory Addressing
Memory Addresses
Segmentation in Hardware
Segmentation in Linux
Paging in Hardware
Paging in Linux
Chapter 3. Processes
Processes, Lightweight Processes, and Threads
Process Descriptor
Process Switch
Creating Processes
Destroying Processes
Chapter 4. Interrupts and Exceptions
The Role of Interrupt Signals
Interrupts and Exceptions
Nested Execution of Exception and Interrupt Handlers
Initializing the Interrupt Descriptor Table
Exception Handling
Interrupt Handling
Softirqs, Tasklets, and Bottom Halves
Returning from Interrupts and Exceptions
Chapter 5. Kernel Synchronization
Kernel Control Paths
When Synchronization Is Not Necessary
Synchronization Primitives
Synchronizing Accesses to Kernel Data Structures
Examples of Race Condition Prevention
Chapter 6. Timing Measurements
Hardware Clocks
The Linux Timekeeping Architecture
CPU's Time Sharing
Updating the Time and Date
Updating System Statistics
Software Timers
System Calls Related to Timing Measurements
Chapter 7. Memory Management
Page Frame Management
Memory Area Management
Noncontiguous Memory Area Management
Chapter 8. Process Address Space
The Process's Address Space
The Memory Descriptor
Memory Regions
Page Fault Exception Handler
Creating and Deleting a Process Address Space
Managing the Heap
Chapter 9. System Calls
POSIX APIs and System Calls
System Call Handler and Service Routines
Kernel Wrapper Routines
Chapter 10. Signals
The Role of Signals
Generating a Signal
Delivering a Signal
System Calls Related to Signal Handling
Chapter 11. Process Scheduling
Scheduling Policy
The Scheduling Algorithm
System Calls Related to Scheduling
Chapter 12. The Virtual Filesystem
The Role of the Virtual Filesystem (VFS)
VFS Data Structures
Filesystem Types
Filesystem Mounting
Pathname Lookup
Implementations of VFS System Calls
File Locking
Chapter 13. Managing I/O Devices
I/O Architecture
Device Files
Device Drivers
Block Device Drivers
Character Device Drivers
Chapter 14. Disk Caches
The Page Cache
The Buffer Cache
Chapter 15. Accessing Files
Reading and Writing a File
Memory Mapping
Direct I/O Transfers
Chapter 16. Swapping: Methods for Freeing Memory
What Is Swapping?
Swap Area
The Swap Cache
Transferring Swap Pages
Swapping Out Pages
Swapping in Pages
Reclaiming Page Frame
Chapter 17. The Ext2 and Ext3 Filesystems
General Characteristics of Ext2
Ext2 Disk Data Structures
Ext2 Memory Data Structures
Creating the Ext2 Filesystem
Ext2 Methods
Managing Ext2 Disk Space
The Ext3 Filesystem
Chapter 18. Networking
Main Networking Data Structures
System Calls Related to Networking
Sending Packets to the Network Card
Receiving Packets from the Network Card
Chapter 19. Process Communication
Pipes
FIFOs
System V IPC
Chapter 20. Program Execution
Executable Files
Executable Formats
Execution Domains
The exec Functions
Appendix A. System Startup
Prehistoric Age: The BIOS
Ancient Age: The Boot Loader
Middle Ages: The setup( ) Function
Renaissance: The startup_32( ) Functions
Modern Age: The start_kernel( ) Function
Appendix B. Modules
To Be (a Module) or Not to Be?
Module Implementation
Linking and Unlinking Modules
Linking Modules on Demand
Appendix C. Source Code Structure
Bibliography
Books on Unix Kernels
Books on the Linux Kernel
Books on PC Architecture and Technical Manuals on Intel Microprocessors
Other Online Documentation Sources
Colophon