免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: humjb_1983
打印 上一主题 下一主题

[内存管理] 内存操作时如何保证mmap相关的页回写到磁盘 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2014-06-18 15:25 |显示全部楼层
回复 1# humjb_1983


ls两个说的都对。。。

你说的自动完成是,内核在修改页时,MMU会自动置位页表项中脏位。在回收和回写时,会通过逆向映射把
这个位转移到page描述符的标志中去。。。。。然后内核就能检查到页是不是脏页了。
   

论坛徽章:
0
2 [报告]
发表于 2014-06-19 09:50 |显示全部楼层
回复 8# humjb_1983

额。。。。。

你混淆了。脏位有两个地方:页表项中有一个脏位;page描述符的flags标志中有一个PG_dirty位。

页表项中的脏位在写这个页表项时由MMU自动置位,但硬件不会清除这个位。这个位的清除是要由内核
来完成的。而且内核也可以在适当的时候主动置这个位。比如缺页*写*异常时,他们上面列了代码了,
内核会自己先置这个位。

page描述符里面的那个脏位就由内核管理了,这个位就是用来判断这个页是不是脏页。比如说,有多个
进程mmap了这个页,其中一个进程修改了这个页,那么那个进程的页表项中的脏位就会由MMU置位。
但page描述符里的脏位还未置位啊。所以在回收周期扫描到这个页时,会通过逆向映射查找映射这个页的
页表项,如果发现页表项中脏位被置位了,那么就会将page描述符的脏位置位表明这是一个脏页。
   

论坛徽章:
0
3 [报告]
发表于 2014-06-19 10:28 |显示全部楼层
回复 15# chenyu105

From Intel Spec

Whenever there is a write to a linear address, the processor sets the dirty flag (if it is
not already set) in the paging-structure entry that identifies the final physical
address for the linear address (either a PTE or a paging-structure entry in which the
PS flag is 1).

...These flags are “sticky,” meaning that,
once set, the processor does not clear them; only software can clear them.

   

论坛徽章:
0
4 [报告]
发表于 2014-06-19 11:13 |显示全部楼层
回复 19# humjb_1983

上面回复了一段Intel Spec里的说明。MMU确实会主动置*页表项*中的脏位,但不负责清除。内核负责清除。

而且内核确实也会主动设置*页表项*中的脏位。就像缺页*写*异常那样。不会重复,是因为MMU只有在
脏位未被置位的时候才会置位。

或者我举个例子。进程第一次读文件中的内容,内核会fault进对应页面到pagecache中去,因为是读异常,
所以内核不会置脏位吧。接下来进程又要对同一页内容进行修改了,那么此时页已经在pagecache中了,也
不需要进行什么缺页异常了,直接由MMU进行虚拟地址到物理地址的转换去写pagecache了,那么这个时候
内核都不“参与”了,谁去置页表项的脏位呢?MMU自己
   

论坛徽章:
0
5 [报告]
发表于 2014-06-19 11:17 |显示全部楼层
回复 23# humjb_1983


是的。硬件不关心page_struct。它只会置***页表项***中的脏位。前面说了,页表项中的脏位
会在回收周期中通过逆向映射找到,并设置到page_struct的flags标志中去,这样,内核就知道这
是一个脏页
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP