在第一台电子计算机(Electronic Numerical Integrator And Computer,ENIAC)设计与研制的过程中,他们的设计者曾向美国普林斯顿大学高等研究院(Institute of Advanced Study,IAS)的科学家冯·诺依曼(von Neumann)进行过咨询。ENIAC投入使用后,冯·诺依曼曾到现场参观,对ENIAC表现出强烈的兴趣。在对ENIAC存在的不足(ENIAC是专用计算机,它的功能是由电路连线来决定的,改变功能时,需要人为地改变电路连线)进行深入思考的基础上,冯·诺依曼等人于1946年6月发表了一篇旨在构建一台通用计算机的技术报告《关于电子计算装置逻辑结构初探》。这份报告提出了基于“存储程序”控制的“离散变量自动电子计算机(Electronic Discrete Variable Automatic Computer,EDVAC)”的设计方案。

“存储程序”的思想是:计算机的用途和硬件完全分离。硬件采用固定性逻辑,提供某些固定不变的功能。通过编制不同的程序来满足不同用户对计算机的应用需求。

依照这个思想,在计算机上求解一个问题,需要将求解该问题的过程分解成一系列简单、有序的计算步骤,一个步骤由计算机提供的一条计算机指令(Instruction)完成。然后将这些有序的计算步骤一一对应成计算机能够识别并可执行的指令—汇总在一起,就形成所谓的程序,并存储在计算机中。计算机通过逐条、顺序执行程序中的指令来完成问题的求解。“存储程序”思想体现了计算思维的核心概念—自动化。

根据《关于电子计算装置逻辑结构初探》设计的“冯·诺依曼计算机”的特点如下。

1)具备五大功能:数据存储、操作判断与控制、数据处理、数据输入和数据输出。对应五个功能部件:存储器(Memory)、控制单元(Control Unit,CU)、算术逻辑运算单元(Arithmetic Logic Unit,ALU)、输入单元(Input Unit)和输出单元(Output Unit),如图1-2所示。图1-2中,有两股信息在流动。一股是控制流(即操作命令),它从CU发出,分散流向各部件;另一股是数据流(包括指令和地址),它在CU的控制下,从一个部件流到另一个部件。

2)存储器由一组一维排列、线性编址的存储单元组成,每个存储单元的位数是相等且固定的,存储单元按地址访问。这是最简单、最易于实现的信息存储与查找方案,就如同一排平房,房间大小都是一样的,按照房间号查找房间,房间号逐间递增。

3)“程序”由一条一条的指令有序排列而成,而指令由操作码和地址码两部分组成。操作码规定了该指令的操作类型(即功能),地址码指示存储操作数和运算结果的存储单元地址。操作数的数据类型由操作码来规定,操作数可能是定点数、浮点数、双精度浮点数、十进制数、逻辑数、字符或字符串等。

4)指令和数据均采用二进制表示,并以二进制形式进行运算。二进制的计算规则是最简单的,加法仅有4种:0 +0=0,0 + 1=1,1 + 0=1,1 + 1=10。

把纷繁复杂的信息抽象成0/1,这是计算机的根,是计算机的哲学,是计算思维核心概念“抽象”的具体体现—信息符号化,符号数字化,数字0/1化。

5)为了简化计算机的控制与组成,程序(指令)与数据同等地、不加区分地存储在同一个存储器中,但可以从时间和空间上,将它们区分开。在取指周期中,从存储器流向控制器的是指令;在执行周期中,存储器与运算器交换的是数据。

6)为了“逐条、顺序执行程序中的指令”, 冯·诺依曼提出了一个极易实现的解决方案:设置一个“程序计数器(Program Counter,PC)”来指示下一条将要执行的指令的地址。在一般情况下,每执行完一条指令,PC就会自动加1,以指向下一条指令的存储单元。

当然,为了赋予计算机更多的“灵性”,PC的值也可以通过执行特殊的指令来修改,从而达到改变指令执行顺序的目的。这样,执行指令的顺序就不受限于指令存储的顺序了。

不过,尽管冯·诺依曼非常聪明,冯·诺依曼计算机的结构还是存在一些问题,后来人们对它进行了改进和发展—大学,止于至善!

例如,由于以ALU为中心,输入/输出单元与存储器之间的数据传送都要经过ALU,这使得ALU无法专注于运算,低速的输入/输出和高速的运算不得不相互等待,串行工作。因此,“冯·诺依曼计算机”很快就被改进成以存储器为中心(如图1-3所示)。这样,输入/输出设备就可以与运算器并行工作,输入设备也可与输出设备并行工作,提高了设备的效率和利用率。同时这使得计算机五个功能单元的互联更加简单。

时至今日,冯·诺依曼计算机结构经历近七十年,依然占据统治地位。这是为什么呢?

说到底,冯·诺依曼的最大贡献就是将计算机系统分为五个部件并确定了这五个部件的互联结构。在考虑到ALU既需要从存储器中读取数据,又需要将运算结果写回到存储器,请读者自行设计一个计算机五个部件的互联结构,看看能否比图1-3更简单。

抽象起来,“冯·诺依曼计算机结构”就是“以一个部件为中心,实现五个部件互联的星形结构”。这样实现的“五个部件互联”是最简单的、连接链路也是最少的。由于外围的四个部件只能与中心部件进行数据通信,而且有些数据通路还是单向的。进而冯·诺依曼计算机所需要的数据传送功能也是最少的、最简单的。

综上所述,“冯·诺依曼计算机”可以概括为:用最简单、最易于实现的思想(二进制及其运算规则)来表示数据并实现运算,用最简单的互联结构来组成一台计算机。

这不仅体现了计算思维,还很好地体现了“简单就是美”的工程哲学理念!

