Linux 学习心得——内存管理总结
目录
1. 概述3
2. 物理空间/虚拟空间3
2.1 物理空间3
2.1.1 物理空间概述3
2.1.2 Linux 内核分配的物理内存6
2.2 虚拟空间8
2.2.1 内核虚拟空间9
2.2.2 进程虚拟空间 11
2.3 物理空间和虚拟空间的转换 14
3. 内核使用内存 15
3.1 内核负责分配 15
3.1.1 物理内存管理 15
3.1.2 bootmem 系统 16
3.1.3 buddy 系统 18
3.1.4 CPU 页框高速缓存 18
3.1.5 管理区分配器 19
3.1.6 分区页框分配器/__get_free_pages 19
3.1.7 Vmalloc/vfree23
3.1.8 module_alloc/vfree26
3.1.9 dma_alloc_coherent/ dma_alloc_coherent 28
3.1.10 slab(cache)系统30
3.1.11 kmem_cache_alloc/ kmem_cache_free 32
3.1.12 kmalloc/kfree32
3.1.13 low mem 小结34
3.1.14 high mem 的使用34
3.1.15 kmap/ kunmap + alloc_pages( )/free_ pages( ) 35
3.1.16 kmap_atomic/ kunmap_atomic + alloc_pages( )/free_ pages( )37
3.2 内核不负责分配39
3.2.1 静态IO 映射/create_mapping 39
3.2.2 动态IO 映射/ ioremap/__iounmap 41
4. 进程使用内存43
4.1 基础知识43
4.1.1 内存描述符45
4.1.2 线性区描述符45
4.1.3 分配线性地址区间47
4.1.4 释放线性地址区间48
4.2 获取物理内存和建立物理内存到进程虚拟地址的映射48
4.2.1 非匿名映射;从buddy 系统获取物理内存;一次性映射完毕49
4.2.2 非匿名映射;从buddy 系统获取物理内存;缺页机制一页一页的映射52
4.2.3 非匿名映射;使用reserve 的物理内存;一次性映射完毕;53
4.2.4 非匿名映射;使用reserve 的物理内存;缺页机制一页一页的映射不可能54
4.2.5 匿名映射;从buddy 系统获取物理内存;一次性映射完毕 不可能54
4.2.6 匿名映射;使用reserve 的物理内存;一次性映射完毕 不可能55
4.2.7 匿名映射;使用reserve 的物理内存;缺页机制一页一页的映射不可能55
4.2.8 匿名映射;从buddy 系统获取物理内存;缺页机制一