【问题标题】:Two Processes in Virtual Memory虚拟内存中的两个进程
【发布时间】:2012-01-24 21:39:02
【问题描述】:
我已阅读有关虚拟内存的信息。我有一个疑问。假设有两个进程 P 和 Q 。两者都将具有相同的虚拟内存寻址。他们都有自己的页表。会有一个系统范围的页表。那么如果我们使用系统范围的页表,那么这两个进程在RAM上是如何区分的呢?
【问题讨论】:
标签:
c
linux
unix
operating-system
【解决方案1】:
每个进程都有一个虚拟地址空间,该地址空间映射到物理内存,但通常也可以虚拟化到磁盘。
【解决方案2】:
这是因为虚拟地址分为用户空间和内核空间。启动过程启动后,分页单元被启用,它突然跳转到内核空间虚拟地址,最后将控制权交给用户空间。系统范围的页表是供内核使用的,每个进程都有自己的页表。
进入内核时使用内核页表,切换回用户时使用用户进程页表。
每个进程都有自己的页表,从而区分两个进程
【解决方案3】:
如果有一个系统范围的页表一直在使用,那么这是行不通的,因为只有一个虚拟映射,并且 2 个进程会互相占用对方的内存。
*nix 系统为每个进程保留一个页表(简单地说),并在内核调度进程运行时在这些页表之间切换。这样每个进程都可以将相同的虚拟地址映射到不同的物理地址,没有问题。