2017-05-15 7 views
2

プロセスが2つの整数(64ビット/ 8バイト)のサイズの共有メモリを作成したとしましょう。共有メモリに基づくアトミック変数は、プロセス間コンテキストでどのように機能しますか?

共有メモリは、プロセスのスレッドだけでなく、その共有メモリにアクセスできるシステム上の他のプロセスでも使用できます。

おそらく、最初のプロセスの共有メモリは仮想アドレス空間を介してアドレスされるため、1の整数に対してアトミック演算(cmp交換)が実行されると、最初に処理されたコンテキストの仮想アドレスが使用されます。

同時に別のプロセスが最初の整数で何らかのアトミック操作を実行している場合は、独自の仮想アドレス空間も使用します。

どのようなシステムが実際に実際の物理アドレスに変換し、非常に一般的なPOVからこの状況でCPUがどのようにアトミック性の保証を提供しますか?

+1

CPUが保証を提供しない可能性があるため、ターゲットOSを質問に追加するように編集することをお勧めします。 – user4581301

+1

@ user4581301は、プロセッサに実装されたアトミック操作ではありませんか? OSはどう変わるのですか? –

+0

**あなた自身の質問を好きではない** –

答えて

4
  1. 最新のCPUキャッシュは物理アドレスで動作します(通常、キャッシュは物理的にタグ付けされています)。基本的にこれは、同じ物理アドレスに変換された2つの異なるプロセス内の2つの仮想アドレスがCPUごとに1回だけキャッシュされることを意味します。

  2. 最新のCPUキャッシュは一貫性があります。つまり、システム内のすべてのCPUでキャッシュが同期されるため、すべてのCPUのキャッシュには同じデータが格納されます。インテルCPUでは通常MESI protocolが使用されます。

  3. 最新のCPUには書き込みバッファがあるため、メモリストアはキャッシュに到達するまでに時間がかかります。

ので、ビューの非常に一般的な観点から、現代​​のCPU上のアトミック操作は基本的に読み込み、アトミック操作が完了するまでCPU専用のキャッシュラインをロックしに直接変更を伝播CPU内のバッファリングを回避します。

+2

キャッシュに格納されているアドレスは物理的なアドレスであり、TLBはプロセスが使用する仮想アドレスから物理的なもの? –

+3

@MarteinTxz実際のCPUモデルに依存しますが、現代のCPUは事実上物理的にタグ付けされているため、キャッシュルックアップとTLBルックアップが同時に並行して行われます。 –

関連する問題