进程的页表如何知道哪个页面被交换了?

进程的页表如何知道哪个页面被交换了?

我指的是这些链接:

当我们要查找的物理页位于交换区时的页表内容

linux在上下文切换后如何更新页表

内核如何寻址交换分区\文件上的交换内存页面?

我还是很困惑如何进程知道其页面之一是否被交换到辅助内存。

例子:

进程A1分配1帧物理内存,并对其进行写入。 PTE 中的预设位、修改位和最近位将设置为 1。

现在轮到进程 A2 - 它需要更多内存,并且MMU内核决定将进程 A1 的页面写入辅助内存,因为修改位已设置。

进程 A1 再次返回 - 恢复其上下文和 PT,现在准备好读/写其页面(假设当前位仍设置为 1)并将访问进程 A2 的页面。(?)

据我了解,该过程并不直接知道哪些页面位于何处以及 MMU 以某种方式知道某个页面位于辅助内存上 - 但不知何故必须修改进程 A1 的 PTE? MMU 或 PT 中必须有一些信息表明该页面现在已被换出并且必须从中恢复。编辑:即使 PT / PTE 在堆栈上,当前位也会更改为 0 吗?

答案1

进程不知道,内核知道。

MMU决定将进程A1的页面写入辅助内存

MMU 不会决定这一点,而是内核来做:如果 A2 需要更多内存,内核会被告知,并查找页面以提供给 A2。如果没有任何空闲,它将运行其页面回收。无论什么页面最终被驱逐到其后备存储中,它们的“当前”位都会被清除,无论它们“属于”哪个进程(如果有)——内核会跟踪此类信息。

当控制权交还给 A1 时,内核将使用内核拥有的信息来恢复 A1 的 PTE。因此,被逐出的页面的 PTE 当前位将被清除。如果 A1 访问这些页面之一,MMU 将出现故障,并且内核将再次介入以解决该情况。

相关内容