概论
冯诺依曼计算机最根本特征是:采用存储程序原理。
冯诺依曼计算机属于SISD。
CPI就是有效CPI。一个意思。
IPC:CPI倒过来,意为CPI倒数。
数的表示与运算
标志信息
ZF:ZF=1代表结果为0,对有符号运算和无符号运算,ZF均有意义。
CF:表示无符号整数运算时的进位/借位。
加法时,CF=1说明溢出,减法时,CF=1说明不够减,对于带符号数,CF无意义。
OF:OF=1,代表有符号整数运算时溢出。对无符号整数无意义
判断溢出,补码定点数判断溢出有3种方法。
- 单符号位:参与运算的2数,符号位为A和B,结果的符号位为S。
2.双符号位/模4补码:符号位相同,代表未溢出
符号位 | 代表 |
---|---|
00 | 结果为正 |
01 | 正溢出 |
10 | 负溢出 |
11 | 结果为负 |
结果表达式为 V=1代表溢出,0代表不溢出。
3. 与双符号位一样。
浮点数
浮点数表示为。
.
正/负上溢:超过浮点数最大表示范围/绝对值大于负的,机器必须中断操作,进行处理。
正/负下溢:超出最小表示范围,视为机器0,也就是说,不会发生中断。
移码,只能表示整数,是在真值X上+一个整数(偏置值),一般是.但对于单精度浮点数(float),双精度浮点数(double),来说,偏置值为
。
二进制小数转换成10进制数时,小数部分乘以,比如0.1就是
.
补码浮点数的规格化表示:小数点后一位与符号位不同。
源码浮点数的规格化表示:小数点后位不全为0.
浮点数的规格化,是为了保存更多的数据,把尾数里面前面是0的推到前面去。
左规:结果为,需要进行左规。尾数左移一位,阶码-1,可能需要左规多次,直到将第一位1移到小数点左边。
右规:结果为,需要进行左规。尾数右移1位,阶码+1,尾数右移是,最高位1被移到小数点前1位作为隐藏位。最后一位移出时,要考虑舍入。
对于规格化的浮点数,数值的最高位永远是1,IEE754标准,(移码的偏移量不是就是这个原因)
称为隐藏位。
只有浮点数有舍入的概念,定点数没有。
浮点数的舍入
右规的时候会发生舍入。
0舍1入法:类似四舍五入法。运算结果保留位的最高数位为0,则舍去,最高为1,则在尾数末尾加1,可能会使尾数溢出,需再做一次右规。
恒置1法:不论丢掉的最高位是1还是0,都把右移后的尾数末尾恒置1.
截断法:直接截取所需位数,丢弃后面的所有位,这种方法最简单。
IEEE754的尾数使用原码编写的。
其他
强制类型转换:不同类型数据混合运算时,遵循类型提升的原则,较低类型转换成较高类型。
存储系统
静态重定位:在逻辑地址转换为物理地址的过程中,地址变换是在进程装入时一次完成的,以后不再改变。
优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。
缺点:内存空间不能移动;各个用户进程很难共享内存中同一程序的副本
动态重定位:动态运行的装入程序把转入模块装入内存之后,并不立即把装入模块的逻辑地址进行转换,而是把这
种地址转换推迟到程序执行时才进行,装入内存后的所有地址都仍是逻辑地址。这种方式需要寄存器的支持,其中
放有当前正在执行的程序在内存空间中的起始地址。
优点:内存空间可以移动;各个用户进程可以共享内存中同一程序的副本。
缺点:增加了机器成本,而且实现存储管理的软件算法比较复杂。
多体并行存储器
由多体模块构成,每个模块都有相同的容量和存取速度。都有独立的读写控制电路、地址寄存器、数据寄存器。可以并行工作/交叉工作。
高位交叉存储/顺序方式
高位表示体号,低位地址为体内地址。
把体内地址送到高位体号确定的模块内进行译码。
访问一个连续主存块时,总是在一个模块内访问,等到该模块访问完才转到下一个模块访问。
CPU按顺序访问模块。模块不能并行访问,不能提高吞吐率。
低位交叉存储/交叉方式
与高位相反,低位表示体号,高位为体内地址。
每个模块按"模m"编址。
程序连续存放在相邻模块中。
可以在不改变每个模块存取周期的前提下,采用流水线方式并行存取。提高带宽。
模块字长=数据总线宽度。
存取一个字的存取周期T,总线传送周期r,
交叉模块数
m称为交叉存取度。
每经过r时间后启动下一个模块,要求其模块数必须大于等于m。以保证启动某模块后,经过时间再次启动该模块时。其上次的存取操作已经完成(即流水线操作不间断)
连续存储m个字所需时间:
带宽大大提高。
2.主存储器与CPU的连接
主存容量的扩展
位扩展法
多个存储器件对字长进行扩充,增加存储字长。
将多个存储芯片的地址端、片选端和读写控制端相应并联。数据端分别引出。
仅采用位扩展时,各芯片连接地址线方式相同。连接数据线方式不同。
在某一时刻选中所有芯片,片选信号要连接到所有芯片。
字扩展法
增加存储器中字的容量。位数不变。
字位同时扩展法
在计算每一片芯片的最低地址和最高地址时。最高地址-最低地址=即全0到全1.位数为
cache和主存的映射方式
1.直接映射:
主存中的每一块只能装入cache的唯一位置。若位置已有内容,则产生块冲突。原块被无条件替换出去。
实现简单,不够灵活。块冲突概率最高。空间利用率最低。
Cache行号=主存块号mod Cache总行数
直接映射的地址结构为:
标记/主存字块标记 | Cache行号/cache字块地址 | 块内地址 |
---|---|---|
t位 | c位 | b位 |
m:主存可被分成块
c:cache地址长度:cache中主存块数取对数。cache可被分成块。
t:比较器长度/标记长度:只能通过计算出来。不能通过主存和cache直接计算。
b:块长为.
全相联映射
每一块可以装入Cache行中的任何位置。每行的标记用于指出该行取自主存的哪一块。
CPU访存时需要与所有Cache行的标记进行比较。
优:比较灵活,冲突率低。空间利用率高,命中率高。
缺:标记的比较速度慢,实现成本高。采用昂贵的按内容寻址的相联存储器进行地址映射。
地址结构
主存字块标记 | 块内地址 |
---|---|
m位 | b位 |
m的计算方法同上,主存地址长度-b
组相连映射
r路组相连:一组有r个cache行。注意r路组相连的意义!
组相连映射的地址结构为:
标记/主存字块标记 | 组地址 | 块内地址 |
---|---|---|
t+r位 | c-r位 | b位 |
r:就是r路组相连的路数。也就是是组内包含的块数。
组地址计算的是有多少个组,不是多少路。
也就是说,标记位=m+r-c-b
比较器的个数:m-路组相联的路数。即m
虚拟内存管理
页面的分配:页面存在于内存。
页面的缓存:页面存在于TLB。
页面缓存必分配。也就是页面只要存在于TLB。页面就一定在内存中。
高级语言->可执行文件:
预处理->编译->汇编->链接
链接是最后一步进行的。
指令系统
寻址分为指令寻址和数据寻址
指令寻址
寻找下一条指令的地址
顺序寻址:直接加
跳跃寻址:转移类指令实现,下一条指令地址不由PC指出,而是由本条指令给出下条指令的计算方式。
数据寻址
确定本条指令的操作数地址
1.基址寻址和变址寻址
基址寄存器BR,变址寄存器IX,都属于运算器的部分。
基址寻址
基址寻址用于扩大寻址范围。用户不必考虑自己的程序位于主存的那个空间。有利多道程序设计。
基址寄存器面向操作系统,内容由操作系统或管理程序确定。主要用于解决程序逻辑空间与存储器物理空间的无关性。
变址寻址
所谓变址,是相对于基址来说的。就是IX中内容可变。一般用于循环程序。设置A为数组首址。不断改变IX中的内容。
CPU
断点:程序中断的地方,将要执行的下一指令的地址。
现场:程序执行的现场信息,如GPRS,psw的内容。
保护断点:保存PC的值,由中断隐指令完成(即硬件自动完成)
保护现场:将现场信息(各种寄存器中的值)压入主存或堆栈,由中断服务程序的指令完成(即软件完成)
单级中断系统中
由硬件完成/由中断隐指令完成
-
关中断
-
保存断点
-
识别中断源
由中断处理程序完成
-
保存现场
-
中断事件处理
-
恢复现场
-
开中断
-
中断返回
2.中断隐指令:CPU相应中断后,经过硬件的一些操作,就会转去执行中断服务程序。硬件操作就是中断隐指令。
它不是一条真正的指令,没有操作码,不能为用户所使用。
完成的操作:
关中断
保护断点
引出中断服务程序,将中断服务程序的入口地址传给PC。
3.子程序调用与中断调用不同的是,子程序调用不需要保存PSW(程序状态字寄存器)的内容。
控制器
微程序控制器
一条机器指令可分解为一个微操作序列,微操作是计算机中最基本的、不可再分解的操作。
在微程序控制的计算机中,将控制部件向执行部件发出的各种控制命令称为微命令。是构成控制序列的最小单位。
微命令和微操作是一一对应的。
微命令是微操作的控制信号
微操作是微命令的执行过程
微命令有互斥性和相容性之分。
相容性微命令:可以同时产生,共同完成某一些微操作的微命令。
互斥性微命令:在机器中不允许同时出现的微命令。
微指令:若干微命令的集合。
微地址:存放微指令的控制存储器的单元地址。
微指令包含2大部分信息
1.操作控制字段/微操作码字段:
用于产生某一步操作所需的各种操作控制信号。
2.顺序控制字段/微地址码字段:用于产生下一条要执行的微指令地址。
微周期:执行一条微指令所需的时间,通常为1个时钟周期。
微指令编码方式/微指令控制方式
1.直接编码/控制方式
无需译码,每一位代表一个微命令。设计微指令时,选用或不选用某个微命令,将表示该微命令的对应位设置为1/0.
优:简单、直观、执行速度快、操作并行性好。
缺:指令字长过长。控制存储器容量极大。
2.字段直接编码方式
微命令字段分成若干小字段。互斥性组合在同一字段,相容性组合在不同字段。
每个字段独立编码。每种编码代表一个微命令。各字段编码含义单独定义,与其他字段无关。
可以缩短微指令字长
比直接编码方式慢,因为要通过译码电路。
3.字段间接编码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发 出的微命令,因此称为字段间接编码,又称隐式编码。这种方式可进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常作为字段直接编码方式的一种辅助手段。
微指令的地址形成方式
1.断定方式:直接由微指令的下地址字段指出。
2.根据机器指令的操作码形成,机器指令取至IR后,微指令地址由操作码经微地址形成部件形成。
3.增量计数器法:(CMAR)+1→CMAR,适用于后继微指令地址连续
4.根据各种标志决定微指令分支转移的地址
5.通过测试网络形成
6、由硬件直接产生微程序入口地址
微程序入口地址是由机器指令的操作码字段形成的
微指令格式
水平型微指令
直接编码、字段直接编码、字段间接编码、混合编码
优:微程序短,执行速度快
缺:微指令长,编写微程序较麻烦
垂直型微指令
类似机器指令操作码,在微指令中设置微操作码字段,采用微操作码编译法。由微操作码规定微指令的功能。一条垂直型微指令只能定义执行一种基本操作。
优:微指令短、简单、规整、便于编写微程序
缺:微程序长,执行速度慢,工作效率低。
混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作。微指令较短。仍便于编写。微程序不长,执行速度加快。
水平型微指令并行操作能力强、效率高、灵活性强。垂直型微指令差
水平型微指令执行一条指令的时间短,垂直型微指令长
由水平型微指令解释指令的微程序,微指令字较长但微程序短。
垂直型微指令与之相反,微指令字较短微程序长
水平型微指令用户难以掌握,垂直型与指令比较相似,相对容易掌握。
控制存储器存储的是微程序,微程序数量取决于机器指令的条数。与微指令数量无关。
指令流水线
流水线的冒险与处理
流水线冒险:一些情况使得流水线无法正确执行后续指令而引起流水线阻塞/停顿。
结构冒险/资源冲突:
多条指令在同一时刻争用同一资源引起的冲突。也称资源冲突。
1.迁移指令访存时,使后一条相关指令暂停一个时钟周期。
2.单独设置数据存储器和指令存储器,使取数和取指令在不同的存储器中进行。
L1 Cache使用数据Cache和指令Cache分离。从而避免了资源冲突的发生。
数据冒险/数据冲突
下一条指令会用到当前指令计算出的结果。
写后读:当前指令写入后,下一条指令才能读。
读后写:当前指令读以后,下一条才能写
写后写:当前指令写入寄存器后,下一条指令才能写。
解决:
1.数据相关指令及后续指令都暂停一至几个时钟周期。
2.数据旁路:设置相关专用通路,不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程。使本来需要暂停的操作可以继续执行。
控制冒险/控制冲突
一般跳转/调用/转移/返回会引起控制冒险。
1.对转移指令进行分支预测,尽早生成转移目标地址。
2.预测转移成功和不成功2个控制流方向上的目标指令。
3.加快和提前形成条件码。
4.提高转移方向的猜准率。
数据通路
组合逻辑元件/操作元件:
不含存储信号的记忆单元,任何时刻的输出仅取决于这一时刻的输入。如加法器,ALU,译码器,多路选择器(MUX),三态门
时序逻辑元件/状态元件:
包含存储记忆单元,各类寄存器和存储器,通用寄存器组,PC,PSW。
RISC&CISC
RISC指令条数少,指令长度固定,格式和寻址种类少,只有取数/存数指令访问存储器,其余指令操作均在寄存器之间进行,CPU中通用寄存器多,大部分指令在一个时钟周期内完成,以硬布线控制器为主,不用/少用微程序控制。
外部设备
突发传送/猝发传输:在一个总线周期中,可以传输多个存储地址连续的数据。一次传输一个地址,和一组地址连续的数据。