Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 不可获胜页面的特定内容是什么?_Memory_Memory Management_Linux Kernel_Filesystems_Kernel - Fatal编程技术网

Memory 不可获胜页面的特定内容是什么?

Memory 不可获胜页面的特定内容是什么?,memory,memory-management,linux-kernel,filesystems,kernel,Memory,Memory Management,Linux Kernel,Filesystems,Kernel,我正在浏览ramfs代码,对不可战胜页面的概念感到困惑 我在documentation/vm/unevictable-lru.txt上阅读了内核的文档,并给出了以下答案: 但它并没有完全回答我的问题。它说内核“不能触摸它”或“不能驱逐它”,但这意味着什么 我想,不管怎样,一旦一个页面被使用,它不能被删除,直到它被自愿释放?或者这是否意味着不能将其移动到交换?或者在ram之外是否有某种缓存,包含所有不可访问的页面 在构建自己的虚拟文件系统时,是否必须将索引节点标记为不可战胜 提前感谢您的回答。在

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

我在documentation/vm/unevictable-lru.txt上阅读了内核的文档,并给出了以下答案:

但它并没有完全回答我的问题。它说内核“不能触摸它”或“不能驱逐它”,但这意味着什么

我想,不管怎样,一旦一个页面被使用,它不能被删除,直到它被自愿释放?或者这是否意味着不能将其移动到交换?或者在ram之外是否有某种缓存,包含所有不可访问的页面

在构建自己的虚拟文件系统时,是否必须将索引节点标记为不可战胜

提前感谢您的回答。

在此上下文中,“收回”意味着重新调整页面的用途:即将其从现有用途中释放出来,并使其可用于其他用途。对于用户空间进程使用的页面(您注意到的例外情况除外),内核保留最近使用最少的页面的有序列表。如果进程需要一个页面,并且没有未使用的页面可用,内核将尝试退出最近使用最少的页面。这意味着:

  • 如果页面脏且没有文件支持,则写入页面以交换空间
  • 如果它来自mmap文件(且未锁定),则将其写入文件
  • 如果它是干净的,并且已经是最新的,就把它“扔掉” 支持介质(例如,非脏页或干净的可执行文件 由磁盘上可执行文件支持的代码)
然后,旧进程(从中窃取页面)的相应页面表条目被标记为不存在,物理页面现在可供新进程重新使用

如果在以后的某个时间,原始页面所属的一个或多个进程再次尝试访问它,这将导致不存在页面错误,并且该进程将重新启动,内核可能会逐出一些其他物理页面,读回数据,等等

由于您所看到的原因,某些页面是不可修改的:要么它们被用于内核数据,要么它们是ramdisk的一部分(写入这些页面以交换将破坏ramdisk的用途),要么它们被其他机制“手动”锁定在适当的位置

您的文件系统可以像大多数文件系统一样实现“地址空间处理程序”协议(请参阅Documentation/filesystems/vfs.txt),也可以根据对您的特定功能最有意义的内容,以这样的方式分配内存,使它们不会成为交换候选