メモリ一貫性(MESI)とは?複数のCPUがメモリを同じように見えるようにする課題

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

メモリ一貫性とは(全体像)

複数のCPU(マルチコア)がそれぞれキャッシュを持っていると、同じデータをめぐって、CPUごとに見え方が食い違うことがある。あるCPUが書きかえた値を、別のCPUが古いまま見てしまうと困る。これを防ぐのがメモリ一貫性だ。

身近にたとえると、複数人で同じ共同編集ドキュメントをいじるのに似ている。「誰が最新版を持っているか」「複数人が同じものを見ているか」「その内容はもう古いか」を追跡しないと、ばらばらになってしまう。

その追跡を機械でやるのが、次に説明するMESIだ。


詳しく:MESIの4状態とメモリモデルだけ覚えれば戦える

ここが記事の心臓部。MESIは、各CPUのキャッシュの状態を4つで管理するしくみだ。

MESIの4状態

状態読み意味
MModified自分のキャッシュだけが最新版(メモリは古い)
EExclusive自分のキャッシュだけが持っている(メモリと同じ)
SShared複数のCPUが同じデータを持っている
IInvalidこのキャッシュは無効(使えない)

CPUが読み書きするたびに、各キャッシュの状態がこの4つの間を移り変わる。これで、マルチコアでもキャッシュが食い違わないようにする。

ここで取り違えやすいのが、MESIは「キャッシュの状態を管理するしくみ」であって、ネットワークの通信プロトコルではないこと。名前がプロトコルっぽいが、別ものだ。

もう1つ大事なのが、メモリモデルはCPUの種類で違うこと。

CPUごとのメモリモデル

CPUメモリの順序
x86比較的厳格(順序が守られやすい)
ARM緩い(順序が入れかわることがある)

つまり、同じプログラムでも、x86とARMで動きが変わることがある。順序を確実にしたいときは、メモリバリア(順序を強制する命令)を使う、というわけだね。

わかりやすく言い換えると

要するに、メモリ一貫性は「みんなが同じ最新の中身を見るための整合管理」だ。

MESIの4状態 … M(自分だけ最新)・E(自分だけ持つ)・S(複数で共有)・I(無効)

MESIの正体 … キャッシュの状態管理のしくみ(通信プロトコルではない)

メモリモデル … CPUで違う。x86は厳格、ARMは緩い

「MESIは通信プロトコルではない」「メモリモデルはCPUで違う」だけは取り違えやすい。


試験のツボ

🔴 一番出る:MESIはキャッシュの状態管理

①マルチコアでキャッシュが食い違わないようにするしくみ

②ネットワークの通信プロトコルではない

🔴 次に出る:4状態の意味

①M=自分だけ最新、E=自分だけ持つ

②S=複数で共有、I=無効

🟡 押さえると安定:メモリモデルはCPUで違う

①x86は比較的厳格、ARMは緩い

②同じプログラムでも動きが変わることがある


よくある間違い

「MESIはネットワークの通信プロトコル」→ ✗  MESIはキャッシュの状態を管理するしくみ。通信プロトコルとは別もの。

「メモリモデルはどのCPUでも同じ」→ ✗  x86は厳格、ARMは緩いなど、CPUの種類で違う。

「Mは複数のCPUが同じデータを共有している状態」→ ✗  共有はS(Shared)。Mは自分のキャッシュだけが最新の状態。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(MESIの正体)

📝 オリジナル問題 1 MESIの正体

MESIに関する次の記述のうち、正しいものはどれか。

  1. MESIはネットワークの通信プロトコルで、キャッシュとはいっさい関係がないものだ
  2. MESIはメモリをいっさい使わず、CPU内部だけで計算を完結させるしくみとされている
  3. MESIはマルチコアでキャッシュが食い違わないようにする、状態を管理するしくみである
  4. MESIは単一CPUのためのしくみで、複数CPUにはいっさい使われないものとされている
ネトスパ
ネトスパ 解答・解説

解答は 3 である。

MESIはマルチコアでキャッシュが食い違わないようにする、状態を管理するしくみなのだ。通信プロトコルではないなるぞ。

選択肢1の「通信プロトコル」、選択肢2の「CPU内部だけ」、選択肢4の「単一CPU」はどれも誤りである。

選択肢判定理由
1キャッシュの状態管理
2キャッシュとメモリの整合
3キャッシュ一貫性の状態管理
4マルチコアで使う

オリジナル問題2(4状態の意味)

📝 オリジナル問題 2 MESIの4状態

MESIの4状態に関する次の記述のうち、正しいものはどれか。

  1. Mは自分のキャッシュだけが最新、Sは複数のCPUが同じデータを共有する状態である
  2. Mは複数のCPUが共有する状態、Sは自分のキャッシュだけが最新の状態とされている
  3. MもSもIもまったく同じ意味で、状態を分ける理由はいっさいないものとされている
  4. Iはこのキャッシュが最新で有効な状態を表し、すぐに使えるものとされているものだ
ネトスパ
ネトスパ 解答・解説

解答は 1 である。

Mは自分のキャッシュだけが最新、Sは複数のCPUが同じデータを共有する状態なのだ。Iは無効な状態なるぞ。

選択肢2はMとSが逆。選択肢3の「同じ意味」、選択肢4の「Iは有効」はどちらも誤りである。

選択肢判定理由
1M=自分だけ最新・S=共有
2MとSが逆
3状態で意味が違う
4Iは無効な状態

オリジナル問題3(メモリモデル)

📝 オリジナル問題 3 メモリモデル

CPUのメモリモデルに関する次の記述のうち、正しいものはどれか。

  1. メモリモデルはどのCPUでも完全に同じで、x86とARMに違いはないものとされている
  2. メモリモデルはCPUで違い、x86は比較的厳格、ARMは緩いという特徴を持っている
  3. メモリモデルはx86が緩く、ARMが厳格という、実際とは逆の関係になっている
  4. メモリモデルはCPUとは無関係で、ディスクの読み書きの順序を決めるものとされている
ネトスパ
ネトスパ 解答・解説

解答は 2 である。

メモリモデルはCPUで違い、x86は比較的厳格、ARMは緩いという特徴なのだ。同じプログラムでも動きが変わることがあるなるぞ。

選択肢1の「同じ」、選択肢3の「x86が緩い」、選択肢4の「ディスクの順序」はどれも誤りである。

選択肢判定理由
1CPUで違う
2x86は厳格・ARMは緩い
3厳格・緩いが逆
4メモリの順序の話

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る