computer system foundationCSF 2026
コンピュータの設計 / 03.3

主記憶(メモリ)

アドレスはどう作られるのか。ROM と RAM は何が違うのか。SRAM と DRAM はどう動くのか。 現代のメモリ規格と「メモリウォール」まで、主記憶を一気に見通す。

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

主記憶とは何か

CPU がプログラムを実行するための「作業台」である。03.1 で見たフォン・ノイマン型の構成要素のうち、ここを詳しく開けていく。

なぜ必要か
レジスタだけでは足りない

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

何が入っているか
命令とデータが同居する

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

速さの位置づけ
階層のちょうど真ん中

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

1つのプログラムから見たメモリは、次のように区画分けされている。 アドレスの高いほうから低いほうへ並べたのが下の図である。

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

アドレスはどう作られるか

メモリの「番地」は、アドレスバスの本数だけで決まる。n 本あれば 2n 通りの番地を指せる——それだけの話である。

アドレス空間の基本公式
アドレス可能な番地数
2n
n = アドレスバスのビット幅
1番地あたりのデータ幅
w ビット
通常は 8 ビット(1バイト)
メモリ総容量
2n × w
w = 8 なら 2n バイト
アドレスビット幅 × 容量 計算機
32
アドレス空間 = 232 = 4,294,967,296 番地
4.0 GiB
32 ビット CPU の限界(4GB の壁)
アドレスバスのビット(先頭32本まで表示)
各ビットが 0 か 1 → その組み合わせが「番地」になる

CPU 側でアドレスとデータを保持するのが、この2つのレジスタである。

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バイト/回)。

制御バス

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

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

メモリの分類体系

半導体メモリは「電源を切ると消えるか」で大きく2つに分かれる。そこから先が、SRAM / DRAM / ROM / フラッシュである。

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

SRAM — Static Random Access Memory

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

  • アクセス時間:0.5〜5 ns(非常に高速)
  • 1ビットあたりの回路:6トランジスタ(面積が大きく高価)
  • 消費電力:スタンバイ時は少ないが、面積あたりの容量が小さい
  • 用途:CPU の L1 / L2 / L3 キャッシュ、レジスタファイル
SRAM セル(1ビット)
M1M3M5 M2M4M6
インバータ2個が互いを保持
6T-SRAM

DRAM — Dynamic Random Access Memory

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

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

DRAM はアドレスを行アドレス(RAS)列アドレス(CAS)に分けて送る。同じピン数でより広いアドレス空間を扱えるようにするためである(05 節で動かす)。

DRAM セル(1ビット)
ビット線 (BL) Tr(NMOS) コンデンサ (C) GND
ワード線 (WL) が Tr を開く
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)
SLC1 bit / セル(高耐久・高速)
MLC2 bit / セル(バランス型)
TLC3 bit / セル(高密度・廉価)
QLC4 bit / セル(最大容量)

1セルに詰め込むビット数を増やすほど容量が増えコストは下がるが、耐久性と速度は落ちる。

04

DRAM と SRAM を比べる

「Dynamic(動的)」と「Static(静的)」——この名前の違いが、そのまま両者の本質を表している。

DRAM Dynamic Random Access Memory
Dynamic = データが動いて(消えて)しまう

1ビットをコンデンサ+トランジスタ(1T-1C)で記憶するが、コンデンサの電荷は自然に漏れる。データを保つには定期的なリフレッシュ(再書き込み)が要る。

コンデンサのイメージ

充電されている = 1/放電している = 0。放っておくと電荷が漏れる → だからリフレッシュが必要。

SRAM Static Random Access Memory
Static = データが静止したまま消えない

1ビットを6個のトランジスタ(フリップフロップ回路)で記憶する。電源が入っている限りデータが安定して保たれ、リフレッシュ不要で非常に高速である。

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

2つのインバータが互いの出力を保持し合う。電源がある限りデータを維持 → リフレッシュ不要。

