简单了解CPU的工作原理

目录

一、基本结构以及对应功能

(1)基本结构

(2)几个重要寄存器的详细介绍

操作码 (Opcode)

操作数 (Operands)

指令表 (Instruction Table)

第一个:程序计数器 (PC)

第二个:指令寄存器 (IR,Instruction Register)

第三个:内存地址寄存器 (MAR)

第四个:内存缓冲区寄存器 (MBR)

第五个:累加寄存器 (ACC,Accumulator)

二、工作流程

1. 取指(Fetch)

2. 解码(Decode)

3. 执行(Execute)

4.写回(Writeback)

三、CPU的性能的评判标准(做一个补充)

1)频率

2)核心数

3)缓存

4)功耗和散热

5)工艺/架构


要了解CPU(中央处理器,Central Processing Unit)的工作原理,要先了解它的基结构。

一、基本结构以及对应功能

(1)基本结构

  • 算术逻辑单元(ALU,Arithmetic Logic Unit):负责执行所有的算术和逻辑运算。(内含多个组件
  • 控制单元(CU,Control Unit):负责从内存中获取指令、解释指令,并将控制信号发送给其他部件以执行指令。(内含多个组件
  • 寄存器:小而高速的存储单元,用于暂存数据和指令。(种类很多,等一下介绍几个常见的

(2)几个重要寄存器的详细介绍(了解即可)

想要理解CPU的工作流程,以下几个寄存器一定要有所了解。

在了解寄存器之前我们先了解一下这几个概念:

 一个指令(二进制构成,如:0010 1110等),前半段表示操作码,后半段表示操作数。

操作码 (Opcode)

  • 定义: 操作码(Opcode)是指令的一部分,用于指定CPU应该执行的操作类型。
  • 作用: 它告诉CPU应该进行什么操作,例如加法、减法、跳转、加载数据等。

操作数 (Operands)

  • 定义: 操作数(Operands)是指令的一部分,用于指定操作所需的数据或数据的位置。
  • 作用: 它们是操作码所作用的具体数据或数据的地址,可以是立即数、寄存器、内存地址等。
  • 类型:
    • 立即数: 指令中直接包含的数值,例如5
    • 寄存器: 指定一个寄存器,例如R1
    • 内存地址: 指定一个内存地址,例如0x1000
  • 示例(已经把二进制指令翻译):
    • 在指令ADD R1, R2中,R1R2是操作数。
    • 在指令MOV R1, 5中,R1是目标操作数,5是源操作数。

指令表 (Instruction Table)

  • 定义: 指令本身是一个数字,用二进制保存在内存中的某一个位置。每一个二进制数字就对应一个操作码,如图:

接下来我们正式来介绍这五个比家中要的寄存器:

第一个:程序计数器 (PC)

  • 功能: 程序计数器用于存储即将执行的指令的地址
  • 作用: 它负责跟踪程序的执行顺序,每当一条指令被取出并执行后程序计数器的值就会自动增加,指向下一条指令的地址。这样,程序计数器确保了程序的指令按正确的顺序被执行
  • 详细描述:
    1. 初始化: 当一个程序开始运行时,程序计数器被初始化为程序的起始地址。
    2. 指令获取: 在每个时钟周期,CPU会从程序计数器指定的地址取出一条指令。
    3. 自增: 取出指令后,程序计数器通常会增加(或跳转)到下一条指令的地址,除非遇到跳转指令。

***tips***:

时钟周期:

时钟周期是CPU从开始到执行完一个指令所花费的时间,因此严格意义上来讲,每个时钟周期的时间都是不一样的。


程序计数器简记技巧

功能:储存即将执行的指令的地址

作用:确保每条指令能够按预定顺序执行

第二个:指令寄存器 (IR,Instruction Register)

  • 功能: 指令寄存器用于存储当前正在执行的指令
  • 作用: 它确保CPU可以在执行期间快速访问当前指令的操作码操作数。指令寄存器使得指令的解码和执行过程更高效。
  • 详细描述:
    1. 指令加载: 当程序计数器(PC)指向的指令被取出后,这条指令会被加载到指令寄存器中。
    2. 指令解码: 在指令寄存器中存储指令的同时,指令解码器会解析这条指令,确定其操作码和操作数。
    3. 指令执行: 解析完成后,CPU根据解码结果执行相应的操作,如算术运算、数据传输等。

***tips***:

指令寄存器简记技巧:

功能:储存当前正在执行的指令

作用:使CPU能快速访问指令中的操作数和操作码,使得CPU对指令的解码和执行过程更加高效。(寄存器的访问速度非常快,不过存储容量低)


第三个:内存地址寄存器 (MAR)

  • 功能: 内存地址寄存器用于存储当前CPU正在访问的内存地址。<这一点一定要记住>
  • 作用: MAR负责在CPU和内存之间传递地址信息。当CPU需要读取或写入数据时,它会把目标内存地址加载到MAR中。

第四个:内存缓冲区寄存器 (MBR)

  • 功能: 内存缓冲区寄存器用于暂时存储从内存中读取或将要写入内存的数据。<一定要记住>
  • 作用: 它是CPU和内存之间的数据交换缓冲区。当CPU从内存读取数据或向内存写入数据时,MBR充当中间存储器。(类似于两个变量的交换,需要用到一个中间变量才能实现)

第五个:累加寄存器 (ACC,Accumulator)

  • 功能: 累加寄存器主要用于存储算术和逻辑运算的中间结果或者用于计算的数据。<要记住>
    例如A+B=C,在运算过程中累加寄存器会先后存储A、B、C

     
  • 作用: 它在算术逻辑单元(ALU)进行运算时,充当一个主要的操作数和结果存储位置。

二、工作流程(要求能够描述)

CPU的基本工作流程通常被描述为“取指、解码、执行、写回”四个主要步骤。

这些步骤共同组成了一个指令周期。以3+2=5这个程序为例:

1. 取指(Fetch)

在这个阶段,CPU从内存中获取下一条指令。

  • 程序计数器(PC):指向内存地址0x1000,其中存储着指令ADD R1, R2, R3(假设这条指令表示将R2和R3的值相加,结果存储在R1中)。
  • 取指操作:将PC的值送到内存地址总线,读取指令ADD R1, R2, R3,并将其放入指令寄存器(IR)中。
  • 更新程序计数器:PC增加,以指向下一条指令的地址(假设是0x1004)。
     

2. 解码(Decode)

在这个阶段,CPU解码刚刚取回的指令,以确定需要执行的操作和操作数。

  • 指令解码器:将IR中的指令解码为操作码(Opcode)和操作数。操作码指示这是一个加法操作,操作数R1、R2、R3指示需要的寄存器。
  • 生成控制信号:控制单元生成相应的控制信号,准备调度算术逻辑单元(ALU)和寄存器

3. 执行(Execute)

在这个阶段,CPU执行指令。

  • 读取寄存器:从寄存器文件中读取R2和R3的值(假设R2的值是3,R3的值是2)。
  • 算术逻辑单元(ALU):将R2和R3的值送入ALU,执行加法操作。ALU计算3 + 2 = 5(结果存储到ACC)。

4.写回(Writeback)

在这个阶段,CPU将执行结果写回到指定的寄存器或内存位置。

  • 结果存储:将ALU计算得到的结果5从ACC通过内存缓冲区寄存器(MBR)存入到对应内存地址。
     

虽然在人看来,一个简单的加法都要这么繁琐的步骤完成。

但是CPU的执行速度是非常快的,而且在实际情况中,同一时刻CPU可以执行多个程序(并发执行)。

因此CPU是智能系统最核心的部分。

三、CPU的性能的评判标准(做一个补充)

1)频率

频率越高,一秒中CPU运算的次数就越多。

2)核心数

现代CPU通常具有多个核心,每个核心都可以执行指令。较多的核心数意味着CPU可以同时处理更多的任务,从而提高性能。

3)缓存

