ハーバード・アーキテクチャ
ハーバード・アーキテクチャとは、命令用とデータ用に物理的に分割された記憶装置と信号通路を持ち、命令用とデータ用で主記憶のアドレス空間が分かれているコンピュータ・アーキテクチャのことで、ノイマン型アーキテクチャ[1]と対比される。
起源
[編集]この名前は初期のコンピュータの一つである Harvard Mark I で使われたアーキテクチャであることに由来する。このマシンはプログラムの命令を穿孔テープからの読み出しのみとし、データメモリは リレーのON/OFFで読み書き可能な形で実現した。
ハーバード・アーキテクチャの利点
[編集]当時のコンピュータは単一プログラムの実行が主目的であり、命令をプログラムの実行中に書き換える必要は必ずしもなかった。ハーバード・アーキテクチャでは、命令をメモリから読むこととデータをメモリから読むことは競合せず、命令の処理が完了すると同時に次の命令を読み込むよう作ることができるため、アドレスバス、データバスを複数もたせる等すれば、高速化が可能であるというのが利点である。
これに対し、ノイマン型アーキテクチャではCPUが主記憶から同じ信号経路を使用して命令とデータの読み書きを行う。従って、CPUのクロック周波数がどんどん高速化するのに比し、主記憶のアクセス速度が追いつけなくなってくると、主記憶へのアクセスが足を引っぱるようになる。ノイマン型アーキテクチャにおけるフォンノイマンの隘路フォン・ノイマン・ボトルネックである。
現在でも,プログラムをユーザーが入れ換える必要がない、あるいはユーザーにアクセスさせたくないタイプのコンピュータ、たとえばマイクロコントローラの多くがハーバード・アーキテクチャをベースとしている。Atmel社の AVR シリーズ、マイクロチップ・テクノロジー社のPIC[2]などがその例である。これらのプロセッサはプログラムメモリとワーキングメモリのアドレス空間を別にしており、プログラムメモリにはフラッシュメモリなど大容量(数K〜百数十KBytes)だが書き換えに時間がかかるものを、ワーキングメモリにはわずか(十数B〜数KBytes)だが高速でリフレッシュの必要のないSRAMをチップに内蔵している。特殊用途のプロセッサで高速性が求められるもの、たとえばデジタルシグナルプロセッサにも採用例が多く見られ、TIのTMS32010が代表例でAnalog Devices社のBlackfinなどでも使われている。
ノイマン型アーキテクチャにおいても,キャッシュメモリの実装方法において、インストラクションキャッシュとデータキャッシュという分け方をすることで、ハーバード・アーキテクチャを取り入れていると考えることができるケースもある。すなわち、最近の高性能プロセッサ(具体的にはインテルx86ならPentium以降)では、マイクロプロセッサ内のプロセッサコアとキャッシュメモリの構成を見るとハーバード・アーキテクチャになっているというものである。キャッシュメモリを含めてCPUとして見た場合は、外部の主記憶との構成は従来通りノイマン型アーキテクチャである。
命令/データ分離キャッシュの問題
[編集]命令キャッシュとデータキャッシュを分離し、ライトバック方式(キャッシュメモリの項目を参照)を採用した場合に、次のような問題がある。基本的には、プロセッサの命令プリフェッチやDMAで起こる問題と同質である。
プログラムの動的ローディング(英: Dynamic loading)、動的コンパイル、機械語レベルの自己書き換えコードおよびそれのトランポリン(英: Trampoline)による実行など(後に挙げたものほど深刻である)、ノイマン型アーキテクチャの、プログラムの命令自身をプログラム自身により書き換え可能である、という性質を利用した技術がある。これらの実行において、単純に命令用とデータ用のキャッシュが分離されているのは、キャッシュコヒーレンシがおかしい状態にあるのと同じことである。よって何らかの対処がされている。
脚注
[編集]