【问题标题】:How Virtual Memory isolate different processes?虚拟内存如何隔离不同的进程?
【发布时间】:2019-04-28 16:46:27
【问题描述】:

假设我有两个进程,进程 A 和进程 B

当系统处于进程 A 中时,CPU 会生成一个虚拟地址,比如说 0x800000。 它通过上下文切换切换到进程B,CPU也生成了相同的虚拟地址0x800000。 所以如果我们在页面上写一些东西,操作系统怎么知道它应该是进程 B 中的一个页面,而不是进程 A?

【问题讨论】:

标签: linux operating-system virtual-memory


【解决方案1】:

分离进程的是逻辑记忆翻译;不是虚拟内存。

进程看到逻辑内存地址并且无法访问底层物理内存。每个进程都有表格告诉 CPU 如何将逻辑地址转换为物理地址。操作系统维护这些表。

使用受保护的硬件寄存器标识表的位置。当进程 A 退出而进程 B 进入时,操作系统(由底层硬件协助)更改寄存器的值,以便使用 B 的表。在那之后, 逻辑地址 0X800000 不再指向“A”的物理内存位置,而是指向“B”。

【讨论】:

  • 你的意思是页表通过改变页表基址寄存器来控制使用哪个虚拟进程?
  • 进程上下文由多个寄存器值定义。这些包括程序可以直接访问受保护系统寄存器的通用寄存器。随进程变化的不是单个寄存器,而是多个寄存器。这些寄存器中的一个或多个将指定页表。所涉及的寄存器数量完全取决于系统。
  • 谢谢你,我明白了。你也可以看看这个问题吗? stackoverflow.com/questions/53492168/…
猜你喜欢
  • 2013-12-13
  • 1970-01-01
  • 2012-04-03
  • 2020-05-21
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多