【问题标题】:How is memory space kept different between processes?进程之间的内存空间如何保持不同?
【发布时间】:2019-02-15 07:08:46
【问题描述】:

进程之间的内存空间如何保持分离?

我很困惑这到底是如何工作的。就我所见,想想MMU和虚拟内存,

CPU 生成一个虚拟地址,然后将其映射到磁盘中的某个位置或 RAM 中的某个页面。但是内存空间究竟是如何分开的呢?

【问题讨论】:

  • 地址没有映射,被翻译成物理地址。要回答你不清楚的问题,那就是 CPU。
  • @Tony,是的,我的意思是它从虚拟/逻辑转换为物理。至于实际问题,您能否详细说明“CPU”的含义?我不明白内存空间是如何分开的
  • 在翻译过程中,每个条目会保留更多位。如果两个不同的进程将它们的页面映射到同一个槽,那么其中一个将设置他的位。所以他将无法访问该页面。除非他的页面被带入内存并且另一个页面被换出。

标签: memory pagination operating-system virtual-memory


【解决方案1】:

你在这里很困惑。操作系统维护页表,将逻辑页映射到物理页框。每个进程都会看到编号为 0 ... N 的逻辑页面,这些页面可能映射到也可能不映射到物理页框。 MMU 使用页表进行转换。

进程 X 可以访问页面 #2,进程 Y 可以访问页面 #2,但它们通常会映射到不同的物理页框。通过将相同的逻辑地址映射到不同的物理页,操作系统保持进程分离。

【讨论】:

  • 是的,我知道映射,但是每个进程都有自己的页表不是吗?所以进程 X 的第 2 页和进程 Y 的第 2 页不同。我的疑问是,内存究竟是如何保持独立的?意思是,寄存器、堆栈帧等是如何为进程分开的?
  • @BrijendarBakchodia 更改进程意味着提取寄存器的值并将它们保存在进程任务结构中。一旦该进程返回运行,它的值将从任务结构中读取并复制到寄存器,以便它从停止的地方继续。