当前位置: 技术问答>linux和unix
在系统地址空间中,如何寻址?
来源: 互联网 发布时间:2016-01-10
本文导语: 1. 当用户进程通过系统调用进入系统空间后,如何寻址 2. 用户进程在运行的时候,我们知道每个地址需要MMU映射成物理地址,因此需要将存放该进程页面目录的地址放到 cr3 寄存器中. 当一个中断发生时,发生了调度,...
1. 当用户进程通过系统调用进入系统空间后,如何寻址
2. 用户进程在运行的时候,我们知道每个地址需要MMU映射成物理地址,因此需要将存放该进程页面目录的地址放到 cr3 寄存器中.
当一个中断发生时,发生了调度,调度程序选择了一个新的用户进程投入运行,在用户进程能够运行之前,需要做一些初始化工作,比如将该进程的页面目录地址装载到cr3寄存器中,类似应有如下代码:
movl 新的页面地址,cr3;
在运行上述代码后,此时cr3中装的是调度后待运行的进程的页面目录地址了,接下来由于在系统地址空间中的代码还没有运行完,因此需要继续运行,但此时如果还是使用MMU映射的话会出现问题,造成地址不连续了,因此我想问一下,在系统空间中代码运行的时候,寻址是否通过MMU映射,如果不是,那么是通过什么方式寻址的,难道将MMU关闭了?
2. 用户进程在运行的时候,我们知道每个地址需要MMU映射成物理地址,因此需要将存放该进程页面目录的地址放到 cr3 寄存器中.
当一个中断发生时,发生了调度,调度程序选择了一个新的用户进程投入运行,在用户进程能够运行之前,需要做一些初始化工作,比如将该进程的页面目录地址装载到cr3寄存器中,类似应有如下代码:
movl 新的页面地址,cr3;
在运行上述代码后,此时cr3中装的是调度后待运行的进程的页面目录地址了,接下来由于在系统地址空间中的代码还没有运行完,因此需要继续运行,但此时如果还是使用MMU映射的话会出现问题,造成地址不连续了,因此我想问一下,在系统空间中代码运行的时候,寻址是否通过MMU映射,如果不是,那么是通过什么方式寻址的,难道将MMU关闭了?
|
1. 不太清楚你这里所说的寻址具体是指什么,是内存地址?外设?还是其他?一般来说实际上核态和用户态的寻址最终均需要通过MMU处理(只要CPU有MMU)。
2. x86在进程切换*前*确实会有类似 movl 新的页表地址,cr3 的处理,新的页表地址即是新的进程的页表基地址。这一点不会有问题,因为此时CPU仍然在系统空间运行,而所有进程的页面目录中与系统空间相对应的目录项都指向相同的页面表,所以,不管换上哪一个进程的页面目录都一样,受影响的只是用户空间,系统空间的映射则永远不变。
pgd指向的位置;
3.那么.....既然要用到页表,那么谁将这3G以上的系统空间页表赋给CR3呢????
2. x86在进程切换*前*确实会有类似 movl 新的页表地址,cr3 的处理,新的页表地址即是新的进程的页表基地址。这一点不会有问题,因为此时CPU仍然在系统空间运行,而所有进程的页面目录中与系统空间相对应的目录项都指向相同的页面表,所以,不管换上哪一个进程的页面目录都一样,受影响的只是用户空间,系统空间的映射则永远不变。
pgd指向的位置;
3.那么.....既然要用到页表,那么谁将这3G以上的系统空间页表赋给CR3呢????