虚拟内存如何隔离不同的进程?

How Virtual Memory isolate different processes?

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

当系统处于进程A时,CPU生成一个虚拟地址,比方说0x800000。 并且它通过上下文切换切换到进程 B,CPU 也生成相同的虚拟地址 0x800000。 因此,如果我们向页面写入内容,OS 怎么知道需要修改的应该是进程 B 中的页面而不是进程 A?

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

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

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