CPU
指令执行过程
大体分三个:取指——分析——执行
如:y=3x2+2
指令0:
取指:最初PC中是0,即指向第0条指令,将PC传入MAR,同时CU发出控制信号(读)到控制总线,主存收到MAR地址和控制总线信号,读0地址数据传给MDR;MDR拿到数据传给IR(IR拿到的指令就是传给MDR的数据);取指阶段完成
分析:IR将指令操作码传给CU,CU判断操作码是取数,CU将读信号到控制总线
执行:IR将指令地址码传到MAR,主存收到MAR地址和控制总线信号,取对应数据传给MDR,MDR拿到数据传给ACC(累加器),同时PC+1
指令1:
取指:PC中是1,即指向第1条指令,将PC传入MAR,同时CU发出控制信号(读)到控制总线,主存收到MAR地址和控制总线信号,读1地址数据传给MDR;MDR拿到数据传给IR(IR拿到的指令就是传给MDR的数据);取指阶段完成
分析:IR将指令操作码传给CU,CU判断操作码是乘法,CU将操作信号传到控制总线
执行:IR将指令地址码传到MAR,配合控制总线,是乘法指令,故主存收到MAR地址和控制总线信号取对应数据给MDR,MDR拿到数据传给MQ(乘商寄存器),指令0存到ACC的值转到X(通用的操作数寄存器),之后X和MQ的值由ALU实现乘法运算,结果返回ACC,同时PC+1
指令2:
取指:PC中是2,即指向第2条指令,将PC传入MAR,同时CU发出控制信号(读)到控制总线,主存收到MAR地址和控制总线信号,读2地址数据传给MDR;MDR拿到数据传给IR(IR拿到的指令就是传给MDR的数据);取指阶段完成
分析:IR将指令操作码传给CU,CU判断操作码是加法,CU将操作信号传到控制总线
执行:IR将指令地址码传到MAR,配合控制总线加法指令,故主存收到MAR地址和控制总线信号取对应数据给MDR,MDR传到X(通用的操作数寄存器),指令1存到ACC的值和X的值由ALU实现加法运算,结果返回ACC,同时PC+1
指令3:
取指:PC中是3,即指向第3条指令,将PC传入MAR,同时CU发出控制信号(读)到控制总线,主存收到MAR地址和控制总线信号,读3地址数据传给MDR;MDR拿到数据传给IR(IR拿到的指令就是传给MDR的数据);取指阶段完成
分析:IR将指令操作码传给CU,CU判断操作码是存数,CU将操作信号传到控制总线
执行:IR将指令地址码传到MAR,ACC将指令2存的值传到MDR,配合控制总线存数指令,故主存收到MAR地址、MDR数据和控制总线存数信号,将MDR值存到主存的MAR对应地址,同时PC+1
指令4:
取指:PC中是4,即指向第4条指令,将PC传入MAR,同时CU发出控制信号(读)到控制总线,主存收到MAR地址和控制总线信号,读4地址数据传给MDR;MDR拿到数据传给IR(IR拿到的指令就是传给MDR的数据);取指阶段完成
分析:IR将指令操作码传给CU,CU判断操作码是停机,CU将操作信号传到控制总线
执行:利用中断机制终止进程
中断处理流程
一个中断源对应一个中断处理程序,这种关系索引表,就是中断向量表
中断处理程序的入口地址就是中断向量。
中断隐指令是在中断开始时由硬件完成的一系列操作(关中断、保存断点、引出中断服务程序(中断向量))
内部异常种类
CPI-执行时间-指令执行速度
主频:4 GHZ=每秒执行4G个时钟周期
时钟周期:主频倒数,cpu最小时间单位
CPI=执行一条指令所需要的时钟周期数
执行时间:时钟周期数*时钟周期
MIPS:多少 百万条指令/s;MFLOPS:多少 百万条浮点运算/s;
GFLOPS:多少 十亿条浮点运算/s;TFLOPS:多少 万亿条浮点运算/s;
数据表示和运算
问题
定点小数 范围,表示方法
字符码 奇偶校验、CRC校验
奇偶校验:偶校验:添加1,使编码中1的个数为偶数;奇校验:添加1使编码中1的个数为奇数
移码
源码加减交替除法
原反补码范围
0的正负原反补码
补码使加减法统一
加减运算溢出、进位…
双符号位判断
规格化
机器零
int转换float数位丢失,转double不会
浮点数 基数
补码加减交替 乘法运算区别除法运算
原码一位乘
补码一位乘
海明码对n位纠错,校验位k位,则2^k>=n+k+1
规格化阶码问题:对小阶对到大阶,不会溢出;左规右规操作
浮点型机器数,注意阶码全0全1情况,如浮点型8020 0000H
八位字长小数机器数:没有阶码 123题
补码 符号位和数值位可以一起参与运算
溢出判断:进位判断法:最高位有进位,且和次高位进位异或结果为1,即溢出
基数为4的浮点数的尾数,小数点不能有两个连续0,可以有一个
浮点数范围
浮点数除法不需要左规,可能需要右规;
真 | 5 | 0(-0) | -5 | 128 | -128 | |
原 | 0000 0101 | 0000 0000 | 1000 0101 | 0000 0000 1000 0000 | 1000 0000 1000 0000 | 首位符号,正0负1;超出加位 |
反 | 0000 0101 | 0000 0000 | 1111 1010 | 0000 0000 1000 0000 | 1111 1111 0111 1111 | 正不变首位不变,原码取反 |
补 | 0000 0101 | 0000 0000 | 1111 1011 | 0000 0000 1000 0000 | 1111 1111 1000 0000 | 正不变首位不变,反码加1 |
运算部件
一位全加,串行进位加,并行(先行)进位加,带标志加
算术逻辑单元ALU(做算术运算和逻辑运算)
大端小端存储(如名)、按边界对齐存储(一行四字节,一字节8位,十六进制表示)
定点数
加减法
溢出判别:
1.对参与操作的两个数及结果,三个符号位用一位符号法(三个符号位做异或)
2.一位符号位+最高数位
3.双符号位(01正溢,10负溢)
乘法
原码一位乘(不带符号n次加n次位移)
按被乘数,1加一次乘数0加0.每次结果右移一位,移出位补到被乘位前面;符号单独算
补码一位乘(带符号n次加n+1次位移)
位移
算术:舍0等于乘(除)2舍1是误差
逻辑:视为无符号数,左右移都补0,舍去
循环:跟着箭头走
浮点数
最小值 | 最大值 | |
单精度 | 2^(-126) | |
双精度 | 2^(-1022) | |
除去E(指数)为全0和全1表示0和无穷大的情况 |
浮点数十进制转化
浮点数 | 十进制 | ||
单精度32位 | 41A4C000H | ——> | 20.59375 |
偏置8位 减127 | 0100 0001 1010 0100 1100 0000 0000 0000 | 阶码1000 0011 减去偏置127余4 | 1.010 0100 1100 0000 0000 0000*2^4 |
C104 0000H | <—— | -8.25 | |
1100 0001 0000 0100 0000 0000 0000 0000 | 阶码=3+127 1000 0010 | -1000.01=-1.00001*2^3 | |
双精度 | |||
偏置11位 减1023 | |||
规格化:规定尾数的最高数位必须是一个有效值(1)
左规:0.01001*2^1——>0.10010*2^0
右规:(尾数溢出时)a+b=00.1100*2^2+00.1000*2^2=01.0100*2^2=00.1010*2^3
存储系统
存储元 | 存储二进制的电子元件,每个存储元存1bit | |
存储单元 | 每个存储单元存放一串二进制代码 | MDR为32位,即每单元32个存储元 MAR为16位,即存储体有2^16个存储单元 |
存储字 | 存储单元中二进制代码的组合 | |
存储字长 | 存储单元中二进制代码的位数 | |
机器字长 | 计算机能一次处理的二进制代码长度 | |
指令字长 | 指令的二进制长度 | |
数据字长 | 数据总线一次能并行传送信息的次数 | |
一字节=8位,即1B=8bit |
问题
存储数据基本单位是字节(Byte),最小的存储单位是位(bit)
随机存储器RAM:SRAM(静态,速度快,价格贵),DRAM(动态)
只读存储器ROM:MROM(掩模式只读存储器),PROM(一次可编程可擦除),EPROM(多次可编程可擦除,次数有限),EEPROM(电可擦除)
Flash存储器,固态硬盘SSD
四体并行交叉存储器
cache地址映像
cache地址映像按内容寻址是全相联
引脚线:引脚最低数目 = 片选线(1) + 控制线(2, 读RD写WR)+ 数据线 + 地址线
DRMA地址复用:引脚数 = 地址线减半 + 数据线不变 + 行通选(1) + 列通选(1) + 读写控制线(2)
DRMA:以行为单位刷新
动态随机存储器(DRMA)刷新
死区:行刷新时间不能进行读/写操作,故称为“死时间”或访存“死区”
集中刷新:一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新;死区为刷新时间
分散刷新:对每行刷新分散到每个存取周期内;存取后刷新,无死区
异步刷新:在2ms内对128行各刷新一遍,刷新一行只能停止一个存取周期;一个刷新周期一次死区,刷新安排在译码则无死区
多模块存储器
多体并行存储器:多体模块组成,有独立的读写控制电路、MAR和MDR,能并行工作也能交叉
顺序(高位交叉编址):高位地址表示体号【模块号】,低位地址表示体内地址
交叉(低位交叉编址):高位地址表示体内地址,低位地址表示体号
取一个字的存取周期为T,总线传输周期为r,取m个字的时间为T+(m-1)r,顺序方式时间为mT
主存扩容
位扩展: 8片 8K*1位的RAM,组成8K* 8位的存储器;
8k=13根地址线并联8快RAM;8位由8根数据线分别连接
字扩展:
线选: 2片 8K*8位的存储器,组成16K * 8位的存储器
16k=13根地址线每个连两片,2根译码线控制片;8位由8根数据线连接,每个连两片
译码片:4片 8K*8位的存储器,组成32K * 8位的存储器
同线选,但是2根译码线区分4片
字位同时扩展:四块8k4位芯片,位拓展为两片8k8位,译码片实现字拓展为16k8位
Cache
地址映射
未说明默认按字节(8位)访存
【主存容量为512K*16位,Cache容量为4096*16位,块长为4个16位的字,访存地址为字】
全相联映射:主存地址=主存字块地址位数m+字块内地址b
【主存地址=(log[512k*16/(4*16)]=17)+(log[4*16/16]=2)=17(主存字块标记)+2(字块内地址)】
直接映射:主存地址=主存字块标记t+cache字块地址c+字块内地址b
【主存地址=(log[512k*16/16]-log[4096*16/16]=19-12=7)+(log[4096*16/(4*16)]=10)+2
=7(主存区号t)+10(cache字块地址c)+2(字块内地址b)】
组相联映射:主存地址=主存字块标记(t+r)+组地址(c-r)+字块内地址b
【二路组相联主存地址=(log[512k*16/16]-log[4096*16/16]+log[2]=19-12+1=8)
+(log[4096*16/(4*16)]-log[2]=10-1=9)+2
=8(主存字块标记t+r)+9(组地址c-r)+2字块内地址b】
替换算法
随机、先进先出(FIFO)、最近最少使用(LRU)、最不常用(LFU)
写入更新策略
写命中(cache中有):直写、回写
写未命中(cache中没有):写分配(调入c回写改)、非写分配(直接内存改)
指令系统
指令格式
操作码+地址码:【操作码(OP)8位】+【地址码(A)共4个,每个6位】
地址码:字长(机器字长)32位的单字长指令
四地址指令 | (A1)OP(A2)---->A3 | OP(8位)A1(8位)A2(8位)A3(8位) | |
二地址指令 | (A1)OP(A2)--->A1 | OP(8位)A1(12位)A2(12位) | A1和A2相加结果返回到A1 |
单地址指令 | OP(A1)---->A1 | OP(8位)A(24位) | 自增、自减、取反,求补 |
零地址指令 | OP | 空操作,停机,关中断 |
操作码:定长操作码、不定长操作码(扩展操作码)
拓展操作码:将指定的操作码作为标记,出现这个操作码则侵占地址位作为操作码从而扩展操作码
寻址方式
指令寻址:顺序寻址,跳跃寻址
PC的位数取决于存储器的字数;IR的位数取决于指令字长
数据寻址:地址码 = 寻址特征+形式地址;A:A的值;(A):地址为A的内容
访主存
隐含寻址 | 指令中就隐含操作数的地址 | 程序指定 |
立即寻址 | 形式地址是实际操作数 | A就是操作数 |
直接寻址 | 形式地址存的操作数地址 | EA=A |
间接寻址 | 地址码是存储操作数地址的地址 | EA=(A) |
访寄存器
访问主存改为访问寄存器
寄存器寻址 | 直接寻址同理 | EA=Ri |
寄存器间接寻址 | 间接寻址同理 | EA=( Ri) |
偏移类
基址寻址 | 基址寄存器BR的内容+形式地址A=有效地址 | EA=(BR)+A | BR不变A变 |
变址寻址 | 变址值IX的内容+形式地址A=有效地址 | EA=(IX)+A | IX变A不变 |
相对寻址 | 程序计数器PC的内容+形式地址A=有效地址 | EA=(PC)+A | PC中保存下条指令地址 |
中央处理器CPU
机器字长(即字长)——操作系统位数(32、64);一般等于数据总线位数;cpu一次处理数据位数
存储字长——存储单元存储二进制位数(字节整数倍);存储字长一般不固定。小于等于机器字长
指令字长——一条指令二进制位数(存储字长整数倍);指令按长度分单字长指令,双子长指令,半字长指令(这里字长指机器字长)
指令执行过程
指令周期
指令周期最多有4种机器周期:取指周期、间址周期、执行周期、中断周期
指令总是根据PC从主存中读出
指令周期、机器周期、时钟周期、存取周期:指令周期 = 取指周期+间址周期+执行周期+中断周期
每条指令执行结束前,都要发中断查询信号,有中断请求,则CPU进入中断响应阶段(中断周期)
CPI:一条指令所需要的时钟周期数
数据流向
根据指令要求一次访问的数据序列
取指周期 | 从主存中取出指令字 | ![]() |
间址周期 | 取有效地址 | ![]() |
执行周期 | 取操作数 | 无统一的数据流向 |
中断周期 | 保存程序断点 | ![]() |
控制器
硬布线控制器:硬件电路
微程序控制器:将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令;分水平型微指令和垂直型微指令
异常&中断
异常(内中断):故障(缺页、除零、地址越界)、自陷(系统调用、断点)、终止(重启)
指令周期末尾执行,与指令执行同步,由cpu自身检出,无需外部信号
中断(外中断):可屏蔽中断、不可屏蔽中断;cache缺失、I/O中断、时钟中断
执行完指令后检查中断信号线,与指令执行异步
指令流水线
流水线时间:时间= 一条指令所需时间+(指令条数-1)*时间最长的指令的一段【看图分析】
流水线吞吐量:吞吐量=指令条数 / 流水线执行时间
流水线冒险
结构冒险 | 多条指令在同一时刻争用同一资源 | 暂停一个时钟周期、分离结构cache |
数据冒险 | 下一条指令会用到当前指令计算出的结果 | 暂停一个或多个时钟周期、 数据旁路技术、指令编译优化、按序流动 |
控制冒险 | 对转移指令进行分支预测、加快和提前形成条件码 |
多处理机
SI、MI(单指令、多指令);SD、MD(单数据、多数据)
单指令流单数据流结构(SISD)、单指令流多数据流结构(SIMD)、
多指令流单数据流结构(MISD)、多指令流多数据流结构(MIMD)【并行计算模式】
总线
计算
时钟周期=1/时钟频率(s);时钟周期即一个时钟的时间长度,时钟频率即2.3GHz
总线带宽(总线传输率)=总线宽*总线工作频率;总线数据线有几根即一次传输多少b
总线工作频率=1/时钟周期
注意半双工全双工
总线事务
请求总线到完成操作序列:请求总线——使用权仲裁——寻址设备——传输数据——释放使用权
突发传送总线事务:即一次传输一个地址和一批连续的数据,只需给出一个首地址
同步定时:统一时序控制
异步定时:“握手”信号来实现定时控制
输入输出系统
I/O控制器(I/O接口)
接受主机发送的I/O控制信号,实现主机和外部设备之间的信息交换
若干端口+相应逻辑控制器
I/O端口
接口电路中可以被CPU直接访问的寄存器
主要端口:数据端口、状态端口、控制端口
I/O编址:统一编址(和内存编址相同)、独立编址(专门的I/O指令来区分存储单元和I/O设备)
I/O控制方法
输入/输出系统实现主机与I/O设备之间数据传送的控制方式