この記事では、キャッシュメモリについて、初心者にも分かりやすく、図解付きで丁寧に解説しています!
キャッシュメモリ
- CPUは主記憶装置とやり取りしながら命令を処理するが、主記憶装置はCPUと比べて処理速度が遅い。
- キャッシュメモリはCPUと主記憶装置の間に入って、主記憶装置の代わりにCPUとデータのやり取りをする。
- CPUがキャッシュメモリにアクセスした時に目的のデータがある確率をヒット率、CPUが目的のデータにアクセスできる実際の平均時間を実効アクセス時間と呼ぶ。
- ライトスルー方式は、キャッシュメモリと主記憶装置に同時にデータを書込む方式。
- ライトバック方式は、普段はキャッシュメモリにだけデータを書込み、キャッシュメモリからデータを追い出す時に主記憶装置にデータを書込む。
- フルアソシエイティブ方式は、主記憶装置のデータをキャッシュメモリに書き込むとき、キャッシュメモリの空いている領域を探してそこに格納する。
CPUは主記憶装置とやり取りする
私たちが使うプログラムは、普段、補助記憶装置に記録されており、プログラムを実行する時は主記憶装置へロードしてから実行します。

CPUは主記憶装置に置かれたプログラムの命令とデータを取り出して演算します。
また、CPUが演算した結果は主記憶装置に格納しておきます。
CPUが主記憶装置とやり取りしながら命令を実行する手順は命令実行サイクルと呼ばれます。命令実行サイクルについて詳しく知りたい方はこちらの記事をご覧ください。

ここで押さえておいて欲しいのは、
プログラムを実行する時、CPUと主記憶装置が命令やデータのやり取りをしているということです!
しかし、主記憶装置の処理速度はCPUに比べてかなり遅いため、CPUに待ち時間が発生し、処理効率が悪くなってしまいます。

ここで出てくるのがキャッシュメモリです!
キャッシュメモリの役割
キャッシュメモリは主記憶装置より小容量ですが、処理が高速です。
キャッシュメモリは、遅い主記憶装置に代わって、CPUで命令やデータのやり取りをします。ただ、小容量なので、キャッシュメモリには、CPUがすぐに使いそうな命令やデータしか保管しません。

キャッシュメモリはすぐに使いそうな命令やデータしか持たないので、
不幸にもCPUが今すぐ欲しい!データを持っていないこともあるんですね。
その場合は、CPUも諦めて主記憶装置に欲しいデータを取りに行きます。
- CPUは最初にキャッシュメモリに欲しいデータを取りに行く
- キャッシュメモリにデータが無かったら、主記憶装置にデータを取りに行く
- ②で取りに行ったデータはキャッシュメモリに記録しておく
こうすることで、次に同じデータを取りに行くとき、速く取れるようになる
ヒット率と実効アクセス時間
キャッシュメモリは目的のデータを持っているとは限りません。
キャッシュメモリが目的のデータを持っている確率をヒット率と呼びます。
ヒット率が80%だとすると、CPUは20%の確率で主記憶装置にデータを取りに行く必要があります。

実効アクセス時間は、キャッシュメモリを導入した場合、CPUがどれだけの時間でデータにアクセス出来るかを示した数字です。
①キャッシュメモリへのアクセスに全部で掛かった時間
キャッシュメモリへのアクセス時間×ヒット率
②主記憶装置へのアクセスに全部で掛かった時間
主記憶装置へのアクセス時間×(1-ヒット率)
実効アクセス時間=①+②
例えば、ヒット率が80%、キャッシュメモリへのアクセス時間が20ナノ秒、
主記憶装置へのアクセス時間が50ナノ秒の場合の実効アクセス時間は26ナノ秒です。
①キャッシュメモリへのアクセスに全部で掛かった時間
20ナノ秒×80%=16ナノ秒
②主記憶装置へのアクセスに全部で掛かった時間
50ナノ秒×20%=10ナノ秒
実効アクセス時間=16ナノ秒+10ナノ秒=26ナノ秒
キャッシュメモリへの書込み方式
キャッシュメモリはあらかじめ主記憶装置からデータを貰いますが、どのように主記憶装置からキャッシュメモリへデータが書き込まれるのでしょうか?「ダイレクトマップ方式」「セットアソシエイティブ方式」「フルアソシエイティブ方式」の3つの方法がありますが、ここでは試験で出題された「フルアソシエイティブ方式」を紹介します。
フルアソシエイティブ方式
フルアソシエイティブ方式とは、主記憶装置のデータをキャッシュメモリ内の空いている任意の領域に保管する方式です。

