计算机组成原理【CO】Ch5 中央处理器

ops/2024/11/9 16:46:01/

目录

大纲

一条指令的执行 

取指令

执行指令

数据传送类(mov、load、store)

运算类指令(加、减、乘、除、移位、与、或)

转移类指令(jmp、jxxx)

如何看懂注释

袁版注释⻛格(16年以后的真题)

唐版注释⻛格(16年以前的真题)

【※】CPU图示

​编辑 【※】五段式流水线

数据冒险

控制冒险 —— 会改变PC值的

MIPS架构流水线结构

常⻅硬件

操作元件(组合逻辑元件)

存储元件(时序逻辑元件)

数据通路

 微程序控制器

对应关系

工作过程

编码方式/控制方式

地址形成方式

微指令的格式

高级流水线技术 

多处理器概念

常考点

 

SISD,SIMD,MIMD的基本概念

其他相关概念(了解即可,重要的考点都列在上面的常考点表格中)


大纲

CPU的功能和基本结构

  • CPU = 控制器 + 数据通路
    • 控制器,即CU,是指令的控制部件
    • 数据通路,是指令的执⾏部件,包括运算器、寄存器、数据传输的线路等

指令执⾏过程

取指、译码

  • 取指令送⼊IR、PC+“1”
  • CU根据IR译码,确定指令的执⾏时序

执⾏

  • 取操作数、运算、存结果
  • 异常/中断的检测与处理(如果有的话)

控制器的功能和⼯作原理

  • 硬布线控制器
  • 微程序控制器
  • PS:这部分弱化

异常和中断机制

异常和中断的基本概念

异常和中断的分类

异常和中断的检测与响应

  • 软件识别(MIPS采⽤)
    • CPU内部设置⼀个“异常状态寄存器”,⽤于保存异常原因。
    • 检测到异常/中断后,固定跳转到⼀个异常处理(⼊⼝)程序,由它判断“异常状态寄存器”的值,再决定要跳转到哪⼀个具体的异常/中断处理程序。
  • 硬件识别(x86采⽤)
    • 每个异常/中断都有⼀个中断号,硬件根据中断号,找到中断向量,并跳转⾄对应的异常/中断处理程序

指令流⽔线

指令流⽔线的基本概念

指令流⽔线的基本实现

结构冒险、数据冒险、控制冒险的处理

超标量和动态流⽔线的基本概念

多处理器基本概念

SISD、SIMD、MIMD、向量处理器的基本概念

 硬件多线程的基本概念

多核处理器(multi-core)的基本概念

共享内存多处理器(SMP)的基本概念

一条指令的执行 

取指令

  • 即,将PC所指的指令取出来到IR的过程
  • PC->MAR

M(MAR)->MDR->IR

PC+"1"->PC

  • "1"为下一条指令(注意指令的字长)
  • +“1”的实现方式:
    • 有加法功能的ALU
    • 加法器
    • 有自增功能的寄存器(PC)

执行指令

数据传送类(mov、load、store)

  • 寄存器->寄存器
  • 寄存器->主存
  • 主存->寄存器
  • 立即数->寄存器
  • 立即数->主存
  • 寄存器->暂存寄存器

PS:

  • 关注读/写主存:
    • 读:

地址->MAR

M(MAR)->MDR

MDR->目的地

  • 写:

地址->MAR

数据->MDR

MDR->M(MAR)

  • 关注总线的占用来安排控制信号(总线是临界资源)

运算类指令(加、减、乘、除、移位、与、或)

转移类指令(jmp、jxxx)

如何看懂注释

袁版注释⻛格(16年以后的真题)

数据在通⽤寄存器组

  • 数据在通⽤寄存器组
  • eg:R[6]×R[3]→R[2]。将寄存器R6×R3的内容写⼊R2

数据在某个特殊名字的寄存器

  • 特点:直接⽤寄存器名字表示
  • eg:R[6]+10→PC。把寄存器R6+10的内容写⼊PC
  • eg:MDR→PC。把MDR的内容写⼊PC

