并行运行时,每个进程是否都有自己的虚拟地址space?

Does each process have its own virtual address space when running in parallel?

在多处理器环境中,在给定的瞬间可能会有 运行 并行的进程。由于虚拟地址 space 分为用户 space 和内核 space,我假设在调度进程时它们可能会换入和换出 VAS。

但是当两个或多个进程运行并行时,它们有自己的VAS吗?至于每个处理器?还是所有并行进程共享同一个 VAS?

VAS-> 虚拟地址Space。

每个进程总是有自己的虚拟地址 space,并且该地址 space 将被执行该进程的任何处理器使用。特别是,不同的处理器可能同时使用不同的地址 space。

更具体地说,虚拟寻址是通过页面table实现的:内存中的一种结构,指定如何将虚拟地址转换为物理地址。内核将为每个进程维护一个单独的页面table。每个 CPU 都有自己的 页 table 寄存器 指向页 table 它应该在此刻用来转换地址。当调度程序选择 运行 在 CPU Y1 上处理 X1 时,部分 上下文切换 进程将让 CPU Y1 加载其页面 table 为进程 X1 注册一个指向页面 table 的指针。然后 CPU Y1 将有效地使用 X1 的虚拟地址 space 直到它执行另一个上下文切换。

其他 CPU 在此期间可能在做什么并没有什么区别。 CPU Y2 也可能正在使用 X1 页面 tables(如果它正在执行进程 X1 的另一个线程),或者它可能正在为进程使用一组完全不同的页面 tables X2。如果 X1 和 X2 使用共享内存或类似的东西,它们的页面 table 之间甚至可能重叠。