Reading Notes : 180212 冯诺依曼计算机
读书《计算机组成原理》,百度百科
现在大部分接触过计算机的人,都会知道冯诺依曼计算机,但是这个概念是怎么来的呢?本节我们就通过聊一下计算机的存储程序控制,来认识”冯诺依曼”。
存储程序控制
世界上第一台计算机是诞生于1946年2的ENIAC,在研制ENIAC的同时,以美籍匈牙利数学家冯.诺依曼为首的研制小组提出了“存储程序控制”的计算机结构,并开始了存储程序控制的计算机EDVAC的研制。
存储程序概念是冯.诺依曼等人于1946年6月首先提出来的,它可以简要得概括为以下几点:
- 计算机(指硬件)应由运算器、存储器、控制器、输入设备和输出设备5大基本部件组成。
- 计算机内部采用二进制来表示指令和数据。
- 顺序执行程序:计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序。
冯诺依曼对计算机最大的贡献在于“存储程序控制”概念的提出和实现。时至今日,虽然计算机发展迅速,但是就其结构原理来说,目前绝大多数的计算机仍然建立在存储程序控制概念的基础上。通常把符合“存储程序控制”的计算机统称为冯诺依曼型计算机。当然,现代计算机与早期计算机相比在结构上还是有许多改进的。
随着计算机技术的不断发展,也暴露了冯诺依曼型计算机的主要弱点:存储器访问会成为瓶颈。目前已经出现了一些突破存储程序控制的计算机,统称为非冯计算机,如数据驱动的数据流计算机、需求驱动的规约计算机和模式匹配驱动的智能计算机等。不过我们学习仍以冯诺依曼型计算机为范本。
存储器设计思想
根据程序(指令序列)和数据的存放形式,存储器设计思想又可以分为冯诺依曼结构和哈佛结构。下面我们来认识一下。
冯诺依曼结构的背景
电子计算机的问世,奠基人是英国科学家艾兰· 图灵(Alan Turing)和美籍匈牙利科学家冯· 诺依曼(John Von· Neumann)。图灵的贡献是建立了图灵机的理论模型,奠定了人工智能的基础。而冯· 诺依曼则是首先提出了计算机体系结构的设想。
1946年美籍匈牙利科学家冯·诺依曼提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式存储,并确定了存储程序计算机的五大组成部分和基本工作方法。
半个多世纪以来,计算机制造技术发生了巨大变化,但冯· 诺依曼体系结构仍然沿用至今,人们总是把冯· 诺依曼称为“计算机鼻祖”。
冯诺依曼结构
冯诺依曼结构也称为普林斯顿结构,是一种传统的存储器设计思想,即指令和数据是不加区分地混合存储在同一个存储器中的,共享数据总线,如下图所示。指令地址和数据地址

指向同一个存储器的不同物理位置,指令和数据的宽度相同。由于指令和数据存放在同一个存储器中,因此冯诺依曼结构中不能同时取指令和取操作数。又由于存储器存取速度远远低于CPU运算速度,从而使计算机运算速度受到很大的限制,CPU与共享存储器间的信息交换成了影响高速计算和系统性能的“瓶颈”。Intel公司的80x86以及其他中央处理器都采用了冯诺依曼结构。
哈佛结构
冯诺依曼结构在面对高速、实时处理时,不可避免地会造成总线拥挤。为此哈佛大学提出了与冯诺依曼结构完全不同的另一种存储器设计思想,习惯称之为哈佛结构。哈佛结构是指程序和数据空间独立的体系结构,目的是为了减轻程序运行时的访存瓶颈。
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。与两个存储器相对应的是系统的4条总线:程序和数据的数据总线与地址总线。这种分离的程序总线和数据总线可允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,提高了数据的吞吐率。又由于程序和数据存储在两个分开的物理空间中,因此取址和执行能完全重叠。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。

