CPU基礎


概要

CPUCentral Processing Unitの略で「中央演算処理装置」のことで、
PCやスマホ、家電などのIT機器には必ず存在する装置です。

hardware_001

制御装置

制御装置は5大装置の1つで残りの4つの装置はデータのやり取りを
行う際に必ず、制御装置を通して行います。

制御装置の流れの例:
	①.入力装置のキーボードのFを押す

	②.制御装置がFを押されたことを認識する

	③.制御装置が記憶装置に「F」というデータを記憶させる

	④.制御装置が記憶装置に③で記憶したデータを
	  出力装置に送信させる

	⑤.④で送信されたデータを出力装置のディスプレイが
	  画面に出力する

	※実際は演算装置を通していますがそこは省略しています。

演算装置

演算装置は5大装置の1つで記憶装置であるメモリから
命令(プログラム)をうけて演算を行っており、
演算の結果はメモリやレジスタ、キャッシュと呼ばれる
CPU内にある記憶領域に保存されます。

算術演算と論理演算

演算装置が行える演算は「算術演算」と「論理演算」の2種類です。

算術演算

昔のCPUの算術演算は足し算と引き算の二つしかできませんでしたが、
近年のCPUはFPU(Floating Point Unit)と呼ばれる
浮動小数点演算機能を持つコプロセッサを持っており、
乗算と除算が可能になっております。

コプロセッサ:
	CPUの補助を行い計算性能を向上させることを目的とした装置

論理演算

論理演算は「0」と「1」の2つの値を使用した演算のことで、
論理和、論理積、否定、排他的論理和が基本的な論理演算になります。

ALU

演算装置はALU(Arithmetic Logic Unit)、「算術論理装置」とも
呼ばれています。

hardware_002

入力A、入力B

入力aと入力bには演算を行う値が設定されています。

コマンド入力

コマンド入力はどのような演算を行うかの指示で、
「足し算をしろ」「引き算をしろ」などがあります。

出力

出力は入力AとBの値に対してコマンドの内容を実行した結果です。

ステータス出力

ステータスは出力に関する情報のことで、
「正か負か」「オーバーフローしているか」「結果が0か」などを
出力します。

hardware_003

レジスタ

レジスタとはCPU内に記憶装置で計算結果などを
保存する一時的な記憶領域です。
要領は記憶領域の中で最も少ないサイズしかありませんが、
処理速度は記憶領域の中でも最も高速に動作します。
レジスタの数は1種類ではなく、数多く存在しますので、
今回はその一部を紹介します。

汎用レジスタ

汎用レジスタは計算等の様々な用途で使用することができるレジスタで、
実際の中身はデータレジスタアドレスレジスタを合わせたものです。

データレジスタ:
	演算結果やデータを一時的に保存するためのレジスタで、
	このレジスタのデータは演算装置や外部データバスで
	外の記憶装置ともやり取りができる

アドレスレジスタ:
	メモリのアクセス時にアドレス指定に使用するレジスタで、
	アドレスバスにデータを渡すことで、
	そのアドレスのデータを読み出すことができる

アキュムレータ

アキュムレータは演算装置で使用されるレジスタで、
必ず演算に使用されるレジスタです。
アキュムレータは累積器とも呼ばれており、
以下の図のように入力の1つと出力がつながっており、
計算結果がそのまま入力の値に上書きされる形になっています。

hardware_004

プログラムカウンタ

プログラムカウンタはレジスタの一種で、
次に実行する命令が格納されたアドレスが格納されています。
プログラムカウンタ内の命令を実行されると
自動的にカウンタの加算が行われます。

hardware_005

上の画像ならばPCは1004になっているので現在実行中の命令は
1000番地に格納されている命令です。
この命令が終了するとPCを参照して次の命令が実行され、
PCも加算されます。

分岐や繰り返し処理の中身

if文やforなどの分岐や繰り返し処理は
命令の中にプログラムカウンタを書き換える内容が入っており、
それにより、判定結果などで処理を切り替えています。

上の画像では1000番の命令を実行中の場合、次の命令は1004ですが、
1000番の命令内で条件の結果によっては1008番地に飛ぶように
設定されています。
このように、条件分岐や繰り返しでは、命令中にプログラムカウンタを
書き換えることによって移動先を変更して処理を実現しています。

hardware_006

バス

バスとはデータの通り道のことで、数多くの種類があります。
CPUがメモリに対してアドレスを指定するバスを「アドレスバス」
データのやり取りをするバスを「データバス」
入出力装置と接続するための「I/O(入出力バス)」などです。

内部バスと外部バス

バスにはやり取りする情報の範囲によって
「内部バス」と「外部バス」に分けられます。

内部バス

内部バスはデータのやり取りの範囲が装置内でとどまるバスのことです。
例えばCPU内のアキュムレーターの値を汎用レジスタに保存する際の
データバスによるデータのやり取りはCPU内で完結しているので
内部バスにあたります。

外部バス

外部バスはデータのやり取りの範囲を別の装置と行っているバスです。
例えばCPUのアドレスバスを使用して、メモリのアドレスに
アクセスするのは外部バスになります。

バス幅

バス幅とはバスを通してデータを送信する場合に
一度に送信できるデータ量のことです。
バス幅の単位はbitになっており、バス幅が8の場合、
一度に8ビットのデータを送信することが可能ということになります。

命令の流れ

CPUの命令実行の流れは基本的には以下のようになっています。
※②と③の間辺りでプログラムカウンタの加算が行われます。

①.命令の読み込み(フェッチ)

プログラムカウンタのデータとして格納されているアドレスから
メインメモリにアクセスし、その中の命令をCPUに読み込みます。

②.命令の解読

①で読み込んだ命令はまだ、演算を行うことができません。
演算するためには命令を解読して演算装置で使用できるように変換します。

③.命令の実行

命令の解読が完了したら、その命令を実行して結果を出します。

④.結果の保存

③で出た結果やステータスをレジスタやメインメモリに保存します。

⑤.次の命令へ

①に戻って次の命令の読み込みを行います。

クロック周波数

クロック周波数とは一定周期でどの程度の量の計算ができるかを
示しています。
このクロック周波数はCPUの機能の高さを示す指標になっているので、
PCのスペック表に必ず記述されています。
例えば3.6GHz(ギガヘルツ)は1秒間に36億回計算できるということです。

hardware_007

キャッシュメモリ

キャッシュメモリとはCPUがデータや情報の取得のためにメインメモリに
アクセスする際に発生する遅延を解消するために用意された
高速メモリ領域のことで、一般的には「キャッシュ」と呼ばれています。

遅延

CPUがデータを取得するにはデータバスやアドレスバスを使用して
メインメモリにアクセスする必要があります。
この時にCPUからバスに通知を行うまでの処理速度と
メインメモリにアクセスしてからデータをCPUに送信するまでの
処理速度に差異が生じて、遅延が発生しています。
CPU側が速く、メモリアクセスが遅い状態です。
これはCPU性能が上がれば上がるほど遅延がひどくなります。

キャッシュメモリの内容

キャッシュメモリは頻繁に使用するデータを保存しておきます。
そして、それらのデータが使用される場合にメインメモリではなく、
このキャッシュメモリにアクセスすることで遅延を軽減しています。