項目DRAMSRAM
構造(1ビット)Tr × 1 + コンデンサ × 11T-1CTr × 6(フリップフロップ)6T
リフレッシュ必要64 ms 以内に全行不要電源 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)の役割分担
CPU
演算装置
超高速
SRAM
キャッシュ L1/L2/L3
高速・小容量
DRAM
主記憶 DIMM
低速・大容量
  1. CPU がデータを要求 → まず SRAM(キャッシュ)を確認。ヒットすれば数クロックで完了する。
  2. キャッシュに無い場合(キャッシュミス)→ DRAM(主記憶)へアクセス。60〜100 ns(200クロック以上)の待ちが発生する。
  3. DRAM から取ったデータをキャッシュにも入れて(次回のために)、CPU に渡す。
これが「キャッシュ=SRAM、主記憶=DRAM」という使い分けの本質である。 高速で高価な SRAM を緩衝役に置くことで、安価で大容量の DRAM へのアクセス頻度を大きく下げている。
よくある疑問
「全部 SRAM にすればよいのでは?」

もっともな疑問である。リフレッシュ不要で高速なら、主記憶も全部 SRAM にすれば解決しそうに思える。しかし現実はそうなっていない。理由は3つある。

コスト

SRAM の1ビットは DRAM の約6倍のトランジスタが要る。同じ予算では DRAM の 1/6 以下の容量しか作れない。

面積(密度)

6T 構造は回路が複雑でダイ面積が大きく、同じ面積なら 1/6〜1/10 の容量しか実現できない。

消費電力

大容量 SRAM はスタンバイ時の漏れ電流が多く、バッテリー駆動の機器に向かない。モバイルで LPDDR が使われる理由でもある。

結論:DRAM と SRAM は適材適所。 安価で大容量の DRAM を主記憶に、高速で小容量の SRAM をキャッシュに——組み合わせることで性能とコストのバランスを取っている。
05

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

なぜアドレスを「行」と「列」に分けて送るのか。実際に1つのセルを取り出すところを動かしてみましょう。

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

アドレスピンを多重化し、行アドレスと列アドレスを時分割で送ることで、ピン数を約半分に減らせる。 これが 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 のコンデンサは数ミリ秒で自然放電するため、メモリコントローラが定期的に全セルを読み出して書き戻す。 規格では 64 ms 以内に全行(約 7.8 µs ごとに1行)をリフレッシュすると決まっている。 この間は通常のアクセスが一瞬妨げられ、全帯域の約 1〜3% がリフレッシュに消える。
06

メモリ階層

速さ・容量・コストは同時に満たせない。だから性質の違う記憶装置を積み重ねる。各層をクリックすると実際の数字が出る。

レジスタ
L1 キャッシュ
L2 キャッシュ
L3 キャッシュ
主記憶(DRAM)
SSD / NVMe
HDD / テープ
上ほど 速い・小容量・高価 下ほど 遅い・大容量・安価
左の階層をクリックしてください
局所性の原理(Locality of Reference): 時間的局所性=一度アクセスしたデータはすぐまた使われる(ループ変数など)。 空間的局所性=あるアドレスを使ったら、その近くも使う(配列の走査、命令列など)。 メモリ階層が実用的に機能するのは、この2つの性質のおかげである。現実のプログラムは小さな作業セットを繰り返し使うので、キャッシュのヒット率が高く保たれる。
07

現代のメモリ規格

店頭で見る「DDR5-6000」のような表記が何を意味するのか。世代ごとに何が変わってきたのかを見る。

世代最大転送速度動作電圧バースト長登場時期
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年〜現在

転送速度はデュアルチャネル構成の理論最大値である。世代が進むごとに速度は上がり、電圧は下がっていることに注目してください。

HBM High Bandwidth Memory

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

帯域 3.35 TB/s(H100 の HBM3)
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(288ピン)

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

SO-DIMM(260ピン)

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

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

メモリを2枚(4枚)組で使い、メモリコントローラとのバス幅を2倍(4倍)にする技術である。DDR5-6000 のシングルチャネルが 48 GB/s なら、デュアルチャネルで 96 GB/s。マザーボードの同色スロットに同一仕様の DIMM を挿すのが基本である。

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

