CPU基礎

■CPU

CPUCentral Processing Unitの略で「中央演算処理装置」のことで、
コンピュータの5大装置の一つとして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に読み込みます。

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

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

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

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

※2と3の間辺りでプログラムカウンタの加算が行われます。

■クロック周波数

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

hardware_007

■キャッシュメモリ

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

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

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