不可清除页面有什么特点?

What is specific to an unevictable page?

我正在浏览 ramfs 代码,对不可清除页面的概念感到困惑。

我一直在 Documentation/vm/unevictable-lru.txt 阅读内核文档和这个答案:

unevictable page

但它没有完全回答我的问题。它说内核"cannot touch it"或"cannot evict it",但那是什么意思?

我想无论如何,一旦页面被使用,它就不能被删除,直到它被自愿释放?或者这是否意味着它不能移动到 swap ?或者在 ram 之外是否涉及某种缓存,包含所有不可回收的页面?

构建自己的虚拟文件系统时,是否必须将 inode 标记为不可清除?

提前感谢您的回答。

在此上下文中,"evict" 表示重新调整页面的用途:即将其从现有用途中解放出来,并使其可用于其他用途。对于 user-space 进程使用的页面(除了您提到的例外情况),内核保留最近最少使用的页面排序列表。如果一个进程需要一个页面并且没有未使用的可用页面,内核将尝试驱逐最近最少使用的页面。这可能意味着:

  • 写入要交换的页面 space 如果变脏并且没有文件支持,
  • 如果它来自 mmap 文件(并且 锁定),则将其写出到文件中,
  • 只要 "dropping" 它是干净的并且已经是最新的 支持介质(例如,非脏页或干净的 executable 由磁盘上的 executable 文件支持的代码)

旧进程的相应页面 table 条目(页面被盗)然后被标记为不存在,物理页面现在可供新进程重新使用。

如果稍后,原始页面所属的进程(或进程)再次尝试访问它,这将导致页面不存在错误,并且进程重新开始,内核可能驱逐一些其他物理页面,读回数据等。

有些页面是 unevictable 原因如您所见:要么它们被用于内核数据,要么它们是 ramdisk 的一部分(将它们写入 swap 会破坏 ramdisk 的目的),或已被其他机制"manually"锁定。

您的文件系统可以像大多数文件系统一样实现 "address space handler" 协议(参见 Documentation/filesystems/vfs.txt),或者它可以以不会成为交换候选者的方式分配内存,取决于什么对您的特定功能最有意义。