1. 概述
1.1 计算机层次结构
1.1.1计算机硬件
对用户/程序员可见:PSW、PC、通用寄存器
对用户/程序员透明:MAR、MDR、IR、cache、流水段锁存器/暂存器
汇编程序员可见:基址寄存器、累加器
1.1.2 计算机软件
汇编程序:汇编语言->机器语言
解释程序:源程序的语句->机器指令(逐句翻译,立即执行)
编译程序:高级语言程序->汇编语言/机器语言
1.1.3 从源程序到可执行文件
1.2 计算机性能指标
1.2.1 字长
机器字长:一次运算的最大位数,一般与ALU和通用寄存器的位数都相同
指令字长:指令的位数
存储字长:存储单元的位数
1.3.2 运算速度
CPU时钟周期
主频(CPU时钟频率)
CPI(clock cycle per instruction)
CPU执行时间 = CPU时钟周期数 / 主频
MIPS:每秒执行多少百万条指令(10^6) MIPS = 主频 / (CPI * 10^6)
FLOPS:每秒执行多少百万次浮点运算 MFLOPS(106)、G~(109)、T(10^12)、P(1015)、E~(1018)、Z~(10^21)
2. 数据的表示与运算
2.1 机器数和真值
2.2 编码
2.2.1 带符号数
原码 -2\^(n-1)-1 ~ 2^(n-1)-1
反码 正数同原码,负数符号位不变其余取反
补码 1101------(-23+22+2^0)=-3 -2\^(n-1) ~ 2^(n-1)-1
移码 真值的表示范围-2\^(n-1) ~ 2^(n-1)-1 移码的表示范围0 ~ 2n-1(偏置值2(n-1)) 移码可当作无符号数翻译 x + 2^(n-1) = x移 移码翻转符号位变为补码
2.2.2 移位
左移:*2
右移:逻辑右移|算术右移 /2
2.2.3 符号扩展
零扩展:整数左边补,小数右边补
符号扩展:左边补符号位
2.3 运算部件
一位加法器
串行加法器
并行加法器
2.4 定点数的加减法
2.4.1 相反数的补码的计算
所有位取反再加一
2.4.2 标志计算
SF:仅对带符号数有效
OF:仅对带符号数有效 OF = Cn 异或 Cn-1
CF:仅对无符号数有效 CF = Cout 异或 Cin(即Cout 异或 Sub)
ZF:零标志位
2.4.3 溢出判别
一位符号位:1.OF;2.V=AsBs(Ss)+(As)(~Bs)Ss
双符号位:Ss1、Ss2 00正、11负、01正溢出、10负溢出
2.5 浮点数
(-1)^S * M *2^E(S符号、M尾数、E阶码)
2.5.1 一般浮点数的规格化
左规:小数点右移
右规:小数点左移
尾数为原码:正数0.1xxxx 负数1.1xxxx
尾数为补码:正数0.1xxxx 负数1.0xxxx
2.5.2 IEEE754
float:S E M 1+8+23
double:S E M 1+11+52
阶码E为移码:偏置值 2^(n-1)-1 n=8时1254;n=11时12046;
尾数M为原码:默认1.xxxx
2.5.3 加减运算
对阶、尾数求和、舍入、溢出判断
舍入策略:0舍1入、截断法(向0舍入)、进一法(向正无穷舍入)、舍去法(向负无穷舍入)
溢出判断:看阶码 上溢 下溢
2.6 C语言强制类型转换
(float) (int) 都是32位 不会溢出 数据可能舍入 会有精度损失
(double) (int) 不会溢出 没有精度损失
(float) (double) 可能溢出 数据可能舍入 会有精度损失
(int) (float/double) 可能溢出 数据可能舍入 会有精度损失
3. 存储系统
3.1 结构
3.1.1 位数关系
MDR = 数据线宽度
MAR = 地址线宽度
数据线宽度与机器字长
MDR与存储字长
MAR与主存容量
3.1.2 线与引脚
普通存储器
DRAM:地址线复用、行列选通线(RAS、CAS)代替片选
3.1.3 编制方式
按字节编址
按字编址
按半字编址
3.2 扩展
3.2.1 字扩展
增加存储单元(存储字)个数
逻辑上组成组
地址高位用于片选
3.2.2 位扩展
增加存储字长
逻辑上黏在一起
无需片选
和低位交叉编制的同时启动类似
3.2.3 字位扩展
3.3 存储周期与总线周期
一次总线事务 = 传地址命令 + 存储器准备数据(T) + 总线传输数据(r)
读出n个字的时间为 T + (n-1) r
轮流启动:总线宽度 = 每个体的存储字长,r = T / m
同时启动:总线宽度 = 每个体的存储字长 * 模块数m
边界对齐:K字节的数据的起始地址必须是K的倍数
大端:数据高位放在地址地位,与阅读顺序一致,高字节为字地址
小端:数据高位放在地址高位,与阅读顺序相反,低字节为字地址
3.4 Cache
3.4.1 原理
3.4.2 地址结构
普通主存地址:主存块号 块内地址
直接映射:tag Cache行号 块内地址 tag = log2(主存容量 / Cache容量)
组相联映射:tag Cache组号 块内地址
全相联映射:tag 块内地址
3.4.3 Cache行的内容
数据 有效位 脏位 替换算法位 tag
回写法使用有效位
替换算法位 位数 = log2(路数)
3.4.4 访存过程
-
CPU给出主存地址
-
根据主存地址中间的Cache行号字段找到对应的Cache行
-
对比Cache行和主存地址的Cache行,并观察Cache行的有效位
若tag相等且有效位为1:根据主存地址地位的块内地址字段找到对应的存储单元并存取信息
若tag不相等或有效位为0:CPU从主存读出该地址所在的一整块信息送到对应的Cache行,并设置有效位为1,tag设置为地址高位,同时将该地址中的内容送至CPU
3.4.5 平均访问时间
命中率 p
命中时间 = 判断时间 + Cache访问
缺失率 = 1 - 命中率 = 1 - p
缺失损失 = 访问一个主存块所花的时间
平均访问时间 = p * Tc + (1-p) * (Tc + Tm) = Tc + (1-p) * Tm
3.4.6 写策略
- 写命中
-
全写法:同时写Cache和主存
-
回写法:信息只被写入Cache而不写入主存,只有此块被替换出Cache时才写回主存
- 写不命中
-
写分配法:先在主存块中更新相应存储单元,然后分配一个Cache行,更新主存块进去
-
非写分配法:仅更新主存单元而不装入主存块到Cache中
- 通常回写法搭配写分配法
3.4.7 命中率
如果每个对象按顺序访问并且不会回头,在Cache发生替换之前可以只分析一个块的命中率来代替整体
注意访问的对象是否能把Cache塞满,或者放不下时会塞满Cache几轮,因为替换算法会影响到后续的命中率
3.5 虚拟存储
3.5.1 基础知识
虚拟存储的原理
虚拟地址空间:虚页号+页内地址,地址连续,每个进程的虚拟地址空间一样大
主存地址空间:实页号(页框号)+页内地址,同一个进程每一个存储单元的主存地址通常不连续,内核区+用户区
地址转换的过程:MMU,页表(慢表),TLB(快表)(由高速SRAM组成)
3.5.2 磁盘
结构:磁头、柱面、扇区
平均存取时间 = 寻道时间 + 旋转延迟时间 + 传输时间
4. 指令与CPU
4.1 ISA(指令集体系结构)
ISA完整定义了软件和硬件之间的接口,是机器语言/汇编语言程序员熟悉的
内容:1. 指令格式、指令寻址方式、操作类型、每种操作对应的操作数的相应规定;2. 操作数的类型、操作数寻址方式,按大端/小端存放;3. 程序可访问的寄存器编号、个数、位数、存储空间的大小和编址方式;4. 指令执行过程的控制方式等,包括程序计数器、条件码定义
RISC(精简指令集):定长指令、流水线、硬布线、只允许load/store访存
CISC(复杂指令集):不定长指令、微程序、访存指令不受限制
4.2 扩展操作码
x地址指令条数 = 2^(新扩展的操作码位数) * (x+1地址留下的扩展窗口数量) - (给x-1地址留下的扩展窗口数量)
4.3 寻址方式
隐含寻址:累加器ACC
间接寻址:EA = (A)
寄存器寻址:EA = Ri
寄存器间接寻址:EA = (Ri)yunsuanjiegouyichu
立即寻址:A即为立即数,通常以补码形式表示
堆栈寻址:EA = (SP),SP为称堆栈指针的寄存器,硬堆栈由高速寄存器构成、软堆栈从主存中划分一段区域实现
基址寻址:EA = (BR) + A,(BR)由操作系统设定且运行时不可变
变址寻址:EA = (IX) + A
直接寻址:EA = A
相对寻址:(PC) + A,A(即offset)通常以补码形式表示。指令相对寻址:(PC) + "1" + offset(注意PC自增)
4.4 汇编
常见助记符
编址单位、指令字长、指令地址可以互推
自陷指令(trap/INT):乘法指令后可加一条自陷指令,如果运算结果溢出,CPU会从用户态切换到内核态,处理完异常后回到下一条指令继续执行
4.5 数据通路
4.5.1 指令执行过程
-
取指令并计算下一条指令的地址
-
对指令操作码译码
-
计算源操作数地址并取操作数
-
数据操作
-
计算目的操作数地址并存结果
4.5.2 组成
- 组合逻辑元件(操作元件)
MUX、加法器、ALU、译码器
- 存储元件(状态元件)
流水段锁存器、IR、通用寄存器、输出带三态门的寄存器、带计数功能的寄存器、带移位功能的寄存器、带清零复位功能的寄存器
4.5.3 时序系统
机器周期:一个指令周期可分为取指令、读操作数、执行、写结果等多个基本工作周期,称为机器周期。每个机器周期长短可能不同。一个机器周期会划分成若干节拍,每个动作在一个节拍内完成
时钟周期
4.5.4 总线特征
每个节拍每个总线上只能有一种数据
每个节拍每个总线上只能有一种控制信号
4.5.5 控制器
硬布线控制器、微程序控制器
4.6 指令流水线
4.6.1 五段式流水线
IF(取址)、ID(译码)(取操作数)、EX(执行)、M(访存)(load/store)、WB(写回)
条件转移指令:EX阶段比较两个数;M阶段决定是否跳转,将目标地址写回PC;WB阶段空段
无条件转移指令:EX阶段将目标地址写回PC;M阶段、WB阶段空段
4.6.2 冒险
结构冒险:不同指令争用同一功能部件产生资源冲突时产生;设置多个功能部件
控制冒险:遇到改变指令正常执行顺序的情况,如转移、调用、返回指令时,会修改PC值,造成断流;插入气泡Stall/NOP空操作;对指令进行分支预测,尽早生成转移目标地址
数据冒险:写后读;数据旁路/转发技术,从得到需要数据的流水段锁存器直接送至ALU的输入端;插入气泡Stall/NOP空操作;将寄存器写口和读口分别控制在前后半个时钟周期内操作。load/use冒险;load/use冒险在ID阶段进行检测,检测到后必须使Load后的两条指令停顿一个时钟周期后继续进行,配合数据旁路,将Load指令M阶段取到的数据送到use指令的EX阶段
被阻塞原因:解决冒险 / 防止上一条指令的IR和锁存器内容被覆盖
4.6.3 流水线多发技术
超标量流水线技术:一次同时发射多条指令,CPI<1
超流水线技术:将每个段更细地划分,时钟周期变短
超长指令字技术:把多条能并行的指令组合成一条具有多个操作码字段的超长指令字
5. 总线与IO
5.1 总线
同步定时方式:采用公共时钟信号协调发送方和接收方的传送
异步定时方式:采用握手信号来实现定时控制。不互锁:对于主设备:请求,隔一段时间自动撤销请求;对于从设备:回答,隔一段时间自动撤销回答。半互锁:对于主设备:请求,收到回答后撤销请求;对于从设备:回答,隔一段时间自动撤销回答。全互锁:对于主设备:请求,收到回答后撤销请求;对于从设备:回答,获知主设备请求已撤销后撤销回答。
分离事务通信方式:将总线事务分解成请求+应答,不传送数据时释放总线,使总线可以接受其他设备的请求。
5.2 中断和异常
5.2.1 异常
故障:指令执行时被检测到的异常事件,断点为当前指令
终止:指令执行时发生的硬件故障,一般直接终止程序的执行,不会回头
自陷:预先安排的一种异常,执行完自陷指令后CPU会陷入内核态,根据陷阱类型完成不同的处理程序,断点为下一条指令/转移目标地址
内中断皆为不可屏蔽中断
5.2.2 中断
NMI(不可屏蔽中断):任何时候只要发生NMI就必须要立刻进行处理,DMA请求>NMI
INTR(可屏蔽中断):CPU可在中断控制器中设置屏蔽字来屏蔽INTR
5.2.3 识别异常/中断源的的方式
软件识别方式:CPU设置一个用于记录异常原因的异常状态寄存器;OS使用一个统一的异常查询程序,按照一定的优先级顺序查询异常状态寄存器,并处理异常
硬件识别方式(向量中断):中断向量:异常/中断处理程序的入口地址,硬件生成;中断向量表:存放中断向量;中断类型号:用来标识异常/中断,和中断向量一一对应
5.2.4 响应中断的条件
CPU处于开中断、至少有一个未被屏蔽的中断请求、当前指令刚执行完
5.2.5 中断处理的过程
响应(中断隐指令):关中断、保护断点(PC和PSW)、识别中断源并转中断服务程序
处理(中断服务程序):(1)单重中断:保存现场、执行中断服务程序、恢复现场、开中断、中断返回。(2)多重中断:保存现场和屏蔽字、开中断、执行中断服务程序、关中断、恢复现场和屏蔽字、开中断、中断返回。
优先级:(1)响应优先级:硬件决定。(2)处理优先级:屏蔽字决定。(3)多个中断同时到达,由响应优先级决定处理顺序。(4)多个中断先后到达,由到达次序决定处理顺序。
5.3 IO接口与IO端口
5.3.1 IO接口
功能:进行地址译码和设备选择、实现主机和外设的通信联络控制、实现数据缓冲、信号格式的转换(电平转换、并/串转换、模/数转换)、传送控制命令和状态信息
数据线:读写数据、状态字(命令字)、控制字、中断类型号
地址线:I/O端口地址、
控制线:各种信号
I/O端口编址:统一编址、独立编址(需要设置专门的I/O指令)
5.3.2 I/O方式
程序查询方式:信息交换完全由CPU执行程序实现,CPU与I/O串行工作
程序中断方式:通过中断请求CPU转去处理,在处理的过程中完成数据传输,处理完毕后回到现行程序,CPU与I/O并行工作,中断IO方式请求的是处理器的时间
5.3.3 DMA
特点:传送数据不经过CPU,采用"请求-响应"方式,主要用于磁盘等高速设备数据传送,DMA方式请求的是总线控制权,CPU与外设并行工作
工作流程:
-
DMA控制器的初始化CPU执行一段初始化程序:(1)准备内存区。(2)设置传送参数。(3)向DMA控制器发送"启动DMA传送"命令,然后调度CPU执行其他进程,由DMA控制器掌权。
-
DMA数据传送(1)DMA控制器给出内存地址。(2)读写线发命令。(3)每完成一个数据传送,字计数值减一并修改主存地址,字计数器为0时完成所有IO操作。
-
DMA的后处理字计数器为0时,发出DMA结束的中断请求信号给CPU,转入中断服务程序,做一些数据校验等后处理工作。
传送方式:
-
停止CPU访存DMA传输时,由DMA控制器发一个停止信号给CPU,使CPU脱离总线,停止访问主存,直到DMA传送一块数据结束。
-
周期挪用DMA传输时,CPU让出一个总线事务周期,由DMA控制器传送完一个数据后立即释放总线,是一种单字传送方式。
-
DMA与CPU交替访存每个CPU工作周期分成两个时间片,一个给CPU,另一个给DMA控制器,这样在每个存储周期内,CPU和控制器都可访问存储器。
DMA请求与DMA中断