メモリ内のページ ミスがページ フォールトを引き起こし、ページ ハンドラがそのページを物理メモリにロードする必要があることはわかっています。ここで、キャッシュのミスもシステム障害なのだろうか? そうでない場合、メモリ障害とキャッシュ障害の違いは何ですか? どうもありがとう。
4 に答える
「キャッシュ障害」とは、プロセッサの L1/L2/L3 キャッシュでのキャッシュ ミスを意味しますか? もしそうなら、いいえ、少なくとも私が聞いたことのあるすべてのプロセッサアーキテクチャでは、障害は発生しません。
この理由は、ページ フォールトでは、アクセスが無効であったかどうか、アクセスがディスクにスワップ アウトされたページへのアクセスであったかどうかなどを判断するために、ソフトウェアの介入が必要になるためです。対照的に、キャッシュ ミスは定義上、プロセッサによって処理されます。それ自体 - ページ フォールトを引き起こさなかったので、データは、プロセッサが直接アクセスできるメイン メモリまたは下位レベルのキャッシュに既に格納されている必要があります。プロセッサは、アクセスされているメモリのアドレスを仮想から物理に機械的に変換し、下位レベルのキャッシュまたはメイン メモリにデータを要求します。
同じ考え方が同時マルチプロセッサにも当てはまります。キャッシュ ラインは、別のコアがキャッシュに格納している場合でも、あるコアに書き込むことによって無効化される可能性があります。プロセッサは独自のコヒーレンシ プロトコルを定義して、通常は無効なキャッシュ ラインを含むコアに強制的に下位レベルのキャッシュから更新させるか、共有書き込みバスを監視するように要求することにより、古いコピーが読み取られないようにします。すべてのプロセッサは、書き込まれている値を見ることができます。
キャッシュ障害は、別のコアがまったく同じデータを同時に読み書きしようとしているために、コアが読み書きをブロックされた場合です。これはマルチコア並列処理の問題です。たとえば、2 つのコア (0 と 1) が RAM からの変数xを必要とし、x のコピーがすべてのコアで共有される最高レベルのキャッシュ (L2 または L3) に配置され、次にxの 2 番目のコピーが配置されるとします。は、コア 0 の最も内部のキャッシュ (L1) に配置されますが、コア 1 は操作するためにまったく同じ変数を要求します。core_0 から変数の値を更新する競合が実行されている間、コア 1 をブロックする必要があります。ブロック操作はキャッシュ障害です。
いいえ、単にプロセッサのストールが発生するだけです。おそらく適切なイメージは、パイプラインに挿入される 1 つまたは複数の NOP 命令です。「バブル」とも呼ばれます。これが最新のプロセッサの動作に適したモデルであるかどうかは定かではありませんが、効果は確かに同じです。データが利用可能になるまで、プロセッサは命令の実行を停止します。