免费注册 查看新帖 |

Chinaunix

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

[内存管理] 内存操作时如何保证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
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-18 14:59 |只看该作者 |倒序浏览
内存操作,比如memcpy,直接修改指定虚拟地址区的内容,如果被修改的虚拟地址区为mmap相关的区域,如何能保证相关修改最终会回写到磁盘中去?
个人理解,直接操作虚拟地址时,对应的指令应该就是mov之类,虚拟地址到物理地址直接的转换由mmu和页表自动完成,整个过程应该不涉及对page的操作,
也不区分目的vma是否有file map。在这个过程中,并没有设置相关page为dirty的操作,那么如何能保证相关page能进行回写呢?
请大家指点。

论坛徽章:
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
2 [报告]
发表于 2014-06-18 15:10 |只看该作者
回写前,会通过反向映射,找到各个pte,并清其pte_dirty位。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
3 [报告]
发表于 2014-06-18 15:17 |只看该作者
回复 1# humjb_1983

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

论坛徽章:
0
4 [报告]
发表于 2014-06-18 15:25 |只看该作者
回复 1# humjb_1983


ls两个说的都对。。。

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

论坛徽章:
0
5 [报告]
发表于 2014-06-18 16:34 |只看该作者
1.第一次访问mmap区间时,会触发缺页流程,分配一个page cache,将pfn写pte里,然后显示的pte_mkdirty置该页为脏;
2.接下来用户态不管怎么写这个页,都写的是page cache的页;
3.回写线程,将脏页写回磁盘后,置pte无效,这样,下次用户态再访问mmap区间后,又回到流程1

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
6 [报告]
发表于 2014-06-18 17:41 |只看该作者
回复 5# chenyu105


完全正解, mmap后read, write 的内存其实就是page cache.
其实看看代码就明白了。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
7 [报告]
发表于 2014-06-18 20:12 |只看该作者
本帖最后由 asuka2001 于 2014-06-18 20:14 编辑

回复 5# chenyu105

1. page fault流程中在 __do_fault() @ mm/memory.c中看到有 pte_mkdirty(),不知道你是不是指这里?

__do_fault()
{
......
        if (likely(pte_same(*page_table, orig_pte))) {
                flush_icache_page(vma, page);
                entry = mk_pte(page, vma->vm_page_prot);
                if (flags & FAULT_FLAG_WRITE)
                        entry = maybe_mkwrite(pte_mkdirty(entry), vma);
......
}

3. 对 write back流程不熟悉,请教下 page write back的入口函数和 置pte无效的位置,万分感谢!
   

论坛徽章:
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
8 [报告]
发表于 2014-06-18 21:41 |只看该作者
感谢各位大拿!@塑料袋 @asuka2001 @chenyu105 @gaojl0728 @njuzhyf
其实我的最大疑问,就是:谁来置相关page为dirty,有兄弟说是mmu硬件置的(我看网上也有这个说法),但也有兄弟说是 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
9 [报告]
发表于 2014-06-18 21:43 |只看该作者
chenyu105 发表于 2014-06-18 16:34
1.第一次访问mmap区间时,会触发缺页流程,分配一个page cache,将pfn写pte里,然后显示的pte_mkdirty置该页 ...

确认是在page fault中设置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
10 [报告]
发表于 2014-06-18 21:46 |只看该作者
njuzhyf 发表于 2014-06-18 15:25
回复 1# humjb_1983

今天看了下代码,也是这么想的,但dirty标记设置的地方看似还有争议~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP