🧱💾🔢🔍
Chapter 2 — コンピュータの設計

主記憶(メモリ)
完全解説

アドレスはどう形成されるのか。ROM と RAM の違いは。SRAM と DRAM はどう動くのか。 現代のメモリ規格まで、主記憶のすべてを体系的に学ぼう。

⏱ 所要:35–45分·難易度:★★☆·前提:2進数・アーキテクチャ概要
Section 1

主記憶とは何か

CPU がプログラムを実行するための「作業台」

🏃

なぜ必要?

CPU のレジスタは数十個しかない。プログラムのコードもデータもすべては主記憶に格納され、 CPUが必要なものを都度読み書きする。電源を切ると内容は消えるため「一時記憶」とも呼ばれる。

📦

何が入っている?

フォン・ノイマン型では命令とデータを同じメモリに共存させる。 OS カーネル・実行中のプログラムコード・スタック・ヒープ・グローバル変数が それぞれのアドレス領域に配置される。

速さのポジション

レジスタ(~1ns)→ キャッシュ(~5ns)→ 主記憶(~60–100ns)→ SSD(~100µs)→ HDD(~10ms)の順に遅くなる。 主記憶は容量と速度の現実的なバランス点に位置する。

典型的なプロセスのメモリマップ(仮想アドレス空間)

高アドレス → 低アドレスの順に表示

高アドレス 0xFFFF…
カーネル
OS カーネル空間(保護)
スタック↓
関数のローカル変数・戻りアドレス(上から伸びる)
↑空き↓
未割当て(スタックとヒープが向かい合う)
ヒープ↑
動的確保(malloc / new)(下から伸びる)
.bss / .data
グローバル変数・静的変数
.text
プログラムコード(命令列)(読み取り専用)
低アドレス 0x0000…
Section 2

アドレスはどう形成されるか

n ビットのアドレスバスが持つ「場所を指し示す力」

アドレス空間の基本公式

アドレス可能な番地数

2n

n = アドレスバスのビット幅

×

1アドレスあたりのデータ幅

w ビット

通常は 8 ビット(1バイト)

=

メモリ総容量

2n × w bit

= 2n バイト(w=8 の場合)

🔢 アドレスビット幅 × 容量 計算機

32

アドレス空間 = 232 = 4,294,967,296 番地

4 GB

← 32ビット CPUの限界(4GB の壁)

アドレスバスの例(32 ビット)

各ビットが 0 or 1 → 組み合わせが「番地」になる

MAR

メモリアドレスレジスタ
Memory Address Register

CPU がメモリにアクセスするとき、まず読み書きしたい番地を MAR に格納する。 MAR の内容がアドレスバスに出力され、メモリ側で対象の番地が選択される。

MAR ← 0x0040_1C00  (読む番地を指定)
MDR

メモリデータレジスタ
Memory Data Register

実際に転送されるデータを一時保持するバッファ。 読み出しではメモリからデータが MDR に入り、書き込みでは MDR の内容がメモリに送られる。

MDR ← Mem[MAR]   (読んだデータが格納される)

3種類のシステムバス

アドレスバス

CPU → メモリへの一方向。MAR の内容を運ぶ。 ビット幅がアドレス空間の広さを決定する(32bit→4GB、64bit→16EB)。

データバス

CPU ↔ メモリの双方向。実際のデータ(命令・値)を転送する。 ビット幅(バス幅)が一度に運べるデータ量を左右する(64bit→8バイト/回)。

制御バス

読み出し(RD̄)・書き込み(WR̄)・メモリセレクト(CS̄) などの制御信号を運ぶ。 誰がバスを使うかの仲裁(アービトレーション)もここ。

メモリ読み出しトランザクションの手順

  1. アドレスバスに目的の番地を出力(MAR → アドレスバス)
  2. 制御バスに「読み出し」信号 RD̄ = 0 を出力
  3. メモリがアドレスをデコードし、該当セルのデータを準備(アクセスタイム分の待ち)
  4. データバスに値が現れる(メモリ → MDR)
  5. CPU が MDR を読み込んでレジスタに格納 → トランザクション完了
