免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1709 | 回复: 1
打印 上一主题 下一主题

[内存管理] 内存回收中page_check_references的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-07 15:38 |只看该作者 |倒序浏览
vmscan.c文件中,在shrink_page_list进行具体的页面回收过程中,有段代码的作用百思不得其解:

references = page_check_references(page, sc);
                switch (references) {
                case PAGEREF_ACTIVATE:
                        goto activate_locked;
                case PAGEREF_KEEP:
                        goto keep_locked;
                case PAGEREF_RECLAIM:
                case PAGEREF_RECLAIM_CLEAN:
                        ; /* try to reclaim the page below */
                }

page_check_references内部为何要去调用page_referenced检查引用改页面的页表项数目呢?而且根据该函数的作用,如果有页表项引用该页,返回的不是PAGEREF_ACTIVATE就是PAGEREF_KEEP,从而不会对这个页进行回收,但是这样的思路好像不对啊;shrink_page_list在回收页面时,会通过page_check_references函数后面的try_to_unmap函数更新引用该页的页表项的啊,那么和page_check_references不是就矛盾了嘛。
try_to_unmap会更新引用该页的所有页表项,然后回收该页,而之前的 page_check_references会检查该页是否有页表项,有则不进行回收;前后矛盾了呢?
望高手解答,谢谢。

论坛徽章:
0
2 [报告]
发表于 2012-08-15 14:37 |只看该作者
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3745775
找到答案了
zhuwentao0612 发表于 2012-08-07 15:38
vmscan.c文件中,在shrink_page_list进行具体的页面回收过程中,有段代码的作用百思不得其解:

referenc ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP