それでは、これはどうなりますか?

それでは、これはどうなりますか?

私のRHEL7の出力によると、lsofファイル記述子を持つ1つのファイルがmem40のプロセスで使用されることがわかりました。これは、このファイルがメモリに約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によって処理されるため、プロセスに渡されません)(実際には分割エラーではなくページエラー)。どのインターフェイスがメモリまたはファイルを使用するかは問題ではありません。それらは同じ機能を持つインターフェイスです。

おすすめ記事