数据在主存

  • 特点:⽤ M[addr]表示,addr为主存地址
  • eg:R[6]→M[10086] :将R6的内容存⼊主存地址10086
  • eg:R[3]<<2→M[R[6]]:将R3进⾏“左移两位”运算,并将结果存⼊R6所指的主存地址(寄存器间接寻址)
  • eg:M[PC+10]→MDR 将 PC+10 指向的主存内容取到MDR

特点总结

  • 喜欢⽤“中括号”,中括号⾥边表示寄存器编号、或主存地址
  • 要使⽤寄存器⾥的内容,不⽤加⼩括号,直接给寄存器名即可

唐版注释⻛格(16年以前的真题)

数据在通⽤寄存器组

⾥的值;箭头右边表示存⼊某个寄存器不加⼩括

eg:(R6)×(R3)→R2。将寄存器R6×R3的内容写⼊R2

  • 特点:箭头左边,⽤寄存器名加⼩括号,表示寄存器

数据在某个特殊名字的寄存器

  • 特点:直接⽤寄存器名字表示,要使⽤寄存器⾥的值需要加⼩括号
  • eg:(R6)+10→PC。把寄存器R6+10的内容写⼊PC
  • eg:(MDR)→PC。把MDR的内容写⼊PC

数据在主存

  • 特点:⽤ M(addr)表示,addr为主存地址
  • eg:(R6)→M(10086):将R6的内容存⼊主存地址10086(寄存器间接寻址)
  • eg:(R3)<<2→M((R6)):将R3进⾏“左移两位”运算,并将结果存⼊R6所指的主存地址(寄存器间接寻址)
  • eg:((PC)+10)→MDR:将 PC+10 指向的主存内容取到MDR在箭头的左边表示“访问主存”时,可以不加M,⽤两层括号表示寄存器间接寻址

特点总结

  • 喜欢⽤“⼩括号”
  • 箭头左边若要使⽤某个寄存器⾥的内容,必须在寄存器名字外⾯加⼩括号
  • 箭头右边表示存⼊某个寄存器,不⽤加⼩括号

CPU图示

 五段式流水线

  • CPU根据指令周期的不同阶段来区分是指令还是数据

数据冒险

  • 什么指令会导致数据冒险?
    • 前面的指令:写某个寄存器 —— 【WB 第五个段】
    • 后面的指令:读(同一个)寄存器 —— 【ID 第二个段】
  • 分析思路
    • 一条一条指令从前往后分析,如果一条指令写了某个寄存器,则观察与之相邻的3指令中,有没有哪条指令需要读同一个寄存器。
    • 当后面的指令和前面的指令中间,还有其他三条指令时,才不会发生数据冒险

控制冒险 —— 会改变PC值的

  • 指令格式:jxxx(X86) / bxx(MIPS)
  • 无条件转移(callret属于无条件转移)
    • EX 第三个段改变PC】
    • 停两个周期,再取下一条指令(IF段),就不会发生控制冒险
  • 有条件转移
    • EX段设置条件码,Mem 第四个段确定是否将PC值更新为转移目标地址
    • 停四个周期,再取下一条指令(IF段),就不会发生控制冒险

MIPS架构流水线结构

  • IF取指令阶段:取出指令放到IR
  • ID对指令进行译码,并用IR中的寄存器地址去访问通用寄存器组,读出所需的操作数。
  • EX执行/计算地址:ALU运算结果放入锁存器
  • MEM访存:
    • 该周期处理的指令只有load、store分支指令
    • 其它类型的指令在此周期不做任何操作
    • 写回DataCache,运算形指令为空
  • WB写回:若需写回寄存器则写回

常⻅硬件

操作元件(组合逻辑元件)

 没有存储功能的元件

三态⻔

  • 就是⼀道⻔,可开可关
  • 控制信号:1bit,⽤于控制开/关

