【基本情報・Chapter5】CPU

<font color="Salmon">**今日はCPUに関する知識をまとめます。
お気づきの点がございましたら、ご指摘いただけると幸甚です。ᐖ**</font>

## <font color="Salmon">コンピュータ5つの装置</font>
<!--- ハードウェア　　5つの装置ある↓ -->
#### ハードウェアの5つの装置
- **制御装置**
プログラムやデータを取り出し、内容を解釈して他のハードウェアを制御する
例：CPU
- **演算装置**　　　
プログラムに従って計算を行う
例：CPU、GPU
- **記憶装置**
コンピュータ内にデータやプログラムを保持する
  - 主記憶装置
	    CPUから直接アクセスできる記憶装置のことで、メモリとも呼ぶ。
	    電源を切ると情報が消えてしまうという弱点がある。
  - 補助記憶装置
  HDDやフラッシュメモリのことで、電気供給が停止しても恒久的に情報を保持するための機器
- **入力装置**
コンピュータに情報を入力する
例：キーボード、マウス、タッチパネル
- **出力装置**
計算結果を外部に出力する
例：ディスプレイ、プリンタ


#### CPU
*Central Processing Unit*　中央演算装置・プロセッサ
制御と演算を行う装置で、メモリからデータを読み込んで、ユーザーがアプリケーションソフトなどを通じて出した命令を解釈し演算を実行する。
CPU＝制御装置＋演算装置





#### ALU
*Arithmetic and Logic Unit*   算术逻辑单元
通常ALUはマイクロプロセッサの内部で使用され、データに対して算術演算（四則演算）や論理演算などの計算を行う装置。


#### 装置間の制御やデータ（およびプログラム）の流れ
　　　　　　　<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/13489d12-f03d-b426-e352-667e4d9a1b64.png">

#### ノイマン型コンピュータ
*von Neumann architecture*
プログラムをデータとして記憶装置に格納し、これを順番に読み込んで実行するコンピュータ。現在のコンピュータのほとんどがこの方式を採用している。
#### アドレス・番地
*address*
CPUが直接読み書きできる、すべての空間を「アドレス空間（または、メモリ空間）」と呼ぶ。
アドレス空間は、1バイトごとに番号が振られている。
番号を「番地（アドレス）」と呼び、一般に16進数で表記される。


## <font color="Salmon">レジスタ</font>
#### レジスタ
*register*　寄存器
コンピュータのプロセッサなどが内蔵する記憶回路で、制御装置や演算装置や実行ユニットに直結した、操作に要する速度が最速の、比較的少量のものを指す。
- **プログラムカウンタ**
*Program counter*　*PC*　程序计数器、指令指针、指令地址寄存器
次に実行するべき命令が入っているアドレスを記憶するレジスタ
- **命令レジスタ**
*instruction register*　*IR*　指令寄存器
取り出した命令を一時的に記憶するためのレジスタ
- **インデックス（指標）レジスタ**
*index register*　索引寄存器
アドレス修飾に用いるためのレジスタで、プログラムの先頭アドレスを保持する
- **ベースレジスタ**
*base register*　基地址寄存器
アクセスしたいメインメモリ上の番地（アドレス）の基準値や先頭位置を記憶しておくためのもの
- **アキュムレータ**
*accumulator*　累加器
演算の対象となる数や、演算結果を記憶するレジスタ
- **汎用レジスタ**
*general register*　通用寄存器
特に機能を限定していないレジスタ。一時的な値の保持や、アキュムレータなどの代用に使ったりする

## <font color="Salmon">cpu命令実行手順</font>

①**命令の取り出し（フェッチ）**
*fetch*
プログラムカウンタが示すメモリ番地から命令を取出し，命令レジスタへ格納する
②**命令の解読（デコーダ）**
*Decode*
命令の命令部を解読し、実施する命令を把握する
命令を格納した**命令レジスタ**と**命令デコーダ**が活躍する  
　　　　　　　　<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/ba65d74f-3c32-ccfb-dd09-b6405775d12a.png">

  
③**対象データ（オペランド）読み出し**
*Read*
主記憶装置からオペランドを読み出す
　　　　　　　　<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/d41496b6-cec4-589d-c646-e42bd7e590f3.png">

④**命令実行**
*execution*
命令を実行し、演算を行う。必要に応じて主記憶装置に結果をかき出す
　　　　　　　　<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/e9bda2f2-380e-af9a-7d45-ac731414f418.png">


#### まとめ→一連の手順
　　　　　　　　　　　<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3850773/3b9d4c95-c074-2c4e-12c2-a535e8c8f2ef.png">

## <font color="Salmon">機械語のアドレス指定方式</font>
#### 実効（有効）アドレス
*Effective Address*
制御装置が命令を実行する際に、実際に使用するアドレスのこと
#### 機械語
*machine language、machine code* 
コンピュータの中央処理装置（CPU)が直接理解し実行することができる命令からなる言語。マシン語（マシンご）とも
#### 命令語
*instruction word*
機械語で命令を表した語、あるいはコマンド*Command*のこと。
#### アドレス修飾（指定）
*modify address*
機械語命令の演算数（オペランド）にあるアドレス情報を利用して、実行するべき命令の対象となるデータアドレスを決定することである。

#### 指定方式
- **即値アドレス指定方式**
*immediate addressing*   立即寻址
オペランド部に操作対象のデータを指定する方式。主記憶装置からデータの取出しは行わない
メモリ参照を行わないので高速に処理できる
　　　　　　　　<img width="300" src="https://medium-company.com/wp-content/uploads/2020/08/addressing_method2.png">