Section 3

メモリの分類体系

「揮発性か否か」×「読み書きできるか否か」で整理する

半導体メモリ
揮発性メモリ
(電源オフで消える)
不揮発性メモリ
(電源オフでも保持)
SRAM
Static RAM
キャッシュ
レジスタ
DRAM
Dynamic RAM
主記憶
(DIMM)
マスク ROM
出荷時固定
組込み
ファームウェア
PROM / EPROM
紫外線/電気書込み
一度だけ/
再書込み可
フラッシュ
EEPROM 系
SSD / NOR /
NAND

SRAM — Static Random Access Memory

各ビットをフリップフロップ(6つのトランジスタ)で保持する。電源がある限りデータを保持し続け、リフレッシュ操作が不要なため「Static(静的)」と呼ばれる。

  • アクセス時間:0.5〜5 ns(非常に高速)
  • 1ビットあたりの回路:6トランジスタ(面積大・高価)
  • 消費電力:スタンバイ時は少ないが、面積当たりサイズが大きい
  • 用途:CPU の L1/L2/L3 キャッシュ、レジスタファイル

SRAMセル(1ビット)

M1
M3
M5
⟷ インバータペア ⟷
M2
M4
M6

6T-SRAM
(6トランジスタ)

DRAM — Dynamic Random Access Memory

各ビットをコンデンサ1個+トランジスタ1個で保持する(1T-1C 構造)。 コンデンサは自然に放電するため、定期的なリフレッシュ(再書き込み)が必要。 これが「Dynamic(動的)」の由来。

  • アクセス時間:60〜100 ns(SRAM より遅い)
  • 1ビットあたり:1トランジスタ+1コンデンサ(面積小・安価・大容量)
  • リフレッシュ:64ms 以内に全行を周期的に再書き込み
  • 用途:PC の主記憶(DIMM)、グラフィックメモリ(GDDR)

行列アドレッシング(RAS/CAS)

DRAM はアドレスを行アドレス(RAS)列アドレス(CAS)に分けて送る。 これにより同じピン数で広いアドレス空間を実現(アドレスピンを多重化)。

DRAMセル(1ビット)

ビット線 (BL)
Tr(NMOS)
コンデンサ (C)
GND
ワード線 (WL) →

1T-1C DRAM

ROM 系 — Read Only Memory(読み出し専用メモリ)

マスク ROM

製造時に配線パターンでデータを焼き付ける。変更不可だが大量生産コストが最安。家庭用ゲームカートリッジなどに使われた。

PROM / EPROM

PROM は一度だけ電気的に書き込み可能。EPROM は紫外線照射でデータを消去して再書き込み可能。窓付きパッケージで有名。

EEPROM

電気的に消去・再書き込み可能。バイト単位で書き換えられる。PC の BIOS/UEFI チップに使われる。フラッシュメモリの前身。

💡 現代の PC では BIOS/UEFI を格納する SPI フラッシュチップが「ROM の役割」を果たしている(厳密にはフラッシュ)。

フラッシュメモリ — EEPROM の進化形

フローティングゲート(または電荷トラップ)にトンネリングで電荷を注入・消去することでビットを表現する。不揮発性で電源を切ってもデータが保持される。

NAND フラッシュ

セルを直列接続。大容量・低コスト。SSD・USB メモリ・SD カードに使用。書き換え単位はページ/ブロック。

NOR フラッシュ

セルを並列接続。ランダムアクセス高速。マイコンのプログラム格納(XIP 実行)に最適。容量は小さい。

セルあたりのビット数(NAND)

SLC
1 bit/セル(高耐久・高速)
MLC
2 bit/セル(バランス型)
TLC
3 bit/セル(高密度・廉価)
QLC
4 bit/セル(最大容量)

ビット数↑ = 容量↑・コスト↓ だが耐久性・速度↓

Section 3.5

DRAM と SRAM:仕組みと用途を比較

「Dynamic(動的)」と「Static(静的)」 — 名前の違いが本質を表す