加法器(Adder)

  • 只能实现加法、减法
  • 控制信号:1bit: 0加1减,控制信号的值会影响 CF

算术逻辑单元(ALU)

  • 实现加减乘除等算数运算、与或⾮等逻辑运算

多路选择器(MUX)

  • 多个输入,一个输出

译码器(Decoder)

  • 根据 n bit 控制信号选择将 2𝑛条输出线路中的某⼀条信号选通为1
  • 控制信号:n bit。由译码器的 n bit输⼊即可决定选通哪根线

存储元件(时序逻辑元件)

普通寄存器

  • 关注具有特定⽤途的寄存器:MAR、MDR、IR、PC、FR(即标志寄存器,有的系统中称为PSW)
  • 控制信号:允许读、允许写

暂存寄存器

  • 通常会在单总线结构中和ALU配合使⽤
  • 控制信号:允许读、允许写

通⽤寄存器组

  • 控制信号1:允许读、允许写
  • 控制信号2:若通⽤寄存器组共有 2𝑛 个寄存器,则需要 n bit 控制信号选择其中⼀个寄存器

PS:有的寄存器可能⽀持特殊功能

  • 带“移位功能”的寄存器
    • 可以实现移位运算(算数左移/右移、逻辑左移/右移)
    • ⽤移位运算等价实现 “乘/除 2^n”
  • 带“⾃增、⾃减功能”的寄存器
    • 可实现寄存器的值++、--
    • 有的PC寄存器带有⾃增功能
  • 带其他特殊功能的寄存器
    • 带“符号扩展”功能的寄存器:可以将位数短的带符号数(补码)扩展为位数更⻓的带符号数(补码)
    • 带“零扩展”功能的寄存器:可以将位数短的⽆符号数扩展为位数更⻓的⽆符号数
    • 带“取反功能”的寄存器:可以实现全部位按位取反

数据通路

  • 数据通路:
    • 是指令的执⾏部件,包括运算器、寄存器、数据传输的线路、异常和中断的处理逻辑、组合逻辑电路和时序逻辑电路等
    • 由控制部件控制,不包含控制部件
    • 实现CPU内部的运算器与寄存器寄存器之间的数据交换
  • 数据通路的基本结构:
    • CPU内部单总线:
      • 较多冲突
      • 一个时钟内只允许传一个数据
    • CPU内部多总线
    • 专用数据通路:硬件量大
    •  PS:【内部总线是指同一个部件系统总线是指同一台计算机的各个部件之间

 微程序控制器

对应关系

一个程序对应多条指令,一条指令对应一个微程序,一个微程序对应多条微指令,一个微指令对应一个或多个微命令,一个微命令对应一个微操作。

工作过程

  1. 执行取微指令公共操作
  2. 由机器指令的操作码字段通过微地址形成部件产生该指令所对应的微程序的入口地址,并送入CMAR【微程序入口地址是机器指令的操作码字段产生的】
  3. 从CM中逐条取出对应的微指令并执行
  4. 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第一步

 

编码方式/控制方式

目的

保证速度的情况下尽量缩短指令字长

直接编码方式

  • 无需进行译码,微指令的微命令字段中的每一位都代表一个微命令(选用“1”,不选用“0”)
  • 优点:简单、直观、执行速度快,操作并行性好
  • 缺点:微指令字长过长,n个微指令就要求微指令的操作字段有n位,造成控制存储器容量极大

字段直接编码法

  • 将微命令字段分成若干小字段,将互斥性微命令组合在同一字段中
  • 把相容性微命令组合在不同字段中,每个字段独立编码
  • 每种编码都代表一个微命令且各字段编码含义单独定义,与其他字段无关。
  • 优点:可以缩短微指令字长
  • 缺点:要通过译码电路之后再发出微命令,速度慢
  • 分段原则
    • 互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中
    • 每个小段中包含的信息位不能太多,否则将增加译码电路的复杂性和译码时间
    • 一般每个小段还要留出一个状态,表示本字段不发出任何微命令

 

