页缺失

-{zh-cn:页缺失;zh-tw:分頁錯誤;}-(,又名硬错误硬中断-{zh-cn:分页错误;zh-tw:頁缺失;}-寻页缺失缺页中断页故障等)指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。

通常情况下,用于处理此中断的程序是操作系统的一部分。如果操作系统判断此次访问是有效的,那么操作系统会尝试将相关的分页从硬盘上的虚拟内存文件中调入内存。而如果访问是不被允许的,那么操作系统通常会结束相关的进程。

虽然其名为“页缺失”错误,但实际上这并不一定是一種错误。而且这一机制对于利用虚拟内存来增加程序可用内存空间的操作系统(比如Microsoft Windows和各种类Unix系统)中都是常见且有必要的。

微软在较新版Windows的资源监视器中使用“-{zh-cn:硬错误;zh-tw:硬體錯誤;}-”(Windows Vista及以上)、“-{zh-cn:硬中断;zh-tw:硬體中斷;}-”(Windows 8及以上)这一术语来指代“页缺失”。

分类
软性
软性页缺失指页缺失发生时,相关的页已经被加载进内存,但是没有向MMU注册的情况。操作系统只需要在MMU中注册相关页对应的物理地址即可。

硬性
与软性页缺失相反,硬性页缺失是指相关的页在页缺失发生时未被加载进内存的情况。这时操作系统需要:
#寻找到一个空闲的页。或者把另外一个使用中的页写到磁盘上(如果其在最后一次写入后发生了变化的话),并注销在MMU内的记录
#将数据读入被选定的页
#向MMU注册该页
硬性页缺失导致的性能损失是很大的。以一块7200rpm的主流机械硬盘为例,其平均寻道时间为8.5毫秒,读入内存需要0.05毫秒。相对的,DDR3内存的访问延迟通常在数十到100纳秒之间,性能差距可能会达到8万到22万倍。

另外,有些操作系统(如Linux)会将程序的一部分延迟到需要使用的时候再加载入内存执行,以此来提升性能。这一特性也是通过捕获硬性页缺失达到的。

当硬性页缺失过于频繁的发生时,称发生系統顛簸。

无效
当程序访问的虚拟地址是不存在于虚拟地址空间内的时候,则发生无效页缺失。一般来说这是个软件问题,但是也不排除硬件可能,比如因为内存故障而损坏了一个正确的指针。

具体动作与所使用的操作系统有关,比如Windows会使用异常机制向程序报告,而类Unix系统则会使用信号机制。如果程序未处理相关问题,那么操作系统会执行默认处理方式,通常是转储内存、终止相关的程序,然后向用户报告。

参考与延伸阅读
John L. Hennessy, David A. Patterson, Computer Architecture, A Quantitative Approach* (ISBN 1-55860-724-2)
Tanenbaum, Andrew S. Operating Systems: Design and Implementation (Second Edition)*. New Jersey: Prentice-Hall 1997.
*Intel Architecture Software Developer's Manual–Volume 3: System Programming

评论 (0)

  • 还没有评论,来抢沙发吧。