2011-08-13 96 views
1

想知道共享內存的密鑰是文件名還是inode。MEM_SHARED,mmap和硬鏈接

我有一個名爲.last的文件,它只是一個名爲YYYYMMDDHHMMSS的文件的硬鏈接。

目錄如下:

20110101143000 
.last 

。去年僅僅是一個硬鏈接20110101143000.

一段時間後,會創建一個新的文件

20110101143000 
20110622083000 
.last 

然後,我們刪.last,然後重新創建它以引用新文件。

我們的軟件在這些更新過程中不斷運行,它使用MAP_SHARED對.last文件進行映射。當完成一個文件時,軟件可能會將其緩存幾分鐘而不是取消映射。在物理服務器上,同時運行12-24個軟件實例。不同的實例經常在大致相同的時間映射相同的文件。我的問題是:

Linux是否使用文件名鍵入共享內存,或者它使用inode?

鑑於這種情況:

  1. PROC A mmaps。去年,並沒有取消映射
  2. 的新文件寫入,。去年被刪除,一個新的。去年創建鏈接新 文件
  3. PROC B mmaps新。去年,不取消映射

如果Linux中使用的索引節點,然後PROC A和B將被看到映射到DIF的存儲器的不同塊不同的文件,這是我們想要的。如果linux使用文件名,那麼A和B都會看到映射到新文件的相同內存塊。 B很好,但當分片塊中的內存發生變化時,A會崩潰。

任何人都知道它是如何工作的?我要去測試,但如果事實證明是基於名稱的話,我就會被搞砸,除非有人知道一個竅門。

謝謝!

回答

2

這是inode,至少有效。也就是說,一旦你從一個文件映射了一些頁面,他們將繼續引用該文件,並且不會因爲文件系統中名稱到文件的映射更改而改變。