かつて、このトピックは私にとって非常に興味深いものだったので、控えめな知識をあなたと共有することにしました。 この記事は完全な詳細な説明ではなく、簡単な概要であると主張しています。
はじめに
現代のコンピューターでは、メモリーへのアクセスが同時に複数の独立したプロセッサー(カーネル、トレード)を持つことができるのは秘密ではありません。 それぞれに独自のプライベートキャッシュがあり、そこに必要な行のコピーが保存され、一部はローカルに変更されます。 問題は、複数のプロセッサが同時に同じラインを必要とする場合に発生します。 システムを正しく動作させるには、すべてのプロセッサに単一のメモリ空間を提供する必要があると結論付けることは難しくありません。
これを確実にするために、特別な一貫性プロトコルが発明されました。 キャッシュの一貫性-キャッシュプロパティ。システムが共有するローカルキャッシュに格納されているデータの整合性を意味します。 各キャッシュセルには、システムの他のプロセッサの同じアドレスを持つセルの状態にその状態がどのように関係するかを記述するフラグがあります。
現在のセルの状態が変更された場合、他のキャッシュに何らかの方法で通知する必要があります。 たとえば、マルチプロセッサシステムの内部ネットワークを介して配信されるブロードキャストメッセージを生成します。
多くのコヒーレンスプロトコルが発明されました。これらは、アルゴリズム、状態の数、そして結果として、操作の速度とスケーラビリティが異なります。 最新のコヒーレンスプロトコルのほとんどは、MESIプロトコルのバリエーションです[1]。 このため、検討します。
メシ
このスキームでは、各キャッシュラインは次の4つの状態のいずれかになります。
- 変更(M) 英語 変更されました。 このフラグは、1つのキャッシュ内の行のみをマークできます。 この状態は、この行が変更されたが、これらの変更がまだメモリに到達していないことを意味します。 このような行の所有者は、残りの行に疑問を抱かずに簡単に読み書きできます。
- 排他的(E) 英語 排他的。 このフラグでマークされたラインは、Mラインと同様に、1つのキャッシュにしか入れることができません。 そこに含まれるデータは、RAMのデータと完全に同一です。 1つのキャッシュにのみ格納されるため、外部要求なしで書き込みおよび読み取りができます。 記録後、そのような行は変更済みとしてマークする必要があります。
- 共有(S) 英語 共有しました。 ラインは複数のデバイスによって同時にキャッシュされ、共有されます。 そのようなラインへの書き込み要求は常に共通バスに送られるため、他のキャッシュにあるそのようなアドレスを持つすべてのラインは無効としてマークされます。 メインメモリの内容も更新されます。 そのような行からの読み取りには、外部要求は必要ありません。
- 無効な(I) 英語 無効です。 このような行は無効と見なされ、読み取りを試みるとキャッシュミスが発生します。 行が空であるか、古い情報が含まれている場合、その行は無効とマークされます。
MESIプロトコル遷移図。 アクセスは、このキャッシュのプロセッサによって開始された場合はローカル、リモート-他から呼び出された場合はリモートです。

また、MESIプロトコルの最適化の1つを検討したいと思います。
モエシ
このプロトコルでは、ステータスフラグが別の所有者(O) 英語で拡張されています。 所有者。 この状態は、「変更済み」状態と「共有」状態の組み合わせです。 この状態により、変更された行をメモリに書き込む必要がなくなるため、メモリに送信されるトラフィックが減少します。 この状態のキャッシュラインには、最新のデータが含まれています。 説明された状態は、他のプロセッサがキャッシュ内のRAMに関連する最新のデータを持つことができるという点で、共有と似ています。 ただし、これとは異なり、このような状態はメモリ内のデータが古いことを意味します。 特定のアドレスを持つ1行のみがこの状態を持つことができ、このアドレスでの読み取りのすべての要求に応答するのはメモリではなく、それです。
本日お話ししたかったのはこれだけです。私の記事が誰かの興味を引くことを願っています。
このトピックの詳細については、以下に示すソースをご覧ください。
文学
[1] 遷移図を含む既存のプロトコルの概要
[2] G.S. レシストフ、E.A。 ユリュギン、AA イワノフ、P.L。 ニュージャージー州シシポル クリッカー「コンピューターシミュレーションの基礎」 URL
[3] Ulrich Drepper「すべてのプログラマーがメモリについて知っておくべきこと」 URL