【问题标题】:What is specific to an unevictable page?不可撤销页面的具体内容是什么?
【发布时间】:2015-09-02 16:30:15
【问题描述】:
我正在浏览 ramfs 代码,对不可撤销页面的概念感到困惑。
我一直在 Documentation/vm/unevictable-lru.txt 阅读内核文档和这个答案:
unevictable page
但它并没有完全回答我的问题。它说内核“无法触摸它”或“无法驱逐它”,但这是什么意思?
我想无论如何,一旦一个页面被使用,它就不能被删除,直到它被自愿发布?或者这是否意味着它不能被移动到交换?或者是否有某种类型的缓存,在 ram 之外,包含所有不可撤销的页面?
在构建我自己的虚拟文件系统时,我是否必须将我的 inode 标记为不可删除?
提前感谢您的回答。
【问题讨论】:
标签:
memory
memory-management
linux-kernel
filesystems
kernel
【解决方案1】:
在这种情况下,“驱逐”意味着重新调整页面的用途:即将其从现有用途中释放出来,使其可用于其他用途。对于用户空间进程使用的页面(除了您提到的例外情况),内核保留最近最少使用的有序页面列表。如果一个进程需要一个页面并且没有可用的页面,内核将尝试驱逐最近最少使用的页面。这可能意味着:
- 如果页面脏了且没有文件支持,则将页面写入交换空间,
- 如果它来自 mmap'd 文件(并且未锁定),则将其写入文件,
- 如果它是干净的并且已经是最新的,只需“丢弃”它
支持介质(例如,非脏页或干净的可执行文件
由磁盘上的可执行文件支持的代码)
然后将旧进程(从中窃取页面)的相应页表条目标记为不存在,并且该物理页现在可供新进程重用。
如果稍后,原始页面所属的进程(或多个进程)尝试再次访问它,这将导致不存在的页面错误,并且该进程重新开始,内核可能会驱逐其他一些物理页面,读回数据等。
由于您看到的原因,某些页面是不可撤销的:它们要么被用于内核数据,要么它们是 ramdisk 的一部分(将这些页面写入交换会破坏 ramdisk 的用途),或者已被“手动”锁定通过其他一些机制到位。
您的文件系统可以像大多数文件系统一样实现“地址空间处理程序”协议(参见 Documentation/filesystems/vfs.txt),或者它可以分配内存以使其不会成为交换对象,具体取决于什么对您的特定功能最有意义。