D

DRAM

Dynamic Random Access Memory

Dynamic(動的) の意味は「データが動いて(消えて)しまう」。 1ビットをコンデンサ+トランジスタ(1T-1C)で記憶するが、コンデンサの電荷は自然に漏れる。 データを維持するには定期的なリフレッシュ(再書き込み)が必要。

🔋

コンデンサのイメージ

充電中 = 1 / 放電中 = 0
放置すると電荷が漏れてしまう → リフレッシュ必要

S

SRAM

Static Random Access Memory

Static(静的) の意味は「データが静止したまま(消えない)」。 1ビットを6個のトランジスタ(フリップフロップ回路)で記憶する。 電源が入っている限りデータが安定して保持され、リフレッシュ不要で非常に高速。

🔄

フリップフロップのイメージ

2つのインバータが互いを安定保持
電源がある限りデータを維持 → リフレッシュ不要

DRAM vs SRAM 比較表

項目 DRAM SRAM
構造(1ビット) トランジスタ × 1 + コンデンサ × 1
(1T-1C)
トランジスタ × 6(フリップフロップ)
(6T)
リフレッシュ 必要
(64ms 以内に全行)
不要
(電源 ON 中は安定保持)
アクセス速度 遅い
60〜100 ns
速い
0.5〜5 ns
集積度(密度) 高い
(1T-1C で面積小)
低い
(6T で面積大)
製造コスト 安い 高い(約6倍)
大容量化 容易
(主記憶に採用)
困難
(複雑な回路構造)
主な用途 主記憶(DIMM)
GDDR(GPU VRAM)
CPU キャッシュ(L1/L2/L3)
レジスタファイル
揮発性 揮発性(電源 OFF で消える) 揮発性(電源 OFF で消える)

※ DRAM・SRAM はともに揮発性。「電源を切っても消えない」のはフラッシュメモリ(ROM 系)。

CPU・キャッシュ(SRAM)・主記憶(DRAM)の役割分担

処理を高速化するバッファとして SRAM(キャッシュ)が CPU と DRAM の橋渡しをする

🧠

CPU

演算装置

超高速
① まずキャッシュを確認
ヒット率 ~95%

SRAM

キャッシュ

L1 / L2 / L3

高速・小容量
② ミス時のみ
(約 5% の確率)
💾

DRAM

主記憶

DIMM

低速・大容量
  1. CPU がデータを要求 → まず SRAM(キャッシュ) を確認。ヒットすれば数クロックで完了(高速)。
  2. キャッシュに無い場合(キャッシュミス)→ DRAM(主記憶) へアクセス。約 60〜100 ns(200 クロック以上)の待ち時間が発生。
  3. DRAM から取得したデータを キャッシュにも格納(次回アクセス時に再利用)し、CPU に渡す。

💡 これが「キャッシュ=SRAM、主記憶=DRAM」という使い分けの本質。高速・高価な SRAM を「緩衝役」に使うことで、安価・大容量の DRAM へのアクセス頻度を大幅に下げ、システム全体のスループットを高める。

❓ 「全部 SRAM にすればよいのでは?」

もっともな疑問です。SRAM はリフレッシュ不要で高速なら、主記憶もすべて SRAM にすれば問題が解決するように思えます。しかし現実はそうなっていません。

💰

コストの問題

SRAM の 1 ビットは DRAM の約 6 倍 のトランジスタを必要とする。同じ予算では DRAM の 1/6 以下の容量しか作れない。現在の PC メモリ(16〜64 GB)を SRAM で代替すると価格が跳ね上がる。

📐

面積(密度)の問題

6T 構造は回路が複雑でダイ面積が大きい。DRAM と同じ面積では 1/6〜1/10 程度の容量しか実現できない。大容量 SRAM チップの製造は非常に困難。

消費電力の問題

大容量 SRAM はスタンバイ時の漏れ電流が多く、スマートフォン・ノート PC などのバッテリー駆動に不向き。モバイル用途では LPDDR が DRAM 系として採用される理由でもある。

