冯诺依曼结构和哈佛结构

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

参考资料:
全面理解冯诺依曼结构和哈佛结构
CPU采用的是哈佛结构还是冯诺依曼结构?


0. 前言

哈佛结构和冯诺依曼结构都是针对于CPU来说的。

1. 冯诺依曼结构

冯诺伊曼结构又称为普林斯顿体系结构,是一种将程序存储器数据存储器合并在一起的处理器架构设计,使用同一个存储器,经由同一个总线传输。由于取指令和存取数据要从同一个存储空间存取,并经同一总线传输,无法重叠执行,只能step by step,因此影响了数据处理速度的提高。冯诺伊曼结构处理器具有以下特点:

  • 必须有一个存储器;

  • 必须有一个控制器;

  • 必须有一个运算器(算术运算与逻辑运算);

  • 必须有输入输出设备(人机通信)。

在这里插入图片描述
在这里插入图片描述
冯诺依曼结构中不独立区分程序和数据空间,处理器只有一套总线,即程序和数据空间共用地址和数据总线,取指令和取数据不能同时进行。

早期的微处理器大多采用冯·诺依曼结构,如:英特尔公司的8086,英特尔公司的其他中央处理器,ARM的ARM7,MIPS公司的MIPS处理器。其中,典型代表是Intel公司的X86微处理器,广泛用于桌面端(台式/笔记本/服务器/工作站等)。

2. 哈佛结构

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,例如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。哈佛结构处理器具有如下特点:

  • 程序存储器与数据存储器分开。
  • 提供了较大的存储器带宽,各自有自己的总线。
  • 适合于数字信号处理。

在这里插入图片描述
在这里插入图片描述
哈佛结构的出现是为了减轻程序运行时的访存瓶颈,哈佛架构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令。

哈佛结构中程序空间和数据空间是独立的,具有各自独立的地址线和数据总线,即处理器有两套总线,一套是程序存储器的数据和地址总线,一套是数据存储器的数据和地址总线。取址和取数据能并发进行

目前使用哈佛架构的中央处理器和微控制器有很多,有 Microchip公司的PIC系列芯片、摩托罗拉公司的MC68系列、Zilog公司的Z8系列、Atmel公司的AVR系列和ARM公司的ARM9、ARM10和ARM11,自ARM11以后,ARM公司的内核均以Cortex命名。

3. 改进的哈佛结构

改进的哈佛结构使用两个独立的存储器模块(程序存储器和数据存储器),处理器只有一套总线,分时访问程序存储器和数据存储器,但是在处理器中有指令cache和数据cache将程序和数据分开(冯诺依曼结构中没有指令cache和数据cache),所以处理器仍然可以并步执行取指令和取数据,从这点看处理器仍然属于哈佛结构。

改进型哈佛结构是在普通哈佛结构的基础上加上独立的缓冲区cache, 虽然处理器只有一套总线,但由于cache的存在,CPU直接访问的是cache而cache又分为指令cache和数据cache,这两个cache是独立的,所以可以同时访问指令和数据,也就是说能够并行运行

从ARM9开始以后所有的ARM处理器内核都是改进型的哈佛结构

4. 总结

哈佛结构和冯诺依曼结构的主要区别就是处理器能不能实现取指令和取数据的并发进行程序空间和数据空间是否是一体

  • 冯·诺依曼结构:冯·诺依曼结构中,取指令与取操作数都在同一条总线上,总线结构简单,所以成本也低,早期该结构的处理器能迅速抢占市场。但也是因为取指令与取操作数都在同一条总线上,只能通过分时复用进行,所以在高速运行时,不能达到同时取指令与取操作数,从而造成传输过程的瓶颈。
  • 哈佛结构:哈佛结构具有复杂而又强大的总线结构,其芯片内部程序空间和数据空间是分开的,可以同时取指令与取操作数,数据吞吐率高,运算速度更快。但是设计实现复杂,成本较高。
  • 改进型的哈佛结构:改进型的哈佛结构结合了两者的长处,将其融合到一起,实现了优化。

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

相关文章

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

哈佛结构 (英语: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…

图的最短路径——DIJ算法,有向图的矩阵实现,图的基本操作

图是一种非常重要的数据结构&#xff0c;在研究从一点出发到各个顶点的最短距离。 实验目的 1. 掌握图的基本概念、表示方法、遍历方法。 2. 掌握图的最短路径算法。 实验要求 1&#xff0e; 输入图的顶点数n&#xff08;不超过10个&#xff09;、边数m&#xff0c;顶点分…

堆优化dij

模板 【算法介绍】 用一个优先级队列来记录点和dis值&#xff0c;按照顺序进行边的松弛即可 1.农场派对 【题意】 有向图&#xff0c;求1-n所有点中到x点一去一回的最短路的最大值 【分析】 建立原图和反图&#xff0c;以x为源点跑两次dijkstra&#xff0c;对于1-n每个点…

图中的搜索——dij

Dijkstra(迪杰斯特拉算法)常常用于求解图中的单点最短路径问题。其主要实现方法可拆分为两个步骤&#xff1a;①更新距离信息②找出当前最小路径 如下图所示&#xff0c;要求求出1结点到6结点的最短路径。 我们可以先定义一下重点内容&#xff1a; 邻接矩阵map[i][j]&#xf…