ダイレクトマップ、フルアソシアティブ、セットアソシアティブとは?キャッシュメモリの割り当て方式について初心者向けに画像多めで解説!
この記事でわかること
この記事では、キャッシュメモリの割り当て方式である
・ダイレクトマッピング方式
・フルアソシアティブ方式
・セットアソシアティブ方式
の違いを、指定席・自由席・班の中の自由席に例えて説明します。
結論からいうと、3つの違いは
「キャッシュのどこにデータを置けるか」
です。
キャッシュメモリとは?

「キャッシュメモリの割り当て方式」って言葉を見かけたんだけど何かわかる?まずキャッシュメモリから怪しいんだけど。

キャッシュメモリは、CPUがよく使うデータを一時的に置いておく、高速なメモリのことだよ。

メインメモリ(主記憶)とは違うの?これも一時的に置く場所だよね

CPUはすごく速いけど、メインメモリから毎回データを取ってくると少し待たされる。
だから、よく使うデータをCPUの近くにある速い場所、つまりキャッシュメモリに置いておくんだ。

机の上のどこかにおいておくのがメインメモリでものすごく手元に置いておくのがキャッシュって感じ?

まぁそうだね。SSDやHDDといった補助記憶装置→メインメモリ→キャッシュの順で読み込みが早くなるということだね。

キャッシュはメインメモリより速い反面、容量が小さいです。
そのため、
「どのデータを、キャッシュのどこに置くか」
を決めておかないと、管理が難しくなります。
この置き場所の決め方が、キャッシュメモリの割り当て方式です。
割り当て方式とは?

キャッシュはわかったよ、じゃあ割り当て方式は?

メインメモリ上のデータを、キャッシュメモリのどこに置くかを決めるルールのことだよ。

どこに置くか?

そう。
キャッシュメモリは容量が小さいから、何でも自由に置けるわけじゃない。
だから、データをどの場所に入れるかのルールが必要になるんだ。

3つの割り当て方式

代表的な方式はこの3つ。
| 方式 | 一言でいうと |
|---|---|
| ダイレクトマッピング方式 | 置き場所が1か所に決まっている |
| フルアソシアティブ方式 | どこにでも置ける |
| セットアソシアティブ方式 | 決められたグループ内なら置ける |

名前だけ見ると難しいけど、置き場所の自由度が違うってこと?

いいね。そういうことだよ。
ダイレクトマッピング方式とは

ダイレクトマッピング方式は、
メインメモリのデータを置けるキャッシュの場所が、あらかじめ1か所に決まっている方式だよ。

1か所だけ?

そう。
たとえば、あるデータはキャッシュの3番にしか置けない、別のデータは5番にしか置けない、みたいな感じ。

わかりやすいけど、ちょっと不便そう。

その通り。
場所を探すのは速いけど、同じ場所に置きたいデータが重なると、すぐ入れ替えが起きる。
つまり、まだ使うかもしれないデータでも、
別のデータが同じ場所に来ると追い出されてしまうことがあるんだ。
ダイレクトマッピング方式の例え

学校の下駄箱で例えるとわかりやすいよ。


出席番号ごとに下駄箱の場所が決まっているイメージだね。
1番の人 → 1番の下駄箱
2番の人 → 2番の下駄箱
3番の人 → 3番の下駄箱

決まった場所に入れるだけだから迷わないね。

そう。
でも、もし何かの都合で同じ場所を使いたいものが重なると、片方をどかすしかない。
ダイレクトマッピング方式の特徴
| 項目 | 内容 |
|---|---|
| 探しやすさ | とても速い |
| 仕組み | 簡単 |
| 欠点 | 同じ場所に集中すると入れ替えが多い |
| イメージ | 指定席 |

ダイレクトマッピングは「指定席」って覚えればいい?

いいね。誰が使用するか決まっているよ。
フルアソシアティブ方式とは?

フルアソシアティブ方式は、
メインメモリのデータをキャッシュ内のどこにでも置ける方式だよ。

自由席みたいな感じ?

そうだよ。
空いている場所ならどこでも置ける。

それなら便利そう。

便利ではある。
同じ場所に集中して追い出し合うことは起きにくい。
でも問題もあるよ。
データを探すときに、キャッシュ全体を探す必要があるんだ。

どこにでも置ける分、探すのが大変なのか。

そう。
自由度は高いけど、検索の仕組みが複雑になりやすい。
フルアソシアティブ方式の例え

図書館の空いている席で例えてみようか。


空いている席ならどこでも座れて便利だけど、
友達を探すときは全部の席を見ないといけないね。

そう。
それがフルアソシアティブ方式の感覚に近い。
フルアソシアティブ方式の特徴
| 項目 | 内容 |
|---|---|
| 置き場所 | どこでもよい |
| 自由度 | 高い |
| 欠点 | 探す仕組みが複雑 |
| イメージ | 完全自由席 |

フルアソシアティブは「完全自由席」だね。

うん。
「フル」だから全部の場所が候補、って覚えるといいよ。
セットアソシアティブ方式とは?

セットアソシアティブ方式は、
キャッシュをいくつかのグループに分けて、そのグループ内ならどこにでも置ける方式だよ。

ダイレクトとフルの中間?

そう。
ダイレクトマッピングほど場所が固定されすぎず、
フルアソシアティブほど自由すぎない。

ちょうどいい感じなんだ。

実際のキャッシュでは、このセットアソシアティブ方式がよく使われるよ。
完全自由にすると探す仕組みが複雑になりすぎる。
でも、完全指定席にすると入れ替えが多くなりやすい。
だから、その中間であるセットアソシアティブ方式が使われやすいんだ。
セットアソシアティブ方式の例え

教室の座席で例えるなら、
「班は決まっているけど、班の中ならどこに座ってもいい」感じ。


A班の人 → A班の席の中なら自由
B班の人 → B班の席の中なら自由
C班の人 → C班の席の中なら自由
ってことだね。

なるほど。
完全自由じゃないけど、指定席よりは柔軟だね。
セットアソシアティブ方式の特徴
| 項目 | 内容 |
|---|---|
| 置き場所 | 決められたセット内なら自由 |
| 自由度 | 中くらい |
| 探しやすさ | フルアソシアティブより楽 |
| 入れ替えの少なさ | ダイレクトマッピングより有利 |
| イメージ | 班の中で自由席 |
3つの違いを表で整理

3つの違いをまとめるとこんな感じ。

| 方式 | 置き場所 | メリット | デメリット | 例え |
|---|---|---|---|---|
| ダイレクトマッピング方式 | 1か所に決まる | 速くて簡単 | 入れ替えが起きやすい | 指定席 |
| フルアソシアティブ方式 | どこでもよい | 柔軟に置ける | 探す仕組みが複雑 | 完全自由席 |
| セットアソシアティブ方式 | グループ内なら自由 | 速さと柔軟性のバランスが良い | 仕組みは少し複雑 | 班の中で自由席 |

名前でかまえちゃっていたけど、案外簡単だね。
まとめ

まとめるとこんな感じだね。
キャッシュメモリの割り当て方式とは、
メインメモリのデータをキャッシュのどこに置くかを決める方法。

| 方式 | 自由度 | 覚え方 |
|---|---|---|
| ダイレクトマッピング方式 | 低い | 指定席 |
| セットアソシアティブ方式 | 中くらい | 班の中で自由席 |
| フルアソシアティブ方式 | 高い | 完全自由席 |

つまり、置き場所の自由度が違うんだね。

