プロセッサ -情報処理シンプルまとめ

プロセッサに関するブログのアイキャッチ画像 コンピューター構成要素

 基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,プロセッサについてシンプルにまとめています。CPUの構造の説明からスタートし,処理の流れ,アドレスの指定方式,アーキテクチャ,性能,高速化技術,マルチプロセッサ,割込み,GPUについて説明します。たくさんありますので,繰り返しじっくり読んでみてください。

CPU(Central Processing Unit:中央処理装置)

 CPUはコンピューターの中心となる装置です。主記憶装置からプログラムを読み出して,各装置の制御や演算などを行います。CPUは,制御装置や演算装置,レジスタという超高速の記憶装置などで構成されており,キャッシュメモリを内蔵したものもあります。

※キャッシュメモリ:レジスタよりは遅いが主記憶装置よりは速い記憶装置。

CPUの構成

デコーダCPUで実行する命令の内容を解読し,レジスタやALU,周辺装置を制御する
ALU(算術論理演算装置)算術演算や論理演算を行う。加算器や論理演算回路などで構成されている
レジスタプログラムカウンター次に実行する命令のアドレス(主記憶装置内のデータの保存場所)を格納する
メモリアドレスレジスタ操作の対象となる命令や,読み書きするデータのアドレス(主記憶装置内のデータの保存場所)を格納する
命令レジスタ操作の対象となる命令の内容を格納する
汎用レジスタ演算に使用するデータなどを格納する。汎用的(自由)に使用することができる
バスデータバスデータを伝送するバス
コントロールバス各装置を制御する信号を伝送するバス
アドレスバス各装置やメモリーの場所を指示する情報を伝送するバス

レジスタ

 レジスタとは,命令やデータ,アドレス(主記憶装置内のデータの保存場所)などを一時的に格納する小容量で超高速な記憶装置のことをいいます。CPUの構成によりレジスタの数や種類,容量は異なります。上記以外の主な装置やレジスタには,次のようなものがあります。

FPU(浮動小数点数演算装置)浮動小数点数専用の演算装置
レジスタインデックス(指標)
レジスタ
アドレス(主記憶装置内のデータの保存場所)の基準値からの相対的な位置を示す値を格納する。インデックスレジスタの値を変化させることで配列の添字操作の処理ができる。汎用レジスタを転用することが多いよう
ベース(基底)レジスタプログラムの開始位置を格納する。プログラムを主記憶装置内の任意の位置に再配置するのに適している
スタックポインタスタックの最上段のアドレスを保持するレジスタ。スタック内で最後に参照されたアドレスを保持している。割込み時や,関数呼び出し時などに使用する

※スタックとは,後入れ先出しの規則でデータを保持するデータ構造のことをいいます。

命令の形式

 CPUが実行する命令の形式は次のようになっています。

命令部実行する命令の種類を格納
オペランド部実行する命令のアドレス(主記憶装置内のデータの保存場所)やデータを格納

処理の流れ

 命令の実行は,いくつかのステージに分けて行います。ステージとは,命令を機能ごとに分けた各段階のことをいい,命令の読み出しや,命令の解読,データの読み出し,命令の実行,実行結果の格納などがあります。

※ CPUの種類によりステージの数やその内容は異なります。

 処理の流れは次のようになります。

① 命令の読み出し(フェッチ)

 プログラムカウンターが示すアドレス(主記憶装置内のデータの保存場所)から命令を読み出し,命令レジスタへ格納する。

キャッシュメモリから命令を読み出すこともある。キャッシュメモリとは,CPUと主記憶装置の間(実際にはCPU内部)に置かれることのある高速な記憶装置である。主記憶装置から命令やデータを読み出す際に,その命令やデータをキャッシュメモリにも格納しておき,次に読み出す際にはキャッシュメモリにアクセスすることによりメモリアクセスを高速化する。

② 命令の解読(デコード)

 命令レジスタの命令を解読する。

③ 実効アドレスの計算

 主記憶装置からデータを読み出す命令の場合,オペランド部から実効アドレス(主記憶装置内のデータの保存場所)を計算し,メモリアドレスレジスタへ格納する。

実効アドレスとは,対象のデータが存在するアドレス(主記憶装置内のデータの保存場所)のことをいう。詳細は後述。

④ データの読み出し

 主記憶装置,または,汎用レジスタからデータを読み出す。

※ キャッシュメモリからデータを読み出すこともある。

⑤ 命令の実行

 命令部に指定した命令をALUで実行する。

⑥ 実行結果の格納

 主記憶装置,または,レジスタへ実行結果を格納する。

