LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1258|回复: 1

page时何时插到zone->free_list中的?

[复制链接]
发表于 2007-11-27 22:10:31 | 显示全部楼层 |阅读模式
Buddy算法中的zone->free_list是何时实始化的?
只在free_area_init_core()中看到INIT_LIST_HEAD(&zone->free_area.free_list),但是何时真正把page插到zone->free_list中的?或者是alloc_page()时才把page插到free_list的?

free_area_init_core():
                ......................
                for (i = 0; ; i++) {
                        unsigned long bitmap_size;

                         INIT_LIST_HEAD(&zone->free_area.free_list);
                        if (i == MAX_ORDER-1) {
                                zone->free_area.map = NULL;
                                break;
                        }

                        bitmap_size = (size-1) >> (i+4);
                        bitmap_size = LONG_ALIGN(bitmap_size+1);
                        zone->free_area.map =
                          (unsigned long *) alloc_bootmem_node(pgdat, bitmap_size);
                }
 楼主| 发表于 2007-11-28 19:30:20 | 显示全部楼层
自已来回答:
start_kernel()->mem_init()->free_pages_init()->free_all_bootmem()->free_all_bootmem_core()->__free_page(),
__free_page()根据bootmem_map来释放每一页到free_area[0]->free_list,释放的过程中逐步向上合并到free_area的free_list。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表