共有メモリの全体的な概念について考えた後、次のような疑問が浮かびました。
2 つのプロセスが同じ共有メモリ セグメントを共有できますか? 2 つのスレッドが同じ共有メモリを共有できますか?
もう少しよく考えてみると、2 つのプロセスが同じ共有メモリ セグメントを共有できることはほぼ確実です。最初のプロセスは父で、2 番目のプロセスは子であり、これは で作成されましたが、fork()
2 つのスレッドの場合はどうなるのでしょうか。
ありがとう
ベストアンサー1
2 つのプロセスが同じ共有メモリ セグメントを共有できますか?
はい、いいえ。現代のオペレーティングシステムでは、通常、別のプロセスが分岐した最初から、それらは同じメモリ空間を共有していますコピーオンライトすべてのページに設定されます。読み取り/書き込みメモリ ページのいずれかに更新が行われると、そのページのコピーが作成されるため、コピーが 2 つ存在し、メモリ ページは親プロセスと子プロセス間で共有されなくなります。つまり、読み取り専用ページまたは書き込まれていないページのみが共有されます。
プロセスがない別からフォークされた場合、通常はメモリを共有しません。例外として、同じプログラムのインスタンスを2つ実行している場合は、メモリを共有することがあります。コードや静的データセグメントもただし、他のページは共有されません。また、一部のオペレーティング システムでは、複数のアプリケーションによって読み込まれる動的ライブラリのコード ページをアプリケーション間で共有できるようになっています。
もあります特定のメモリマップ呼び出し同じメモリ セグメントを共有します。呼び出しは、マップが読み取り専用か読み取り/書き込み可能かを指定します。これを行う方法は、OS に大きく依存します。
2 つのスレッドが同じ共有メモリを共有できますか?
もちろんです。通常、マルチスレッド プロセス内のすべてのメモリは、スレッドごとの比較的小さなスタック スペースを除いて、すべてのスレッドによって「共有」されます。通常、スレッドはすべて同じメモリ スペース内で実行されるというのがスレッドの定義です。
スレッドにはさらに複雑な点があり、キャッシュされたメモリセグメントプロセッサ/コアに結び付けられた高速メモリ。このキャッシュメモリはない共有され、メモリ ページの更新は同期操作に応じて中央ストレージにフラッシュされます。