コンピューターはどう命令を処理する?CPUの取出・解読・実行

広告(PR)を含みます。

30秒でわかる答え

CPUは、機械語の命令を取り出し、規則に従って解読して、計算やデータの移動などを実行します。足し算なら、使う値を読み、結果をレジスタなどへ書き戻します。命令サイクルと、アプリ全体の動作は分けて考えます。

CPUは、機械語の命令を取り出し、決められた規則で解読して、計算やデータの移動などを実行する装置です。足し算なら、使う値を読み、計算した結果をレジスタなどへ書き戻します。

クリックや文字入力のあと、画面が変わるまでに何が起きているのか。「3に2を足す」という小さな計算で、命令とデータの動きを追ってみましょう。命令サイクルは、ここでは結果の書き戻しも含めた「取出・解読・実行・保存」の4工程として考えます。実際のCPUの段数を四つと決めるものではありません。

第96話「命令札は眠らない」では、イトがキーを押した直後のコンピューター工房で、命令札が処理される様子を見ます。

TERM PRIMER

先に知っておく言葉

CPU
命令を順に実行し、計算、制御、入出力の調整などコンピューター全体の幅広い処理を担う装置です。
メモリ
コンピューターが処理中の命令やデータを一時的に置く場所です。CPUが読み書きして使い、通常は電源を切ると内容が消えます。
ビット
コンピューターが扱う情報の最小単位。0か1のどちらかを表します。
データ
コンピューターが扱う情報。文字、画像、音、動画、Webサイトもデータとして扱われます。

CPUの命令処理を「3に2を足す」で考える

「3を用意する → 2を用意する → 二つを足す → 結果の5を残す」。これなら、何を使って何をするかを追えます。「いい感じに計算して」だけでは、足すのか比べるのかが決まりません。

この例で、「足す」は命令の内容、「3」と「2」は計算に使うデータです。足す命令を変えずにデータを3と4へ変えれば、結果は7になります。同じ部品でも、渡す値と命令の組合せで仕事が変わります。

実際のCPUが日本語のカードを読むわけではありません。CPUが直接扱うのは、操作や対象をビット列で表した機械語の命令です。プログラミング言語の一行が、そのまま一つのCPU命令になるとも限りません。

命令には、値を読む、足す、比べる、別の場所へ進むなどの種類があります。CPUは文の意図を人間のように考えるのではなく、命令の形式に従って回路を動かします。その回路へ、3と2はどこから届くのでしょうか。

イト

足し算の命令があっても、3と2が届かなきゃ計算できないね

マコト

命令の札と、計算に使う数は分けて見たほうがよさそうだ

ピコ

まずは数の置き場所を決めよう。それから、一枚の命令を追ってみるよ

命令とデータはどこに置かれているの?

一般的なPCやスマホでは、実行するプログラムの命令や、作業中のデータをメモリに置きます。CPU内部にはレジスタという小さな作業場所があり、演算に使う値や結果を一時的に保持します。命令やデータへ素早くアクセスするためのキャッシュもあります。

ラボのたとえなら、メモリは大きな棚、レジスタは作業台のトレイ、キャッシュは近くに用意した控えの棚です。実際の速さは物理的な距離だけでなく、回路の作りや取り出し方でも変わります。

3と2がメモリにあるとして、次の小さなプログラムを考えます。AとBは説明用に付けたレジスタの名前です。

命令の内容実行した後の状態
3を読み、Aへ入れるAは3
2を読み、Bへ入れるAは3、Bは2
AとBを足し、Aへ入れるAは5、Bは2
Aの値をメモリの結果欄へ写す結果欄は5

これはデータの動きを追うための模型です。実際に必要な命令やレジスタ名は、CPUやプログラムの作りによって変わります。

データの単位は、ビットとはとコンピューターが0と1を使う理由で確認できます。ここからは表の三つ目、「AとBを足す」という一命令の中へ入ります。

CPUの命令サイクル|取出・解読・実行・結果の書き戻し

