【図解あり】キャッシュメモリを分かりやすく説明する




【図解あり】キャッシュメモリを分かりやすく説明する

メモリ(Memory)は、日本語で一般的に「記憶」と訳されますが、コンピュータ界でのメモリは、コンピュータが処理すべきデジタルデータをある期間保持するのに使う

  • 部品
  • 装置
  • 電子媒体

の総称を指す事になります。

コンピュータ内部では、プログラム内の命令・データを

  • 処理・実行する部分・・・CPU
  • 保存・格納する部分・・・メモリ

となり、1つのコンピュータ内部には種類の異なるメモリが存在します。

CPUの近くに位置するメモリほど

  • 高速な命令・データの転送
  • 小容量

という特徴を持っており、逆にCPUから遠くに位置するメモリ

  • 低速な命令・データの転送
  • 大容量

となります。

記憶階層

CPUレジスタに関する記事はこちら

CPU【Central Processing Unit】を分かりやすく説明する
CPU【Central Processing Unit】を分かりやすく説明する CPU【Central Processing Unit】(以下、CPU)は中央処理装置と呼ばれ、プログラムを解釈・実行してコンピュータ全体の動作を制御していま...

ここでは、キャッシュメモリ

  • 基本構成
  • 基本原理

について説明していきます。

スポンサーリンク

キャッシュメモリ

キャッシュメモリ

コンピュータは以前から

  • メモリ(主記憶装置)
  • HDD・SSD(補助記憶装置)

等の記憶装置や伝送路の性能がCPUの処理装置の性能に追いつけませんでした。

フォン・ノイマン・ボトルネック・・・
ノイマン型コンピュータでは

  • 記憶装置に命令を格納
  • CPUが命令を実行

このプロセスは、CPUは必ず外部バスを通して記憶装置にアクセスしなければならず、CPU記憶装置のアクセス速度が遅ければコンピュータ全体のボトルネックになります。

CPUと記憶装置

そこで、CPUがデータや命令などの情報を取得・更新する際、

  • 記憶装置や外部バス等の遅延・低帯域を隠蔽
  • CPU記憶装置の性能差を埋める

これらの為にキャッシュメモリが用いられるようになりました。

キャッシュメモリキャッシュは、

  • 現金の意味で使われるCashでは無く
  • 隠し場貯蔵所の意味のCacheの方です。

つまり、コンピュータ界では「プログラムの命令・データ」を貯蔵しておく場所という事になります。

基本構成

キャッシュメモリは記憶階層では、

  • CPU(レジスタ)
  • メモリ(主記憶装置)

の間に存在し、メモリ(主記憶装置)の内容のごく一部を一時的に保存しておくメモリです。

以前はCPUのチップの外部にキャッシュメモリを搭載するのが主流でしたが、半導体微細化技術の向上により、現在はCPUのチップ上にキャッシュメモリを搭載しています。

キャッシュメモリ

  • メモリ(主記憶装置)に比べるとはるかに高速
  • 記憶容量が少ない

という特徴を持っています。

記憶階層

キャッシュメモリによって

  • 保存するのは、CPUが頻繁にアクセスすると予想される命令・データ
  • 低速なメモリ(主記憶装置)へのアクセス頻度を最大限度まで減らす
  • CPUの平均的な待ち時間を短縮すること演算性能を高める
  • CPUメモリ(主記憶装置)を接続するバスのデータ転送速度に対する要求値を下げる

という役割を担っています。

キャッシュメモリは、通常は下位レベルの記憶装置である

  • メモリ(主記憶装置)
  • 補助記憶装置

より小容量・高速なSRAMを用いて構成されます。

SRAM(Static Random Access Memory)・・・
内部構造的に、Static(スタティック:静的)な回路方式により情報を記憶するフリップフロップ等の順序回路という事からSRAMと名付けられました。

データ格納構造

キャッシュメモリに格納するデータには大きさの単位があります。

  • ライン(Line)・・・大きさの単位。
    ライン(Line)の大きさ(長さ)は、16 Byteから256 Byteくらい
  • タグ(Tag)・・・キャッシュメモリに格納したデータのアドレス
    例えば、64 Byte のライン(Line)下位ビットのアドレス(下位6 bit)はタグ(Tag)にする意味が無く、必要な上位 bit のアドレス(上位アドレス)だけをタグ(Tag)とする
  • セット(Set)・・・ライン(Line)の集まり

キャッシュメモリのデータ格納構造

キャッシュメモリのデータ格納構造

フル・アソシアティブ方式(Fully Associative)

Associative(アソシアティブ)・・・日本語で

  • 連帯の
  • 連想の

という意味です。

CPUが要求したアドレスと、キャッシュメモリタグを全て比較する方式。

フル・アソシアティブ方式

メリット
キャッシュメモリメモリ(主記憶装置)のやりとりに制限がないこと

デメリット

  • 回路の規模が大きくなること
  • 消費電力が大きくなる
ダイレクトマップ方式(Direct Mapped)

メモリ(主記憶装置)のアドレスから、キャッシュメモリラインの位置を予め決めてしまう方式

具体的には、「インデックス」という、メモリ(主記憶装置)のアドレスの一部(中位のアドレス)を、キャッシュメモリラインのアドレスに割り当てます。

