Linux内存管理: 物理内存的释放(回收).为物理页面抬棺

本文探讨了Linux操作系统中物理内存的释放过程,重点关注如何进行有效的回收策略。通过对代码的分析,揭示了内存页面释放的关键点,包括双生小鬼原理,并涉及自旋锁和信号量在内存管理中的应用。文章适合学习操作系统的读者,提供了深入的理解和参考资源。
摘要由CSDN通过智能技术生成

前情提要:

  1. 地址转换
  2. 物理页面的分配

终于到了物理内存的释放. 内存页面如生命一般. 有生有死.
接下来我们就要为物理页面抬棺收尸了.

在这里插入图片描述

1.要点: 如何为兄弟抬棺回收?

分配时跟谁分开的, 回收时要跟他一起才能被释放 双生小鬼

2.代码分析

  • 函数调用关系:
    在这里插入图片描述
  • __free_pages_ok函数流程图

__free_pages_ok函数流程图不是很清楚, 可私信要清楚的版本.如果我还存了的话

  • 代码
static void __free_pages_ok (struct page *page, unsigned int order)
{
   
	unsigned long index, page_idx, mask, flags;
	free_area_t *area;
	struct page *base;
	zone_t *zone;

	
	if (PageLRU(page)) /*
		检测该page是否在page lists中
			如果在, 就删除
		*/
		lru_cache_del(page);
	if (page->buffers) // 如果page被用作磁盘块缓存时
		BUG();
	if (page->mapping) //如果page有指向的inode
		BUG();

	/*
		检测 ((page - mem_map) < max_mapnr) 是否超过page管理单元总数
			page 是否在有效的 [mem_map,mem_mep+max_mapnr]范围内
	*/
	if (!VALID_PAGE(page))
		BUG();
	if (PageSwapCache(page))
		BUG();
	if (PageLocked(page))
		BUG();
	if (PageLRU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值