免费注册 查看新帖 |

Chinaunix

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

[内存管理] vmalloc时会不会page fault? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2016-11-25 20:19 |只看该作者
抱歉,好久没弄这个了,上面回答有错误,更正为vmalloc会发生page fault,但由于其目录表项和页表项已经分配,fault中只需将init mm中的页目录项拷贝到当前进程的对应的页目录项中。

论坛徽章:
0
12 [报告]
发表于 2016-11-26 10:49 |只看该作者
arm版本的fault处理在do_translation_fault函数中。

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
13 [报告]
发表于 2016-11-26 12:50 |只看该作者
回复 2# futex

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
14 [报告]
发表于 2016-11-28 09:30 |只看该作者
futex 发表于 2016-11-26 10:49
arm版本的fault处理在do_translation_fault函数中。

arm的内核页表和用户态页表是分开的
TBBR0和TBBR1, 所以arm应该不需要vmalloc pagefault

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2016-11-28 09:52 |只看该作者
回复 10# futex

不是很理解;系统启动时,init_mm 中的页目录初始化时都是invalid_pmd_table,
即 pgd[0] = pgd[1] = ..... = invalid_pmd_table。

如果进程A创建了地址:0xc0000000,那么pgd[0]由于是invalid_pmd_table,进程A肯定会创建pud/pmd;
此时进程B fork了,拷贝init_mm的页目录, 进程B自然能访问进程A创建的0xc0000000。
但是进程B此时创建了地址0xcffff000,显然会在 pgd[x](x>0)处创建自己的pud/pmd,然后进程B能够访问自己的0xcffff000。
但是由于进程A的pgd[x]处是invalid_pmd_table(因为进程A拷贝的是原始的init_mm),他会创建自己的pud/pmd,两者就不能共享0xcffff000,我的推算不对吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP