例如,如果有 3 个进程,每个进程都使用0x400000
文本部分的虚拟地址。并且用户进程只有一个4KB
物理页面。
假设进程 0 正在使用物理页面(虚拟地址0x400000
)。假设物理页数据为page_pid_0_0x400000
。
当操作系统调度进程 1 时page_pid_1_0x400000
,进程 1 将从可执行文件加载到物理页面中。然后page_pid_0_0x400000
应该将数据换出到磁盘。
当进程 2 也被加载时,page_pid_2_0x400000
物理页面上的数据也应该被换出到磁盘。
现在,在磁盘上,我们有相同虚拟地址空间的 2 个副本,即0x400000
:page_pid_1_0x400000
和page_pid_0_0x400000
.
如果现在调度进程 1,我(操作系统)如何识别page_pid_1_0x400000
来自虚拟地址0x400000
(因为内存访问指令只知道虚拟地址0x400000
而不知道进程 ID)?