哈佛结构和冯诺依曼结构

article/2025/8/30 6:42:15

已剪辑自: https://zhuanlan.zhihu.com/p/136748306

三分钟带你了解冯.诺依曼结构

1946年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家:冯.诺依曼提出了计算机“存储程序”的计算机设计理念,即将计算机指令进行编码后存储在计算机的存储器中,需要的时候可以顺序地执行程序代码,从而控制计算机运行,这就是冯.诺依曼计算机体系的开端。

一.冯.诺依曼结构的灵魂

早期的计算机是由各种门电路组成的,这些门电路通过组装出一个固定的电路板,来执行一个特定的程序,一旦需要修改程序功能,就要重新组装电路板,所以早期的计算机程序是硬件化的

然而,祖师爷的出现将最初的硬件化程序变为可编程、可存储编码,放在存储器中,随意使用,下面大体介绍一下冯.诺依曼结构的灵魂。

要知道,早期的计算机设计中,程序和数据是俩个截然不同的概念,数据放在存储器中,而程序作为控制器的一部分,这样的计算机计算效率低,灵活性较差。冯.诺依曼结构中,将程序和数据一样看待,将程序编码为数据,然后与数据一同存放在存储器中,这样计算机就可以调用存储器中的程序来处理数据了。意味着,无论什么程序,最终都是会转换为数据的形式存储在存储器中,要执行相应的程序只需要从存储器中依次取出指令、执行,冯.诺依曼结构的灵魂所在正是这里:减少了硬件的连接,这种设计思想导致了硬件和软件的分离,即硬件设计和程序设计可以分开执行!!!这就催生了程序员这个职业的诞生!!!

概括的来讲,冯.诺依曼结构消除了原始计算机体系中,只能依靠硬件控制程序的状况(程序作为控制器的一部分,作为硬件存在),将程序编码存储在存储器中,实现了可编程的计算机功能,实现了硬件设计和程序设计的分离,大大促进了计算机的发展。

灵魂就是将程序从硬件实现转换为软件实现(存储程序控制原理)!!!

计算机的基本工作原理就是:存储程序控制原理!

二.冯.诺依曼结构的核心设计思想

核心设计思想主要体现在如下三个方面:

  • 程序、数据的最终形态都是二进制编码,程序和数据都是以二进制方式存储在存储器中的,二进制编码也是计算机能够所识别和执行的编码。(可执行二进制文件:.bin文件)
  • 程序、数据和指令序列,都是事先存在主(内)存储器中,以便于计算机在工作时能够高速地从存储器中提取指令并加以分析和执行。
  • 确定了计算机的五个基本组成部分:运算器、控制器、存储器、输入设备、输出设备

三.冯诺依曼结构的五个主要组成部分

冯.诺依曼在秘密开发的 EDVAC 写了一篇报告First Draft of a Report on the EDVAC,描述了他心目中的一台计算机应该长什么样。这篇报告在历史上有个很特殊的简称,叫First Draft,翻译成中文,其实就是《第一份草案》。这样,现代计算机的发展就从祖师爷写的一份草案开始了。

First Draft里面说了一台计算机应该有哪些部分组成,我们一起来看看。

冯.诺依曼确定了”计算机结构“中的5大部件:

  • 运算器
  • 控制器
  • 存储器
  • 输入设备
  • 输出设备

现在看来,运算器和控制器单元集成在CPU中实现,存储器的容量不断扩大、输入输出设备不断更新,这些部件构成了当代计算机硬件系统的基本组成。

img

我们手机里只有 SD 卡(Secure Digital Memory Card)这样类似硬盘功能的存储卡插槽,并没有内存插槽、CPU 插槽这些东西。没错,因为手机尺寸的原因,手机制造商们选择把 CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上。这种方式叫SoC,也就是 System on a Chip(系统芯片)。

1.运算器

首先计算机要有运算处理数据的能力,所以需要一个处理单元来完成各种算数运算和逻辑运算,这就是算术逻辑单元(Arithmetic Logic Unit,ALU)。ALU的主要功能就是在控制信号的作用下,完成加、减、乘、除等算术运算以及与、或、非、异或等逻辑运算以及移位、补位等运算。

运算器的主要部件就是ALU,运算器的处理对象是数据,所以数据的长度以及数据的表示方法,对运算器的影响很大。大多数通用计算机是以16、32、64位数据作为运算器一次处理数据的长度。能够对一个数据的所有位同时处理运算器称为并行运算器,一次只能对数据的一个位处理的运算器称为串行运算器。

运算器与其他部分的关系:

计算机运算时,运算器的操作对象和操作种类由控制器决定。运算器操作的数据从内存中读取,处理的结果再写入内存(或者暂时存放在内部寄存器中),而且运算器对内存数据的读写是由控制器来进行的。

