进程内存的哪些部分可以交换?

进程内存的哪些部分可以交换?

我正在尝试了解有关 Linux 内核交换系统的更多信息。

我发现,如果内存中的 ar/o 或二进制文件的代码部分需要交换,则不应将其移动到交换文件/分区,因为它已经由磁盘中的文件支持。

它真的是这样工作的吗?文件支持的 r/o 或 rx 分配的页面被交换到专用文件吗?如果是这样,有人可以指出我处理这个问题的代码吗?我好像找不到

答案1

是的,就是这样。其内容在磁盘上可用的页面将被丢弃,它们甚至不需要交换到“专用文件”。具有非交换后备存储的脏页(例如、内存映射文件)被写出到该后备存储中。交换仅用于没有后备存储的可逐出页面。

大多数情况下,这是通过kswapd执行所谓的操作来处理的回收:

它将异步扫描内存页,如果它们包含的数据在其他地方可用,则释放它们,或者将其逐出到后备存储设备(还记得那些脏页吗?)。

mm/vmscan.c以便实施。

相关内容