免费注册 查看新帖 |

Chinaunix

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

[内存管理] 请问内核系统空间的页面映射与CR3、MMU的关系? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-02 13:23 |只看该作者 |倒序浏览
《Linux内核源代码情景分析》一书中,内存管理一章有描述:
switch_mm(...) {
...
asm volatile("movl %0,%%cr3": :"r" (__pa(next->pgd)));
...
}
书上题了个问题:这一行代码前后,CR3改变了,就是页面目录改变了,那样代码执行不连续了?
然后解释:这是因为进入内核就是进入系统空间,所有进程的页面映射相同,所以没有问题。
对上面的话,我不是很理解,既然页面映射是由MMU单元硬件来完成的,内核空间的映射,也一样的受MMU运算管控,那么修改CR3就修改了页目录地址,MMU就映射线性地址到不同物理地址去了呀。

盼指导,谢谢!

论坛徽章:
0
2 [报告]
发表于 2013-01-02 14:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2013-01-03 21:51 |只看该作者
硬件干活肯定要MMU的,由于切换前后不同进程内核空间映射一致,不用管从前一个进程取的流水线,执行完这话后是否会主动丢弃(一般不会主动丢吧,需要程序员主动nop....),如果丢弃,当然从新的进程重新取,反正结果都是一致的。因为映射一致,取到随后译码执行的指令肯定也是一致的。

当然,内核空间存在cache里的那一部分也可以继续用。

个人理解,错了请指正。

论坛徽章:
0
4 [报告]
发表于 2013-01-04 17:41 |只看该作者
每个进程都有各自的页目录表,每个进程页目录表内核空间地址范围0xc000 0000 - 0xffff ffff的映射都是相同的,它们都是复制祖先-进程0的页目录表而来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP