每个页面错误中都有磁盘访问吗?

时间:2020-08-18 11:32:40

标签: memory virtual-memory fragmentation page-fault

我的问题是(如上所述)每次出现页面错误时是否都可以访问磁盘/虚拟内存?

如果没有,在什么情况下没有磁盘访问权限?

(这是关于分页的一般性问题,与实现无关)

谢谢

1 个答案:

答案 0 :(得分:1)

在某些情况下,页面错误不会触发磁盘访问。

页面错误是当进程请求未由MMU(内存管理单元)映射到物理页面的虚拟地址时触发的异常。如果页面不在物理内存(RAM)中的任何位置,则虚拟地址有效,并且需要后备存储区(即磁盘)中存在的页面数据,页面错误处理程序将触发对磁盘的访问。这种情况通常被分类为硬页面错误主要页面错误

次要页面错误软页面错误期间,MMU未将请求的物理页面映射到进程的虚拟地址空间中,但没有磁盘访问权限出于某些可能的原因是必要的:

  • 该页面可能驻留在物理内存中,即使该进程未映射该页面。该页面可能是共享内存的一部分,并已由另一个进程映射,或者该页面当前无法被任何进程映射,但位于物理内存中,尚未写入磁盘或擦除。

    某些操作系统具有“working set”页的概念,这些页在给定时间为某个进程映射,并且将对可以作为工作集一部分的页数设置上限。当确定该进程的工作集变得太大时,可以将其从该进程的工作集中删除,但是在空闲页面列表中保持未修改的页面足够长,足以被请求并再次映射。

  • 页面错误也可以是需求零错误-通过在物理内存中分配一个空闲页面并将其内容设置为全0可以满足demand-zero fault,因此不需要磁盘访问。

在请求不属于虚拟地址空间的地址的情况下,也会触发页面错误,通常称为无效页面错误。例如,如果某个进程尝试引用NULL指针,则页面错误处理程序通常会触发分段错误。 (无效的页面错误不一定总是由于违反页面保护而发生-这只是一种情况的示例。

(我引用了the Wikipedia page for Page fault,因此肯定会推荐它作为对页面错误的简要介绍!)