- 论坛徽章:
- 0
|
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设备的存储器地址的映射是谁来做的,这里是否有其它硬件规范,还是说纯用操作系统
实现?
迷惑了很久,急请高手解答! |
|