一、计算机系统概述
冯诺依曼计算机结构特点
- 运算器、控制器(指令译码、生成控制信号)、存储器、输入输出设备
- 二进制
- 指令由操作码和地址码构成
- 存储程序方式工作。程序送入主存,启动执行后不需要人员干预自动完成逐条指令的取出和执行。
计算机系统的层次结构
- 应用软件-系统软件(操作系统、编译器、数据库管理系统、备份程序)-硬件(五大部分)
透明性
指令数据机器结构格式对于高级语言程序员透明,对于汇编语言程序员不透明。
编译程序
高级->汇编/机器
汇编程序
汇编->机器
链接器
讲目标文件和外部库链接位一个可执行文件
吞吐率
一定时间的工作量
响应时间
作业从提交到完成的时间
CPU执行时间
响应时间-I/O-执行其他
MIPS (Million Instrctions per Second)
MFLOPS(Million floating-point operations per second )
M=106 ;G=109 ;T=1012 ; P=1015 ;EZ
216=65536
CPI(Clock cycle Per Instruction)
二、数据表示和运算
零标志ZF:结果为0
溢出标志OF:X与Y的最高位不同于结果的最高位 ,OF为1,按这条规则硬性判定,带符号数可以按照意义.
单符号: 两个加数符号相同,结果符号与加数不同。
双符号位:结果的两个符号位不同
符号位和进位法:符号位的进位与最高位的进位不同
结果的最高位SF。
进位借位CF:加法的进位(最高位?溢出?),减法的借位(不够减,无符号数可以直接按照意义来)。加法时候等于进位输出(最高位的进位情况1+1就是进位),减法的时候等于进位输出取反。总之:sub异或进位输出(不要按照意义)
无符号
无符号数等于:ZF=0
无符号数小于的判定:CF为1且ZF=0,说明有借位且不相等。CF· ZF ‾ \overline{\text{ZF}} ZF。
大于:没有借位且ZF=0。 CF ‾ ⋅ \overline{\text{CF}}· CF⋅ ZF ‾ \overline{\text{ZF}} ZF。
大于等于:没有借位或ZF=1. CF ‾ \overline{\text{CF}} CF+ ZF.
小于等于:有借位ZF=1或ZF=1;CF+ZF。
无符号数相加溢出:相加以后结果太大了,超出了当前位数的表示范围(110)。
无符号数相减异常:小-大得到的仍然是正数。
有符号数大于:SF=OF且ZF=0
负溢出:两个加数都是负数(最高位为1 1),相加得到正数(最高位为0)。
正溢出:两个数都是正数,相加得到负数。
减法通过添加取反电路转变为加法。加上相反数的补码。
无符号整数相乘不溢出:根据高n位全0。
带符号整数不溢出:高n+1位是否全0或者全1。
浮点数:看王道。浮点数的计算和上下限。
IEEE754
1-8-23
符号位 阶码(源码)[1,254] 尾数
(-1)s * 2阶码-127 * 1.位数
乘除实现:加法和移位操作。
无符号数乘法溢出判断:乘积的高n位全为0,则取低n位不发生溢出(符号扩展思想)
带符号数乘法溢出判断:乘积的高n位的每一位都等于低n位的第一位(符号扩展思想)
程序员对乘法提前进行溢出判断:对于 xy=z,若x!=0,z/x=y则没发生溢出。
带符号负数除法加上一个2k -1再去偏移
补码:符号位不变,其余取反加一
相反数补码:所有取反加一
符号拓展
逻辑移位:无符号数移位
算术移位
左移:
补码:左移低位添0
负数补码,左移丢0会溢出
右移
补码:右移高位添1
三、存储器的层次结构
存储器的分类
- 随机存取(Random Access半导体)
RAM均易失去
SRAM:S–cache-TLB
DRAM:D-定时刷新-主存-地址线计算出来以后除以2
Flash/ROM:存放BIOS
- 顺序存取-磁带
- 直接存取(Direct Access)-磁盘-看操作系统
- 相联存储器-按内容访问-TLB
单体多字:类似边界对齐(首地址%数据位数=0),位扩展
高位交叉:芯片内各单元连续编址,高位为体号。没有用
低位交叉:芯片内各单元交叉编址,低位为体号,所以取余得到体号
流水线:基本公式T+(n-1)t ,体数>=T/总线周期s
SSD
NAND闪存
磁盘
Cache
虚拟存储
四、指令系统
指令格式
操作码(多少条指令)+寻址特征(多少种寻址方式)+操作数地址码(寻址范围)-重复
指令分类
单字长、双字长、半字长
零地址:只有操作码,操作数在堆栈栈顶
一地址:自增,或目的地址在ACC
二地址:前边为目的操作数
三地址:A3存放结果
四地址:A4为下一条指令地址
访存次数:取指令算一次,取每个操作数算一次,写算一次
扩展操作码:前面剩余的几个状态*后边位数可以表示的位数
寻址方式
隐含寻址:操作数隐含在ACC种。
立即寻址:地址字段即为操作数。
直接寻址:直接给出操作数地址。
间接寻址:访问形式地址,取出内容,该内容为实际地址,多了一次访存。
寄存器寻址(类似直接寻址):直接给出操作数所在寄存编号。
寄存器间接:访问寄存器,取出内容,该地址为实际地址。
偏移寻址:寄存器内容+形式地址。
基址寻址:多道程序重定位、扩展寻址空间、系统,寄存器内容(通过更改基准寄存器的neritic)+形式地址(位移量)。
变址寻址:数组、循环、用户,寄存器内容(变址寄存器的内容是数组的下标)+形式地址(数组起始地址)。
相对寻址:公共子程序浮动、转移指令。转移指令(PC)+形式地址*n+偏移量(补码运算,16进制,数据扩展)
CISC&RISC
RISC-只有load和store可以访存,运算指令只有RR型,流水线,优化编译
CISC微程序(做不成电路,太复杂了)
RISC硬布线组合逻辑
数据对齐
当前地址除以长度可以整除
汇编
链接器:将所有相关联的目标代码文件,组合在一起,形成具有统一地址空间可以被执行的程序。
第五章CPU
指令执行的过程
取指 译码 取数 运算 存结果 查中断
CPU结构
运算器:和运算相关 PSW程序状态字
控制器:和指令周期相关的
硬布线微程序
微程序-指令
微指令是指令控制信号(微命令/微操作)的组合,CPU可以直接执行
数据通路
用户不可见寄存器
MAR、MDR、IR。(MIM)指令正常执行,没必要中间修改
异常和中断
异常:主存校验线路错误
中断:I/O
指令流水线
超流水线:一个时钟周期,一个功能部件使用多次。不可调整指令顺序。
静态多发射(超长指令字):编译器静态指令打包。多个操作码。多条指令组合成一条指令。
动态多发射(超标量,多配置):一次重叠n,可并行的n,空间并行,资源重复,以空间换时间。不可安排指令顺序,编译优化,动态流水线调度。
冒险处理
结构冒险:(同一时刻争抢同一资源)
解决方式:插入暂停周期;指令存储器和数据存储器分开
数据冒险:该条指令需要前边指令的结果
解决方式:阻塞时钟周期;数据转发旁路技术:上一个ALU的结果不等写会直接拿来用
类型:写后读(写未完成就去读)按序发射,按序完成只出现这一种错误
读后写:(应该先读后写,结果先写后读,后边的写指令提前了)
写后写:写覆盖
*五段式:I1与I4就不再数据相关
控制冒险
进行分支预测
尽早判别转移是否发生,尽早生成转移目标地址
预取转移成功和不成功两个控制流方向上的指令
异常和中断
内部异常:故障(页、除数为0),陷阱(系统调用),终止(终止进程、重启系统)。
外部中断:可屏蔽中断(I/O),不可屏蔽中断(硬件中断,紧急处理)。
异常中断的响应过程
关中断、保存断点(处理完成后要返回到的地址(PC))和程序状态(各种标志信息(PSW))、识别异常和中断事件并且转到相应的处理程序(中断向量放PC)-硬件完成。
软件、操作系统完成:保存现场(通用寄存器)和屏蔽字、开中断、执行、关中断、恢复、开中断、返回
异常中断的识别
软件-原因寄存器记录原因和标志信息。
硬件
中断向量:处理程序的首地址。
I/O
字符设备:键盘鼠标
块设备:磁盘
I/O端口:接口里的寄存器
统一编址:统一的访存指令就可以访问I/O端口
独立编址:地址码可以一样,需要专门的指令
I/O接口
结构:数据缓冲器、状态寄存器、控制寄存器
总线
片内总线:CPU内部寄存器交流的线
系统总线:
数据总线:指令、操作数、中断类型号
地址总线:地址
控制总线:其他
总线的性能指标:b与B的换算!!!!!!!!!
总线事务:一次设备的信息交换。
总线定时:
同步定时:快简单,可靠性差
异步定时:半互锁:从设备应答
全互锁:从设备应答,主设备收到
突发传输:一个地址多个数据
I/O控制方式
程序查询:CPU与I/O串行工作,外设直接与CPU进行交流
程序中断:外设直接与CPU进行交流,CPU启动外设以后,可以继续执行源程序,直到I/O完成,发起中断,CPU再进行中断响应(硬件)(关中断、保存断点、引出中断服务程序)和执行中断服务程序(涉及到现场的保护和恢复)
(中断类型号:中断向量)
中断请求发生在每条指令执行结束
DMA请求发生在每个机器周期,一个总线事务之后
DMA:外设和内存之间直接交流,DMA进行控制。
CPU一次总线事务后响应DMA
传送开始前后需要CPU
与CPU争夺总线和主存,DMA优先级更高