プロセス VS スレッド: 2 つのプロセスが同じ共有メモリを共有できますか? 2 つのスレッドは可能ですか? 質問する

プロセス VS スレッド: 2 つのプロセスが同じ共有メモリを共有できますか? 2 つのスレッドは可能ですか? 質問する

共有メモリの全体的な概念について考えた後、次のような疑問が浮かびました。

2 つのプロセスが同じ共有メモリ セグメントを共有できますか? 2 つのスレッドが同じ共有メモリを共有できますか?

もう少しよく考えてみると、2 つのプロセスが同じ共有メモリ セグメントを共有できることはほぼ確実です。最初のプロセスは父で、2 番目のプロセスは子であり、これは で作成されましたが、fork()2 つのスレッドの場合はどうなるのでしょうか。

ありがとう

ベストアンサー1

2 つのプロセスが同じ共有メモリ セグメントを共有できますか?

はい、いいえ。現代のオペレーティングシステムでは、通常、別のプロセスが分岐した最初から、それらは同じメモリ空間を共有していますコピーオンライトすべてのページに設定されます。読み取り/書き込みメモリ ページのいずれかに更新が行われると、そのページのコピーが作成されるため、コピーが 2 つ存在し、メモリ ページは親プロセスと子プロセス間で共有されなくなります。つまり、読み取り専用ページまたは書き込まれていないページのみが共有されます。

プロセスがない別からフォークされた場合、通常はメモリを共有しません。例外として、同じプログラムのインスタンスを2つ実行している場合は、メモリを共有することがあります。コードや静的データセグメントもただし、他のページは共有されません。また、一部のオペレーティング システムでは、複数のアプリケーションによって読み込まれる動的ライブラリのコード ページをアプリケーション間で共有できるようになっています。

もあります特定のメモリマップ呼び出し同じメモリ セグメントを共有します。呼び出しは、マップが読み取り専用か読み取り/書き込み可能かを指定します。これを行う方法は、OS に大きく依存します。

2 つのスレッドが同じ共有メモリを共有できますか?

もちろんです。通常、マルチスレッド プロセス内のすべてのメモリは、スレッドごとの比較的小さなスタック スペースを除いて、すべてのスレッドによって「共有」されます。通常、スレッドはすべて同じメモリ スペース内で実行されるというのがスレッドの定義です。

スレッドにはさらに複雑な点があり、キャッシュされたメモリセグメントプロセッサ/コアに結び付けられた高速メモリ。このキャッシュメモリはない共有され、メモリ ページの更新は同期操作に応じて中央ストレージにフラッシュされます。

おすすめ記事