免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
11 [报告]
发表于 2014-06-18 21:47 |只看该作者
塑料袋 发表于 2014-06-18 15:10
回写前,会通过反向映射,找到各个pte,并清其pte_dirty位。

感谢!
疑问还在于dirty设置的地方~

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
12 [报告]
发表于 2014-06-18 21:47 |只看该作者
asuka2001 发表于 2014-06-18 15:17
回复 1# humjb_1983

个人认为,pte中的 dirty位应该是硬件自动置位吧!

感谢兄弟,我以前也是怎么猜的~

论坛徽章:
0
13 [报告]
发表于 2014-06-19 00:08 |只看该作者
记得好像有个回调函数,在写页面缺页的时候回调用,然后把页面置脏吧。。
vma->vm_ops->page_mkwrite ?

论坛徽章:
0
14 [报告]
发表于 2014-06-19 09:50 |只看该作者
回复 8# humjb_1983

额。。。。。

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

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

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

论坛徽章:
0
15 [报告]
发表于 2014-06-19 10:10 |只看该作者
回复 14# njuzhyf

我看的是mips的实现,手册里没说写地址,会使硬件自动给mmu对应的tlb条目置脏,不知道x86的是不是这样。
总觉得如果是这样的话,那硬件频繁置脏这个效率比较低了。

论坛徽章:
0
16 [报告]
发表于 2014-06-19 10:10 |只看该作者
回复 7# asuka2001
1. 就是这里。

2.  之前我说的有错,不是回写,是回收流程:
try_to_unmap_file -> try_to_unmap_one
->page_remove_rmap ->ptep_clear_flush  
如果是回写,只把dirty位清除,没有置无效。



   

论坛徽章:
0
17 [报告]
发表于 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
18 [报告]
发表于 2014-06-19 10:37 |只看该作者
回复 17# njuzhyf
哦好的 长见识

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
19 [报告]
发表于 2014-06-19 10:52 |只看该作者
njuzhyf 发表于 2014-06-19 09:50
回复 8# humjb_1983

额。。。。。

确认mmu会自动设置pte中dirty标志?如果是这样那page fault中再设置一次是否就多余了?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
20 [报告]
发表于 2014-06-19 11:01 |只看该作者
njuzhyf 发表于 2014-06-19 10:28
回复 15# chenyu105

From Intel Spec

“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).”
这里说的paging-structure entry应该是指pte吧?跟内核管理的page结构没啥关系吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP