免费注册 查看新帖 |

Chinaunix

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

阅读<<情景分析>>charpter 2 后的疑惑,求解~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-04 10:24 |只看该作者 |倒序浏览
1.关于进程/线程切换时的页目录地址切换。
代码摘要如下:
..... switch_mm(....){
.....
     asm volatile("movl cr3 ......")
.....
}

<<情景分析>>的说法是因为此函数在内核态执行,保持简单的线性映射(+ - 3G).所以就算更改了cr3也不会影响到更改前后代码(指令)的执行位置。

在这我产生两点疑惑:
a)在内核态运行的时候映射是简单的线性映射,这是否意味着用户程序通过系统调用或者中断陷入内核的时候,os同时切换了cr3的页目录表的位置?

b)页面映射的机制是cpu强制提供的,除非把cr0的分页管理机制位关了,不然操作系统怎么可能做得到更改cr3前后代码执行位置不受影响呢?

2.关于I/O设备自身存储器到cpu 寻址空间的映射.
看完这章后产生两点疑惑~~~:
a)如果我有一块500MB显存的显卡,那内核的虚存空间不就直接被吃了500M ? 这样总线地址很快就不够用了啊。

b)从虚拟线性地址到内存总线物理地址的映射是由cpu的页面管理机制来做的,那内存总线物理地址到具体I/O设备的存储器地址的映射是谁来做的,这里是否有其它硬件规范,还是说纯用操作系统

实现?

迷惑了很久,急请高手解答!

论坛徽章:
0
2 [报告]
发表于 2010-08-04 13:23 |只看该作者
回复 1# AlwenSong


    回答第二个问题
1. 显卡板载显存500m,kernel/module是不会在内核地址空间去map它的;显存是让user mode driver去map的。如果要kernel driver去map,128m的vmalloc空间根本不够。
2. 你这个问题只有在基于pci等外设总线的情况下才会出现,也就是说常见的x86 pc架构,这个工作是由briage来做的,我们常说的NB(北桥)

论坛徽章:
0
3 [报告]
发表于 2010-08-05 08:53 |只看该作者
linux的地址空间是比较费时间去理解的
不同进程内核地址空间部分的页表是一样的,内核会维护他保持一样
地址空间你不管怎么映射,都要占用地址空间的,除非不是直接的地址访问

论坛徽章:
0
4 [报告]
发表于 2010-08-08 00:32 |只看该作者
非常感谢以上两位的解答,疑问已经一扫而空
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP