【发布时间】:2019-04-28 16:46:27
【问题描述】:
假设我有两个进程,进程 A 和进程 B
当系统处于进程 A 中时,CPU 会生成一个虚拟地址,比如说 0x800000。 它通过上下文切换切换到进程B,CPU也生成了相同的虚拟地址0x800000。 所以如果我们在页面上写一些东西,操作系统怎么知道它应该是进程 B 中的一个页面,而不是进程 A?
【问题讨论】:
标签: linux operating-system virtual-memory
假设我有两个进程,进程 A 和进程 B
当系统处于进程 A 中时,CPU 会生成一个虚拟地址,比如说 0x800000。 它通过上下文切换切换到进程B,CPU也生成了相同的虚拟地址0x800000。 所以如果我们在页面上写一些东西,操作系统怎么知道它应该是进程 B 中的一个页面,而不是进程 A?
【问题讨论】:
标签: linux operating-system virtual-memory
分离进程的是逻辑记忆翻译;不是虚拟内存。
进程看到逻辑内存地址并且无法访问底层物理内存。每个进程都有表格告诉 CPU 如何将逻辑地址转换为物理地址。操作系统维护这些表。
使用受保护的硬件寄存器标识表的位置。当进程 A 退出而进程 B 进入时,操作系统(由底层硬件协助)更改寄存器的值,以便使用 B 的表。在那之后, 逻辑地址 0X800000 不再指向“A”的物理内存位置,而是指向“B”。
【讨论】: