2011-08-13 9 views
1

共有メモリのキーがファイル名かiノードかどうかが疑問です。MEM_SHARED、mmap、およびハードリンク

私はYYYYMMDDHHMMSSという名前のファイルへの単なるハードリンクです.lastというファイルを、持っています。

ディレクトリには、次のようになります。

20110101143000 
.last 

.lastがちょうどハードしばらく20110101143000.

へのリンク、新しいファイルが作成されている

20110101143000 
20110622083000 
.last 

私たちは、その後、削除します.lastを作成し、それを再作成して新しいファイルを参照します。

継続的にこれらの更新時に実行されている当社のソフトウェアは、MAP_SHAREDと.lastファイルをmmaps。ファイルを処理すると、ソフトウェアはマップを解除するのではなく、数分間キャッシュすることがあります。物理サーバー上には、同時に実行されているソフトウェアのインスタンスが12〜24個あります。異なるインスタンスは、同じ時間に同じファイルをmmapすることがよくあります。私の質問は次のとおりです。

Linuxは、共有メモリへの鍵には、ファイル名を使用しない、またはそれは、iノードを使用していますか?このシナリオを考える

  1. PROC A mmaps .last、および
  2. 新しいファイルのマッピングを解除しませんが書き込まれ、.lastが削除され、新しい.lastが新しい をリンクするために作成されます
  3. のproc Bが新しい.lastをmmaps、およびLinuxはinodeを使用した場合は、プロシージャ・AとBはDIFにマップされたメモリの異なるブロックを見ることになるだろう

のマッピングを解除していないファイル私たちが望むものであることを示しています。 linuxがファイル名を使用すると、AとBの両方が新しいファイルにマップされた同じブロックを参照します。 Bは正常ですが、シャードブロック内のメモリが変更されるとAがクラッシュします。

誰もがそれが実際にどのように動作するか知っていますか?私はテストするつもりですが、それが名前ベースであることが判明した場合、誰かがトリックを知らない限り、私は嫌です。

ありがとうございます!

答えて

2

それは、少なくとも効果的に、iノードです。つまり、ファイルからいくつかのページをマップすると、そのファイルを参照し続け、ファイルシステム内のファイルへの名前のマッピングが変更されたために変更されません。