【问题标题】:Is there a disk access in every page fault?每个页面错误都有磁盘访问吗?
【发布时间】:2020-12-07 14:04:32
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: memory virtual-memory fragmentation page-fault


    【解决方案1】:

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

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

    minor page faultsoft page fault期间,请求的物理页面没有被MMU映射到进程的虚拟地址空间,但是没有磁盘访问是必要的,有几个可能的原因:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2010-10-20
      • 2011-05-23
      • 1970-01-01
      • 2019-03-20
      • 2014-10-06
      相关资源
      最近更新 更多