【发布时间】:2020-12-07 14:04:32
【问题描述】:
我的问题是(如前所述)每次出现页面错误时是否可以访问磁盘/虚拟内存?
如果没有,什么情况下没有磁盘访问?
(这是一个关于分页的一般问题,与实现无关)
谢谢
【问题讨论】:
标签: memory virtual-memory fragmentation page-fault
我的问题是(如前所述)每次出现页面错误时是否可以访问磁盘/虚拟内存?
如果没有,什么情况下没有磁盘访问?
(这是一个关于分页的一般问题,与实现无关)
谢谢
【问题讨论】:
标签: memory virtual-memory fragmentation page-fault
在某些情况下,页面错误不会触发磁盘访问。
页面错误是当进程请求未由 MMU(内存管理单元)映射到物理页面的虚拟地址时触发的异常。如果页面不在物理内存 (RAM) 中的任何位置,虚拟地址是有效的,并且需要存在于后备存储(即磁盘)中的页面数据,则页面错误处理程序将触发对磁盘的访问。这种情况通常被归类为hard page fault或major page fault。
在minor page fault或soft page fault期间,请求的物理页面没有被MMU映射到进程的虚拟地址空间,但是没有磁盘访问是必要的,有几个可能的原因:
页面可以驻留在物理内存中,即使它没有被进程映射。该页面可能是共享内存的一部分并被另一个进程映射,或者该页面当前无法被任何进程映射,而是在物理内存中并且尚未写入磁盘或擦除。
某些操作系统具有“working set” 的概念,即在给定时间为进程映射的页面,并将设置可以成为工作集一部分的页面数量的上限。当确定进程的工作集变得太大时,可以从进程的工作集中移除页面,但在空闲页面列表中保持未修改的时间足以再次请求和映射。
页面错误也可能是零需求错误——demand-zero fault可以通过在物理内存中分配一个空闲页面并将其内容设置为全0来满足,因此没有磁盘访问必要的。
请求不属于虚拟地址空间的地址的情况也会触发页面错误,通常称为无效页面错误。例如,如果进程尝试引用 NULL 指针,则页面错误处理程序通常会触发分段错误。 (无效页面错误不一定总是由于违反页面保护而发生 - 这只是一种情况的任何示例)。
(我引用了the Wikipedia page for Page fault 并且肯定会推荐它作为对页面错误的简明介绍!)
【讨论】: