命令はメモリの中にあり、CPUが取りに行く
下のデモでは、メモリの「枠の中」に命令があり、CPUがそこに取りに行く様子が一目でわかります。 ボタンで「次の命令を取りにいく」を押して、関係を体験してみよう。
メモリとCPUの関係
「命令1」を取りにいった
CPUは何をしている?
まず「プログラム」「ハードディスク」「メモリ」が何かをおさえておくと、CPUの役割がわかりやすくなります。
プログラムは、「やることを書いた設計図」です。ゲームを動かす・文字を表示する・計算するなど、コンピュータにさせたいことを順番に書いたものです。
ハードディスク(やSSD)は、「しまっておく場所」です。電源を切っても消えません。ゲームのデータ・アプリ・写真……まだ「使っていない」状態のプログラムが、ここに置いてあります。
メモリは、「今使うものを置く机」です。電源を切ると消えます。CPUのすぐ近くにあります。プログラムは、ハードディスク → メモリにコピーされてから使われます。
ではCPUは? CPUは「考えて実行する人」のようなものです。メモリにある命令を、1つ取りに行く → 実行する → また次を取りに行く、を繰り返します。CPUはハードディスクには直接行きません。必ずメモリから命令を取り出して実行します。
CPUの3ステップ:取り出し → 解読 → 実行
命令はメモリ(RAM)に置かれている。プログラムは起動時にハードディスク/SSDからメモリに読み込まれる。CPUは、そのメモリ上の命令を1本ずつ次のように処理する。
- Fetch(取り出し):メモリから「次に実行する命令」を1本取り出す。
- Decode(解読):取り出した命令が「何をさせる命令か」を解釈する。
- Execute(実行):解読した内容に従って計算したり、メモリや入出力にアクセスしたりする。
この一連の流れを、下のデモで「今どの段階か」を追いながら確認してみよう。
命令の流れを体験
メモリから「次に実行する命令」を1本取り出す
取り出した命令が「何をさせる命令か」を解釈する
解読した内容に従って計算したり、メモリにアクセスしたりする
タイミングを決める:クロック
クロックは、CPUが「次に進んでいいよ」と合図するリズムです。 プログラムは「何を」するかを決め、クロックは「いつ」進めるかを決めます。 クロック周波数(例:3GHz)が高いほど、1秒間に刻まれる回数は増えます。
同時に考えられる人数:コア
コアは、CPUのなかで「考えて実行する人」が何人分いるか、というイメージです。 1人で考える(シングルコア)、2人で考える(デュアルコア)、4人で考える(クアッドコア)などがあり、コアが多いほど複数の処理を同時に進められます。
すぐ取り出せる引き出し:キャッシュ
キャッシュは、メモリよりさらにCPUに近いところにある「引き出し」です。 よく使うデータや命令のコピーをここに置いておくので、毎回メモリまで探しに行かなくてすみ、速く動きます。
どれくらい速い?(MIPS)
クロックが「いつ進めるか」を決め、クロック周波数(例:3GHz)が高いほど1秒間にこなせる処理は増えます。MIPSは、1秒間に実行できる命令数を百万単位で表した指標で、基本情報技術者試験でも計算問題が出ます。
この数字、いつ気にすればいいの?クロック周波数が高いと単純な処理が速くなりやすい。一方、低くてもキャッシュが効いていると体感は速い場合があります。スマホとPCでは省電力と性能のバランスが違うので、同じ数字でも「速い」の意味合いは変わります。
※ 次の「MIPS計算デモ」は、数字や式が少し難しめです。計算が苦手な人は飛ばして、次の「全体のイメージのまとめ」へ進んで大丈夫です。
- MIPS = クロック周波数 ÷ 平均命令実行クロック数
- 例:1GHz、1命令あたり平均8クロックなら、MIPS = 1,000,000,000 ÷ 8 = 125MIPS
下のデモで、クロック周波数と「命令ごとのクロック数・出現率」を変えると、平均クロック数とMIPSがどう変わるか確認できます。
MIPS計算デモ
命令Bの出現率は 40%(100 − 命令Aの出現率)として計算しています。
計算結果
平均クロック数 = 10×60% + 5×40% = 8 クロック/命令
MIPS = 1×1,000 ÷ 8.0 = 125 MIPS
1秒間に約 125百万 命令実行できるイメージです。
全体のイメージのまとめ
CPUは「メモリに並んだ命令」を、クロックに合わせて取り出し(Fetch)→ 解読(Decode)→ 実行(Execute)する。 この流れを、何コアかで並列に、キャッシュでメモリの遅さを補いながら繰り返している。クロックが活きるのは、キャッシュが効いているときだという感覚を持っておくとよい。