1

在阅读页面错误异常处理程序如何处理页面错误和页面命中时,我不清楚一件事。如果一个进程正在使用共享页并且发生了页错误,那么当页错误异常处理程序为导致该页错误的进程更新页表中的页表条目时,它是否也会更新所有共享页中的页表条目?共享同一页面的其他进程?从我对该主题的阅读来看,它似乎只更新了页表中错误进程的页表条目,但是其他进程如何知道该页面已被调入?提前致谢!

4

1 回答 1

0

这是您在设计内存管理器时必须解决的问题之一。一种可能的设计是为每个可以共享的页面设置一个影子 PTE。当共享页面上的进程出现故障时,内存管理器会检查影子 PTE。如果影子 PTE 不是常驻的,它会以正常方式处理页面错误,当页面可用时更新错误进程 PTE 和影子 PTE。如果影子 PTE 是常驻的,那么它只是将影子 PTE 复制到进程 PTE。这样,进程 PTE 仅在进程实际接触页面时才会更新。我认为 Windows 就是这样做的——我对 Linux 的了解有限,

在此模型中,如果您有异步页面错误处理,则需要一些技巧,因为您需要处理另一个进程在页面错误进入时发生错误的情况。您还需要处理分页情况。在这种情况下,您需要检查在其工作集中包含该页面的每个进程并将其删除,这可能需要一些 IPI 和一些簿记。

于 2013-05-11T17:36:15.237 回答