概论

冯诺依曼计算机最根本特征是:采用存储程序原理。

冯诺依曼计算机属于SISD。

CPI就是有效CPI。一个意思。

IPC:CPI倒过来,意为CPI倒数。

数的表示与运算

标志信息

ZF:ZF=1代表结果为0,对有符号运算和无符号运算,ZF均有意义。

CF:表示无符号整数运算时的进位/借位。

加法时,CF=1说明溢出,减法时,CF=1说明不够减,对于带符号数,CF无意义。

OF:OF=1,代表有符号整数运算时溢出。对无符号整数无意义

判断溢出,补码定点数判断溢出有3种方法。

  1. 单符号位:参与运算的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"编址。

alt

程序连续存放在相邻模块中。

可以在不改变每个模块存取周期的前提下,采用流水线方式并行存取。提高带宽。

模块字长=数据总线宽度。

存取一个字的存取周期T,总线传送周期r,

交叉模块数

m称为交叉存取度。

每经过r时间后启动下一个模块,要求其模块数必须大于等于m。以保证启动某模块后,经过时间再次启动该模块时。其上次的存取操作已经完成(即流水线操作不间断)

连续存储m个字所需时间:

带宽大大提高。

2.主存储器与CPU的连接

主存容量的扩展
位扩展法

多个存储器件对字长进行扩充,增加存储字长。

将多个存储芯片的地址端、片选端和读写控制端相应并联。数据端分别引出。

仅采用位扩展时,各芯片连接地址线方式相同。连接数据线方式不同。

在某一时刻选中所有芯片,片选信号要连接到所有芯片。

字扩展法

增加存储器中字的容量。位数不变。

字位同时扩展法

在计算每一片芯片的最低地址和最高地址时。最高地址-最低地址=即全0到全1.位数为

cache和主存的映射方式

1.直接映射:

主存中的每一块只能装入cache的唯一位置。若位置已有内容,则产生块冲突。原块被无条件替换出去。

实现简单,不够灵活。块冲突概率最高。空间利用率最低。

Cache行号=主存块号mod Cache总行数

直接映射的地址结构为:

标记/主存字块标记 Cache行号/cache字块地址 块内地址
t位 c位 b位

alt

m:主存可被分成

c:cache地址长度:cache中主存块数取对数。cache可被分成块。

t:比较器长度/标记长度:只能通过计算出来。不能通过主存和cache直接计算。

b:块长为.

全相联映射

每一块可以装入Cache行中的任何位置。每行的标记用于指出该行取自主存的哪一块。

CPU访存时需要与所有Cache行的标记进行比较。

优:比较灵活,冲突率低。空间利用率高,命中率高。

缺:标记的比较速度慢,实现成本高。采用昂贵的按内容寻址的相联存储器进行地址映射。

alt

地址结构

主存字块标记 块内地址
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的值,由中断隐指令完成(即硬件自动完成)

保护现场:将现场信息(各种寄存器中的值)压入主存或堆栈,由中断服务程序的指令完成(即软件完成)

单级中断系统中

由硬件完成/由中断隐指令完成

  1. 关中断

  2. 保存断点

  3. 识别中断源

    由中断处理程序完成

  4. 保存现场

  5. 中断事件处理

  6. 恢复现场

  7. 开中断

  8. 中断返回

2.中断隐指令:CPU相应中断后,经过硬件的一些操作,就会转去执行中断服务程序。硬件操作就是中断隐指令。

它不是一条真正的指令,没有操作码,不能为用户所使用。

完成的操作:

关中断

保护断点

引出中断服务程序,将中断服务程序的入口地址传给PC。

3.子程序调用与中断调用不同的是,子程序调用不需要保存PSW(程序状态字寄存器)的内容。

控制器

微程序控制器

一条机器指令可分解为一个微操作序列,微操作是计算机中最基本的、不可再分解的操作。

在微程序控制的计算机中,将控制部件向执行部件发出的各种控制命令称为微命令。是构成控制序列的最小单位。

微命令和微操作是一一对应的。

微命令是微操作的控制信号

微操作是微命令的执行过程

微命令有互斥性和相容性之分。

相容性微命令:可以同时产生,共同完成某一些微操作的微命令。

互斥性微命令:在机器中不允许同时出现的微命令。

微指令:若干微命令的集合。

微地址:存放微指令的控制存储器的单元地址。

微指令包含2大部分信息

1.操作控制字段/微操作码字段:

用于产生某一步操作所需的各种操作控制信号。

2.顺序控制字段/微地址码字段:用于产生下一条要执行的微指令地址。

