前言

1945 年 6 月 30 日, 约翰 · 冯 · 诺依曼与戈德斯坦等人联名发表著名的 101 页报告:「First Draft of a Report on the EDVAC 」(EDVAC 报告书的第一份草案;EDVAC:Electronic Discrete Variable Automatic Computer, 电子数据计算机)

1946年7-8月间, 约翰 · 冯 · 诺依曼等人又提出了一个更加完善的设计报告「Preliminary Discussion of the the Logical Design of an Electronic Computing Instrument」(电子计算机逻辑设计初探)。

报告指出:

(1)计算机应采用二进制, 不但数据采用二进制, 程序指令也采用二进制;

(2)计算机由5部分构成: 运算器、 控制器、 存储器、 输入和输出装置;

(3)程序由指令组成并和数据一起存放在存储器中, 机器按程序指定的逻辑顺序, 把指令从存储器中读出来并逐条执行, 从而自动完成程序描述的处理工作, 即「存储程序」思想。

冯·诺伊曼结构

这里我们不谈论前两点,只谈谈由第三点“存储程序”思想衍生出的结构: 冯 · 诺依曼结构, 即「将程序指令和数据存储在一起」的存储器结构, 也可称之为普林斯顿结构(可能是只以他的名字命名较为不公, 所以也有人以约翰 · 冯· 诺依曼曾任教的大学普林斯顿来命名该结构)。 下面是个人对冯 · 诺依曼结构的理解。

  • 首先,冯·诺伊曼结构的本质是「存储器结构, 什么是存储器(Memory)? 现代的存储器种类很多, 个人认为冯 · 诺依曼结构当中的存储器指的是我们现在说的 RAM(Random Access Memory,随机读取存储器), 暂时可以理解为是 PC 中的内存(条), 而不是指硬盘等存储器(如有不同看法,欢迎发表), 理解这一点很重要。
  • 其次, 什么是程序指令和数据? 程序指令本质就是控制计算机进行相关运算的一些二进制「编码」(在冯·诺依曼机中指的是二进制码),但是这些「编码」是人为事先定义、计算机可「理解」的。那么数据呢?数据就是人为输入和程序指令被执行后产生的「编码」, 计算机不可「理解」。冯 · 诺依曼之所以将这两者都存储在 RAM 中,就是因为它们本质上都是「编码」。但是这两者之间还有一个重要的区别: 程序指令在执行时是不可变的, 而数据则是可变的。 所以我们可以认为程序指令的目的实际上就是为了产生数据和改变数据。 这意味着将程序指令和数据放在同一块存储器上可能造成程序指令的不稳定(即程序指令在执行时容易被改写, 这也是为什么 PC 机上程序容易出现崩溃的部分原因)。
  • 最后, CPU 和存储器之间通过什么进行沟通? 我们知道冯 · 诺依曼机的 CPU 需要从 RAM 中读写数据, 取指令、 翻译指令、 执行指令。 后两者 CPU 可独立完成, 前两者 CPU 则需要通过系统总线与 RAM 进行沟通。 系统总线分为地址总线, 数据总线和控制总线, 分别用于传输地址信号、 数据信号和控制信号(但要注意这几种总线不一定是独立的,比如数据总线可能会承担地址总线的功能), 由于将指令和数据放在一起,冯 · 诺依曼结构是比较节省总线资源的。

明白了上述几点,就可以理解下图了:

哈佛结构

那么哈佛结构呢? 哈佛结构远没有冯 · 诺依曼结构那么有名, 但个人认为这种结构的地位应当是与冯 · 诺依曼相当的。 也有很多人认为哈佛结构是冯·诺依曼的改进型, 但很少人知道哈佛结构是早于冯 · 诺依曼结构出现的。 这种结构的最早体现是在 1937 设计(1944年投入使用)的 ASCC MARK I(马克1号), 由 IBM 的 Howard Aiken(霍华德·艾肯)设计(具体历史请参照参考资料 [1], 英文资料)。这台计算机使用打卡纸存储程序指令, 而数据则存储在处理器中, 使用十进制进行计算, 这种结构的计算机计算能力完全无法与现代的计算机相比。 与 EDVAC 的运算能力也相去甚远, 但为后来的哈佛结构计算机提供了极其宝贵的参考价值。 当时的哈佛结构并不像现在那么清晰, 也许 Howard AiKen 本人也没有意识到将数据和程序指令分开的意义。 而我们现在所认知的哈佛结构实际上是经过后人完善的, 即「将程序指令和数据存储分开存储的存储器结构」。

哈佛结构计算机将程序指令和数据分开的做法实际上是保护了程序指令, 将程序指令放在 ROM (Read Only Memory, 只读存储器)或 Flash 等存储器中, 可以有效地保护程序指令在执行时不被改写; 而数据则保存在 RAM中, 可以读写。 但是由于多了一种存储器, 那么 CPU 与 RAM 的系统总线也必然会增加, 这会增加成本和设计的复杂度。 这也是早期的电脑很少使用哈佛结构的原因。 不过后来在此基础上提出了改进型哈佛结构, 即将两组系统总线合为一组, 使用分时复用的方式进行访问, 节省了总线资源, 而且没有改变哈佛结构数据和程序指令分开存储的本质。

下图即为哈佛结构示意图:

