プログラムとデータを同じメモリに格納し逐次実行する基本方式
ノイマン型コンピュータとは、プログラム(命令の並び)とデータを同じメモリ(=主記憶のこと)に記憶し、CPU(=中央処理装置のこと)が命令を1つずつ取り出して順番に実行する方式のコンピュータです。数学者のフォン・ノイマンが提唱したことからこの名で呼ばれます。今あなたが使っているパソコンやスマートフォンも、ほとんどがこのノイマン型です。
身近な例で考えると、料理人が1冊のノートに「レシピ(手順)」と「材料リスト(データ)」を一緒に書き留めて、上から1行ずつ読んで作業する様子に似ています。レシピも材料メモも同じノートにある(同じメモリ)、そして1行ずつ順に読む(逐次実行)――これがノイマン型の本質です。
上の図解では、CPU・メモリ・入出力装置がバス(bus=データの通り道)で結ばれています。メモリの中にプログラム領域とデータ領域が同居している点が最大の特徴です。
プログラム内蔵方式(ストアドプログラム方式)とは、実行する命令の並びをあらかじめメモリに記憶しておき、CPUがそれを読み出して動かす仕組みのことです。命令もデータも、メモリの中では同じ「2進数の数値」として区別なく記憶されています。
この方式の利点を整理すると次のとおりです。
・柔軟性が高い:メモリの内容(プログラム)を書き換えるだけで、ハードウェアを変えずに別の処理を実行できる
・汎用性がある:1台のコンピュータで計算・文書作成・ゲームなど何でもこなせる
・逐次実行と相性が良い:命令が番地(アドレス)順に並ぶので、PC(プログラムカウンタ)で位置を管理しやすい
プログラム内蔵方式が登場する前のコンピュータは、配線をつなぎ替えて動作を変える(=処理ごとに人が物理的に組み替える)必要がありました。プログラムをメモリに置けるようになったことで、ソフトウェアを入れ替えるだけで動作を変えられるようになったのが大きな進歩です。
ハーバードアーキテクチャとは、命令用メモリとデータ用メモリを分け、それぞれ別のバスでアクセスする方式です。ノイマン型がメモリ1つを共用するのに対し、ハーバード型はメモリを2つに分けている点が決定的な違いです。
| 項目 | ノイマン型 | ハーバード型 |
|---|---|---|
| メモリ | 1つ(命令+データ同居) | 2つ(命令用・データ用に分離) |
| バス | 共用(同時アクセス不可) | 別々(同時アクセス可能) |
| 速度 | 命令とデータが取り合いになる | 同時に読めるため高速 |
| 構造 | 単純・安価 | 複雑・コスト高 |
| 主な用途 | PC・スマホなど汎用機 | DSP・マイコンなど高速処理 |
ノイマン型には「ノイマンボトルネック」と呼ばれる弱点があります。命令とデータが同じバスを通るため、CPUが命令を取り出している間はデータを読めず、処理速度の上限になってしまうのです。1本道の通路を、荷物(データ)と作業指示書(命令)が交互に通る渋滞をイメージすると分かりやすいです。
ハーバード型は通路を2本に分けることでこの渋滞を解消し、高速化します。両者は「ノイマン型=メモリ共用・逐次実行・プログラム内蔵」「ハーバード型=命令とデータでメモリ/バスを分離」という対比で整理できます。
ノイマンボトルネックとは、CPUとメモリをつなぐバス(データの通り道)が1本しかないため、命令の取り出しとデータの読み書きが取り合いになって処理速度が頭打ちになる現象です。
なぜボトルネックになるのかを順を追って説明すると次のとおりです。
・CPUは毎秒何十億回もの計算ができるほど高速
・しかしメモリから命令やデータを読み込む速さは、CPUの計算速度に追いつかない
・さらにノイマン型では命令もデータも同じバスを共有するため、「命令を取りに行く間はデータを運べない」という状態が続く
・結果として、CPUはメモリの応答を待って止まる(待ち時間)ことが多くなる
この問題を和らげるために、現代のCPUはキャッシュメモリ(CPUのすぐそばに置く超高速の小さなメモリ)を搭載しています。よく使うデータをキャッシュに入れておくことで、バス経由でメモリに取りに行く回数を減らし、待ち時間を短縮しています。
コンピュータは5大装置から構成されています。ノイマン型の図解と照らし合わせると、それぞれの役割がはっきりします。
| 装置 | 主な役割 | 具体例 |
|---|---|---|
| 制御装置 | 命令を解読し、各装置に指令を出す | CPUの中(命令デコーダなど) |
| 演算装置 | 計算・論理判断を行う(ALU) | CPUの中(ALU) |
| 記憶装置 | プログラムやデータを記憶する | メモリ(RAM)、ハードディスク |
| 入力装置 | 外部から情報を取り込む | キーボード、マウス |
| 出力装置 | 処理結果を外部に出す | ディスプレイ、プリンタ |
制御装置と演算装置をまとめたものがCPU(=中央処理装置)です。5大装置のうち入力→記憶→演算→制御→出力という流れがノイマン型コンピュータの基本的な処理の流れです。プログラムは記憶装置に置かれ、制御装置が読み出して演算装置に実行させ、結果を出力装置に渡します。