Next:
Abstract
Up:
understand-html
Previous:
understand-html
 
Index
Contents
Abstract
1. Introduction
1.1 Thesis Overview
2. Code Management
2.1 Managing the Source
2.1.1 Diff and Patch
2.1.2 Browsing the Code
2.1.3 Analyzing Code Flow
2.1.4 Basic Source Management with patchset
2.2 Getting Started
2.3 Submitting Work
3. Describing Physical Memory
3.1 Nodes
3.2 Zones
3.2.1 Zone Watermarks
3.3 Pages
3.3.1 Mapping Pages to Zones
4. Page Table Management
4.1 Describing the Page Directory
4.2 Describing a Page Table Entry
4.3 Using Page Table Entries
4.4 Translating and Setting Page Table Entries
4.5 Allocating and Freeing Page Tables
4.6 Initializing Kernel Page Tables
4.6.1 Bootstrapping
4.6.2 Finalizing
5. Boot Memory Allocator
6. Physical Page Allocation
6.1 Allocator API
6.2 Managing Free Blocks
6.3 Allocating Pages
6.4 Free Pages
6.5 GFP Flags
6.5.1 Process Flags
6.6 Avoiding Fragmentation
7. Non-Contiguous Memory Allocation
7.1 Kernel Address Space
7.2 Describing Virtual Memory Areas
7.3 Allocating A Non-Contiguous Area
7.4 Freeing A Non-Contiguous Area
8. Slab Allocator
8.1 Caches
8.1.1 Cache Descriptor
8.1.2 Cache Static Flags
8.1.3 Cache Dynamic Flags
8.1.4 Cache Allocation Flags
8.1.5 Cache Colouring
8.1.6 Cache Creation
8.1.7 Cache Reaping
8.1.8 Cache Shrinking
8.1.9 Cache Destroying
8.2 Slabs
8.2.1 Storing the Slab Descriptor
8.2.2 Slab Creation
8.2.3 Tracking Free Objects
8.2.4 Initialising the kmem_bufctl_t Array
8.2.5 Finding the Next Free Object
8.2.6 Updating kmem_bufctl_t
8.2.7 Calculating the Number of Objects on a Slab
8.2.8 Slab Destroying
8.3 Objects
8.3.1 Initialising Objects in a Slab
8.3.2 Object Allocation
8.3.3 Object Freeing
8.4 Sizes Cache
8.4.1 kmalloc
8.4.2 kfree
8.5 Per-CPU Object Cache
8.5.1 Describing the Per-CPU Object Cache
8.5.2 Adding/Removing Objects from the Per-CPU Cache
8.5.3 Enabling Per-CPU Caches
8.5.4 Updating Per-CPU Information
8.5.5 Draining a Per-CPU Cache
8.6 Slab Allocator Initialisation
8.7 Interfacing with the Buddy Allocator
9. Process Address Space
9.1 Managing the Address Space
9.2 Process Address Space Descriptor
9.2.1 Allocating a Descriptor
9.2.2 Initialising a Descriptor
9.2.3 Destroying a Descriptor
9.3 Memory Regions
9.3.1 File/Device backed memory regions
9.3.2 Creating A Memory Region
9.3.3 Finding a Mapped Memory Region
9.3.4 Finding a Free Memory Region
9.3.5 Inserting a memory region
9.3.6 Merging contiguous regions
9.3.7 Remapping and moving a memory region
9.3.8 Deleting a memory region
9.3.9 Deleting all memory regions
9.4 Locking a Memory Region
9.5 Page Faulting
9.5.1 Page Fault Exception Handler
9.5.2 Handling the Page Fault
9.5.3 Demand Allocation
9.5.4 Demand Paging
9.5.5 Copy On Write (COW) Pages
10. Page Frame Reclamation
10.1 Page Swap Daemon (kswapd)
10.2 Page Cache
10.3 Shrinking all caches
10.4 Page Hash
10.5 Inode Queue
10.6 Refilling inactive_list
10.7 Reclaiming pages from the page cache
10.8 Swapping Out Process Pages
11. Out Of Memory Management
11.0.1 Selecting a Process
Bibliography
Index
About this document ...
Subsections
Abstract
Mel 2003-01-14