Understanding the Linux Kernel 2nd Edition

By Daniel P. Bovet, Marco Cesati

Publisher Pub Date ISBN Pages

O'Reilly

December 2002 0-596-00213-0 784

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

Section 1.1. Linux Versus Other Unix-Like Kernels

Section 1.2. Hardware Dependency

Section 1.3. Linux Versions

Section 1.4. Basic Operating System Concepts

Section 1.5. An Overview of the Unix Filesystem

Section 1.6. An Overview of Unix Kernels

Chapter 2. Memory Addressing

Section 2.1. Memory Addresses Section 2.2. Segmentation in Hardware Section 2.3. Segmentation in Linux Section 2.4. Paging in Hardware Section 2.5. Paging in Linux

Chapter 3. Processes

Section 3.1. Processes, Lightweight Processes, and Threads

Section 3.2. Process Descriptor

Section 3.3. Process Switch

Section 3.4. Creating Processes

Section 3.5. Destroying Processes

Chapter 4. Interrupts and Exceptions

Section 4.1. The Role of Interrupt Signals

Section 4.2. Interrupts and Exceptions

Section 4.3. Nested Execution of Exception and Interrupt Handlers

Section 4.4. Initializing the Interrupt Descriptor Table

Section 4.5. Exception Handling

Section 4.6. Interrupt Handling

Section 4.7. Softirqs, Tasklets, and Bottom Halves

Section 4.8. Returning from Interrupts and Exceptions

Chapter 5. Kernel Synchronization Section 5.1. Kernel Control Paths Section 5.2. When Synchronization Is Not Necessary Section 5.3. Synchronization Primitives

Section 5.4. Synchronizing Accesses to Kernel Data Structures Section 5.5. Examples of Race Condition Prevention

Chapter 6. Timing Measurements

Section 6.1. Hardware Clocks

Section 6.2. The Linux Timekeeping Architecture

Section 6.3. CPU's Time Sharing

Section 6.4. Updating the Time and Date

Section 6.5. Updating System Statistics

Section 6.6. Software Timers

Section 6.7. System Calls Related to Timing Measurements

Chapter 7. Memory Management

Section 7.1. Page Frame Management

Section 7.2. Memory Area Management

Section 7.3. Noncontiguous Memory Area Management

Chapter 8. Process Address Space

Section 8.1. The Process's Address Space

Section 8.2. The Memory Descriptor

Section 8.3. Memory Regions

Section 8.4. Page Fault Exception Handler

Section 8.5. Creating and Deleting a Process Address Space

Section 8.6. Managing the Heap

Chapter 9. System Calls

Section 9.1. POSIX APIs and System Calls

Section 9.2. System Call Handler and Service Routines

Section 9.3. Kernel Wrapper Routines

Chapter 10. Signals

Section 10.1. The Role of Signals

Section 10.2. Generating a Signal

Section 10.3. Delivering a Signal

Section 10.4. System Calls Related to Signal Handling

Chapter 11. Process Scheduling

Section 11.1. Scheduling Policy

Section 11.2. The Scheduling Algorithm

Section 11.3. System Calls Related to Scheduling

Chapter 12. The Virtual Filesystem

Section 12.1. The Role of the Virtual Filesystem (VFS)

Section 12.2. VFS Data Structures

Section 12.3. Filesystem Types

Section 12.4. Filesystem Mounting

Section 12.5. Pathname Lookup

Section 12.6. Implementations of VFS System Calls

Section 12.7. File Locking

Chapter 13. Managing I/O Devices Section 13.1. I/O Architecture Section 13.2. Device Files Section 13.3. Device Drivers Section 13.4. Block Device Drivers Section 13.5. Character Device Drivers

Chapter 14. Disk Caches

Section 14.1. The Page Cache Section 14.2. The Buffer Cache

Chapter 15. Accessing Files

Section 15.1. Reading and Writing a File Section 15.2. Memory Mapping Section 15.3. Direct I/O Transfers

Chapter 16. Swapping: Methods for Freeing Memory

Section 16.1. What Is Swapping?

Section 16.2. Swap Area

Section 16.3. The Swap Cache

Section 16.4. Transferring Swap Pages

Section 16.5. Swapping Out Pages

Section 16.6. Swapping in Pages

Section 16.7. Reclaiming Page Frame

Chapter 17. The Ext2 and Ext3 Filesystems

Section 17.1. General Characteristics of Ext2

Section 17.2. Ext2 Disk Data Structures

Section 17.3. Ext2 Memory Data Structures

Section 17.4. Creating the Ext2 Filesystem

Section 17.5. Ext2 Methods

Section 17.6. Managing Ext2 Disk Space

Section 17.7. The Ext3 Filesystem

Chapter 18. Networking

Section 18.1. Main Networking Data Structures Section 18.2. System Calls Related to Networking Section 18.3. Sending Packets to the Network Card Section 18.4. Receiving Packets from the Network Card

Chapter 19. Process Communication

Section 19.1. Pipes

Section 19.2. FIFOs Section 19.3. System V IPC

Chapter 20. Program Execution Section 20.1. Executable Files Section 20.2. Executable Formats Section 20.3. Execution Domains Section 20.4. The exec Functions

Appendix A. System Startup

Section A.1. Prehistoric Age: The BIOS Section A.2. Ancient Age: The Boot Loader Section A.3. Middle Ages: The setup( ) Function Section A.4. Renaissance: The startup 32( ) Functions Section A.5. Modern Age: The start kernel( ) Function

Appendix B. Modules

Section B.1. To Be (a Module) or Not to Be? Section B.2. Module Implementation Section B.3. Linking and Unlinking Modules Section B.4. 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

Index

Index

Was this article helpful?

0 0

Post a comment