Aに3、Bに2が入ったところから、足し算の命令を追います。

工程今回の足し算で起きること
取出(フェッチ)次に処理する「AとBを足してAへ入れる」命令を読み出す
解読(デコード)足し算であること、使う値がAとBにあり、結果をAへ入れることを判別する
実行演算を行う回路で3と2を足し、5を求める
保存・書き戻し結果の5をAへ入れる

解読は文章を理解する作業ではなく、命令のビット列から、使う回路やデータの場所を決めることです。足し算や比較などを担当する回路を、ALU(演算装置)と呼びます。

この足し算では、Aに5が入ったところで一命令の仕事が終わります。表の次にある「Aの値をメモリへ写す」は、別の命令です。一つのプログラムの手順と、一命令を処理する工程を分けると、どこで値が変わったかを追えます。

次の命令を見失わないため、CPUは命令の位置を管理します。その手がかりになるレジスタがプログラムカウンタです。通常は続きへ進み、分岐命令では別の位置へ進みます。条件に応じた繰り返しも、このような命令で組み立てます。

工房の受付票が取出係、解読係、作業係、記録係を通る図は、流れをつかむためのたとえです。命令によって仕事は異なり、いつも計算結果をメモリへ書くわけではありません。実装や説明の粒度によって、工程を三つにまとめたり、さらに細かく分けたりします。

イトとマコトとピコが、命令の棚、読み取り口、演算用トレイ、結果トレイを順に並べた机上模型を見ている
左から命令を取り出し、内容を判別し、処理して結果を残す模型です。実CPUの配線や段数を表した図ではなく、値の変化は上の表で追えます。

ここでいう結果の「保存」は、レジスタやメモリへ値を置くことです。アプリがストレージへファイルを保存し、電源を切っても残す処理とは区別します。この違いは、メモリとストレージの役割で写真の読み込みと保存を例に確認できます。「計算できた」「画面に出た」「ファイルへ保存した」は、同じ出来事ではありません。

実際のCPUには、ある命令の解読中に別の命令を取り出すなど、工程を重ねる工夫があります。これをパイプラインと呼びます。次の命令を先回りして用意する工夫もあり、待機中は動作を抑えたり一部を休ませたりする場合もあります。では、工程を進めるテンポを速くすれば、計算も同じ割合で速くなるのでしょうか。

クロックと処理速度を混同しない

CPUの仕様表には「3.5GHz」のような数字が載っています。

これはクロック周波数で、動作のタイミングを合わせる信号が一秒に何周期あるかを表します。3.5GHzなら一秒に35億周期です。ただし、35億個の命令を必ず処理できる、という意味ではありません。

一命令に複数のクロック周期が必要なことも、一周期の間に複数の命令が完了することもあります。使う命令やCPUの設計によって違うため、クロック周波数だけでは処理速度を決められません。

速さを見る手がかり待ち時間や進み方が変わる理由
クロック工程を進めるタイミングの間隔が変わる
命令の種類・並び前の結果を待つか、工程を重ねられるかが変わる
メモリ・キャッシュ必要な命令やデータをすぐ取り出せるかが変わる
コアと分担独立した仕事を別々に進められるかが変わる

工房の係が速く手を動かしても、材料が届くのを待つ時間は残ります。クロックの数字に加え、「何を待っているか」「別々に進められる仕事があるか」を見ると、次に出てくるコア数の意味も分かります。

複数コアでは何が変わる?

CPUには、コアと呼ばれる命令処理の作業場が複数入っているものがあります。4コアなら、入口のイメージは「工房の作業ラインが4列」です。実際の仕事の分け方は、プログラム、OS、CPUの設計によって変わります。

たとえば、別々の写真の明るさを調整する仕事なら、一枚目と二枚目を並行して進められる場合があります。一方、「3に2を足し、その結果を4倍する」なら、後半の計算は前半の結果5を待ちます。作業場を増やしても、この依存関係は消えません。

分担を準備し、最後に結果を集める手間もあります。コアが二倍だから、どんな処理も二倍速くなるとは限らないのです。

