• 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