【基本情報技術者】CPUについて15分でざっくり理解する

このシリーズはこれから基本情報技術者試験を受けようと考えている方向けに各分野毎で覚えておくべき知識を「ざっくり」かつ、なるべく分かりやすくお伝えしてみよう的なノリのやつです。

そもそもCPUって?

CPU(central processing unit)とは、人間で例えると脳みそにあたるコンピュータの中枢パーツです。

中央処理装置」とも呼ばれ、各装置の制御を行ったり演算処理の部分を担当しています。

冒頭で「人間の脳みそ」と表現しましたが、実際は人間の脳みたいに自分で何かを思考して処理を実行することができません。

つまりCPU単体では何もすることができないので別途処理内容を記述したプログラムを用意してあげる必要があります。

故に正確なCPUの役割としては、「渡されたプログラムに書かれた通りに処理や演算を実行すること」になります。

当然その渡されたプログラムの実行が早ければ早いほどシステムの待ち時間や装置の実行時間が短くなるわけなので、一般的にはCPUの性能は高ければ高いほど良いとされています。

CPUの性能指標

さっき「CPUの性能は高ければ高いほど良い」と触れましたがでは何を持って性能が高いと判断できるのでしょうか。

CPUの性能指数を表すには「クロック周波数」「CPI」「MIPS」という指標値を使います。

クロック周波数

まずそもそもクロックとは周期信号と呼ばれるもので、例えるなら指揮者やメトロノームの様な役割をしています。

コンピュータは多種多様な装置の集まりですから、それらが皆バラバラに好き勝手処理を実行すると動作が不安定になってしまうので処理を実行するタイミングを一定のリズムに合わせてあげる必要があります。

その一回一回のタイミングの周期がクロックという単位になります。

それを踏まえて「クロック周波数」とは一言で言えば「クロックが1秒間に繰り返される回数」を指します。

人間で言うと「頭の回転速度」みたいな感じですね。

当然繰り返されるクロックが多い程多くの処理を実行できるので性能が高いという事になります。

例えば「クロック周波数1GzのCPU」の場合は1秒間に10億回(1GHzは1,000,000,000Hz)クロックしているという事になります。

CPI

CPI(Clock cycles Per Instruction)は「1命令につき何クロックサイクル必要か」を表した指標です。

例えば「1命令につき2クロックかかるCPU」であれば2CPIという事になります。

当然少ないクロックサイクルで命令を実行できる方が処理速度は早いです。

MIPS

MIPS(Million Instrucutions Per Second)は「1秒間に実行できる命令の数」を表した指標です。

Millionと入っている通り100万の単位で扱います。

例えば「1秒間に2000万個の命令ができるCPU」であれば20MIPSという事になります。

こちらは実行できる命令数が多いほど処理速度は早いです。

CPUの役割

CPUは単体では何もすることができないので、コンピュータの5大装置と呼ばれるものと連携させて動作させます。

コンピュータの5大装置とは、「コンピュータを使うにはこの5つの装置が欠かせないよね」を表した言葉で、それぞれ下記になります。

名称具体的なパーツ概要
制御装置CPUプログラムの命令を解釈してコンピュータ全体の動作を制御する。
演算装置CPUALU(算術論理演算装置)とも呼ばれる。
四則演算などの計算やデータの演算を行う。
記憶装置メモリ, HDD等動作に必要なプログラムやデータを一時的に記憶しておく装置。
入力装置マウス, キーボード, スキャナ等コンピュータにデータを入力する装置。
出力装置モニター, プリンター等コンピュータのデータを出力する装置。

CPUには制御装置と演算装置が内蔵されており、それらと記憶装置、入力装置、出力装置を接続することでデータを受け取って処理を行います。

ちなみにどの装置からの命令でも必ず制御装置(CPU)を経由して送られます。

コンピュータの命令実行手順

今のコンピュータの命令実行のプロセスとしては、プログラム内蔵方式逐次制御方式を採用したものが主流です。

