只是想知道共享内存的关键是文件名还是 inode。
我有一个名为 .last 的文件,它只是指向名为 YYYYMMDDHHMMSS 的文件的硬链接。
一个目录如下所示:
20110101143000
.last
.last 只是到 20110101143000 的硬链接。
一段时间后,创建了一个新文件
20110101143000
20110622083000
.last
然后我们删除 .last,并重新创建它以引用新文件。
我们的软件在这些更新期间持续运行,使用 MAP_SHARED 映射 .last 文件。处理完文件后,软件可能会将其缓存几分钟而不是取消映射。在一台物理服务器上,有 12-24 个软件实例同时运行。不同的实例通常几乎同时映射同一个文件。我的问题是:
linux 是使用文件名作为共享内存的键,还是使用 inode?
鉴于这种情况:
- proc A mmaps .last,并且不会取消映射
- 写入一个新文件,删除 .last,创建一个新的 .last 以链接新文件
- proc B 映射新的.last,并且不取消映射
如果 linux 使用 inode,那么 proc A 和 B 将看到不同的内存块映射到不同的文件,这正是我们想要的。如果 linux 使用文件名,那么 A 和 B 都会看到映射到新文件的同一块内存。B 很好,但是当分片块中的内存发生变化时,A 会崩溃。
有人知道它实际上是如何工作的吗?我要测试,但如果它是基于名称的,除非有人知道技巧,否则我会被搞砸。
谢谢!