- **直接アドレス指定方式**
オペランド部の値を実効アドレスとする方式
　　　　　　　　<img width="300" src="https://medium-company.com/wp-content/uploads/2020/08/addressing_method3.png">

- **間接アドレス指定方式**
オペランド部に指定したアドレスに格納されたデータを実効アドレスとする方式
　　　　　　　　<img width="300" src="https://medium-company.com/wp-content/uploads/2020/08/addressing_method4.png">

- **インデックス（指標）アドレス指定方式**
オペランド部の値とインデックスレジスタの値を加算した結果を実効アドレスとする方式
　　　　　　　　<img width="300" src="https://medium-company.com/wp-content/uploads/2020/08/addressing_method5.png">

- **ベースアドレス指定方式**
オペランド部の値とベースレジスタの値を加算した結果を実効アドレスとする方式
　　　　　　　　<img width="300" src="https://medium-company.com/wp-content/uploads/2020/08/addressing_method6.png">

- **相対アドレス指定方式**
オペランド部の値とプログラムカウンタの値を加算した結果を実効アドレスとする方式
　　　　　　　　<img width="300" src="https://medium-company.com/wp-content/uploads/2020/08/addressing_method7.png">





## <font color="Salmon">CPUの性能指標</font>

#### 性能指標

- **クロック周波数**
*clock frequency* 时钟频率（f）
クロックが1秒間に繰り返される回数のこと。単位：Hz
例： クロック周波数1G(ギガ)Hz
$$
1G=10^9=1000,000,000
$$
1秒間に10億回の信号が送られているということになる
クロックサイクル時間（t）：
$$
クロックサイクル時間（t）＝\frac{1}{クロック周波数（f）}
$$
 「クロック周波数1G(ギガ)Hz」という場合は：1ナノ秒


- **CPI**
*Clock cycles Per Instruction*　每条指令的平均时钟周期数
CPUが1つの命令を実行するために必要なクロック数を表す性能指標
例：１GHzのCPUで、１命令当たりのクロック数は４CPI
→クロックサイクル時間は1ナノ秒で、１命令当たりの実行時間が４ナノ秒ということ


- **MIPS**
*Million Instructions Per Second*　每秒执行百万条指令数
1 秒間に実行できる百万単位の命令数
*Million：「百万」
Instructions：「命令（複数形）」
Per：「～あたり」
Second「秒」*
数値が大きくなるので、命令の数は百万単位で表す
例：１命令当たりの平均が4ナノ秒というCPUがあった場合にMIPSを求めると：２５０MIPS

$$
MIPS＝\frac{1}{CPI×t}＝\frac{f}{CPI}
$$


#### 命令ミックス
*instruction mix*
命令は、その種類によって実行が必要なクロックサイクル数が異なっていたりする。コンピュータやCPUの処理能力の計測に用いる計算や入出力などの命令の組み合わせのことである。

## <font color="Salmon">CPU高速化技術</font>
#### パイプライン処理
*pipeline*　流水线
コンピュータ等が情報処理を行う際に、ある処理の出力が次の処理の入力になるようにした上で、複数の処理機構を並行させて動作させること
#### 分岐ハザード・制御ハザード
*branch hazard，control hazard*
マイクロプロセッサ（MPU/CPU）のパイプライン処理で発生する問題の一つで、命令間の依存関係などによりパイプライン処理を止めたりやり直さなければならなくなること。
#### 分岐予測
*Branch Prediction*
プログラム実行の流れの中で条件分岐命令が分岐するかしないかを予測することにより、命令パイプラインの効果を可能な限り維持し、性能を高めるためのCPU内の機能である。

#### 投機実行
*speculative execution*
その予測に基づいて、命令処理を先に実行する仕組みを投機実行という。
★どちらに分岐するのかを予測（分岐予測）し、予測先の命令を先行してパイプラインに投入して実行し始めてしまうことを投機的実行という

#### スーパーパイプライン
*super pipeline* 　超流水线
マイクロプロセッサ（MPU/CPU）の高速化手法の一つで、命令を細かい工程に分解して並列に実行するパイプライン処理を、高度に細分化・多段化したもの。
#### スーパースカラ
*super scalar*　超标量
マイクロプロセッサ（CPU）のアーキテクチャの一種で、複数の命令処理を同時に進行させることによって全体として高速な処理を実現する技術のこと。

#### CISC
*Complex Instruction Set Computer*  复杂指令集计算机
CPUの命令語の仕様の設計方針の一つで、複雑で高度な機能を持つ命令語をなるべくたくさん用意する考え方。パソコン向けなどで広く普及しているIntel社のx86系やx86-64系プロセッサなどが代表的である。
#### RISC
*Reduce Instruction Set Computer*  精简指令集计算机
MPU/CPUの命令語の仕様の設計方針の一つで、固定長の少数の単純な命令のみを備え、実行効率を向上させる考え方。主に高性能コンピュータ向けや携帯機器向けのプロセッサ製品で採用されている。
#### アーキテクチャ
*architecture*  架构
基本設計、設計思想
コンピュータ（特にハードウェア）の論理的な構成（法）のことである。





***
<font color="Salmon">**ここまで読んでくれて
お疲れ様です！
ありがとうございました！(⁎ᵕᴗᵕ⁎)**</font>