[KungFu8位 MCU]

【转】为什么电脑还沿用冯·诺伊曼结构而不使用哈佛结...

[复制链接]
1544|11
手机看帖
扫描二维码
随时随地手机跟帖
单片机菜菜|  楼主 | 2017-8-28 22:48 | 显示全部楼层 |阅读模式
哈佛结构明显比冯·诺伊曼结构高效,而且现在在MCU和DSP上早已广泛应用,为何个人电脑还继续沿用诺依曼机构呢?
单片机菜菜|  楼主 | 2017-8-28 22:48 | 显示全部楼层
在现实世界中很少有非常纯粹的概念,特别是在实际的应用里。教科书里的大多是理想化的模型,便于掌握某个概念的重点和本质,但实际中很难达到这种理想化的状态。哈佛结构和冯诺依曼结构主要区别在是否区分指令与数据。在教科书里这是两种截然不同的做法。实际上在内存里,指令和数据是在一起的。而在CPU内的缓存中,还是会区分指令缓存和数据缓存,最终执行的时候,指令和数据是从两个不同的地方出来的。你可以理解为在CPU外部,采用的是冯诺依曼模型,而在CPU内部用的是哈佛结构。大部分的DSP都没有缓存,因而直接就是哈佛结构。哈佛结构设计复杂,但效率高。冯诺依曼结构则比较简单,但也比较慢。CPU厂商为了提高处理速度,在CPU内增加了高速缓存。也基于同样的目的,区分了指令缓存和数据缓存。有时为了解决现实问题,究竟是什么主义真的没那么重要。因而个人认为争论到底是哪种结构意义不大。

使用特权

评论回复
单片机菜菜|  楼主 | 2017-8-28 22:49 | 显示全部楼层
哈佛体系架构有个致命的弱点在动态加载程序上面,想象我们从外存中读取一段程序然后加载到RAM,这个程序是在数据内存当中的,我们需要一种机制将数据内存再传输到程序内存当中去,这反而增加了设备复杂度。另外,绝对不允许CPU/DSP读取程序内存来当作数据,这也是不现实的,程序一般都有只读数据区和静态数据区,烧写程序的时候会当作程序的一部分烧进ROM中,想像一下如果为了把程序和数据分开,而需要设置两块ROM,再把其中一块ROM和RAM通过复用器接起来,这是多么惨烈的景象,更不用说每次烧写都要分开烧两块ROM了。实际上即使是DSP通常也允许从程序内存的总线上读取一些数据。对于多任务操作系统来说,管理程序内存是一件非常重要的事情,而且仅仅是保护模式下的页面映射等等机制就已经足够复杂了,如果还要求将程序和数据分开管理,复杂度就太高了。这种时候冯诺依曼体系结构就有非常大的优势了。纯的(或者接近纯的)哈佛结构只用于非常简单的硬件系统,这种系统当中通常程序完全运行在ROM中,数据几乎完全存储于RAM中,这样的结构足够简单。而要支持多任务的处理器通常引入Cache层,在Cache层实现一个哈佛体系架构,这样可以兼顾性能和灵活性。

使用特权

评论回复
单片机菜菜|  楼主 | 2017-8-28 22:49 | 显示全部楼层
实际上,绝大多数现代计算机使用的是所谓的“Modified Harvard Architecture”,指令和数据共享同一个 address space,但缓存是分开的。可以说是两种架构的一种折中吧。

使用特权

评论回复
单片机菜菜|  楼主 | 2017-8-28 22:50 | 显示全部楼层
现代计算机都是数据 cache 跟指令 cache 分开的,而在芯片外是共享内存( 即使现在的多核芯片现在也在共享内存 )。也就是说内部表现为哈佛结构,外部表现为冯诺以曼结构。至于为何还在使用这种「冯诺以曼」结构,我觉得可能因为这种结构在现在大量采用的「虚拟存储器」技术下组织起来更方便吧。

使用特权

评论回复
单片机菜菜|  楼主 | 2017-8-28 22:50 | 显示全部楼层
哈佛结构的程序总线和数据总线分开,冯诺依曼两者不分开。CPU运行程序要先把程序和数据读入内存,编过程的同学应该知道,你无法预料到这些程序和数据具体在那个物理地址,而是采用逻辑地址。PC机运行的程序很多,如果采用哈佛结构,程序总线和数据总线对应物理地址的切换会耗费更多的资源。而采用一条总线来读,就不存在这个问题。DSP采用哈佛结构,因为嵌入式应用不需要运行太多的任务。个人浅见,不对请指正。

使用特权

评论回复
单片机菜菜|  楼主 | 2017-8-28 22:51 | 显示全部楼层
哈佛结构的程序总线和数据总线分开,冯诺依曼两者不分开。CPU运行程序要先把程序和数据读入内存,编过程的同学应该知道,你无法预料到这些程序和数据具体在那个物理地址,而是采用逻辑地址。PC机运行的程序很多,如果采用哈佛结构,程序总线和数据总线对应物理地址的切换会耗费更多的资源。而采用一条总线来读,就不存在这个问题。DSP采用哈佛结构,因为嵌入式应用不需要运行太多的任务。个人浅见,不对请指正。

使用特权

评论回复
单片机菜菜|  楼主 | 2017-8-28 22:52 | 显示全部楼层
现在的PC使用的是伪冯诺依曼结构,从整体上来看,不管是指令还是数据都是存储于内存中,然后读入CPU进行执行,这确实是冯诺依曼结构。但实际上指令和数据分别读入至CPU内部的I-Cache和D-Cache中,CPU内部指令会数据是完全分开。因此现在的PC外在表现上是冯诺依曼结构,本质上来说是类哈弗结构的。数据、指令共用了相同的地址空间,在CPU外采用同一条总线进行传输,而CPU内部又将数据、指令总线分开。

使用特权

评论回复
bboo| | 2017-8-31 22:31 | 显示全部楼层
这个改起来牵扯的太多

使用特权

评论回复
5574293| | 2017-9-21 14:33 | 显示全部楼层
似乎懂了,感觉哈弗结构在复杂系统上应用起来比较困难

使用特权

评论回复
单片机菜菜|  楼主 | 2017-11-23 07:23 | 显示全部楼层
5574293 发表于 2017-9-21 14:33
似乎懂了,感觉哈弗结构在复杂系统上应用起来比较困难

冯诺依曼也有自己的应用场合了,总之各有优劣吧。

使用特权

评论回复
xgfgli| | 2017-11-23 14:10 | 显示全部楼层
牵一发而动全身

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

170

帖子

0

粉丝