Preface | p. xi |
Introduction | p. 1 |
Linux Versus Other Unix-Like Kernels | p. 2 |
Hardware Dependency | p. 6 |
Linux Versions | p. 7 |
Basic Operating System Concepts | p. 8 |
An Overview of the Unix Filesystem | p. 12 |
An Overview of Unix Kernels | p. 19 |
Memory Addressing | p. 35 |
Memory Addresses | p. 35 |
Segmentation in Hardware | p. 36 |
Segmentation in Linux | p. 41 |
Paging in Hardware | p. 45 |
Paging in Linux | p. 57 |
Processes | p. 79 |
Processes, Lightweight Processes, and Threads | p. 79 |
Process Descriptor | p. 81 |
Process Switch | p. 102 |
Creating Processes | p. 114 |
Destroying Processes | p. 126 |
Interrupts and Exceptions | p. 131 |
The Role of Interrupt Signals | p. 132 |
Interrupts and Exceptions | p. 133 |
Nested Execution of Exception and Interrupt Handlers | p. 143 |
Initializing the Interrupt Descriptor Table | p. 145 |
Exception Handling | p. 148 |
Interrupt Handling | p. 151 |
Softirqs and Tasklets | p. 171 |
Work Queues | p. 180 |
Returning from Interrupts and Exceptions | p. 183 |
Kernel Synchronization | p. 189 |
How the Kernel Services Requests | p. 189 |
Synchronization Primitives | p. 194 |
Synchronizing Accesses to Kernel Data Structures | p. 217 |
Examples of Race Condition Prevention | p. 222 |
Timing Measurements | p. 227 |
Clock and Timer Circuits | p. 228 |
The Linux Timekeeping Architecture | p. 232 |
Updating the Time and Date | p. 240 |
Updating System Statistics | p. 241 |
Software Timers and Delay Functions | p. 244 |
System Calls Related to Timing Measurements | p. 252 |
Process Scheduling | p. 258 |
Scheduling Policy | p. 258 |
The Scheduling Algorithm | p. 262 |
Data Structures Used by the Scheduler | p. 266 |
Functions Used by the Scheduler | p. 270 |
Runqueue Balancing in Multiprocessor Systems | p. 284 |
System Calls Related to Scheduling | p. 290 |
Memory Management | p. 294 |
Page Frame Management | p. 294 |
Memory Area Management | p. 323 |
Noncontiguous Memory Area Management | p. 342 |
Process Address Space | p. 351 |
The Process's Address Space | p. 352 |
The Memory Descriptor | p. 353 |
Memory Regions | p. 357 |
Page Fault Exception Handler | p. 376 |
Creating and Deleting a Process Address Space | p. 392 |
Managing the Heap | p. 395 |
System Calls | p. 398 |
POSIX APIs and System Calls | p. 398 |
System Call Handler and Service Routines | p. 399 |
Entering and Exiting a System Call | p. 401 |
Parameter Passing | p. 409 |
Kernel Wrapper Routines | p. 418 |
Signals | p. 420 |
The Role of Signals | p. 420 |
Generating a Signal | p. 433 |
Delivering a Signal | p. 439 |
System Calls Related to Signal Handling | p. 450 |
The Virtual Filesystem | p. 456 |
The Role of the Virtual Filesystem (VFS) | p. 456 |
VFS Data Structures | p. 462 |
Filesystem Types | p. 481 |
Filesystem Handling | p. 483 |
Pathname Lookup | p. 495 |
Implementations of VFS System Calls | p. 505 |
File Locking | p. 510 |
I/O Architecture and Device Drivers | p. 519 |
I/O Architecture | p. 519 |
The Device Driver Model | p. 526 |
Device Files | p. 536 |
Device Drivers | p. 540 |
Character Device Drivers | p. 552 |
Block Device Drivers | p. 560 |
Block Devices Handling | p. 560 |
The Generic Block Layer | p. 566 |
The I/O Scheduler | p. 572 |
Block Device Drivers | p. 585 |
Opening a Block Device File | p. 595 |
The Page Cache | p. 599 |
The Page Cache | p. 600 |
Storing Blocks in the Page Cache | p. 611 |
Writing Dirty Pages to Disk | p. 622 |
The sync(), fsync(), and fdatasync() System Calls | p. 629 |
Accessing Files | p. 631 |
Reading and Writing a File | p. 632 |
Memory Mapping | p. 657 |
Direct I/O Transfers | p. 668 |
Asynchronous I/O | p. 671 |
Page Frame Reclaiming | p. 676 |
The Page Frame Reclaiming Algorithm | p. 676 |
Reverse Mapping | p. 680 |
Implementing the PFRA | p. 689 |
Swapping | p. 712 |
The Ext2 and Ext3 Filesystems | p. 738 |
General Characteristics of Ext2 | p. 738 |
Ext2 Disk Data Structures | p. 741 |
Ext2 Memory Data Structures | p. 750 |
Creating the Ext2 Filesystem | p. 753 |
Ext2 Methods | p. 755 |
Managing Ext2 Disk Space | p. 757 |
The Ext3 Filesystem | p. 766 |
Process Communication | p. 775 |
Pipes | p. 776 |
FIFOs | p. 787 |
System V IPC | p. 789 |
POSIX Message Queues | p. 806 |
Program Execution | p. 808 |
Executable Files | p. 809 |
Executable Formats | p. 824 |
Execution Domains | p. 827 |
The exec Functions | p. 828 |
System Startup | p. 835 |
Modules | p. 842 |
Bibliography | p. 852 |
Source Code Index | p. 857 |
Index | p. 905 |
Table of Contents provided by Ingram. All Rights Reserved. |