【发布时间】:2016-02-05 14:33:24
【问题描述】:
我从不同来源阅读了很多关于 CISC 和 RISC 架构之间差异的信息。似乎达成一致的一件事是 CISC 始终与冯诺依曼一起使用,而 RISC 与哈佛架构一起使用。但我不能完全理解这种分类背后的原因。
【问题讨论】:
标签: computer-science cpu-architecture risc
我从不同来源阅读了很多关于 CISC 和 RISC 架构之间差异的信息。似乎达成一致的一件事是 CISC 始终与冯诺依曼一起使用,而 RISC 与哈佛架构一起使用。但我不能完全理解这种分类背后的原因。
【问题讨论】:
标签: computer-science cpu-architecture risc
指令集(RISC 和 CISC)与处理器架构(Harvard Architecture 和 Von Neumann Architecture)之间没有关系。两种指令集都可以与任何架构一起使用。
较早的 ARM 架构使用带有 RISC 的冯诺依曼架构,后来使用 ARM9,他们转向使用 RISC 的哈佛架构。最新的 ARM 处理器使用更先进的混合架构。
【讨论】:
冯诺依曼与哈佛的区别并不明显。显然,具有用于指令和数据的单独内存总线的芯片是哈佛架构。但是,当添加好的缓存时,单独总线的性能优势会大大降低。
如果您采用这样的芯片并添加良好的缓存,然后切换回单个内存总线,其中一个额外的引脚指示内存获取是用于指令还是用于数据,您仍然在谈论哈佛架构- 从编程的角度来看,你无法判断发生了这样的变化。
我认为最大的不同可能是在真正的冯诺依曼 CPU 上,您可以写入指令存储器,然后立即执行您编写的指令。例如,在 8086 上,您可以在写入指令之后立即写入指令!而在哈佛 CPU 上,即使是具有统一内存总线的 CPU,您也必须在写入之后使用一条指令强制将其写入实际内存,可能是一条防止乱序执行的指令,然后是一条指令刷新该位置的指令缓存。这个过程可能需要数百个周期 - 这是必要的,因为芯片的架构假设指令和数据存储器不交互。
这种变化甚至可以发生在同一个 CPU 系列中。最初的无缓存 68000 肯定是 CISC CPU,但如果您写入指令流,则必须注意指令预取,并可能在写入内存后添加 NOP。然而,680x0 系列的后来变体变得越来越像哈佛。例如,外部存储器总线可能保持统一,但指令和数据缓存是分开的。
【讨论】:
isync 的 I-cache 同步指令,以确保将存储作为代码执行。但是,具有拆分地址空间的真正哈佛机器(如 AVR)需要像 store-program-memory 这样的指令来存储到不同的地址空间中。您的第二段讨论了真正的哈佛拆分地址空间,但下一段仅讨论同步缓存,假设存储可以完全写入程序内存。因此,您可能需要调整措辞以保持一致性。