キャッシュメモリに空いている領域があれば保管できるので、無駄なくキャッシュメモリの容量は使えますが、毎回空いている領域を探さないといけないので、処理速度は落ちます。
主記憶装置への書込み方式
キャッシュメモリはCPUが演算した結果を貰う役割も持っています。
ただし、キャッシュメモリはあくまでも主記憶装置の補助役なので、最終的には主記憶装置に演算結果を渡す必要があります。
では、どのタイミングでキャッシュメモリは主記憶装置にデータを書込むのでしょうか?
主記憶装置への書込み方式にはライトスルー方式とライトバック方式があります。
ライトスルー方式
ライトスルー方式は、キャッシュメモリと主記憶装置に同時にデータを書込む方式です。

ライトバック方式
ライトバック方式では、普段はキャッシュメモリにしかデータを書込みません。
キャッシュメモリの容量がいっぱいになってきて、データを追い出すタイミングで、
主記憶装置への書込みを行います。

応用情報技術者試験での出題例
令和年6度秋期問10、令和4年度春期問9
応用情報技術者
午前試験 令和6年度秋期問10、令和4年度春期問9
キャッシュメモリのアクセス時間が主記憶のアクセス時間の1/30で,ヒット率が95%のとき,実効メモリアクセス時間は,主記憶のアクセス時間の約何倍になるか。
ア 0.03 イ 0.08 ウ 0.37 エ 0.95
正解は”イ”
実効アクセス時間=1/30×0.95+1×0.05=0.08となり、
答えはイです。
令和年6度春期問10
応用情報技術者
午前試験 令和6年度春期問10
主記憶のアクセス時間が60ナノ秒,キャッシュメモリのアクセス時間が10ナノ秒であるシステムがある。キャッシュメモリを介して主記憶にアクセスする場合の実効アクセス時間が15ナノ秒であるとき,キャッシュメモリのヒット率は幾らか。
ア 0.1 イ 0.17 ウ 0.83 エ 0.9
正解は”エ”
ヒット率をαとしたとき、
10ナノ秒×α+60ナノ秒×(1-α)=15ナノ秒となり、
α=0.9で答えはエです。
令和年5度春期問10、令和3年度春期問12
応用情報技術者
午前試験 令和5年度春期問10、令和3年度春期問12
キャッシュメモリへの書込み動作には,ライトスルー方式とライトバック方式がある。それぞれの特徴のうち,適切なものはどれか。
ア ライトスルー方式では,データをキャッシュメモリだけに書き込むので,高速に書込みができる。
イ ライトスルー方式では,データをキャッシュメモリと主記憶の両方に同時に書き込むので,主記憶の内容は常にキャッシュメモリの内容と一致する。
ウ ライトバック方式では,データをキャッシュメモリと主記憶の両方に同時に書き込むので,速度が遅い。
エ ライトバック方式では,読出し時にキャッシュミスが発生してキャッシュメモリの内容が追い出されるときに,主記憶に書き戻す必要が生じることはない。
正解は”イ”
ライトスルー方式は主記憶装置とキャッシュメモリに同時に書き込みします。
ライトバック方式は、基本キャッシュメモリに書き込みを行い、キャッシュメモリのデータを追い出すときに主記憶装置に書き込みを行います。
令和4年度秋期問9
応用情報技術者
午前試験 令和4年度秋期問9
キャッシュメモリのライトスルーの説明として,適切なものはどれか。
ア CPUがメモリに書込み動作をするとき,キャッシュメモリだけにデータを書き込む。
イ CPUがメモリに書込み動作をするとき,キャッシュメモリと主記憶の両方に同時にデータを書き込む。
ウ 主記憶のデータの変更は,キャッシュメモリから当該データが追い出される時に行う。
エ 主記憶へのアクセス頻度が少ないので,バスの占有率が低い。
正解は”イ”
ライトスルー方式は主記憶装置とキャッシュメモリに同時に書き込みします。
ライトバック方式は、基本キャッシュメモリに書き込みを行い、キャッシュメモリのデータを追い出すときに主記憶装置に書き込みを行います。
アとウはライトバック方式の説明です。
ライトスルー方式は主記憶へ毎回書き込みを行うので、エも誤りです。
令和4年度春期問10
応用情報技術者
午前試験 令和4年度春期問10
キャッシュメモリのフルアソシエイティブ方式に関する記述として,適切なものはどれか。
ア キャッシュメモリの各ブロックに主記憶のセットが固定されている。
イ キャッシュメモリの各ブロックに主記憶のブロックが固定されている。
ウ 主記憶の特定の1ブロックに専用のキャッシュメモリが割り当てられる。
エ 任意のキャッシュメモリのブロックを主記憶のどの部分にも割り当てられる。
正解は”エ”
任意のキャッシュメモリのブロックに主記憶のデータを保管するのがフルアソシエイティブ方式なので、”エ”が正解です。