基本情報技術者試験 CPU

コンピューターの脳とも言えるCPUについて基本情報技術者試験に必要な範囲で説明していきます。
## レジスタ
CPU内部にありコンピューター内でアクセス速度が1ナノ秒以下と、最速のメモリです。メモリ容量は32~64bitのものがメインで、多くても512bitしかありません。
|  レジスタ名  |  説明  |
| ---- | ---- |
|  汎用レジスタ  |  用途が限定されていないレジスタ  |
|  インデックスレジスタ&ベースレジスタ  |  基準アドレスを保持し、アドレス指定法によって使い分ける  |
|  命令レジスタ  |  現在実行中の命令のアドレスを保持し、命令を格納する命令部と対象データのアドレスを格納するオペランド部によって構成される  |
|  プログラムカウンタ  |  次に実行する命令のアドレスを保持する  |
|  アキュムレーター  |  演算対象や演算結果を保持します  |
|  スタックポインタ  |  スタックメモリの現在のトップを保持するレジスタで関数呼び出しや割り込み処理で使用される  |
|  ベースポインタ  |  スタックフレームの基準アドレスを保持し、ローカル変数や関数引数のアクセスに使用される  |
|  フラグレジスタ  |  演算の結果やCPUの状態を示すビットを保持する  |
|  セグメントレジスタ  |  メモリセグメントのベースアドレスを保持し、メモリアクセスをサポートする  |

## キャッシュ
キャッシュは、CPUとメインメモリ（RAM）の間に位置する高速な小容量メモリで、頻繁に使用されるデータや命令を一時的に保存します。CPUの処理速度とメインメモリの速度差を埋めるために使用され、メモリアクセスの待ち時間を減少させる役割があります。キャッシュ内にCPUが必要とするデータがあればそれを高速に取得(キャッシュヒット)、なかった場合はメインメモリから取得します(キャッシュミス)。いかにキャッシュに関する必要な情報を記載します。
|  キャッシュの種類  |  説明  |
| ---- | ---- |
|  L1  |  CPUコア内にある最も高速で小容量のキャッシュ。一般的に命令キャッシュとデータキャッシュに分かれています  |
|  L2  |  L1キャッシュより大容量で、少し低速なキャッシュ。複数のコアで共有される場合があります  |
|  L3  |  L2キャッシュよりさらに大容量で、低速なキャッシュ。複数のコアで共有されることが一般的です  |

|  キャッシュミスの種類  |  説明  |
| ---- | ---- |
|  コールドミス  |  キャッシュが初めて使われる際に発生するミス  |
|  コンフリクトミス  |  キャッシュ内の同じセットに複数のデータがマッピングされ、競合が発生するためのミス  |
|  キャパシティミス  | キャッシュ全体の容量が不足しているために発生するミス  |

|  キャッシュのマッピング方式  |  説明  |
| ---- | ---- |
|  直接マッピング  |  メインメモリの特定のブロックがキャッシュの特定の位置にのみマッピングされる方式。シンプルで高速ですが、コンフリクトミスが発生しやすいです。  |
|  完全連想マッピング  |  メインメモリの任意のブロックがキャッシュ内の任意の位置にマッピングされる方式。柔軟ですが、ハードウェアが複雑で高コストです。  |
|  セット連想マッピング  | 直接マッピングと完全連想マッピングの中間の方式。キャッシュを複数のセットに分け、各セット内で連想マッピングを行います。バランスが取れており、一般的に使用されます。  |

|  書き込みポリシー  |  説明  |
| ---- | ---- |
|  ライトスルー  |  データがキャッシュに書き込まれると同時に、メインメモリにも書き込まれます。データの整合性が保たれますが、速度が低下することがあります。  |
|  ライトバック  |  データがキャッシュにのみ書き込まれ、メインメモリへの書き込みは後回しにされます。キャッシュのデータが置き換えられる際にメインメモリに書き戻されます。性能が向上しますが、データの整合性を保つために追加のメカニズムが必要です。  |