地址形成方式

后继微地址的形成类型:

  • 直接由微指令的下地址字段指出。格式中设置一个下地址(断定方式)。
  • 根据机器指令的操作码形成。机器指令取至IR后,微指令的地址由操作码经微地址形成部件形成。
  • 增量计数器法(微地址连续)。根据各种标志决定微指令分支转移的地址
  • 通过测试网络形成。由硬件直接产生微程序入口地址

微指令的格式

水平型

垂直型

并行操作能力强,效率高,灵活性强

相反

执行一条指令的时间短

相反

微指令字位数较多,微程序较短

相反

用户难以掌握

与指令相似,用户好掌握

  • 直接由微指令的下地址字段指出。格式中设置一个下地址(断定方式)。
  • 根据机器指令的操作码形成。机器指令取至IR后,微指令的地址由操作码经微地址形成部件形成。
  • 增量计数器法(微地址连续)。根据各种标志决定微指令分支转移的地址
  • 通过测试网络形成。由硬件直接产生微程序入口地址
  • 执行取微指令公共操作
  • 由机器指令的操作码字段通过微地址形成部件产生该指令所对应的微程序的入口地址,并送入CMAR【微程序入口地址是机器指令的操作码字段产生的】
  • 从CM中逐条取出对应的微指令并执行
  • 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第一步

高级流水线技术 

 

定义

特点

超标量流水线技术

动态多发射技术

 

 

  • 一个时钟周期内一条流水线可执行一条以上的指令
  • 并不影响流水线功能段的处理时间
  • 通过内置多条流水线来同时执行多个处理机,实际上是以空间换时间
  • 需要配置多个控制部件,功能部件,寄存器端口,总线和指令译码电路
  • 动态流水线的连接方式是可以变的能结合动态调度技术提高指令执行并行性

超长指令字技术

静态多发射技术

 

 

  • 由编译程序挖掘指令集中可以并行的指令,然后组合成一个具有多个操作码的超长指令字
  • 需要配置多个处理部件,对Cache的容量要求大
  • 静态流水线上下段连接方式固定

超流水线技术

提高主频来提高流水线性能

  • 流水线划分的段数越多,流水寄存器的开销就越大

多处理器概念

常考点

SISD/SIMD/MIMD的区分:

  1. 控制部件的多少决定是SI还是MI
  2. 处理数据单元的多少决定是SD还是MD

多处理机

  • 常规的多处理机属于MIMD
  • 真正的并行执行:在多核处理机中,必须采用多线程执行,使每个核在同一时刻都有线程在执行
  • 时间并行:流水线技术
  • 空间并行:硬件资源(如控制部件)的重复,空间并行导致SIMD和MIMD的产生

超程序技术
【虚双核】

  • 在一个CPU中,提供两套线程处理单元,让单个处理器实现线程级并行
  • 在CPU内部仅复制必要的线程资源来让两个线程同时运行
  • 共享CPU的高速缓存和功能部件
  • 能并行执行两个线程,模拟实体双核心
  • 含有超程序技术的CPU需要芯片组和应用软件的支持才能发挥技术优势
  • 当两个线程同时需要某个共享资源时,一个线程必须挂起等待

双核技术
【实双核】

  • 双核是指将两个CPU核心集成到一个封装中
  • 核心又叫内核,是CPU的重要组成部分
  • 主板上有两个CPU属于多处理机
  • 多核CPU的核心通常是对称的
  • 多核CPU公用一组内存,数据共享
  • 各个核可以有自己的Cache也可以共享Cache
  • 只有支持多线程的并行处理程序才能同时在多个核心上运行
  • 多任务系统/多道程序系统,可以运行在单核CPU上,宏观上并行,微观上串行

 

SISD,SIMD,MIMD的基本概念

  • 基于指令流的数量和数据流的数量,将计算机体系结构分为SISD,SIMD,MISD和MIMD