2.控制器

控制器又称为控制单元(Control Unit),是计算机的神经中枢和指挥中心,只有在控制器的控制下,整个计算机才能够有条不紊地工作、自动执行程序。

控制器的工作流程为:从内存中取指令、翻译指令、分析指令,然后根据指令的内存向有关部件发送控制命令,控制相关部件执行指令所包含的操作。

控制器和运算器共同组成中央处理器(Central Processing Unit),CPU是一块超大规模集成电路,是计算机运算核心和控制核心,CPU的主要功能是解释计算机指令以及处理数据。

3.存储器

存储器的主要功能是存储程序和各种数据,并且能够在计算机运行过程高速、自动地完成程序或者数据的存储,存储器是有记忆的设备,而且采用俩种稳定状态的物理器件来记录存储信息,所以计算机中的程序和数据都要转换为二进制代码才可以存储和操作。

存储器可以分为内部存储器(内存)和外部存储器,俩者在计算机系统中各有用处,下面大概介绍一下俩种存储器的特点:

Ⅰ.内部存储器

内部存储器称为内存或者主存,是用来存放欲执行的程序和数据。

在计算机内部,程序和数据都是以二进制代码的形式存储的,它们均以字节为单位(8位)存储在存储器中,一个字节占用一个存储单元,并且每个存储单元都有唯一的地址号。

这里以字节(8位)为存储单元,就与上面运算器的操作数据的大小联系起来了,16、32、64都是8的倍数

CPU可以直接使用指令对内部存储器按照地址进行读写俩种操作,读:将内存中某个存储单元的内容读出,送入CPU的某个寄存器中;写:在控制器的控制下,将CPU中某寄存器内容传到某个存储单元中。

要注意,内存中的数据和地址码都是二进制数,但是俩者是不同的,一个地址可以指向一个存储单元,地址是存储单元的位置,数据是存储单元的内容,数据可以是操作码、可以是CPU要处理阿数据、也可以是数据的地址,地址码的长度由内存单元的个数确定。

内存的存取速度会直接影响计算机的运算速度,由于CPU是高速器件,但是CPU的速度是受制于内存的存取速度的,所以为了解决CPU和内存速度不匹配的问题,在CPU和内存直接设置了一种高速缓冲存储器Cache。 Cache是计算机中的一个高速小容量存储器,其中存放的是CPU近期要执行的指令和数据,其存取速度可以和CPU的速度匹配,一般采用静态RAM充当Cache

内存按工作方式的不同又可以分为俩部分:

RAM:随机存储器,可以被CPU随机读取,一般存放CPU将要执行的程序、数据,断电丢失数据

ROM:只读存储器,只能被CPU读,不能轻易被CPU写,用来存放永久性的程序和数据,比如:系统引导程序、监控程序等。具有掉电非易失性。

Ⅱ.外部存储器

外部存储器主要来存放”暂时“用不着的程序和数据,可以和内存交换数据。

一般是磁盘、光盘、U盘、硬盘等。

4.输入输出设备

实际上我们操作计算机都是与输入输出设备在打交道。

鼠标键盘是输入设备、显示器是输出设备;

手机触摸屏即时输入设备又是输出设备;

服务器中网卡既是输入设备又是输出设备;

所有的计算机程序都可以抽象为输入设备读取信息,通过CPU来执行存储在存储器中的程序,结果通过输出设备反馈给用户。

更多的技术文章可以移步到博客中查看哦:https://blog.csdn.net/qq_43743762


冯·诺依曼结构

冯·诺依曼结构(von Neumann architecture)又称作普林斯顿体系结构(Princetion architecture)。冯·诺依曼结构的处理器使用同一个存储器,经由同一个总线传输。冯·诺依曼结构处理器具有以下几个特点:

  • 必须有一个存储器;
  • 必须有一个控制器;
  • 必须有一个运算器,用于完成算术运算和逻辑运算;
  • 必须有输入和输出设备,用于进行人机通信。

img

哈佛结构

哈佛结构是一种将程序指令存储数据存储分开的存储器结构,如下图所示。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。

img

哈佛体系结构框图

哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。

哈佛结构是指程序和数据空间独立的体系结构, 目的是为了减轻程序运行时的访存瓶颈。

哈佛结构能基本上解决取指和取数的冲突问题。

冯·诺依曼体系和哈佛总线体系的区别

二者的区别就是程序空间和数据空间是否是一体的。冯·诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。

哈佛总线技术应用是以DSP和ARM为代表的。采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,这就允许同时取指和取操作数,从而大大提高了运算能力。