同じ写真8枚を1・2・4・8台に分けると、何秒変わるでしょうか。並列処理の時間を比べる教材では、短くなる仕事と残る仕事を分けて試せます。

同じ形の計算を大量に並べる仕事では、CPU以外の装置も活躍します。その違いはCPU・GPU・NPUの違いで扱います。まずは、ここまでの命令が画面の変化へどうつながるかを確かめます。

画面の操作に戻して追跡する

文字入力では、一回のキー操作を受けて、OSやアプリの処理が進みます。英字のAが入力される設定でキーを押した場合を、大きく分けると次の流れになります。

  1. キー操作の情報が届く。
  2. OSやアプリが、その入力をどう扱うかを決める。
  3. 文字データを更新し、画面に表示するための処理を進める。
  4. 描画用のデータをもとに、画面の表示が変わる。

この四つは、先ほどの一命令の4工程とは別です。それぞれの処理の中で、多くの命令が実行されます。また、描画にはGPUなどが関わる場合もあり、CPUが一つですべての画素を描くとは限りません。

一回の操作に必要な命令数や時間は、アプリや端末、処理の内容で変わります。画面が止まったように見えても、計算中なのか、データの到着待ちなのかは、見た目だけでは決められません。

イト

画面にAが出るまでにも、入力を受け取る仕事と、表示する仕事があるんだ

ピコ

そう。足し算の結果ができたことと、その結果を画面で見られることも分けて考えられるね

動画やWebページでは、ネットワークからデータが届く時間も関わります。届く側の流れはインターネットの仕組みで確認できます。

4工程を説明するワークと確認クイズ

紙に「取出・解読・実行・書き戻し」の四つの欄を作り、「Aに3、Bに2が入っている状態で、AとBを足してAへ入れる」命令を追ってみましょう。

読み出す命令は何か。使う値はどこにあるか。何を計算し、どこが5になるか。Aが5になった後、メモリの結果欄も変えたいなら、どんな命令が必要かまで説明できると、命令と値の動きがつながります。

Q1. コンピューターの命令処理を一文でいうと?

CPUが機械語の命令を取り出し、規則に従って解読し、計算やデータの移動などを実行する流れです。足し算では、結果をレジスタなどへ書き戻します。

Q2. CPUは命令を一度読めば、その後は意味を考えて動ける?

CPUは人間のように意図を考えるのではなく、命令の決まりに従って動きます。続きの処理にも命令が必要で、条件に応じて次に進む場所を変える分岐命令もあります。

Q3. クロック周波数が高ければ、処理は常に速い?

そうとは限りません。一周期で進められる仕事、データ待ち、命令の並び、コアの使われ方などでも変わります。

命令処理から次へ進む記事

ここまで追ったのは、CPUが一つの命令を実行する仕組みです。命令やデータの単位を確認するなら、ビットとはとバイトとは、二つの状態を使う理由ならコンピューターが0と1を使う理由が補助になります。

アプリを起動する準備や、入力を待って結果を返す流れは、プログラムが動く仕組みで電卓の例から追えます。学ぶ順序の全体は、コンピュータールートで確認できます。

取出・解読・実行・保存を一周させる

「3と2がある」だけでは計算は始まりません。使う値と操作を指定する命令があり、CPUがその命令を処理して、結果の5が次の作業に使える状態になります。画面の一回の操作を、こうした命令とデータの動きへ分けて考えられるようになりました。

では、写真のたくさんの画素やAIの計算を、まとめて処理したいときはどうでしょうか。次はCPU・GPU・NPUの違いで、仕事の並べ方に合わせて装置がどう役割を分けるかを見てみましょう。

この記事について

LAB WHITEBOARD

自分の言葉で説明してみよう

「コンピューターが命令とデータを読み出し、解釈し、演算し、結果を保存する流れを、取出・解読・実行・保存の4工程として自分の言葉で説明できるようになる。」を、いまの自分の言葉で一文にしてみてください。途中の説明でも大丈夫です。