コンピュータのしくみ初心者向け基本コース

LESSON 02 ・ MAIN MEMORY

メモリってなに?

主記憶は、CPUがいま実行する命令と、いま処理するデータを、番号の付いた場所へ置く作業台です。

BIG PICTURE

保存したプログラムを、実行できる場所へ

ノイマン型の基本モデルでは、主記憶に命令とデータを置き、CPUが順に読み出して実行します。

ストレージOS、アプリ、ファイルを電源OFFでも保存
主記憶へ読む実行や編集に必要な範囲をRAMへコピー
CPUが使うアドレスを指定して命令とデータを読み書き
結果を保つ処理途中はRAM、残す内容はストレージへ保存

主記憶の役割:CPUとストレージの間にある、広くて比較的高速な作業場所です。「保存」と「実行中の保持」は同じではありません。

ADDRESS AND DATA

場所の番号と、そこに入る値

メモリは、小さな格納場所が並んだものとして考えられます。CPUは場所を示す番号と、読み書きする値を区別します。

本棚の棚番号に相当します。同じデータでも、どのアドレスにあるか分からなければCPUは読み出せません。

アドレスは通常、0から始まる整数を2進数で表します。

データ

指定した場所に置かれたビット列です。そのビット列を数値、文字、命令、色のどれとして解釈するかはプログラムと命令で決まります。

01000001は、数値なら65、文字コードなら「A」と解釈できます。

1ビット
0または1のどちらか一つを表します。
1バイト
通常8ビットです。現在の多くのコンピュータでは、各バイトにアドレスを付けて扱います。
ワード
CPUが一度に扱いやすいまとまりです。32ビットCPUなら4バイト、64ビットCPUなら8バイトが代表例ですが、命令や用途により異なります。
メモリ容量
格納できる総量です。8 GiBのRAMには、およそ86億個のバイト位置があります。

SMALL EXPERIMENT

アドレスを指定して、1バイトを読み書きする

16個の小さなメモリで、アドレスとデータが別々に動くことを観察します。値は0〜255です。

16バイトのメモリ

アドレス0x00を選択しています。

各枠の上段がアドレス、下段が保存値です。表示は16進数です。

READ AND WRITE

CPUと主記憶は、三種類の情報を交換する

基本モデルでは、バスを役割ごとに分けて考えると読み出しと書き込みを理解しやすくなります。

アドレス

CPUが「どの場所か」を指定します。アドレス線がn本なら、基本的に2のn乗個の異なる番号を表せます。

データ

読み出しでは主記憶からCPUへ、書き込みではCPUから主記憶へ値を運びます。実機では複数バイトをまとめて運びます。

制御

読み出しか書き込みか、処理を開始してよいか、完了したかなどを伝えます。

読み出し

CPUがアドレスと「読む」という指示を出し、主記憶がその場所の値をデータとして返します。読み出しても元の値は残ります。

書き込み

CPUがアドレス、書く値、「書く」という指示を出します。その場所に以前あった値は新しい値に置き換わります。

MEMORY HIERARCHY

速さ・容量・価格を、段階で両立する

一種類の記憶だけで「とても速い・とても大きい・安い」を同時に満たすことは難しいため、性質の違う記憶を組み合わせます。

段階主な場所特徴誰が移動を管理するか
レジスタCPU内部最も小さく、演算が直接使うCPU命令
キャッシュCPU内部または近く最近・近くで使ったデータを複製主にハードウェア
主記憶(RAM)メモリモジュール実行中のプログラムとデータを保持OSとCPU
ストレージSSD・HDD大容量で、電源OFFでも保持OS、ファイルシステム、アプリ

局所性:プログラムは「最近使った場所」や「近くの場所」を再び使う傾向があります。キャッシュはこの性質を利用してRAMを待つ時間を減らします。

RAM TECHNOLOGY

主記憶とキャッシュでは、作り方も違う

は「任意の場所へ直接アクセスできるメモリ」という分類名です。実際には用途に合わせて異なる方式が使われます。

DRAM

は小さなコンデンサの電荷でビットを表します。高密度に作れるため主記憶に向きますが、電荷が漏れるので定期的に読み直して書き戻すリフレッシュが必要です。

SRAM

は複数のトランジスタで状態を保持します。高速ですが面積が大きく高価なため、主にCPUキャッシュなど小容量で速度が重要な場所に使います。

揮発性とは

一般的なDRAMとSRAMは、電源がなくなると内容を保持できません。この性質を「揮発性」と呼びます。スリープではRAMへの給電を続け、休止状態ではRAMの内容をストレージへ退避します。

VIRTUAL MEMORY

各プログラムに、専用の広いアドレス空間を見せる

現在のOSは、プログラムが使うアドレスと物理RAMの場所を直接同じにせず、対応表を使って変換します。

  1. 仮想アドレスをプログラムが指定する。各プログラムは自分用の連続した場所のように見える。
  2. MMUがページテーブルを参照し、実際の物理アドレスへ変換する。
  3. 保護により、別のプログラムやOSの領域を勝手に読み書きできないようにする。
  4. 必要なページがRAMにない場合、OSがストレージから読み込む。これはRAMそのものが増えたわけではなく、遅延を伴う。

はMemory Management Unitの略です。仮想記憶は容量の補助だけでなく、プログラム同士を分離する安全性にも重要です。

OPEN A PHOTO

保存した写真を開くとき、RAMで何が起きるか

  1. 写真アプリの命令を読み込むOSがストレージ上の実行ファイルから必要な部分をRAMへ配置します。
  2. 写真ファイルを読み込む圧縮された画像データをストレージからRAMの別の領域へ読みます。
  3. CPUまたはGPUが展開する命令とデータをRAMから読み、画素ごとの色データを作ってRAMやビデオメモリへ書きます。
  4. 表示に必要なデータを渡すGPUと表示回路が画素データを読み、ディスプレイへ送ります。
  5. 閉じると領域を再利用するOSは不要になったRAM領域を、別のプログラムが使える状態にします。

PERFORMANCE AND RELIABILITY

容量だけでなく、待ち時間と転送量も見る

容量同時に置ける命令・データの総量。GBやGiBで表す。
レイテンシ読み書きを要求してから最初のデータが届くまでの時間。
帯域幅1秒間に運べるデータ量。CPUやGPUの処理量に影響する。
誤り検出ECCメモリは一部のビット化けを検出・訂正できる。
よくある誤解

「メモリ」と「ストレージ」はどちらもデータを覚えますが、役割が違います。RAMを増やしてもSSDに保存できる総量は増えず、SSDの空きが多くてもRAM不足が必ず解消するわけではありません。

CHECK

確かめてみよう

アドレスとデータは何が違いますか?

アドレスはメモリ上の場所を指定する番号、データはその場所に入っているビット列です。

メモリを読み出すと、元の値は消えますか?

基本的な読み出し操作では消えません。CPUへ値の複製が届き、メモリ上の内容は残ります。

主記憶にDRAM、キャッシュにSRAMを使う主な理由は何ですか?

DRAMは高密度で大容量にしやすく、SRAMは面積と費用が増える代わりに高速だからです。

仮想記憶は、物理RAMと同じ速さのメモリを増やす仕組みですか?

いいえ。アドレスの分離と保護を実現し、必要に応じてストレージも利用しますが、ストレージからの読み込みはRAMより大幅に遅くなります。