回答:
CPUに2つのコアがあり、各コアが独自のL1キャッシュを持っている場合、Core1とCore2がメモリの同じ部分を同時にキャッシュすることは可能ですか?
はい。そうでない場合、パフォーマンスはひどいものになります。同じコードを実行する2つのスレッドを検討してください。両方のL1キャッシュにそのコードが必要です。
可能であれば、Core1とCore2の両方がキャッシュ内の値を編集した場合、メインメモリの値はどうなりますか?
古い値はメインメモリにありますが、どちらのCPUもそれを読み取らないため、これは問題になりません。変更した値をキャッシュから取り出す前に、メモリに書き込む必要があります。通常、MESIプロトコルのいくつかのバリアントが使用されます。MESIの従来の実装では、1つのキャッシュで値が変更された場合、同じレベルの他のキャッシュに値が存在することはありません。
はい、これは(2つのキャッシュが同じメモリ領域をキャッシュすることで)発生する可能性がありますが、実際には実際に多く発生する問題です。たとえば、次のようなさまざまなソリューションがあります。
この問題は、キャッシュの一貫性と呼ばれます。このトピックに関するウィキペディアの記事には、問題の概要と可能な解決策が記載されています。
タイトルの質問に答えるには、キャッシングプロトコルが何であるかによって異なります。ライトバックの場合、キャッシュコントローラーが既に占有されているスペースに新しいキャッシュブロックを配置する以外に選択肢がない場合にのみ、キャッシュはメインメモリにフラッシュバックされます。以前にスペースを占有していたブロックが削除され、その値がメインメモリに書き戻されます。
もう1つのプロトコルはライトスルーです。その場合、キャッシュブロックがレベルnに書き込まれるたびに、レベル(n + 1)の対応するブロックが更新されます。(概念上、フォームを下にカーボンペーパーで埋めるのと似ています。上に書いたものは下のシートにコピーされます。)これは明らかにより多くの書き込み操作を伴うため遅いですが、キャッシュ間の値はより一貫しています。ライトバック方式では、特定のメモリブロックの最新の値を持つのは最高レベルのキャッシュのみです。