※ キャッシュメモリを内蔵するCPUで主記憶装置に実行結果を格納する場合は,キャッシュメモリにも格納する。

 具体的には,次のようになります。

少し難しいかもしれません。よく分からない場合は,そのまま先に進み,あとでじっくり読んでみてください。

アドレス指定方式

 主記憶装置にある命令やデータは,アドレス(主記憶装置内のデータの保存場所)を指定することによって読み出します。次に実行する命令のアドレスはプログラムカウンターが指定し,データのアドレス(実効アドレス)はオペランドの値から計算し求めます。

即値アドレス方式

 即値アドレス方式は,オペランド部にデータを格納する方式です。主記憶装置へのアクセスはありません。

直接アドレス方式(絶対アドレス方式)

 直接アドレス方式は,オペランド部に実効アドレスを格納する方式です。

間接アドレス方式

 間接アドレス方式は,オペランド部のアドレスに格納されたデータ(アドレス)を実効アドレスとする方式です。

相対アドレス方式

 相対アドレス方式は,オペランド部の値とプログラムカウンターの値を加算した値を実効アドレスとする方式です。プログラムを主記憶装置内の任意の位置に再配置するのに適しています。

インデックス(指標)アドレス方式

 インデックスアドレス方式は,オペランド部の値とインデックスレジスタの値を加算した値を実効アドレスとする方式です。

ベース(基底)アドレス方式

 ベースアドレス方式は,オペランド部の値とベースレジスタの値を加算した値を実効アドレスとする方式です。

CISCとRISC

 CPUには主に2種類のアーキテクチャがあります。

※ アーキテクチャとは,コンピューターシステムの論理的構造のことをいいます。

CISC(Complex Instruction Set Computer)

 CISCでは,演算や処理をマイクロプログラムの組み合わせによりソフトウェア的に実行します。そのため,1つの命令で複雑な処理を行うことができます。また,各命令の長さは可変長です。

※ マイクロプログラムとは、CPUに対する命令を分割した単純な命令のことをいいます。

RISC(Reduced Instruction Set Computer)

 RISCでは,演算や処理を論理回路によりハードウェア的に実行します(ワイヤードロジック方式)。各命令に対応する回路が組み込まれているため高速に実行できますが,命令ごとに物理的な回路が必要になるため命令数は少なくなります(通常100未満)。また,各命令の長さは固定長です。

CISCとRISCの比較

CISCRISC
処理マイクロプログラムの組み合わせによりソフトウェア的に実行ワイヤードロジック方式によりハードウェア的に実行
特徴1つの命令で複雑な処理を行うことができる1つの命令で単純な処理を行う
命令数多い少ない(通常100未満)
命令長可変長(16~64ビット)固定長(32ビット)
具体例

Intel(Core i7,celeronなど)
AMD(Ryzen 7など)

※ パソコンに使われることが多い

ARM

※ スマホやタブレット,組込みシステムに使われることが多い

CPUの性能

クロック周波数

 クロック信号とは,一定時間ごとに電圧の高低が切り替わる信号のことをいいます。発信器により生成され,各回路が処理のタイミングを合わせるために使用します。
 クロック周波数とは,1秒間に発生するクロック信号の回数のことをいい,Hz(ヘルツ)という単位で表します。たとえば,クロック周波数が100Hzの場合,1秒間に100回のクロック信号が生成されます。また,1クロックにかかる時間は,クロック周波数の逆数になります。

例)クロック周波数が1GHzの場合,1秒間に109(=10億)回,信号が生成される

1クロックにかかる時間(秒)
  =1(秒)÷クロック周波数(Hz)
  =1÷109
  =10-9(=1ns)

※ Hz=1s (1クロックにかかる時間は,クロック周波数の逆数)

CPI(Clocks cycles Per Instruction)

 CPIとは,1つの命令を実行するのに必要なクロック数のことをいいます。

例)クロック周波数が1GHzでCPIが4の場合の,1命令の実行時間

1命令の実行時間(秒)
  =1クロックにかかる時間(秒)×CPI
  =1(ns)×4
  =4(ns)

※ CPIが小さいと1つの命令の実行時間も短くなる。

※ 1クロックにかかる時間(秒)については上記参照。

MIPS(Million Instructions Per second)

 MIPSとは,1秒間に実行できる命令数を100万単位で表したものをいいます。

例)クロック周波数が1GHzでCPIが4の場合の,1秒間に実行できる命令数

1秒間に実行できる命令数
  =1(秒)÷1命令の実行時間(秒)
  =1÷4(ns)
  =250(MIPS)

※ 1秒間に2億5千万命令実行できる。

※ 1命令の実行時間(秒)については上記参照。

