我指的是这些链接:
我还是很困惑如何进程知道其页面之一是否被交换到辅助内存。
例子:
进程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 将出现故障,并且内核将再次介入以解决该情况。