ハーバード・アーキテクチャは、コードとデータ・メモリのための別個のバスを備えたコンピュータ・アーキテクチャです。そのアーキテクチャは、RAMまたはROMにあるコードメモリを参照していますか(マイクロコントローラ用)。アーキテクチャがコードメモリについて言うと、私は混乱しました。私が知っている限り、小規模の組み込みシステムでは、コードは常にROMから実行されますが、中規模および高度な組み込みシステムでは、コードメモリはROMからRAMに転送して実行を高速化できます。その場合、RAMはコード用とデータ用の2つのバスに接続されています。これを理解するのに助けてください。ハーバードアーキテクチャのコードメモリはどこにありますか?
答えて
あなたは、私がこのハーバードアーキテクチャ事に出くわした初めてのPICであり、そして、彼らは彼らのRAMとROMは、2つの異なるアドレス空間上で分離していないこの https://en.wikipedia.org/wiki/Modified_Harvard_architecture
を見たいかもしれません。しかし、これがこれを行う唯一の方法ではないようです。データ&を同時にアクセス可能にすることが重要です。例えば、単一のRAMメモリ空間を仮想的に分割して、コード&を別々に格納するが、プロセッサによって同時にアクセスすることができる。それは純粋なハーバードアーキテクチャシステムではありませんが、十分に近いです。
これは世界が一般的にどのように機能するかです。学問以外の真のハーバードアーキテクチャは、ブートローダ、オペレーティングシステムなどを持たないのは現実的ではありません(プログラムを命令空間にロードするためにデータ転送を行う必要があるため、別々のバス上にあるためです)。だから、いくつかのドキュメントは、ハーバードのことをハーバードと呼んでいて、ハーバードのことを意味していて、それが意味をなさないので何も言わないようにすべきではありません。バス仕様はバス仕様です。 –
ハーバードは、RAMまたはROMとはまったく関係ありません。原理的には、命令フェッチとデータの読み書きは別々のバスで行われます。
これは単純に、少なくともの一部のROM(ブートストラップコード)が命令メモリバス上になければならないことを意味します。残りはRAMである必要があります。非命令バスはRAMまたはROMにもアクセスできます.ROMは一定のデータを保持できます。
しかし、AVR MCUのような実際の実装では、命令バスがフラッシュROMをアドレス指定しますが、非命令バス(私は意図的に "データバス"を書きません。これらのバスをAVRで「見る」ことさえできません。これらのMCUのほとんどは純粋に内部にあります。
ハーバードアーキテクチャは、大部分が学問的な課題です。まず、4つのバスの分割をどのように決定するのですか?住所によって分かれる内部フォンノイマン?すべてのアドレスで分割されていない場合はvon nuemannの実装が多く、より大きなボックスを描画すると多くの場合、データと命令が結合されることがあります。
純粋なハーバードをブートローダまたはオペレーティングシステムに使用することはできないので、それは本当に単なる精神運動です。混乱を招くような理由がなければ、人々が嫌うようなフォン・ノイマンのようなラベル。現実の世界はどこかにあります。 AMBA/AXIおよび他のバスは、データおよび命令トランザクションにそのままタグを付けるが、同じバスを共有するため、変更されたハーバードとラベル付けされている(これらのバスには複数の読み出しアドレス、読み出しデータ、書き込みアドレス、 )。プロセッサは長い間ボトルネックではありませんでした。プロセッサとこれらのバスはアイドル状態にあり、アイドル状態です。特に、読取りアドレスを分離してデータを読んだり書いたりドットを接続してトランザクションを完了させるためにIDタグを使用して、別々のバスにデータを書き込む。
ウィキペディアに掲載されているように、現実世界で実際に見られる最も近いものは、マイクロコントローラのようなものです。そして、彼らが本当に意味のあるアドレス空間であるメモリについて話すとき、バスの反対側にあるものは、sram、dram、flash、eepromなど、または組み合わせである可能性があります。どちらの側でも、そのバス上のすべての周辺機器。したがって、マイクロコントローラでは、このモデルでは命令がフラッシュであり、sramはデータであり、純粋なハーバードアーキテクチャでは、コードをsramにロードしてそこで実行する方法がない場合、同様にフラッシュをプログラムするためにデータバスを使用できませんまたはフラッシュするデータをバッファリングするために、ROM /フラッシュは、ハードバードアーキテクチャ経路上に示されていないことによって魔法のようにロードされる。 I/Oバスリソースと命令バスリソースとの間のクロスオーバである可能性があり、これは変更されたハーバードと呼ばれる。
for Von Neumannでは、命令、データ、I/O、およびそれらのサブディビジョンにバスを吹き飛ばすアーリーアドレスデコーダがあります。おそらくデータと命令は結合されたままですが、終わりから終わりまで終わり。実用的ではない。
ウィキペディアの写真を見ると、もう一方が組み合わされた物に別々のバスがあることを理解してください。テストに合格してから、本当に関連性のないものを必要としないという条件を忘れてしまいます。
- 1. GUIはどこにありますか?
- 2. コアデータファイルはどこにありますか?
- 3. SAPIはどこにありますか?
- 4. CreateNewWindowはどこにありますか?
- 5. php_printer.dllはどこにありますか?
- 6. MonoDevelop.Macinteropはどこにありますか?
- 7. Stringはどこにありますか?
- 8. App_Startはどこにありますか?
- 9. ビジネスロジックはどこにありますか?
- 10. パッケージキーバインディングはどこにありますか?
- 11. エンティティモデルはどこにありますか?
- 12. グラフテストスイートはどこにありますか?
- 13. py4csはどこにありますか?
- 14. ConnectivityMonitor()はどこにありますか?
- 15. "ListViewItemPlaceholderBackgroundThemeBrush"はどこにありますか?
- 16. .gemspecはどこにありますか?
- 17. タブバーコントローラクラスはどこにありますか?
- 18. オーディオノイズキャンセルアルゴリズムはどこにありますか?
- 19. IDispatchExはどこにありますか?
- 20. ベータユーザーはどこにありますか?
- 21. 16F877A.hはどこにありますか?
- 22. Microsoft.Deployment.WindowsInstallerはどこにありますか?
- 23. Xcodeはどこにありますか?
- 24. メテオールストアはどこにありますか
- 25. インデックスはどこにありますか?
- 26. はどこにありますか?
- 27. Microsoft.VisualStudio.DebuggerVisualizersはどこにありますか?
- 28. RoutedEventArgs.Sourceはどこにありますか?
- 29. sap.m.sample.BusyDialogLight.Cはどこにありますか?
- 30. AppCompatPreferenceActivityはどこにありますか?
大規模なシステムでは、コードとデータが同じRAMに格納されていることが多く、「ハーバードアーキテクチャ」という用語は、異なるパイプラインや異なるキャッシュによってフェッチされることを意味する場合があります。典型的には、両方のサブシステムに単一の外部メモリバスにアクセスするためのアービタが存在する。これの実際的な重要性は、これらのプラットフォームで「自己修正」コード(ブートローダなど)を使用するのは簡単ではないということです。意図したコードを上書きするときはいつでも特別なキャッシュフラッシュ操作が必要です実行する。 – NickJH
あなたの応答に感謝ニック。フォンノイマンアーキテクチャは、命令が動作するデータと共にメモリにプログラム命令を格納する能力である。このメモリはRAMまたはROMを参照していますか? – user145485