我正在阅读“计算系统元素”一书。这本书教如何从头开始构建一台完整的计算机。当我只是浏览有关计算机体系结构的章节时,我注意到它们都集中在冯诺依曼体系结构上。我只是好奇其他架构是什么以及何时何地使用它们。
我只知道两个,一个是冯诺依曼,第二个是哈佛。我也知道在 AVR 的 uC 中使用的 RISC。
我正在阅读“计算系统元素”一书。这本书教如何从头开始构建一台完整的计算机。当我只是浏览有关计算机体系结构的章节时,我注意到它们都集中在冯诺依曼体系结构上。我只是好奇其他架构是什么以及何时何地使用它们。
我只知道两个,一个是冯诺依曼,第二个是哈佛。我也知道在 AVR 的 uC 中使用的 RISC。
有许多不同种类的计算机体系结构。
对计算机体系结构进行分类的一种方法是按每个时钟执行的指令数。许多计算机一次读取一条指令并执行它(或者他们付出了很多努力来表现得好像他们这样做,即使在内部他们确实喜欢超标量和无序的东西)。我称这种机器为“冯诺依曼”机器,因为它们都有冯诺依曼瓶颈。此类机器包括 CISC、RISC、MISC、TTA 和 DSP 架构。这样的机器包括累加器机器、寄存器机器和堆栈机器。其他机器一次读取并执行多条指令(VLIW,超标量),这打破了每时钟一条指令的限制,但仍然在每时钟稍多一些指令时遇到冯诺依曼瓶颈。然而,其他机器不受冯诺依曼瓶颈的限制,因为它们在通电时预先加载所有操作,然后在没有进一步指令的情况下处理数据。这种非冯诺依曼机器包括数据流架构,
另一种对计算机体系结构进行分类的方法是通过 CPU 和内存之间的连接。有的机器有统一的内存,一个地址对应内存中的一个地方,当那个内存是RAM时,可以用那个地址来读写数据,或者把那个地址加载到程序计数器中来执行代码。我称这些机器为普林斯顿机器。其他机器有几个独立的内存空间,这样程序计数器无论加载什么地址总是指向“程序内存”,而正常的读写总是去“数据内存”,这是一个单独的位置,通常包含不同的即使数据地址的位恰好与程序存储器地址的位相同。那些机器是“纯哈佛”或“
少数人使用不包括哈佛机器的“冯诺依曼机器”的狭义定义。如果您是这些人中的一员,那么您会用什么术语来表示“具有冯诺依曼瓶颈的机器”的更一般概念,包括哈佛和普林斯顿机器,不包括 NON-VON?
大多数嵌入式系统使用哈佛架构。一些 CPU 是“纯哈佛”,这可能是内置硬件的最简单安排:只读程序存储器的地址总线专门连接到程序计数器,例如许多早期的 Microchip PICmicros。此外,一些修改过的哈佛机器也将常量放入程序存储器中,可以通过特殊的“从程序存储器中读取常量数据”指令(与“从数据存储器中读取”指令不同)读取。在上述各种哈佛机器上运行的软件不能改变程序存储器,它实际上是该软件的ROM。一些嵌入式系统是“自编程的”,通常具有闪存中的程序存储器和特殊的“闪存擦除块” 指令和一个特殊的“写闪存块”指令(不同于普通的“写数据存储器”指令),以及“从程序存储器读取数据”指令。最近的几款 Microchip PICmicros 和 Atmel AVR 是自编程改进的哈佛机器。
对 CPU 进行分类的另一种方法是按时钟。大多数计算机都是同步的——它们只有一个全局时钟。一些 CPU 是异步的——它们没有时钟——包括 ILLIAC I 和 ILLIAC II,它们曾经是地球上最快的超级计算机。
请在http://en.wikibooks.org/wiki/Microprocessor_Design/Computer_Architecture帮助改进对各种计算机体系结构的描述 。
CISC是RISC的“对立面”。RISC 更喜欢具有易于编译器优化且通常大小相同的简单指令,而 CISC 则喜欢不同大小的复杂指令。
例如,CISC 中的弹出指令将修改堆栈指针并将堆栈中的数据放入另一个寄存器。但是,RISC 处理器将使用一条指令读取数据,然后使用第二条指令修改堆栈指针。(通常;有一些例外,例如 PowerPC 可以更新堆栈指针并将数据推送到堆栈,但这是一个例外)
由于 RISC 指令大小相同,反汇编程序更容易编写。设计处理器也更容易,因为流水线不必考虑不同的指令大小。然而,CISC 代码密度往往更好,因为复杂指令需要更少的字节来表示相同数量的操作,并且因为可变指令长度允许一些“压缩”。
还有其他奇特的架构,例如 VLIW/EPIC。这种架构的设计考虑了并行处理。然而,它们并没有做得很好,因为它们给编译器带来了非常沉重的优化负担,而其他体系结构具有花哨的指令窗口,可以减轻编译器的一些优化负担。
冯诺依曼和哈佛架构都可以与 RISC 处理器一起使用,例如 AVR 和 ARM。AVR 使用哈佛,而一些 ARM 芯片使用冯诺依曼,有些使用哈佛。
嗯,有类似 ENIAC 的东西,你基本上有单独的 ALU,你通过将一个 alu 的输出连接到另一个 alu 的输入来“编程”它们,另一个 alu 将对该中间变量执行下一个操作。您的“寄存器”和存储是连接 alus 的电线。
我最近购买了《第一台计算机——历史与架构(计算的历史)》一书,该书部分地关注了这个确切的主题。我不建议购买这本书,尽管它只是学术论文的集合,很难阅读,而且我怀疑可能在其他地方(免费)出版。(介绍完就放弃了)
一旦记忆被发明并变得实用,我们就进入了两个流行的冯诺依曼和哈佛。从重新布线、打孔卡、纸带或类似的东西执行变得不那么实用了。还有基于堆栈的(例如 zpu),我怀疑它可能属于哈佛类别而不是它自己的类别。
冯诺依曼平台如何从一个内存接口上的只读(正常使用)闪存启动并在另一个内存接口上具有读/写数据 ram(有时可以同时在两者上运行)但从程序的角度来看是在一个地址空间?或者具有多个内部和外部存储器/接口的存储器/接口全部并行运行,但由于处于同一地址空间中而属于冯诺依曼。
处理器无法将指令存储器作为数据访问以更改/升级引导加载程序或引导加载程序加载下一个要运行的程序的哈佛平台有什么好处?为什么不是冯诺依曼架构?处理器可能以顺序(指令获取和内存写入不同时发生)的方式从同一接口上的同一内存执行和操作?
这两种流行的基于内存的架构比它们在当前实现 IMO 中的不同更接近。
gpu掉到哪里去了?或者我工作的业务,网络处理器 (NPU)。如果你有这些相对较小的专用微引擎(处理器),这些微引擎(处理器)从哈佛之类的程序 ram(可寻址,但出于性能原因你不想这样做),则在各种数据 ram 上运行,每个数据 ram 都有自己独立的地址空间(单独的处理器每个空间的指令),(并行运行的内存空间)并通过这些 ram 传递中间数据,以便下一个微引擎以类似有线 alu(eniac)的方式完成下一个计算?你会怎么称呼那个?npus 和 gpus 只是花哨的修改后的哈佛架构吗?