## CPUの構成
CPUは演算装置と制御装置で構成されています。
### 演算装置
汎用レジスタと演算装置(ALU)で構成されています。
### 制御装置
命令レジスタ、プログラムレジスタとデコーダーによって構成されています。
## CPUの動作
CPUの命令実行は一般的に以下の手順で行われます。
### フェッチ(命令取り出し)
プログラムカウンタに指定されたアドレスから命令を取り出して命令レジスタに保存します。この動作が終わるとプログラムカウンタの値は通常1増えます。
### デコード(命令の解読)
デコーダーによって命令が解読され、必要なオペランドや操作が識別されます。
### 実行アドレス計算
命令対象となるオペランドの格納場所を計算して求めます。場合によってはデコードの段階で解決され、スキップされます。
### オペランド読み出し
主記憶の実行アドレスにアクセスし、オペランドを読み出します。
### 命令実行
命令を実行し、必要に応じて結果データを主記憶に書き込みます。
|  方式名  |  説明  |
| ---- | ---- |
|  即値アドレス指定方式  |  命令内にオペランドの値が含まれている方式  |
|  直接アドレス指定方式  |  命令内にオペランドのメモリアドレスが直接含まれている方式  |
|  間接アドレス指定方式  |  命令内にオペランドのアドレスが格納されているアドレスを指定する方式  |
|  レジスタアドレス指定方式  |  オペランドがレジスタに格納されている場合の方式  |
|  ベースレジスタアドレス指定方式  |  命令内のアドレスとベースレジスタの内容を組み合わせて実際のメモリアドレスを計算する方式  |
|  インデックスレジスタアドレス指定方式  |  命令内のベースアドレスにインデックスレジスタの内容を加算して実際のメモリアドレスを計算する方式  |
|  相対アドレス指定方式  |  命令の現在のアドレスからの相対的な距離を示す方式  |
|  メモリ間接アドレス指定方式  |  命令が指定するメモリの場所に格納されたアドレスを使用して、最終的なオペランドのアドレスを取得する方式  |
|  インデックスレジスタ&ベースレジスタ  |  TD  |

## CPUの性能
CPUの性能は主に以下の数値で判断することができます。
|  方式名  |  説明  |
| ---- | ---- |
|  クロック数  |  CPUが処理を行う回数(厳密には電圧の変化によって状態が変わる回数)をクロック数といいます。単位はHz(ヘルツ)で1秒間に繰り返されるクロックを表します  |
|  CPI(Clock cycles Per Instruction)  |  1命令当たり何クロック必要かを表す指標  |
|  MIPS(Million Instructions Per Second)  |  1秒間で実行できる命令の数を100万単位で表します  |
他にもコア数、スレッド数、キャッシュサイズ、レイテンシー、消費電力も重視されます。
## CPUの処理方式
### 逐次制御方式
1つずつ命令を処理する効率の悪い方式
### パイプライン方式
複数の命令を並行して処理する方式です。命令を分割し、異なるステージで同時に実行することで、CPUの利用効率を向上させます。
## CPUの設計思想
|  方式名  |  説明  |
| ---- | ---- |
|  CISC(Complex Instruction Set Computer)  |  1つの命令で複雑な処理を実行する方式  |
|  RISC(Reduced Instruction Set Computer)  |  1つの命令で単純な処理を高速で実行する方式  |
|  VLI(Very Long Instruction Word)  |  複数の操作を1つの長い命令語で表現し、同時に実行する方式  |
|  ストリームプロセッシング  |  大量のデータを連続して処理する方式  |
|  スーパースカラ  |   複数の命令を同時に実行できる方式 |
## 余談
### 主なメーカー
現在主なCPUメーカーはIntel、AMD、Apple、ARMなどがあります。
### CPUブーストの問題
CPUのクロック数は手動で上げることができますが、一定以上あげてしまうとコンピューターが気のしなくなります。その理由は過渡現象という電圧変動の原理にあり、CPUのクロックは電圧が0と1を反復することで実現しますが、速すぎると切り替えが間に合わず、電圧が0と1の間で波上になり、0にも1にもならず一切の処理が行えなくなります。
### 計算問題
CPUのクロック数関連の質問が出題されることがありますが、それは別途、基本情報技術者試験 計算問題の記事にて説明するので楽しみにしていてください。
## 参考文献
https://emb.macnica.co.jp/articles/13347/
https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
https://xtech.nikkei.com/it/article/COLUMN/20070404/267385/
https://www.youtube.com/watch?v=oqaBEnhIxk0&t=9622s&ab_channel=%E3%80%90%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93YouTuber%E3%80%91%E3%81%99%E3%83%BC%E3%81%95%E3%82%93