计算机组成原理·中央处理器
中央处理器
控制器:负责协调并控制计算机各部件执行程序的指令序列:取指令、分析指令、执行指令
运算器:对数据加工
- 指令控制
- 操作控制
- 数据加工
- 时间控制
- 中断处理
基本结构
运算器和控制器两大部分组成
运算器:
- 算术逻辑单元(ALU)
- 暂存寄存器
- 累加寄存器(ACC)
- 通用寄存器组(AX/BX/CX/DX/SP)
- 程序状态字寄存器(PSW:OF/SF/ZF/CF)
- 移位器
- 计数器
控制器(CU):
- 程序计数器(PC)
- 指令寄存器(IR)
- 指令译码器
- 存储器地址寄存器
- 存储器数据寄存器
- 时序系统
- 微操作信号发生器
指令执行过程
指令周期
CPU从主存取出并执行一条指令的时间,指令周期通常使用若干机器周期表示,每个机器周期可等长或不等,一个机器周期包含若干时钟周期(节拍),每个机器周期内的时钟周期数可以不等
- 无条件转移指令:执行阶段不需要访存,只包含取指阶段(取指和分析)和执行阶段
- 间接寻址指令:为了取操作数,需要先访1次,取出有效地址,然后访存,取出操作数,所有需要包含间址周期,介于取指和执行之间
- CPU采用中断方式实现主机和I/O设备的信息交换,CPU在每条指令结束前,都要发送中断查询信号,若有中断请求,CPU进入中断响应阶段(中断周期)
取指周期 | 间址周期 | 执行周期 | 中断周期 |
只有访存的目的不同,取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点
CPU内设置了4个标志触发器FE/IND/EX/INT
FE | IND | EX | INT |
---|---|---|---|
Fetch | Index | Execute | Interrupt |
取值 | 间址 | 执行 | 中断 |
指令周期的数据流
取指周期
根据PC中的内容从主存取出指令代码放入IR
- PC \(\to\) IR \(\to\) AddrBus \(\to\) Mem
- CU \(\to\) DataBus \(\to\) MDR \(\to\) Mem
- Mem \(\to\) DataBus \(\to\) MDR \(\to\) IR(存放指令)
- CU \(\stackrel{SignalControl::FE}{\longrightarrow}\) [(PC) + 1 \(\to\) PC]
间址周期
取操作数有效地址,间址为例:指令中的地址码送到MAR并送至地址总线,CU向存储器发送读命令,以获取有效地址并存在MDR
- Addr(IR) / MDR \(\to\) MAR \(\to\) AddrBus \(\to\) Mem
- CU \(\stackrel{SignalI/O::READ}{\longrightarrow}\) ControlBus \(\to\) Mem(存放有效地址)
- Mem \(\to\) DataBus \(\to\) MDR
执行周期
取操作数,根据IR的指令字的操作码通过ALU操作产生执行结果
- 无统一的数据流向
中断周期
处理中断请求,假设程序断点存入堆栈,用SP指示栈顶地址,入栈操作是先修改栈顶指针,后存入数据
- CU \(\stackrel{SignalStack::SP}{\longrightarrow}\) [(SP) - 1 \(\to\) SP] \(\to\) MAR \(\to\) AddrBus \(\to\) Mem
- CU \(\stackrel{SignalI/O::WRITE}{\longrightarrow}\) ControlBus \(\to\) Mem
- PC \(\to\) MDR \(\to\) DataBus \(\to\) Mem(程序断点存入主存)
- CU \(\to\) PC(中断服务程序的入口地址送至PC)
指令执行方案
- 单指令周期
- 多指令周期
- 流水线方案
数据通路
功能
数据通路:数据在功能部件之间传输的路径
由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
数据通路功能:实现CPU内部的运算器与寄存器以及寄存器之间的数据交换
基本结构
- CPU内部单总线模式
所有寄存器的输入输出端都连接在一条公共通路上,结构简单但数据传输存在较多的冲突现象,性能较低。连接各部件的总线只有一条时,称为单总线结构,CPU中有两条或更多的总线时,构成双总线结构或多总线结构 - CPU内部多总线模式
所有寄存器的输入输出端都连接在多条公共通路上,相比之下单总线在一个时钟内只允许传一个数据,因此指令执行效率很低,因此在多总线方式,同时在多总线上传输不同的数据,提高效率 - 专用数据通路方式
根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,性能较高,但硬件量大
寄存器之间的数据传输
通过内部总线完成
寄存器AX的输入输出由AXout和AXin控制
- (PC) \(\to\) MAR,PCout和MARin有效
主存与CPU之间的数据传输
主存与CPU之间的数据传输需要借助CPU内部总线完成
主存内读取
- (PC) \(\to\) MAR,PCout和MARin有效
- 1 \(\to\) R,CU发出读命令
- MEM(MAR) \(\to\) MDR,MDRin有效
- (MDR) \(\to\) IR,MDRout和IRin有效
执行算术或逻辑算术
由于ALU没有内部存储功能,执行加法操作,相加的两个数必须在ALU的两个输入输出端同时有效
- (MDR) \(\to\) MAR,MDRout和MARin有效
- 1 \(\to\) R,CU读命令
- MEM(MAR) \(\to\) 操作数从主存送至MDR
- (MDR) \(\to\) Y,MDRout和Yin有效
- (ACC) + (Y) \(\to\) Z ACCout和ALUin有效
- (Z) \(\to\) ACC,Zout和ACCin有效
控制器功能与原理
结构和功能
- 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据
- 输入设备和输出设备通过接口电路与总线相连接
- 内存储器、输入设备通过接口电路与总线相连接
- 内存储器、输入设备和输出设备从地址总线接收地址信息,从控制总线得到控制信号,通过数据总线与其他部件传输数据
- 控制器部件从数据总线接受指令信息,从运算器部件接收指令转移地址,送出指令地址到地址总线,还要向系统中的部件通过运算所需的控制信号
控制器功能:
- 从主存取指令,并指出下一条指令在主存中的位置
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作
- 指挥并控制CPU、主存、输入输出设备之间的数据流动方向
根据控制器产生微操作控制信号的方式不同,控制器可分为
- 硬布线控制器
- 微程序控制器
两类控制器的PC和IR是相同的,但确定和表示指令执行步骤的办法以及给出控制部件各部件运算所需控制信号的方案不同
硬布线控制器
- 根据指令的要求、当前的时序及外部和内部的状态,按时间的顺序发送一系列微操作控制信号
- 由复杂的组合逻辑门电路和一些触发器构成
硬布线控制单元
指令的操作码是决定控制单元发出不同操作命令(控制信号)的关键
CU的输入信号来源:
- 经指令译码器译码产生的信息指令
- 时序系统产生的机器周期信号和节拍信号
- 来自执行单元的反馈信号(标志)
- 系统总线(控制总线)控制信号(中断请求、DMA请求)
硬布线控制器的时序系统及微操作
- 时钟周期
用时钟信号控制节拍发生器,可以产生节拍,每个节拍的宽度对应一个时钟周期,每个节拍内机器可以完成一个或几个需要同时执行的操作 - 机器周期
是所有指令执行过程的一个基准时间,访问一次存储器的时间是固定的,因此通常以存取周期作为基准时间,即内存中读取一个指令字的最短时间作为机器周期,在存储字长等于指令字长前提下,取指周期视为机器周期 - 指令周期
- 微操作命令分析
控制单元具有发出各种操作命令(控制信号)序列的功能,这些命令与指令有关
执行过程,一条指令分为3个工作周期:取指周期、间址周期、执行周期
取指周期
- (PC) \(\to\) MAR
- 1 \(\to\) R
- M(MAR) \(\to\) MDR
- (MDR) \(\to\) IR
- OP(IR) \(\to\) CU
- (PC) + 1 \(\to\) PC
间址周期
- Addr(IR) \(\to\) MAR
- 1 \(\to\) R
- M(MAR) \(\to\) MDR
执行周期
- 非访存指令
- 访存指令
CPU控制方式
- 同步控制方式
具有统一的时钟,所有控制信号均来自统一的时钟信号 - 异步控制方式
不存在基准时标信号,各部件按自身固有的速度工作,以应答方式联络 - 联合控制方式
大部分采用同步控制,小部分采用异步控制
微程序控制器
采用存储逻辑实现,把微操作信号代码化,使每条机器指令转化为一段微程序并存入一个专门的存储器(控制存储器),微操作控制信号由微指令产生
基本概念
-
微操作和微命令
一条机器指令可以分解为一系列微操作序列,微操作是计算机中最基本、不可再分解的操作;微程序控制的计算机中,将控制部件向执行部件发出的各种控制命令称为微命令,是构成控制系列的最小单位
微命令有相容性和互斥性 -
微指令和微周期
微指令是若干微命令的集合,存放微指令的控制存储器的单元地址称为微地址
一条微地址包括:
(1)操作控制字段(微操作码):用于产生某一步操作所需的各种操作控制信号
(2)顺序控制字段(微地址码):用于控制产生下一条要执行的微指令地址
微周期是执行一条微指令所需的时间,通常为一个时钟周期 -
主存储器和控制存储器
主存储器M,用于存放程序和数据,在CPU外部,用RAM实现
控制存储器CM,用于存放微程序,在CPU内部,用ROM实现 -
程序和微程序
程序是指令的有序集合,用于完成某些特定的功能
微程序是微指令的有序集合,一条指令的给你由一段微程序实现
微程序和程序是两个不同的概念,微程序由微指令组成,描述机器指令,微程序实质是机器指令的实时解释器,由计算机设计者实现编制并存放于控制存储器CM中,无需知道,而程序最终由机器指令组成,由软件设计人员事先编制并存放于主存储器或辅助存储器
MAR | 存放主存的读写地址 | CMAR | 存放控制存储器的读写微指令地址 |
IR | 存放从主存中读出的指令 | CMDR/\(\mu\)IR | 存放控制存储器中读出的微指令 |
组成&过程
- 控制存储器:存放各指令对应的微程序
- 微指令寄存器:用于存放从CM中取出的微指令,位数同微指令字长相等
- 微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行
- 微地址寄存器:接收微地址形成部件送来的微地址,为在CM中读取微指令作准备
在微程序控制器的控制下计算器执行机器指令的过程:
- 执行取微指令:自动将取指微程序的入口地址送入CMAR,从CM中读取相应的微指令送入CMDR(取指微程序的入口地址一般为CM的0号单元,当取指微程序执行完成,从主存取出的机器指令就已经存入指令寄存器中)
- 由机器指令的操作码字段通过微地址形成部件产生该机器指令对应的微程序入口地址,并送入CMAR
- 从CM中逐条读取对应的微指令并执行
- 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第一步
微程序和机器指令:
一条机器指令对应一个微程序,由于机器指令的取指令操作都是相同的,因此可将取指令操作的微命令统一编制为一个微程序,这个微程序只负责将指令从主存单元取出送入指令寄存器,也可编制对应的间址周期和中断周期的微程序
控制存储器CM中的微程序个数 = 机器指令数+取指+间址+中断
编码方式
又称微指令的控制方式,如何对微指令的控制字段进行编码,以形成控制信号
-
直接编码(直接控制)
无需进行译码,微指令的微命令字段中每位代表一个微命令,设计微指令,选用某个微命令只需将微命令对应的字段设置为1或0
优:简单直观速度快
缺:微指令字长过长,n个微命令要求微指令的操作字段有n位,造成控制存储器容量极大 -
字段直接编码
将微指令的微命令字段分成若干小字段,互斥性微命令组合在同一字段,相容性微命令组合在不同字段,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关
优:可以缩短微指令字长
缺:需要通过编译电路后发出微命令,较直接编译慢
地址形成方式
- 直接由微指令的下地址字段指出,微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址(断定方式)
- 根据机器指令的操作码形成,机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成
- 增量计算器法:(CMAR) + 1 \(\to\) CMAR
- 根据各种标志决定微指令分支转移地址
- 通过测试网络形成
- 由硬件直接产生微程序入口地址
格式
- 水平型:直接编码、字段直接编码、字段间接编码、混合编码
\(A_1\) | \(A_2\) | \(\dots\) | \(A_{n-1}\) | \(A_{n}\) | 判断测试字段 | 后继地址字段 |
操作控制 | 顺序控制 |
优:微程序短,执行速快
缺:微指令长,编写微程序复杂
- 垂直型:采用类似机器指令操作码的方式,在微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能
\(\mu\)OP | Rd | Rs |
---|---|---|
微操作码 | 目的地址 | 源地址 |
优:微指令短、简单、规整,便于编写微程序
缺:微程序长,执行速度慢,工作效率低
- 混合型
在垂直型的基础上增加一些不太复杂的并行操作
水平型 | 垂直型 | |
---|---|---|
并行能力 | 并行能力强、灵活性高、效率高 | 较差 |
执行时间 | 短 | 长 |
长度 | 微指令字较长,微程序较短 | 微指令字较短,微程序较长 |
难易程度 | 难 | 易 |
动态微程序设计和毫微程序设计
-
动态微程序设计:根据用户的要求改变微程序,需要可写控制寄存器,使用EPROM
-
毫微程序设计:硬件不由微程序直接控制,通过存放在第二级控制存储器中的毫微程序来解释
微程序控制器和硬布线控制器比较
微程序控制器 | 硬布线控制器 | |
---|---|---|
工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
执行速度 | 慢 | 快 |
规整性 | 较规整 | 烦琐、不规整 |
应用场合 | CISC CPU | RISC CPU |
易扩充性 | 容易 | 困难 |
异常(内中断)和中断
异常是由CPU内部产生的意外事件,分为硬故障中断和程序性异常
硬故障中断:是由硬连线出现异常引起(存储器校验异常、总线错误)
程序性异常(软件中断):CPU内部因执行指令而引起的(整除0、溢出、断点、单步跟踪、非法指令)
按照异常发生的原因和返回方式,可进一步分为故障、自陷、终止
-
故障(Fault)
引起故障的指令启动后、执行结束前被检测到的异常,因为无法通过异常处理程序恢复故障,因此不能回到原断点处执行,必须终止进程的执行 -
自陷(Trap)
事先安排的一种异常事件,事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志人为设置一个陷阱,当执行到被设置了陷阱的指令时,CPU在执行陷阱指令后,自动根据不同的陷阱类型进行相应的处理,然后返回到自陷程序下一条指令执行。当自陷指令是转移指令时,并不是返回到下一条指令执行,而不是返回到转移目标指令执行 -
终止(Abort)
如果在执行指令的过程中发生了使计算机无法继续执行的硬件故障,程序将无法继续执行,只能终止,此时调出中断服务程序来重启系统,终止异常和外中断属于硬件中断
中断是来自CPU外部、与CPU执行指令无关的事件引起的中断
中断的分类:
-
可屏蔽中断
通过可屏蔽中断请求线INTR向CPU发出中断请求,CPU可通过设置相应的屏蔽字来屏蔽或不屏蔽某个中断 -
不可屏蔽中断
通过专门的不可屏蔽中断请求NMI向CPU发出的中断请求,通常是非常紧急的硬件故障
中断和异常的不同:
-
缺页或溢出等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成
-
异常的检测由CPU完成,不通过外部的某个信号通知CPU,中断CPU必须通过中断请求线获取中断源信息,才能知道哪个设备发生了何种中断
异常和中断响应过程
- 关中断
- 保存断点和程序状态
- 识别异常和中断并转到相应的处理程序(软件识别和硬件识别)
软件识别:CPU设置一个异常状态寄存器,用于记录异常原因,操作系统使用一个统一的异常和中断查询程序,按优先级顺序查询异常状态寄存器,以检查异常和中断类型,先查询到的先处理,然后转到内核中相应的处理程序
硬件识别(向量中断):异常或中断处理程序的首地址称为中断向量,所有中断向量都存放于中断向量表中,每个异常或中断都被指定一个中断类型号,在中断向量表内,类型号和中断向量一一对应
指令流水线
从两方面提高处理机的并行性:
- 时间并行:流水线技术
- 空间并行:超标量处理机
指令流水的定义
一条指令的执行过程分解为几个阶段,每个阶段由相应的功能部件完成
- 取指IF
- 译码/读寄存器ID
- 执行/计算地址EX
- 访存MEM
- 写回WB