Linux内存管理

该博客探讨了Linux内核中内存管理的一部分,即如何通过`mark_page_accessed`函数处理页面的活跃状态。当页面被访问但不在活跃或不可驱逐状态时,会根据是否已加入LRU进行不同操作,如激活页面或将它标记为活跃以待后续处理。此外,也涉及了页面引用状态的管理,确保内存资源的有效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存回收

void mark_page_accessed(struct page *page)
{
	page = compound_head(page);
	if (!PageActive(page) && !PageUnevictable(page) &&
			PageReferenced(page)) {

		/*
		 * If the page is on the LRU, queue it for activation via
		 * activate_page_pvecs. Otherwise, assume the page is on a
		 * pagevec, mark it active and it'll be moved to the active
		 * LRU on the next drain.
		 */
		if (PageLRU(page))
			activate_page(page);
		else
			__lru_cache_activate_page(page);
		ClearPageReferenced(page);
		workingset_activation(page);
	} else if (!PageReferenced(page)) {
		SetPageReferenced(page);
	}
	if (page_is_idle(page))
		clear_page_idle(page);
}

页面加入lru时调用的是 lru_cache_add,per cpu保存了lruvec作为缓存,以减少访问全局lru产生的竞争,当page加入per cpu的lruvec时,是不立即设置LRU标志位的,所以要判断PageLRU以决定直接移动page到active lru还是标记一下active,推迟到下次批量处理lruvec时再移动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值