CPUがアクセス先のメモリ番地を指定するために使うバス
アドレスバス(address bus)とは、CPU(中央処理装置)が「メモリのどの番地(住所)にアクセスしたいか」を伝えるための伝送路のことです。メモリは番地(アドレス)という通し番号で区切られた箱の集まりで、CPUはこの番号を指定して目的の箱を選びます。
身近な例で言うと、大きなマンションの郵便受けを思い浮かべてください。各部屋にはすべて部屋番号(101号室、102号室…)が振られていて、配達員は「何号室へ」という番号を指定して荷物を届けます。アドレスバスは、この「何号室か」という部屋番号を伝える役割を果たします。
上のツールで▶ボタンを押すと、CPUが番地を決め、その番地(緑の箱)がアドレスバスを通ってメモリへ送られ、メモリが該当の箱を選び出すまでの流れを確認できます。
アドレスバスの大きな特徴は、常にCPUからメモリへの一方通行(単方向)であることです。番地を指定するのは必ずCPU側で、メモリ側から「この番地です」と返してくることはありません。
データバスと比べると違いがはっきりします。
・アドレスバス:CPU → メモリの一方通行(単方向)。番地を伝えるだけ
・データバス:読み書きの両方で使う双方向。データの中身が行き来する
マンションの例で言えば、部屋番号(住所)を指定するのは届ける側だけで、部屋の方から番号を送ってくることはありません。一方、荷物(データ)は届けることも受け取ることもあるので双方向、という対比で覚えると整理しやすいです。
アドレスバスの幅(線の本数)が決まると、CPUが区別できる番地の数──すなわちアドレス空間(扱えるメモリの広さ)が決まります。1本の線で0か1の2通りを表せるので、n ビットあれば 2 を n 回かけた個数の番地を区別できます。
アドレス空間 = 2^(アドレスバス幅)
例: 1番地に1バイト置けると仮定
・16bit → 2^16 = 65,536 番地 = 64 KB
・20bit → 2^20 = 約100万番地 = 1 MB
・32bit → 2^32 = 約43億番地 = 4 GB
・64bit → 2^64 = 膨大(理論上16 EB)
ここで覚えておきたい重要な性質があります。
・バス幅が1ビット増えるごとに、アドレス空間は2倍になる
・32ビット幅なら最大4GBのメモリを区別できる(昔の32ビットPCで4GBが上限だった理由)
・64ビット幅になると事実上ほぼ無制限のメモリを扱える
上のツールでバス幅のボタンを切り替えると、番地数(2ⁿ)とアドレス空間が連動して変わります。表で各幅の値を見比べ、「1ビットで2倍になる」感覚を確かめてみてください。