大量的页面错误与内存碎片有任何关系

High number of page faults has any relation to memory fragmentation?

本文关键字:内存碎片 任何 关系 错误      更新时间:2023-10-16

我想知道如果一个程序在任务管理器或进程资源管理器中显示大量(或系统中最高)页面错误,这是否是内存碎片的指示。还有其他方法可以揭示这类问题吗?(内存碎片)。因此,运行时出现大量页面错误的程序可能是由于数据不在RAM中,但操作系统经常中断从磁盘加载。一个可能的原因是内存碎片?我想知道这两件事是否相关

来源:维基百科:

分页的主要功能是在程序试图访问当前没有映射到物理内存(RAM)的页面时执行的。这种情况被称为页面错误。然后,操作系统必须以程序不可见的方式控制并处理页面错误。因此,操作系统必须:

确定数据在辅助存储器中的位置。获得一个RAM中的空页帧用作数据的容器。加载请求的数据放到可用的页框中。将页表更新为参考新的页面框架。将控制权交还给程序,透明地重试导致页面错误的指令。

因此,我认为碎片通常与页面错误无关。后者表明RAM内存已经满了,这个特定的程序比其他程序消耗更多的内存,所以他在交换区有更多的内存,所以每次他试图访问一个被操作系统交换出的页面时,就会发生页面错误,操作系统必须将这个页面加载到RAM中。

如果您在单个进程中试验此错误。如果你观察到相同的问题与所有的过程,这是鞭打的迹象。在这种情况下,物理内存量不足以容纳所有正在运行的进程,因此虚拟内存子系统在分页上花费的时间要多得多。因此,进程没有进展,因为每次发生页面错误时,进程都会失去CPU,必须等待,直到页面在RAM中准备好。

当你的内存映射包含几个不能满足新保留的小块,所以进程开始要求更多的内存来容纳它们时,通常会发生碎片。所以在这种情况下的症状是更高的内存使用或内存没有被释放到操作系统,即使程序已经完成了一些特定的任务,应该分配动态内存,做一些事情,然后释放它

大量的页面错误往往是由对驻留内存的高需求引起的。内存碎片可能是对驻留内存的高需求的潜在原因,但这不是我的第一个猜测。

也许这个问题只是需要那么多驻留内存。

也许这个问题需要那么多的虚拟内存,但是算法设计得很差(访问的局域性差),所以对驻留内存的需求比应该的要高。

也许程序编码不好,所以它使用了比它需要的更多的内存。

也许任务对驻留内存的需求是完全合理的(考虑到可用的物理内存),但微软的脑死亡内存管理算法正在无缘无故地产生压倒性的页面错误。

大多数页面错误是"软"错误,这意味着实际上不需要磁盘活动。操作系统在没有从物理内存中移除这些页面的情况下从任务中移除页面,作为测试任务真正需要哪些页面的一种手段,其长期目标是保持任务的"工作集"不增长(微软误用了"工作集"这个术语)。对于一个操作系统来说,这是所有必要和正确的行为。

但是当任务需要快速返回这些页面时,您会遇到软故障,操作系统会返回这些页面并带走其他页面,而不是意识到任务需要更高的总驻留内存,并且有足够的物理内存来容纳它。我在很多情况下看到,处理软故障的单线程内核CPU时间是长程序运行时间的90%或更多,而机器的大部分ram都是闲置的。