フリップフロップで構成される高速だが高価な揮発性メモリ
SRAM(エスラム、Static RAM = 静的RAM)とは、フリップフロップという回路で 1 ビットを記憶する、高速だが高価な揮発性メモリのことです。揮発性なので電源を切ると内容は消えますが、電源がある限りは何もしなくても記憶を保ち続けます。
「Static(静的)」という名前は、記憶を保つために特別な手入れが要らない(書き直し不要)ことを表します。後で出てくる DRAM が定期的なリフレッシュ(書き直し)を必要とするのと対照的です。
身近な例で考えると、シーソーに似ています。片方が上がれば反対が下がる、という安定した状態を 2 つ持ち、外から押さない限りそのまま釣り合い続けます。SRAM はこの「安定した 2 状態」を電気回路で作り、0 か 1 を保持しているのです。
フリップフロップとは、1 ビット(0 か 1)を記憶し続けられる基本的なデジタル回路のことです。トランジスタ(=電気のスイッチ)を複数組み合わせて作られ、SRAM の 1 セルはおおむね 6 個のトランジスタで構成されます。
仕組みの要は、2 つの NOT 回路(入力を反転させる回路)が互いの出力を相手の入力につないでループになっている点です。片方が「1」を出すと、それを反転した「0」が相手に渡り、その「0」を反転した「1」が最初に戻ってきます。こうして値が自分自身を支え合い、安定して保持されます。
この自己保持のおかげで、SRAM は次の特徴を持ちます。
・高速:電荷をためる動作が不要で、すぐ読み書きできる
・リフレッシュ不要:回路が値を維持し続ける
・高価・低容量:1 ビットに多くの部品が要るため面積を食う
SRAM の最大の活躍の場がキャッシュメモリです。キャッシュとは、CPU が高速なのに主記憶(DRAM)が相対的に遅いという速度差を埋めるため、よく使うデータを CPU のすぐ近くに置いておく一時保管場所のことです。
身近な例で考えると、料理人の手元に置く小皿の調味料のようなものです。倉庫(主記憶)まで取りに行くと時間がかかるので、よく使う塩や砂糖は手の届く範囲(キャッシュ)に少しだけ置いておく。少量でも速さが効くこの役割には、高価でも高速な SRAM がぴったりです。
キャッシュは CPU との距離に応じて階層化されているのが一般的です。
・1 次キャッシュ(L1):CPU 内部にあり最速・最小
・2 次キャッシュ(L2):L1 より大きく少し遅い
・3 次キャッシュ(L3):複数コアで共有する大きめのキャッシュ
いずれも「速さ重視で少量」という条件のため、SRAM が採用されています。
RAM には SRAM(エスラム)と DRAM(ディーラム、Dynamic RAM = 動的RAM)の 2 種類があります。なぜ 2 種類あるのかというと、「速さ」と「大容量・低価格」を同時に満たすメモリは作れないからです。目的に合わせて使い分けています。
| 項目 | SRAM | DRAM |
|---|---|---|
| 記憶素子 | フリップフロップ(トランジスタ複数) | コンデンサ(電気をためる小さなバケツ) |
| 速度 | 高速(CPU に近い速さ) | 低速(SRAMより数倍〜10倍遅い) |
| 価格 | 高価(部品数が多い) | 安価(構造がシンプル) |
| 容量 | 低い(面積を食う) | 高い(集積しやすい) |
| リフレッシュ | 不要(回路が自己保持) | 必要(電荷が抜けるため定期書き直し) |
| 主な用途 | キャッシュメモリ | 主記憶(メインメモリ) |
DRAM がリフレッシュを必要とする理由を補足します。DRAM はコンデンサに電荷(電気の量)をためて「1」を表しますが、コンデンサはじっとしていると少しずつ電荷が漏れてしまいます。そのため何もしないと「1」が「0」に化けてしまうので、定期的に「電荷を補充して書き直す(リフレッシュ)」作業が必要です。この作業がある分、DRAM は SRAM より低速になります。
身近な例で考えると、SRAM はシーソー(安定した 2 状態)、DRAM は穴の開いたバケツ(放置すると水が減る)のイメージです。穴あきバケツは安く大量に作れますが、常に水を補給し続ける手間がかかります。
なぜキャッシュメモリに SRAM を使うのか。それは、キャッシュの仕事が「CPU の処理速度に追いつくこと」だからです。CPU はナノ秒(=10億分の1秒)単位で動いています。DRAM はリフレッシュがある分遅く、この速度についていけません。リフレッシュ不要で高速に応答できる SRAM だけが CPU に追いつける速さを持っています。
ただし SRAM は高価で容量が小さいため、全ての主記憶を SRAM にすることはコスト的に不可能です。そこで「よく使うデータだけを少量の SRAM(キャッシュ)に置いて CPU に素早く渡し、残りは大容量の DRAM(主記憶)に置く」という組み合わせが生まれました。
上の図のように、コンピュータの記憶装置は「速さ」と「容量」のトレードオフで階層になっています。
・キャッシュ(SRAM):CPU のすぐそば。少量だが最高速
・主記憶(DRAM):プログラム実行中のデータを乗せる
・補助記憶(SSD/HDD):大容量だが低速。電源を切っても残る
SRAM はこの階層の中で、CPU の処理速度と主記憶の速度の差を埋める「緩衝役」を担っています。