CPUの中では何をやっているのかを見てみます。

こんにちわ。

今回は、CPUの中身はどんなもので構成されていて、どんな働きをしているかを紹介できたらと思っています。

ところでCPUを設計するときには、次のようなことを決めていくらしいです。

  • 命令セットの構成
  • 内部の演算装置などの実行ユニットの間をどうようにデータが流れるか設計(データパス)
  • 制御装置の設計(データパスを制御する論理回路)
  • レジスタの構成や命令との関係の設計
  • メモリの構成(キャッシュ)やメモリインタフェース
  • クロック周辺(クロックドライバ、PLL、クロック供給ネットワーク)

などなど。。。よくわかりませんね。(笑)

でも、CPUの中でどんな機能を実現しているのかはなんとなくイメージできます。

極力、簡単に言ってしまいますとCPUの中ではこんなことをしてるんじゃないでしょうか?

  • クロックの出す信号(号令)に合わせて、内部の命令セットを順番に処理していきます。
  • その時に処理するデータはレジスタに読み込んでそこで処理します。
  • 効率的に処理をするために、パイプラインやキャッシュという機能を持っています。

もう少しイメージが膨らむようにそれぞれの説明をしてみたいと思います。

スポンサーリンク
スポンサーリンク




クロックの話

クロックとは、行ってみれば心臓の鼓動のようなものです。

もしくは、音楽を演奏するときのメトロノームのようなものです。

下の写真のような水晶振動子などで一定周期の信号を作り出します。

クロックの信号は、早いものもあれば、遅いものもありますが、一定の時間周期で同じ信号を出すような仕組みです。

デジタル回路は全般的にこのクロックに同期するように設計されて、動作する時に複数の回路のタイミングを合わせて(同期を取って)動きます。

人間で言うと笛の合図で行進や、組体操をするようなものでしょうか。

これはCPUも同じです。

クロックの信号に合わせて、命令を処理していきます。

1クロックで処理できる命令もあれば、2クロックで処理する命令もあったりしますが、基準はクロックの信号になります。

なお、クロックの信号は早いものもあれば遅いものもありますので、より早いクロック数で動作するCPUの方が、一般的には早く処理をすることができると言えますね。

(出典:ウィキメディア・コモンズ photo by Omegatron / CC by-sa 3.0)

命令ってどこに保管されてるのか?

じゃ、クロックの信号に合わせて、処理される命令ってどこにあると思いますか?

もちろんCPUの中にありますよ。

簡単に言いますと、とっても単純な一連の命令を実際の回路の結線によって制御信号を発生させるようになっていると思ってください。

そういった単純な電子回路を組み合わせて、組み合わせて、コンピュータの処理できる「機械語」のレベルまで回路で作り上げていく方法で実現されています。

また、別の実現方法として、単純な命令は回路の結線で作るのは同じですが、それらを組みあわせて複雑な命令を構成するところは、ソフトウェア(プログラム)で構成する方法があります。

いずれの方法でも、CPUの中にそういう仕組みが組み込まれていることになりますね。

レジスタ

論理回路などで、フリップフロップという回路などを使って1とか0の状態を保持する装置をレジスタといいます。

フリップフロップは、外から信号を与えてやると回路の中で同じ信号の状態を保持し続ける回路です。

コンピュータでは、CPUの中にある一番早くて、CPUに一番近いメモリとも言えます。

そして、記憶できる量はとても少ないです。

レジスタは用途別に色々と種類があります。

アキュムレータは主に演算のために使われるレジスタでだいたい1個用意されています。

データレジスタは演算結果を置いたり、データを一時的に記憶するレジスタで、CPUとメモリの仲介をすると思ってください。

アドレスレジスタはメモリにアクセスする場合のアドレスを指定するときに用いるレジスタです。

ベースレジスタは、一連の配列の最初のアドレスを保持するためのレジスタです。

ベースレジスタと対になって使われるのが、インデックスレジスタで、べースレジスタが示すアドレスをベースとしたオフセットを指すようにして使います。

プログラムカウンタは、アドレスレジスタの一種で実行する命令のアドレスを指し示すレジスタです。

命令の読み込みを行なう際にはその内容がアドレスバス上に出力され、また命令を読み込む度に読み取った命令の分だけ値が増加するようになっています。

その他にもスタックポインタ、ベースポインタ、ゼロレジスタなどがあります。

これらのレジスタを使って、様々なデータを処理したり、演算したりします。

パイプラインとキャッシュ

このようにクロックの信号に合わせて、処理が進むわけですがこれでは1度に1つの処理しかしません。

でも、CPUの中には色々な機能が詰まっていて、このままだと、ある1つのことをしていると結構、あちこちの機能は待ち状態になります。

そういった処理を効率的に行う機能として、代表的なものにパイプラインとキャッシュというものがあります。

パイプラインの基本的な考え方は、コンピュータの命令の処理を一連の独立したかたまりに分割して、各工程の処理を一部並行して実施するようにする機能です。

こうすると、CPUは分割した命令のうち最も時間のかかる工程を基準として命令を処理できるようになります。

すると、全工程を順番に処理するよりも高速化できますよね。

もう一つ、キャッシュとはCPUと外部バス(メモリなどにつながる配線)など様々な情報伝達経路で、一方から他方にデータを転送する際、その転送遅延を見かけ上、極力解消して転送効率を向上するための記憶階層の実現方法です。

たとえば、メモリとハードディスク(一般的にはメモリの方が処理が速い)の中間にキャッシュ(メモリよりも遅いが、ハードディスクよりは早い)を配置し、一度読み込んだデータ内容の一部とその参照をキャッシュに保持しておきます。

次にハードディスクにデータの転送要求があり、それへの参照が既にキャッシュに格納されていた場合は、ハードディスクからの転送は行わずキャッシュが転送を代行するような仕組みです。

(出典:ウィキメディア・コモンズ photo by ちぇす / GFDL)

この例のような仕組みをCPU内部と外部バスの間にもっているようなですね。

CPUの中で行われている働きをかなり簡素化して説明してみました。

なんとなく、ご理解いただければいいかなぁと思っています。

最後までおつきあい、ありがとうございました。

スポンサーリンク
スポンサーリンク




スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする