没有交换文件的页面错误?

Bob*_*bby 3 swap windows-xp

我发现了一个明显的问题也是ServerFault 的大哥

但我的问题完全不同:如果页面错误是操作系统需要从 SWAP 文件加载某些内容的时刻,为什么即使我已经完全停用它,我也会收到页面错误?

或者我误解了什么是页面错误?

LaC*_*LaC 7

您缺少的一点是页面错误不一定涉及交换文件。您还可以内存映射任意文件;也就是说,告诉操作系统使用给定文件的(一部分)支持内存区域。这意味着当程序访问该区域中尚未加载的内存页面时,它会从文件中的相应位置读取;并且当一个内存页被写入时(假设该区域是可写的),数据最终会被写回原始文件,而不是交换区。

在现代操作系统中,此技术用于加载(可执行文件和库的)可执行代码,因此即使没有交换文件,您也应该预期会发生读取错误。


DMA*_*361 5

有点旧,但请查看这篇MSDN 文章。

它描述了两种类型的页面错误。

硬故障就是您所想到的 - 这些是数据不在 RAM 中并且必须从交换文件中提取的地方。它们削弱了性能(比机械硬盘驱动器的 RAM 访问慢 10 000 倍)。

然而,软错误是由程序请求为零的页面(要求零页面)触发的,当页面第一次写入时(如果它是写入页面上的副本)或页面已经在内存中其他地方(通常在多个进程之间共享时)。这些对性能来说并不是那么糟糕。

因此,即使没有页面文件,您也可能会不断出现页面错误。

  • Windows 确实需要对可执行文件和库进行分页——只是它们中的许多也决定在开始时也吸收大量其他资源。此外,像 UPX 这样的 exe 压缩程序会破坏需求分页,因为现在 UPX 存根必须在加载器被触发之前将整个可执行文件解压到 RAM 中。 (4认同)

归档时间:

查看次数:

1130 次

最近记录:

14 年,9 月 前