わかりやすく CPU どうやって 動く
計算を受け持つALUと、何をするかを決める命令。この二つは、どうやって一体となって動くのでしょうか。CPUが命令を一つずつ処理する流れをたどれば、答えが見えてきます。
CPUは三つの拍子を繰り返す
CPUがしていることは、じつは単純です。
命令を一つ取り込み、それが何の命令かを読み解き、実行します。
そしてまた次の命令を取り込みます。
この三つの拍子を、休まず繰り返しているのです。
取り込み → 解読 → 実行、そして繰り返し。
取り込み・解読・実行を一周とすると、CPUは1秒間にこれを数十億回も回します。
一つひとつは単純でも、とても速いので複雑な仕事をこなせるのです。
次の命令を指す指
では、CPUはいま何番目の命令をする番なのか、どうやってわかるのでしょうか。
メモリのどこかに命令がずらりと並んでいて、その中の「次にするもの」を指す装置があります。
名前はPC、プログラムカウンタです。
PCが次の命令を指します。
命令を一つ取り込むたびに、PCは一つ増えます。
0番をしたら1番、1番をしたら2番という具合です。
この指のおかげで、CPUは順番を見失わずに命令を次々とこなせます。
部品が集まってCPUになる
ここで部品が一か所に集まります。
次の命令を指すPC、命令を読み解く解読器、計算するALU、値を少しのあいだ握っておく小さなマスであるレジスタです。
一つずつ見れば小さくても、集まれば命令を処理する一つのCPUになります。
一体としてのCPU。
PCが次を指し、解読器が命令を読み解き、ALUが計算し、レジスタが値を握ります。
それぞれが自分の仕事をしながら同じ拍子を回していく、これがCPUの働く姿です。
3行の命令を実行する
短いプログラムがあります。
「3を入れて」「4を足して」「結果を見せて」の3行です。
「進む」ボタンを押すたびに一拍ずつ進み、PCが動いて値が積み上がっていく様子が見えます。
PCに沿って1行ずつ実行します。
PCが0、1、2と増えながら、命令が一つずつ実行されました。
値は3になってから7になり、最後に画面に表示されました。
プログラムが動くとは、こういうことなのです。
PCが別の場所へ飛ぶと
PCはふつう一つずつ進みますが、ときどき別の場所へ飛びます。
「5番の命令へ行け」のような命令に出会うと、PCがそのアドレスに変わるのです。
この飛び越しが、前のレッスンで見た比較の真偽と出会うと、「もし」という分かれ道になります。
PCが2番から5番へ飛びます。
一つずつ進む代わりにPCを別の値に変えると、プログラムの流れが変わります。
先へ飛ぶことも、後ろへ戻ることもできます。
このジャンプがどうやって「もし」と「繰り返し」になるのかは、プログラミングの分野でくわしく扱います。