ハーバード・アーキテクチャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
ハーバード・アーキテクチャの図

ハーバード・アーキテクチャとは、命令用とデータ用に物理的に分割された記憶装置信号通路を持ち、命令用とデータ用で主記憶アドレス空間が分かれているコンピュータ・アーキテクチャのことで、ノイマン型アーキテクチャと対比される。

起源[編集]

この名前は初期のコンピュータの一つである Harvard Mark I で使われたアーキテクチャであることに由来する。このマシンはプログラムの命令を穿孔テープからの読み出しのみとし、データメモリは リレーのON/OFFで読み書き可能な形で実現した。

ハーバード・アーキテクチャの利点[編集]

当時のコンピュータは単一プログラムの実行が主目的であり、命令をプログラムの実行中に書き換える必要は必ずしもなかった。 ハーバード・アーキテクチャでは、命令をメモリから読むこととデータをメモリから読むことは競合せず、命令の処理が完了すると同時に次の命令を読み込むよう作ることができるため、アドレスバス、データバスを複数もたせる等すれば、高速化が可能であるというのが利点である。 一方で、CPU が同じ信号経路を使用するメモリから命令とデータの読み書きを行う場合、アクセスを同時にすることはできないため、ボトルネックとなった。 さらに、CPUのクロック周波数がどんどん高速化するのに比し、主記憶のアクセス速度は追いつけなくなり、主記憶へのアクセスが足を引っぱるようになった。 ノイマン型アーキテクチャにおけるフォンノイマンの隘路フォン・ノイマン・ボトルネックである。

現在でも,プログラムをユーザーが入れ換える必要がない、あるいはユーザーにアクセスさせたくないタイプのコンピュータ、たとえばマイクロコントローラの多くがハーバード・アーキテクチャをベースとしている。 アトメル社の AVR シリーズ、マイクロチップ・テクノロジー社のPICなどがその例である。これらのプロセッサはプログラムメモリとワーキングメモリのアドレス空間を別にしており、プログラムメモリにはフラッシュメモリなど大容量(数K〜百数十KBytes)だが書き換えに時間がかかるものを、ワーキングメモリにはわずか(十数B〜数KBytes)だが高速でリフレッシュの必要のないSRAMをチップに内蔵している。 特殊用途のプロセッサで高速性が求められるもの、たとえばデジタルシグナルプロセッサにも採用例が多く見られ、TIのTMS32010が代表例でAnalog Devices社のBlackfinなどでも使われている。

ノイマン型アーキテクチャにおいても,キャッシュメモリの実装方法において、インストラクションキャッシュとデータキャッシュという分け方をすることで、ハーバード・アーキテクチャを取り入れていると考えることができるケースもある。すなわち、最近の高性能プロセッサ(具体的にはインテルx86ならペンティアム以降)では、マイクロプロセッサ内のプロセッサコアとキャッシュメモリの構成を見るとハーバード・アーキテクチャになっているというものである。キャッシュメモリを含めてCPUとして見た場合は、外部の主記憶との構成は従来通りノイマン型アーキテクチャである。

命令/データ分離キャッシュの問題[編集]

命令キャッシュとデータキャッシュを分離し、ライトバック方式(キャッシュメモリの項目を参照)を採用した場合に、次のような問題がある。基本的には、プロセッサの命令プリフェッチDMAで起こる問題と同質である。

プログラムの動的ローディング英語版: Dynamic loading)、動的コンパイル機械語レベルの自己書き換えコードおよびそれのトランポリン英語版: Trampoline)による実行など(後に挙げたものほど深刻である)、ノイマン型アーキテクチャの、プログラムの命令自身をプログラム自身により書き換え可能である、という性質を利用した技術がある。これらの実行において、単純に命令用とデータ用のキャッシュが分離されているのは、キャッシュコヒーレンシがおかしい状態にあるのと同じことである。よって何らかの対処がされている。