【计算机基础】 --- 冯·诺依曼结构与哈佛结构

简介: 【计算机基础】 --- 冯·诺依曼结构与哈佛结构

冯·诺依曼结构(von Neumann architecture)

  冯·诺依曼结构也称作普林斯顿结构,是一种将程序(指令序列的集合)和数据存放在同一存储器的不同地址的电脑设计概念结构。这是建立在冯·诺依曼原理,即程序可看做一种特殊的“数据”,同样地可以被处理和存储,故两者可存放在同一存储器中,采用单一的地址总线和数据总线。

特点:

第一,程序和数据存放在同一存储器的不同地址上;

第二,存储单元线性排列,且其位数固定;

第三,顺序执行,即程序/数据—>内存—>取指令执行指令;

  顺序执行程序。执行前,将需要的程序和数据先放入存储器(PC为内存)。当执行时把要执行的程序和要处理的数据按顺序从存储器中取出指令一条一条地执行,称作顺序执行程序。

第四,组成上有运算器,存储器,控制器,输入/输出设备。如下图:

  冯·诺依曼体系结构的特点决定了它可以最大限度地利用资源。怎么理解呢?你数据和程序放在同一个地方,不用花销太多的资源就能取到数据和程序。这也算是冯氏结构的一大优点吧。可是由于程序和数据存放在同一存储区,存取程序和数据间时共享同一总线,导致了冯·诺依曼瓶颈。

 

哈佛结构

  与冯氏结构相对的是哈佛结构,即将程序和数据分开存储的结构。其过程CPU首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度。如下图:

  联系冯氏结构的瓶颈,我们很快能想到哈佛结构能够完成指令和数据的并发操作,减轻了程序运行时的访存瓶颈,也就是提高吞吐量,是一种并行结构;而冯氏结构只能是顺序操作,是一种串行的处理方式。原始的冯·诺依曼体系结构,通过引入流水线技术(Pipeline)提高吞吐量。

  流水线技术与并行处理有所区别,流水线是在顺序指令流计算机中实现处理时间重叠的技术。流水线的并行处理是指完成对一条指令的不同操作(取指令、解码指令、执行指令)的各个部件在时间上是可以同时重叠工作(三级流水线)。CPU是按照取指令、解码指令、执行指令来完成一条指令的操作,当CPU取完第一条指令后,接着解码第一条指令,同时CPU取第二条指令,该步完成后,CPU执行第一条指令,同时解码第二条指令、取第三条指令,如此重叠操作。

  因此,各部件同时处理是针对不同指令而言的,各部件分别同时为多条指令的不同部分(step、stage)进行工作,以提高各部件的利用率来提高指令的平均执行速度。但是这样虽然提高了系统的速率,由于流水线结构使得不容易计算程序运行的时间,对一些时序要求很严的情况,该结构还是存有弊端的。所以在一些实时性很强的嵌入式系统采用哈佛结构可以高速数据处理,同时读取指令和数据,大大提高了数据吞吐率,保证了系统的可靠性。

相关文章
学习计算机组成原理------第四天
这篇文章是关于计算机组成原理的学习笔记,但提供的内容摘要主要是关于CSDN平台的余额抵扣说明,并没有具体涉及计算机组成原理的学习内容。
学习计算机组成原理------第四天
|
4月前
|
C语言 C++
学习计算机组成原理------第五天
文章分享了作者短期和长期的学习目标,包括在三个月内学完C语言、入门C++并尝试编写小游戏,六个月内掌握计算机网络、计算机组成原理和操作系统知识,并根据实际情况决定是考研还是找工作。
学习计算机组成原理------第五天
学习计算机组成原理------第三天
这篇文章是关于学习计算机组成原理。
学习计算机组成原理------第三天
|
4月前
|
存储
学习计算机组成原理------第六天
这篇文章深入探讨了计算机组成原理中的数值表示,包括原码、补码和移码的概念及其在数值计算和存储中的作用,同时总结了逻辑移位和算术移位的相关知识。
学习计算机组成原理------第六天
|
安全 Java 程序员
今天是1024节日,作为一个程序员,我想表达我对Java和詹姆斯·高斯林(James Gosling)的感激之情
今天是1024节日,作为一个程序员,我想表达我对Java和詹姆斯·高斯林(James Gosling)的感激之情。Java是一门伟大的编程语言,而詹姆斯·高斯林是它的创造者之一。 首先,我要感谢Java这个强大而多用途的编程语言。Java不仅具有广泛的适应性,可以应用于各种领域和平台,还拥有丰富的类库和工具生态系统。Java的面向对象特性使得代码的编写、维护和重用更加简单和灵活。同时,Java的平台无关性也为开发人员提供了更大的自由度,使得开发的应用程序可以在不同的操作系统上运行。
74 0
|
7月前
|
测试技术
牛客刷题·组队竞赛·进制转换·连续最大和
牛客刷题·组队竞赛·进制转换·连续最大和
38 0
|
算法 程序员
计算机发展史之阿达·洛芙莱斯
你一定想不到世界上最早的程序员竟然是一位女士,而且还有专门的编程语言为了纪念她而命名,她就是阿达·洛芙莱斯(Ada Lovelace) 奥古斯塔·阿达·拜伦是她的原名,因为嫁给威廉·金后晋封为洛芙莱斯伯爵,而后改的名字。她不仅是数学家(被誉为数字女王)、翻译家(正是翻译才结识到巴贝奇)还是英国大诗人乔治·戈登·拜伦的女儿,更是世界上公认的第一个程序员。 为什么她是世界公认的第一位程序员?她身上又发生了哪些传奇的故事? 今天让我们走进她的一生吧~
298 0
|
存储 Java Unix
故事从冯·诺依曼说起——计算机体系结构发展史(一)
故事从冯·诺依曼说起——计算机体系结构发展史(一)
131 0
|
存储 数据安全/隐私保护