type
status
date
slug
summary
tags
category
icon
password
Property
CPU 的结构
CPU的功能
- 控制器功能:
- 取指令 指令控制
- 分析指令 操作控制
- 执行指令,发出各种操作命令
- 控制程序的输入及输出 时间控制
- 总线管理 处理中断
- 异常情况和特殊请求
- 运算器功能:
- 实现算术运算和逻辑运算 数据加工
CPU 结构框图
CPU 与系统总线
CPU的内部结构
CPU的寄存器
- 用户可见寄存器
- 通用寄存器 存放操作数 可作某种寻址方式所需的专用寄存器
- 数据寄存器 存放操作数(满足各种数据类型), 两个寄存器拼接存放双倍字长数据
- 地址寄存器 存放地址,其位数应满足最大的地址范围 用于特殊的寻址方式 段基值 栈指针
- 条件码寄存器 存放条件码,可作程序分支的依据 如 正、负、零、溢出、进位等
- 控制和状态寄存器
- 控制寄存器
- 状态寄存器
状态寄存器 存放条件码
PSW寄存器 存放程序状态字
控制单元CU和中断系统
- CU产生全部指令的位操作命令序列,使用下面两种来实现
- 组合逻辑设计 硬连线逻辑
- 微程序设计 存储逻辑
- 中断系统
ALU
运算逻辑部件
指令周期
指令周期的基本概念
指令周期:
- 取出并执行一条指令所需的全部时间
- 完成一条指令:
- 取指,分析 取指周期
- 执行 执行周期
每条指令的指令周期不同
具有间接寻址的指令周期
具有中断周期的指令周期
指令周期流程
CPU 工作周期的标志
指令周期的数据流
- 指令周期数据流:
PC给出地址,给MAR,CU发出读命令,通过控制总线到存储器,通过数据总线将数据给MDR,将MDR的数据给IR,CU发出PC+1指令
- 间址周期数据流:
- 执行周期数据流:
不同指令的执行周期数据流不同
- 中断周期数据流:
CU给出断点保存位置,给MAR,再地址总线,存储器中,发出写命令,PC将寄存器值存放到MDR,存入内存,CU给出中断服务程序地址
指令流水
如何提高机器速度
- 提高访存速度:高速芯片,cache,多体并行
- 提高IO和主机之间的传输速度: 中断,DMA,通道,I/O 处理机,多总线
- 提高运算器速度:高速芯片,改进算法,快速进位链
- 提高整机处理能力:高速配件,改进系统结构,开发系统并行性
系统并行性
- 并行概念:
- 并发:两个或两个以上事件在同一时间段发生
- 同时:两个或两个以上事件在同一时刻发生
- 并行等级:
- 过程级(程序,进程) 粗粒度,通过软件实现
- 指令级(指令之间,指令内部) 细粒度,硬件实现
指令流水原理
指令的串行执行
指令的二级流水
若取指和执行阶段时间上完全重叠,则指令周期减半,速度提高一倍
影响指令流水效率加倍的因素
- 执行时间 > 取指时间:通过指令部件缓冲区解决
在取指令部件和执行指令部件之间加上指令部件缓冲器,可将取出的多条指令放入指令部件缓冲器,执行部件在执行完成后直接从指令缓冲区中取指令,这样取指部件不用一直等待执行部件。
- 条件转移指令对指令流水的影响
- 必须等上条指令执行结束才能确定下条指令的地址,造成了一定的时间损失
- 分支预测法:猜测法
指令六级流水
影响指令流水线性能的因素
- 结构相关,不同指令争用同一功能部件产生资源冲突,解决办法:
- 停顿:把发生冲突的一个操作往后推
- 指令存储器和数据存储器分开
- 指令预取技术,利用空闲时间,将多条指令预取到CPU中
- 数据相关不同指令因操作重叠,可能改变操作数的读/写顺序,读/写顺序包括:写后读相关、读后写相关、写后写相关
- 后推法
- 采用旁路技术(将发生冲突的结果直接写入第二条指令的输入,节约时间)
解决办法:
- 控制相关,由转移指令引起
流水线性能
- 吞吐率:单位时间内流水线所完成指令或输出结果的数量
设 段的流水线各段时间为,最大吞吐率,实际吞吐率:连续处理条指令的吞吐率为
- 加速比: 段的流水线速度与等功能的非流水线的速度之比
设流水线各段时间为,完成条指令在段流水线上共需,完成条指令在等效的非流水线上共需 ,则
- 效率:流水线中各功能段的利用率
由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态
流水线的多发技术
- 超标量技术
- 每个时钟周期内可并发多条独立指令,配置多个功能部件
- 不在执行过程中调整指令的执行顺序,通过编译优化技术,把可并行执行的指令搭配起来
- 超流水线技术
- 在一个时钟周期内再分段(3段),在一个时钟周期内 一个功能部件使用多次(3 次)
- 不在执行过程中调整指令的执行顺序,靠编译程序解决优化问题
- 超长指令字技术
- 由编译程序挖掘出指令字潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
- 采用多个处理部件
流水线结构
- 指令流水线结构
完成一条指令分七段,每一段需要一个时钟周期
若流水线不出现断流,则一个时钟周期出一个结果
若不采用流水技术,七个时钟周期出一个结果
理想情况下,七级流水的速度是不采用流水技术的七倍
注意:流水段之间要加上锁存器,用于保存流水段前一段的操作结果,为下一段提供操作信息和操作数据
- 运算流水线
例如,完成浮点加减运算可分为对阶、尾数求和、规格化三段
分段原则:每段操作时间尽量一致
中断系统
引起中断的各种因素
- 人为设置的中断,如转管指令
- 程序性事故:溢出,除法非法,操作码不能识别
- 硬件故障
- I/O设备
- 外部事件,键盘ESC退出
中断系统需要解决的问题
- 各中断源怎么向CPU提出中断请求?
- 多个中断源同时提出了中断请求,怎么办?
- CPU在什么条件,什么时间,以什么方式响应中断?
- 如何保护现场(就是中断结束后,要返回到原来的中断的地方,需要保存原来中断的地方继续向下执行)?
- 如何寻找入口地址(要执行中断程序,需要有一个入口地址)?
- 如何恢复现场,如何返回?
- 如果在处理中断的过程又出现中断怎么办?
采用软件+硬件的方式来实现的
中断请求标记和中断判优逻辑
中断请求标记 INTR
一个请求源:一个INTR中断请求标记触发器
多个INTR:组成了中断请求标记寄存器
INTR分散在各个中断源的接口电路中,INTR集中在CPU的中断系统内
中断判优逻辑
哪一种中断源的优先级最高,就先响应哪一个中断请求
- 硬件实现 (排队器)
- 将排队器分散在各个中断源的接口电路中,链式排队器(详见输入输出系统)
- 集中在CPU的内部用硬件的方式:
- 用软件实现(程序查询):
怎么去找到中断服务程序的入口地址呢?
终端服务器入口地址的查找
- 硬件向量法
- 软件查询法
中断响应
响应中断的条件也就是说,如果这个时候CPU正在响应中断,如果这个时候又有中断请求了,CPU可以响应吗,明显是不能的,所以这个时候就要出现响应中断请求的条件允许中断触发器 EINT=1时,表明可以响应中断
响应中断的时间是不是在任何时间都可以响应中断呢?很明显是不可以的,比如在指令的执行期间一般是在指令执行完毕之后,才可以响应中断请求指令周期结束之后,由CPU发出查询信号
中断隐指令
- 保护程序断点(因为在中断响应结束之后,要返回到断点处),断点存于特定的地址(0号地址)内 断点进栈
- 寻找服务程序入口地址
向量地址 -> PC(硬件向量法)
中断识别程序 入口地址 M->PC (软件查询法)
- 硬件关中断
避免在执行中断程序的时候又新的中断源干扰
保存现场和恢复现场
中断屏蔽技术
如果在执行中断的过程中,出现了更重要的,需要及时处理的新事件,怎么办?那么,中断是要被打断的:
实现多重中断的条件
要允许CPU在执行某个中断服务程序时,响应新的中断请求
- 提前设置开中断指令(需要允许中断EINT打开)是不是任何一个新的中断服务请求都能打断当前的中断程序?
- 优先级别高的中断源才能中断优先级别低的中断源
在主程序执行的时候,如果B和C发出中断请求,这时候因为B的优先级比C高,所以先响应B的中的中断请求,当响应完B的中断请求之后,CPU会查询还有没有中断请求,发现C这时中断请求还在,所以就会接着响应C的中断请求,执行完C的中断请求后,会返回到主程序,如果这时候D发出中断请求,那么这时候CPU就会响应D的中断请求,但是,在响应D的中断请求时候,CPU检测到有比D更高级别的中断请求,所以会打断D的中断程序执行,从而响应A的中断请求,只有在完成A的中断程之后,CPU才会返回去执行D的中断程序执行完D的中断程序之后,会返回到主程序。
屏蔽技术
屏蔽触发器的作用就是使得某一个中断源无法向CPU发出中断服务请求,也不能参加中断优先排队器的排队
屏蔽触发器对应的值就是屏蔽字
实际上每一个中断源对应一个0/1,多个中断源0/1排列
上面中,假如1号中断源在执行中断应用程序,那么如果下面的中断源发出中断请求那么CPU是不会进行响应的。
屏蔽技术可以改变中断处理的优先等级
响应优先级不可改变,处理优先级可以改变
通过重新设置屏蔽字也就是说,可以让优先级高的不能进入优先排队器中进行响应
屏蔽技术的其他应用:可以人为的屏蔽某个中断源的请求
新屏蔽字的设置
多重中断的断点保护
断点进栈 中断隐指令完成
断点存入“0”地址 中断隐指令完成
但是,如果每个断点都保存在“0”地址的话,那么之前的保存的断点就会被冲掉,那么怎么存入断点呢?