FLOPS(FLoating point number Operations Per Second)

 FLOPSは,1秒間に実行できる浮動小数点数演算の回数を表します。3Dグラフィックスなどの性能指標として用いられます。

例)1GFLOPS=1秒間に10億回の浮動小数点数演算を実行できる

練習問題

 クロック周波数が2.5GHzのCPUについて,各問いに答えなさい。

(1) 1クロックにかかる時間は何ナノ秒か。

(2) CPIが4の場合,1つの命令の実行時間は何ナノ秒か。

(3) 1秒間に実行できる命令の数は何MIPSか。

(1) 1÷2.5(GHz)=0.4(ns)
(2) 0.4(ns)×4=1.6(ns)
(3) 1÷1.6(ns)=625(MIPS)

CPUの高速化技術

 CPUを高速化するためには,クロック周波数を上げること以外に次のような技術もあります。

逐次制御方式

 逐次制御方式とは,各命令を1つずつ順に処理する方式です。

※ 逐次制御方式は高速化技術ではありません。

パイプライン

 パイプラインの場合,ステージをずらしながら命令を実行します。CPIは1に近づきます。

スーパースカラ

 スーパースカラの場合は,パイプライン処理を行う回路を複数持ち,複数の命令を並行して実行します。CPIは1に近づきます。

VLIW(Very Long Instruction Word)

 依存関係のない複数の命令を1つの命令にまとめ,同時に実行できるようにしたものである。

マルチスレッド

 スレッドとは,プロセス(実行中のプログラム)内での命令の流れ(処理の実行単位)のことをいいます。シングルスレッドの場合は,1つのプロセスで1つのスレッド動作させ,マルチスレッドの場合は,1つのプロセスで複数のスレッドを動作させます。

マルチプロセッサ

 複数のプロセッサを同時に動かすことで高速化を図ります。複数の命令を並行して処理できるようになります。

密結合マルチプロセッサ

 密結合マルチプロセッサとは,複数のプロセッサが主記憶装置を共有し,1つのOSで制御されるものをいいます。複数のCPUが同一のメモリ領域にアクセスした場合,競合によりアクセス遅延が発生します。

マルチコアプロセッサ

 マルチコアプロセッサとは,CPUのコアである制御装置と演算装置が,1つのCPUの中に複数あるものをいいます。密結合マルチプロセッサの一種で現在の主流です。

1コアシングルコア
2コアデュアルコア
4コアクアッドコア
6コアヘキサコア
8コアオクタコア

疎結合マルチプロセッサ

 疎結合マルチプロセッサとは,複数のプロセッサがそれぞれ別々の主記憶装置を持ち,別々のOSのインスタンスにより動作するものをいいます。複数の独立したコンピューターがあるのと同じです。

※ インスタンスとは,あらかじめ定義されたコンピュータプログラムやデータを,主記憶装置に読み出して実行・処理できる状態にしたものをいいます。

割込み

 割込みとは,実行中の処理を中断させ,強制的に別の処理を実行させることをいいます。

 同時に複数の割込みが発生した場合は,優先順位の高いものから実行されます。

外部(ハードウェア)割込み

 外部割込みとは,実行中のプログラム以外の外部の要因によって発生する割込みをいいます。ハードウェアの処理要求により引き起こされる割込みです。

機械チェック割込みハードウェアの異常が検出されたときに発生する割込み
タイマ割込み組込みタイマ(ハードウェア)による割込み
入出力割込みキーボードやマウスなど,入出力装置から行われる割込み

内部(ソフトウェア)割込み

 内部割込みとは,実行中のプログラム内部からの割込みをいいます。

プログラム割込み0による除算や,オーバーフローが起きたときなどに発生する割込み
SVC割込み実行中のプログラムからOSに処理を依頼するときに行われる割込み
ページフォールト割込み仮想記憶において,存在しない仮想記憶領域にアクセスしたときに発生する割込み

※ SVC(Super Visor Call:スーパーバイザコール)

GPU(Graphics Processing Unit)

 GPUとは,画像処理に特化したプロセッサです。3Dグラフィックスで座標変換やピクセル処理などを高速に処理するために使用されています。CPUに内蔵されていたり,拡張ボードに搭載されたりしています。

まとめ

 今回は,プロセッサついて,シンプル(ではないかも!?)にまとめてみました。難しい内容があったり,覚えることもたくさんあったりで,大変だったと思います。一回で完璧に理解し覚えるのは難しいと思いますので,また,いつか読みに来てください。基本情報技術者試験や応用情報技術者試験で問われるところですので避けてはとおれないんです…。根気よく頑張ってください。