伙伴算法初始化

 要看你怎么理解初始化了. 实际上,伙伴系统的初始化是一个过程, 伙伴系统初始化可以看成是由 bootmem allocator完成, 与伙伴系统相关的主要有两步

以2.6.11代码为例:

1  bootmem的早期, 在初始化zone的过程共会调用free_area_init_core, 该函数调用  zone_init_free_lists.
可以看到,free_area数组每个元素里的free_list的确是空的.
  1. void zone_init_free_lists(struct pglist_data *pgdat, struct zone *zone,
  2.                                 unsigned long size)
  3. {
  4.         int order;
  5.         for (order = 0; order < MAX_ORDER ; order++) {
  6.                 INIT_LIST_HEAD(&zone->free_area[order].free_list);
  7.                 zone->free_area[order].nr_free = 0;
  8.         }
  9. }
复制代码
2. 在bootmem的后期, 会把初始化后未用到的页面全部释放给buddy.
在mem_init()函数中有如下代码, 注意最初的注释以及__free_all_bootmem和set_highmem_pages_init函数,这两个函数都将调用__free_pages或__free_page函数将空闲页面加入相关的freelist
  1. /* this will put all low memory onto the freelists */
  2.         totalram_pages += __free_all_bootmem();

  3.         reservedpages = 0;
  4.         for (tmp = 0; tmp < max_low_pfn; tmp++)
  5.                 /*
  6.                  * Only count reserved RAM pages
  7.                  */
  8.                 if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
  9.                         reservedpages++;

  10.         set_highmem_pages_init(bad_ppro);
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值