免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2014-06-19 11:05 |只看该作者
回复 20# humjb_1983


这个pte我觉得是当前进程的页表,硬件通过cr3的pgd找到对应的pte给他置脏,pte放的就是page的pfn + page的一些属性
pte的属性和page的属性会共享一部分

论坛徽章:
0
22 [报告]
发表于 2014-06-19 11:12 |只看该作者
回复 19# humjb_1983
对intel的x86是多余的 ,不过其他架构没这个硬件置脏,至少mips没有。
不知道其他架构是怎么设计的,powerpc arm

论坛徽章:
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
23 [报告]
发表于 2014-06-19 11:12 |只看该作者
chenyu105 发表于 2014-06-19 11:05
回复 20# humjb_1983

呵呵,对硬件来说,它不知道page struct的存在吧?

论坛徽章:
0
24 [报告]
发表于 2014-06-19 11:13 |只看该作者
回复 19# humjb_1983

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

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

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

论坛徽章:
0
25 [报告]
发表于 2014-06-19 11:17 |只看该作者
回复 23# humjb_1983


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

论坛徽章:
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
26 [报告]
发表于 2014-06-19 11:27 |只看该作者
njuzhyf 发表于 2014-06-19 11:13
回复 19# humjb_1983

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

这下搞明白了,感谢兄台指点!

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
27 [报告]
发表于 2014-06-19 12:36 |只看该作者
这个分CPU
像Intel,是硬件自动至PTE_Dirty
像ARM,是清PTE_Dirty时,置为只读;清PTE_Access时,置为未映射。 反之,映射前置上PTE_Access;写映射前置上PTE_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
28 [报告]
发表于 2014-06-19 12:41 |只看该作者
塑料袋 发表于 2014-06-19 12:36
这个分CPU
像Intel,是硬件自动至PTE_Dirty
像ARM,是清PTE_Dirty时,置为只读;清PTE_Access时,置为未映 ...

感谢,又涨姿势了~

论坛徽章:
0
29 [报告]
发表于 2014-06-19 14:33 |只看该作者
回复 像ARM,是清PTE_Dirty時,置為只讀;清PTE_Access時,置為未映射。 反之,映射前置上PTE_Access;寫映射前置上PTE_Dirty。27# 塑料袋

你得到他了

在ARM mmu這邊完全不知到有dirty bit存在,所以才會有hw pte跟linux pte存在

以下是ARM的註解
/*
* Hardware-wise, we have a two level page table structure, where the first
* level has 4096 entries, and the second level has 256 entries.  Each entry
* is one 32-bit word.  Most of the bits in the second level entry are used
* by hardware, and there aren't any "accessed" and "dirty" bits.
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP