计算机组成原理---中央处理器

文章目录

  • [1. 回忆过去](#1. 回忆过去)
  • [2. CPU的功能和基本结构](#2. CPU的功能和基本结构)
    • [2.1 运算器的基本结构](#2.1 运算器的基本结构)
      • [2.1.1 专用数据通路方式](#2.1.1 专用数据通路方式)
      • [2.1.2 内部单总线方式](#2.1.2 内部单总线方式)
    • [2.2 控制器基本结构](#2.2 控制器基本结构)
    • [2.3 CPU基本结构](#2.3 CPU基本结构)
  • [3. 指令执行过程](#3. 指令执行过程)
  • [4. 数据通路的功能和基本结构](#4. 数据通路的功能和基本结构)
    • [4.1 单总线方式](#4.1 单总线方式)
    • [4.2 专用数据通路](#4.2 专用数据通路)
  • [5. 控制器的功能和工作原理](#5. 控制器的功能和工作原理)
    • [5.1 硬布线控制器](#5.1 硬布线控制器)
      • [5.1.1 硬布线控制器的设计分析(略)](#5.1.1 硬布线控制器的设计分析(略))
      • [5.1.2 具体电路设计(略)](#5.1.2 具体电路设计(略))
      • [5.1.3 总结特点](#5.1.3 总结特点)
    • [5.2 微程序控制器](#5.2 微程序控制器)
      • [5.2.1 微程序控制器的基本原理](#5.2.1 微程序控制器的基本原理)
      • [5.2.2 微指令的设计](#5.2.2 微指令的设计)
      • [5.2.3 微程序控制单元的设计](#5.2.3 微程序控制单元的设计)
  • [6. 指令流水线](#6. 指令流水线)
    • [6.1 基本概念 & 性能指标](#6.1 基本概念 & 性能指标)
    • [6.2 指令流水线影响因素分类](#6.2 指令流水线影响因素分类)
      • [6.2.1 影响流水线因素](#6.2.1 影响流水线因素)
      • [6.2.2 流水线的分类(略)](#6.2.2 流水线的分类(略))
      • [6.2.3 流水线的多发技术(略)](#6.2.3 流水线的多发技术(略))
    • [6.3 补充:五段式指令流水线](#6.3 补充:五段式指令流水线)
  • [7. 多处理器的基本概念(简要了解)](#7. 多处理器的基本概念(简要了解))
    • [7.1 SISD、SIMD、MIMD、向量处理器的基本概念](#7.1 SISD、SIMD、MIMD、向量处理器的基本概念)
    • [7.2 硬件多线程](#7.2 硬件多线程)
    • [7.3 总结](#7.3 总结)

1. 回忆过去

2. CPU的功能和基本结构

CPU的功能是:指令控制、操作控制、时间控制、数据加工、中断处理

2.1 运算器的基本结构

2.1.1 专用数据通路方式

专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路。

专用数据通路方式的特点是:性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。

2.1.2 内部单总线方式

CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。

CPU内部单总线方式的特点是:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。

2.2 控制器基本结构

控制器基本结构:

    1. 程序计数器(PC):用于指出下一条指令在主存中的存放地址
    1. 指令寄存器(IR):用于保存当前正在执行的那条指令
    1. 指令译码器(ID):仅对操作码字段进行译码,向控制器提供特定的操作信号
    1. 微操作信号发生器:根据IR、PSW及时序信号,产生控制整个计算机系统所需的各种控制信号
    1. 时序系统:用于产生各种时序信号
    1. 存储器地址寄存器(MAR):用于存放所要访问的主存单元的地址
    1. 存储器数据寄存器(MDR):用于存放向主存写入的信息或从主存读出的信息

2.3 CPU基本结构

  • 可编程寄存器有:程序状态字寄存器PSW、一系列通用寄存器组、指令寄存器PC。PC可见是因为汇编可用jmp指令对其值进行修改
  • 不可编程寄存器有:MAR、MDR、IR、暂存寄存器

小结:

3. 指令执行过程

  • 指令周期:CPU从主存中每取出并执行一条指令所需的全部时间
  • 指令周期常常包含若干机器周期,而机器周期又常常包含若干时钟周期。CPU时钟周期是CPU操作的最基本单位
  • 定长机器周期:每个机器周期内的时钟周期数相等
  • 不定长机器周期:每个机器周期内的时钟周期数不相等
  • 每个指令周期内机器周期数可以不等,每个机器周期内的时钟周期数也可以不等
  • 完整的指令周期包括:取指周期、间址周期、执行周期、中断周期

取指周期:(PC)->MAR;1->R;M(MAR)->MDR;(MDR)->IR;(PC)+1->PC

间址周期:Ad(IR)->MAR;1->R;M(MAR)->MDR。有些计算机底层设计会有上述的第4步,即把此时MDR的内容(有效地址EA)给拼接成IR的新地址码

各个指令的执行周期所做的任务操作不同,因此没有统一的数据流向

中断周期:(SP)-1->SP,(SP)->MAR;1->W;(PC)->MDR,(MDR)->M(MAR);向量地址->PC

各个指令执行方案的CPI分析:

    1. 单周期处理器CPI=1
    1. 多周期处理器CPI>1
    1. 流水线方案CPI=1(理想情况下)

值得注意的是,单周期处理器是让所有指令都选用相同的执行时间来完成(短指令还需迎合长指令的执行时间),即每条指令都在一个时钟周期内完成,统一了时间执行标准,其CPI=1其实是一种从数量上来进行衡定,但质量上并没有变化,反倒还降低了整个系统的运行速度。而流水线方案是利用了每条指令在不同机器周期内所占用的硬件部件不同,从而实现指令间的并行执行,是真正意义上的CPI=1(理想条件下)

小结:

4. 数据通路的功能和基本结构

数据通路的基本结构:

    1. CPU内部单总线方式
    1. CPU内部多总线方式
    1. 专用数据通路方式

4.1 单总线方式

例题:

小结:

为什么单总线方式下ALU需要配合暂存器使用?

  • 因为单总线一个时钟周期内只能允许一个部件的数据进行流通,多个部件的数据进行流通会造成数据混乱,而ALU又是需要两个操作数才能进行运算,所以需要提前将一个操作数存入暂存器中,这样避免了多数据的流通混乱。多总线方式就不必这么麻烦了,因为设计了多条内部总线,也就意味着每个时钟周期可以允许有多个数据进行流通。

4.2 专用数据通路

专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接电路,避免使用共享的总线,性能较高,但硬件量大。一般使用三态门,根据控制信号,控制硬件部件的数据输出。

要特别关注各阶段的微操作序列及其对应的控制信号

小结:

5. 控制器的功能和工作原理

5.1 硬布线控制器

  • 采用硬布线控制器方式时:一条指令有若干机器周期,每个机器周期有若干CPU时钟周期,若干CPU时钟周期将微操作序列进行合理的划分,但并不是每个CPU时钟周期都有微操作。微命令和微操作是一一对应的。

那么这么复杂的电路是怎么设计出来,并保证其正确性的呢?以下作介绍,简要了解即可!

5.1.1 硬布线控制器的设计分析(略)


安排微操作时序的原则:

  • 原则一:微操作的先后顺序不得随意更改
  • 原则二:被控对象不同的微操作尽量安排在一个节拍内完成
  • 原则三:占用时间较短的微操作尽量安排在一个节拍内完成,并允许有先后顺序

5.1.2 具体电路设计(略)

5.1.3 总结特点

硬布线控制器的特点:

  • 指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统),如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生

5.2 微程序控制器

5.2.1 微程序控制器的基本原理

明确关系:

  • 程序由若干指令序列组成
  • 每一种指令对应一个微程序,而每一个微程序又由若干微指令组成,每一个微指令又由若干微操作组成
  • 指令是对程序执行步骤的描述,而微指令则是对指令执行步骤的描述。同时指令是对微指令功能的"封装"
  • 在微程序控制的计算机中,控制部件向执行部件发出的各种控制命令称为微命令,微命令是构成控制序列的最小单位。微命令和微操作是一一对应的

注意:

  • CMAR别名μPC,即微地址寄存器,接收微地址形成部件送来的微地址
  • CMDR别名μIR,即微指令寄存器,存放从CM中取出的微指令
  • 控制存储器(CM)用只读存储器ROM实现

一些CPU不提供间址周期和中断周期,但取指周期和执行周期是每个CPU都必须提供的

小结:

5.2.2 微指令的设计

  • 相容性微命令:可以并行完成的微命令
  • 互斥性微命令:不允许并行完成的微命令
  • 水平型微指令是水平上臃肿,即微指令长,微程序短,一条微指令能干更多的事,执行速度快,但编写微程序比较麻烦
  • 垂直型微指令是垂直上臃肿,即微指令短,微程序长,一条微指令只干一件事,执行速度慢,工作效率低,但容易编写微程序
  • 混合型微指令则是上述二者的折中

小结:

5.2.3 微程序控制单元的设计

小结:

6. 指令流水线

6.1 基本概念 & 性能指标


性能指标:

    1. 吞吐率:单位时间内流水线所完成的任务数量,或是输出结果的数量。设n为任务数,处理n个任务所用时间为Tk,则 T P = n T k TP = \frac{n}{T_{k}} TP=Tkn
      其中Tk = (k+n-1)Δt,Δt = 一个时钟周期
    1. 加速比:完成同一批任务,不使用流水线所用时间与使用流水线所用时间之比。则 S = T 0 T k S = \frac{T_{0}}{T_{k}} S=TkT0
      其中T0 = nkΔt,Tk = (k+n-1)Δt
    1. 效率:在时空图上,流水线德效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间同k个流水段所围成的时空区总面积之比。则 E = T 0 k T k E = \frac{T_{0}}{kT_{k}} E=kTkT0
      其中T0 = nkΔt,Tk = (k+n-1)Δt

小结:

6.2 指令流水线影响因素分类

6.2.1 影响流水线因素

小结:

6.2.2 流水线的分类(略)

6.2.3 流水线的多发技术(略)

小结:

6.3 补充:五段式指令流水线

补充 --- --- load-use数据冒险的处理:

  • 若load指令与其后紧邻的运算类指令存在数据相关问题,则无法通过转发技术来解决,通常把这种情况称为load-use数据冒险。对于下列两条指令,load指令只有在MEM段结束时才能得到主存中的结果,然后送MEM/WB流水段寄存器,在WB段的前半周期才能存入R2的新值,但随后的add指令在EX阶段就要取R2的值,因此,得到的是旧值。
bash 复制代码
I2		load r2,l2(r1)					# M[(r1) + l2] -> (r2)
I3		add r4,r3,r2					# (r3) + (r2) -> (r4)

解决:最简单做法是由编译器在add指令之前插入一条nop指令,这样在add指令的EX段就可以从MEM/WB流水段寄存器取出load指令的最新结果;最好的办法是在程序编译时进行优化,通过调整指令顺序以避免出现load-use现象

7. 多处理器的基本概念(简要了解)

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

王道书中举了个很好的例子:

  • 假设要将四颗圆石头滚到马路对面,滚动每颗石头平均需花费1分钟。串行处理器会逐一滚动每颗石头,花费四分钟。拥有两个核的多核处理器让两个人滚石头,即每人滚两颗,花费两分钟。向量处理器找到一根长木板,放在四颗石头后面,推动木板即可同时滚动四块石头,理论上只要力量够大,就需要一分钟。多核处理器相当于用于多名工人,而向量处理器拥有一种方法,可以同时对多件事进行相同的操作。

7.2 硬件多线程

7.3 总结


第五章最重要的就是CPU内部数据通路的数据流向,数据通路有单总线方式,多总线方式和专用通路方式,对于单总线方式,需要注意总线的数据冲突,对于专用通路方式需要注意各个部件之间数据流通时的控制信号。控制器重点掌握微程序控制器方式的一些概念,以及和硬布线控制器方式之间的对比。同时指令流水线也很重要。

参考:《王道计算机考研 计算机组成原理》

https://www.bilibili.com/video/BV1ps4y1d73V?t=0.5\&p=2

相关推荐
♛识尔如昼♛4 小时前
计算机组成原理(15) 第二章 - Cache
cache·计算机组成原理·多级cache
立志成为大牛的小牛5 小时前
数据结构——四十、折半查找(王道408)
数据结构·学习·程序人生·考研·算法
lkbhua莱克瓦2421 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法
蒙奇D索大1 天前
【11408学习记录】考研数学核心考点精讲:二维随机变量(离散与连续)全面解析
笔记·学习·考研·概率论·改行学it
元亓亓亓1 天前
考研408--计算机网络--day3--通信基础&信道&编码与调制
计算机网络·考研·408
蒙奇D索大1 天前
【算法】递归算法实战:汉诺塔问题详解与代码实现
c语言·考研·算法·面试·改行学it
武陵悭臾1 天前
Python应用开发学习: Pygame 中实现数字水平靠右对齐和垂直靠底对齐
python·学习·程序人生·游戏·个人开发·学习方法·pygame
01100001乄夵1 天前
第二课:时序逻辑入门-零基础FPGA闯关教程
经验分享·笔记·学习方法
小龙报1 天前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio