このシリーズはこれから基本情報技術者試験を受けようと考えている方向けに各分野毎で覚えておくべき知識を「ざっくり」かつ、なるべく分かりやすくお伝えしてみよう的なノリのやつです。
目次
そもそもCPUって?
CPU(central processing unit)とは、人間で例えると脳みそにあたるコンピュータの中枢パーツです。
「中央処理装置」とも呼ばれ、各装置の制御を行ったり演算処理の部分を担当しています。
冒頭で「人間の脳みそ」と表現しましたが、実際は人間の脳みたいに自分で何かを思考して処理を実行することができません。
つまりCPU単体では何もすることができないので別途処理内容を記述したプログラムを用意してあげる必要があります。
故に正確なCPUの役割としては、「渡されたプログラムに書かれた通りに処理や演算を実行すること」になります。
当然その渡されたプログラムの実行が早ければ早いほどシステムの待ち時間や装置の実行時間が短くなるわけなので、一般的にはCPUの性能は高ければ高いほど良いとされています。
CPUの性能指標
さっき「CPUの性能は高ければ高いほど良い」と触れましたがでは何を持って性能が高いと判断できるのでしょうか。
CPUの性能指数を表すには「クロック周波数」「CPI」「MIPS」という指標値を使います。
クロック周波数
まずそもそもクロックとは周期信号と呼ばれるもので、例えるなら指揮者やメトロノームの様な役割をしています。
コンピュータは多種多様な装置の集まりですから、それらが皆バラバラに好き勝手処理を実行すると動作が不安定になってしまうので処理を実行するタイミングを一定のリズムに合わせてあげる必要があります。
その一回一回のタイミングの周期がクロックという単位になります。
それを踏まえて「クロック周波数」とは一言で言えば「クロックが1秒間に繰り返される回数」を指します。
人間で言うと「頭の回転速度」みたいな感じですね。
当然繰り返されるクロックが多い程多くの処理を実行できるので性能が高いという事になります。
例えば「クロック周波数1GzのCPU」の場合は1秒間に10億回(1GHzは1,000,000,000Hz)クロックしているという事になります。
CPI
CPI(Clock cycles Per Instruction)は「1命令につき何クロックサイクル必要か」を表した指標です。
例えば「1命令につき2クロックかかるCPU」であれば2CPIという事になります。
当然少ないクロックサイクルで命令を実行できる方が処理速度は早いです。
MIPS
MIPS(Million Instrucutions Per Second)は「1秒間に実行できる命令の数」を表した指標です。
Millionと入っている通り100万の単位で扱います。
例えば「1秒間に2000万個の命令ができるCPU」であれば20MIPSという事になります。
こちらは実行できる命令数が多いほど処理速度は早いです。
CPUの役割
CPUは単体では何もすることができないので、コンピュータの5大装置と呼ばれるものと連携させて動作させます。
コンピュータの5大装置とは、「コンピュータを使うにはこの5つの装置が欠かせないよね」を表した言葉で、それぞれ下記になります。
名称 | 具体的なパーツ | 概要 |
制御装置 | CPU | プログラムの命令を解釈してコンピュータ全体の動作を制御する。 |
演算装置 | CPU | ALU(算術論理演算装置)とも呼ばれる。 四則演算などの計算やデータの演算を行う。 |
記憶装置 | メモリ, HDD等 | 動作に必要なプログラムやデータを一時的に記憶しておく装置。 |
入力装置 | マウス, キーボード, スキャナ等 | コンピュータにデータを入力する装置。 |
出力装置 | モニター, プリンター等 | コンピュータのデータを出力する装置。 |
CPUには制御装置と演算装置が内蔵されており、それらと記憶装置、入力装置、出力装置を接続することでデータを受け取って処理を行います。
ちなみにどの装置からの命令でも必ず制御装置(CPU)を経由して送られます。
コンピュータの命令実行手順
今のコンピュータの命令実行のプロセスとしては、プログラム内蔵方式と逐次制御方式を採用したものが主流です。
具体的なプロセスは下記です。一つづつ解説していきます。
- 補助記憶装置からプログラムを主記憶装置へ移す
- CPUが主記憶装置を読み取って一行づつ命令を実行していく
補助記憶装置からプログラムを主記憶装置へ移す
主記憶装置とは、大雑把に言えばメモリの事を指します。
メモリに関しては「【基本情報技術者】メモリについて10分でざっくり理解する」で別で解説しているのでよければそちらもどうぞ。
【基本情報技術者】メモリについて10分でざっくり理解する
補助記憶装置とは、大雑把に言えば主記憶装置以外の記憶装置のことを指します。代表例としてはHDDやCD-ROM、フラッシュメモリ等があります。
CPUが演算をする際に直接命令のやりとりするのは主記憶装置なので、まず最初に命令となるプログラムを補助記憶装置から主記憶装置へ移しておきます。
これは補助記憶装置は読み込み速度が遅く、主記憶装置を間に経由させなければいくらCPUの処理性能が高くても宝の持ち腐れになってしまうからです。
この予めプログラムを主記憶に読み込ませておく(ロードさせるといいます)方式をプログラム内蔵方式と呼びます。
CPUが主記憶装置を読み取って一行づつ命令を実行していく
補助記憶装置から主記憶装置にプログラムがロード完了したら実行準備が完了します。
あとはひたすら一行づつプログラムに書かれている命令をCPUが実行していきます。
(後ほどCPUの命令実行手順を解説します)
その際の演算結果が再び主記憶装置に保存されていきます。
このひたすら順に処理を実行していく方式を逐次制御方式と呼びます。
そしてここまで説明した特徴を持つコンピュータをノイマン型コンピュータと呼びます。
(ちなみにノイマンは人の名前です)
CPUの命令実行手順
では次にCPU単体の命令実行手順を見てみましょう。
先程の「コンピュータの命令実行手順」の「CPUが主記憶装置を読み取って一行づつ命令を実行していく」の中でCPUはこんな事をしているんだなーという解釈で大丈夫です。
この時CPU内部では
- 命令の取り出し
- 命令の解読
- 対象データの読み出し
- 命令の実行
の4つのSTEPが実行されています。
命令の取り出し
このステップでまずはプログラムに書かれている命令を主記憶装置から取り出してくるフェーズです。
この作業を「フェッチ」と呼びます。
その際にどの命令を取り出すかは「レジスタ」の一種である「プログラムカウンタ」に保存されています。
プログラムカウンタには「メモリのアドレス」が保存されており、これは取り出すべき命令がメモリのどの部分に保存されているかを表しています。
これは例えると郵便番号みたいなもので、メモリに振られた住所だと考えてください。
これを元にメモリへ参照を行って命令を取り出して、これもレジスタの一種である「命令レジスタ」に保存します。
命令レジスタは内訳すると「命令部」と「オペランド部」の2つの部品で構成されていて、それぞれ
命令部 | 実行させたい命令の種類を示すコード番号を保存 |
オペランド部 | 処理対象となるデータが格納されているメモリアドレス等を保存。(特にデータが必要なければ何も保存しない。) |
という内容で命令を保存しています。
命令の保存が完了したら、次のフェッチに備えてプログラムカウンタの値を1増加させておきます。
▼フェッチ前
プログラムカウンタ | 1 |
命令レジスタ | – |
▼フェッチ後
プログラムカウンタ | 2 |
命令レジスタ | メモリの住所「1」に記録されてた命令 |
命令の解読
このステップはさっき命令レジスタに保存した命令をCPU内部の回路である命令デコーダが解読していくフェーズです。
命令デコーダはまず命令レジスタの命令部から命令の種類を示すコードを解読して必要となる装置に制御信号を飛ばします。
例えば
・演算処理だった場合→CPU内部の演算装置であるALUに信号を飛ばす。
・出力処理だった場合→モニターやプリンタに信号を飛ばす。
みたいな感じです。
対象データ読み出し
このステップは命令の実行前に命令に不足しているデータがあれば、主記憶装置から対象データを探して取り出しを行うフェーズです。
「ただ取り出した命令を実行すればいいだけじゃん」と思うかもしれませんが、単純な1行の命令でもそれを実行するためには多くの情報が必要になる場合もあります。
例えば、「メモリ(主記憶装置)に保存されてる値Aと値Bを足して」という命令だったとすると、足すだけであれば簡単なのですが、「値A」と「値B」が手元になければ演算装置は計算できないですよね。
そんな感じで命令を実行する際に何かデータに不足があった場合はそれを探してくる工程が発生したりします。
具体的には命令レジスタのオペランド部を見ると、データの在り処を示すメモリアドレス等が格納されているのでそれを参照してデータを取り出します。
(後述しますがオペランド部から実効アドレスを求めるのに使われるアドレス指定方式には色々と種類があります。)
その際に求めた実際にデータが格納されているアドレスの事を実効(有効)アドレスと呼びます。
取り出したデータはCPU内部の汎用レジスタなどで保存しておきます。
命令の実行
このステップで今までに信号を出した装置と保存してきたデータを使って命令を実行します。
例えば命令が演算処理であれば、さっき汎用レジスタに保存しておいた必要なデータをALUに渡して演算をさせてその結果をまた汎用レジスタに保存させて実行完了です。
ここまでで一つの命令に対するプロセスは完了なので、あとはひたすらここまでのステップを全ての命令が無くなるまで繰り返していきます。
おわりに
長くなってしまいましたがCPU編どうだったでしょうか。
なるべく分かりやすく凝縮して書いたつもりなので忘れたらまたこの記事を読み返してみてください。
他にも基本情報シリーズを投稿予定なので良ければそちらも読んでもらえると嬉しいです。
この記事に書かれている内容は「キタミ式イラストIT塾 基本情報技術者」を参考にさせていただいているので良ければチェックしてみてください。
(ページ数は多いですがその分イラストが大量に使われていて、小難しい機械の仕組みなども直感的に分かりやすく理解できるかなりおすすめの参考書です。)