假设 RAM 被 100% 使用,其中一些被磁盘缓存使用,一些被应用程序使用。有足够的交换空间(在可用的硬盘上)。如果 Linux 决定驱逐包含应用程序数据的页面,它将被移动到交换空间。
但是,如果 Linux 决定驱逐 RAM 中包含缓存磁盘数据的页面,它是否会将该页面移至交换区,或者干脆将其删除?
答案1
TL;DR 如果页面是磁盘读取的缓存,则它永远不会进行交换。
你的问题表明你已经知道交换是如何工作的(或者更确切地说 - 虚拟内存是如何工作的)。现在理解磁盘缓存的简单关键步骤是注意它是在确切地一样的方法。没有“应用程序数据”和“磁盘缓存”,它只是单一的虚拟内存机制。
每个页面都支持永久存储:您也可以声明“/var/spool/mail/root 支持此页面”,而不是将该页面声明为“磁盘缓存”。您还可以声明“此页面受交换空间支持”(又名“它是匿名的”=任何命名文件都不支持),而不是将该页面声明为“应用程序内存”。
如果页面是脏的,则需要将其保存到自己的永久存储中 - 如果它是命名文件或交换空间,则独立。如果页面不是脏的,则根据定义意味着完全相同的字节已经存在于页面的永久存储中。无需执行任何操作 - 操作系统可以在任何认为合适的时候重新使用此页面。
我在这里所说的“支持”属性,人们大多称之为内存映射,而我在这里描述的实际上是如何mmap
工作的。