计算机组成原理学习笔记(8):CPU的结构和功能
第八章 CPU的结构和功能
8.1 CPU的结构
8.1.1 CPU的功能
控制器的功能(指令控制,操作控制,时间控制,处理中断)
取指令
分析指令
执行指令,发出各种操作命令
控制程序输入及结果的输出
总线管理
处理异常情况和特殊请求
运算器的功能(数据加工)
实现算术运算和逻辑运算
8.1.2 CPU的结构框图
8.1.3 CPU的寄存器
用户可见寄存器
通用寄存器
存放操作数
可作某种寻址方式所需的专用寄存器
数据寄存器
存放操作数(满足各种数据类型)
两个寄存器拼接存放双倍字长数据
地址寄存器
存放地址,其位数应满足最大的地址范围明
用于特殊的寻址方式 段基值 栈指针
条件码寄存器
存放条件码,可作程序分支的依据
如正、负、零、溢出、进位等
控制和状态寄存器
控制寄存器
PC→MAR→M→MDR→IR
控制CPU操作
其中MAR、MDR、IR用户不可见
PC用户可见
状态寄存器
状态寄存器:存放条件码
PSW寄存器(p程序 s状态 w字):存放程序状态字(用于保存程序的运行现场,程序的断点,包括了软件信息和硬件信息 )能够让程序正确的返回断点,接着执行原始的程序。
8.1.4 控制单元CU和中断系统
CU产生全部指令的微操作命令序列
组合逻辑设计硬连线逻辑
微程序设计存储逻辑
中断系统见8.4
8.2 指令周期
定义
取出并执行一条指令所需的全部时间
完成一条指令:指令周期分为取指周期和执行周期
取指阶段:取指,分析====》 取指周期
执行阶段:执行 ====》 执行周期
不同指令的指令周期不同
主要影响事件的因素就是访问内存查询地址的次数
有的指令只有取值周期
有的指令取值周期等于执行周期
有的指令取值周期远远小于执行周期
具有间接寻址的指令周期
带有中断周期的指令周期
指令周期流程
CPU工作周期的标志
取指令(取指周期)
取地址(间址周期)
存取操作数或结果(执行周期)
存程序断点(中断周期)针对四个工作周期的信号标识(需要给出相应的信号来标识出CPU所处的工作周期状态)
指令周期的数据流
取指周期数据流
PC将地址送到地址寄存器然后在送到存储器去读取,控制单元CU向控制总线提出申请,控制总线对存储器进行控制去读操作,存储器受控根据地址读出后送入数据总线送入数据缓冲寄存器,然后放入指令寄存器,CU控制单元加1传入PC,读取下一条指令。
间址周期数据流
指令为间接寻址方式(所要用到的数据的地址存在了MDR中),MDR送入MAR,传输到地址总线通过地址总线送到存储器,控制单元CU发出控制信号到控制总线,在存储器接收到控制总线的信息然后完成数据的读取之后,传输到数据总线上(这时候这个数据实际上是一条地址,是所要运行的指令或者所需要数据的地址,因为是间接寻址方式),之后传入MDR,这时候这里面就是真正需要数据或者指令的地址了
执行周期数据流
第九章介绍(不同指令的执行周期数据流不同)
中断周期数据流
保存断点
CU确定保存断点的位置,将想要保存数据的位置存入MAR传入地址总线传入存储器,CU通过控制总线向存储器发出写命令,因为需要保存断点(断点指的是当前PC的程序状态),数据通过MDR数据总线存入存储器
形成中断服务程序的入口地址
CU给出中断服务程序的入口地址直接传给PC,PC中就有了我们下一条服务所需要执行的指令
硬件关闭终端
8.3 指令流水
8.3.1 如何提高机器速度
提高访存速度
- 高速芯片
- Cache
- 多体并行
提高I/O和主机之间的传送速度
- 中断
- DMA
- 通道
- I/O处理机
- 多总线
提高运算器速度
- 高速芯片
- 改进算法
- 快速进位链
8.3.2 系统的并行性
并行的概念(时间上互相重叠)
并发:两个或两个以上事件在同一时间段发生
同时:两个或两个以上事件在同一时刻发生
并行性的等级
过程级(程序、进程)(粗粒度,一般通过操作系统或者软件实现)
指令级(指令之间)(指令内部)(细粒度,一般通过硬件实现)
8.3.3 指令流水的原理
指令的串行执行
指令的二级流水
影响指令流水效率加倍的因素
六级流水线的例子
影响指令流水线性能的因素
结构相关
不同指令争用同一功能部件产生资源冲突,解决方法:停顿或者指令存储器和数据存储器分开,指令预取技术(适用于访存周期短的情况)
数据相关
不同指令因重叠操作,可能改变操作数的读/写访问顺序
- 写后读相关(RAW)
- 读后写相关(WAR)
- 写后写相关(WAW)
解决办法:后推法(把之后的操作推后),采用旁路技术
控制相关
8.3.4 流水线的性能
吞吐率
单位时间内流水线所完成指令或输出结果的数量
设段的流水线各段时间为最大吞吐率
实际吞吐率
连续处理条指令的吞吐率为
加速比
段的流水线的速度与等功能的非流水线的速度之比
设流水线各段时间为
完成条指令在段流水线上共需
完成条指令在等效的非流水线上共需
流水线的效率
流水线中各功能段的利用率
由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态
流水线中各功能段的利用率
$
\text { 效率 } =\frac{\text { 流水线各段处于工作时间的时空区 }}{\text { 流水线中各段总的时空区 }}
=\frac{m n \Delta t}{m(m+n-1) \Delta t}
$
8.3.5 流水线的多发技术
超标量技术
每个时钟周期内可并发多条独立指令
配置多个功能部件不能调整指令的执行顺序通过编译优化技术,把可并行执行的指令搭配起来
超流水线技术
在一个时钟周期内再分段
在一个时钟周期内一个功能部件使用多次不同的指令处在一个流水阶段他的信号不能叠加
不能调整指令的执行顺序
靠编译程序解决优化问题
超长指令字技术
由编译程序挖掘出指令间潜在的并行性
将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
采用多个处理部件
8.3.6 流水线结构
指令流水线结构
完成一条指令分6段,每段需一个时钟周期
若流水线不出现断流1个时钟周期出1结果,不采用流水技术6个时钟周期出1结果
理想情况下,6级流水的速度是不采用流水技术的6倍
运算流水线
完成浮点加减运算可分
对阶、尾数求和、规格化三段
8.4 中断系统
8.4.1 概述
引起中断的各种因素
人为设置的中断:如转管指令
程序性事故溢出、操作码不能识别、除法非法
硬件故障
I/O设备
外部事件用键盘中断现行程序
中断系统需解决的问题(通过软件和硬件来做)
各中断源如何向CPU提出请求?
各中断源同时提出请求怎么办?
CPU什么条件、什么时间、以什么方式响应中断?
如何保护现场?
如何寻找入口地址?
如何恢复现场,如何返回?
处理中断的过程中又出现新的中断怎么办?
8.4.2 中断请求标记和中断判优逻辑
中断请求标记INTR
一个请求源对应一个INTR中断请求标记触发器
多个INTR组成中断请求标记寄存器
INTR可以分散在各个中断源的接口电路中
INTR也可以集中在CPU的中断系统内
中断判优逻辑
根据事件重要性来进行判断,可以通过
硬件实现(排队器)
可以设计为分散在各个中断源的接口电路中链式排队器(参见第五章)
也可以设计为集中在CPU内
软件实现(程序查询)
8.4.3 中断服务程序入口地址的寻找
硬件向量法
软件查询法
8.4.4 中断响应
响应中断的条件
允许中断触发器EINT=1
响应中断的时间
指令执行周期结束时刻由CPU发查询信号
中断隐指令
保护程序断点、寻找服务程序入口地址、硬件控制关中断都是在计算机的硬件来完成的并不是由具体某一条指令完成的,所以称之为隐指令,但是在具体执行过程中这些硬件操作都需要被执行
保护程序断点:
断点进栈:断点存于特定地址(0号地址)内寻找服务程序入口地址:
(硬件向量法)向量地址的硬件输出传送到PC
(软件查询法)中断识别程序 入口地址M传送到PC硬件控制关中断
流程解释
中断允许触发器EINT表示是否允许响应新的中断请求,中断标记INT表示是否处于处理中断的状态,EINT输出等于1且排队器中的输出表示有中断需要被处理,这个时候中断标记变为1表示开始处理中断,此时中断允许触发器被置位0,同时排队器的输出也会送给向量地址形成部件,送入PC,这也就是中断服务程序的入口,为中断服务程序做准备
8.4.5 保护现场和恢复现场
保护现场
断点通过中断隐指令完成
寄存器内容通过中断服务程序完成
恢复现场 (通过中断服务程序完成)
8.4.6 多重中断
多重中断的概念
实现多重中断的条件
提前设置开中断指令
优先级别高的中断源有权中断优先级别低的中断源
屏蔽技术
屏蔽触发器
作用:中断源不能想CPU提出中断服务请求,也不能参加中断排队器的排队
屏蔽字
屏蔽技术可改变处理优先等级
响应优先级不可改变(因为是硬件决定的)
处理优先级可改变(通过重新设置屏蔽字)通过改变屏蔽字让他不会被传送到排队器中去排队
可以认为的屏蔽某个中断源的请求
新屏蔽字的设置
多重中断的断点保护
单次中断的断点保护
多重中断中在进入中断前对0地址的信息再转存一次