【CPUの命令実行】命令部とアドレス部の構成〜命令実行サイクルまで解説!

【CPUの命令実行】命令部とアドレス部の構成〜命令実行サイクルまで解説!
ハテオ君

CPUの中にはどんな機能があるのだろうか?そしてどのようにな流れで情報処理をおこなっているのかな...。

今回はこの悩みを解決します!

今回の記事テーマ

CPUの命令実行の流れの基礎知識を徹底解説!

CPUってコンピュータ内で膨大な量の情報を処理するために、様々な機能が連携し処理を高速で行っています。

そのため機能が多くすべて覚えるのはかなり大変だと思います。

なので今回は、誰でも理解出来るようにCPUの内部機能についての記事を作成しましたので是非参考にしてください。

本日の記事内容

記事の最後には、今回の内容に関しての確認問題も用意していますので、インプットとアウトプットとしても是非活用してみてください。

元中卒の自分が、誰でも理解できるように解説していきます。

それでは早速見ていきましょう。

黄島 成

CPUの命令部とアドレス部

CPUが処理する命令は「プログラム」と呼ばれます。

プログラムは、コンピュータに実行させる処理の命令が集まったものです。

プログラム言語で書かれたプログラムは、最終的にコンピュータが理解できる「1と2」で構成された機械語に変換し解読・実行されます。

CPUが実行するプログラムは、「命令部」と「アドレス部」に格納され実行されます。

  • 命令部=コンピュータが処理する命令を格納しCPUが実行する
  • アドレス部(オペランド)=対象データの在りかを示す

また、命令の種類によってはアドレス部がないものや複数あるものも存在します。

命令実行サイクル5つの流れ

CPUでは、膨大な量の命令を読み出し、1つ1つ高速に処理を行っています。

命令の読み出しから実行終了までの流れは以下図のようになっています。

命令実行サイクルは上記図のように5つの流れが終わることで1つの処理が完了することになります。

それでは順番に各役割を見て行きましょう。

①:命令フェッチ(Fetch)

命令フェッチとは、命令を取り出し、CPUへ取り込む役割を担当しています。

具体的には、命令アドレスレジスタで示されたアドレスの命令が、命令レジスタによって取り出されます。

取り出されたあとに命令アドレスレジスタは、次の命令のアドレスを示すようになります。

②:命令の解読(Decode)

命令の解読とは、命令語のコードを解読する役割を担当しています。

この解読を行う装置のことを「デコード」と呼ぶ。

③:実行アドレス計算(Adress Calculation)

実行アドレス計算とは、命令対象となるデータの格納場所を計算して求める役割を担当しています。

④:データ(オペランド)読み出し(Road)

データ(オペランド)読み出しとは、主記憶装置の実行アドレスにアクセスし、命令対象のデータを読みだす役割を担当しています。

⑤:命令の実行(Execution)

命令の実行とは、命令を実行し必要に応じて結果データを記憶装置に書き込む役割を担当しています。

CPU内では常に、上記5つの流れで各機能が連携し、命令の処理や実行を行なっています。

アドレス指定方式

アドレス指定方式とは、CPUが命令を実行する際、対象となるデータの在りかを指定する方式です。

具体的には以下通

  • ①:CPUは命令を実行する際、対象となるデータを探します。
  • ②:そのデータはメインメモリ上に格納されています。
  • ③:その格納されている場所(アドレス、番地)を指定する。

これこそアドレス指定方式です。

アドレス指定方式の目的は「アドレス部を指定したり、実行アドレスの計算するため

実効アドレスとは、処理対象となるデータが、実際に格納されている主記憶装置上のアドレスのことを指します。

つまり処理の対象となるアドレスそのものということ。

なお実行アドレスは「アドレス指定」または「アドレス装飾」とも呼ばれます。

命令のアドレス部に対して何らかの飾り付けをして求めるという意味合いらしいですね。

アドレス指定方式の種類6選

アドレス指定方式の種類一覧

  • 即値アドレス指定
  • 直接アドレス指定
  • 間接アドレス指定
  • 相対アドレス指定
  • インデックスアドレス指定
  • ベースアドレス指定

それぞれ順番に見ていきましょう。

①:即値アドレス指定

即値アドレス指定は、命令のアドレス部にデータそのものを格納している方式です。

即値アドレス指定では、アドレス部にデータそのものがあるため、主記憶装置への参照は行わないです。

②:直接アドレス指定(絶対アドレス指定)

直接アドレス指定は、命令のアドレス部に実効アドレスが格納されている方式です。別名、「絶対アドレス指定」とも呼ぶ。

直接アドレスでは、主記憶装置へ参照を行い命令を処理していきます。

③:間接アドレス指定

間接アドレス指定は、主記憶装置の実行アドレスを格納しているアドレスを格納する方式です。

