之前看了深入理解计算机系统,老师讲了讲虚拟内存的东西。
在我们在虚拟地址翻译成线性地址,再翻译成物理地址就可以简介访问内存,这个翻译的过程主要时应对多个进程能够使用同一虚拟地址,但是我想知道的就是,既然每个进程都有独立的虚拟地址空间,那当然可以用相同的虚拟地址,只是翻译成物理地址的时候翻译到了不同的物理地址
既然这样的话,为什么不直接使用物理地址呢,间接访问物理地址将虚拟地址翻译到不同地址,不还是不能使用相同的物理地址吗
而且想问的就是进程切换时,到底在虚拟内存和物理内存中是怎么实现de
之前看了深入理解计算机系统,老师讲了讲虚拟内存的东西。
在我们在虚拟地址翻译成线性地址,再翻译成物理地址就可以简介访问内存,这个翻译的过程主要时应对多个进程能够使用同一虚拟地址,但是我想知道的就是,既然每个进程都有独立的虚拟地址空间,那当然可以用相同的虚拟地址,只是翻译成物理地址的时候翻译到了不同的物理地址
既然这样的话,为什么不直接使用物理地址呢,间接访问物理地址将虚拟地址翻译到不同地址,不还是不能使用相同的物理地址吗
而且想问的就是进程切换时,到底在虚拟内存和物理内存中是怎么实现de
多个进程能够使用同一虚拟地址,不是物理地址。
这么做主要是为了进程内存地址隔离,如果进程可以直接访问物理地址,那么一个进程就可以访问、读取、修改另一个进程也可见的内存空间。
这样既不安全,也不可靠。
另外“翻译”这件事情听上去似乎费事,但是实际上,从Intel 386开始,页表转换都是硬件指令来做的,因此访问虚拟地址再转换到物理地址的开销,其实几乎完全相当于直接访问物理地址。
何乐而不为。