私のRHEL7の出力によると、lsof
ファイル記述子を持つ1つのファイルがmem
40のプロセスで使用されることがわかりました。これは、このファイルがメモリに約40回マッピングされたことを意味しますか?メモリマッピングファイルが何を意味するのかを説明できる人はいますか?私の記憶に40回があるという意味ですか?
#lsof/usr/lib/locale/locale-archive コマンドPIDユーザーFDタイプデバイスサイズ/終了ノード名 vmtoolsd 605 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive Agetty 656 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive 963 root mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive 調整 iostat 1199 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive chkMtaMem 1205 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive snmpd 4704 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive 省電力 5461 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive cmsubagt 6487 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive 省電力 6649 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc1 6803 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc2 6835 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc3 6836 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc4 6856 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc5 6884 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc6 6889 usr メモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc7 6893 usr1 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive cmfpagt 7704 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc8 7943 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive crond 8001 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive sh 8005 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive iostat 8014 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive crond 20427 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc9 20648 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc10 20649 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc10 20760 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc9 20777 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc11 21353 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc12 21354 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc13 21355 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc14 21356 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc15 21357 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc16 21358 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc17 21554 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc18 21569 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc19 21590 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc20 21647 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc21 22016 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc22 22017 ルートメモリ REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc23 22104 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive proc24 22122 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
ベストアンサー1
仮想メモリと物理メモリの違いを見てください。
多くのプロセスが同じ物理メモリをマッピングできます。 10個のプロセスが同じファイルをマップすると、最大1つのコピーがRAMにキャッシュされます。
メモリが共有されていない場合、あるプロセスでメモリを変更すると、書き込みがコミットされる前にこのページ(変更を含む)がコピーされます。 (したがって、すべてのメモリがコピーされるわけではありません。これをCOW(記録中コピー)といいます。)
メモリマッピングファイルは、オペレーティングシステムにファイルをメモリにマッピングするように要求する場合です。読み書きを開始するまでファイルをロードせず、次に必要なものだけをロードします。メモリマッピングは、読み取り/書き込み/検索などのための別のインターフェイスです。読み取り/書き込み/検索を介してメモリにアクセスすることもできます。
それでは、これはどうなりますか?
これは、いくつかの事項が同一であることを認識することによって行われる。つまり、スワップとファイルは同じで、ファイルキャッシュも同じです。したがって、ファイルを開くとスワップにマッピングされます(他のものをスワップするために使用されないので心配しないでください)。読み始めると、segfaultが作成され、OSがファイルをスワップします(例外はOSによって処理されるため、プロセスに渡されません)(実際には分割エラーではなくページエラー)。どのインターフェイスがメモリまたはファイルを使用するかは問題ではありません。それらは同じ機能を持つインターフェイスです。