CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?

《嵌入式工程师自我修养/C语言》系列——CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?

  • 一、CPU内部结构及工作原理
    • 1.1 CPU的结构
    • 1.2 CPU工作流程举例
  • 二、计算机体系结构
    • 2.1 冯·诺依曼架构
    • 2.2 哈弗架构
  • 三、总结

快速学习嵌入式开发其他基础知识?>>>>>>>>> 返回专栏总目录 《嵌入式工程师自我修养/C语言》<<<<<<<<<

Tip📌:鼠标悬停双虚线关键词/句,可获得更详细的描述

一、CPU内部结构及工作原理

1.1 CPU的结构

  CPU内部构造很简单,宏观上划分为算术逻辑运算单元、控制单元和存储单元。程序代码存储在内部存储器(内存)中,CPU可以从内存中一条一条地取指令、翻译指令并执行它。

RAM、ROM、DRAM、SRAM、Flash、EMMC傻傻分不清?建议先阅读:>>>>>> 一文帮你快速区分常用存储器!<<<<<<

算术逻辑单元(Arithmetic and Logic Unit,ALU):由算术单元和逻辑单元组成(他俩分别负责加、减、乘等数学运算以及与、或、非等逻辑运算),是处理器最核心的部件。ALU只是纯粹的运算单元,要想完成一个指令运行的整个流程,还需要控制单元的协助。

控制单元:通俗的讲,该部分会根据程序计数器PC中的地址,会不断地从内存RAM中取指令,放到指令寄存器中并进行译码,将指令中的操作码和操作数分别送到ALU,执行相应的运算。实际上,该单元还可以进一步划分,比如划分为:

  • 指令控制:完成取指令、分析指令、PC自增等操作,然后交给执行单元来执行;
  • 时序控制:主要分为时钟发生器、倍频定义单元,时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,也就是CPU的主频,而倍频定义单元则定义了CPU主频是存储器频率(总线频率)的几倍;
  • 总线控制:控制地址总线、数据总线、控制总线等CPU的内外部总线;
  • 中断控制:控制各种各样的中断请求,并根据优先级的高低对中断请求进行排队,逐个交给CPU处理。

存储单元:主要包括通用寄存器(比如R0、R1. . .)、状态寄存器(CPSR)以及内部cache(缓存)。

  • 通用寄存器:用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果;
  • 状态寄存器:主要有两大功能,第一是存放当前指令执行结果的各种状态或条件码,比如结果是否为负、是否为0、是否进位、是否溢出等;其次就是存放控制信息,比如中断标志位;
  • cache:进行高速数据交换的存储器(为了解决CPU的工作频率与内存访问速度间差异过大导致的性能问题而存在,后文会解释)。

1.2 CPU工作流程举例

  假设通过高级语言编写的一行代码实现的功能是两个整数A、B相加,该程序代码经过编译器编译后,作为机器指令存储在内存RAM中,如下图所示;
在这里插入图片描述
  控制单元通过指令译码电路会将该指令分解为操作码和操作数,再根据操作数地址从内存RAM中加载数据A和B,传送到ALU的输入端,然后将操作运算类型(操作码)即加法也告诉ALU。ALU有了输入数据和操作类型,就可以直接进行相应的运算了,并输出运算结果。

  为了效率考虑,运算结果一般会先保存到寄存器中,然后由控制单元将该数据从寄存器存储(Store)到内存RAM中。至此,一个完整的加法指令执行流程就结束了,控制单元会继续取下一条指令,然后翻译指令、运行指令, 周而复始。

Tips📌:

  • 内存带宽的瓶颈会拖CPU的后腿,影响CPU的性能。为了提高性能,防止RAM拖后腿,CPU一般都会在内部配置一些寄存器,用来保存CPU在计算过程中的各种临时结果和状态值。
  • ALU在运算过程中,当运算结果为0、为负、数据溢出时,会有一些Flags标志位输出,这些标志位对控制单元特别有用,如一些条件跳转指令,其实就是根据运算结果的这些标志位进行跳转的

二、计算机体系结构

  上文提到CPU内部的结构其实很简单,除了ALU、控制单元、寄存器和少量Cache,根本没有多余的空间存放我们编写的代码。因此我们通常将编写的程序(指令序列)存储在额外的内部存储器——内存RAM中(建议先阅读:>>>>>> 一文帮你快速区分常用存储器!<<<<<<)。

  但上文我们也提到,内存带宽瓶颈会影响CPU的性能,于是为了兼顾存储和效率,计算机系统一般会采用内存+外存的存储结构:程序指令保存在诸如磁盘、NAND Flash、SD卡等外部存储器中,当程序运行时,相应的程序会首先加载到内存,然后CPU从内存一条一条地取指令、翻译指令和运行指令。

  计算机主要用来处理数据。我们编写的程序,除了指令,还有各种各样的数据。指令和数据都需要保存在存储器中,根据保存方式的不同,计算机可分为两种不同的架构:冯·诺依曼架构和哈弗架构