具体的なプロセスは下記です。一つづつ解説していきます。

  1. 補助記憶装置からプログラムを主記憶装置へ移す
  2. CPUが主記憶装置を読み取って一行づつ命令を実行していく

補助記憶装置からプログラムを主記憶装置へ移す

主記憶装置とは、大雑把に言えばメモリの事を指します。

メモリに関しては「【基本情報技術者】メモリについて10分でざっくり理解する」で別で解説しているのでよければそちらもどうぞ。

【基本情報技術者】メモリについて10分でざっくり理解する

 

補助記憶装置とは、大雑把に言えば主記憶装置以外の記憶装置のことを指します。代表例としてはHDDやCD-ROM、フラッシュメモリ等があります。

CPUが演算をする際に直接命令のやりとりするのは主記憶装置なので、まず最初に命令となるプログラムを補助記憶装置から主記憶装置へ移しておきます。

これは補助記憶装置は読み込み速度が遅く、主記憶装置を間に経由させなければいくらCPUの処理性能が高くても宝の持ち腐れになってしまうからです。

この予めプログラムを主記憶に読み込ませておく(ロードさせるといいます)方式をプログラム内蔵方式と呼びます。

CPUが主記憶装置を読み取って一行づつ命令を実行していく

補助記憶装置から主記憶装置にプログラムがロード完了したら実行準備が完了します。

あとはひたすら一行づつプログラムに書かれている命令をCPUが実行していきます。

(後ほどCPUの命令実行手順を解説します)

その際の演算結果が再び主記憶装置に保存されていきます。

このひたすら順に処理を実行していく方式を逐次制御方式と呼びます。

 

 

そしてここまで説明した特徴を持つコンピュータをノイマン型コンピュータと呼びます。

(ちなみにノイマンは人の名前です)

CPUの命令実行手順

では次にCPU単体の命令実行手順を見てみましょう。

先程の「コンピュータの命令実行手順」の「CPUが主記憶装置を読み取って一行づつ命令を実行していく」の中でCPUはこんな事をしているんだなーという解釈で大丈夫です。

この時CPU内部では

  1. 命令の取り出し
  2. 命令の解読
  3. 対象データの読み出し
  4. 命令の実行

の4つのSTEPが実行されています。

命令の取り出し

このステップでまずはプログラムに書かれている命令を主記憶装置から取り出してくるフェーズです。

この作業を「フェッチ」と呼びます。

その際にどの命令を取り出すかは「レジスタ」の一種である「プログラムカウンタ」に保存されています。

補足:レジスタ

レジスタとは、CPU内部の記憶装置のことを指します。

CPU内に存在するので容量はとても小さいですが、メモリ等と比べても違い読み書き速度は格段に早いです。

代表的なのは下記ですが、この全てが必ずCPUに乗っている訳ではなく製品によって異なります。

プログラムカウンタ次に実行する命令が格納されているアドレスを記憶
命令レジスタフェッチした命令を一時的に記憶
インデックスレジスタアドレス修飾に用いる(計算によってアドレスを求める方式)。
連続したデータ(配列とか)を取り出す際に使う増分値を記憶。
ベースレジスタアドレス修飾に用いる。
プログラムの始めの先頭アドレスを保持する。
アキュムレータ演算に使われる数値や演算結果を記憶する。
汎用レジスタ特に機能を持たずに汎用的に色々記憶する。
一時的な値の保持やアキュムレータなどの代わりに使われる。

プログラムカウンタには「メモリのアドレス」が保存されており、これは取り出すべき命令がメモリのどの部分に保存されているかを表しています。

これは例えると郵便番号みたいなもので、メモリに振られた住所だと考えてください。

これを元にメモリへ参照を行って命令を取り出して、これもレジスタの一種である「命令レジスタ」に保存します。

命令レジスタは内訳すると「命令部」と「オペランド部」の2つの部品で構成されていて、それぞれ

命令部実行させたい命令の種類を示すコード番号を保存
オペランド部処理対象となるデータが格納されているメモリアドレス等を保存。(特にデータが必要なければ何も保存しない。)