✅ 結論:DRAM と SRAM は「適材適所」

安価・大容量の DRAM を主記憶に、高速・小容量の SRAM をキャッシュに — 両者を組み合わせることで性能とコストのバランスを実現する。

Section 4

DRAM の内部:行列アドレッシング

なぜアドレスを「行」と「列」に分けて送るのか?

DRAM チップの内部は巨大な行列(アレイ)で構成されている。 例えば 256Mbit のチップなら 16,384 行 × 16,384 列 × 1bit という構成。

アドレスピンを多重化して行アドレスと列アドレスを時分割で送ることで、 ピン数を約半分に削減できる。これが RAS(Row Address Strobe)/ CAS(Column Address Strobe)の仕組み。

DDR タイミングパラメータの意味

CL(CAS レイテンシ):列アドレスを出してからデータが出るまでのクロック数
tRCD:行アクティブ → 列アクセスまでの最小クロック数
tRP:プリチャージ(行クローズ)にかかるクロック数
tRAS:行アクティブ維持の最小クロック数

例:「DDR5-6000 CL30-38-38-96」= CL=30, tRCD=38, tRP=38, tRAS=96

DRAM セルアレイ(簡易シミュレーション)

▼「アクセス開始」をクリック

充電済み(1) 放電(0) 行選択中 最終選択

⚡ リフレッシュとは

DRAM のコンデンサは数ミリ秒で自然放電するため、メモリコントローラが定期的に全セルを読み出して再書き込みする(リフレッシュ)。 規格では 64ms 以内に全行(tREFI:~7.8µs ごとに 1 行)をリフレッシュするよう定められている。 この操作中は通常のアクセスが一瞬妨げられ、リフレッシュオーバーヘッドとなる(全帯域の約 1〜3%)。

Section 5

メモリ階層

速さ・容量・コストのトレードオフを階層で解決する

レジスタ
L1 キャッシュ
L2 キャッシュ
L3 キャッシュ
主記憶(DRAM)
SSD / NVMe
HDD / テープ

← 各層をクリック →

速↑ 高価↑ 小容量↑ 遅↓ 安価↓ 大容量↓

← 階層をクリックして詳細を表示

💡 局所性の原理(Locality of Reference)

⏱ 時間的局所性

一度アクセスしたデータはすぐまたアクセスされる可能性が高い。ループ変数やカウンタがその典型。キャッシュに残すと高速化できる。

📍 空間的局所性

あるアドレスにアクセスしたら、その近傍のアドレスにもアクセスしやすい。配列の逐次アクセスや命令列がその例。キャッシュラインまとめ読みで活かす。

メモリ階層が「実用的に機能する」のはこの局所性のおかげ。現実のプログラムは小さな作業セットを繰り返し使うため、キャッシュのヒット率が非常に高く保たれる。

Section 6

現代のメモリ規格

DDR5 から HBM まで — 何が進化したのか

DDR SDRAM の世代比較

世代 最大転送速度 動作電圧 バースト長 主な登場時期
DDR13.2 GB/s2.5 V2〜82000年
DDR28.5 GB/s1.8 V4〜82003年
DDR317 GB/s1.5 V82007年
DDR451 GB/s1.2 V82014年
DDR589+ GB/s1.1 V162020年〜現在

* 転送速度はデュアルチャネル構成の理論最大値。DDR5 はチャネルを 2 分割してさらに効率化。

🏔️

HBM(High Bandwidth Memory)

DRAM をシリコンインターポーザー上に3次元積層して GPU 近傍に配置。 広いバス幅(1024bit 以上)で超高帯域を実現。 AI・HPC 用 GPU(NVIDIA A100/H100、AMD Instinct)で採用。

帯域 900+ GB/s(H100 HBM3e)
📱

LPDDR(Low Power DDR)

モバイル向けに消費電力を最適化した DDR 派生規格。電圧・クロックの動的調整により理想帯域と省電力を両立。 スマートフォン・タブレット・ノート PC(Apple Silicon を含む)に搭載。

LPDDR5X:最大 85 GB/s(モバイル最新)
🎮

