Boot Memory分配器

引入Boot Memory
------------------------------------------
    Linux系统在启动到mem_init()函数执行完毕的这段时间里,Buddy System没有初始化完毕。在此阶段,Linux系统可以直接访问的数据空间包括Linux内核的data段、bss段及在sdata段中的数据。但是 在Linux系统进行初始化时,有时不可避免地动态申请某些内存空间,因为Linux系统不可能将所有数据静态地链接到Linux内核中。在这段时间 里,Linux系统使用Boot Memory分配器管理物理内存。
    Boot Memory分配器管理物理内存的算法较为简单。Boot Memory使用FFB(First Fit Allocator)算法管理Boot Memory物理内存。First Fit Allocator算法使用位图(bitmap)描述整个物理内存空间。其中,位图中的每一位对应一个实际的物理页面。如果位图中某一位为1时,表示对应 的物理页面已被使用,为0表示对应的物理页面未被使用。
    与Buddy算法相比,这种算法十分简单。这种算法带来的不利影响是,系统程序员使用Boot Memory申请内核释放内存操作时,十分容易在物理内存中留下一个个空洞。因此,在使用First Fit Allocator算法进行内存分配时,必须十分小心。
    提醒使用Boot Memory分配器的程序员注意,要小心使用Boot Memory空间,绝大多数在系统初始化中使用的Boot Memory将不会被释放。


Boot Memory不能用来分配的空间
------------------------------------------    
    do_init_bootmem()函数将以下几个空间预留:
    Linux内核的text段、data段、bss段所占的空间;
    0~0x4000之间的物理地址空间,许多PowerPC的内核,如603E、604E,使用这段空间作为中断向量;
    initrd所占用的物理地址空间,这段空间实现初始化RAM Disk。
    


Boot Memory的清除
------------------------------------------    
    Linux系统使用free_all_bootmem()函数,将Boot Memory中的物理页面清除。该函数将逐个遍历Boot Memory的位图信息,并分析所有的物理页面。当位图中页面没有被使用,则从Boot Memory中释放此物理页面,并将此页面加入到Buddy System管理的内存中,如果位图中的页面正在被使用,则此页面将被保留。
    如果Linux系统在进行初始化时使用alloc_bootmem()函数分配了一段物理内存空间,而这段空间并没有使用free_bootmem()函数释放,那么这段物理地址空间将在Linux系统运行的生命周期中一直存在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值