2.1 冯·诺依曼架构

  采用冯·诺依曼架构的计算机,其特点是程序中的指令和数据混合存储,存储在同一块存储器的不同物理地址上。

  一般我们会把指令和数据存放到外存储器中,当程序运行时,再把这些指令和数据从外存储器加载到内存储器(内存储器支持随机访问并且访问速度快,这里说的外存储器通常是flash、EMMC等,内存储器指的是RAM,通常为DRAM,再次建议先阅读:>>>>>> 一文帮你快速区分常用存储器!<<<<<<),如下图所示。
在这里插入图片描述
Tips📌:
  由于该架构结构简单,工程上容易实现,所以很多现代处理器都采用这种架构,如X86、ARM7、MIPS等。

2.2 哈弗架构

  采用哈弗架构的计算机,其特点是程序中的指令和数据被分开独立存储,它们分别被存放到程序存储器和数据存储器,如下图所示。
在这里插入图片描述
Tips📌:

  • 每个存储器都独立编址,独立访问,而且指令和数据可以在一个时钟周期内并行访问;
  • 使用该架构的处理器运行效率更高,但缺点是CPU实现会更复杂。8051系列单片机采用的就是哈弗架构。

三、总结

  综上所述,CPU是计算机的核心组件,它负责执行计算机程序中的指令。冯·诺依曼架构和哈弗架构是两种不同的计算机体系结构。

  冯·诺依曼架构的特点是将程序指令和数据存储在同一块内存中,通过一个共享的总线进行数据传输。这种结构的优点是简单易懂,容易实现,广泛应用于现代计算机系统中。而哈弗架构则是将指令和数据分开存储,通过不同的总线进行数据传输,这种结构可以提高计算机的并行处理能力。总的来说,他们都各有优劣,选择哪种架构取决于具体的应用场景和需求。

>>>>>>>>> 返回专栏总目录 《嵌入式工程师自我修养/C语言》<<<<<<<<<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《源代码》:穿越思考的时空之旅

计算机专业必看的几部电影 计算机专业必看的几部电影&#xff0c;就像一场精彩的编程盛宴&#xff01;《黑客帝国》让你穿越虚拟世界&#xff0c;感受高科技的魅力&#xff1b;《社交网络》揭示了互联网巨头的创业之路&#xff0c;《源代码》带你穿越时间解救世界&#xff0c;…

error: src refspec main does not match any解决办法

一、问题描述&#xff1a; 用GitHub Actions自动部署Hexo&#xff0c;到了最关键的一步&#xff1b;突然报错&#xff1a;error: src refspec main does not match any 1、错误一&#xff1a; main分支应填写为master分支&#xff1b;但是只改这里也会报其他错误 2、错误二&a…

mqtt 协议的概念和理解

一、概述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的”轻量级”通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在1…

【C项目】无头单向不循环链表

简介&#xff1a;本系列博客为C项目系列内容&#xff0c;通过代码来具体实现某个经典简单项目 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…

Rabbitmq入门与应用(五)-延迟队列的设计与实现

延迟队列设计 在开发过程中涉及到延迟队列的应用&#xff0c;例如订单生成后有30分钟的付款时间&#xff0c;注册是有60秒的邮件或者短信的发送读取时间等。 常规使用rabbitmq设计延迟队列有两种方式 使用创建一个延迟队列阻塞消息使用延迟队列插件 Dead Letter Exchanges —…

Linux——信号(2)

在上一张博客我们介绍了Linux中信号的概念和信号是如何产生的&#xff0c;虽然信号 有多种产生方式&#xff0c;但是最终只能由操作系统给对应进程发送特定信号。现在 我将更加规范的介绍Linux中的信号。上一章的遗留问题 我们上一章中在观察信号的默认处理的时候发现终止信号…

canal监听binlog记录业务数据的变更;canalAdmin对instance做web配置

概述 平时在开发中会通过logback打印一些开发日志&#xff0c;有时也会需要记录一些业务日志&#xff0c;简单的就直接用log记录一下&#xff0c;但是系统中需要记录日志的地方越来越多时&#xff0c;不能每个地方都写一套log记录&#xff1b; 由于平常用的大多都是mysql&…

【论文阅读笔记】Contrastive Learning with Stronger Augmentations

Contrastive Learning with Stronger Augmentations 摘要 基于提供的摘要&#xff0c;该论文的核心焦点是在对比学习领域提出的一个新框架——利用强数据增强的对比学习&#xff08;Contrastive Learning with Stronger Augmentations&#xff0c;简称CLSA&#xff09;。以下…