という内容で命令を保存しています。

補足

要するに「これオペランド部)をこうしろ命令部)」の形式で命令が保存されているわけですね。

命令の保存が完了したら、次のフェッチに備えてプログラムカウンタの値を1増加させておきます。

▼フェッチ前

プログラムカウンタ1
命令レジスタ
CPU内部

▼フェッチ後

プログラムカウンタ2
命令レジスタメモリの住所「1」に記録されてた命令
CPU内部

命令の解読

このステップはさっき命令レジスタに保存した命令をCPU内部の回路である命令デコーダが解読していくフェーズです。

命令デコーダはまず命令レジスタ命令部から命令の種類を示すコードを解読して必要となる装置に制御信号を飛ばします。

例えば

・演算処理だった場合→CPU内部の演算装置であるALUに信号を飛ばす。

・出力処理だった場合→モニターやプリンタに信号を飛ばす。

みたいな感じです。

対象データ読み出し

このステップは命令の実行前に命令に不足しているデータがあれば、主記憶装置から対象データを探して取り出しを行うフェーズです。

ただ取り出した命令を実行すればいいだけじゃん」と思うかもしれませんが、単純な1行の命令でもそれを実行するためには多くの情報が必要になる場合もあります。

例えば、「メモリ(主記憶装置)に保存されてる値Aと値Bを足して」という命令だったとすると、足すだけであれば簡単なのですが、「値A」と「値B」が手元になければ演算装置は計算できないですよね。

そんな感じで命令を実行する際に何かデータに不足があった場合はそれを探してくる工程が発生したりします。

具体的には命令レジスタオペランド部を見ると、データの在り処を示すメモリアドレス等が格納されているのでそれを参照してデータを取り出します。

(後述しますがオペランド部から実効アドレスを求めるのに使われるアドレス指定方式には色々と種類があります。)

その際に求めた実際にデータが格納されているアドレスの事を実効(有効)アドレスと呼びます。

取り出したデータはCPU内部の汎用レジスタなどで保存しておきます。

補足:メモリのアドレス指定方式
即値アドレス指定方式オペランド部に対象となるデータそのものが入っている方式
オペランド部データ
直接アドレス指定方式オペランド部に記載してあるアドレスがそのまま実効アドレスとして使用する方式
オペランド部実効アドレスデータ
間接アドレス指定方式対象となるデータが保存されている実効アドレスが入っている方式。
オペランド部実効アドレスを示すアドレス実効アドレスデータ
インデックスアドレス指定方式オペランド部の値にインデックスレジスタの値を加算して実効アドレスを求める方式
(インデックスレジスタオペランド部実効アドレスデータ
ベースアドレス指定方式オペランド部の値にベースレジスタの値を加算して実効アドレスを求める方式
(ベースレジスタオペランド部実効アドレスデータ
相対アドレス指定方式オペランド部の値にプログラムカウンタの値を加算して実効アドレスを求める方式
(プログラムカウンタオペランド部実効アドレスデータ

命令の実行

このステップで今までに信号を出した装置と保存してきたデータを使って命令を実行します。

例えば命令が演算処理であれば、さっき汎用レジスタに保存しておいた必要なデータをALUに渡して演算をさせてその結果をまた汎用レジスタに保存させて実行完了です。

ここまでで一つの命令に対するプロセスは完了なので、あとはひたすらここまでのステップを全ての命令が無くなるまで繰り返していきます。

おわりに

長くなってしまいましたがCPU編どうだったでしょうか。

なるべく分かりやすく凝縮して書いたつもりなので忘れたらまたこの記事を読み返してみてください。

他にも基本情報シリーズを投稿予定なので良ければそちらも読んでもらえると嬉しいです。

この記事に書かれている内容は「キタミ式イラストIT塾 基本情報技術者」を参考にさせていただいているので良ければチェックしてみてください。

(ページ数は多いですがその分イラストが大量に使われていて、小難しい機械の仕組みなども直感的に分かりやすく理解できるかなりおすすめの参考書です。)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です