GDDR(Graphics DDR)

GPU のビデオメモリ専用に最適化。レイテンシより広帯域を優先し、ピン当たりの転送速度を高速化。 ゲーミング GPU の VRAM として広く使用。

GDDR7:最大 1.8 TB/s(RTX 5090)

メモリモジュール(DIMM)の種類

DIMM

DIMM(288 ピン)

デスクトップ・サーバー向け。240–288 ピン。DDR4/DDR5用。両面に独立したピン配列。

SO-DIMM

SO-DIMM(260 ピン)

ノート PC 向けの小型版。幅が約半分。DIMM と電気的仕様は同等。

デュアルチャネル・クアッドチャネル

メモリスロットを 2 枚(4 枚)組で使うことでメモリコントローラとのバス幅を 2 倍(4 倍)にする技術。DDR5-6000 シングルチャネル = 48 GB/s、デュアルチャネル = 96 GB/s と大幅な帯域向上。スロット A1 + B1 など同色スロットに同一仕様の DIMM を挿すのが基本。

サーバー向けの ECC メモリ は 1 ビット誤り訂正・2 ビット誤り検出の機能を持ち、データセンターや金融システムの信頼性に不可欠。

Section 7

メモリウォール — なぜ CPU だけ速くなるのか

半導体の進化スピードの「非対称性」と、その先にある In-Memory Computing

CPU vs DRAM:性能成長率の乖離(1980 → 2025)

CPU クロック・IPC(演算性能) ×1
DRAM 帯域幅 ×1
DRAM レイテンシ(短いほど良い) 改善率 ×1

* CPU 演算性能は約 ×50,000(ムーアの法則 + IPC向上)、DRAM帯域は約 ×500、レイテンシは約 ×10 しか改善していない

なぜ CPU はここまで速くなったのか

  • スケーリング(ムーアの法則):トランジスタが微細化するほどクロックが上がり消費電力が下がる。2nm 世代へ
  • IPC(命令並列性)向上:パイプライン・スーパースカラー・OoO 実行でクロック1回に複数命令を処理
  • マルチコア化:2005年以降、コア数を増やして見かけの性能をさらに伸ばす
  • SRAM キャッシュ拡大:敷地をダイ上に確保し、メモリへのアクセス頻度を減らして補完

なぜ DRAM のレイテンシは改善しにくいのか

  • 物理的な RC 遅延:配線抵抗 × コンデンサの充放電時間は微細化しても比例して縮まらない
  • 行アクティベーション時間(tRCD):コンデンサ電荷を増幅するセンスアンプの動作時間は物理限界がある
  • 基板上の距離:CPU と DIMM が別パッケージ → 信号伝送距離が縮まらない
  • 容量優先の設計:DRAM は 1T-1C の高密度を維持しながら大容量化を優先 → 速度より容量をトレードオフ

フォン・ノイマンボトルネックとウォールの関係

🧠

CPU(演算)

FLOPS では
毎年 50〜100% 速くなる
(AI 加速器含む)

🚨
バス帯域が
ボトルネック
データが渋滞
💾

主記憶(DRAM)

レイテンシは
40年で 10倍しか
改善していない

メモリウォール(Memory Wall)」という言葉は 1994年に Wulf & McKee が論文 "Hitting the memory wall: implications of the obvious" で提唱。 CPU が計算を終えても次のデータが届かかず「待つ」状態(メモリレイテンシストール)が性能の天井を作る。 現代の高性能 CPU では全実行時間の 30〜50% がメモリ待ちに消費されると言われる。 この問題を「演算をデータの近くに持っていく」発想で根本から解決しようとするのがIn-Memory Computing(処理内包メモリ)だ。

ルーフラインモデル — 演算とメモリどちらが律速か

ルーフラインモデルは「演算強度(Arithmetic Intensity: AI)」= FLOP ÷ Byte で プログラムのボトルネックがどちらにあるかを可視化する。

メモリ律速 AI が低い:1バイト転送するたびに少ない演算しかしない。帯域を増やさない限り上限が決まる
演算律速 AI が高い:データは少なく演算が多い。コアの FLOPS を上げると速くなる

