understanding the linux virtual memory management 图序
understanding the linux virtual memory management 图序
话说大道至简,今天暂且把图留在这儿,以后慢慢分解。
List of Figures
2.1 Example Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1 Relationship Between Nodes, Zones and Pages . . . . . . . . . . . . . 27
4.1 Linear Address Bit Size Macros . . . . . . . . . . . . . . . . . . . . . 37
4.2 Linear Address Size and Mask Macros . . . . . . . . . . . . . . . . . 38
4.3 Page Table Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.4 Call Graph: paging_init() . . . . . . . . . . . . . . . . . . . . . . . 44
5.1 Kernel Address Space . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.2 Data Structures related to the Address Space . . . . . . . . . . . . . 57
5.3 Memory Region Flags . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.4 Call Graph: sys_mmap2() . . . . . . . . . . . . . . . . . . . . . . . . 63
5.5 Call Graph: get_unmapped_area() . . . . . . . . . . . . . . . . . . . 64
5.6 Call Graph: insert_vm_struct() . . . . . . . . . . . . . . . . . . . . 65
5.7 Call Graph: sys_mremap() . . . . . . . . . . . . . . . . . . . . . . . . 67
5.8 Call Graph: move_vma() . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.9 Call Graph: move_page_tables() . . . . . . . . . . . . . . . . . . . . 68
5.10 Call Graph: sys_mlock() . . . . . . . . . . . . . . . . . . . . . . . . 69
5.11 Call Graph: do_munmap() . . . . . . . . . . . . . . . . . . . . . . . . 70
5.12 Call Graph: do_page_fault() . . . . . . . . . . . . . . . . . . . . . . 73
5.13 Call Graph: handle_mm_fault() . . . . . . . . . . . . . . . . . . . . 74
5.14 Call Graph: do_no_page() . . . . . . . . . . . . . . . . . . . . . . . . 75
5.15 Call Graph: do_swap_page() . . . . . . . . . . . . . . . . . . . . . . 76
5.16 Call Graph: do_wp_page() . . . . . . . . . . . . . . . . . . . . . . . . 77
5.17 do_page_fault Flow Diagram . . . . . . . . . . . . . . . . . . . . . . 79
6.1 Call Graph: setup_memory() . . . . . . . . . . . . . . . . . . . . . . 82
Linux vm
8.1 vmalloc Address Space . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8.2 Call Graph: vmalloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.3 Call Graph: vfree() . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
9.1 Layout of the Slab Allocator . . . . . . . . . . . . . . . . . . . . . . . 105
9.2 Call Graph: kmem_cache_create() . . . . . . . . . . . . . . . . . . . 113
9.3 Call Graph: kmem_cache_reap() . . . . . . . . . . . . . . . . . . . . 114
9.4 Call Graph: kmem_cache_shrink() . . . . . . . . . . . . . . . . . . . 115
9.5 Call Graph: __kmem_cache_shrink() . . . . . . . . . . . . . . . . . . 115
9.6 Call Graph: kmem_cache_destroy() . . . . . . . . . . . . . . . . . . 116
9.7 Page to Cache and Slab Relationship . . . . . . . . . . . . . . . . . . 117
9.8 Slab With Descriptor On-Slab . . . . . . . . . . . . . . . . . . . . . . 118
9.9 Slab With Descriptor Off-Slab . . . . . . . . . . . . . . . . . . . . . . 119
9.10 Call Graph: kmem_cache_grow() . . . . . . . . . . . . . . . . . . . . 120
9.11 Initialised kmem_bufctl_t Array . . . . . . . . . . . . . . . . . . . . 120
9.12 Call Graph: kmem_slab_destroy() . . . . . . . . . . . . . . . . . . . 122
9.13 Call Graph: kmem_cache_alloc() . . . . . . . . . . . . . . . . . . . . 123
9.14 Call Graph: kmalloc() . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.15 Call Graph: kfree() . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
10.1 Call Graph: kmap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.2 Call Graph: kunmap() . . . . . . . . . . . . . . . . . . . . . . . . . . 133
10.3 Call Graph: create_bounce() . . . . . . . . . . . . . . . . . . . . . . 134
10.4 Call Graph: bounce_end_io_read/write() . . . . . . . . . . . . . . 135
10.5 Acquiring Pages from Emergency Pools . . . . . . . . . . . . . . . . . 137
11.1 Call Graph: kswapd() . . . . . . . . . . . . . . . . . . . . . . . . . . 139
11.2 Call Graph: generic_file_read() . . . . . . . . . . . . . . . . . . . 142
11.3 Call Graph: add_to_page_cache() . . . . . . . . . . . . . . . . . . . 143
11.4 Call Graph: shrink_caches() . . . . . . . . . . . . . . . . . . . . . . 146
11.5 Call Graph: swap_out() . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.6 Page Cache LRU List . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
12.1 Storing Swap Entry Information in swp_entry_t . . . . . . . . . . . 155
12.2 Call Graph: get_swap_page() . . . . . . . . . . . . . . . . . . . . . . 156
12.3 Adding a Page to the Swap Cache . . . . . . . . . . . . . . . . . . . . 158
12.4 Call Graph: add_to_swap_cache() . . . . . . . . . . . . . . . . . . . 159
12.5 Call Graph: sys_writepage() . . . . . . . . . . . . . . . . . . . . . . 162
13.1 Call Graph: out_of_memory() . . . . . . . . . . . . . . . . . . . . . . 164
Ps:这本书是2.4内核的