メモリ(作業机)— 今すぐ使うものを広げる場所

概要 — まず全体をつかむ

初級ではメモリを「作業台」と捉えました。中級では、メモリの正体(RAM)と、速さを決める要素を見ます。

詳細 — 1段階ずつ追う

これは何をする係?

メモリの実体はRAM(Random Access Memory)で、どの番地にもほぼ同じ速さで直接アクセスできる揮発性の記憶装置です。CPUはここに置かれた命令とデータを直接読み書きします(主記憶)。

RAMには大きく2種類あります。

  • DRAM — コンデンサで1ビットを記憶。安価で大容量にしやすいが、電荷が抜けるためリフレッシュ(定期的な再書き込み)が必要。主に主記憶に使う
  • SRAM — フリップフロップで記憶。高速でリフレッシュ不要だが高価・大容量化しにくい。主にCPUのキャッシュに使う
アニメーション『メモリ=作業机』を開く
メモリ=作業机いま使うものを広げておく場所。CPUがここから素早く出し入れする👨‍🍳CPU(料理人)すぐ手を伸ばして使う使う戻すブラウザ資料編集中のデータ作業机(メモリ)いま動かしているアプリ・データを広げている机に出すしまう引き出し/棚ストレージ(しまってある物)机は広いほど同時に作業できるただし、電源を切ると机の上は片付いてしまう(揮発性)。残したいものはストレージへ
この部分をもっと深く(上級

記憶は1種類では成り立ちません。速いメモリは高価で小さく、大きいメモリは安いが遅い——この矛盾を、層に積むことで解いています。

  • レジスタ — CPU内。最速だが数十個ぶん
  • L1/L2/L3キャッシュ(SRAM) — コアに近いほど速く小さい
  • 主記憶(DRAM) — 大容量だがキャッシュより桁違いに遅い
  • スワップ(ストレージ上) — あふれた分の退避先。さらに桁違いに遅い
アニメーション『記憶の階層(速さと容量)』を開く
速い・小さい遅い・大きい記憶の階層レジスタCPU直近で最速・最小L1キャッシュコアごとの最速メモリL2・L3キャッシュやや大きい高速メモリメモリ(RAM)作業机・電源で消える(揮発)SSD倉庫・速い(消えない)HDD倉庫・大容量(消えない)速さと容量はトレードオフ。よく使うものを上へ置き、全体を速く見せる

上ほど速く小さく、下ほど遅く大きい。よく使うものを上の層に集められれば、全体としては速いのに大きい——見かけを両立できます。その「集め方」を支えるのが次の局所性です。ストレージ側の階層は storage で扱います。

やさしく言うと(初級

料理中、よく使う材料や道具は作業台に出しておきますよね。メモリも同じで、いま動かしているアプリやデータを広げておく場所です。CPUはここから素早く出し入れします。

メモリ(RAM)モジュール
メモリ — 今すぐ使うデータを広げる作業机

ただし、メモリは電源を切ると中身が消えます(揮発性)。だから「作業台」であって「保管庫」ではありません。保管はストレージの役目です。

アニメーション『メモリ=作業机』を開く
メモリ=作業机いま使うものを広げておく場所。CPUがここから素早く出し入れする👨‍🍳CPU(料理人)すぐ手を伸ばして使う使う戻すブラウザ資料編集中のデータ作業机(メモリ)いま動かしているアプリ・データを広げている机に出すしまう引き出し/棚ストレージ(しまってある物)机は広いほど同時に作業できるただし、電源を切ると机の上は片付いてしまう(揮発性)。残したいものはストレージへ

ストレージとの違い

  1. 速さ — メモリ(RAM)はストレージより桁違いに速い。ただしCPUのキャッシュ(SRAM)よりは遅い
  2. 消えるか — メモリは揮発性で電源を切ると消える/ストレージは不揮発性で残る
  3. 役割 — メモリは「今使うもの」を広げる作業場/ストレージは「しまっておく」保管庫

速さの階層は「CPU内レジスタ → キャッシュ(SRAM)→ 主記憶(DRAM)→ ストレージ」の順。上ほど速く小さく、下ほど遅く大きくなります。

この部分をもっと深く(上級

キャッシュが成立する根拠は、プログラムのアクセスに偏りがあることです。

  1. 時間的局所性 — いま触れたデータ・命令は、近いうちにまた触れやすい(ループ変数など)
  2. 空間的局所性 — あるアドレスに触れたら、その近くも続けて触れやすい(配列の連続走査など)

だからキャッシュは1バイト単位でなく、キャッシュライン(※1 キャッシュライン、64バイト前後)でまとめて持ってきます。1回のミスで周辺ごと引き込めば、続く空間的アクセスはヒットします。

登場人物メモ:

  • ※1 キャッシュライン — キャッシュが出し入れする最小のまとまり。1バイト欲しくても行ごと運ぶ

ヒット率が性能を左右します。目安でL1ヒットが数ns・主記憶が約100nsなら、ヒット率が数%変わるだけで平均アクセス時間が大きく動きます。「計算より、データが来るのを待つ時間」が全体を決めることが多いのはこのためです。

やさしく言うと(初級
  1. 速さ — メモリは速い(作業台)/ストレージは遅い(冷蔵庫)
  2. 消えるか — メモリは電源で消える/ストレージは残る
  3. 役割 — メモリは「今使うもの」/ストレージは「しまっておくもの」

作業は「ストレージから出す → メモリに広げる → 使う → 片付ける(保存はストレージへ)」の流れです。

容量が効く場面

速さは容量だけでは決まりません。実効性能を左右する主な要素は次のとおりです。

  • レイテンシ — アクセス要求から実際にデータが返るまでの待ち時間
  • バス幅とチャネル数 — 一度に運べる幅。デュアルチャネルにすると実効バス幅が増え、帯域(1秒あたりの転送量)が上がる
  • クロック(転送レート) — 単位時間あたりのやり取り回数

そして容量が足りないと、あふれた分を仮想メモリとしてストレージ上の領域(スワップ/ページファイル)に退避します。ストレージはDRAMより桁違いに遅いため、これが多発すると動作が急に重くなります。

この部分をもっと深く(上級

各プロセスには、実メモリの量や配置と切り離した仮想アドレス空間が与えられます。「自分だけが広い連続メモリを持っている」という見かけを、OSとハードが作ります。

  • ページ — アドレス空間を固定長(多くは4KB)に区切った単位
  • ページテーブル — 仮想ページ → 物理ページ の対応表。変換は※2 MMUが担う
  • TLB — 直近の変換結果をためる小さなキャッシュ。無いと表をたどり直す(遅い)
  • ページフォルト — 目的ページが主記憶に無いときの割り込み。OSがストレージから読み込む(重い)
  • スワップ — 使っていないページをストレージへ退避し、空きを作る
アニメーション『仮想メモリ(見せかけの広い空間)』を開く
仮想メモリ — 広い仮想アドレスを、狭い物理メモリ+ストレージへ対応づけるプロセスが見る仮想アドレス空間(広い)仮想ページ V0仮想ページ V1仮想ページ V2仮想ページ V3仮想ページ V4仮想ページ V5⋮ さらに続く(見かけ上とても広い)ページテーブル(対応表)V0実メモリ F2V1実メモリ F0V2スワップへ退避V3実メモリ F3V4スワップへ退避V5実メモリ F1実メモリへ足りない分は退避(スワップ)実際の物理メモリ(狭い)フレーム F0(V1)フレーム F1(V5)フレーム F2(V0)フレーム F3(V3)スワップ(ストレージへ退避)V2V4当面使わないページを退避(遅い)広く見せかけ、足りない分はストレージで代用(スワップ)。使いすぎると激遅になる

登場人物メモ:

  • ※2 MMU — メモリ管理ユニット。仮想アドレスを物理アドレスへ変換するCPU内の回路

このおかげで、各プロセスは他をのぞけず(保護)、物理より広いアドレスを扱え(スワップ)、断片化した物理メモリを連続に見せられます。プロセスごとに空間が分かれる話は process-and-thread と、CPU側の実行は cpu につながります。

やさしく言うと(初級
  • たくさん同時に開く — アプリやタブを多く開くほど、広い作業台が要る
  • 大きなデータ — 動画編集や大きな表など、広げる量が多い作業

足りないと、あふれた分を遅いストレージで代用(スワップ)して、動作が急に重くなります。

⚠️ うまくいかないとき

  • 重い・カクつく — メモリ不足で仮想メモリへの退避(スワップ)が多発し、遅いストレージ待ちが増える
  • 保存し忘れで消える — 揮発性なので、電源が切れると主記憶上の作業内容は失われる
  • まれなビット反転 — 宇宙線やノイズで1ビットが化けることがある。サーバ用途ではECCメモリが誤りを検出・訂正する
この部分をもっと深く(上級
  • スラッシング — メモリ不足でページの出し入れが多発し、実処理よりスワップ待ちが増えて激重になる
  • TLBミスの多発 — 広いメモリをまばらに触ると変換キャッシュが外れ、ページウォークが増える
  • キャッシュに乗らない書き方 — 大きな配列を飛び飛びに触ると空間的局所性が崩れ、ミスだらけになる
  • 保存し忘れ — 主記憶は揮発性。電源が切れれば作業内容は消える(こまめに保存)
やさしく言うと(初級
  • 重い・カクつく — メモリ不足でスワップが多発
  • 保存し忘れで消える — 作業中の内容はメモリ上。電源が切れると失われる(こまめに保存)

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. 同じ容量でもメモリの実効速度に効きにくい要素はどれ?

2. 主記憶に多く使われるDRAMの説明として正しいのは?

3. SRAMの説明として正しいのは?

4. メモリ(RAM)とストレージの違いとして正しいのは?

5. メモリを「デュアルチャネル」構成にすると得られる効果はどれ?

6. サーバ用途で、宇宙線やノイズによる1ビットの反転(誤り)を検出・訂正するのはどれ?

7. RAMのように「電源を切ると内容が消える」性質を何と呼ぶか、漢字で答えてください。

8. 容量が足りないとき、あふれた分をストレージ上の領域に退避して実メモリより広く見せる仕組みを何と呼ぶか答えてください(「仮想〜」)。

メモリ(作業机)— 今すぐ使うものを広げる場所 | Kotowary