0

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

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

分页将页面(包含一段数据的小帧 - 通常为 4 KB,但在不同的操作系统之间可能会有所不同)从主内存移动到后端存储,总是作为操作系统的正常功能发生。交换将整个进程移动到存储中,并在系统内存紧张或在 Windows 8 上当新应用程序处于休眠状态时发生。

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

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

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

如果答案将特定于红帽企业 Linux 版本 6 和 7,而且关于所有 Linux 的一般答案将是好的,我将不胜感激。

提前致谢。

4

2 回答 2

3

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

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

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

swapon -s

man swapon了解更多信息。

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

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

于 2016-01-28T07:06:34.813 回答
1

尽管 Linux 保留了术语“交换分区”作为历史遗物,但它实际上执行了分页。所以你的期望得到了证实;你只是被古老的术语所迷惑。

于 2016-01-28T16:59:15.127 回答