linux内核管理算法---buddy系统算法概念初探

Buddy System

linux伙伴算法解决的问题是频繁地请求和释放不同大小的一组连续页框,必然导致在已分配的页框块内分散了很多小块的空闲页面,导致程序运行到后面,无法分配出满足要求的大块连续页框。

        为了避免这种情况,linux引入了伙伴系统算法,它把所有的空闲页框分为11个块链表,每个块链表分别包含大小为2^0、2^1、2^2……2^10,即1、2、4、……、1024个连续页框的页框块,每块能申请最大的1024个页框对应4M大小的连续内存。另外伙伴算法每次只能分配2的幂次页的空间,比如分配1页,2页,4页……1024页等。因此,伙伴算法最多能一次分配4M的内存空间。

        比如申请一个256页框的块,那么会从256页框的链表中查找,如果没有就去512链表找,找到则把512分为2分256,一个分配出去,一个移到256链表中;相反,页框块在释放时,会主动将联系的页框块合并成一个较大的页框块。

        本质上伙伴算法就是在做内存块的拆拆分分的工作

空闲内存信息我们可以通过cat /proc/buddyinfo获取

具体代码再行分析

CMA

        随着系统的运行,伙伴算法对内存拆拆分分,势必会造成碎片化的现象,那如果对于一些需要大块连续物理内存的模块,比如camera、GPU等,岂不是没有办法使用了,所以又引入了CMA(Contiguous Memory Allocator),它是内存管理子系统中的一个模块,负责物理地址连续的内存分配,它的核心不是通过精巧的算法来管理地址连续的内存块,底层还是依赖伙伴系统算法,它只是预留了一块连续内存,没有驱动使用的时候,CMA区域可以分配给其他驱动使用,而当驱动需要分配CMA内存时,那些模块需要把内存还回来,供驱动使用。

后续具体分析下相关代码……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值