在多处理器环境中,可能有多个进程在给定时刻并行运行。由于虚拟地址空间分为用户空间和内核空间,我假设在调度进程时,它们可能会被交换进出VAS。
但是当两个或多个进程并行运行时,它们有自己的花瓶吗?对于每个处理器?还是所有并行进程共享相同的VAS?
血管→虚拟地址空间。
每个进程总是有自己的虚拟地址空间,并且该地址空间将被执行该进程的任何处理器使用。特别是,不同的处理器可能同时使用不同的地址空间。
更具体地说,虚拟寻址是通过页表实现的:页表是内存中的一种结构,指定如何将虚拟地址转换为物理地址。内核将为每个进程维护一个单独的页表。每个CPU都有自己的页表寄存器,它指向当前应该用来转换地址的页表。当调度器选择在CPU Y1上运行进程X1时,上下文切换进程的一部分将是让CPU Y1用指向进程X1页表的指针加载其页表寄存器。然后CPU Y1将有效地使用X1的虚拟地址空间,直到它执行另一个上下文切换。在这段时间内其他cpu可能在做什么没有区别。CPU Y2也可能使用X1页表(如果它正在执行进程X1的另一个线程),或者它可能为进程X2使用一组完全不同的页表。如果X1和X2使用共享内存或诸如此类的东西,它们的页表之间甚至可能存在重叠。