CPU具有多级缓存,包括L1、L2、L3等。(1到3访问速度逐渐变慢、存储容量不断增加)缓存的作用是存储常用的数据和指令,以便CPU更快地访问。较大且更快的缓存可以提高CPU的性能。

4)功耗和散热

CPU的功耗和散热问题也会影响其性能。较低的功耗和有效的散热系统可以保持CPU在高负载下的稳定性能。

5)架构

CPU的架构决定了其指令集和内部组织结构。较新的架构通常会引入更高效的指令集和更复杂的内部结构,从而提高性能。(比如英特尔的超线程技术,AMD的zen架构


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

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

相关文章

【Arthas案例】某应用依赖两个GAV不同但包含两个相同全限定类名StaticLoggerBinder,引起log4j.Level类找不到异常

3分钟内解决问题 两个不同的GAV依赖冲突&#xff0c;包含相同全限定类名&#xff0c;引起ClassNotFoundException Maven依赖的三坐标体系GAV(G-groupId&#xff0c;A-artifactId&#xff0c;V-version) 【案例1】某应用依赖两个GAV不同的jar&#xff0c;但包含两个相同全限定类…

探索互联网寻址机制 | 揭秘互联网技术的核心,解析网络寻址

揭秘互联网技术的核心&#xff0c;解析网络寻址题 前提介绍局域网地址IP地址的分配方式动态IP分配机制内部网&#xff08;intranet&#xff09;ICANN负责IP分配DHCP协议获取IP地址 域名系统域名是什么域名工作方式hosts文件存储域名映射关系DNS分布式数据库DNS域名解析 Java进行…

Java中List流式转换为Map的终极指南

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java编程中&#xff0c;经常需要将一个List对象转换为另一个Map对象。这可能是因为需要根据List中的元素的某些属性来创建一个新的键值对集合。在本文中&#xff0c;我将向您展示如何使用Java 中的流式API轻松地实…

02_01_SpringMVC初识

一、回顾MVC三层架构 1、什么是MVC三层 MVC是 模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;、控制器&#xff08;Controller&#xff09;的简写&#xff0c;是一种软件设计规范。主要作用是降低视图与业务逻辑之间的双向耦合&#xff0c;它不是一种…

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令&#xff0c;脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;grep更适合单纯的查找或匹配文本&#xff0c;sed更适合编辑匹配到的文本&#xff0c;awk更适合格式化文本&#xff0c;对…

Elasticsearch 为时间序列数据带来存储优势

作者&#xff1a;来自 Elastic Martijn Van Groningen, Kostas Krikellas 背景 Elasticsearch 最近投资了对存储和查询时间序列数据的更好支持。存储效率一直是关注的主要领域&#xff0c;许多项目取得了巨大的成功&#xff0c;与将数据保存在标准索引中相比&#xff0c;可以节…

基于java的英文翻译字典

基于java的英文翻译字典&#xff0c;附有源代码&#xff0c;源数据库初始化文件 源码地址 dict_demo: 提取一段英文对话中的英文词汇&#xff0c;输出为英文单词字典形式 解析json字条 private void readFile(String pathname) {long start System.currentTimeMillis(); //…

微服务链路追踪ELK

微服务链路追踪&ELK 链路追踪概述链路追踪sluthzipkinelk日志管理平台 一 链路追踪 1 概述 1.1 为什么需要链路追踪 ​ 微服务架构是一个分布式架构&#xff0c;它按业务划分服务单元&#xff0c;一个分布式系统往往有很多个服务单元。由于服务单元数量众多&#xff0…

PostgreSQL 快速入门与实战

1、概述 前面2篇博客给大家详细的介绍了PostgreSQL的安装和配置&#xff0c;本篇文章就带着大家一起学习一下PostgreSQL的用法&#xff0c;主要内容包括 基本的数据库操作、用户管理、数据备份、SCHEMA(模式)以及和MySQL的区别。 2、数据库基本操作 PostgreSQL是严格遵守SQL规…

基于System-Verilog的FPGA设计与仿真

一、System-Verilog System Verilog的发展 SystemVerilog 的出现是为了因应日益复杂的数位电路设计和验证需求。虽然Verilog HDL 在早期的数位电路设计中得到了广泛应用&#xff0c;但随着技术的发展和电路复杂度的增加&#xff0c;Verilog HDL 在某些方面已经显得有些不足以满…

leetcode 56合并区间

思路 合并就是首先应该按照left左边界排序&#xff0c;排完序以后&#xff0c;如果i的左边界小于等于i-1的右边界&#xff0c;说明有重合&#xff0c;此时这两个可以合并&#xff0c;右边界应该取最大值。 代码 排序 我是定义了一个类,存储左右边界&#xff0c;先将数组转化…

Linux Centos 环境下搭建RocketMq集群(双主双从)

1、下载rocketmq的包 下载 | RocketMQ 2、配置环境变量 1、编辑环境变量文件&#xff1a;vim /etc/profile2、加入如下配置&#xff1a; #rocketmq 4.9.8 ROCKETMQ_HOME/home/rocketmq/rocketmq-4.9.8 export PATH${ROCKETMQ_HOME}/bin:${PATH}3、刷新配置&#xff1a;source…

OpenStack入门体验及一键部署

OpenStack入门体验 技能目标&#xff1a; 了解云计算概念 了解OpenStack 了解OpenStack的构成 会OpenStack单机环境一键部署 从控制台认识OpenStack各项功能会 通过OpenStack控制台创建云主机 什么是云计算 云计算(cloudcomputing)是一种基于网络的超级计算模式&a…

51单片机STC89C52RC——2.1 独立按键控制LED亮灭

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;独立按键 2.1 独立按键位置 2.2 独立按键电路图 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&#xff0c;效果 目的 当独立K1按键按下时LED D1 点亮&#x…

一般简单的功能使用GIS 服务器工具还需要进行扩展开发吗?

有网友困惑怎么使用了我们的 GIS 服务器工具&#xff0c;一些简单的功能需不需要对服务器进行扩展开发&#xff1f;下面我们首先看一下标准GIS WEB服务器例如GEOSERVER&#xff0c;QGISSERVER、GIS数据快捷共享发布工具&#xff08;建立自己的地图网站&#xff09;及其它一些商…

【Unity】加速Unity编辑器模式启动时间

Unity每次Play之后都会Reload Script Assemblies&#xff08;重新加载脚本程序集&#xff09;。 如果我们没有使用很多Assem&#xff0c;则并不需要在播放前重新编译。 可以在设置中将此事的重新编译关闭。 在Edit > Project Settings > Editor 面板中 找到Enter Play…

OpenGL3.3_C++_Windows(3)

GLSL Shader基础 Shader&#xff08;把输入转化为输出,运行在GPU上&#xff09;&#xff1a;首先要声明版本&#xff0c;有各自的入口点main&#xff08;&#xff09;顶点数据上限:16个包含4分量&#xff1a;16 * 4 64个分量向量&#xff1a;容器vec。使用.x、.y、.z和.w&am…

算法设计与分析 实验2 分治法求最近点对

目录 一、实验目的 二、实验概述 三、实验内容 四、问题描述 1.实验基本要求 2.实验亮点 3.实验说明 五、算法原理和实现 1. 算法原理和实现 实验流程 数据生成 数据去重 2. 蛮力法 算法原理 实验伪代码 时间复杂度分析 3. 分治法 算法描述 算法内容 实验流…

C# Winform DPI自适应方案

Winform窗体随着屏幕的DPI缩放,会引起窗体变形及字体变形。 1.设置窗体和自定义用户控件的AutoScaleMode为None 实现目标:禁止窗体因为字体大小缩放变形 因为显示的高分屏,然后操作系统的设置了字体缩放引起的。窗体默认的AutoScaleMode = Font,控件会因为高分屏自动缩放…

Apollo9.0 PNC源码学习之Control模块(三)—— 基于双环PID的纵向控制

本文将对Apollo的纵向控制器进行讲解&#xff0c;看完本文&#xff0c;你将会对百度Apollo的纵向控制有更深的理解 前面文章&#xff1a; Apollo9.0 PNC源码学习之Control模块&#xff08;一&#xff09; Apollo9.0 PNC源码学习之Control模块&#xff08;二&#xff09; 1 纵向…