单指令流单数据流结构(SISD)
Single instruction, single data

  • 串行计算机结构
  • 通常只包含一个处理器和一个存储器
  • 有些使用流水线的方式,所以有时会设置多个功能部件,并采用多模块交叉方式组织存储器

单指令流多数据流结构(SIMD)

Single instruction, multiple data

  • 一个指令流同时对多个数据流进行处理,称为数据级并行技术
  • 由一个指令控制部件、多个处理单元组成
  • 每个处理单元虽然执行的都是同一条指令,但每个单元都有自己的地址寄存器,就有了不同的数据地址
  • 一个顺序应用程序被编译之后,可能按照SISD组织并运行于串行硬件上,也可能按SIMD组织并运行于并行硬件上
  • for循环效率高,但switch或case时效率低
  • 向量处理器也是SIMD的变体,是一种实现了直接操作一维数组(向量)指令集的CPU

多指令流单数据流结构(MISD)

Multiple instruction, single data

  • 同时执行多条指令,处理同一个数据
  • 实际上不存在这样的计算机

多指令流多数据流结构(MIMD)

Multiple instruction, multiple data

多计算机系统

  • 每个计算机节点都具有各自的私有存储器,并且具有独立的主存地址空间
  • 不能通过存取指令来访问不同节点的私有存储器
  • 而要通过消息传递进行数据传送,也称为消息传递MIMD

多处理器系统

  • 共享存储多处理器(SMP)系统的简称
  • 它具有共享的单一地址空间,通过访存指令来访问系统中的所有存储器,也称共享存储MIMD
  • 同时执行多条指令,处理多个不同的数据
  • 分为多计算机系统和多处理器系统

联系与区别

  • SIMD和MIMD是两种并行计算模式(多数据就是并行)
  • SIMD是一种数据级并行模式【数据级别】
  • MIMD是一种并行程度更高的线程级并行或线程级以上并行计算模式【线程级别】

其他相关概念(了解即可,重要的考点都列在上面的常考点表格中)

硬件多线程

细粒度多线程

  • 多个线程之间轮流交叉执行指令,多个线程之间的指令是互不相关的
  • 可以乱序并行执行
  • 该方式下,处理器能在每个时钟周期切换线程。

粗粒度多线程

  • 仅在一个线程出现较大开销的阻塞时,才切换线程;如Cache缺失
  • 当发生流水线阻塞的时候,必须清除被阻塞的流水线
  • 新线程的指令开始执行前需要重载流水线,开销较上一种较大

同时多线程(SMT)
又叫做超线程技术HT
 

  • 该技术在一个CPU中,提供两套线程处理单元,让单个处理器实现线程级并行
  • 超线程的性能并不等于两CPU的性能
  • 引入硬件多线程的目的:为了减少开销
  • 硬件多线程中必须为每个线程提供单独的通用寄存器组、单独的程序计数器等
  • 线程的激活只需要激活选中的寄存器,从而省略了与存储器数据交换的环节,节省了开销
  • 分类

多核处理器

  • 将多个处理单元集成到单个CPU中,每个处理单元称为一个核(core)
  • 每个核可以有自己的Cache,也可以共享一个Cache
  • 所有核一般都是对称的,并且共享主存,因此多核属于共享存储的对称多处理器
  • 在多核计算机系统中,若要充分发挥硬件的性能,必须采用多线程执行,使每个核在同一时刻都有线程在执行,这是真正的并行执行。

共享内存多处理器

统一存储访问(UMA)多处理器

  • 根据处理器与共享存储器之间的连接方式
  • 分为基于总线、基于交叉开关网络和基于多级交换网络连接等几种处理器
  • 每个处理器对所有存储单元的访问时间都是大致相同的