【Jvm】性能调优(上)线上问题排查工具汇总

文章目录 一.互联网概念1.产品闭环和业务闭环2.软件设计中的上游和下游3.JDK运行时常量池 二.CPU相关概念1.查询CPU信息2.CPU利用率&#xff08;CPU utilization&#xff09;和 CPU负载&#xff08;CPU load&#xff09;2.1.如何理解CPU负载2.2.top命令查看CPU负载均值2.3.CPU负…

Pytorch 配置 GPU 环境

1、Pytorch 深度学习跑代码的时候&#xff0c;因为简单的操作不适合cpu运行&#xff0c;我们更习惯用GPU加速代码。 本章将介绍怎么安装pytorch的gpu环境&#xff0c;以及常见的问题 关于conda的安装&#xff0c;参考之前文章&#xff1a;深度学习环境配置&#xff1a;Anaco…

初始树莓派 + VMware17 安装树莓派(Raspberry Pi 4B/5)

文章目录 树莓派入门 VMware17 安装树莓派(Raspberry Pi 4/5B)前言一、树莓派入门指南&#xff1a;从零开始探索树莓派树莓派4B和5对比 二、在VMware Workstation 17上安装树莓派4B/5操作系统&#xff1a;实现强大性能与便捷模拟工具准备开始安装树莓派1.创建一个虚拟机2. 选择…

PyCharm 取消所有断点

PyCharm 取消所有断点 1. Run -> View Breakpoints...2. Python Line Breakpoint3. Remove - DoneReferences 1. Run -> View Breakpoints… 2. Python Line Breakpoint ​​​ 3. Remove - Done References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

【web安全】渗透测试实战思路

步骤一&#xff1a;选目标 1. 不建议太小的公司&#xff08;可能都是请别人来开发的&#xff0c;用现成成熟的框架&#xff09; 2. 不建议一线大厂&#xff1a;腾讯&#xff0c;字节&#xff0c;阿里等&#xff0c;你懂的 3. 不建议政府部门&#xff0c;安全设备多&#xff…

Spring MVC(基于 Spring4.x)基础学习

一、SpringMVC概述 二、SpringMVC的HelloWorld 三、使用RequestMapping映射请求 四、映射请求参数&请求头 五、处理模型数据 六、视图和视图解析器 七、RESTful CRUD 八、SpringMVC表单标签&处理静态资源 九、数据转换&数据格式化&数据校验 十、处理JSON:使用…

前端win10如何设置固定ip(简单明了)

1、右击这个 2、点击属性 3、双击协议版本4设置成以下就ok

原生微信小程序开发记录

1. 拿到项目 先构建 2.小程序与普通网页开发的区别 网页开发渲染线程和脚本线程是互斥的&#xff0c;这也是为什么长时间的脚本运行可能会导致页面失去响应&#xff0c;而在小程序中&#xff0c;二者是分开的&#xff0c;分别运行在不同的线程中。网页开发者可以使用到各种浏览…

【HarmonyOS】鸿蒙开发之Slider组件——第3.5章

组件应用场景: 设备音量大小&#xff0c;调节屏幕亮度等需求 slider组件内options属性简介 value&#xff1a;滑动条当前进度值。 min&#xff1a;设置滑动条设置最小值。 max&#xff1a;设置滑动条设置最大值&#xff0c;默认为 100 。 step&#xff1a;设置滑动条滑动跳动…

Python从进阶到高级—通俗易懂版

Python从进阶到高级—通俗易懂版 # # Author : Mikigo # Time : 2021/12/23 # 一、简介 Python 进阶是我一直很想写的&#xff0c;作为自己学习的记录&#xff0c;过去自己在看一些代码的时候经常会困惑&#xff0c;看不懂&#xff0c;然后自己去查资料、看书籍&#xff0…

JAVA之HashMap详解

HashMap 1. 设计原理 HashMap 基于哈希表的 Map 接口实现&#xff0c;是以 key-value 存储形式存在&#xff0c;即主要用来存放键值对。HashMap 的实现不是同步的&#xff0c;这意味着它不是线程安全的。它的 key、value 都可以为 null&#xff0c;此外&#xff0c;HashMap 中…

appium实现自动化测试原理

目录 1、Appium原理 1.1、Android Appium原理图文解析 1.1.2、原理详解 1.1.2.1、脚本端 1.1.2.2、appium-server 1.1.2.3、中间件bootstrap.jar 1.1.2.4、驱动引擎uiautomator 1.2、 IOS Appium原理 1、Appium原理 1.1、Android Appium原理图文解析 执行测试脚本全过…