在哈佛结构和冯诺依曼结构的基础上, 后来的人在 CPU 内部增加了缓存(Cache), 分为 D-Cache 和 I-Cache。 分别用于存储数据和程序指令; 在外部则使用RAM存储数据和指令。 只有需要改变时, 缓存才会到 RAM 中加载新的数据。 这种方式实际上从内部看属于哈佛结构, 在外部看则属于冯·诺依曼结构, 这是一种混合式结构, 而现在的计算机大部分都是如此, 而不再是纯粹的冯·诺依曼结构或者哈佛结构。

2017年1月19日

Kilento

参考资料

[1] 霍华德·艾肯 : http://history-computer.com/ModernComputer/Relays/Aiken.html

冯·诺依曼结构与哈佛结构浅析相关推荐

  1. 冯·诺依曼结构和哈佛结构(歌尔声学软件测试题)

    冯·诺依曼结构和哈佛结构是两种典型的微处理器组织结构. 冯·诺依曼(Newman)结构是将程序和数据放在同一存储空间,统一编址,依靠指令计数器提供的地址来区分是程序代码还是数据,取指令和取数据都访问同 ...

  2. 1.1计算机组成结构:CPU组成、冯·诺依曼结构与哈佛结构、嵌入式芯片术语

    1.1计算机组成结构:CPU组成.冯·诺依曼结构与哈佛结构.嵌入式芯片术语 计算机组成结构 CPU组成 运算器 控制器 冯·诺依曼结构与哈佛结构 冯·诺依曼结构 哈佛结构 嵌入式--芯片术语 计算机组 ...

  3. 中央处理器的体系架构可以分为:冯·诺依曼结构和哈佛结构

    冯·诺依曼型计算机的五大组成部分: 运算器.控制器.存储器.输入设备.输出设备 ①运算器.计算机中进行算术运算和逻辑运算的主要部件,是计算机的主体.在控制器的控制下,运算器接收待运算的数据,完成程序指 ...

  4. 1CISC和RISC的区别联系是什么?2哈佛结构和冯·诺依曼结构的区别

    RISC 和CISC 是目前设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构.操作运行.软件硬件.编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同,因此,在很 ...

  5. 存储、冯诺伊曼和哈佛结构之间的关系

    一 存储分类 1 用途   存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器(简称内存,港台称之为记忆体).外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断 ...

  6. 瀑布模型,冯.诺依曼结构——摘自百科

    瀑布模型是一个软件开发架构,于1970年被温斯顿·罗伊斯(Winston Royce)提出.其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与 ...

  7. 哈佛结构冯·诺依曼结构

    哈佛结构是一种将程序指令存储和 数据存储分开的存储器结构.哈佛结构是 一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址 ...

  8. 哈佛结构和冯·诺依曼结构

    目录 一.哈佛结构 二.冯·诺伊曼结构 三.哈佛结构和冯·诺伊曼结构对比 一.哈佛结构 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构.哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存 ...

  9. 哈佛结构与冯.诺依曼结构(普林斯顿结构)

    过去知道计算机的体系结构分为哈佛结构与冯.诺依曼结构,但并没有去总结他们有什么区别.今天来看看它们有什么区别. 冯.诺依曼结构,又称为普林斯顿结构.是一种经典的体系结构,有CPU,总线,外部存储器组成 ...

最新文章

  1. Action Service Dao三层的功能划分
  2. Jax-RS自定义异常处理
  3. 【转】ABP源码分析九:后台工作任务
  4. Git版本控制常见操作
  5. de4dot使用教程
  6. android信鸽推送demo_android app 集成 信鸽推送
  7. 01_开关电源设计-电源反馈电路怎么设计?TL431配合光耦反馈电路实例设计
  8. python中的文字怎么居中_各位大神,wxPython中,怎么让text文本居中显示?
  9. iOS中日本日历、佛教日历取date的问题
  10. 企业宣传软文怎么写?手把手教大家撰写企业宣传软文
  11. 洛谷P1308 统计单词数
  12. kso经验积累 -- c#发送邮件
  13. c语言判断非法字符题目,C语言考试题库之判断题-c语言考试判断题
  14. 基于遗传算法的无人机监视覆盖航路规划算法研究
  15. 毕业论文排版(七)-题注组合
  16. 如何做好电商运营?倍赞网:这十个步骤必须懂
  17. 用c语言编制牛顿法程序,求解试用newton法求函数,YTU 2405: C语言习题 牛顿迭代法求根...
  18. 计算机网络 | 谈谈TCP的流量控制与拥塞控制
  19. origin修复中_从Word文档中的Origin图恢复误删的Origin文件数据的方法
  20. 成功注册CSDN的博客

热门文章

  1. 代码随想录——求根节点到叶节点数字之和
  2. js实现获取今日、本周、本月、本学期的开始结束日期
  3. linux ahci 不重装,老电脑竟然忘记开AHCI了,教你种不用重装系统的解决方法
  4. 开源社与 Dev.Together 2022
  5. 鸿蒙 谷歌怕了,鸿蒙系统展示了华为的野心,难怪谷歌害怕
  6. 基于python的中文词频分析
  7. 快传号视频批量上传,禁止转载!
  8. synchronized批量重偏向与批量撤销
  9. python脚本--批量下载GNSS数据
  10. python制作冰花_《冰花》教学反思