MEM_SHARED,mmap和硬链接

4

想知道共享内存的关键是文件名还是inode。

我有一个名为.last的文件,它只是指向一个名为YYYYMMDDHHMMSS的文件的硬链接。

目录结构如下:

20110101143000  
.last

.last只是指向20110101143000的硬链接。

一段时间后,创建了一个新文件。

20110101143000  
20110622083000  
.last

我们先删除.last文件,然后重新创建它以指向新文件。
我们的软件在这些更新期间一直在运行,并使用MAP_SHARED对.last文件进行映射。当完成一个文件时,该软件可能会将其缓存几分钟而不是取消映射。在物理服务器上,同时有12-24个软件实例正在运行。不同的实例通常在大约同一时间映射相同的文件。我的问题是:
Linux是否使用文件名作为共享内存的键,还是使用inode?
假设有如下场景:
1. proc A映射了.last,并且没有取消映射
2. 写入一个新文件,删除.last,并创建一个新的.last链接到新文件
3. proc B映射了新的.last,并且没有取消映射
如果Linux使用inode,则proc A和B将看到不同的内存块映射到不同的文件中,这正是我们想要的。如果Linux使用文件名,则A和B都将看到映射到新文件的相同内存块。B没有问题,但当共享块中的内存发生变化时,A会崩溃。
有人知道它实际上是如何工作的吗?我将进行测试,但如果结果是基于名称的,除非有人知道诀窍,否则我将无法解决。
谢谢!
1个回答

5

实际上,这是inode的作用。也就是说,一旦您将某些页面从文件映射到内存中,它们将继续引用该文件,并且不会因为在文件系统中名称映射发生更改而改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接