間接アドレス指定を二重、三重と行う場合があります。

④:相対アドレス指定(自己相対アドレス指定)

相対アドレス指定は、命令アドレス部の値と命令アドレスレジスタ(プログラムカウンタ)の値を加算した値を実効アドレスとする方式です。

プログラムカウンタが混ざった場合はこの方式になります。

⑤:インデックスアドレス指定(指標アドレス定)

インデックスアドレス指定は、命令のアドレス部とインデックスレジスタの値を加算した値を実効アドレスとする方式です。

インデックスレジスタが混ざった場合はこの方式になります。

⑥:ベースアドレス指定(基底アドレス指定)

ベースアドレス指定は、命令のアドレス部の値にベースレジスタの値を加算した値を実効アドレとする方式です。

ベースレジスタが混ざった場合はこの方式になります。

CPUの高速化

CPUの処理速度を向上することを「CPUの高速化」と呼ぶ。

CPU内では、処理速度を向上するために様々な工夫が施されています。

CPUの高速化で施されている技術は主に以下4つ。

  • 逐次制御方式
  • パイプライン処理
  • スーパーパイプライン
  • スーパースカラ

順番にそれぞれの特徴と役割を見て行きましょう。

逐次制御方式

逐次制御方式は、命令の実行サイクル単位で、1命令ずつ順番に繰り返し実行する方式です。

命令の実行の流れ

  • ①:命令フェッチ
  • ②:命令の解読
  • ③:実効アドレス計算
  • ④:オペランド読み出し
  • ⑤:命令の実行
  • ⑥:演算結果格納

上記のサイクルで命令実行が行われます。

特徴としては、1つの処理が終わるまで次の命令は実行されないのが特徴ですね。

パイプライン処理

パイプライン処理は、命令をステージに分解し、ずらしながら同時に実行する方式です。

具体的には、命令実行サイクルの各段階(ステージ)を並行して実行することによって、処理効率を向上される方式です。

パイプライン処理では、分岐命令が現れるとそれまで先読みしていた命令を破棄し、新たに分岐の命令を実行しなくてはなりません。

処理の順序が乱れることを「パイプラインハザード」と言います。

分岐命令に対処するためには、実行される確率の高い方を予測する分岐予測や、予測した分岐先の命令を開始して結果を保持し、分岐先が正しければその結果を利用する投機実行などの技術が使用されています。

スーパーパイプライン

スーパーパイプラインは、パイプライン処理の格ステージをさらに細分解し、ずらしながら同時に実行する方式です。

各ステージを更に細かく分割することで、パイプラインの動作の効率を向上させる方式です。

スーパースカラ

スーパースカラは、複数のパイプラインを使って、同時に複数の命令を実行する方式です。

複数のパイプラインを設けることで、複数の命令を同時に実行する方式です。

プロセッサ

プロセッサとは、CPU内部で独立して機能する演算装置と制御装置のことです。

簡単に言えば「CPUの中にCPUがある」ようなイメージ。

ちなみに、「コア」と呼ばれるものもありますがコアとは、「CPUの脳みそ」と覚えておいてください。

プロセッサの目的は、プロセッサを搭載することで、CPUの処理速度をさらに向上させることです。

プロセッサは大きく分けて以下2つに分類されます。

  • マルチコアプロセッサ
  • GPU(Graphics Processing Unit)

順番にそれぞれの特徴を見ていきましょう。

マルチコアプロセッサ

マルチコアプロセッサとは、1つのCPU内に複数のコア(CPUの脳)を備えていることをさします。

具体的には、「マルチ」は複数を意味し「コア」はCPU内の脳を意味し「プロセッサ」はCPUのことを意味します。

つまり、コアは複数あるCPUとゆうことになります。

このマルチコアプロセッサでは、従来のシングルコアに比べ、消費電力を抑えながら処理速度の高速化を図ることができます。

  • コアが2つのものをデュアルコア
  • コアが4つのものをクアッドコア
  • コアが8つのものをオクタコア

と呼びます。ちなみにマルチコアプロセッサとは他にマルチプロセッサとゆうモノもあります。

これは、コンピュータの中に複数のCPUがあることを意味します。

GPU(Graphics Processing Unit)

GPUとは、処理する量が多いコンピュータに搭載されているプロセッサになります。

もっと具体的に言うと、「3Dグラフィック」や「画像編集」を行う際に必要となる計算処理を行うプロセッサになります。

処理量の多い時に使われるCPUのようなイメージです。

GPUは、数千個ものコアでデータを並列処理します。

コアを働くおじさんで例えると以下通り

  • シングルプロセッサ=一人のおじさんで働く
  • マルチコアプロセッサ=複数人のおじさんで働く
  • GPU=数千人のおじさんで働く

個人事業主か中小企業か大企業のような感じですね。最近のPCには、このGPU内蔵のCPUが採用されていて、機械学習の発展にも貢献しています。