典型的な演算強度

行列・ベクトル乗算(BLAS-1): ~0.25 FLOP/B(メモリ律速)

一般的な行列積(GEMM): ~N/2 FLOP/B(サイズが大きくなるほど演算律速)

深層学習(大バッチ推論): 10〜100 FLOP/B(演算律速に近づく)

0.1 1 10 100 演算強度(FLOP/B)→ 性能(GFLOPS)↑ メモリ律速 帯域幅の傾き 演算律速 ピーク FLOPS リッジ点

ルーフラインモデル概略図

延伸:次世代アーキテクチャ

In-Memory Computing(処理内包メモリ)

「演算をデータの場所に持っていく」発想の転換

従来のアーキテクチャでは CPU が「データを引き取って演算」するが、In-Memory Computing では メモリアレイ内部やその近傍で直接演算を行う。 データ移動量(バイト転送量)を劇的に削減し、エネルギー効率と速度を同時に改善できる。 AI・ビッグデータ時代の重要な研究テーマとして急速に注目されている。
🔗

PIM
Processing In Memory

DRAM チップの一部に演算ユニットを集積する。Samsung の HBM-PIM・SK Hynix の AiM などが代表例。 メモリ内部バスは外部バスの 100〜1000 倍の帯域があるため、演算コアをメモリ近傍に置けば転送律速を根本から解消できる。

Samsung AiM:2 TFLOPS @ 内部帯域 1.2 TB/s
🧠

Analog CIM
Compute In Memory(アナログ)

SRAM / RRAM / PCM セルのアレイに重みを格納したまま行列積を実行する。 電圧・電流の重畳でオームの法則を使って多値積和演算を一度に行う(アナログ行列積)。 ニューラルネットワーク推論に特化。MAC 演算のエネルギーを数十分の一に削減できる。

研究例:IBM PCM CIM, TSMC SRAM-CIM
📦

Near-Memory Computing
メモリ近傍演算

演算コアをメモリパッケージと同一インターポーザー上に近接配置(3D 積層など)。 HBM + Logic Die 構成がその典型。NVIDIA H100 の HBM3 積層や AMD の 3D V-Cache もこの思想に近い。 完全なインメモリ演算ではないが、データ移動コストを大幅に削減する中間アプローチ。

NVIDIA H100 HBM3: 3.35 TB/s(近傍演算の恩恵大)

アーキテクチャ比較:どれがどこで有効か

方式 データ移動削減 精度 主なターゲット用途 成熟度
従来 CPU + DRAM ✗ 基準 64bit 浮動小数点 汎用 製品
GPU + HBM △ ×5〜10 BF16/FP32 AI 学習・推論・HPC 製品
Near-Memory (HBM-PIM) ○ ×20〜50 FP16/INT16 AI 推論・DB 解析 初期製品
Analog CIM (SRAM) ◎ ×100〜 低精度 INT4/INT8 エッジ AI・IoT 推論 研究〜試作

⚠️ In-Memory Computing の課題

精度の問題:アナログ演算はノイズや素子ばらつきにより高精度計算が難しく、AI 向けの低精度推論に限られる傾向
プログラマビリティ:既存のソフトウェアスタック(CUDA, PyTorch など)との統合が難しく、新たなコンパイラ・ランタイムが必要
発熱・信頼性:メモリアレイ内で演算すると局所的な発熱が増し、セルの耐久性・データ保持に影響しうる
汎用性トレードオフ:特定演算(行列積・AND/OR)には強いが、複雑な制御フローが多いプログラムへの適用は限定的
まとめ

理解度チェック

各問に答えて知識を確認しよう

🎓 次のステップ: 主記憶とメモリウォールの仕組みを理解したら、CPU 性能評価でレイテンシがプログラム全体の速度にどう効いてくるか(アムダールの法則)を確認しよう。 プロセッサ比較では GPU の HBM が AI に不可欠な理由と Near-Memory Computing の実像を詳しく扱っている。