【问题标题】:CISC and RISC architecturesCISC 和 RISC 架构
【发布时间】:2016-02-05 14:33:24
【问题描述】:

我从不同来源阅读了很多关于 CISC 和 RISC 架构之间差异的信息。似乎达成一致的一件事是 CISC 始终与冯诺依曼一起使用,而 RISC 与哈佛架构一起使用。但我不能完全理解这种分类背后的原因。

【问题讨论】:

    标签: computer-science cpu-architecture risc


    【解决方案1】:

    指令集(RISCCISC)与处理器架构(Harvard ArchitectureVon Neumann Architecture)之间没有关系。两种指令集都可以与任何架构一起使用。

    较早的 ARM 架构使用带有 RISC 的冯诺依曼架构,后来使用 ARM9,他们转向使用 RISC 的哈佛架构。最新的 ARM 处理器使用更先进的混合架构。

    【讨论】:

    • 哇,我曾假设 1998 年的“真正” CPU(不是纯 DSP)总是modified Harvard(即拆分 L1 缓存)。我真的很惊讶 ARM9 有独立的外部总线。 (但维基百科指出,系统设计人员可以“以冯诺依曼风格连接至少部分地址空间”,因此它不仅限于纯哈佛架构。)感谢您指出这个例子。
    【解决方案2】:

    冯诺依曼与哈佛的区别并不明显。显然,具有用于指令和数据的单独内存总线的芯片是哈佛架构。但是,当添加好的缓存时,单独总线的性能优势会大大降低。

    如果您采用这样的芯片并添加良好的缓存,然后切换回单个内存总线,其中一个额外的引脚指示内存获取是用于指令还是用于数据,您仍然在谈论哈佛架构- 从编程的角度来看,你无法判断发生了这样的变化。

    我认为最大的不同可能是在真正的冯诺依曼 CPU 上,您可以写入指令存储器,然后立即执行您编写的指令。例如,在 8086 上,您可以在写入指令之后立即写入指令!而在哈佛 CPU 上,即使是具有统一内存总线的 CPU,您也必须在写入之后使用一条指令强制将其写入实际内存,可能是一条防止乱序执行的指令,然后是一条指令刷新该位置的指令缓存。这个过程可能需要数百个周期 - 这是必要的,因为芯片的架构假设指令和数据存储器不交互。

    这种变化甚至可以发生在同一个 CPU 系列中。最初的无缓存 68000 肯定是 CISC CPU,但如果您写入指令流,则必须注意指令预取,并可能在写入内存后添加 NOP。然而,680x0 系列的后来变体变得越来越像哈佛。例如,外部存储器总线可能保持统一,但指令和数据缓存是分开的。

    【讨论】:

    • 原来的8086实际上可以观察到过时的指令取指;它没有窥探它的 6 字节预取缓冲区。一个跳转使执行最近修改的代码变得安全。现代 x86 CPU 通过窥探存储到管道中的地址,超出了纸上的要求。 (所以实际上你不能观察到过时的提取;a stronger guarantee is easier to implement on an out-of-order exec CPU 比一个勉强足够强。)在纸面上,我认为需要管道序列化指令,但事实上众所周知 jmp 有效。
    • 修改后的哈佛(拆分 L1 缓存,统一内存)只需要提交存储并执行类似 PowerPC isync 的 I-cache 同步指令,以确保将存储作为代码执行。但是,具有拆分地址空间的真正哈佛机器(如 AVR)需要像 store-program-memory 这样的指令来存储到不同的地址空间中。您的第二段讨论了真正的哈佛拆分地址空间,但下一段仅讨论同步缓存,假设存储可以完全写入程序内存。因此,您可能需要调整措辞以保持一致性。
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多