linux内核函数伙伴系统部分expand()

 先看个分配图在看下面的函数

linux内核函数伙伴系统部分expand()_第1张图片

 

static inline void expand(struct zone *zone, //内存区域
                              struct page *page, //页块首页地址
	                          int low,   //需要的页阶
	                          int high,  //现在页阶 
	                          struct free_area *area,
	                          int migratetype)//迁移类型
{
	unsigned long size = 1 << high;//现在分配的page中页的个数

	while (high > low) //当前页阶 大于需要的页阶
	{
		area--;/*area减1得到下一级order对应的area*/
		high--;/*high减1表明进行了一次拆分*/
		size >>= 1;/*拆分一次size就要除以2*/
		VM_BUG_ON(bad_range(zone, &page[size]));

		//将页的另一半加入到上个伙伴链中
		list_add(&page[size].lru, &area->free_list[migratetype]);
		area->nr_free++;/*该order区域的块数加1*/

		set_page_order(&page[size], high);/*该order区域的块数加1*/
	}
}

 

你可能感兴趣的:(linux内核)