诺依曼计算机组成,1.1.2 冯·诺依曼计算机模型相关推荐

  1. 网络位置可以看到另一个人的电脑_计算机组成原理(一)- 冯·诺依曼体系结构...

    1 计算机的基本硬件组成 早期,DIY一台计算机,要先有三大件 CPU 内存 主板 1.1 CPU 计算机最重要的核心配件,中央处理器(Central Processing Unit). 计算机的所有 ...

  2. 非冯诺依曼体系计算机,一种新非冯·诺依曼计算机体系结构.pdf

    一种新非冯·诺依曼计算机体系结构 第26 卷 第10 期 北 京 理 工 大 学 学 报 Voi. 26 No. 10 穗 趟 魁 手 此 均 开 区 婉 糟 幻 坟 洗 补 丸 谋 赘 害 养 隐 ...

  3. 计算机组成原理-入门篇-01冯·诺依曼体系结构

    1. 冯·诺依曼体系结构 计算机祖师爷之一冯·诺依曼(John von Neumann)提出的冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机.什么是存储程序 ...

  4. 根据冯诺依曼原理 计算机分为哪五大部件,①冯·诺依曼计算机结构分为哪五大部分?...

    输入设备.运算器.控制器.存储器.输出设备. 冯.诺依曼计算机的工作原理,"存储程序控制"原理的基本内容: 1.采用二进制形式表示数据和指令. 2.将程序(数据和指令序列)预先存放 ...

  5. [今日名人回顾]计算机之父—冯·诺依曼

    冯·诺伊曼,著名美籍匈牙利数学家.1903年12月3日生于匈牙利布达佩斯的一个犹太人家庭 冯·诺依曼的父亲麦克斯年轻有为.风度翩翩,凭着勤奋.机智和善于经营,年轻时就已跻身于布达佩斯的银行家行列.冯· ...

  6. 计算机之父 匈牙利“唯一的天才” 冯·诺依曼

    读书时,身边总有一些学霸让人又敬又恨.然而和冯诺依曼接触过的人都会发现: 天才只有诺依曼一个 . 天才童年 约翰·冯·诺依曼出生在匈牙利首都布达佩斯的一个犹太人家庭,他的父亲是一位小有成就的银行家. ...

  7. 计算机之父冯·诺依曼

    约翰·冯·诺依曼 约翰·冯·诺依曼(JohnVonNouma,1903--1957),美藉匈牙利人,1903年12月28日生于匈牙利的布达佩斯,父亲是一个银行家,家境富裕,十分注意对孩子的教育.冯·诺 ...

  8. 冯.诺依曼体系结构对计算机发展的限制

    冯 . 诺依曼体系结构对计算机发展的限制 刘爱贵 ( 高能物理研究所计算中心 北京   2003年) 摘要 :    本文简单介绍了传统冯 . 诺依曼体系结构的原理和特点,从计算模型和存储模型两个方面 ...

  9. 冯 . 诺依曼体系结构对计算机发展的限制

    冯 . 诺依曼体系结构对计算机发展的限制 刘爱贵 ( 高能物理研究所计算中心 北京   2003年) 摘要 :    本文简单介绍了传统冯 . 诺依曼体系结构的原理和特点,从计算模型和存储模型两个方面 ...

  10. 冯·诺依曼--数学奇才计算机之父

    约翰·冯·诺依曼 ( John Von Nouma,1903-1957) 美藉匈牙利人,1903年12月28日生于匈牙利的布达佩斯,父亲是一个银行家,家境富裕,十分注意对 孩子的教育.冯·诺依曼从小聪 ...

最新文章

  1. 第二次冲刺每日站立会议04
  2. centos 7 Chrony 集群同步时间
  3. mysql合并表快速去重_MySQL数据表合并去重的简单实现方法
  4. 深度学习:卷积层的实现
  5. 树莓派各版本配置对比
  6. python复制代码会被发现吗,我发现了一个记忆代码片段,我想知道它在复制。复制...
  7. c语言写的心理测试,写了个心理测试的c程序(*^__^*) 嘻嘻……
  8. android仿微信图片编辑器,electron/vue可编辑框contenteditable|仿微信截图
  9. 本地远程查看服务器tomcat 上虚拟机信息
  10. Honor V10 BKL-AL20 ROOT(Magisk方式)
  11. freeswitch 解决方案之视频会议
  12. 轻松解决Tomcat启动慢的问题,只需一行代码
  13. 《一个广告人的自白》读书笔记
  14. python自动翻译视频字幕_python利用google翻译方法实例(翻译字幕文件)
  15. 超级计算机阿波罗11,阿波罗11号制导计算机中指令模块和登月模块原始代码已在 GitHub 上开源...
  16. wiki百科关于区块链的介绍
  17. 个人作业——A001-185-2513-吴光华
  18. MySQL 无密码登录
  19. 激光雷达(LDS)技术原理解释及实现过程
  20. 基于Ubuntu20.04应用服务器的磁盘挂载与卸载

热门文章

  1. OSC源创会(西安)图文总结
  2. docker eclipse打包_【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)...
  3. 浙江大学计算机博士申请考核,考博经验 | 2020年浙江大学博士申请考核经验分享...
  4. 编程5分钟,命名2小时:聊聊命名规范!
  5. 制作方舟mod如何连接服务器,方舟服务器怎么添加MOD | 手游网游页游攻略大全
  6. 中关村发布:大数据企业分布图等3张图
  7. 如何在DAppNode中配置Folding At Home节点
  8. 页框,页表,页表项,页面大小,页表项 长度的理解
  9. win10里C盘的Program Files和 Program Files(x86)的区别
  10. 2.12 FreeRTOS_RingBuff 环形缓存数组的使用