ダイレクトマップ方式

メリット
インデックスを利用してキャッシュメモリを読みに行くという動作になるため、回路規模がコンパクトであり、回路の動作を高速にしやすい。

デメリット
メモリ(主記憶装置)で同じインデックスに対応するデータは複数個存在するのに対し、キャッシュメモリで格納可能なライン1つしかありません。

既にデータが埋まっているキャッシュメモリラインには、同じインデックスのデータを格納するには前のデータを消して上書きするしか方法がありません。

セット・アソシアティブ方式(Set Associative)

フル・アソシアティブ方式ダイレクトマッピング方式の中間的な方式

現在、ほとんどのCPUアーキテクチャ(設計)が採用するキャッシュ構造です。

インデックスを利用してマッピングするという点では、ダイレクトマッピング方式と変わりませんが、同じインデックスに対応するキャッシュメモリラインを複数個、用意します。

  • ウエイ(Way)・・・インデックスに対応するキャッシュメモリラインのグループ

セットアソシアティブ方式

セットアソシアティブ方式

基本原理

CPUがロード命令(データをレジスタに読み込み)を出したとします。

下記の3パターンのアクセス方法が考えられます。

(1)1次(データ)キャッシュメモリに対応するデータが存在

  1. 1次(データ)キャッシュメモリにヒット
  2. 1次(データ)キャッシュメモリからデータを読み込み
  3. CPUに戻す

(2)1次(データ)キャッシュメモリには対応データが存在せず、2次キャッシュメモリに存在

  1. 1次(データ)キャッシュメモリはミス
  2. 2次キャッシュメモリはヒット
  3. 2次キャッシュメモリのデータを読み込み
  4. CPUに戻すとともに、1次(データ)キャッシュメモリにデータをコピー
  5. 1次(データ)キャッシュメモリのラインが全て埋まっていた時、コピー前にどれかのラインからデータを追い出し、空きラインを作る

(3)1次(データ)キャッシュメモリ・2次キャッシュメモリの両方に対応するデータが存在しない

  1. 1次(データ)キャッシュメモリはミス
  2. 2次キャッシュメモリもミス
  3. メモリ(主記憶装置)からデータを読み込み
  4. CPUに戻すとともに、1次(データ)キャッシュメモリと2次キャッシュメモリにデータをコピー
  5. コピー前に、1次(データ)キャッシュメモリと2次キャッシュメモリのラインに空きラインを作っておく

キャッシュメモリの基本原理

キャッシュメモリ・ラインの入替アルゴリズム

キャッシュメモリには大きく分けると2つの動作が存在します。

  1. アロケーション(allocation)・・・
    メモリ(主記憶装置)からデータをキャッシュメモリラインにコピーする動作

    アロケーション(allocation) ➡️ 日本語で、

    • 割り当て
    • 配置

    という意味です。

  2. エビクション(eviction)・・・
    特定のキャッシュメモリラインからデータを追い出して空きのラインを作る動作

    エビクション(eviction) ➡️ 日本語で、

    • 立ち退き

    という意味です。

アロケーション動作は、

  • CPUがデータを読み込むタイミング
  • CPUがデータを書き込むタイミング

で行われますが、エビクション動作は、セット・アソシアティブ方式キャッシュメモリ構造だと、どのキャッシュメモリラインからデータを立ち退かせる方法は、いくつかあります。

ランダム(Random)

無作為にキャッシュメモリラインを決める方法

この方式は、頻繁にアクセスするキャッシュメモリラインの内容が消されてしまうというリスクを孕んでいます

ランダム(Random)

ラウンドロビン(Round Robin)

立ち退かせるキャッシュメモリラインを順番にずらしていく方法

ランダム(Random)と同様、各キャッシュメモリラインのアクセス頻度に拘らない為、あまりヒット率が高くありません。

ラウンドロビン(Round Robin)

LRU(Least Recently Used)

最も古くアクセスされたキャッシュメモリラインを立ち退かせる方法

LRU(Least Recently Used)

キャッシュの読み込み・書き込み

キャッシュメモリを搭載したシステムでは、メモリ(主記憶装置)のデータは基本的にキャッシュメモリを介して読み書きされます。

キャッシュの読み込み・書き込み

データの書き込みは、

  1. ライトスルー(write through)・・・キャッシュメモリメモリ(主記憶装置)に同時に書き込む方法
  2. ライトバック(write back)・・・キャッシュメモリだけに書き込み、メモリ(主記憶装置)には後で書き込む方法

と、大きく分けて2種類あります。

ライトスルー

ライトスルー(write through)は、必ずメモリ(主記憶装置)への書き込みを伴う為、キャッシュメモリが存在しない場合と同等にパフォーマンスが落ちる場合がありますが、メモリ(主記憶装置)の内容は常に最新の状態に保たれます。

ライトスルー

ライトバック

ライトバック(write back)は、キャッシュメモリにのみ書き込みが行われる為、高速に動作します。

メモリ(主記憶装置)に書き込まれるタイミングが遅れる為、プログラムからは「メモリ(主記憶装置)に書き込みを行ったが、実際には書き込まれていない」という状態が発生することになります。

ライトバック

コメント

  1. […] […]

  2. […] […]