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

2024-02-19 09:36

本文主要是介绍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语言》<<<<<<<<<

这篇关于CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724270

相关文章

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF