Part2では、「外部バスインタフェース」「制御ユニット」「演算ユニット」という3つの部分で構成されているCPUの基本的な動作原理を見るとともに、CPUの動作周波数について詳しく解説していこう。

 命令について理解したところで、もう少しCPU内部に入り込んでいこう。「スーパーパイプライン」などの最新技術を理解するためには、もうちょっと基礎知識をたくわえる必要がある。

 先ほど、CPUは単純作業を繰り返すという話をした。さらに細かく見てみると、実は1つの命令は4つのステップで実行されている。その流れを示したのが図1だ。CPU内部には「外部バスインタフェース」「制御ユニット」「演算ユニット」という3つの部分がある。

図1●CPU内部では4つのステップで命令を実行する
図1●CPU内部では4つのステップで命令を実行する
1つの命令は4つのステップで処理される。まずメモリーから制御ユニットに命令を読み込み(1),デコーダーでどのような命令かを解読(デコード)する(2)。命令は制御情報に変わり,演算ユニットを制御して命令を実行し(3),結果をメモリーに出力する(4)。

 外部バスインタフェースは、命令やデータをメモリーとやり取りするための門のようなもの。制御ユニットは、読み込んだ命令を「解読」して、さらに具体的な処理内容を指示するところだ。ここには、命令の解読を専門に行う「デコーダー」という機能がある。そして演算ユニットは、制御ユニットが解読した処理内容に従って実際の処理を行う。

 メモリー上の命令を外部バスインタフェースを通して制御ユニットに読み込む作業を「フェッチ」と呼ぶ。フェッチされた命令は制御ユニットにあるデコーダーで、足し算なのか、かけ算なのか、あるいはデータ転送なのか、といった具体的な情報に解読される。この作業をデコードと呼び、解読された命令は「制御情報」に姿を変える。これは、演算ユニットをどのように動作させて演算させるかをコントロールする情報だ。演算の対象となるデータは、メモリーから外部バスインタフェースを通して演算ユニット内に読み込まれる。

 実際に演算を行う演算ユニットの内部を図解したのが図2だ。演算ユニットの中には、処理中のデータを格納する「レジスター」と、実際に演算を行う「演算器」がある。レジスターは複数あり、演算対象のデータはここに読み込まれる。実はどのレジスターを使うかは命令で指定する。アセンブリ言語にある「eax」はレジスターのことだ。演算器はレジスター内のデータを使って演算し、結果をレジスターに書き込む。レジスターに書き込まれた結果は、メモリーに出力される。

図2●命令の実行は演算ユニットの中の演算器が行う
図2●命令の実行は演算ユニットの中の演算器が行う
命令を実行する演算ユニットの中には,演算に使うデータを保存しておくレジスターと実際に演算を行う演算器がある。演算器は制御情報の指示に従ってレジスターにあるデータに対し演算を行う。結果はレジスターに書き込まれた後,メモリーに出力される。

 実際の演算は0と1で行われる。それを示したのが図3だ。読み込まれた0と1の機械語命令は、デコーダーを経て制御情報に変わる。それに従って演算器が動作し、0と1だけで表現されたデータで演算し、結果も0と1で出力される。

図3●演算は0と1だけを使って行われる<br>命令やデータはすべて0と1で表される。デコーダーによって命令は制御情報に変わり,演算器をどのように動かすかを指示する。この指示に従って演算器が動作して,演算が行われる。
図3●演算は0と1だけを使って行われる
命令やデータはすべて0と1で表される。デコーダーによって命令は制御情報に変わり,演算器をどのように動かすかを指示する。この指示に従って演算器が動作して,演算が行われる。
[画像のクリックで拡大表示]

 ちなみに0と1の区別は、コンデンサーの電荷の有無で判断している(図4)。トランジスターがスイッチの役割で、スイッチをオンにするとコンデンサーに電荷がたまる。ある一定値以上に電荷がたまった状態を1、それ以外を0と認識する。スイッチのオン/オフはトランジスターにかける電圧で制御している。結局のところ、CPUは電流と電圧で動作しているのだ。

図4●0と1は電荷で表現する
図4●0と1は電荷で表現する
トランジスターとコンデンサーを使って0と1の区別を行う。トランジスターがスイッチの役目を行い,オンになるとコンデンサーに電荷がたまり1を示す。

 以上がCPU内部の基本的な動作原理だ。次にCPUの動作周波数について解説する。なぜ「クロック」が高いと処理が速くなるのかを追っていこう。