- 1
- 0
- 约1.45万字
- 约 17页
- 2017-08-20 发布于浙江
- 举报
Linux中内存的分配旱耐回收
一。系统启动时的内存操作
二。伙伴算法
三。slab分配器
四。slob分配器
五。slub分配器
六。kmalloc和kfree
七。vmalloc和vfree
八。glibc中的malloc和free
九。参考资料
一。[[Anchor(NBE1)]]系统启动时的内存操作
1。pg0的位置和尺寸
当系统刚刚启动时,在分页功能未打开前,线性地址和物理地址是一一对应的。刚开启分页功能时,pg0的内存地址是 在编译内核时定义好的,见arch\i386\kernel\vmlinux.lsd.S,大小为4096字节,启始地址紧跟内核在内存中物理地址。由于 内核保护模式代码启始位置为0x100000,所以pg0地址=0x100000+内核保护模式代码尺寸。
对pg0的操作主要是开启分页机制时填写页面描述表信息,上一节在第一次页寻址设置中已经详细介绍。
2。内存位图的内存操作
内存位图是系统设置区域和页面管理前的内存使用状态表。
2.1内存位图的位置和尺寸
位图contig_page_data.bdata-node_bootmem_map的起始地址跟在init_pg_tables_end的后面。大小等于所有物理页面数除以32,即每一位代表一个页面。
首先我们看文件arch/i386/kernel/setup.c中的setup_memory函数
min_low_pfn = PFN_UP(init_pg_tables_end);
然后看同样文件中的函数setup_bootmem_allocator
bootmap_size = init_bootmem(min_low_pfn, max_low_pfn);
在init_bootmem中min_low_pfn是init_pg_tables_end的页框号
最终在函数init_bootmem_core中我们看到
bdata-node_bootmem_map = phys_to_virt(PFN_PHYS(mapstart));
其中mapstart就是min_low_pfn;bdata就是NODE_DATA(0),也就是contig_page_data.bdata
所以contig_page_data.bdata-node_bootmem_map就是init_pg_tables_end指向地址
我们前面已经介绍init_pg_tables_end的实际位置和内核大小有关
init_pg_tables_end=内核保护模式代码启始地址(0x100000)+内核保护模式代码尺 寸+pg0的1024个4字节页面描述符号+保证第一次分页设置的页表尺寸(一般还需要若干1024个4字节的页面描述符号,由内核尺寸决定)+描述1G 内存的位图尺寸128K字节+描述1G内存的页表空间(1024*4096字节)+间隔空间(4*4096字节)
可以看出如果内核尺寸在4M左右,描述1G内存也需要大量页表空间(4M),这样第一次分页设置实际上就至少需要3个页表的页描述符。
2.2内存位图的释放
在设置了区域和页面管理以后,内存位图就不需要了。释放内存位图的内存时,使用了函数free_pages_bootmem。
首先见启动过程中的mem_init()函数,这是在设置了区域和页面管理后执行的。我们看其中的 free_all_bootmem()调用,在free_all_bootmem_core中将bdata-node_bootmem_map的 对应页面结构逐个调用free_pages_bootmem。
在free_pages_bootmem中首先清除了页面结构的PG_reserved标记,然后设置页面使用记数count为1,最后调用free_page(下面会详细描述)。
3。pte的内存分配
设置页表时,pte的内存分配使用了函数alloc_bootmem_low_pages,由于此时区域页面管理还未开始使用,使用的都是内存位图搜索。
在one_page_table_init中使用alloc_bootmem_low_pages为页表分配内存,大小为一个页面4096字节。
见mm/bootmem.c中的alloc_bootmem_low函数,最后还是使用了 alloc_bootmem_core,其中分配大小为PAGE_SIZE(实际上就是一个页面),对齐为PAGE_SIZE,启始搜寻地址为0,界限为 ARCH_LOW_ADDRESS_LIMIT。
首先如果设置了启始搜寻地址,则从启始搜寻地址开始向上找。使用find_next_zero_bit查找 bdata-node_bootmem_map从搜寻地址开始的第一个未分配页面(test_bit(i, bdata-node_bootmem_map),i为页面位),然后检查接下来的连
您可能关注的文档
- IPv6地址格式的.doc
- IPv6编址的.ppt
- IPTV组成原理(上)的.ppt
- IP地址分配与聚合的.ppt
- IP地址及接入方式的.ppt
- IP地址规划和管理的.ppt
- IP组播协议及技术PP的T.ppt
- IPM原理及测试方法的.ppt
- IP组播协议及技术的.ppt
- IP地址的计算的.ppt
- 七年级语文上册期末模拟试卷1(解析版).docx
- 七年级语文上册期末模拟试卷1(原卷版).docx
- 七年级语文上册期末模拟试卷2(原卷版).docx
- 七年级语文上册期末模拟试卷2(解析版).docx
- 期末测试卷(二)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(三)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(二)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(三)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(一)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(一)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
原创力文档

文档评论(0)