我发现显而易见的问题并且它是 ServerFault 上的大哥。
但我的问题完全不同:如果页面错误是操作系统需要从 SWAP 文件加载某些内容的时刻,那么为什么即使我完全停用它,也会出现页面错误?
或者我误解了页面错误是什么?
答案1
有点旧,但可以看看这MSDN 文章。
它描述了两种类型的页面错误。
硬故障就是你正在想的 - 这些数据不在 RAM 中,必须从交换文件中提取。它们会降低性能(比机械硬盘的 RAM 访问速度慢 10,000 倍)。
软故障但是,当程序请求将页面设为零(请求零页面)、第一次写入页面(如果是写入时复制页面)或页面已在内存中的其他位置(通常在多个进程之间共享时)时,会触发这些事件。这些事件对性能的影响并不大。
因此,您可以期待继续获得柔软的页面错误,即使没有页面文件。
答案2
您忽略的一点是,页面错误不一定涉及交换文件。您还可以对任意文件进行内存映射;也就是说,告诉操作系统使用给定文件(的一部分)备份内存区域。这意味着当程序访问该区域中尚未加载的内存页面时,它会从文件中的相应位置读取;并且当写入内存页面时(假设该区域可写),数据最终会写回到原始文件,而不是交换文件。
在现代操作系统中,此技术用于加载可执行代码(可执行文件和库),因此即使没有交换文件也应该会发生读取错误。