+ -
当前位置:首页 → 问答吧 → 阅读<<情景分析>>charpter 2 后的疑惑,求解~~

阅读<<情景分析>>charpter 2 后的疑惑,求解~~

时间:2010-08-04

来源:互联网

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设备的存储器地址的映射是谁来做的,这里是否有其它硬件规范,还是说纯用操作系统

实现?

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

作者: AlwenSong   发布时间: 2010-08-04

回复 AlwenSong


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

作者: snail_314   发布时间: 2010-08-04

热门下载

更多