页面回收分析之二

函数分析-----page_check_references shrink_active_list  mark_page_accessed
首先看看页面扫描回收大概过程, 然后分析三个函数如何进行页面状态变换
1.首先扫描非活跃链表中,然后当空闲页面不够时,扫描活动链表,并将相应页面状态变换。
2.然后回收非活跃链表,没有设置页描述符的字段 flags位PG_referenced页。

一.mark_page_accessed函数
mark_page_accessed函数设置页框访问状态,并进行页面状态装换,。(PG_active,PG_referenced)
(0,1)--->(1,0)
(1,0)--->(1,1)
(0,0)--->(0,1)

页面状态装换图如下:
 第一个if语句:
将页面状态由 inactive,referenced   转换为  active,unreferenced  即:(0,1)--->(1,0)
将页面放入活动链表,并清空页描述符的字段 flags位PG_referenced值

第二个if语句:
将页面状态由 active,unreferenced     转换为    active,referenced 即:(1,0)--->(1,1)
仍旧保持在活动链表,并设置页描述符的字段 flags位PG_referenced值

将页面状态由 inactive,unreferenced  转换为    inactive,referenced 即:(0,0)--->(0,1)
仍旧保持在非活动链表,并设置页描述符的字段 flags位PG_referenced值

void mark_page_accessed(struct page *page)
{
         if (!PageActive(page) && !PageUnevictable(page) &&
                        PageReferenced(page) && PageLRU(page)) {
                activate_page(page);
                ClearPageReferenced(page);
        } else if (!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值