Understanding the Linux Kernel
Daniel P. Bovet
Marco Cesati
Publisher: O'Reilly
First Edition October 2000
ISBN: 0-596-00002-2, 702 pages
Understanding the Linux Kernel helps readers understand how Linux performs best and how
it meets the challenge of different environments. The authors introduce each topic by
explaining its importance, and show how kernel operations relate to the utilities that are
familiar to Unix programmers and users.
Table of Contents
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 .................................................
1
1
1
3
4
4
4
5
1. Introduction ....................................................
1.1 Linux Versus Other Unix-Like Kernels ...............................
1.2 Hardware Dependency ..........................................
1.3 Linux Versions ................................................
1.4 Basic Operating System Concepts ..................................
1.5 An Overview of the Unix Filesystem ................................
1.6 An Overview of Unix Kernels .....................................
6
6
10
11
12
16
22
2. Memory Addressing .............................................
2.1 Memory Addresses
.............................................
2.2 Segmentation in Hardware .......................................
2.3 Segmentation in Linux ..........................................
2.4 Paging in Hardware ............................................
2.5 Paging in Linux ...............................................
2.6 Anticipating Linux 2.4 ..........................................
36
36
37
41
44
52
63
3. Processes ......................................................
3.1 Process Descriptor .............................................
3.2 Process Switching .............................................
3.3 Creating Processes .............................................
3.4 Destroying Processes ...........................................
3.5 Anticipating Linux 2.4 ..........................................
64
64
78
86
93
94
4. Interrupts and Exceptions .........................................
4.1 The Role of Interrupt Signals ......................................
4.2 Interrupts and Exceptions ........................................
4.3 Nested Execution of Exception and Interrupt Handlers ..................
4.4 Initializing the Interrupt Descriptor Table ............................
4.5 Exception Handling ...........................................
4.6 Interrupt Handling ............................................
4.7 Returning from Interrupts and Exceptions ...........................
4.8 Anticipating Linux 2.4 .........................................
96
96
97
106
107
109
112
126
129
5. Timing Measurements ...........................................
5.1 Hardware Clocks .............................................
5.2 The Timer Interrupt Handler .....................................
5.3 PIT's Interrupt Service Routine ...................................
5.4 The TIMER_BH Bottom Half Functions ............................
5.5 System Calls Related to Timing Measurements
........................
5.6 Anticipating Linux 2.4 .........................................
131
131
133
134
136
145
148
6. Memory Management ...........................................
6.1 Page Frame Management .......................................
6.2 Memory Area Management ......................................
6.3 Noncontiguous Memory Area Management ..........................
6.4 Anticipating Linux 2.4 .........................................
149
149
160
176
181
7. Process Address Space ..........................................
7.1 The Process's Address Space .....................................
7.2 The Memory Descriptor ........................................
7.3 Memory Regions .............................................
7.4 Page Fault Exception Handler ....................................
7.5 Creating and Deleting a Process Address Space .......................
7.6 Managing the Heap ............................................
7.7 Anticipating Linux 2.4 .........................................
183
183
185
186
201
212
214
216
8. System Calls ..................................................
8.1 POSIX APIs and System Calls ...................................
8.2 System Call Handler and Service Routines ...........................
8.3 Wrapper Routines .............................................
8.4 Anticipating Linux 2.4 .........................................
217
217
218
229
230
9. Signals .......................................................
9.1 The Role of Signals ...........................................
9.2 Sending a Signal ..............................................
9.3 Receiving a Signal ............................................
9.4 Real-Time Signals ............................................
9.5 System Calls Related to Signal Handling ............................
9.6 Anticipating Linux 2.4 .........................................
231
231
239
242
251
252
257
10. Process Scheduling ............................................
10.1 Scheduling Policy ............................................
10.2 The Scheduling Algorithm .....................................
10.3 System Calls Related to Scheduling ...............................
10.4 Anticipating Linux 2.4 ........................................
258
258
261
272
276
11. Kernel Synchronization .........................................
11.1 Kernel Control Paths ..........................................
11.2 Synchronization Techniques ....................................
11.3 The SMP Architecture ........................................
11.4 The Linux/SMP Kernel ........................................
11.5 Anticipating Linux 2.4 ........................................
277
277
278
286
290
302
12. The Virtual Filesystem .........................................
12.1 The Role of the VFS ..........................................
12.2 VFS Data Structures ..........................................
12.3 Filesystem Mounting .........................................
12.4 Pathname Lookup ............................................
12.5 Implementations of VFS System Calls .............................
12.6 File Locking ................................................
12.7 Anticipating Linux 2.4 ........................................
303
303
308
324
329
333
337
342
13. Managing I/O Devices ..........................................
13.1 I/O Architecture .............................................
13.2 Associating Files with I/O Devices ...............................
13.3 Device Drivers ..............................................
13.4 Character Device Handling .....................................
13.5 Block Device Handling ........................................
13.6 Page I/O Operations ..........................................
13.7 Anticipating Linux 2.4 ........................................
343
343
348
353
360
361
377
380
14. Disk Caches ..................................................
14.1 The Buffer Cache ............................................
14.2 The Page Cache .............................................
14.3 Anticipating Linux 2.4 ........................................
382
383
396
398
15. Accessing Regular Files .........................................
15.1 Reading and Writing a Regular File ...............................
15.2 Memory Mapping ............................................
15.3 Anticipating Linux 2.4 ........................................
400
400
408
416
16. Swapping: Methods for Freeing Memory ...........................
16.1 What Is Swapping? ...........................................
16.2 Swap Area .................................................
16.3 The Swap Cache .............................................
16.4 Transferring Swap Pages .......................................
16.5 Page Swap-Out ..............................................
16.6 Page Swap-In ...............................................
16.7 Freeing Page Frames ..........................................
16.8 Anticipating Linux 2.4 ........................................
417
417
420
429
433
437
442
444
450
17. The Ext2 Filesystem ...........................................
17.1 General Characteristics ........................................
17.2 Disk Data Structures ..........................................
17.3 Memory Data Structures .......................................
17.4 Creating the Filesystem ........................................
17.5 Ext2 Methods ...............................................
17.6 Managing Disk Space .........................................
17.7 Reading and Writing an Ext2 Regular File ..........................
17.8 Anticipating Linux 2.4 ........................................
451
451
453
459
463
464
466
473
475
18. Process Communication ........................................
18.1 Pipes .....................................................
18.2 FIFOs ....................................................
18.3 System V IPC ...............................................
18.4 Anticipating Linux 2.4 ........................................
476
477
483
486
499
19. Program Execution ............................................
19.1 Executable Files .............................................
19.2 Executable Formats ..........................................
19.3 Execution Domains ...........................................
19.4 The exec-like Functions .......................................
19.5 Anticipating Linux 2.4 ........................................
500
500
512
514
515
519
- 1
- 2
- 3
- 4
前往页