Contents
Chapter�1��Introduction
1.1��Getting Started
1.2��Managing the Source
1.3��Browsing the Code
1.4��Reading the Code
1.5��Submitting Patches
Chapter�2��Describing Physical Memory
2.1��Nodes
2.2��Zones
2.3��Zone Initialisation
2.4��Pages
2.5��High Memory
2.6��What's New In 2.6
Chapter�3��Page Table Management
3.1��Describing the Page Directory
3.2��Describing a Page Table Entry
3.3��Using Page Table Entries
3.4��Translating and Setting Page Table Entries
3.5��Allocating and Freeing Page Tables
3.6��Kernel Page Tables
3.7��Mapping addresses to a
struct page
3.8��Translation Lookaside Buffer (TLB)
3.9��Level 1 CPU Cache Management
3.10��What's New In 2.6
Chapter�4��Process Address Space
4.1��Linear Address Space
4.2��Managing the Address Space
4.3��Process Address Space Descriptor
4.4��Memory Regions
4.5��Exception Handling
4.6��Page Faulting
4.7��Copying To/From Userspace
4.8��What's New in 2.6
Chapter�5��Boot Memory Allocator
5.1��Representing the Boot Map
5.2��Initialising the Boot Memory Allocator
5.3��Allocating Memory
5.4��Freeing Memory
5.5��Retiring the Boot Memory Allocator
5.6��What's New in 2.6
Chapter�6��Physical Page Allocation
6.1��Managing Free Blocks
6.2��Allocating Pages
6.3��Free Pages
6.4��Get Free Page (GFP) Flags
6.5��Avoiding Fragmentation
6.6��What's New In 2.6
Chapter�7��Non-Contiguous Memory Allocation
7.1��Describing Virtual Memory Areas
7.2��Allocating A Non-Contiguous Area
7.3��Freeing A Non-Contiguous Area
7.4��Whats New in 2.6
Chapter�8��Slab Allocator
8.1��Caches
8.2��Slabs
8.3��Objects
8.4��Sizes Cache
8.5��Per-CPU Object Cache
8.6��Slab Allocator Initialisation
8.7��Interfacing with the Buddy Allocator
8.8��Whats New in 2.6
Chapter�9��High Memory Management
9.1��Managing the PKMap Address Space
9.2��Mapping High Memory Pages
9.3��Mapping High Memory Pages Atomically
9.4��Bounce Buffers
9.5��Emergency Pools
9.6��What's New in 2.6
Chapter�10��Page Frame Reclamation
10.1��Page Replacement Policy
10.2��Page Cache
10.3��LRU Lists
10.4��Shrinking all caches
10.5��Swapping Out Process Pages
10.6��Pageout Daemon (
kswapd
)
10.7��What's New in 2.6
Chapter�11��Swap Management
11.1��Describing the Swap Area
11.2��Mapping Page Table Entries to Swap Entries
11.3��Allocating a swap slot
11.4��Swap Cache
11.5��Reading Pages from Backing Storage
11.6��Writing Pages to Backing Storage
11.7��Reading/Writing Swap Area Blocks
11.8��Activating a Swap Area
11.9��Deactivating a Swap Area
11.10��Whats New in 2.6
Chapter�12��Shared Memory Virtual Filesystem
12.1��Initialising the Virtual Filesystem
12.2��Using
shmem
Functions
12.3��Creating Files in
tmpfs
12.4��Page Faulting within a Virtual File
12.5��File Operations in
tmpfs
12.6��Inode Operations in
tmpfs
12.7��Setting up Shared Regions
12.8��System V IPC
12.9��What's New in 2.6
Chapter�13��Out Of Memory Management
13.1��Checking Available Memory
13.2��Determining OOM Status
13.3��Selecting a Process
13.4��Killing the Selected Process
13.5��Is That It?
13.6��What's New in 2.6
Chapter�14��The Final Word
Reference
Bibliography