非统一存储访问(NUMA)多处理器

  • 处理器中不带高速缓存时,被称为NC-NUMA
  • 处理器中带有一致性高速缓存时,被称为CC-NUMA(某些访问请求要比其他的快)
  • 共享内存多处理器(SMP):具有共享的单一物理地址空间的多处理器
  • 处理器通过存储器中的共享变量相互通信,所有处理器都能通过存取指令访存任何存储器的位置
  • 即使这些系统共享同一个物理地址空间,它们仍然可以在自己的虚拟地址空间中单独地运行程序
  • 单一地址空间的多处理器分类

 


http://www.ppmy.cn/ops/2359.html

相关文章

前端设置图片以中心向周围展开呈现出来,不压缩宽度

在一个限制了长宽的div设置背景图片或者添加一张图片时&#xff0c;往往会遇到图片被压缩&#xff0c;所以这个时候选择以图片中心出发裁剪出来呈现是一个不错的选择。 现有一个img标签&#xff0c;网页端的样式是图片是完全呈现出来的&#xff0c;手机端的样式会被进行压缩。 …

Uniapp+基于百度智能云完成AI视觉功能(附前端思路)

本博客使用uniapp百度智能云图像大模型中的AI视觉API&#xff08;本文以物体检测为例&#xff09;完成了一个简单的图像识别页面&#xff0c;调用百度智能云API可以实现快速训练模型并且部署的效果。 uniapp百度智能云AI视觉页面实现 先上效果图实现过程百度智能云Easy DL训练图…

Ubuntu22.04.4 - 安装后使用笔记目录-VMware

安装的话就傻瓜式盲点&#xff0c;根据自己需求进行处理&#xff0c;我是在ssh的地方勾选了一下选项&#xff0c;其他都是默认项&#xff0c;官网上有文档&#xff0c;就不赘述了 一、登录用户管理 二、系统命令 三、vim 四、网络配置 五、apt 六、SSH 七、MySQL8

SpringBoot中全局异常捕获与参数校验的优雅实现

一&#xff0c;为什么要用全局异常处理&#xff1f; 在日常开发中&#xff0c;为了不抛出异常堆栈信息给前端页面&#xff0c;每次编写Controller层代码都要尽可能的catch住所有service层、dao层等异常&#xff0c;代码耦合性较高&#xff0c;且不美观&#xff0c;不利于后期维…

力扣经典150题第三十题:长度最小的子数组

目录 力扣经典150题解析之三十&#xff1a;长度最小的子数组1. 介绍2. 问题描述3. 示例4. 解题思路方法一&#xff1a;滑动窗口 5. 算法实现6. 复杂度分析7. 测试与验证测试用例设计测试结果分析 8. 进阶9. 总结10. 参考文献感谢阅读 力扣经典150题解析之三十&#xff1a;长度最…

探索异常传播:深入剖析Python中的错误处理机制

文章目录 1. 异常传播的基本原理2. 复杂的异常传播场景3. 再次抛出异常的意义是什么&#xff1f;4. 最佳实践与异常处理策略 理解异常传播&#xff08;也称为异常冒泡&#xff09;的过程是至关重要的。这一机制确保当在程序执行中发生错误时&#xff0c;错误能被有效地捕获和处…

【蓝桥杯2025备赛】素数判断:从O(n^2)到O(n)学习之路

素数判断:从O( n 2 n^2 n2)到O(n)学习之路 背景:每一个初学计算机的人肯定避免不了碰到素数&#xff0c;素数是什么&#xff0c;怎么判断&#xff1f; 素数的概念不难理解:素数即质数&#xff0c;指的是在大于1的自然数中&#xff0c;除了1和它本身不再有其他因数的自然数。 …

Ubuntu Server 20.04 LTS 64bit安装ftp服务

1.安装vsftpd sudo apt install vsftpd2.配置vsftpd sudo vim /etc/vsftpd.conf write_enableYES # 启用任何形式的FTP写入命令&#xff0c;即可以修改文件local_umask022 # 本地用户创建文件的 umask 值&#xff0c;默认是被注释的connect_from_port_20YES # 针对 PORT 类型…