はじめに
皆さんは普段インターネットを使用していて、「同じページを開くなら1回目より2回目のほうが速い」と感じたことはありませんか?
実はこの、「1度使ったものを覚えておく」ということをしているのが、
キャッシュメモリという装置です。
よく「キャッシュを消去する」という言葉で、名前だけは聞いたことがあるのではないでしょうか?
今回はそんなキャッシュについて学んでいきましょう!
キャッシュメモリ
キャッシュメモリとは
キャッシュメモリには、上で述べたように2回目以降のアクセス時間を減らす役割があります。
また、位置としては、CPUと主記憶の間に存在しています。
図に表すとこうなります。
コンピューターが何らかの命令を実行するとき、CPUは主記憶からデータを呼び出して使っています。
しかし、CPUと主記憶のアクセスは、意外と時間がかかるんですね。
そのため、アクセス時間を短縮させるために、その間に作られたのがキャッシュメモリです。
キャッシュメモリの仕組み
それでは、キャッシュメモリはどのようにして2回目以降のアクセス時間を短くしているのでしょうか?
その流れは以下のようになります。
①1度目は普通に主記憶からデータを取り出す。
②1度使用したデータはキャッシュメモリに一時保存される。
③2度目以降使用時はキャッシュメモリからデータを取り出す。
④変更があったときは、その変更を主記憶の中の元データにも反映させる。
です。
1度目は普通にデータを取り出すのですが、それを戻さずに、キャッシュの中に入れるんですね。
おかげで、2度目以降は主記憶より近いキャッシュからデータを取り出せるから、アクセス時間が速いというわけです。
まあ…次も使うから返さないで引き出しに入れておこう的なノリです。
ここで注目したいのが、④の変更があった内容を、主記憶へ反映させることです。
次で詳しく見ていきましょう!
キャッシュメモリの変更を主記憶に反映させる
もしキャッシュメモリに変更が加えられた時、その変更を主記憶の中の、元のデータにも反映させなければなりません。
この、データ更新のタイミングについては、次の二つの方式があります。
ライトスルー方式
ライトスルー方式は、キャッシュメモリと主記憶を、両方いっぺんに更新する方式です。
キャッシュの内容と主記憶の内容のズレが発生しないというメリットがありますが、
毎回両方に書き込むので、速度が遅くなるというデメリットもあります。
ライトバック方式
ライトバック方式は先にキャッシュメモリを書き込み、主記憶は後でまとめて書き変えるという方式です。
キャッシュメモリと主記憶の間でデータのずれが発生するというデメリットはありますが、
アクセスは一度でいいので高速で通信することができます。
アクセス実行時間の計算
さて、ここから少し趣向が変わって計算問題です。
実際の試験では、「データを取り出すのに何秒かかるか」という計算問題もよく出ます。
簡単なので、一緒に学んでいきましょう!
それでは、実際に問題を説いていきましょう!
まず、ヒット率の解説からしますね。
データって、一度の命令にいくつも必要なんですよね。あのデータとこのデータと…みたいに。
ヒット率は、欲しいデータの何パーセントがキャッシュメモリにあるかという確率です。
言い換えれば、他のデータは主記憶にあるということになります。
例えば今回の問題の場合、ヒット率が80%なので、
欲しいデータの内80%がキャッシュメモリに、20%が主記憶にあるということになります。
次に、キャッシュメモリと主記憶のアクセス時間の説明をします。
これらは、キャッシュメモリと主記憶からデータを取ってくる際、何秒かかるかを表しています。
今回の場合、キャッシュメモリからデータを取ってくる場合は10ナノ秒、
主記憶からデータを取ってくる場合は60ナノ秒かかることを表しています。
しかし、1つ注意点があります。
このアクセス時間はあくまで、データ全てをキャッシュメモリのみから取ってきた場合、あるいは主記憶からのみ持ってきた場合の時間です。
言い換えると、欲しいデータ全て(100%)がキャッシュメモリにあるとき、10ナノ秒かかりますよ。
欲しいデータ全て(100%)が主記憶にある時、60ナノ秒かかりますよということなんです。
したがって、もし今回のように、80%がキャッシュメモリに、20%が主記憶にある場合は、
キャッシュ、主記憶のそれぞれアクセス時間に、それぞれの%を掛け合わせないといけません。
その後それぞれの値を足し合わせるのです。
図にするとこうなります。
したがって、今回の問題の答えは、
10ナノ秒×0.8 + 60ナノ秒×0.2 = 20ナノ秒となります。
さて、計算問題でしたが、どうでしたか?
ちなみに、データが5個でも6個でも、×5とか×6はする必要ありません。
買い物と同じで、欲しいものがいくつあっても、まとめて買えば一往復で済むからです。
慣れれば楽なので、慣れるまで何度も挑戦して覚えてくださいね。
練習問題
問題1
ヒット率50%で、キャッシュへのアクセス時間が20ナノ秒、主記憶へのアクセス時間が40ナノ秒のときの実行アクセス時間を求めてください。
ヒット率が50%なので、キャッシュメモリから50%、主記憶から50%取ってくる。
キャッシュからデータを取るのにかかる時間:20ナノ秒 × 0.5 = 10ナノ秒
主記憶からデータを取るのにかかる時間 :40ナノ秒 × 0.5 = 20ナノ秒
実行アクセス時間 : 10ナノ秒 + 20ナノ秒 = 30ナノ秒
答え30ナノ秒
問題2
ヒット率70%で、キャッシュへのアクセス時間が30ナノ秒、主記憶へのアクセス時間が70ナノ秒のときの実行アクセス時間を求めてください。
ヒット率が70%なので、キャッシュメモリから70%、主記憶から30%取ってくる。
キャッシュからデータを取るのにかかる時間:30ナノ秒 × 0.7 = 21ナノ秒
主記憶からデータを取るのにかかる時間 :70ナノ秒 × 0.3 = 21ナノ秒
実行アクセス時間 : 21ナノ秒 + 21ナノ秒 = 42ナノ秒
答え42ナノ秒