logo资料库

Understanding the Linux Kernel.pdf

第1页 / 共959页
第2页 / 共959页
第3页 / 共959页
第4页 / 共959页
第5页 / 共959页
第6页 / 共959页
第7页 / 共959页
第8页 / 共959页
资料共959页,剩余部分请下载后查看
Understanding the Linux Kernel, 3rd Edition
Table of Contents
Copyright
Preface
The Audience for This Book
Organization of the Material
Level of Description
Overview of the Book
Background Information
Conventions in This Book
How to Contact Us
Safari® Enabled
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 and Tasklets
Section 4.8. Work Queues
Section 4.9. Returning from Interrupts and Exceptions
Chapter 5. Kernel Synchronization
Section 5.1. How the Kernel Services Requests
Section 5.2. Synchronization Primitives
Section 5.3. Synchronizing Accesses to Kernel Data Structures
Section 5.4. Examples of Race Condition Prevention
Chapter 6. Timing Measurements
Section 6.1. Clock and Timer Circuits
Section 6.2. The Linux Timekeeping Architecture
Section 6.3. Updating the Time and Date
Section 6.4. Updating System Statistics
Section 6.5. Software Timers and Delay Functions
Section 6.6. System Calls Related to Timing Measurements
Chapter 7. Process Scheduling
Section 7.1. Scheduling Policy
Section 7.2. The Scheduling Algorithm
Section 7.3. Data Structures Used by the Scheduler
Section 7.4. Functions Used by the Scheduler
Section 7.5. Runqueue Balancing in Multiprocessor Systems
Section 7.6. System Calls Related to Scheduling
Chapter 8. Memory Management
Section 8.1. Page Frame Management
Section 8.2. Memory Area Management
Section 8.3. Noncontiguous Memory Area Management
Chapter 9. Process Address Space
Section 9.1. The Process's Address Space
Section 9.2. The Memory Descriptor
Section 9.3. Memory Regions
Section 9.4. Page Fault Exception Handler
Section 9.5. Creating and Deleting a Process Address Space
Section 9.6. Managing the Heap
Chapter 10. System Calls
Section 10.1. POSIX APIs and System Calls
Section 10.2. System Call Handler and Service Routines
Section 10.3. Entering and Exiting a System Call
Section 10.4. Parameter Passing
Section 10.5. Kernel Wrapper Routines
Chapter 11. Signals
Section 11.1. The Role of Signals
Section 11.2. Generating a Signal
Section 11.3. Delivering a Signal
Section 11.4. System Calls Related to Signal Handling
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 Handling
Section 12.5. Pathname Lookup
Section 12.6. Implementations of VFS System Calls
Section 12.7. File Locking
Chapter 13. I/O Architecture and Device Drivers
Section 13.1. I/O Architecture
Section 13.2. The Device Driver Model
Section 13.3. Device Files
Section 13.4. Device Drivers
Section 13.5. Character Device Drivers
Chapter 14. Block Device Drivers
Section 14.1. Block Devices Handling
Section 14.2. The Generic Block Layer
Section 14.3. The I/O Scheduler
Section 14.4. Block Device Drivers
Section 14.5. Opening a Block Device File
Chapter 15. The Page Cache
Section 15.1. The Page Cache
Section 15.2. Storing Blocks in the Page Cache
Section 15.3. Writing Dirty Pages to Disk
Section 15.4. The sync( ), fsync( ), and fdatasync( ) System Calls
Chapter 16. Accessing Files
Section 16.1. Reading and Writing a File
Section 16.2. Memory Mapping
Section 16.3. Direct I/O Transfers
Section 16.4. Asynchronous I/O
Chapter 17. Page Frame Reclaiming
Section 17.1. The Page Frame Reclaiming Algorithm
Section 17.2. Reverse Mapping
Section 17.3. Implementing the PFRA
Section 17.4. Swapping
Chapter 18. The Ext2 and Ext3 Filesystems
Section 18.1. General Characteristics of Ext2
Section 18.2. Ext2 Disk Data Structures
Section 18.3. Ext2 Memory Data Structures
Section 18.4. Creating the Ext2 Filesystem
Section 18.5. Ext2 Methods
Section 18.6. Managing Ext2 Disk Space
Section 18.7. The Ext3 Filesystem
Chapter 19. Process Communication
Section 19.1. Pipes
Section 19.2. FIFOs
Section 19.3. System V IPC
Section 19.4. POSIX Message Queues
Chapter 20. Program ExZecution
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
Bibliography
Books on Unix Kernels
Books on the Linux Kernel
Books on PC Architecture and Technical Manuals on Intel Microprocessors
Other Online Documentation Sources
Research Papers Related to Linux Development
About the Authors
Colophon
Index
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Z
Understanding the Linux Kernel, 3rd Edition Understanding the Linux Kernel, 3rd Edition By Daniel P. Bovet, Marco Cesati By Daniel P. Bovet, Marco Cesati ............................................... ............................................... Publisher: O'Reilly Publisher: O'Reilly Pub Date: November 2005 Pub Date: November 2005 ISBN: 0-596-00565-2 ISBN: 0-596-00565-2 Pages: 942 Pages: 942     Table of Contents  | Index Table of Contents  | Index In order to thoroughly understand what makes Linux tick and why it works so well on a wide In order to thoroughly understand what makes Linux tick and why it works so well on a wide variety of systems, you need to delve deep into the heart of the kernel. The kernel handles all variety of systems, you need to delve deep into the heart of the kernel. The kernel handles all interactions between the CPU and the external world, and determines which programs will share interactions between the CPU and the external world, and determines which programs will share processor time, in what order. It manages limited memory so well that hundreds of processes can processor time, in what order. It manages limited memory so well that hundreds of processes can share the system efficiently, and expertly organizes data transfers so that the CPU isn't kept share the system efficiently, and expertly organizes data transfers so that the CPU isn't kept waiting any longer than necessary for the relatively slow disks. waiting any longer than necessary for the relatively slow disks. The third edition of Understanding the Linux Kernel takes you on a guided tour of the most The third edition of Understanding the Linux Kernel takes you on a guided tour of the most significant data structures, algorithms, and programming tricks used in the kernel. Probing beyond significant data structures, algorithms, and programming tricks used in the kernel. Probing beyond superficial features, the authors offer valuable insights to people who want to know how things superficial features, the authors offer valuable insights to people who want to know how things really work inside their machine. Important Intel-specific features are discussed. Relevant really work inside their machine. Important Intel-specific features are discussed. Relevant segments of code are dissected line by line. But the book covers more than just the functioning of segments of code are dissected line by line. But the book covers more than just the functioning of the code; it explains the theoretical underpinnings of why Linux does things the way it does. the code; it explains the theoretical underpinnings of why Linux does things the way it does. This edition of the book covers Version 2.6, which has seen significant changes to nearly every This edition of the book covers Version 2.6, which has seen significant changes to nearly every kernel subsystem, particularly in the areas of memory management and block devices. The book kernel subsystem, particularly in the areas of memory management and block devices. The book focuses on the following topics: focuses on the following topics: Memory management, including file buffering, process swapping, and Direct memory Access Memory management, including file buffering, process swapping, and Direct memory Access (DMA) (DMA) The Virtual Filesystem layer and the Second and Third Extended Filesystems The Virtual Filesystem layer and the Second and Third Extended Filesystems Process creation and scheduling Process creation and scheduling Signals, interrupts, and the essential interfaces to device drivers Signals, interrupts, and the essential interfaces to device drivers Timing Timing Synchronization within the kernel Synchronization within the kernel Interprocess Communication (IPC) Interprocess Communication (IPC) Program execution Program execution Understanding the Linux Kernel will acquaint you with all the inner workings of Linux, but it's more Understanding the Linux Kernel will acquaint you with all the inner workings of Linux, but it's more than just an academic exercise. You'll learn what conditions bring out Linux's best performance, than just an academic exercise. You'll learn what conditions bring out Linux's best performance, and you'll see how it meets the challenge of providing good system response during process and you'll see how it meets the challenge of providing good system response during process scheduling, file access, and memory management in a wide variety of environments. This book will scheduling, file access, and memory management in a wide variety of environments. This book will help you make the most of your Linux system. help you make the most of your Linux system.
Understanding the Linux Kernel, 3rd Edition By Daniel P. Bovet, Marco Cesati ............................................... Publisher: O'Reilly Pub Date: November 2005 ISBN: 0-596-00565-2 Pages: 942   Table of Contents  | Index The Audience for This Book Organization of the Material Level of Description Overview of the Book Background Information Conventions in This Book How to Contact Us Safari® Enabled Acknowledgments 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     Copyright     Preface                                                      Chapter 1.  Introduction                                       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                                                      Chapter 5.  Kernel Synchronization 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 and Tasklets Section 4.8.  Work Queues Section 4.9.  Returning from Interrupts and Exceptions
Section 5.1.  How the Kernel Services Requests Section 5.2.  Synchronization Primitives Section 5.3.  Synchronizing Accesses to Kernel Data Structures Section 5.4.  Examples of Race Condition Prevention Section 8.1.  Page Frame Management Section 8.2.  Memory Area Management Section 8.3.  Noncontiguous Memory Area Management Section 9.1.  The Process's Address Space Section 9.2.  The Memory Descriptor Section 9.3.  Memory Regions Section 9.4.  Page Fault Exception Handler Section 9.5.  Creating and Deleting a Process Address Space Section 9.6.  Managing the Heap Section 6.1.  Clock and Timer Circuits Section 6.2.  The Linux Timekeeping Architecture Section 6.3.  Updating the Time and Date Section 6.4.  Updating System Statistics Section 6.5.  Software Timers and Delay Functions Section 6.6.  System Calls Related to Timing Measurements                             Chapter 6.  Timing Measurements                                       Chapter 7.  Process Scheduling      Section 7.1.  Scheduling Policy      Section 7.2.  The Scheduling Algorithm      Section 7.3.  Data Structures Used by the Scheduler      Section 7.4.  Functions Used by the Scheduler      Section 7.5.  Runqueue Balancing in Multiprocessor Systems      Section 7.6.  System Calls Related to Scheduling         Chapter 8.  Memory Management                        Chapter 9.  Process Address Space                                       Chapter 10.  System Calls                                  Chapter 11.  Signals                             Chapter 12.  The Virtual Filesystem                                            Chapter 13.  I/O Architecture and Device Drivers                          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 Handling Section 12.5.  Pathname Lookup Section 12.6.  Implementations of VFS System Calls Section 12.7.  File Locking Section 10.1.  POSIX APIs and System Calls Section 10.2.  System Call Handler and Service Routines Section 10.3.  Entering and Exiting a System Call Section 10.4.  Parameter Passing Section 10.5.  Kernel Wrapper Routines Section 11.1.  The Role of Signals Section 11.2.  Generating a Signal Section 11.3.  Delivering a Signal Section 11.4.  System Calls Related to Signal Handling Section 13.1.  I/O Architecture Section 13.2.  The Device Driver Model Section 13.3.  Device Files Section 13.4.  Device Drivers Section 13.5.  Character Device Drivers
Section 15.1.  The Page Cache Section 15.2.  Storing Blocks in the Page Cache Section 15.3.  Writing Dirty Pages to Disk Section 15.4.  The sync( ), fsync( ), and fdatasync( ) System Calls Section 16.1.  Reading and Writing a File Section 16.2.  Memory Mapping Section 16.3.  Direct I/O Transfers Section 16.4.  Asynchronous I/O Section 17.1.  The Page Frame Reclaiming Algorithm Section 17.2.  Reverse Mapping Section 17.3.  Implementing the PFRA Section 17.4.  Swapping Section 14.1.  Block Devices Handling Section 14.2.  The Generic Block Layer Section 14.3.  The I/O Scheduler Section 14.4.  Block Device Drivers Section 14.5.  Opening a Block Device File Section 18.1.  General Characteristics of Ext2 Section 18.2.  Ext2 Disk Data Structures Section 18.3.  Ext2 Memory Data Structures Section 18.4.  Creating the Ext2 Filesystem Section 18.5.  Ext2 Methods Section 18.6.  Managing Ext2 Disk Space Section 18.7.  The Ext3 Filesystem         Chapter 14.  Block Device Drivers                                  Chapter 15.  The Page Cache                             Chapter 16.  Accessing Files                             Chapter 17.  Page Frame Reclaiming                             Chapter 18.  The Ext2 and Ext3 Filesystems                                            Chapter 19.  Process Communication                             Chapter 20.  Program ExZecution                             Appendix A.  System Startup                                  Appendix B.  Modules                            Bibliography                Section 19.1.  Pipes Section 19.2.  FIFOs Section 19.3.  System V IPC Section 19.4.  POSIX Message Queues Section 20.1.  Executable Files Section 20.2.  Executable Formats Section 20.3.  Execution Domains Section 20.4.  The exec Functions 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 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 Books on Unix Kernels Books on the Linux Kernel Books on PC Architecture and Technical Manuals on Intel Microprocessors
Other Online Documentation Sources Research Papers Related to Linux Development               About the Authors     Colophon     Index
Understanding the Linux Kernel, Third Edition by Daniel P. Bovet and Marco Cesati Copyright © 2006 O'Reilly Media, Inc. All rights reserved. Printed in the United States of America. Published by O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O'Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (safari.oreilly.com). For more information, contact our corporate/institutional sales department: (800) 998-9938 or corporate@oreilly.com. Editor: Production Editor: Production Services: Cover Designer: Interior Designer: Printing History: November 2000: December 2002: November 2005: Andy Oram Darren Kelly Amy Parker Edie Freedman David Futato First Edition. Second Edition. Third Edition. Nutshell Handbook, the Nutshell Handbook logo, and the O'Reilly logo are registered trademarks of O'Reilly Media, Inc. The Linux series designations, Understanding the Linux Kernel, Third Edition, the image of a man with a bubble, and related trade dress are trademarks of O'Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O'Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. ISBN: 0-596-00565-2 [M]
Preface In the spring semester of 1997, we taught a course on operating systems based on Linux 2.0. The idea was to encourage students to read the source code. To achieve this, we assigned term projects consisting of making changes to the kernel and performing tests on the modified version. We also wrote course notes for our students about a few critical features of Linux such as task switching and task scheduling. Out of this work and with a lot of support from our O'Reilly editor Andy Oram came the first edition of Understanding the Linux Kernel at the end of 2000, which covered Linux 2.2 with a few anticipations on Linux 2.4. The success encountered by this book encouraged us to continue along this line. At the end of 2002, we came out with a second edition covering Linux 2.4. You are now looking at the third edition, which covers Linux 2.6. As in our previous experiences, we read thousands of lines of code, trying to make sense of them. After all this work, we can say that it was worth the effort. We learned a lot of things you don't find in books, and we hope we have succeeded in conveying some of this information in the following pages.
分享到:
收藏