DSP芯片硬件结构有冯·诺依曼结构和哈佛结构,两者区别是地址空间和数据空间分开与否。一般DSP都是采用改进型哈佛结构,就是分开的数据空间和地址空间都不只是一条,而是有多条,这根据不同的生产厂商的DSP芯片有所不同。在对外寻址方面从逻辑上来说也是一样,因为外部引脚的原因,一般来说都是通过相应的空间选取来实现的。本质上是同样的道理。

改进型的哈佛结构与哈佛体系结构差别

与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点:

(1).使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;

(2).使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。

后来,又提出了改进的哈佛结构,其结构特点为:

(1).使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;

(2).具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输;

(3).两条总线由程序存储器和数据存储器分时共用。

img


MCS-51单片机有着嵌入式处理器经典的体系结构,这种体系结构在当前嵌入式处理器的高端ARM系列上仍然在延续,这就是哈佛结构。相对于大名鼎鼎的冯·诺依曼结构,哈佛结构的知名度显然逊色许多,但在嵌入式应用领域,哈佛结构却拥有着绝对的优势。哈佛结构与冯·诺依曼结构的最大区别在于冯·诺依曼结构的计算机采用代码与数据的统一编址,而哈佛结构是独立编址的,代码空间与数据空间完全分开

通用计算机系统中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占有的存储器进行重新分配,这种情况下,冯·诺依曼结构占有绝对优势,因为统一编址可以最大限度地利用资源,而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生理论上最大可达50%的浪费,这显然是不合理的。

但是在嵌入式应用中,系统要执行的任务相对单一,程序一般是固化在硬件里。当然这时使用冯·诺依曼结构也完全可以,代码区和数据区在编译时一次性分配好了而已,但是其灵活性得不到体现,所以除了如英特尔公司的8086,英特尔公司的其他中央处理器,现在大量的单片机也还在沿用冯·诺依曼结构,ARM公司的ARM7、MIPS公司的MIPS处理器、TI的MSP430系列、Freescale的HCS08系列等。

那是为什么说哈佛结构有优势呢?嵌入式计算机在工作时与通用计算机有着一些区别:嵌入式计算机在工作期间的绝大部分时间是无人值守的,而通用计算机工作期间一般是有人操作的;嵌入式计算机的故障可能会导致灾难性的后果,而通用计算机一般就是死死机,重新启动即可。这两点决定了对嵌入式计算机的一个基本要求:可靠性

使用冯·诺依曼结构的计算机,程序空间不封闭,期程序空间的数据在运行期理论上可以被修改,此外程序一旦跑飞也有可能运行到数据区。虽然都是一些不常见的特殊情况下,但是看看哈佛结构德计算机在这些情况下是怎样的:基于哈佛结构的处理器入MCS-51,不需要可以对代码段进行写操作的指令,所以不会有代码区被改写的问题;程序只能在封闭的代码区中运行,不可能跑到数据区,这也是跑飞的几率减少并且跑飞后的行为有规律(数据区的数据是不断变化的而代码区是不变的)。Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11,51单片机也属于哈佛结构

所以,相对于冯·诺依曼结构,哈佛结构更加适合于那些程序固化、任务相对简单的控制系统

总结

冯.诺依曼指出:程序只是一种(特殊)的数据,它可以像数据一样被处理,因此可以和数据一起被存储在同一个存储器中——这就是著名的冯.诺依曼原理。注意:数据总线和地址总线共用。

哈佛结构:

哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。与两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,使数据的吞吐率提高了1倍。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠。CPU首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。


http://chatgpt.dhexx.cn/article/U2tTAjiF.shtml

相关文章

冯·诺依曼、哈佛、改进型哈佛体系结构解析

在如今的CPU中,由于Catch的存在,这些概念已经被模糊了。个人认为去区分他们并没有什么意义,仅作为知识点。 哈佛结构设计复杂,但效率高。冯诺依曼结构则比较简单,但也比较慢。CPU厂商为了提高处理速度,在C…

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

目录 一、哈佛结构 二、冯诺伊曼结构 三、哈佛结构和冯诺伊曼结构对比 一、哈佛结构 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存…

哈佛架构和冯诺依曼架构

一、两种架构的介绍 1.哈佛结构是一种将程序指令的存储与数据的存储分开的存储器结构。首先,CPU在程序指令存储器中读取程序指令内容,解码后获得数据地址,然后在相应的数据存储器中读取数据,并进行下一步操作。指令存储和数据存储…

2021-05-28

嵌入式--深入理解单片机(一)单片机程序是如何运行起来的以及单片机的ROM和RAM 目录 一、两种处理器的结构体系 1、哈佛结构体系(Harvard architecture)2、冯诺依曼结构体系3、两种结构的总结 哈佛结构的优势冯诺依曼结构的优势当前…

冯诺依曼结构和哈佛结构

