2016-09-28 9 views
0

プログラムは、最も緩やかな一貫性を持っていても、以前に書いたものを常に読み返すべきです。プログラムがcore1上で実行されていて、書き込みと後続の読み込みの間に別のcore2が移動したとしたら、OSとメモリサブシステムの責任は、読み込みが以前に書かれたものを返すかどうかです。プロセスがコアをジャンプするときにL1キャッシュがフラッシュされますか?

答えて

2

OSは、プログラムが表示されているすべてのCPU状態がコンテキストスイッチで正しく保存され、復元されることを保証する必要があります。

理論上、L1はフラッシュされなければならない。
実際にはこれはプラットフォームによって異なります。たとえば、x86アーキテクチャでcache coherencyMESIが適用され、すべてのCPUがキャッシュ内のメモリのコヒーレントなイメージを共有し、L1キャッシュがフラッシュされないためです。
ただし、他の種類のキャッシュ、たとえばTLBsをフラッシュする必要があります。

+0

基本的に、プロセスがコアをジャンプして書き込みを試みると、以前のコアのキャッシュラインがこのコアに移動し、以前のコアのラインが無効になりますか? – Saurabh

+0

各コアは、他のコアのリード/ライト要求をスヌープし、アクセス中のキャッシュラインがメモリに書き込まれた後で強制的にリトライすることができます。また、L3キャッシュ、a.k.a. LLCは通常、コア間で共有されます。 MESIに関するWikipediaの記事にはこれに関する詳細があります。 –

関連する問題