计算机组成原理学习笔记(1):概述
计算机组成原理学习笔记(2):发展
计算机组成原理学习笔记(3):总线
计算机组成原理学习笔记(4):存储器
计算机组成原理学习笔记(5):I/O
计算机组成原理学习笔记(6):数字
计算机组成原理学习笔记(7):指令系统
计算机组成原理学习笔记(8):CPU的结构和功能
计算机组成原理学习笔记(9):控制单元的功能
计算机组成原理学习笔记(10):控制单元的设计
CPU——Central Processing Unit,中央处理机(器)
PC——Program Counter,程序计数器,存放当前欲执行指令的地址,并可自动计数形成下一条指令地址的计数器
IR——Instruction Register,指令寄存器,存放当前正在执行的指令的寄存器
CU——Control Unit,控制单元(部件),控制器中产生微操作命令序列的部件,为控制器的核心部件
ALU——Arithmetic Logic Unit,算术逻辑运算单元,运算器中完成算术逻辑运算的逻辑部件
ACC——Accumulator,累加器,运算器中运算前存放操作数、运算后存放运算结果的寄存器
MQ——Multiplier-Quotient Register,乘商寄存器,乘法运算时存放乘数、除法时存放商的寄存器
X——此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放操作数
MAR——Memory Address Register,存储器地址寄存器,内存中用来存放欲访问存储单元地址的寄存器
MDR——Memory Data Register,存储器数据缓冲寄存器,主存中用来存放从某单元读出、或写入某存储单元数据的寄存器
I/O——Input/Output equipment,输入/输出设备,为输入设备和输出设备的总称,用于计算机内部和外界信息的转换与传送
MIPS——Million Instruction Per Second,每秒执行百万条指令数,为计算机运算速度指标的一种计量单位
控制器的功能(指令控制,操作控制,时间控制,处理中断)
取指令
分析指令
执行指令,发出各种操作命令
控制程序输入及结果的输出
总线管理
处理异常情况和特殊请求
运算器的功能(数据加工)
实现算术运算和逻辑运算
通用寄存器
存放操作数
可作某种寻址方式所需的专用寄存器
数据寄存器
存放操作数(满足各种数据类型)
两个寄存器拼接存放双倍字长数据
地址寄存器
存放地址,其位数应满足最大的地址范围明
用于特殊的寻址方式 段基值 栈指针
条件码寄存器
存放条件码,可作程序分支的依据
如正、负、零、溢出、进位等
控制寄存器
PC→MAR→M→MDR→IR
控制CPU操作
其中MAR、MDR、IR用户不可见
PC用户可见
状态寄存器
状态寄存器:存放条件码
PSW寄存器(p程序 s状态 w字):存放程序状态字(用于保存程序的运行现场,程序的断点,包括了软件信息和硬件信息 )能够让程序正确的返回断点,接着执行原始的程序。
CU产生全部指令的微操作命令序列
组合逻辑设计硬连线逻辑
微程序设计存储逻辑
中断系统见8.4
定义
取出并执行一条指令所需的全部时间
完成一条指令:指令周期分为取指周期和执行周期
取指阶段:取指,分析====》 取指周期
执行阶段:执行 ====》 执行周期
不同指令的指令周期不同
主要影响事件的因素就是访问内存查询地址的次数
指令周期流程
CPU工作周期的标志
取指令(取指周期)
取地址(间址周期)
存取操作数或结果(执行周期)
存程序断点(中断周期)针对四个工作周期的信号标识(需要给出相应的信号来标识出CPU所处的工作周期状态)
指令周期的数据流
取指周期数据流
PC将地址送到地址寄存器然后在送到存储器去读取,控制单元CU向控制总线提出申请,控制总线对存储器进行控制去读操作,存储器受控根据地址读出后送入数据总线送入数据缓冲寄存器,然后放入指令寄存器,CU控制单元加1传入PC,读取下一条指令。
间址周期数据流
指令为间接寻址方式(所要用到的数据的地址存在了MDR中),MDR送入MAR,传输到地址总线通过地址总线送到存储器,控制单元CU发出控制信号到控制总线,在存储器接收到控制总线的信息然后完成数据的读取之后,传输到数据总线上(这时候这个数据实际上是一条地址,是所要运行的指令或者所需要数据的地址,因为是间接寻址方式),之后传入MDR,这时候这里面就是真正需要数据或者指令的地址了
执行周期数据流
第九章介绍(不同指令的执行周期数据流不同)
中断周期数据流
保存断点
CU确定保存断点的位置,将想要保存数据的位置存入MAR传入地址总线传入存储器,CU通过控制总线向存储器发出写命令,因为需要保存断点(断点指的是当前PC的程序状态),数据通过MDR数据总线存入存储器
形成中断服务程序的入口地址
CU给出中断服务程序的入口地址直接传给PC,PC中就有了我们下一条服务所需要执行的指令
硬件关闭终端
提高访存速度
- 高速芯片
- Cache
- 多体并行
提高I/O和主机之间的传送速度
- 中断
- DMA
- 通道
- I/O处理机
- 多总线
提高运算器速度
- 高速芯片
- 改进算法
- 快速进位链
并发:两个或两个以上事件在同一时间段发生
同时:两个或两个以上事件在同一时刻发生
过程级(程序、进程)(粗粒度,一般通过操作系统或者软件实现)
指令级(指令之间)(指令内部)(细粒度,一般通过硬件实现)
结构相关
不同指令争用同一功能部件产生资源冲突,解决方法:停顿或者指令存储器和数据存储器分开,指令预取技术(适用于访存周期短的情况)
数据相关
不同指令因重叠操作,可能改变操作数的读/写访问顺序
- 写后读相关(RAW)
- 读后写相关(WAR)
- 写后写相关(WAW)
解决办法:后推法(把之后的操作推后),采用旁路技术
控制相关
单位时间内流水线所完成指令或输出结果的数量
设 m m m段的流水线各段时间为 Δ t \Delta t Δt最大吞吐率 T p m a x = 1 Δ t T_{p m a x}=\frac{1}{\Delta t} Tpmax=Δt1
实际吞吐率
连续处理 n n n条指令的吞吐率为 T p = n m ⋅ Δ t + ( n − 1 ) ⋅ Δ t T_{p}=\frac{n}{m \cdot \Delta t+(n-1) \cdot \Delta t} Tp=m⋅Δt+(n−1)⋅Δtn
加速比 S p S_p Sp
m m m段的流水线的速度与等功能的非流水线的速度之比
设流水线各段时间为 Δ t \Delta t Δt
完成 n n n条指令在 m m m段流水线上共需 T = m ⋅ Δ t + ( n − 1 ) ⋅ Δ t T=m \cdot \Delta t+(n-1) \cdot \Delta t T=m⋅Δt+(n−1)⋅Δt
完成 n n n条指令在等效的非流水线上共需 T ′ = n m ⋅ Δ t T^{\prime}=n m \cdot \Delta t T′=nm⋅Δt
流水线中各功能段的利用率 S p = n m ⋅ Δ t m ⋅ Δ t + ( n − 1 ) ⋅ Δ t = n m m + n − 1 S_{p}=\frac{n m \cdot \Delta t}{m \cdot \Delta t+(n-1) \cdot \Delta t}=\frac{n m}{m+n-1} Sp=m⋅Δt+(n−1)⋅Δtnm⋅Δt=m+n−1nm
由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态
流水线中各功能段的利用率
效 率 = 流水线各段处于工作时间的时空区 流水线中各段总的时空区 效率 =\frac{\text { 流水线各段处于工作时间的时空区 }}{\text { 流水线中各段总的时空区 }} 效率= 流水线中各段总的时空区 流水线各段处于工作时间的时空区
$
\text { 效率 } =\frac{\text { 流水线各段处于工作时间的时空区 }}{\text { 流水线中各段总的时空区 }}
=\frac{m n \Delta t}{m(m+n-1) \Delta t}
$
每个时钟周期内可并发多条独立指令
配置多个功能部件不能调整指令的执行顺序通过编译优化技术,把可并行执行的指令搭配起来
在一个时钟周期内再分段
在一个时钟周期内一个功能部件使用多次不同的指令处在一个流水阶段他的信号不能叠加
不能调整指令的执行顺序
靠编译程序解决优化问题
由编译程序挖掘出指令间潜在的并行性
将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
采用多个处理部件
指令流水线结构
完成一条指令分6段,每段需一个时钟周期
若流水线不出现断流1个时钟周期出1结果,不采用流水技术6个时钟周期出1结果
理想情况下,6级流水的速度是不采用流水技术的6倍
运算流水线
完成浮点加减运算可分
对阶、尾数求和、规格化三段
人为设置的中断:如转管指令
程序性事故溢出、操作码不能识别、除法非法
硬件故障
I/O设备
外部事件用键盘中断现行程序
各中断源如何向CPU提出请求?
各中断源同时提出请求怎么办?
CPU什么条件、什么时间、以什么方式响应中断?
如何保护现场?
如何寻找入口地址?
如何恢复现场,如何返回?
处理中断的过程中又出现新的中断怎么办?
一个请求源对应一个INTR中断请求标记触发器
多个INTR组成中断请求标记寄存器
INTR可以分散在各个中断源的接口电路中
INTR也可以集中在CPU的中断系统内
根据事件重要性来进行判断,可以通过
硬件实现(排队器)
可以设计为分散在各个中断源的接口电路中链式排队器(参见第五章)
也可以设计为集中在CPU内
软件实现(程序查询)
硬件向量法
软件查询法
允许中断触发器EINT=1
指令执行周期结束时刻由CPU发查询信号
保护程序断点、寻找服务程序入口地址、硬件控制关中断都是在计算机的硬件来完成的并不是由具体某一条指令完成的,所以称之为隐指令,但是在具体执行过程中这些硬件操作都需要被执行
保护程序断点:
断点进栈:断点存于特定地址(0号地址)内寻找服务程序入口地址:
(硬件向量法)向量地址的硬件输出传送到PC
(软件查询法)中断识别程序 入口地址M传送到PC硬件控制关中断
流程解释
中断允许触发器EINT表示是否允许响应新的中断请求,中断标记INT表示是否处于处理中断的状态,EINT输出等于1且排队器中的输出表示有中断需要被处理,这个时候中断标记变为1表示开始处理中断,此时中断允许触发器被置位0,同时排队器的输出也会送给向量地址形成部件,送入PC,这也就是中断服务程序的入口,为中断服务程序做准备
保护现场
断点通过中断隐指令完成
寄存器内容通过中断服务程序完成
恢复现场 (通过中断服务程序完成)
提前设置开中断指令
优先级别高的中断源有权中断优先级别低的中断源
屏蔽触发器
作用:中断源不能想CPU提出中断服务请求,也不能参加中断排队器的排队
屏蔽字
屏蔽技术可改变处理优先等级
响应优先级不可改变(因为是硬件决定的)
处理优先级可改变(通过重新设置屏蔽字)通过改变屏蔽字让他不会被传送到排队器中去排队可以认为的屏蔽某个中断源的请求
新屏蔽字的设置
单次中断的断点保护
多重中断中在进入中断前对0地址的信息再转存一次