Linux内核源代码情景分析-内存管理之恢复映射

    refill_inactive_scan和swap_out,把活跃的页面变成不活跃脏的页面。挑选的原则是最近没有被访问,且age小于0。

    page_launder,把不活跃脏的页面变成不活跃干净的页面。


    不活跃脏的页面,有如下特点:

    使用计数为1;

    page->list链入mapping->dirty_pages/clean_pages;

    page->next_hash和page->pprev_hash链入全局的Hash表;

    page->lru链入了全局的inactive_dirty_list;

    page->flags对应为设置为PG_dirty。


    不活跃干净的页面,有如下特点:

    使用计数为1;

    page->list链入mapping->dirty_pages/clean_pages(保持原样);

    page->next_hash和page->pprev_hash链入全局的Hash表;

    page->lru链入了page->zone->inactive_clean_list;


    如果发生缺页中断,再次访问到这个页面,那么会调用lookup_swap_cache,会在全局的Hash表找到对应的页面,并且引用计数加1,变成2,但还没有移到活跃队列中。什么时候转移到活跃队列中呢?

    答案在,page_launder和reclaim_page中。

    page_launder:

if (PageTestandClearReferenced(page) || page->age > 0 ||   //此时引用计数大于1 
                (!page->buffers && page_count(page) > 1) ||  
                page_ramdisk(page)) {  
            del_page_from_inactive_dirty_list(page);  
            add_page_to_active_list(page);  
            continue;  
} 
    

    reclaim_page:

if (PageTestandClearReferenced(page) || page->age > 0 ||  
                (!page->buffers && page_count(page) > 1)) {//此时引用计数大于1
            del_page_from_inactive_clean_list(page);  
            add_page_to_active_list(page);  
            continue;  
}  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值