情報ラボ > コンピュータのしくみ
箱の中では、5つの役割が分担して働いています。
赤い矢印がデータの流れ、青い矢印が命令(指示)の流れです。
クリックすると、それぞれの特徴が表示されます。上にいくほど速く、下にいくほど大容量です。
CPUから見た「待ち時間」を、人の感覚に置きかえるとこうなります。
| クロック周波数 | 1秒間に何回の周期で動くか。3GHzなら1秒に30億回。同じ設計なら高いほうが速い |
|---|---|
| コア数 | 計算する部分がいくつあるか。8コアなら8つの処理を同時に進められる |
| キャッシュ容量 | CPU内部の高速な記憶。大きいほど主記憶を待つ回数が減る |
クロック周波数だけでは性能は決まりません。設計世代が違えば、同じ周波数でも処理能力は大きく変わります。
主記憶の行をクリックすると、その番地の命令や数値を書きかえられます。
| 番地 | 内容 | 意味 |
|---|
形は違っても、コンピュータの基本構造は共通しています。5つの装置が役割を分担しています。
| 装置 | 役割 | 具体例 |
|---|---|---|
| 入力装置 | 外から情報を取り込む | キーボード、マウス、カメラ、センサー |
| 出力装置 | 結果を外に出す | ディスプレイ、スピーカー、プリンタ |
| 記憶装置 | データや命令を覚えておく | メモリ、SSD、ハードディスク |
| 演算装置 | 計算や判断を行う | CPU の一部 |
| 制御装置 | 他の装置に指示を出す | CPU の一部 |
演算装置と制御装置をまとめて、中央処理装置(CPU)と呼びます。人間でいえば頭脳にあたる部分です。
スマートフォンも、洗濯機の制御基板も、この構造を持っています。センサーが入力、モーターが出力、というだけの違いです。
現在のコンピュータには、重要な特徴があります。プログラムもデータと同じように記憶装置に置かれるという点です。これをプログラム内蔵方式(ノイマン型)といいます。
この方式のおかげで、同じ機械で別のプログラムを動かせます。ソフトを入れかえるだけで、文書作成にも、動画編集にも、ゲームにもなる。当たり前に思えますが、これは大きな発明でした。初期のコンピュータは、配線を組みかえないと別の計算ができなかったのです。
記憶装置には、いくつもの種類があります。なぜ1種類で済ませないのでしょうか。
理由は単純です。速い記憶は高価で小さく、安い記憶は遅いからです。すべてを最速の記憶にすると値段が非現実的になり、すべてを安い記憶にすると動作が遅くなりすぎます。
そこで、速さと容量の異なる記憶を階層的に組み合わせます。
| 種類 | 容量の目安 | 速さの目安 | 電源を切ると |
|---|---|---|---|
| レジスタ | 数百バイト | 最速 | 消える |
| キャッシュ | 数MB〜数十MB | 非常に速い | 消える |
| 主記憶(メモリ) | 8〜32GB | 速い | 消える |
| SSD | 256GB〜2TB | やや遅い | 残る |
| ハードディスク | 1〜20TB | 遅い | 残る |
大きく2つに分けると、主記憶と補助記憶になります。
主記憶(メインメモリ、RAM)は、いま使っているデータやプログラムを置く場所です。速い代わりに、電源を切ると内容が消えます。これを揮発性といいます。作業机の上にたとえられます。
補助記憶(ストレージ)は、SSDやハードディスクのことです。遅い代わりに大容量で、電源を切っても内容が残ります。本棚にあたります。
パソコンが固まったときに再起動すると作業中のデータが消えるのは、主記憶が揮発性だからです。「こまめに保存」とは、主記憶の内容を補助記憶に書き出すことを指しています。
CPUの計算速度に対して、主記憶の読み書きは遅すぎます。CPUがデータを待つ間、何もできない時間が生まれてしまいます。
そこで、CPUの近くに小さくて高速な記憶を置きます。これがキャッシュメモリです。よく使うデータをここに置いておけば、主記憶まで取りに行く回数が減ります。
キャッシュにデータがあることをヒット、なければミスといいます。ヒット率が高いほど、全体の処理が速くなります。
CPUから見た待ち時間を、人の感覚に置きかえてみます。CPUが1回計算する時間を1秒とすると、こうなります。
この差があるため、階層構造とキャッシュの工夫が欠かせません。プログラムを速くする技術の多くが、この待ち時間をいかに減らすかという話でもあります。
CPUは、次の4段階を延々と繰り返しています。
この繰り返しを、1秒間に何十億回という速さで行っています。どんなに複雑なソフトも、この単純な繰り返しの積み重ねで動いています。
クロック周波数は、1秒間に何回の周期で動作するかを表します。3GHzなら1秒間に30億回です。ただし、周波数だけで性能は決まりません。1回の周期でどれだけの処理ができるかは、設計によって違うからです。
コア数は、計算する部分がいくつあるかを示します。8コアなら、8つの処理を同時に進められます。ただし、プログラムが並行処理に対応していなければ、コアが増えても速くなりません。
「CPUシミュレータ」のタブでは、主記憶に置いたプログラムを、CPUが1命令ずつ実行する様子を追いかけられます。実際のCPUはもっと複雑ですが、基本の動きは同じです。
主記憶は、小さな箱がたくさん並んだものと考えられます。箱には0から順に番地(アドレス)が付いていて、命令もデータも、どれかの番地に入っています。プログラム内蔵方式では、プログラムとデータが同じ主記憶に置かれることを、ここで確かめられます。
CPUの中には、次に実行する命令の番地を覚えておくプログラムカウンタがあります。命令を1つ取り出すたびに、プログラムカウンタは1つ増えます。だから、命令は基本的に番地の順に実行されます。
取り出した命令は命令レジスタに入り、制御装置が解読します。計算に使う値は、CPUの中の小さな記憶であるレジスタ(このツールではA・B・C)に入れてから、演算装置で計算します。
| 命令 | 意味 |
|---|---|
| READ A,(10) | 10番地の値をレジスタAに読み込む |
| WRITE (12),A | レジスタAの値を12番地に書き込む |
| ADD A,B | A+Bを計算し、結果をAに入れる |
| SUB A,B | A−Bを計算し、結果をAに入れる |
| JUMP 2 | 次は2番地の命令へ進む(プログラムカウンタを2にする) |
| JZ C,8 | レジスタCが0なら8番地へ進む。0でなければそのまま次の番地へ |
| STOP | プログラムを終える |
実際のCPUの命令は、0と1の並び(機械語)で表されています。このツールでは読みやすいように、英語の短い単語で表しています。このような書き方をアセンブリ言語といいます。命令の名前や書き方はCPUの種類によって異なり、教科書とも少し違う場合があります。
「足し算」では、10番地の3と11番地の2を足して、12番地に書き込みます。CPUは、0番地の READ A,(10) から順に、次のように動きます。
1つの命令ごとに「取り出し → 解読 → 実行 → 結果の格納」の4段階をくり返しています。「1段階すすむ」で、それぞれの段階でどの装置が動き、値がどこからどこへ移るのかを、矢印で確かめてください。
「かけ算」では、3×4を「3を4回足す」ことで計算します。7番地の JUMP 2 でプログラムカウンタを2に戻すと、同じ命令が何度も実行されます。これがくり返しの正体です。2番地の JZ C,8 は、残りの回数(レジスタC)が0になったら、くり返しを抜けて8番地へ進むための命令です。
プログラミングで書く「もし〜なら」や「〜を繰り返す」も、CPUの中では、このように条件によってプログラムカウンタを書きかえることで実現されています。
入力装置と出力装置は、コンピュータと外の世界をつなぐ窓口です。近年、その種類が急速に増えました。
スマートフォンには、タッチパネル、カメラ、マイクに加えて、加速度センサー、ジャイロセンサー、GPS、明るさセンサーなど、多数の入力装置が入っています。画面の向きが自動で変わるのも、暗い場所で画面が暗くなるのも、こうしたセンサーの働きです。
出力も画面や音だけではありません。振動、モーターの回転、LEDの点灯。IoT機器では、センサーで測ってモーターを動かすという流れが基本になります。エアコンや自動ドアも、この構造を持った小さなコンピュータです。
ハードウェアだけでは、コンピュータは何もできません。動かすためのソフトウェアが必要です。
| 種類 | 役割 | 例 |
|---|---|---|
| 基本ソフトウェア(OS) | ハードウェアを管理し、アプリに使わせる | Windows、macOS、Android、iOS |
| 応用ソフトウェア | 目的の作業を行う | ブラウザ、表計算、ゲーム |
OSがあるおかげで、アプリを作る人は装置の細かい違いを気にせずに済みます。メモリの割り当て、ファイルの管理、複数のアプリの切り替え。こうした面倒な仕事をOSが引き受けているのです。