%3A%20MAP_SHARED%20%E3%83%95%E3%83%A9%E3%82%B0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E9%98%B2%E6%AD%A2%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
私が理解したところ、mmap()の "MAP_SHARED"フラグは、プロセスによってメモリマップに加えられたすべての変更を他のプロセスとすぐに共有し、最終的に変更をファイルに書き戻します。メモリ内の変更を他のプロセスと共有しますが、変更をファイルに書き換えることはできませんか?新しい種類のフラグが必要ですか?これらのフラグ(「MAP_SHARED_NOT_WRITE_BACK」など)を実装するのはどれほど複雑ですか?
==========================================
次に追加:思い浮かぶユースケース:プロセスㅏmmapは共有ライブラリfoo.soのコードセグメントであり、コード(暗号化コードなど)を変更します。別のプロセスが欲しい第二、氏後で作成して使用してくださいfoo.so変更されたコードを共有します。ただし、変更が再記録されることは望ましくありません。foo.so文書。私は複数のプロセスと多くの共有ライブラリで動作するスケーラブルなソリューションを好みます。
答え1
長すぎます; dr; RAMにのみ存在するファイルを使用する必要があります。
memfd_create(2)
Linuxと同様に、ファイルシステムはファイルシステムを介してファイルを開いて返されるファイルですtmpfs
[1]。
この場合、メモリは交換通常のファイルまたはデバイスの代わりに - 交換が設定されている場合。ファイルが大きいと、システムにストレスを与え、パフォーマンスが著しく低下するため、何の利点もありません。
注:「秘密」が誤って永続ストレージに書き込まれることが心配な場合は、システムで使用できる暗号化ストレージソリューションが何であるかをよりよく理解してください。
[1]shm_open(3)
単に/dev/shm
。