Linux 如何为索引节点指定多个地址空间结构?
假设两个不同的进程分别打开两个不同的文件。通常,每个索引节点都有自己的索引节点,每个索引节点都有自己的Linux 如何为索引节点指定多个地址空间结构?,linux,linux-kernel,page-caching,Linux,Linux Kernel,Page Caching,假设两个不同的进程分别打开两个不同的文件。通常,每个索引节点都有自己的索引节点,每个索引节点都有自己的结构地址\u空间(这是一个能够记住页面缓存页面在内存中位置的人) 但是,假设我知道这些文件最初是相同的。我想提出一种尽可能实现智能共享缓存的方法 我在考虑这些策略: 将新字段添加到struct address\u空间struct:指向“父级”的指针。然后,每当我查找现有页面时,我也会查找父页面(如果存在)。因此,每当我写入一个页面时,我都需要出错并将该页面插入主地址空间。这两个文件将共享公共父文
结构地址\u空间
(这是一个能够记住页面缓存页面在内存中位置的人)
但是,假设我知道这些文件最初是相同的。我想提出一种尽可能实现智能共享缓存的方法
我在考虑这些策略:
struct address\u空间struct:指向“父级”的指针。然后,每当我查找现有页面时,我也会查找父页面(如果存在)。因此,每当我写入一个页面时,我都需要出错并将该页面插入主地址空间。这两个文件将共享公共父文件
struct address_space
集合进行分组。每当我查找现有页面时,都会搜索整个链接列表。不过,在这种情况下,不允许在朋友的地址空间中“查找”脏页。换句话说,如果页面变脏,它就不能再用作备份。在这种情况下,如果有人向文件写入数据,我需要解除地址空间的关联。我还需要一些C-O-W行为来维持这一点- 这些想法中的一个或两个都是正确的吗
- 我应该特别注意哪些事情
- 保留“相关”页面缓存的链接列表
,然后每次从磁盘读取时,更新每个打开的地址空间
结构。打开一个新的相关文件将不得不导致一个大的页表复制的事情发生,除了跳过任何脏页地址空间
struct文件
指向同一个inode
?如果它们是同一个inode,事情会自行解决的,是的。但在我的例子中,我有不同的索引节点,但文件内容相同。这是因为我有一个联合文件系统,我正在打开文件“rw”