ハーバードアーキテクチャとは何ですか?
命令とデータのメモリを分離するのはなぜですか?
本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。
コンピュータは、プログラムの命令とプログラムが使用するデータをどこかに保存して読み取らなければならない。 このとき、命令とデータを異なるメモリに分けて保存する構造を、Harvard Architecture(ハーバードアーキテクチャ)と呼ぶ。
命令とデータが別々にある
ハーバードアーキテクチャでは、命令メモリとデータメモリが物理的に分離されています。 CPUにつながる通路であるBus(バス)も別々に使う。
命令メモリ──命令バス──┐
CPU
データメモリ──データバス───┘
CPUが次の命令を取得している間、現在の命令に必要なデータも同時に読み取ることができます。 道を命令とデータが交互に使用する構造よりもボトルネックを減らすことができる。
また、両方のメモリの規格を異なるように設計することもできる。 命令は読み出し専用メモリに入れ、データは読み書き可能なメモリに入れたり、命令とデータのビット幅を互いに異なるようにしてもよい。
フォンノイマンの構造と何が違うのか?
Von Neumann Architecture(フォンノイマンアーキテクチャ)は、命令とデータを同じメモリとバスに配置します。
ハーバード構造
命令メモリ─┐
CPU
データメモリ─┘
フォンノイマン構造
命令+データメモリ──CPU
フォンノイマン構造はメモリ空間が1つなので、プログラミングとハードウェア構成が比較的単純です。 しかし、命令を取得することとデータを読み取ることが同じ方法を使用するので、同時に処理することは困難です。
対照的に、ハーバード構造は同時にアクセスすることができますが、空の命令メモリをデータが代わりに使用する式の柔軟な空間の活用は困難です。 メモリとバスを別々に作る必要があるため、ハードウェアも複雑になる。
どこで使うの?
入力に素早く反応する必要があるマイクロコントローラやDSPでハーバード構造を簡単に見ることができます。 プログラムが決まっており、命令とデータを同時に処理することが重要な環境によく合う。
現代PCのCPUはどちらか一方にしかピッタリと言いにくい。 メインメモリは命令とデータを一緒に格納するが、CPUの近くでは命令キャッシュとデータキャッシュを分離するModified Harvard Architecture(修正されたハーバード構造)を多く使用する。
つまり、ハーバードアーキテクチャの核心は、単に2つのメモリという言葉ではありません。 命令とデータが異なる記憶空間と通路を使用してCPUが両方の作業を同時に進めることができるようにした構造だと理解すればよい。