参考资料: 全面理解冯诺依曼结构和哈佛结构 CPU采用的是哈佛结构还是冯诺依曼结构? 0. 前言 哈佛结构和冯诺依曼结构都是针对于CPU来说的。 1. 冯诺依曼结构 冯诺伊曼结构又称为普林斯顿体系结构,是一种将程序存储器和数据存储器合并在一起…

哈佛结构和冯·诺依曼结构的区别

哈佛结构 (英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作&#xff08…

~isnan函数

一直不明白~的意思,现在实现一把 才知道表示非的意思

isNaN函数的使用方法

isNaN() 函数用于检查其参数是否是非数字值。

c 语言isnan函数,_isnan, _isnanl

_isnan, _isnanl:判断浮点数为 NAN (不是数,Not a Number) int _isnan(double x); int _isnanl(long double x); #include std x:浮点数 ≠0: 参数 x 是 NAN 0: 参数 x 不是 NAN void __fastcall TForm1::Button1Click(TObject *Sender) { d…

JavaScript中的isNaN函数

在ECMAScript中有一个isNaN()函数,再说这个函数之前,会先说一下NaN: (1)NaN:非数值(not a number),是一个特殊的数值,用来表示本来要返回数值的操作数未返回数值的情况。在ECMAScript中&#xf…

Spring学习---(一)原理理解-llt

Spring学习—(一)原理理解-llt 1.IOC控制反转: ​ 由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴…

matlab lltsa函数,【每日一策】Matlab量化交易策略之 LLT原始

策略思路: LLT择时模型,低延迟趋势线,利用最近20个LLT指标数值,大部分LLT呈现上涨(斜率为正),做多;大部分下跌(斜率为负),做空;反向出场。 回测曲线(由Auto-Trader提供回测报告)&…

matlab lltsa函数,带平方根的(LLT)Cholesky算法分解对称正定矩阵 c语言实现 - 数学 - 小木虫 - 学术 科研 互动社区...

xiuyouxu 建议找一本数值分析的书看一下,里面有具体的算法,我以前实现过,其他语言的,没有用c语言做过. 舒马诺 引用回帖: xiuyouxu at 2012-05-03 21:28:11: 建议找一本数值分析的书看一下,里面有具体的算法,我以前实现过,其他语言的,没有用c语言做过. # include # include v…

python 趋势线计算式_LLT指标-低延迟趋势线对中证500的python复现过程

大家好,我是上海大侠 看了半个小时的研报和视频,对具体实现过程含糊其辞,表述不清,模糊重点,甚至还有多处写错 本着知识开源的想法,我将我的探索过程公开,以期给同样在这条路上摸索的朋友节省一点走弯路的力气 废话先不多讲,我是个喜欢在本地数据上运行代码的男人,因为…

根据《LLT低延迟趋势线与交易性择时 短线择时策略研究》的python模型 策略开发

《低延迟趋势线与交易性择时短线择时策略研究》  传统移动平均线(MA)的缺点 移动平均线(MA)是技术分析中常用的一类趋势跟踪指标,其可以在一定程度上刻画股票价格或指数的变动方向。MA 的计算天数越多,平…

解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

目录 1. 前言 1.1 为什么要进行矩阵分解? 1.2 矩阵与矩阵分解的几何意义? 2. LU三角分解 3. Cholesky分解 — LDLT分解 4. Cholesky分解 — LLT分解 5. QR分解 6. 奇异值分解 7. 特征值分解 本文转自大佬博客:https://blog.csdn.ne…

基于gtest、mockcpp写C++LLT测试入门级教程

一、googletest 下载地址:https://github.com/google/googletest 编译googletest: 在根目录下执行 cmake . make 编译出的libgtest.a后面用 注意:有可能编译会失败,是gtest需要C11以上 可以在顶级的CMakeList.txt里加入 set(CMAKE_CXX_STA…

量化策略分享 | MA超进化:LLT低延迟趋势线

移动平均线(MA)是我们技术分析中常用的一种趋势跟踪指标,但在使用的时候你是否也会有这样的烦恼:交易信号延迟太久,或者交易信号太频繁了!延迟性和平滑性问题似乎是不可兼得的“鱼和熊掌”。 针对这个问题&…

LLT-发现股市中的“大浪”

引言: 股市中小的波动经常干扰股票投资人对大趋势的判断,倘若股市的波动同信号波动类似,那是不是可以用处理信号的方式处理股票波动发现大的波动呢?我们知道通信领域在处理信号波动时也常会遇到被噪音干扰的问题,这些噪…

HDU2544 最短路dij

纯最短路。 1 ///HDU 2544堆优化的最短路2 #include <cstdio>3 #include <iostream>4 #include <sstream>5 #include <cmath>6 #include <cstring>7 #include <cstdlib>8 #include <string>9 #include <vector>10 #include &l…