释放页__free_one_page()

本文详细探讨了页的合并过程,重点解析了__free_one_page函数和__page_find_buddy函数在内存管理中的作用,通过实例展示了它们如何协同工作来优化内存分配。
摘要由CSDN通过智能技术生成
/*释放到指定的伙伴系统类型链表*/  
static inline void __free_one_page(struct page *page,
		                                    struct zone *zone, unsigned int order,
		                                   int migratetype)
{
	unsigned long page_idx;

	/*要释放的页是巨页的一部分*/  
	if (unlikely(PageCompound(page)))
		     /* 解决巨页标志,如果巨页标志有问题,则退出 */   
		if (unlikely(destroy_compound_page(page, order)))
			return;

	VM_BUG_ON(migratetype == -1);

    /*将页面转化为全局页面数组的下标*/  
	page_idx = page_to_pfn(page) & ((1 << MAX_ORDER) - 1);

	 /* 如果被释放的页不是所释放阶的第一个页,则说明参数有误 */  
	VM_BUG_ON(page_idx & ((1 << order) - 1));
	  /* 校验页块是否有效,检查是否有空洞,页块中的页面是否都在同一个zone中 */  
	VM_BUG_ON(bad_range(zone, page));

	//用来一对伙伴是否能合并
	while (order < MAX_ORDER-1) 
	{
		unsigned long combined_idx;
		struct page *buddy;

		/*     找出page页面的伙伴 
			   查找待释放页块的伙伴 ,其中伙伴系统中每个块 
			   都有一个对应同样大小的"伙伴块"(由2的指数原理知)
		*/  
		buddy = __page_find_buddy(page, 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值