计算机组成原理-CPU
¶简介
计算机组成原理系列其四,主要是针对中国大陆考研所要求的内容对计算机组成原理的知识体系进行总结和梳理,本篇内容是计算机的CPU相关内容介绍,主要包含以下几点:
- CPU的功能和基本结构
- 指令的执行过程
- CPU内的数据通路
- 控制器的功能和原理
- 指令流水线
- 多处理器
¶大纲
- CPU的基本结构
- 运算器
- 控制器
- 指令的执行过程
- 指令周期
- 指令周期的数据流
- 指令的执行方案
- CPU内的数据通路
- 基本结构
- 例题分析
- 控制器
- 微程序控制器
- 基本概念
- 编码方式
- 地址形成方式
- 格式
- 微程序控制器
- 指令流水线
- 定义
- 基本实现
- 冒险和处理
- 结构冒险
- 数据冒险
- 控制冒险
- 流水线的性能指标
- 高级流水线技术
- 多处理器概念
- SISD、SIMD、MIMD
- 硬件多线程
- 多核处理器
¶CPU的基本结构
CPU主要由运算器和控制器两大部分组成
Tips:CPU内部的寄存器大致分为两类:
- 用户可见的寄存器:通用寄存器组、PSW、PC等
- 用户不可见寄存器:MAR、MDR、IR等
¶运算器
运算器是计算机对数据进行加工处理的中心,其主要有:
- 算术逻辑单元(ALU):进行算术、逻辑运算
- 程序状态寄存器(PSW):保留计算机中算术逻辑运算或指令的结果产生的各种状态信息,如溢出标志(OF)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中这些位参与并决定微操作的形成
- 暂存寄存器
- 通用寄存器组
- 累加寄存器(ACC)
- 移位器
- 计数器(CT)
¶控制器
控制器的基本功能是执行指令,每条指令的执行由控制器发出的一组微操作实现,其主要部件有:
- 程序计数器(PC):指出将要执行的指令在主存中的地址(即指令的地址)
- 指令寄存器(IR):存放当前正在执行的指令
- 存储器地址寄存器(MAR):存放要访问的主存单元的地址
- 存储器数据寄存器(MDR):存放向主存写入信息或从主存读出的信息
- 指令译码器
- 时序系统
- 微操作信号发生器
¶指令的执行过程
在了解指令的执行之前要先明确指令执行过程中的不同周期的含义
- 时钟周期:也称节拍或T周期,它是CPU中最小最基本的时间单位,是处理操作的最基本单位
- 机器周期:也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成。
- 指令周期:CPU每取出一条指令并执行这条指令,都要完成一系列的操作,这一系列操作所需要的时间通常叫做一个指令周期。
- 存取周期:存储器进行一次读或写操作所需的时间称为存储器的访问时间(或读/写时间),而连续启动两次独立的读或写操作所需的最短时间,称为存取周期(或存储周期)。机器周期通常由存取周期确定
指令周期常常用若干个CPU周期数来表示,机器周期时间又包含若干个时钟周期。
每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等。
¶指令周期
通常一个指令周期包含取指、间址、执行、中断四个周期,但不是所有指令都包含这四个周期,有些指令可能没有间址周期。
指令周期 | |||
---|---|---|---|
取指周期 | 间址周期 | 执行周期 | 中断周期 |
以上四个工作周期都有CPU访存操作,但是访存的目的不同。
取指周期:取指令
间址周期:取有效地址
执行周期:取操作数
中断周期:保存程序断点
为了区别不同的工作周期,会在CPU中设置4个标志触发器FE、IND、EX和INT分别对应取指、间址、执行、中断周期。
冯·诺伊曼机中指令和数据均以二进制形式存储在存储器中,CPU根据指令周期的不同阶段区分它们
¶指令周期的数据流
可以参考网络或书本视频,这里不详细说明
¶指令执行方案
- 单指令周期:所以指令都选用相同的执行时间,指令之间串行执行
- 多指令周期:不同的指令采用不同的执行步骤,指令之间串行执行
- 流水线方案:指令间可以并行执行
¶CPU内的数据通路
本节会在大题中考察,最好结合视频和实际例题学习
数据在功能部件之间传送的路径称为数据通路,也包括了数据通路上流经的部件,如ALU、通用寄存器、状态寄存器等。
数据通路的功能是实现CPU内部的运算器与寄存器及寄存器之间的数据交换。数据通路由控制部件控制。
数据流向有三种方向
-
寄存器之间
-
流入ALU中计算
-
内存与CPU之间
¶数据通路的基本结构
- CPU内部单总线结构:将所有寄存器的输入端和输出端都连接到一条总线上
- CPU内部多总线结构:将所有寄存器的输入端和输出端都连接到多条总线上
- 专用数据通路:根据指令执行过程中的数据和地址流动方向安排连接线路,避免使用共享总线
¶例题分析
分析:
对主存来说MemR表示要进行读操作,MemW进行写操作。
指令$ADD (R_0),R_1$:
$(R_0)$是目的操作数,$(R_0)$加括号表示寄存器中保存的是操作数在主存中的地址,需要进行一次间接寻址在主存中找到所需的操作数。
$R_1$是源操作数,操作数就保存在寄存器$R_1$中
对于ADD指令,执行完的数据要保存再到$(R_0)$中
- 分析指令功能和指令周期
功能:$((R_0))+(R_1)->(R_0)$
指令周期:取指周期、间址周期、执行周期 - 各阶段指令流程
取指周期:公共操作
时序 | 微操作 | 有效控制信号 | 具体功能 |
---|---|---|---|
1 | (PC)->MAR | PCout,MARin | 将PC经内部总线送至MAR |
2 | M(MAR)->MDR | MemR,MARout,MDRinE | 主存通过数据总线将MAR所指单元内容发送至MDR |
3 | (MDR)->IR | MDRout,IRin | 将MDR的内容发生到IR |
4 | 指令译码 | - | 操作字开始控制CU |
5 | (PC)+1->PC | - | 当PC+1有效时,使PC内容+1 |
间址周期:完成取数操作,被加数在主存中,加数已经放在寄存器$R_1$中
时序 | 微操作 | 有效控制信号 | 具体功能 |
---|---|---|---|
1 | $(R_0)$->MAR | R0out,MARin | 将$R_0$中地址(形式地址)送至存储器地址寄存器 |
2 | M(MAR)->MDR | MemR,MARout,MDRinE | 主存通过数据总线将MAR所指单元的内容(有效地址)送至MDR中 |
3 | (MDR)->Y | MDRout,Yin | 将MDR中数据通过数据总线送至Y |
执行周期:在ALU中完成加法操作,并将结果返回主存中(也就是($(R_0)$))
时序 | 微操作 | 有效控制信号 | 具体功能 |
---|---|---|---|
1 | $(R_1)$+Y->Z | R1out,ALUin,CU向ALU发ADD信号 | $R_1$的内容和Y相加,结果送至Z寄存器 |
2 | (Z)->MDR | Zout,MDRin | 将运算结果送至MDR |
3 | (MDR)->M(MAR) | MemW,MDRoutE,MARout | 将数据写入内存 |
¶控制器的功能和工作原理
上图是计算机硬件系统的五大功能部件及其连接关系。它们通过数据总线、地址总线和控制总线连接在一起
控制器是计算机系统的指挥中心,其主要功能有:
- 从主存中取去一条指令,并指出下一条指令在主存中的位置
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作
- 指挥并控制CPU、主存、输入和输出设备之间的数据流动方向
¶硬布线控制器
硬布线控制器是将控制部件做成产生专门固定时序控制信号的逻辑电路
简单了解即可
¶微程序控制器
微程序控制器采用存储逻辑实现,也就是把微操作信号代码化,使每条机器指令转化为一段微程序并存入一个专门的存储器(控制存储器),微操作控制信号由微指令产生
微程序设计思想就是将每条机器指令编成一个微程序,每个微程序包含若干个微指令,每条微指令对应一个或多个微操作命令
¶基本概念
-
指令:对程序执行步骤的描述
-
微指令:对指令执行步骤的描述
-
程序:是由多条指令序列组成,而一条指令由多个微指令组成
-
微程序:由微指令序列组成,每一种指令对应一个微程序,即微程序和(机器)指令是一一对应的
-
微命令和微操作:一条机器指令可以分解成一个微操作序列,这些微操作是计算机中最基本、不可再分解的操作。微命令是微操作的控制信号,微操作是微命令的执行过程
-
微指令和微周期:微指令是若干微命令的集合。存放微指令的控制存储器的单元地址称为微地址(每条微指令都对应一条存储地址)。微周期是指执行一条微指令所需的时间,通常为一个时钟周期。
-
主存储器与控制存储器:主存储器即主存(RAM、内存)用于存放程序和数据,在CPU外。控制存储器(CM)用于存放微程序,在CPU内部,用ROM实现
-
程序和微程序:程序是指令的有序集合用于完成特定的功能;微程序是微指令是有序集合,一条指令的功能由一段微程序实现(指令是对微指令功能的“封装”)
-
对于用户而言,计算机系统中的微程序的结构和功能是透明的,无需知道。
-
一条指令一般用取指、间址、执行和中断周期组成,其中取指、间址、中断周期的微程序是共用的,一般只有执行周期的微程序不同。
- 如果某指令系统有N条机器指令,则控制存储器(CM)中微程序个数至少是N+1个(间址和中断可以没有)
-
注意区别以下寄存器
- 地址寄存器(MAR):用于存放主存的读、写地址
- 微地址寄存器(CMAR):用于存放控制存储器的读、写微指令的地址
- 指令寄存器(IR):存放从主存中读出的指令
- 微指令寄存器(CMDR):存放从控制存储器中读出的微指令
¶微指令的编码方式
微指令的编码方式即微指令的控制方式,是指如何对微指令的控制字段进行编码,以形成控制信号。
-
直接编码(直接控制)方式
直接编码无需译码,微指令的微命令字段中每位都代表一个微命令。
N个微命令对应N位操作字段 -
字段直接编码方式
将为直流电微命令字段分成若干小字段,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关
分段原则:- 互斥性微命令分在同一字段内,相容性微命令分在不同字段内
- 每个小段内包含的信息位不能太多
- 每个小段还有留出一个状态,表示本字段不发出任何微命令。类如,某字段的长度为三位时,最多只能表示7个互斥的微命令。
-
字段间接编码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,因此称为字段间接编码,又称隐式编码 -
例题
1.
答:分别包含7、3、12、5和6个微命令,则需要3、2、4、3、和3比特位,共15位
答:共有32条指令,每个微程序平均由4条微指令组成,则对应的微指令为$32\times4=128$条,公共微指令2两条,则整个系统的微指令条数为130条,则至少要8个比特位($2^7=128$ < 130 < $2^8=256$)
¶微指令的地址形成方式
- 直接由微指令的下地址字段指出
微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,又称为断定方式 - 增量计数器法
(CMAR)+1->CMAR,适用于后继微指令的地址连续的情况 - 根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成
¶微指令的格式
微指令的格式与微指令的编码方式有关,有两种
- 水平型微指令
从编码方式看,直接编码、字段直接编码、字段间接编码和混合编码都属于水平型编码。一条水平型微指令定义并执行几种并行的基本操作
优点:微程序短,执行速度快
缺点:微指令长,编写程序较麻烦
$A_1$ | $A_2$ | ... | $A_n$ | 判断测试字段 | 后继地址字段 |
操作控制 | 顺序控制 | >
- 垂直型微指令
在微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能。一条垂直型微指令只能定义并执行一种基本操作
优点:微指令短、简单、便于编写微程序
缺点:微程序长、执行速度慢、工作效率低
$\mu OP$ | $Rd$ | Rs |
微操作码 | 目的地址 | 源地址 | >
- 混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作
¶指令流水线
提高指令运行效率可以采用指令流水线的方式,可以从两方面提高处理机的并行性
- 时间上的并行性:即流水线技术
- 空间上的并行性:超标量处理机
¶指令流水线的定义
将一条指令的执行过程分解为若干阶段,每个阶段由相应的功能部件完成。
¶流水线的基本实现
建议观看相应视频加以学习。
- 流水线的数据通路
- IF段包括程序计数器(PC)、指令存储器、下条指令地址的计算逻辑
- ID段包括操作控制器、取操作数逻辑、立即数符号拓展模块
- EX段包括算术逻辑单元(ALU)、分支地址计算模块、
- MEM段主要包括数据存储读写模块
- WB段主要包括寄存器写入控制模块
- 每个流水段后面都需要增加一个流水寄存器,用于锁存本段处理完成的数据和控制信号(即锁存器或缓冲寄存器,目的是便于统一每一段时间使其统一)
¶流水线的冒险和处理
¶结构冒险——“互斥”
由于多条指令在同一时刻争用同一硬件资源形成的冲突,也称资源冲突
解决办法:
- 前一指令访存时,使后续指令暂停一个时钟周期
- 增加硬件资源,设置单独的数据存储器和指令存储器
¶$\star$ 数据冒险——“同步问题”
在一个指令中,下一条指令会用到当前指令计算出的结果,此时这两条指令就会产生数据冲突
-
RAW(read after write):又称先写后读相关性。
比如下面指令序列,如果第二条指令,在第一条指令写x5之前,第二条指令先读x5,就会引起逻辑错误。1
2add x5, x4, x6
add x4, x5, x2 -
WAW(write after write):又称先写后写相关性。
比如下面指令序列,如果第二条指令,在第一条指令写x5之前,第二条指令先写x5寄存器,就会引起逻辑错误。1
2add x5, x4, x6
add x5, x3, x2 -
WAR(write after read):又称先读后写相关性。
比如下面的指令序列,第一条指令会读取x4,第二条指令会写x4。在流水线中,如果第二条指令比第一条指令先写x4,则第一条指令就会读出错误的值。1
2add x5, x4, x6
add x4, x3, x2
解决办法:
- 将后续指令暂停一到几个时钟周期
- 设置专用数据通路
- 编译器对指令编译优化,调整指令顺序
¶控制冒险
又称分支冒险,指令流水时,处理器遇到分支指令,如执行转移、调用或返回时,会修改PC值,会造成断流,不能在流水开始阶段就判断出分支结果。
解决办法:
- 对转移指令进行分支预测
- 预先加载成功与不成功两个控制流方向上的目标指令
- 提高分支预测成功率
¶流水线的性能指标
¶流水线的吞吐率(TP)
在单位时间内流水线所完成的任务数量,公式:
$TP=\frac{n}{T_k}$
n是任务数,$T_K$是处理完n个任务所用的总时间
设k为流水线段数,$\bigtriangleup t$为时钟周期,在输入流水线的任务连续的理想情况下,一条k段流水线能在k+n-1个时钟周期内完成n个任务。
此时流水线的吞吐率为:$TP=\frac{n}{(k+n-1) \ast (\bigtriangleup t)}$,当$n \rightarrow \infty$,得最大吞吐率${TP_{max}}=\frac{1}{\bigtriangleup t}$
¶流水线的加速比(S)
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比,称为流水线的加速比。公式:
$S=\frac{T_0}{T_k}$
${T_0}$表示不使用流水线时的执行时间;${T_k}$表示使用流水线的总时间。
对于一条k段流水线,当连续输入任务数$n \rightarrow \infty$,得最大加速比${S_{max}=k}$
¶流水线的效率(E)
流水线的设备利用率称为流水线的效率。
在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积,与n个任务所用的时间及k个流水段所围成的时空区总面积之比。因此,流水线的效率包含了时间和空间两个因素。
$E=\frac{n个任务占用k时空区域的有效面积}{n个任务所用的时间与k个流水段所围成的时刻区域总面积}=\frac{T_0}{k\ast{T_k}}$
当$n\rightarrow \infty,E_{max}=1$
¶高级流水线技术
-
超标量流水线技术(多发技术,在空间上)
也称为动态多发射技术。每个时钟周期内可并发多条独立指令,即以并行操作方式将两条或多条指令编译并执行,为此需配置多个功能部件。
超标量计算机不能调整指令的执行顺序(但有些CPU可以,支持乱序执行),因此通过编译优化技术,把可并行执行的指令搭配起来,挖掘更多的指令并行性。 -
超流水线技术(在时间上)
在一个时钟周期内再分段,在一个时钟周期内一个功能部件使用多次。不能调整指令的执行顺序,靠编译程序解决优化问题。 -
超长指令字
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位),为此需要采用多个处理部件
¶多处理器的基本概念
¶SISD、SIMD、MIMD的基本概念
¶单指令流单数据流SISD
-
特性:
各指令序列只能并发、不能并行,每条指令处理一两个数据
不是数据级并行技术 -
硬件组成:
一个处理器+一个主存储器
若采用指令流水线,需设置多个功能部件,采用多模块交叉存储器
¶单指令流多数据流SIMD
-
特性:
各指令序列只能并发、不能并行,但每条指令可同时处理很多个具有相同特征的数据,是一种数据级并行技术 -
硬件组成:
一个指令控制部件(CU)+多个处理单元/执行单元(如ALU)+多个局部存储器+一个主存储器
每个执行单元有各自的寄存器组、局部存储器、地址寄存器
不同执行单元执行同一条指令,处理不同的数据
¶多指令流单数据流MISD
多条指令并行执行,处理同一个数据。现实中不存在这种计算机
¶多指令流多数据流MIMD
- 特性:
各指令序列并行执行,分别处理多个不同的数据
是—种线程级并行、甚至是线程级以上并行技术
¶硬件多线程基本概念
¶多核处理器基本概念
¶典型例题
待补充
参考文献:
《王道考研-计算机组成原理复习指导》
《Computer Systems A Programer’s Perspective Third Edition》