Linux 有页面文件吗?

Does Linux have a page file?

我在几个地方发现 Linux 使用页面和分页机制,但我没有找到这个文件的位置或如何配置它。

我找到的所有信息都是关于 Linux 交换文件/分区的。分页和交换有区别:

分页将页面(一个包含一段数据的小框架 - 通常为 4 KB,但可以在不同 OS 之间变化)从主内存移动到后端存储,总是作为操作系统。 交换将整个进程移至存储,并在系统内存紧张或 windows 8 新应用程序休眠时发生。

Linux 是否在这两种情况下都使用它的交换文件/分区? 如果是这样,我怎么能看到当前有多少页被调出? vmstat、free 或 swapon 命令中没有此信息(或者我没有看到)。

或者是否有其他文件用于分页? 如果是这样,我该如何配置它(并观察它的使用情况)?

或者 Linux 根本不使用分页,我被误导了?

如果答案是特定于 red hat enterprise Linux 版本 6 和 7,但也可以提供关于所有 Linux 的一般性答案,我将不胜感激。

提前致谢。

在 Linux,交换分区用于分页。

Linux 不会通过换出整个进程来应对内存压力。虚拟内存系统确实需要一页一页地进行分页。在极端的内存压力下,一个或多个进程将被 OOM killer 杀死。 (在 man malloc 的第一个注释中有一些有用的文档链接)

top header 中有一行显示交换分区的使用情况,但如果这就是您想要的全部信息,请使用

swapon -s

man swapon 了解更多信息。

交换分区使用量与未映射页数不同。使用 mmap 调用,页面可能 memory-mapped 到文件;由于该页面在文件中有后备存储,因此无需将其也写入交换分区,系统不会为此使用交换 space。但是交换分区使用情况是一个很好的指标。

另请注意,Linux(与 Windows 不同)在分配页面时不会为页面分配交换 space。相反,它会将新页面添加到虚拟内存映射中,而无需任何后备存储。并在页面需要换出时分配交换空间space。结果(如前面引用的 malloc 联机帮助页中所述)是 malloc 调用可能会成功分配虚拟内存,但随后尝试使用该虚拟内存可能会失败。

虽然Linux保留了'swap partition'这个词作为历史遗迹,但实际上是进行分页的。所以你的期望得到了证实;你只是被陈旧的术语所迷惑。