微周期:执行一条微指令所需的时间,通常为1个时钟周期。

微指令编码方式/微指令控制方式
1.直接编码/控制方式

无需译码,每一位代表一个微命令。设计微指令时,选用或不选用某个微命令,将表示该微命令的对应位设置为1/0.

优:简单、直观、执行速度快、操作并行性好。

缺:指令字长过长。控制存储器容量极大。

alt

2.字段直接编码方式

微命令字段分成若干小字段。互斥性组合在同一字段,相容性组合在不同字段。

每个字段独立编码。每种编码代表一个微命令。各字段编码含义单独定义,与其他字段无关。

alt

可以缩短微指令字长

比直接编码方式慢,因为要通过译码电路。

3.字段间接编码方式

一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发 出的微命令,因此称为字段间接编码,又称隐式编码。这种方式可进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常作为字段直接编码方式的一种辅助手段。

微指令的地址形成方式

1.断定方式:直接由微指令的下地址字段指出。

2.根据机器指令的操作码形成,机器指令取至IR后,微指令地址由操作码经微地址形成部件形成。

3.增量计数器法:(CMAR)+1→CMAR,适用于后继微指令地址连续

4.根据各种标志决定微指令分支转移的地址

5.通过测试网络形成

6、由硬件直接产生微程序入口地址

微程序入口地址是由机器指令的操作码字段形成的

微指令格式
水平型微指令

直接编码、字段直接编码、字段间接编码、混合编码

alt

优:微程序短,执行速度快

缺:微指令长,编写微程序较麻烦

垂直型微指令

类似机器指令操作码,在微指令中设置微操作码字段,采用微操作码编译法。由微操作码规定微指令的功能。一条垂直型微指令只能定义执行一种基本操作。

alt

优:微指令短、简单、规整、便于编写微程序

缺:微程序长,执行速度慢,工作效率低。

混合型微指令

在垂直型的基础上增加一些不太复杂的并行操作。微指令较短。仍便于编写。微程序不长,执行速度加快。

水平型微指令并行操作能力强、效率高、灵活性强。垂直型微指令差

水平型微指令执行一条指令的时间短,垂直型微指令长

由水平型微指令解释指令的微程序,微指令字较长但微程序短。

垂直型微指令与之相反,微指令字较短微程序长

水平型微指令用户难以掌握,垂直型与指令比较相似,相对容易掌握。

控制存储器存储的是微程序,微程序数量取决于机器指令的条数。与微指令数量无关。

指令流水线

流水线的冒险与处理

流水线冒险:一些情况使得流水线无法正确执行后续指令而引起流水线阻塞/停顿。

结构冒险/资源冲突:

多条指令在同一时刻争用同一资源引起的冲突。也称资源冲突。

1.迁移指令访存时,使后一条相关指令暂停一个时钟周期。

2.单独设置数据存储器和指令存储器,使取数和取指令在不同的存储器中进行。

L1 Cache使用数据Cache和指令Cache分离。从而避免了资源冲突的发生。

数据冒险/数据冲突

下一条指令会用到当前指令计算出的结果。

写后读:当前指令写入后,下一条指令才能读。

读后写:当前指令读以后,下一条才能写

写后写:当前指令写入寄存器后,下一条指令才能写。

解决:

1.数据相关指令及后续指令都暂停一至几个时钟周期。

2.数据旁路:设置相关专用通路,不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程。使本来需要暂停的操作可以继续执行。

控制冒险/控制冲突

一般跳转/调用/转移/返回会引起控制冒险。

1.对转移指令进行分支预测,尽早生成转移目标地址。

2.预测转移成功和不成功2个控制流方向上的目标指令。

3.加快和提前形成条件码。

4.提高转移方向的猜准率。

数据通路

组合逻辑元件/操作元件:

不含存储信号的记忆单元,任何时刻的输出仅取决于这一时刻的输入。如加法器,ALU,译码器,多路选择器(MUX),三态门

时序逻辑元件/状态元件:

包含存储记忆单元,各类寄存器和存储器,通用寄存器组,PC,PSW。

RISC&CISC

RISC指令条数少,指令长度固定,格式和寻址种类少,只有取数/存数指令访问存储器,其余指令操作均在寄存器之间进行,CPU中通用寄存器多,大部分指令在一个时钟周期内完成,以硬布线控制器为主,不用/少用微程序控制。

外部设备

突发传送/猝发传输:在一个总线周期中,可以传输多个存储地址连续的数据。一次传输一个地址,和一组地址连续的数据。