記憶階層とは(全体像)
記憶階層は、速さ・容量・値段の違うメモリを、段階的に積み上げた構造のこと。全部を速くて大きいメモリにできれば理想だが、速いものは高くて小さいので、段階に分けて使い分ける。
身近な例が自宅。手元(レジスタ)→デスクの上(キャッシュ)→引き出し(メインメモリ)→倉庫(SSD・HDD)→遠くの倉庫(クラウド)と、近いほど速く取り出せるが置ける量は少ない。よく使う物を手元に置くと作業が速くなる。
押さえたいのは、上位ほど「速い・小さい・高い」、下位ほど「遅い・大きい・安い」という関係。だからCPUは、なるべく上位の速い階層で処理を完結させたい。
詳しく:階層の順序と局所性だけ覚えれば戦える
ここが記事の心臓部。まず階層の順序を押さえよう。
記憶階層(上ほど速く・小さく・高い)
| 階層 | 速さ | 容量 | 自宅のたとえ |
|---|---|---|---|
| レジスタ | 最速 | 最小 | 手元 |
| キャッシュ(L1〜L3) | 非常に速い | 小 | デスクの上 |
| メインメモリ | 速い | 中 | 引き出し |
| SSD | 遅い | 大 | 倉庫 |
| HDD・クラウド | さらに遅い | 最大 | 遠くの倉庫 |
ここで効いてくるのが局所性(きょくしょせい)。プログラムのデータの使い方には「かたより」があり、それをキャッシュが利用して速くする。局所性には2種類ある。
2種類の局所性
| 種類 | 意味 | 例 |
|---|---|---|
| 時間的局所性 | 一度使ったデータは、すぐまた使われやすい | ループの中で何度も使う変数 |
| 空間的局所性 | 使ったデータの「近く」も、すぐ使われやすい | 配列を先頭から順に読む |
つまり、よく使う・近くにあるデータをキャッシュに置いておけば、遅い下位階層に行く回数が減って速くなる。この局所性こそが、キャッシュが効く理由(根拠)だ。局所性を意識してデータを並べると、プログラムの速さが大きく変わる、というわけだね。
わかりやすく言い換えると
要するに、記憶階層は「よく使う物ほど手元に、めったに使わない物ほど遠くに」置くしくみだ。
①順序 … レジスタ→キャッシュ→メインメモリ→SSD→HDD→クラウド(上ほど速く小さく高い)
②時間的局所性 … 一度使ったものはすぐまた使う(手元に置くと速い)
③空間的局所性 … 使ったものの近くもすぐ使う(まとめて手元に置くと速い)
「各階層は並列ではなく、下位を上位がキャッシュする関係」だけは取り違えやすい。
試験のツボ
🔴 一番出る:階層の順序と関係
①レジスタ→キャッシュ→メインメモリ→SSD→HDD→クラウド
②上位ほど高速・小容量・高価、下位ほど低速・大容量・安価
🔴 次に出る:2種類の局所性
①時間的局所性=一度使ったものはすぐまた使う
②空間的局所性=使ったものの近くもすぐ使う
🟡 押さえると安定:局所性とキャッシュ
①局所性がキャッシュの効く根拠
②局所性を意識すると性能が大きく変わる
よくある間違い
①「記憶階層は速さも容量も値段も同じものの並び」→ ✗ 上位ほど速く小さく高い、下位ほど遅く大きく安い。
②「各階層はそれぞれ独立して並列に動く」→ ✗ 下位を上位がキャッシュする関係。独立並列ではない。
③「局所性はプログラムの速さに関係ない」→ ✗ 局所性こそキャッシュが効く根拠。意識すると性能が大きく変わる。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(階層の関係)
記憶階層に関する次の記述のうち、正しいものはどれか。
- 記憶階層はどの階層も速さ・容量・値段がまったく同じで、区別する意味はないものだ
- 記憶階層は下位ほど高速で小容量、上位ほど低速で大容量という関係になっている
- 記憶階層は上位ほど高速で小容量・高価、下位ほど低速で大容量・安価になっている
- 記憶階層はレジスタが最も遅く、クラウドが最も速いという順序になっているとされる
解答は 3 である。
記憶階層は上位ほど高速・小容量・高価、下位ほど低速・大容量・安価なのだ。手元ほど速く小さく、遠くほど遅く大きいなるぞ。
選択肢1の「同じ」、選択肢2の「下位ほど高速」、選択肢4の「レジスタが最も遅い」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 階層で差がある |
| 2 | ✗ | 上位ほど高速 |
| 3 | ✓ | 上位=高速小容量・下位=低速大容量 |
| 4 | ✗ | レジスタが最速 |
オリジナル問題2(2種類の局所性)
局所性に関する次の記述のうち、正しいものはどれか。
- 時間的局所性は使ったものの近くを使うこと、空間的局所性はすぐまた使うことを指す
- 時間的局所性は一度使うとすぐまた使うこと、空間的局所性は近くも使うことを指す
- 局所性は1種類だけで、時間と空間に分けるという考え方は存在しないものとされる
- 局所性はメモリの値段の話で、データの使い方とはいっさい関係がないものとされる
解答は 2 である。
時間的局所性は一度使うとすぐまた使うこと、空間的局所性は使ったものの近くも使うことなのだ。ループ変数と配列の連続走査が典型例なるぞ。
選択肢1は時間的と空間的が逆。選択肢3の「1種類だけ」、選択肢4の「値段の話」も誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 時間的と空間的が逆 |
| 2 | ✓ | 時間的=再利用・空間的=近隣 |
| 3 | ✗ | 2種類ある |
| 4 | ✗ | データの使い方の話 |
オリジナル問題3(階層とキャッシュの関係)
記憶階層とキャッシュの関係に関する次の記述のうち、正しいものはどれか。
- 各階層は独立せず、下位を上位がキャッシュする関係で、局所性が効く根拠になる
- 各階層はまったく独立して並列に動き、たがいにキャッシュし合うことはないものだ
- 局所性はキャッシュの速さとは無関係で、意識してもしなくても性能は変わらない
- 記憶階層では下位の遅い階層だけを使い、上位の速い階層はいっさい使わないものだ
解答は 1 である。
各階層は独立せず、下位を上位がキャッシュする関係なのだ。そして局所性がキャッシュの効く根拠になるなるぞ。
選択肢2の「独立並列」、選択肢3の「無関係」、選択肢4の「下位だけ使う」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 下位を上位がキャッシュ・局所性が根拠 |
| 2 | ✗ | 独立並列ではない |
| 3 | ✗ | 局所性が性能に効く |
| 4 | ✗ | 上位の速い階層を活用する |
まとめ
押さえどころ
- 🔴 階層の関係 = レジスタ→キャッシュ→メインメモリ→SSD→HDD→クラウド。上位ほど高速・小容量・高価。
- 🔴 2種類の局所性 = 時間的(すぐまた使う)・空間的(近くも使う)。
- 🟡 局所性とキャッシュ = 局所性がキャッシュの効く根拠。下位を上位がキャッシュする関係。
次に学ぶ
執筆: SikakuQuest編集部