在用户态C语言程序中,我们对内存分配函数malloc()或calloc()非常熟悉;函数执行成功,就会返回需要的内存起始地址。显然这些函数在在内核态没法运行,在内核态有专门的内存申请/释放函数。
Linux内核中,如何分配和回收内存?空闲内存如何管理?本文以linux 2.6.32-220.el6版本内核源码为基础,介绍Linux内核中如何分配物理内存页面。
目 录
1 概述
2 内核页面分配与回收API
3 空闲页面的管理
3.1 物理内存空间描述
3.2 空闲页面的管理
4 伙伴算法
4.1 Buddy System
4.2 伙伴算法举例
4.2.1 页面分配过程
4.2.2 页面回收过程
4.3 Buddy系统信息查看
5 页面分配
5.1 UMA页面分配
5.2 NUMA页面分配
5.2.1 NUMA策略与cpuset功能
5.2.2 alloc_pages_current()
5.3 __alloc_pages_nodemask()
5.3.1 内存迁移类型与lockdep
5.3.2 __alloc_pages_nodemask()
5.4 get_page_from_freelist()
5.4.1 区域(Zone)水准
5.4.2 Hot-N-Cold页面
5.4.3 get_page_from_freelist()
5.4.4 __rmqueue()
5.5 __alloc_pages_slowpath()
5.5.1 __alloc_pages_direct_compact()
5.5.2 __alloc_pages_direct_reclaim()
6 影响页面分配行为的GFP标志
完整文章下载:Linux物理内存页面分配
联系客服