哈佛结构的计算机由CPU、程序存储器和数据存储器组成,程序存储器和数据存储器采用不同的总线,从而提供了较大的存储器带宽,使数据的移动和交换更加方便,尤其提供了较高的数字信号处理性能。
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。大多数单片机和数字信号处理系统都使用哈佛结构。
冯结构和哈佛结构对比
哈佛结构与冯·诺依曼结构处理器相比,处理器有两个明显的特点:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。改进的哈佛结构,其结构特点为:
使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输;两条总线由程序存储器和数据存储器分时共用。
总结
许多现代微型计算机中的高速缓冲存储器(Cache)采用哈佛结构,将Cache分为指令Cache和数据Cache两个部分,而主存储器采用冯诺依曼结构,只有一个,由指令和数据合用。如此将冯诺依曼结构和哈佛结构结合起来使用,不仅可以提高主存储器的利用率,而且可以提高程序执行的效率,缩短指令执行的时钟周期。
Reading Notes : 180212 冯诺依曼计算机的更多相关文章
- Reading Notes : 180211 概述计算机
读书<计算机组成原理> <鸟哥的Linux私房菜 基础篇> 本章介绍电子计算机概念以及发展历史和发展趋势,内容摘自<计算机组成原理> <鸟哥的Linux私房 ...
- Reading Notes : 180213 计算机的硬件构成与处理流程
读书<计算机组成原理>,<鸟哥的Linux私房菜基础篇> 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和 ...
- Reading Notes of Acceptance Test Engineering Guide
The Acceptance Test Engineering Guide will provide guidance for technology stakeholders (developers, ...
- Reading Notes : 180214 计算机的总线结构
读书<计算机组成原理>,百度百科 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和一些基本信息,简单认识,以后再深入了 ...
- [Notes] Reading Notes on [Adaptive Robot Control – mxautomation J. Braumann 2015]
Reading sources: 1.Johannes Braumann, Sigrid Brell-Cokcan, Adaptive Robot Control (ARC ) Note: buil ...
- Reading Notes : 180215 计算机系统
读书<计算机组成原理>,<鸟哥的Linux私房菜 基础篇>百度百科,内容摘自<计算机组成原理>,<鸟哥的Linux私房菜 基础篇> 计算机系统 在前面几 ...
- Evolutionary Computing: [reading notes]On the Life-Long Learning Capabilities of a NELLI*: A Hyper-Heuristic Optimisation System
resource: On the Life-Long Learning Capabilities of a NELLI*: A Hyper-Heuristic Optimisation System ...
- Effective Objective-C 2.0 Reading Notes
1. Literal Syntax NSString *someString = @"Effective Objective-C 2.0"; NSNumber *someNumbe ...
- today reading notes
paminit manager from upstart to systemd/systemctl;Vivid Vervet + openStack kilo;为容器开发者(OpenStack工作环 ...
随机推荐
- Microsoft Windows Scripting Self-Paced Learning Guide
http://www.mums.ac.ir/shares/hit/eduhit/book/windowsscripting.pdfhttp://support.microsoft.com/kb/926 ...
- Tjoi2016&Heoi2016 字符串
传送门 另一个传送门 终于把心头大恨切掉了……后缀自动机大法好,从此抛弃后缀数组哈哈……(说的跟你会写后缀数组似的 好像网上的题解大多都是后缀数组?看了看表示理解不能,那我这份后缀自动机的题解就写详细 ...
- mongoDB (mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
MongoDB - 简介 官网:https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储 ...
- 09_dubbo服务发布原理
[ 启动服务的日志分析 ] 1.暴露本地服务 Export dubbo service com.alibaba.dubbo.demo.DemoService to local registry, du ...
- lua中使用table实现类和继承
--因为只有当读写不存在的域时,才会触发__index和__newindex classA = {className = "classA",name="classAIns ...
- content provider其中操作文件的函数
此类函数还是有杀伤力的 1.openAssetFile(Uri uri, String mode)This is like openFile(Uri, String), but can be impl ...
- QML Delegate中访问该持有者的方式 附加属性(转载)
http://blog.csdn.net/yuxiaohen/article/details/17226971 用法很奇葩记录一下,实测可以,用于弱化delegate与持有者的依赖 delegat ...
- Azure DocumentDB 正式发布
DocumentDB 简介 一种 NoSQL JSON 数据库 Azure DocumentDB 提供完全托管的 NoSQL 数据库服务,高度可用,自动缩放,开发简易,可以加速并预测性能.它适合诸如 ...
- @vue-cli3配合element和scss打包的配置
@vue-cli3配合element和scss打包的配置 标签(空格分隔): Vue 使用@vue-cli3初始化项目,且使用ElementUI,然后按照官方文档自定义主题. 自己的scss全局变量文 ...
- posix进程间的通信
1.无名管道 1.1管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 只能用于父子进程或者兄弟进程之间( ...