内存管理之伙伴系统算法(The Buddy System Algorithm)

Linux内核中对于内存分配采用的是伙伴系统算法,该算法主要用于解决外部碎片问题(external fragmentation)。把所有的空闲页框分为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,512和1024个连续的页框。每个块的第一个页框的物理地址是该块大小的整数倍。例如,大小为16个页框的块,其起始地址是16 x 2^12(2^12=4096,这是一个常规页的大小)的整数倍。one->free_pages += order_size;

接下来举例说明该算法的工作原理:

假设要请求一个256个页框块(即1MB)。算法先在256个页框的链表中检查是否有一个空闲块。如果没有,算法会查找下一个更大的页块,也就是在512个页框的链表中找一个空闲块。如果存在这样的空闲块,内核就把256的页框分为两等份,一半用作满足请求,另一半插入到256个页框的链表中。如果在512个页框的块链表中也没有找到空闲块,就继续找更大的块——1024个页框的块。如果存在,内核就把1024个页框块的256个页框用作请求,然后从剩余的768个页框中拿512个插入到512个页框的链表中,再把最后的256个插入到256个页框的链表中。如果1024个页框的链表还是空,算法就放弃并发出错信号。

以上过程的逆过程就是页框块的释放过程,内核试图把大小为b的一对空闲伙伴块合并为一个大小为2b的单独块。满足一下条件的两个块称为伙伴:

(1)两个块大小相等,记为b。

(2)它们物理地址是连续的。

(3)第一块的第一个

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值