【问题标题】:MEM_SHARED, mmap, and hard linksMEM_SHARED、mmap 和硬链接
【发布时间】:2011-10-26 10:40:55
【问题描述】:

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

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

目录如下所示:

20110101143000  
.last

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

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

20110101143000  
20110622083000  
.last

然后我们删除 .last,并重新创建它以引用新文件。

我们的软件在这些更新期间持续运行,它使用 MAP_SHARED 映射 .last 文件。处理完文件后,软件可能会将其缓存几分钟而不是取消映射。在一台物理服务器上,有 12-24 个软件实例同时运行。不同的实例通常几乎同时映射同一个文件。我的问题是:

linux是使用文件名作为共享内存的key,还是使用inode?​​strong>

鉴于这种情况:

  1. proc A mmaps .last,并且不会取消映射
  2. 写入新文件,删除 .last,创建新的 .last 以链接新文件 文件
  3. proc B 映射新的 .last,但不会取消映射

如果 linux 使用 inode,那么 proc A 和 B 将看到映射到不同文件的不同内存块,这正是我们想要的。如果 linux 使用文件名,那么 A 和 B 都会看到映射到新文件的同一块内存。 B 很好,但是当 shard block 中的内存发生变化时,A 崩溃了。

有人知道它实际上是如何工作的吗?我要测试一下,但如果结果是基于名称的,除非有人知道技巧,否则我就完蛋了。

谢谢!

【问题讨论】:

    标签: linux shared-memory mmap inode hardlink


    【解决方案1】:

    它是 inode,至少有效。也就是说,一旦您从文件映射了一些页面,它们将继续引用该文件,并且不会因为文件系统中名称到文件的映射发生变化而改变。

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2023-03-24
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多