今回のまとめ&確認問題

CPUの命令実行については上記内容で以上となります。

それではまず今回の内容をまとめていきましょう。

まとめ

  • 命令は「命令部」と「アドレス部」に格納される
  • 命令実行は5つの流れが常に繰り返し命令の処理を行なっている
  • アドレス指定は6種類の方式で実行アドレスを特定する
  • CPUは4つの技術で処理速度の高速化をしている
  • プロセッサはCPUの中にあるCPUのこと

今回の確認問題「アウトプット用」

確認問題

ハードウェア確認問題③

「次へ」で問題スタート!

①解説

【問題①】

パイプライン処理の特徴はどれか。

:複数の命令を同時実行するために、コンパイラが目的プログラムを生成する段階で、それぞれの命令がどの演算器を使うかをあらかじめ割り振る。
不正解× AMP型マルチプロセッサの説明
:命令が実行される段階で、どの演算器を使うかを動的に決めながら、複数の命令を 同時に実行する。
不正解× SMP型マルチプロセッサの説明
:命令の処理をプロセッサ内で複数のステージに細分化し、複数の命令を並列に実行する。
正解○
:命令を更に細かなマイクロ命令の組合せで実行する。
不正解× マイクロプログラムの説明

【解説】

パイプライン処理は、命令をステージに分解し、ずらしながら同時に実行する方式です。

パイプラインの特徴は、命令実行サイクルの各段階(ステージ)を並行して実行することによって、処理効率を向上されるといった特徴があります。

つまり答えは「」となる。

②解説

【問題②】

マルチコアプロセッサの特徴として適切なものはどれか。

:コアの個数をn倍にすると、プロセッサ全体の処理性能はn2倍になる。
不正解×
:消費電力を抑えながら、プロセッサ全体の処理性能を高められる。
正解○
:複数のコアが同時に動作しても、共有資源の競合は発生しない。
不正解×
:プロセッサのクロック周波数をシングルコアより高められる
不正解×

【解説】

マルチコアプロセッサとは、1つのCPU内に複数のコア(CPUの脳)を備えていることです。

具体的には、「マルチ」は複数を意味し「コア」はCPU内の脳を意味し「プロセッサ」はCPUのことを意味します。つまり、コアは複数あるCPUとゆうことになります。

特徴としては、従来のシングルコアに比べ、消費電力を抑えながら処理速度の高速化を図ることができます。

つまり答えは「」となる。

③解説

【問題③】

問題RISCプロセッサの5段パイプラインの命令実行制御の順序はどれか。ここで、このパイプラインのステージは次の五つとする。
1 書込み
2 実行とアドレス生成
3 命令デコードとレジスタファイル読出し
4 命令フェッチ
5 メモリアクセス

:③,④,②,⑤,①
不正解×
:③,⑤,②,④,①
不正解×
:④,③,②,⑤,①
正解○
:④,⑤,③,②,①
不正解×

【解説】

命令の実行の流れ

  • プログラムカウンタを参照して、次に実行すべき命令が格納されている位置を知る。
  • 主記憶から命令レジスタに命令を読込む。(命令フェッチ)
  • その次に実行する命令の主記憶上のアドレスをプログラムカウンタに格納する。
  • 命令レジスタの命令を命令デコーダで解読(解釈)する。(命令デコード)
  • 演算で必要となる値(オペランド)を主記憶やレジスタから読込む。(オペランド読出し)
  • 命令を実行する。
  • 実行結果を主記憶やレジスタに書込む。

命令フェッチ→「取出し」、命令デコード→「解読」ということがわかれば、④命令取出し→③解読→②実行→①書込みという順序が容易に想像できますが、⑤メモリアクセスの位置については少し悩むかもしれません。

1命令のサイクルの中で主記憶へのアクセスが行われる可能性がある処理は「オペランド読出し」と「実行結果の書込み」の2ヶ所があります。

設問のパイプラインにおいて「命令デコード」と「レジスタファイル読出し」がひとまとまりになっていることに注目すると、読出し時には主記憶へのアクセスは発生せず、オペランドは常にレジスタファイルから読み出されることがわかります。

さらに「実行」の後に「アドレス生成」が行われることからも、⑤メモリアクセスは書込み目的である、と考えるのが妥当です。

したがってメモリアクセスを②実行~アドレス生成と①書込みの間に挿入した「④,③,②,⑤,①」が適切な順序です。

つまり答えは「」となる。

最後まで読んでいただきありがとうございました!

今回の内容が、役に立ったな!と思ったらシェア&ブクマ登録よろしくお願いします。

また、質問や問い合わせに関しては、コメント欄かお問い合わせフォームを活用ください。

それではまたお会いしましょう。

黄島 成

-ハードウェア
-