免费注册 查看新帖 |

Chinaunix

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

[内存管理] do_wp_page()中flush_cache_page()的调用疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-23 12:47 |只看该作者 |倒序浏览
kernel 版本: 2.6.37

在do_wp_page()中,
    if (reuse) {
reuse:
               /* page可以直接被设置成可写,不需要写时复制。不明白这里为什么要flush cache,发生写保护时,对于进程来说,page的内容不是有效的吗?flush cache岂不是多此一举? */
                flush_cache_page(vma, address, pte_pfn(orig_pte));

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
2 [报告]
发表于 2014-02-24 07:20 |只看该作者
回复 1# 魔血染青天
这里不是写保护。主要目的是:Ensure cache coherency between kernel mapping and userspace mapping of this page
读读前人的帖子吧:
http://bbs.chinaunix.net/thread-4063721-1-1.html





   

论坛徽章:
0
3 [报告]
发表于 2014-03-09 12:43 |只看该作者
回复 2# linuxfellow
这个帖子我之前也看过,明白kernel需要处理“用户空间和kernel空间别名”,以及“用户空间各个虚拟区间别名”的问题

do_wp_page() 中有2处调用flush_cache_page()

第2处是写时复制时,调用的flush_cache_page(),是为了保证在当前进程为父进程时,后面子进程能获得正确的数据

我不明白的是第1处不写时复制时,为什么还要调用flush_cache_page()?
发生写保护时,page的内容难道不是有效的吗?
如果不是有效的,那么在写保护发生之前,进程读到的数据岂不都是有问题的??


   

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
4 [报告]
发表于 2014-03-10 12:47 |只看该作者
回复 3# 魔血染青天
第一处虽不是复制页面,但是reuse一个已经存在的page cache页面,这是乎叫什么非线性分配。reuse时,这一页或许已经有被修改但没有回写到文件或磁盘的数据。调用flush就是为了不让修改过的数据丢失。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP