Linux分区页框分配器怎么使用
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要讲解了"Linux分区页框分配器怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Linux分区页框分配器怎么使用"吧!分区页框分配器
千家信息网最后更新 2025年02月07日Linux分区页框分配器怎么使用![](https://www.aqdb.cn/uploadfile/86/fadc86a2.jpg)
当上面两种分配方案都不能满足要求时,考虑页面回收、杀死进程等操作后在试。
这篇文章主要讲解了"Linux分区页框分配器怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Linux分区页框分配器怎么使用"吧!
分区页框分配器
页框分配在内核里的机制我们叫做分区页框分配器(zoned page frame allocator),在linux系统中,分区页框分配器管理着所有物理内存,无论你是内核还是进程,都需要请求分区页框分配器,这时才会分配给你应该获得的物理内存页框。当你所拥有的页框不再使用时,你必须释放这些页框,让这些页框回到管理区页框分配器当中。
有时候目标管理区不一定有足够的页框去满足分配,这时候系统会从另外两个管理区中获取要求的页框,但这是按照一定规则去执行的,如下:
如果要求从DMA区中获取,就只能从ZONE_DMA区中获取。 如果没有规定从哪个区获取,就按照顺序从 ZONE_NORMAL -> ZONE_DMA 获取。 如果规定从HIGHMEM区获取,就按照顺序从 ZONE_HIGHMEM -> ZONE_NORMAL -> ZONE_DMA 获取。
![](https://www.aqdb.cn/uploadfile/86/fadc86a2.jpg)
其函数接口
内核中根据不同的分配需求有6个函数接口来请求页框,最终都会调用到__alloc_pages_nodemask。
可以看页框分配器的核心函数是__alloc_pages_nodemask,在讲这个函数之前我们先看下两个标志:
gfp_mask
__GFP_DMA:请求在ZONE_DMA区域中分配页面; __GFP_HIGHMEM:请求在ZONE_HIGHMEM区域中分配页面; __GFP_MOVABLE:ZONE_MOVALBE可用时在该区域分配页面,同时表示页面分配后可以在内存压缩时进行迁移,也能进行回收; __GFP_RECLAIMABLE:请求分配到可恢复页面; __GFP_HIGH:高优先级处理请求; __GFP_IO:请求在分配期间进行 I/O 操作; __GFP_FS:请求在分配期间进行文件系统调用; __GFP_ZERO:请求将分配的区域初始化为 0; __GFP_NOFAIL:不允许请求失败,会无限重试; __GFP_NORETRY:请求不重试内存分配请求;
alloc_flags
ALLOC_WMARK_MIN:仅在最小水位water mark及以上限制页面分配; ALLOC_WMARK_LOW:仅在低水位water mark及以上限制页面分配; ALLOC_WMARK_HIGH:仅在高水位water mark及以上限制页面分配; ALLOC_HARDER:努力分配,一般在gfp_mask设置了__GFP_ATOMIC时会使用; ALLOC_HIGH:高优先级分配,一般在gfp_mask设置了__GFP_HIGH时使用; ALLOC_CPUSET:检查是否为正确的 cpuset; ALLOC_CMA:允许从 CMA 区域进行分配;
__alloc_pages_nodemask
struct page *
__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid,
nodemask_t *nodemask)
{
page = get_page_from_freelist(alloc_mask, order, alloc_flags, &ac);//fastpath分配页面:从pcp(per_cpu_pages)和伙伴系统中正常的分配内存空间
......
page = __alloc_pages_slowpath(alloc_mask, order, &ac);//slowpath分配页面:如果上面没有分配到空间,调用下面函数慢速分配,允许等待和回收
......
}
在页面分配时,有两种路径可以选择,如果在快速路径中分配成功了,则直接返回分配的页面;快速路径分配失败则选择慢速路径来进行分配。总结如下:
正常分配(或叫快速分配):
如果分配的是单个页面,考虑从per CPU缓存中分配空间,如果缓存中没有页面,从伙伴系统中提取页面做补充。
分配多个页面时,从指定类型中分配,如果指定类型中没有足够的页面,从备用类型链表中分配。最后会试探保留类型链表。
慢速(允许等待和页面回收)分配:
感谢各位的阅读,以上就是"Linux分区页框分配器怎么使用"的内容了,经过本文的学习后,相信大家对Linux分区页框分配器怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
分配
页面
分配器
中分
内存
函数
系统
区域
类型
路径
管理
内核
水位
空间
管理区
慢速
学习
限制
两个
优先级
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发和生命周期流程
灰度发布中的数据库问题
海报网络安全人人有责
网络技术失误导致经济损失
服务器64T价格
计算机网络技术类代码
opc服务器是网关设备吗
wifi网络安全接入是一种
软件开发过程的画图工具
重庆工业软件开发服务费
河南众道生鲜软件开发
部队网络安全防什么
ibm服务器维保合同
网络技术的发现支撑着英文
数据库四条语句
网络安全技术国外学校
快速比较两个数据库中表的字段
软件开发的想法创意
云南网络安全知识竞赛题答案
创造与魔法三个服务器
软件开发外包的优势
国家网络安全学院专业代码
搭建服务器网络需要手机号吗
计算机网络技术类代码
网络数据库网络安全三者关系
软件开发视觉识别
连接数据库找不到数据库列表
csgo更换服务器插件
厦门网络技术团队公司
网络安全阀基本内容涉及