08

メモリウォール

03.2 で「メモリの壁」という言葉が出てきた。ここでその中身を見る。 1980年から現在まで、CPU とメモリはまったく違う速さで進化してきた。

CPU と DRAM の性能成長率(1980 → 2025)
CPU クロック・IPC(演算性能)×1
DRAM 帯域幅×1
DRAM レイテンシ(改善率)×1

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

なぜ CPU はここまで速くなったのか
  • スケーリング(ムーアの法則):微細化するほどクロックが上がり消費電力が下がる
  • IPC の向上:パイプライン・スーパースカラー・OoO 実行で1クロックに複数命令
  • マルチコア化:2005年以降、コア数を増やして見かけの性能を伸ばす
  • SRAM キャッシュの拡大:ダイ上に面積を確保し、メモリへのアクセス自体を減らす
なぜ DRAM のレイテンシは改善しにくいのか
  • 物理的な RC 遅延:配線抵抗 × コンデンサの充放電時間は微細化しても比例して縮まない
  • センスアンプの動作時間:微弱な電荷を増幅する時間には物理的な限界がある
  • 基板上の距離:CPU と DIMM が別パッケージなので、信号の伝送距離が縮まらない
  • 容量優先の設計:DRAM は速度より容量を優先してきた
フォン・ノイマンボトルネック
CPU(演算)

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

バス帯域が
ボトルネック
データが渋滞する
主記憶(DRAM)

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

メモリウォール」という言葉は 1994年に Wulf と McKee が論文 "Hitting the memory wall: implications of the obvious" で提唱した。 CPU が計算を終えても次のデータが届かず「待つ」状態(メモリレイテンシストール)が、性能の天井を作る。 現代の高性能 CPU では、全実行時間の 30〜50% がメモリ待ちに消えるとも言われる。
ルーフラインモデル — 演算とメモリ、どちらが律速か

演算強度(FLOP ÷ Byte)を横軸に取ると、そのプログラムのボトルネックがどちらにあるかが一目で分かる。

メモリ律速演算強度が低い。1バイト運ぶたびに少ししか計算しない。帯域を増やさない限り上限が決まる
演算律速演算強度が高い。データは少なく演算が多い。コアの 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 のセルアレイに重みを格納したまま行列積を実行する。電圧と電流の重ね合わせでオームの法則を使い、多値の積和演算を一度に行う。ニューラルネット推論に特化。

研究例:IBM PCM-CIM / TSMC SRAM-CIM
Near-Memory Computing

演算コアをメモリパッケージと同じインターポーザー上に近接配置する(3D 積層など)。HBM + Logic Die 構成が典型で、NVIDIA H100 や AMD の 3D V-Cache もこの思想に近い中間アプローチである。

NVIDIA H100 HBM3:3.35 TB/s
方式データ移動削減精度主なターゲット成熟度
従来 CPU + DRAM基準64bit 浮動小数点汎用製品
GPU + HBM×5〜10BF16 / FP32AI 学習・推論・HPC製品
Near-Memory (HBM-PIM)×20〜50FP16 / INT16AI 推論・DB 解析初期製品
Analog CIM (SRAM)×100〜低精度 INT4 / INT8エッジ AI・IoT 推論研究〜試作
In-Memory Computing の課題: ① アナログ演算はノイズや素子ばらつきの影響を受け、高精度計算が難しい。 ② 既存のソフトウェアスタック(CUDA、PyTorch など)との統合が難しく、新しいコンパイラとランタイムが要る。 ③ メモリアレイ内で演算すると局所的な発熱が増え、セルの耐久性やデータ保持に影響しうる。 ④ 特定の演算には強い一方、複雑な制御フローの多いプログラムへの適用は限定的。
09

理解度チェック

7問ある。選ぶと解説が出る。間違えても、なぜそうなるかを読めば十分である。

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