linux内存管理---伙伴系统算法

伙伴系统算法:

该算法用于分配内存,一个合理的分配内存算法应当拥有这两部分:

  1. 分配内存
  2. 释放内存

符合以下三个要求的就算是伙伴:

  1. 两个块的大小相同
  2. 两个块的地址连续
  3. 两个块必须是从同一个大块分离出来的

原理:

linux把每个zone分成MAX_ORDER个free_area,每个free_are的大小是2的幂次方。MAX_ORDER的值为11,第0组大小为2^0个页,第1组大小为2^1个页,依次类推,最大的是2^10个页,即1024*4KB=4MB。同样大小的块形成一个链表。每个free_area都维护了一个位图,该位图表示所有的空闲块,有n个空闲块,则有n/2位,每位对应两个伙伴块,为0代表两块都空闲,为1表示其中一块忙。在每次分配或者释放时,都要进行异或运算,意思是,初始阶段两块都空闲,值为0;使用了其中一块之后,值异或为1;另外一块如果也使用了,值异或为0;其中一块释放两,值异或为1;两块都释放了,异或为0。

有关结构体:

struct free_area
{
    struct list_head free_list; //每个free_area链表的头结点
    unsigned long    nr_free;   //空闲链表的数量
};
struct zone
{
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值