CPU=计算器+控制器
控制器:协调并控制计算机各部件执行程序的指令序列,包括取指令,分析指令,执行指令
计算器:对数据加工
(1)指令控制
(2)操作控制
(3)时间控制
(4)数据加工
(5)中断处理
(1)算术逻辑单元ALU
(2)暂存寄存器
(3)累加寄存器ACC
(4)通用寄存器组
(5)程序状态字寄存器
(6)移位器
(7)计数器:控制乘除运算的操作步骤
系统的指挥中枢,基本功能是执行指令,每条指令的执行由控制器发出一组微操作实现
控制器有硬布线控制器和微程序控制器
组成:
(1)程序计数器PC:取指令
(2)指令寄存器IR:保存当前执行指令
(3)指令译码器:对操作码字段译码
(4)存储器地址寄存器MAR
(5)存储器数据寄存器MDR
(6)时序系统:产生时序信号,由统一时钟CLOCK分频得到
(7)微操作信号发生器:根据IR,PSW,时序信号产生控制整个计算机的控制信号,有组合逻辑型和存储逻辑型
控制器—>指令操作码,指令的执行步骤,条件信号—>当前计算机各部件要用到的控制信号—>各部件协同运行
用户可见的寄存器:通用寄存器组,程序状态字寄存器PSW
用户不可见的寄存器:MAR,MDR,IR
CPU取出一条指令并执行的时间周期,因不同指令而异
指令周期 ⩾ \geqslant ⩾机器周期 ⩾ \geqslant ⩾时钟周期
那三个周期可以相等吗
一个完整的指令周期包括:取指周期——间址周期(不一定)——执行周期——中断周期(不一定)
间址周期是指有些操作数需要访存去查找,必须间接寻址
而无条件转移指令JMPX就没有间址周期,只需要取指和执行
由于CPU和I/O设备直接会有信息的交换,比如键盘鼠标显示器等,都会与CPU进行联系,这时候CPU就会采用中断方式来实现信息交换,但是是在每条指令执行结束时才发中断查询信号,如果有,CPU就进入中断响应周期,
四个周期CPU都会访存,取指令,取有效地址,取操作数,保存程序断点
怎么区别四个周期?设置标志触发器FE(取指),IND(间址),EX(执行),INT(中断),1表示有效
即不同周期数据的流动方向
(1)IR或MDR(取出指令中的形式地址)—>MAR—>地址总线—>内存 找到操作数的地址
(2)CU发出读命令—>控制总线—>内存
(3)内存—>数据总线—>MDR(存放有效地址)
从IR中的真实地址找到操作数并送到ALU中运算,根据指令不同,没有统一的数据流向
处理中断请求,程序断点压入堆栈中,SP表示栈顶地址
进栈先修改指针再存入数据
由于一个指令周期有多个时间段(不同的部件不同的执行步骤),所有有不同的方案来安排这些执行步骤
所有指令都是固定的时间完成
指令串行完成,时钟周期取决于最长的那条指令,对短指令而言降低了系统速度
一个时钟周期就是一条指令
也就是说最长指令是1秒,那时钟周期就是一秒,其他指令也全是在一秒内执行完并且会有剩余,因此效率不高
不同类型的指令选用不同的执行步骤
指令之间串行
但是可以选用不同个数的时钟周期来完成不同指令的执行过程
不要求统一时间,也就是说我规定一个时钟周期需要1秒,但是你这个指令需要3秒,那就给你三个时钟周期,不同的时间就给不同数量的时钟周期
指令之间并行执行
争取一个时钟周期一条指令,也就是说我规定一个时钟周期1秒,那你流水线就必须争取做到一秒一个指令,尽管你一个指令需要三秒,因为是并行执行,除了最开始的几条指令,后面无限接近于1一秒一个指令
数据在功能部件之间传送的路径成为数据通路,包括经过的部件
由控制器控制,根据指令生成对数据通路的控制信号
实现了CPU内部运算器,寄存等的数据交换
数据通路不仅仅是CPU内部的
(1)CPU内部单总线方式
所有寄存器输出端和输入端在一条公共通路上,结构简单,冲突多,性能低
(2)CPU内部多总线方式
所有寄存器输出端和输入端在多条公共通路上,提高效率
(3)专用数据通路方式
根据指令执行过程中的数据和地址的流动方向安排连接线路,避免共享总线,速度更快,但硬件多
“in”表示部件允许输入控制信号,“out”表示部件允许输出控制信号
CPU内部总线和外部的系统总线是不一样的,区别如下
(1)寄存器之间的数据传送
如(PC)—>MAR
(2)主存与CPU之间的数据传送
如(PC)—>MAR
1—>R
MEM(MAR)—>MDR
(MDR)—>IR
(3)执行算术或逻辑运算
相加的两个数必须在ALU的两个输入端同时有效,所以ALU的一个输入端有一个暂存器Y,输出端也有一个暂存器Z
(MDR)—>MAR
1—>R
MEN(MAR)—>MDR
(MDR)—>Y
(ACC)+(Y)—>Z
(Z)—>ACC
功能:(1)取指令,并指出下一条指令的位置
(2)对指令进行译码或测试,产生相应的操作控制信号
(3)指挥并控制CPU,内存,输入输出设备直接的数据流动方向
根据指令的要求,当前的时序及外部和内部的状态,按时间的顺序发送一系列微操作控制信号
由复杂的组合逻辑电路和一些触发器构成,因此又称为组合逻辑控制器
CU的输入信号来源:(1)指令译码器译码产生的指令信息
(2)时序系统产生的机器周期信号和节拍信号
(3)来自执行单元的反馈信息即标志
输出到CPU内部或外部控制总线上
控制单元还接受来自系统总线(控制总线)的控制信号,如中断请求,DMA请求
(1)时钟周期
时钟信号—>节拍发生器,产生节拍;每个节拍宽度正好一个时钟周期
(2)机器周期
指令执行过程中的一个基准时间,因指令周期不同,因此通常采用固定的存取周期(内存存取一个指令字的最短时间)作为基准时间
当存储字长=指令字长,取指周期=机器周期
一个机器周期可以完成若干个微操作
(3)指令周期,见上
(4)微操作命令分析
控制单元发出各种操作命令(控制信号)序列的功能,不同的指令,控制单元发出不同的微操作命令
以下是不同周期的微操作
不同指令所对应的微操作数及复杂程度不同,因此每条指令和每个微操作所需的执行时间也不同
(1)同步控制方式
系统有一个统一的时钟,所有的控制信号均来自这个统一的时钟信号
一般以最长的最为标准
用完全统一的,具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令
电路简单,运行速度慢
(2)异步控制方式
不存在基准时标信号,各部件自行工作,通过应答的方式联络
速度快,电路复杂
(3)联合控制方式
两者的折中,对不同指令的微操作实现大部分同步控制,小部分异步控制
(2)进行微操作信号综合
然后进行分析归类,写出逻辑表达式然后简化
微操作信号影响因素:机器周期 ∧ \land ∧节拍 ∧ \land ∧脉冲 ∧ \land ∧操作码 ∧ \land ∧机器状态条件
比如M(MAR)—>MDR
=FE·T1+IND·T1(ADD+STA+LDA+JMP+BAN)+EX·T1(ADD+LDA)
=T1{FE+IND(ADD+STA+LDA+JMP+BAN)+EX(ADD+LDA)}
(3)画出微操作命令的逻辑图
根据逻辑表达式画出对应的每个微操作信号的逻辑电路图
如M(MAR)—>MDR,但是未考虑门的扇入系数
采用存储逻辑实现,把微操作信号代码化,每条机器指令转化成为一段微程序并存入一个专门的存储器中,微操作控制信号由微指令产生
设计思想:每条机器指令编写成一个微程序,每个微程序包含若干个微指令,每条微指令对应一个或几个微操作命令
微程序 ⩾ \geqslant ⩾微指令(微命令的集合) ⩾ \geqslant ⩾微操作
微程序可以存到一个控制存储器中,用寻址用户程序机器指令的办法来寻址微指令
基本术语:
(1)微命令与微操作
微操作:一条机器指令可以分解成一个微操作序列,是计算机中最基本的,不可再分解的操作
微命令:控制部件发出的控制命令,构成控制序列的最小单位
两者一一对应,微命令是微操作的控制信号,微操作是微命令的执行过程
微命令有相容性和互斥性之分;相容性:同时产生,共同完成一些微操作的微命令;互斥性:不允许同时出现的微命令
组合逻辑控制器也有这两个概念
(2)微指令与微周期
微指令:若干微命令的集合,存放微指令的控制存储器的单元地址称为微地址
微指令常包括:操作控制字段(微操作码字段,产生某一步操作所需的各种操作控制信号)和顺序控制字段(微地址码字段,控制产生下一条要执行的微指令地址)
微周期:执行一条微指令所需的时间,通常为一个时钟周期
(3)主存储器与控制存储器
控制存储器CM:CPU内部,存放微程序,用ROM实现
(4)程序与微程序
程序:指令的有序集合,完成特定功能
微程序:微指令的有序集合,一条指令的功能由一段微程序来实现,描述机器指令
(1)微程序控制器的基本组成
控制存储器:核心部件,存放微程序,用ROM实现
微指令寄存器CMDR/ μ \mu μIR:存放从CM中取出的微指令,位数与微指令字长相等
微地址形成部件:产生初始微地址和后继微地址
微地址寄存器CMAR:存放读写微指令的地址
(2)微程序控制器的工作过程
在微程序的控制下计算机执行机器指令的过程
执行取微指令公共操作:自动将取指微程序的入口地址送入CMAR,并从CM中读出相应的微指令送入CMDR
机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入CMAR
从CM中逐条取出对应的微指令并执行
执行完一个机器指令的微程序后,又回到取指微程序的入口地址
(3)微程序和机器指令
一个机器指令对应一个微程序
可以形成公共的微程序,比如取指,间址,中断
(1)直接编码方式
无法进行译码,每位代表一个微命令,设计时选用或不选用某个微命令,将对应位设置为0或1
简单直观速度快,但数量有限
(2)字段直接编码方式
微命令字段分成若干小字段,把互斥性微命令组合在用一个字段,相容性微命令组合在不同字段中,每个字段独立编码
缩短了微指令字长,需要译码,速度较慢
每个小段的信息位不能太多,否则增加译码线路的复杂度和译码时间;一个小段还留一个状态位,表示不发出任何微命令
(3)字段间接编码,隐式编码
一个字段的某些微命令需要由另一个字段的某些微命令来解释
进一步缩短微指令字长,削弱了微指令的并行控制能力,常作为直接编码的辅助手段
后继微指令的形成的两大基本类型:
(1)直接由微指令的下地址字段指出
(2)根据机器指令的操作码形成
(3)增量计数器法:(CMAR)+1—>CMAR
(4)根据标志来决定微指令分支转移的地址
(5)通过网络测试形成
(6)有硬件直接产生微程序入口的地址
如果指令系统中n条机器指令,则CM中微程序个数至少是n+1
与编码方式有关
(1)水平型微指令
直接编码,字段直接编码,字段间接编码和混合编码都属于水平型微指令
指令字中一位对应一个控制信号,1或者0
一条水平型微指令定义并执行集中并行的操作
微程序短,速度快,但是微指令长,编写程序麻烦
(2)垂直型微指令
在微指令中设置微操作码字段,采用微操作码编译法
一条垂直型微指令只能定义并执行一种基本操作
微指令短,简单规整便于编写微程序;但是微程序长,执行速度慢,效率低
(3)混合型微指令
在垂直型的基础上增加一些并行操作
微指令较短,便于编写,速度较快
(4)水平型微指令和垂直型微指令的比较
水平型 | 垂直型 |
---|---|
并行操作强,效率高,灵活性强 | 较差 |
执行一条微指令的时间短 | 执行时间长 |
微指令字长微程序短 | 微指令字短微程序长 |
用户难以掌握 | 容易掌握 |
(1)写出对应机器指令的微操作的命令及节拍安排
比如取指阶段的微操作命令及节拍安排:
T0:(PC)—>MAR,1—>R
T1:M(MAR)—>MDR,(PC)+1—>PC
T2:(MDR)—>IR;OP(IR)—>微地址形成部件
由于后继微指令的地址由上一条给出,则改进后:
T0:(PC)—>MAR,1—>R
T1:Ad(CMDR)—>CMAR
T2:M(MAR)—>MDR,(PC)+1—>PC
T3:Ad(CMDR)—>CMAR
T4:(MDR)—>IR
T5:OP(IR)—>微地址形成部件—>CMAR
(2)确定微指令格式
(3)编写微指令码点
(1)动态微程序设计
能根据用户的要求改变微程序
(2)毫微程序设计
解释微程序的微程序,直接控制硬件
微程序控制器 | 硬布线控制器 | |
---|---|---|
工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码,状态和时序,即时产生 |
执行速度 | 慢 | 快 |
规整性 | 较规整 | 烦琐不规整 |
应用场合 | CISC CPU | RISC CPU |
易扩充性 | 易扩充修改 | 困难 |
异常(内中断):CPU内部产生的意外事件,与当前执行指令相关的同步事件,CPU自身完成检测
中断(外中断):CPU外部设备向CPU发出的中断请求,由外部设备触发,与当前执行指令无关的异步事件
异常分为:
硬故障中断:硬连线异常,如存储器校验错,总线错误
程序性异常(软件中断):CPU内部执行指令引起的,如整除0,溢出,断点,单步跟踪,栈溢出,地址越界,缺页等,又可分为:
(1)故障
指令启动后,执行结束前被检测到的异常事件,如缺页,整除0
(2)自陷
是预先安排的一中异常事件;在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个陷阱
调试的断点设置和单步跟踪功能就是通过陷阱机制实现
(3)终止
计算机无法继续执行的硬件故障,如控制器出错,存储器校验错,只能终止
终止异常和外中断属于硬件中断
(1)可屏蔽中断
通过可屏蔽中断请求线INTR向CPU发出的中断请求,被屏蔽的中断请求将不被送到CPU
(2)不可屏蔽中断
通过专门的不可屏蔽中断请求线NMI向CPU发出的中断请求,通常是非常紧急的硬件故障,如断电
CPU对异常和中断响应的过程可分为:
(1)关中断
保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断
设置中断允许IF触发器来实现,IF为0表示关中断
(2)保存断点和程序状态
通常保存在栈中,为了支持异常或中断的嵌套
(3)识别异常和中断并转到相应的处理程序
软件识别:大多数异常采用,中断也用
硬件识别:中断采用
软件识别:CPU设置一个异常状态寄存器,记录异常原因;操作系统使用一个统一的异常或中断查询程序
硬件识别(向量中断):异常或中断处理程序的首地址称为中断向量,所有中断向量都在中断向量表中,每个异常或中断一个指定的中断类型号,中断向量表中,类型号和中断向量一一对应
之前的指令执行都是单周期处理器,同一时刻CPU中只有一条指令在执行
现代计算机普遍使用指令流水线技术,同一时刻多条指令在CPU不同部件并发执行,大大提高了并行性和效率
提高并行性的两大方面:
时间上的并行:一个任务拆为不同子阶段,在不同部件上同时执行,称为流水线技术
空间上的并行:一个处理机内设置多个执行相同任务的功能部件,并行工作,称为超标量处理机
一条指令的执行过程分为若干个阶段,每个阶段不同部件完成
假设一条指令的执行过程分为:取指(IF),译码/读寄存器(ID),执行/计算地址(EX),访存(MEM),写回(WB)
理想情况,每个时钟周期都有一条指令完成,每条指令的时钟周期数(CPI)都为1
每个阶段时间长度以最复杂的阶段为准,因此流水线方式不能缩短条指令的执行时间,但是提高了整个程序的效率
为实现指令流水线,指令集的特征:
(1)指令长度应尽量一致,简化了取指令和指令译码操作
(2)指令格式应尽量规整,尽量保证源寄存器的位置相同
(3)采用Load/Store指令访问存储器
(4)数据和指令在存储器对齐存放,有利于减少访存次数
时空图
数据通路
控制信号
执行过程
(1)取指IF
PC值作为地址从指令寄存器取出第一条指令字,计算PC+4,送入PC输入端
指令字和PC+4通过RD输出端送入IF/ID寄存器
可能用到的数据都向后传
时钟到来时PC+4和指令字锁存到IF/ID寄存器
(2)译码/读寄存器ID
控制器根据指令字生成后续控制信号
对于lw访存指令,根据指令字中的rs,rt取出寄存器中的RS,RT,
符号扩展单元可能会扩展这些数据
多路选择器根据指令字生成指令可能的写寄存器编号
时钟到来,数据和信号和PC+4锁存在ID/EX寄存器中
(3)执行/计算地址EX
由具体指令确定
时钟到来,数据和信号会锁存在EX/MEM流水寄存器中
(4)访存MEM
也由具体指令确定
对于lw访存指令,根据寄存器中锁存的地址写入数据和内存读写控制信号对存储器进行读和写
时钟到来,数据和信号会锁存在MEM/WB流水寄存器中
(5)写回WB
也由具体指令确定
将读出的数据写回指定寄存器,时钟到来时完成数据写入寄存器
运算类指令:IF——ID——EX——WB
Load指令:IF——ID——EX——MEM——WB
Store指令:IF——ID——EX——MEM
条件转移指令:IF——ID——EX——MEM(写回PC)
无条件转移指令:IF——ID——EX(写回PC)
有些情况使流水线不能正确执行后续指令而导致流水线阻塞或停顿,称为流水线冒险
主要原因有以下三种:
多条指令同一时刻争夺同一资源(硬件)
解决方法:(1)前一指令访存时,后一相关指令暂停一个时钟周期
(2)单独设置数据存储器和指令存储器,如指令cache和数据cache
一个程序中下一条指令用到当前指令计算的结果,但是发生数据冲突又可以细分为三类:
(1)写后读:当前指令写,下一指令读,先读后写,读到的就是错数据
(2)读后写:当前指令读,下一指令写,先写后读,读的就是错数据
(3)写后写:下一指令在当前指令之前写,写入的就不是最新值
解决办法:
(1)把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失,分为硬件阻塞和软件插入NOP指令
(2)设置相关专用通路,不等指令写,直接在ALU计算完了作为结果开始下一条指令,称为数据旁路技术
(3)通过编译器对数据相关的指令编译优化,调整指令顺序
指令一般是顺序执行,但是有改变指令执行顺序的情况,改变PC值造成断流,引起控制冒险
解决办法
(1)对转移指令进行分支预测,尽早生成转移目标地址,分为静态和动态
静态预测:预测条件不满足,即继续执行分支指令的后续指令
动态预测:根据程序执行的历史情况,进行动态预测调整,准确率较高
(2)预取转移成功和不成功两个控制流方向上的目标指令
(3)加快和提前形成条件码
(4)提高转移方向的猜准率
cache 缺失的处理过程也会引起流水线阻塞
单位时间流水线完成的任务数量
吞吐率TP=n/TK
n是任务数,Tk是处理完n个任务所用的总时间,k是流水段的段数,t是时钟周期
任务连续的理想情况下,一条k段流水线能在k+n-1个时钟周期内完成n个任务
TP=n/(k+n-1)t
当n无穷大,TP=1/t
完成同样一批任务,不使用流水线与使用流水线所用的时间之比
加速比S=T0/TK
T0表示不使用流水线的总时间,TK表示使用流水线的总时间
由TK=n/(k+n-1)t,T0=knt
则S=kn/k+n-1,当n无穷大,S=k
两种增加指令级并行的策略:多发射技术(多个功能部件)和超流水线技术(增加流水级数)
也称动态多发射技术
每个时钟中期并发多条独立指令,配置多个功能部件
简单超标量:指令顺序发射
复杂超标量:动态流水线调度技术,通过动态分支预测等手段,指令不按顺序执行,称为乱序执行
静态多发射技术
由编译程序挖掘出指令潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字;采用多个处理部件
流水线功能段划分得越多,时钟周期就越短,通过提高流水线主频
但是流水寄存器数量有限,所以划分级数有限制
超流水线CPU充满后CPI=1,但主频更高
多发射流水线CPU并行执行,CPI<1,但成本更高,控制更复杂