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

article/2025/8/30 6:38:14

目录

一、哈佛结构

二、冯·诺伊曼结构

三、哈佛结构和冯·诺伊曼结构对比


 

一、哈佛结构

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

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

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

       目前使用哈佛结构的中央处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11。大多数DSP是哈佛结构的。

  哈佛体系指令时序如下:

  

二、冯·诺伊曼结构

       

冯·诺依曼结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构;

冯.诺伊曼结构(von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。该结构隐约指导了将储存装置与中央处理器分开的概念,因此依该结构设计出的计算机又称储存程式型电脑。

       最早的计算机器仅内涵固定用途的程式。现代的某些计算机依然维持这样的设计方式,通常是为了简化或教育目的。例如一个计算器仅有固定的数学计算程式,它不能拿来当作文书处理软件,更不能拿来玩游戏。若想要改变此机器的程式,你必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计的那个可编程化。当时所谓的“重写程式”很可能指的是纸笔设计程式步骤,接着制订工程细节,再施工将机器的电路配线或结构改变。

       而储存程式型电脑的概念改变了这一切。借由创造一组指令集结构,并将所谓的运算转化成一串程式指令的执行细节,让此机器更有弹性。借着将指令当成一种特别型态的静态资料,一台储存程式型电脑可轻易改变其程式,并在程控下改变其运算内容。冯·诺伊曼结构储存程式型电脑是互相通用的名词,其用法将于下述。而哈佛结构则是一种将程式资料与普通资料分开储存的设计概念,但是它并未完全突破冯.诺伊曼架构。

       储存程式型概念也可让程式执行时自我修改程式的运算内容。本概念的设计动机之一就是可让程式自行增加内容或改变程式指令的内存位置,因为早期的设计都要使用者手动修改。但随着索引暂存器与间接位置存取变成硬件结构的必备机制后,本功能就不如以往重要了。而程式自我修改这项特色也被现代程式设计所弃扬,因为它会造成理解与除错的难度,且现代中央处理器的管线与快取机制会让此功能效率降低。

       从整体而言,将指令当成资料的概念使得组合语言、编译器与其他自动编程工具得以实现;可以用这些“自动编程的程式”,以人类较易理解的方式编写程式;从局部来看,强调I/O的机器,例如Bitblt,想要修改画面上的图样,以往是认为若没有客制化硬件就办不到。但之后显示这些功能可以借由“执行中编译”技术而有效达到。

       此结构当然有所缺陷,除了下列将述的冯·诺伊曼瓶颈之外,修改程式很可能是非常具伤害性的,无论无意或设计错误。在一个简单的储存程式型电脑上,一个设计不良的程式可能会伤害自己、其他程式甚或是操作系统,导致当机。缓冲区溢位就是一个典型例子。而创造或更改其他程式的能力也导致了恶意软件的出现。利用缓冲区溢位,一个恶意程式可以覆盖呼叫堆栈(Call stack)并覆写程式码,并且修改其他程式档案以造成连锁破坏。内存保护机制及其他形式的存取控制可以保护意外或恶意的程式码更动。大多数CPU和GPU是冯诺依曼结构的。

冯·诺依曼指令时序如下:

  

三、哈佛结构和冯·诺伊曼结构对比

       区别:
      冯诺依曼结构采用指令和数据统一编址,使用同一条总线传输,CPU读取指令和数据的操作无法重叠。
哈佛结构采用指令和数据独立编址,使用两条独立的总线传输,CPU读取指令和数据的操作可以重叠。
        利弊:
        冯诺依曼结构主要用于通用计算机领域,需要对存储器中的代码和数据频繁的进行修改,统一编址有利于节约资源。早起的微处理器大多采用冯·诺依曼结构,最典型的就是intel的x86微处理器,取指令和取操作数都是在同一总线上,通过分时复用的方式进行,优点是硬件简单,但是缺点是在告诉运行时,不能达到同时取指令和取操作数,从而会形成传输过程的瓶颈。

         哈佛结构主要用于嵌入式计算机,程序固化在硬件中,有较高的可靠性、运算速度和较大的吞吐量。哈佛总线技术以DSP和ARM为代表的,采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,在硬件上也是分开的,这就允许同时取指令和取操作数,也就是比冯结构快一步,从而大大提高运算能力,例如最常见的运算中,一条指令同时可以取两个操作数,在流水线处理时,同时还有一个取指令操作,冯式结构就需要先取指令,再取操作数,而哈佛结构则允许同时运行,取指令同时,直接取操作数,而且可以取完操作数后,直接取下一条指令,这样不会出现取指令和取操作数重叠执行的情况,效率大大提高。

 

 

 

 

 


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

相关文章

哈佛架构和冯诺依曼架构

一、两种架构的介绍 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…

dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少(示例代码)...

算法实现步骤&#xff1a; a.初始时&#xff0c;只包括源点&#xff0c;即S {v}&#xff0c;v的距离为0。U包含除v以外的其他顶点&#xff0c;即&#xff1a;U {其余顶点}&#xff0c;若v与U中顶点u有边&#xff0c;则(u,v)为正常权值&#xff0c;若u不是v的出边邻接点,则(u,v…

dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少

算法实现步骤&#xff1a; a.初始时&#xff0c;只包括源点&#xff0c;即S {v}&#xff0c;v的距离为0。U包含除v以外的其他顶点&#xff0c;即&#xff1a;U {其余顶点}&#xff0c;若v与U中顶点u有边&#xff0c;则(u,v)为正常权值&#xff0c;若u不是v的出边邻接点,则(u,v…