5大装置の演算と制御はCPUが行っています。
では具体的にどのような仕組みなのでしょうか。
ここでは5大装置から一歩踏み込んで説明していきます。
この記事で解決できること。
- 演算・制御の仕組みがイメージできない。
- CPUの構造や性能についてよく分からない。
5大装置について知りたい方はこちらを先にご覧ください。
演算と制御を行うCPU
CPUは五大装置の演算と制御を担い、まるで人間の脳のような役割を果たしています。
演算部分では2進数で表される機械語をもとに、プログラム(命令)を計算し実行していきます。
機械語は数字の羅列で私たちにはよく分からないよ。
なので人間はプログラミング言語で命令を書き、機械語に翻訳しているの。
ディスプレイが自分勝手に絵を描いたり、記憶装置が自らの意思で読み書きしたりできないので制御(コントロール)してあげる必要があります。
この働きもCPUが行うのです。
このようにCPUの中には演算と制御を行う場所があります。
CPUの性能判断は?
CPUの性能は何で決まるのでしょうか。
ここでは性能を決める3つの判断基準を学びます。
クロック周波数
コンピューターの中には発振器が入っています。
この発振器は一定のリズムでテンポを刻んでおり、CPUはテンポに合わせて処理を進めているのです。
テンポが1秒あたり何回刻まれるのかをHz(ヘルツ)という単位で表します。
そしてテンポが速いほどCPUの仕事が迅速になるのです。
テキパキしていると同じ時間でも多くのことができるよね。
厨房に例えると、素早く働くコックさんかな。
そうだね、ただクロック周波数も限界があって。
ならばコックさんの数を増やそうという技術がうまれたよ。
コアの数
コックさんに例えると、作業スピードがクロック周波数でした。
しかしクロック周波数を高めると消費電力と発熱量も上がってしまう問題点があります。
そこでコックさんの人数を増やし多くの品数を作れるようにしようと開発されたのがマルチコアなのです。
コアの数が多いほど同じ時間での処理量が増える、つまりCPUの性能が高くなります。
レジスタ
レジスタとはCPUが処理をしている間、一時的にデータを記憶する作業メモリです
このサイズが大きいほど一度に扱える情報量が増えるため、CPUの性能が高まります。
CPUの構造
CPUの中身はどのような構成になっているのでしょうか。
簡略化すると下図のようになっています。
CPUの中にはダイがあります。
このダイに制御・演算を行っている核(コア)が入っているのです。
パッケージはダイを保護する包み紙のようなもの。
そしてマザーボードに設置するためのピンが付いています。
ダイを拡大してみるとキャッシュメモリとコアがありますね。
そしてコアに制御・演算機能があるのでした。
CPUのプログラム処理の流れ
プログラム(命令)は大まかにfetch-execute cycleという流れで処理されていきます。
図でイメージをつかんでみましょう。
(1)フェッチ(Fetch) 主記憶装置からプログラムを取り込むこと。
(2)デコード(Decode)プログラムを解読してどのような処理をするか決めること。
(3)エグゼキュート(Execute)プログラムを実行すること。
結果はレジスタに書き込まれます。
(4)レジスタからキャッシュメモリや主記憶装置へ結果が出力されます。
(1)から(4)を「コックさんが煮りんごを作る」状況に当てはめてみましょう。
(1)今から料理する煮りんごのレシピを確認。
(2)りんご3個準備する、砂糖120g量るなどやることを決める。
(3)煮りんごを料理する。
(4)煮りんごの完成。
プログラムとプロセス、スレッドの違いは?
プログラムとプロセス、スレッドと少しややこしいですね。
3つの違いをまず理解しておきましょう。
プログラムは指示書のようなものであり、プロセスは実行中のプログラムになります。
例えばたくさんのレシピがプログラムだとすると、料理中のレシピがプロセスとなります。
そしてレシピの手順がスレッドとイメージすると分かりやすいです。
そういえばCPUは機械語を使うのだよね。
人間はプログラミング言語。
そうそう、プログラムはプログラミング言語で書かれているよ。
そして、コンパイラがプログラムを機械語に翻訳してくれるのだよ。
マルチコアとは
マルチコアとは1つのCPUパッケージの中に複数のコアが入っていることです。
CPUの性能はコアの数にもよると学びました。
コックが増えると同時に料理できるレシピが増えるように、コアが複数になるとその分同時に処理(並列処理)できるプログラムが増えるのです。
またクロック周波数を高めることは消費電力や発熱の問題で限界があり、コアの数を増やすことで性能アップが図られたのです。
ネットサーフィンしながらメールチェックしてLINE送信して…
マルチコアでアプリの同時進行がスムーズになったのだね。
マルチスレッドとは
スレッドはプロセスに入った工程、つまり1つのプロセスの中で処理を実行する単位となります。
そして基本的に1つのコアは1つのスレッドしか処理することができません。
ではもしコアに2つのスレッドを処理する余裕があったらどうでしょうか。
1つ処理しているだけではもったいない気がしてしまいませんか。
コアが2つのスレッドを処理できるよう、命令する側(OS)にまるで2つのコアがあるように見せかける技術を、同時マルチスレッディング(Simultaneous Multi-Threading)といいます。
なおIntelにおける同様の技術はハイパースレッデイングとなります。
コックさん2人に一品ずつお願いするイメージ?
そうそう、注文する側からは2人いるように見えるからね。
だけど実際は一人だから、余裕がある時しか対応できないの。
物理的に存在するのではなく、あくまで「見せかけ」なので論理プロセッサとも呼ばれています。
マルチコアと異なりコアの数に変化はないので、処理速度が単純に2倍とならないことがポイントです。
なぜなら見せかけの技術では並行処理となるからです。
簡単な図でイメージしてみましょう。
まずはOS(注文側)からの視点です。
実際は厨房に1人(2人)ですが、2人(4人)いるように見えるためそれに合わせたメニューを注文しています。
実際はというと、余裕がないコックさんの場合はちょっと慌ただしそうですね。
ここでマルチコアとマルチスレッドを比べてみましょう。
厨房Aも厨房Bも同じ工程を任されていますが、厨房B(マルチコア)の方が処理が速くなるのです。
シングルスレッドなプログラミングとマルチスレッドなプログラミングとは?
スレッド(thread)が糸を表すように、シングルスレッドは1本の糸のみで繋がるスレッドです。
そのため並行処理が発生しません。
一方でマルチスレッドは途中で枝分かれをしています。
つまり並行処理や並列処理が発生するのです。
このようにして書かれているプログラムをそれぞれシングルスレッドなプログラミング、マルチスレッドなプログラミングと表します。
並行処理と並列処理の違い
これまでの説明で並行処理と並列処理という言葉がでてきました。
名前は似ていますが処理のやり方は異なります。
どのように違うのか図でみてみましょう。
点線で囲っている部分を見てください。
並行処理ではスレッドが同時に処理されません。
一方並列処理ではA~Cの処理が同時に行われていることが分かります。
並行処理では各スレッドを少しずつ切替えながら処理しています。
この切替えをコンテキストスイッチと呼びます。
切替えスピードが人間では分からないほどのスピードなので、同時進行しているように感じるのです。
これで5大装置の学習は終了です。
各装置のイメージは思い浮かびますか?
理解するためにぜひアウトプットもしてみてください!
コメント