王道计算机组成原理笔记

1.1计算机的发展

​ 计算机系统 = 软件 + 硬件

​ 软件可以划分为系统软件和应用软件,系统软件用来管理整个计算机系统(如:操作系统、数据库管理系统 、标准程序库、网络软件、语言处理程序、服务程序)。应用软件是按任务需要编制而成的各种程序(比如抖音、迅雷、QQ.)

硬件的发展

第一代:电子管时代

​ 第一台电子数字计算机,采用 电子管作为逻辑元件(逻辑元件是用于处理电信号的最小单元)

第二代:晶体管时代

​ 采用晶体管作为逻辑单元,大大减少了体积和功耗。有了操作系统雏形
第三代:中小规模集成电路时代

​ 采用中小规模的集成电路作为逻辑元件。体积减少,功耗降低,可靠性高,开始出现分时操作系统

第四代:大规模、超大规模集成电路时代

​ 采用大规模或超大规模的集成电路作为逻辑元件,开始出现微处理器、微型计算机。

image-20240716103515910

目前计算机发展的趋势有两个方面
1.更微型,多用途
2.更巨型,超高速

1.2.1硬件的组成

​ “存储程序”:是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。

image-20240716114302728

冯诺依曼计算机的特点:

​ 1.计算机由五大部件组成
​ 2.指令和数据以同等地位存于存储器,可按地址寻访
​ 3.指令和数据用二进制表示
​ 4.指令由操作码和地址码组成
​ 5.存储程序(会提前把指令和数据存储到存储程序中)
​ 6.以运算器为中心

现代的计算机以存储器为中心

image-20240716114756346

CPU整合了运算器和控制器,可以将结构简化成:

image-20240716114902450
小结

image-20240716115033883

1.2.2硬件的工作原理

主存储器

​ 存储体中按照地址存储各种数据
​ MAR负责 存取/写入 的地址数据,当CPU将地址数据告诉MAR后,存储器会根据MAR中的地址找到数据 /根据地址将MDR中的数据写入存储体。
​ MDR负责存储 查找/存入 的数据,存储器根据MAR查找完成后,数据会被放到MDR中CPU可以取走MDR中的数据 / 将MDR中的数据写入存储体

image-20240717091511983

​ 存储体会被分成一个一个的存储单元,每个存储单元中存放二进制代码数据称为存储字,每个存储字包含多少二进制位称为存储字长,用于存放二进制的电子元件称为存储元,每个存储元可以存储 1bit

image-20240717092542374

存储字长 = MDR位数

运算器

运算器:用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)

一个运算器有4个主要组成部分: ACC、 MQ、X、ALU

ACC:累加器用于存放操作数或运算结果
MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
X:通用的操作数寄存器,用于存放操作数
ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算

image-20240717095103040

控制器

控制器有三个主要组成部分:CU、IR、PC

CU:控制单元,分析指令,给出控制信号
IR:指令寄存器,存放当前执行的指令
PC:程序计数器,存放下一条指令地址,有自动加1功能

image-20240717093222831

完成一条指令的过程:
1.根据PC中记录的指令地址 ,从内存中取出指令
2.将取出的指令放入IR中进行指令分析
3.分析完成后CU会控制相关部件完成这个指令的操作

image-20240717093502239
小结

image-20240717095149770

1.2.3计算机系统的层次结构

image-20240717100659632
语言转换

​ 高级语言 经过编译程序 可以被翻译成汇编语言 然后经过汇编程序 可以被翻译成机器语言,机器语言可以直接被识别

​ 高级语言还可以直接通过解释程序 翻译成机器语言

编译程序:将高级语言编写的源程序全部语句一次性翻译成机器语言程序,而后再执行机器语言程序(只需翻译一次)
解释程序:将源程序的一条语句翻译成对应于机器语言的语句,并立即执行。紧接着再翻译下一句(每次执行都要翻译〉

image-20240717101253256

1.3计算机性能指标

存储器性能指标

存储器容量

​ MDR位数=存储字长=每个存储单元的大小
​ MAR位数反映存储单元的个数(最多支持多少个,但实际值可能比他小)
​ 总容量 = 存储单元个数 × 存储字长 bit = 存储单元个数 × 存储字长 / 8 Byte

image-20240717101623553
CPU性能指标

CPU主频
​ CPU主频(单位:Hz)指的是CPU数字脉冲信号震荡频率,将每个脉冲信号的时间称为CPU的时钟周期(单位:s、ns、us)
​ CPU主频 = 1/CPU时钟周期
CPI
​ CPI指的是执行一条指令所需的时钟周期数(一般指平均值)

执行一条指令的耗时 = CPI * CPU时钟周期

image-20240717102659509

IPS
​ 每秒执行多少指令
​ IPS = 主频 / CPI

FLOPS
​ 每秒执行多少次浮点运算

系统整体性能指标

数据通路带宽
​ 数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)

吞吐量
​ 指系统在单位时间内处理请求的数量。
​ 它取决于信息能多快地输入内存,CPU能多快地取指令,数据能多快地从内存取出或存入,以及所得结果能多快地从内存送给一台外部设备。这些步骤中的每一步都关系到主存,因此,系统吞吐量主要取决于主存的存取周期。

响应时间
​ 指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间。
​ 通常包括CPU时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、I/o操作、操作系统开销等时间)。

小结
image-20240717103419369

2.1.1进位计数制

​ 基数:每个数码位所用到的不同符号的个数,r进制的基数就是r

二进制是最适合计算机进行存储和处理的计数方式
1:可使用两个稳定状态的物理器件表示两种状态
2:0,1正好对应逻辑值假、真,方便实现逻辑运算
3:可很方便地使用逻辑门电路实现算术运算

进制转化

其他进制转十进制

​ r进制表示的数在不同的位置上有不同的位权,只需要将r进制数的 各个位*位权 然后相加即可得到十进制数
image-20240717212254359

如:

image-20240717212439868

十进制转化成其他进制

​ 在十进制转化为其他进制的时候,分为整数部分和小数部分 分别转化

整数部分除基取余法,把整数部分的值不停的对 r 进行相除并取余,直到商为0,然后将余数从后往前写出来就是要转化的数

image-20240717214017823

小数部分乘基取整法,把小数部分的值不停的 乘 r并记录结果的整数部分,直到结果小数部分为0,然后将记录的整数部分顺序写出来就是要转化的小数部分(有一些小数是无法被精确转化的

image-20240717215331168

二进制、八进制、十六进制 之间的转化

​ 二进制每一个位能表示2种数字,每三个位能表示8种数字。八进制每一个位可以表示8个数字,那么在二进制转化为八进制时,只需要将三个位三个位组合在一起即可。在八进制转二进制时,将每个八进制位分成三个二进制位即可。十六进制转化类似

image-20240717213147205 image-20240717213358898
真值和机器数

真值:符合人类习惯的数字

机器数:数字实际存到机器里的形式,正负号需要被“数字化”

小结
image-20240717220032801

2.1.2BCD码

​ 为了方便的转化二进制和十进制,利用4个二进制位来存储一个十进制数值(4个二进制位可以表示 16种数,但是十进制只表示0-9十个,所以会有冗余)

8421码

​ 四个二进制位表示不同的权值,分别为 8、4、2、1

image-20240717220509045

​ 8421码的加法运算:
​ 如果是手算可以先化成10进制数相加,然后再将结果化成8421码
​ 如果是二进制相加,那么四位对应相加,然后判断结果范围是否在0000 -- 1001内,如果在的化,就是结果,如果不在需要再加一个6(冗余部分),得到最终结果

image-20240717220918623
余三码

在8421码的基础上,每个数都加一个3

image-20240717221337789

余三码 的四个二进制位并没有固定的权值,所以将余三码称为无权码。

2421码

2421码和8421码类似,只不过是第一个数的权值改成了2

image-20240717221551006

对2421码来说,0-4这五个数对应的第一个二进制位都是0,5-9对应的第一个二进制位是1

2421码和8421码一样,每个二进制位对应固定的权值,所以被称为有权码。

小结
image-20240717221803462

2.1.3无符号数

无符号整数:

​ 1:全部二进制位都是数值位,没有符号位,第 i 位的位权是2i-1
​ 2:n bit无符号整数表示范围0~2n-1,超出则溢出
​ 3:可以表示的最小的数 全0,可以表示的最大的数 全1

加法运算

​ 从最低位开始,按位相加,并往更高位进位

减法运算

​ 1:“被减数”不变,减数”全部位按位取反、末位+1,减法变加法
​ 2:从最低位开始,按位相加,并往更高位进位

如 99 - 9

​ 1:把9的二进制取反并且末尾加1

image-20240717222950388

​ 2:按位相加

image-20240717223200549

2.1.4有符号整数

原码

​ 第一个二进制位表示符号:0正1负;其余位数表示数值

​ 若机器字长n+1位,带符号整数的原码表示范围: - (2n-1) ≤ x ≤2n - 1

​ 真值0有两种形式:+0和-0 ,+0: 00000000 ; -0: 10000000

原码转化为补码
image-20240717225305312
补码的加法和减法

加法:从最低位开始,按位相加((符号位参与运算),并往更高位进位

减法:将 A - B 转化成 A + (-B)
B 转化为 (-B) 的方法:全部位取反,末位加1

移码

​ 将补码的符号位取反就可以得到移码

​ 移码只能用来表示整数,真值0只有一种表示方式

image-20240718104112762 image-20240718104137613

​ 原码和反码的合法表示范围完全相同,都有两种方法表示真值0
​ 补码和移码 的合法表示范围比原码多一个负数,只有一种方法表示真值0

image-20240718104235590

2.1.5定点小数

​ 定点 即小数点的位置固定,默认小数点在符号位的后面

image-20240718110917036

​ 定点小数的补码、反码的转换和 有符号整数转换方法相同

image-20240718111039045
加减运算

加法:从最低位开始,按位相加(符号位参与运算),并往更高位进位

减法:“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法从最低位开始,按位相 加,并往更高位进位

image-20240718111353406
数位扩展

当对有符号整数进行数位扩展时,需要在符号位的后面进行扩展:

image-20240718111628764

而对定点小数进行数位扩展时,需要在最后面进行数位扩展:

image-20240718111606648

2.2奇偶校验码

​ 奇校验码:整个校验码(有效信息位和校验位)中“1”"的个数为奇数。
​ 偶校验码:整个校验码(有效信息位和校验位)中“1"的个数为偶数。

​ 奇偶校验只能识别出奇数个位发生跳变的情况,当偶数个位发生跳变无法检测出

image-20240718114053535

2.2.1算数逻辑单元ALU

​ ALU是运算器中的核心部件,主要功能有:算数运算、逻辑运算、以及移位、求补等辅助功能

与或非逻辑运算

image-20240718205828510

image-20240718210055158

image-20240718210743206

与非或非 的运算规律:
image-20240718210448815

一位全加器 FA

​ 在实现加法运算时,需要输入两个加数和一个进位数。需要输出加法结果和进位结果。

​ 加法结果可以靠异或进行实现,有偶数个1的话结果就是0,有奇数个1的话结果就是1

​ 用 A和B别表示两个加数,C表示进位,S表示结果

​ Si = Ai ⊕ Bi ⊕ Ci-1

​ 进位结果:如果两个加数都是1那么进位结果是1,如果两个加数有一个是1并且进位数也是1那么进位结果是1,其他情况进位结果是0。

​ Ci = AiBi + (Ai ⊕ Bi)Ci+1

image-20240718212657144 简化版: image-20240718212745825

串行加法器

​ 使用一个 一位全加器,将两个加数逐位输入到加法器中,并且增加一个进位触发器保存进位结果。

​ 如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。

image-20240718212957280
串行进位的并行加法器

​ 将多个 一位全加器 串联起来,前一位的加法器得到的进位结果会当作下一个加法器的进位数进行运算。

​ 虽然可以将各个位同时输入到加法器中,但是后一位需要前一位运算完成后得到进位结果才可以进行运算,运算速度和单个的 一位加法器的运算速度和信息输送速度有很大关联。

image-20240718213457394

并行进位加法器

​ 对必须等待上一位的进位结果进行优化

​ 将每一位相加的表达式展开

image-20240718214118824

​ 最终可以展开到 C0,其中Ai,Bi的值已知,C0为0,也就是说其实一开始每个位的结果就可以确定,无需等待上一个位的进位结果。

​ 每一步都需要用到 A1B1和A1 ⊕B1的值
​ 第二步以及后面每步都需要用到 A2B2和A2 ⊕B2的值
​ 第三步以及后面每步都需要用到 A3B3和A3 ⊕B3的值
​ ...........................

​ 那么我们可以刚开始就把需要用到的这些信息计算出来,并送到需要用到这些数值的加法器中。

​ 优点:不需要等待前面的加法器得到进位结果再进行计算,降低时间
​ 缺点:需要增加硬件消耗,并且位数越多电路越复杂

为了防止电路无限复杂,一般每四位采用并行进位加法

image-20240718215456022

小结

image-20240718213745691

2.2.2 补码加减运算器

利用加减控制信号,控制是否取反和末尾加1

image-20240720115641026

2.2.3溢出判断

原码的加减运算:

image-20240721204348625

image-20240721204309363

补码的加减计算:

image-20240721204836029也有可能产生溢出

溢出判断

​ 上溢:指结果超出了最大的正数表示范围
​ 下溢:指结果超出了最小的负数表示范围

判断方法:

方法一:一位符号位
设A的符号为As,B的符号为Bs,运算结果的符号为Ss,则溢出逻辑表达式为

image-20240721210205124

​ V=0时表示没有溢出,V=1时表示有溢出

方法二:一位符号位的进位情况

​ 符号位的进位Cs,最高数值位的进位C1,当两个进位不同时就表示已经溢出
image-20240721211103364

方法三:双符号位

​ 将正负符号用两个位表示,00表示正,11表示负,当出现 01或者10的时候表示出现了溢出。01表示上溢,10表示下溢。

符号扩展

​ 将短数据扩展成长数据。

正数:

​ 原码、反码、补码都相同,只需要往符号位之后扩展0就行
负数:
​ 原码:要往符号位之后扩展0 image-20240721212807021

​ 反码:与原码相反,所以需要往符号位之后扩展1 image-20240721212822787

​ 补码:往符号位之后扩展1 image-20240721212848623

小结
image-20240721212947210

2.2.4加法器的标志位

OF :溢出标志,溢出时符号为1,没有溢出符号为0,OF符号只在有符号数的加减运 算中有意义。

SF :符号标志位,标志为1时是负数,标志为0时是正数,SF符号只在有符号数的 加减运算中有意义。

ZF :零标志,结果为0是标志位至1,不为0时至0。

CF :进位/借位标志,表示最高位的进位/借位情况,发生进位/借位时置1,否则置 0。CF符号只在有符号数的加减运算中有意义。当CF为1时表明无符号数的加减 法产生了溢出。

小结
image-20240721215035622

2.2.5定点数的移位运算

算数移位
将小数点保持位置不变,数值右移 n位表示原数 / rn;左移n位表示 ,原数 * rn

原码:
​ 原码右移:高位补0低位舍弃。若舍弃的位为0相当于÷r,若舍弃位为1会丢失精度
​ 原码左移:低位补0高位舍弃。若舍弃的位为0相当于*r,若舍弃位为1会出现严重误差

反码:

​ 正数的移位:左移右移都与原码相同
​ 负数的移位:在进行左移和右移的时候补的是 1 不是0

补码

​ 正数的移位:左移右移都与原码相同
​ 负数的移位:从右往左数,第一个1以及右边的部分遵循原码移位规律,第一个1往左 遵循反码的移位规则(右移补1,左移补0)

image-20240721221001995

逻辑移位

​ 无符号数的移位
​ 右移:高位补0,左移:低位补0

循环移位

image-20240721223953503
小结
image-20240721224037925

2.2.6原码的乘法运算

手算乘法与十进制乘法相同,用绝对值相乘,符号位单独用异或处理

机器处理原码乘法的过程:

​ X寄存器中存放被乘数
​ MQ寄存器中存放乘数,在计算过程中逐渐变成存储 积 的低位
​ ACC寄存器中存放 积 的高位,开始时ACC的值为0
例:1.1101 * 0.1011 在运算器中的计算过程:

首先取绝对值(符号位单独异或处理),将1.1101写为0.1101,然后把两个数一个放到X中当被乘数,一个放到MQ中当乘数。并且把ACC置为0。

观察MQ的最低位,如果为1,则ACC+X值如果为0,则ACC加0

image-20240722091043836

在ACC完成加法运算后,将ACC和MQ整体逻辑右移,高位补0(逻辑右移)

image-20240722091510463

然后重复判断MQ的最后一位是0还是1,对ACC进行加法运算,直到MQ中存放的是乘数的符号位

image-20240722091710890

​ 最终得到乘法结果是0.10001111,然后将符号位改为之前异或处理的符号位。得到结果就是1.000111。

2.2.7补码的乘法运算

补码与原码不同的是
1.不需要取绝对值,直接将符号带入运算器,需要用双符号位(MQ中不用)
2.在MQ中新增加了一个辅助位
2.比MQ多一次加法,即最后一位的符号位要参与运算
4.补码的右移是算数右移,如果是正数则补0,负数则补1
5.ACC中加什么要看辅助位和最低位的差值:辅助位-最低位=1,加[X];辅助位-最低 位=0 ,加0;辅助位-最低位 = -1 加 [-x]

例: -0.1101 * 0.1011

首先将乘数和被乘数分别放入MQ和X,ACC置0,其中X和ACC左边要加一个符号位,MQ右面要加一个辅助位。

image-20240722093732409

计算辅助位减去MQ的最低位的值,如果为1,则ACC+[x] ;如果为0,则ACC+0
如果为-1,则ACC+ [-x]

在ACC加法完成后,将ACC和MQ统一算数右移,符号位不变,符号位右边一位如果是正数则补0,如果是负数则补1

与原码乘法不同的是,MQ中符号位右移到最后一位时,仍然需要再进行一轮加法运算

image-20240722094645989

2.2.8原码的除法运算

手算除法与十进制除法相同,用绝对值相除,符号位单独用异或处理

机器处理原码除法的过程:

​ ACC寄存器中存放被除数和余数
​ X寄存器中存放 乘数
​ MQ寄存器中存放 商

恢复余数法

运算过程中采用绝对值进行运算,符号位采用异或 单独处理

开始时,将被除数放入ACC寄存器,除数放入X寄存器,MQ中置0,MQ中的最后一位表示当前 运算的 一位商。

image-20240722151032355

​ 每次运算器进行计算时,会默认 将MQ的最后一位置 1,然后会让ACC中数值减去X中数值,并将结果保存到ACC中,如果ACC中保存的结果是正数,那么MQ中置 1 是正确的,如果ACC中保存的结果是负数,那么MQ中置1就是错误的,那么计算机需要修改MQ中最后一位为0,并且再将ACC中加上除数。

​ 再确定好MQ最后一位值后,将ACC和MQ中的值同一逻辑左移一位

image-20240722151713365

​ 之后重复上面的内容,直到MQ中确定的位数与寄存器位数相同。此时MQ中就是商,ACC的数成 r -n 就可以得到余数。

image-20240722152044622

image-20240722152222926

​ 再之前恢复余数法中,当得到的余数 A小于0时,需要再加上被除数B,然后左移一位得到结果相当于 2A+2B。当在下一步中,需要再减去被除数得到下一步的余数,相当于2A+B,所以可以简化步骤,不需要恢复,直接将得到的小于 0的余数A左移然后加上被除数即可得到下一步余数。

image-20240722154555483

2.2.9补码除法运算

与原码的加减交替法类似,但是
1.补码的符号位需要参与运算
2.被除数、除数、余数采用双符号位

首先根据被除数和除数是否同号判断被除数需要加还是减除数。如果同号则被除数需要减除数,如果异号则被除数需要加除数,然后得到这一步的余数。根据余数和除数的符号,如果同号这一位商1然后余数需要左移一位并减去除数,如果异号这一位需要商0,余数需要左移一位闭关加上除数。以上过程一直重复n次,直到最后一位商,恒为1

image-20240723100224636

image-20240723100326729

2.2.10数据的存储和排列

大端存储:数据按照存储地址递增的顺序从数据的大端到小端进行存储,大端存储符合人 类的阅读习惯。

小端存储:数据按照存储地址递增的顺序从数据的小端到大端进行存储,人类阅读时需要 将数据倒过来读取,但是小端存储符合机器的阅读习惯

边界对齐

​ 采用边界不对齐的方式可以合理的利用存储空间,但是在访问某些数据的时候可能会进行两次访存。

​ 采用边界对齐的方式虽然会浪费一些空间,但是每次查询数据只需要一次方寸,利用空间换时间

image-20240723103052858

2.3.1浮点数的表示

​ 将数值采用阶码和尾数的部分表示,阶码用来表示科学计数法的指数部分,尾数用来表示数值部分。

​ 阶码反应数值的大小,尾数反应数值的精度

image-20240723110449208

阶码反映浮点数的表示范围及小数点的实际位置;
尾数M的数值部分的位数n反映浮点数的精度。

规格化浮点数:

​ 规定尾数的最高数值位必须是一个有效值。

左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。

右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。

规格化的特点
image-20240723111718902

注意,采用补码表示,如果符号位是负,那么数值位第一位必须是0

image-20240723111855055

​ 由于尾数部分采用补码表示,符号位为1那么数值位的第一位必须是0,所以进行左归,将数左移3位直到第一位是0,补码左移需要在右面添0,所以得到左归后的结果是
1.0100000,左归完成需要减少阶码,得到阶码为0.011。故规格化得到的答案应该为:
0.011 ; 1.0100000

溢出问题(已经不考了)

image-20240723112457588

正上溢和负上溢是因为表达的数值超出最大的表示范围。

正下溢和负下溢是因为表示的小数比能表示的最小的范围还小。

小结
image-20240723115724803

2.3.2IEEE 754

​ 在IEEE 754标准中,阶码是由移码表示的(这里的移码与之前的移码偏置值不同,之前是2n ,现在是 2n -1)正常计算 移码 = 真值 + 偏置值

​ 移码的 全0和全1(-128 和-127)不作为阶码使用

image-20240723210631138

image-20240723210722700

image-20240723210924794

image-20240723212057772

image-20240723212246708

2.3.3浮点数运算

浮点数运算的步骤:

​ 1.对阶:将阶数小的数向阶数大的数对齐(阶数小的右移)

​ 2.尾数加减:阶数统一之后就可以让尾数相加减了

​ 3.规格化:保证尾数的第一个数值位是有效位

​ 4.舍入:如果相加减之后尾数长度过长,需要进行舍入

​ 5.溢出判断:判断阶码是否溢出

舍入策略:

​ “0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。

​ 恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。

image-20240724091940834
小结
image-20240724092611008

3.1.1存储系统

存储器的分类:

1.按照在计算机中的层次(作用)进行分类:主存、辅存、cache
主存:CPU可以直接访问,容量较小、访问速度较快、单位价格较高。
辅存:CPU不可以直接访问、容量极大、存取速度较慢、单位成本低。
cache:CPU可以直接访问,容量小,价格高、位于主存和CPU之间。

2.按照存储介质进行分类:磁表面存储器、半导体存储器、光存储器。

3.按照存取方式进行分类:随机存储器RAM、顺序存储器、直接存取存储器、相连存储器

​ 随机存储器:读写任何一个存储单元的时间需要的时间都相同,与存储单元所在的 位置无关。
​ 顺序存储器:读写一个存储单元所需要的时间取决于存储单元所在的物理位置。
​ 直接存储器:既有随机存储的特性,又有直接存储的特性。先按照随机存储找到区 域,然后按照顺序方式存取。
​ 相联存储器:按照存储内容进行访问的存储器。比如快表

4.按照信息的可更改性进行分类:读写存储器、只读存储器
读写存储器:可存可读,主要用作主存、cache(SRAM)和内存条(DRAM)
只读存储器:只能读不能存,常用来制作硬盘

5.按照信息的可保存性:易失性存储器、非易失性存储器。
易失性存储器:断电后存储信息就消失的存储器,比如主存、Cache
非易失性存储器:断电后存储信息依然保存,如磁盘、光盘

存储器的性能指标

​ 主要的性能指标有三个:存储容量、单位成本、存储速度。设计存储器的目标是大容量、低成本、高速度。

存储容量:即存储器中可存储的信息比特数。存储容量=存储字数*字长(如1M *8位)
单位成本:每位价格=总价格/总容量
存取速度:数据传输率=数据宽度/存储周期
​ 存取速度又分为存取时间、存取周期、主存带宽。
​ 存取时间:指从开始存储到结束存储的时间,分为读取时间和写入时间
​ 存取周期:指存储器进行一次完整的读写操作所需要的时间、即两次访问存储器操 作的时间间隔,一般大于存取时间(因为包括恢复时间)
​ 主存带宽:表示每秒从主存进出信息的最大数量

多层存储器结构

存储器结构由上到下价格逐渐降低, 速度越来越慢, 容量越来越大, CPU访问频度越来越低

image-20230129150652567

主存 - 辅存:实现了虚拟存储系统,解决了主存容量不够的问题。

Cache - 主存:解决了CPU和主存速度不匹配的问题。

小结
image-20240725090732838

3.2.1主存储器

image-20240725094611673

3.2.2SRAM 和 DRAM

RAM指的是随机访问存储器,DRAM即动态RAM,SRAM即静态RAM

SRAM

​ SRAM的存储元是 双稳态触发器,信息被读出后不需要再生(非破坏性读出)SRAM的存取速度快、但是集成度低、功耗大。一般用来制造Cache。

DRAM

​ DRAM是利用栅极电容上的电荷来存储信息的,信息读取后需要再生(破坏性读出)读取速度较慢、集成度高,容量大、功耗低。一般用来制造主存。

​ 由于DRAM以电荷来储存信息,但是电荷会自动消失,所以DRAM必须每隔一段时间进行刷新,这个刷新时间称作刷新周期。
​ 常用的刷新方式:集中刷新、分散刷新、异步刷新
集中刷新
​ 在一个刷新周期内部、利用一段固定的时间一词对存储器进行再生、这段时间停止对存储器的读写操作、又称为 “ 死时间 ” 或者访存 “ 死区 ”。
​ 集中刷新的优点:读写操作时不受刷新工作的影响,所以存取速度较高。
​ 集中刷新的缺点:在 集中刷新时间(“死区”)时,不能访问存储器。

分散刷新
​ 把对行的刷新分散到各个工作周期中。把存取周期两个部分,前半部分可以正常读写时、后半部分用于刷新某一行、下一周期内后半部分用于刷新下一行。
​ 优点:没有死区
​ 缺点:增加了系统的存取周期、降低了整机的速度。

异步刷新
​ 将刷新周期除以行数、得到两次刷新操作时间的间隔t,每隔t时间进行一次刷新。(好像这样就不用关心周期了)
​ 异步刷新既可以缩短死时间、又可以利用刷新间隔最大为2ms的特点。可以避免CPU等待时间过长、又可以减少刷新次数,从整体上提高整机的工作效率。

刷新需要注意的问题:
1.刷新对CPU是透明的,不依赖于外部的访问
2.刷新的单位是行、因此刷新紧紧需要行地址
3.刷新操作仅仅给栅极电容补充电荷、不需要信息输出。刷新时不需要选片,所有芯片同时刷新

SRAM和DRAM的区别

DRAM恢复时间较长,SRAM恢复时间较短

image-20240725101421474

3.2.3 只读存储器ROM

只读存储器

​ ROM中一旦有了信息就不能轻易改变、即使掉电也不会丢失,他在计算机系统中是只供读出的存储器
​ ROM优点
​ 1.结构简单、位密度比可读写存储器高
​ 2.具有非易失性、可靠性高

ROM的分类 :
MROM:由厂家 在生产过程中写入信息,之后不可重写,只能读出。特点:可靠性高,灵活性差、生产周期长、只适合批量定制。

​ PROM:用户可以写入一次信息,写入完成后不可更改。

​ EPROM:允许用户写入信息,并允许多次擦除,可以多次重写。分为UVEPROM(紫外线擦除,必须全部擦除)和 EEPROM(电擦除,可以选择擦除)

​ 闪存:可以进行多次快速的擦除重写

​ 固态硬盘:可以进行多次快速的擦除重写

主板上有块BIOS芯片就是ROM,它存储了自举装入程序,负责引导 装入 操作系统

小结
image-20240730103219021

3.2.4多模块存储器

常见的多模块存储器有两种:多体并行存储器、单体多字存储器

多体并行存储器

每个模块都有相同的容量和存取速度。各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。

按照编址的不同可以分为高位交叉编址和低位交叉编址

高位交叉编址:理论上多个存储体可以被并行访问,但是由于通常会连续访向,因此实际 效果相当于单纯的扩容。

image-20240731091634688

image-20240731093918283

低位交叉编址:依次读取不同的存储体,在上一个存储体恢复时不会影响下一个存储体的 读取。

image-20240731093738248

image-20240731093846478

​ 存取周期为T,存取时间为r,为了使访问不间断,应保证模块数m≥T/r,当大于T/r时,会有一些存储体在恢复完成后有闲置时间,故最理想的模块数应该为m==T/r。

单体多字存储器

将多个模块合并为一个模块,并且扩展数据总线的宽度,使得每次可以并行的读取多个字。

image-20240731095739392
小结

image-20240731095819510

3.3.1主存和CPU的链接

链接原理:
1.主存通过数据总线地址总线控制总线和CPU相连
2.地址总线的位数决定了可寻址的最大空间。

image-20230129163156828

​ MDR存储的数据通过数据总线与主存进行交换
​ MAR存储的地址信息通过地址总线传送到主存
​ 通过控制总线对主存进行读写操作

存储器的输入输出信号:

​ 主要线路有地址总线、数据总线、片选线、读/写控制线。

image-20240731102249308
主存容量扩展

​ 单个存储芯片的容量有限,在字数或者字长方面与实际存储器的要求由差距,需要在字和位两个方面进行扩充。

​ 通常采用位扩展法、字扩展法、字位同时扩展法来进行容量扩充。

image-20240731102505069

位扩展法
CPU的数据线数与存储芯片的位数不一定相等,可以通过增加存储芯片的数量来增加CPU数据线与存储芯片的链接数,使得内存增大。

image-20240731102558971

字扩展法
字扩展法是增加存储器中 字的数量。字扩展将芯片的 地址线、数据线、读写控制线相应并联,而由片选信号来区分各个芯片的地址范围。

image-20240731103438222

字位同时扩展法
既增加存储字的数量,又增加存储字长

程序访问的局部性原理

时间局部性:最近被访问的信息很可能还要被访问
空间局限性:最近被访问的信息的临近地址的信息可能被访问

小结

image-20240731104352859

3.4.1磁盘存储器

​ 计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器,如:磁盘存储器、磁带存储器和磁鼓存储器。

​ 优点:1.存储容量大,位价格低;
​ 2.记录介质可以重复使用;
​ 3.记录信息可以长期保存而不丢失,甚至可以脱机存档;
​ 4.非破坏性读出,读出时不需要再生。

​ 缺点:1.存取速度慢;
​ 2.机械结构复杂;
​ 3.对工作环境要求较高;

磁盘设备的组成

1.存储区域

​ 一块硬盘含有若干个记录面,每个记录面划分为若干条磁道,而每条磁道又划分为若干个扇区(也叫做块),扇区是磁盘读写的最小单位,也就是说磁盘按块存取。

2.硬盘存储器

​ 硬盘存储器由 磁盘驱动器、磁盘控制器、和盘片组成。

​ 磁盘驱动器:核心部件是磁头和盘片,负责控制磁头的移动和盘面的转动。
​ 磁盘控制器:磁盘和主机之间的交互接口

磁盘的性能指标

1.容量:一个磁盘能存储的字节总数。格式化的磁盘容量要比非格式化的磁盘容量小。

2.记录密度:指盘片单位面积记录的二进制信息量。分为道密度、位密度、面密度。

​ 道密度:沿着半径方向单位长度的磁道数。
​ 位密度:单位长度的磁道上记录的二进制位数。
​ 面密度:道密度与位密度乘积。

3.平均存取时间

image-20240731111646465

4.数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。

image-20240731112738691

磁盘地址
image-20240731112858237
磁盘工作过程

​ 硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。

​ 硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻既读又写,也不可能在同一时刻读两组数据或写两组数据。

磁盘阵列

看书

小结
image-20240731113415018

3.4.2固态硬盘

image-20240731114520279

3.5.1 Cache

​ Cache位于存储器结构的顶层,通常由SRAM组成。

​ Cache中的空间和内存中一样,被分成一个一个的块,Cache与内存的数据交换以块为单位

Cache性能分析

命中率:指CPU想要访问的信息已经存在在Cache中的比率。

平均访问时间:

如果先查找Cache,找不到后再去内存查找:
​ 时间 = 命中率 * 访问Cache时间 + (1 - 命中率) * (访问Cache时间 + 访问内存时间)

​ 如果同时查找,在Cache中找到后停止在内存中查找:
​ 时间 = 命中率 * 访问Cache时间 + (1 - 命中率 )* 访问内存时间

image-20240801103814940
小结
image-20240801104302930

3.5.2Cache与主存的映射

全相联映射:主存内容可以存放在Cache的任意位置

​ 在CPU访问Cache时,需要挨个查看Cache中存放的标记与要访问的内存块 地址是否相同,如果相同且有效位为1则可以访问Cache,否则访问内存。

​ 优点:Cache利用率高,命中率高。
​ 缺点:查找速度慢

直接映射:每个主存块只能放到一个特定的位置: Cache块号=主存块号% Cache总块数

​ 缺点:即使有空闲块,但是无法让其他块填入。空间利用不充分,命中率低。
​ 优点:存放的块号是模 块数得到的,存放到同一Cache中的内存地址的后几位 必定都是相同的,可以不用存储;对于每次访问只需要对比一次标记就 可以。

​ 在CPU访问Cache时,先取需要访问地址的后几位,确定会存放在Cache中的 哪个块,然后根据块号比对此时存放的标记位和要访问的地址的前面几位是否 相同。如果相同且有效位为1,则访问Cache。否则访问内存。

组相联映射:Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置。
组号=主存块号%分组数

​ 存放在同一组的不同内存数据的地址的最后几位一定是相同的,所以不需要 存放后面几位。

​ CPU访问Cache时,先取要访问的内存地址的后几位,确定出存放的Cache 的组号,然后在这个组内按个寻找标记位与要访问的地址的前几位是否相 同,如果相同且有效位为1那么访问Cache,否则访问内存。

​ 优点:上面两种方法的折中。

​ 在存放数据时需要在Cache中加入 一个有效位和一个标记位。标记位表示此Cache块存放的主存块的 块号是什么,初始时全为0。有效位表示是否记录了主存内容,有效位为1表示标记有效,标记为为0表示标记无效。

小结
image-20240801110812929

3.5.3Cache的替换算法

1.采用全相联映射

​ 只有在Cache块全部装满才会进行替换

2.采用直接映射

​ 如果对应的位置已经有数据,直接进行替换

3.采用组相联映射

​ 只有分组满了才会进行替换,在分组内选择替换那一块

全相联映射的替换算法

随机算法:如果Cache已经满了,随机选择一块进行替换

随机算法并没有考虑局部性原则,Cache命中率很低,实际效果很不稳定。

image-20240801151740620

先进先出算法FIFO:如果Cache已满,替换最先进入Cache的块。

先进先出算法实现简单,但是仍然没有考虑局部性原理,最先被调入Cache的也可能被频繁访问。

​ 抖动现象:刚被换出的块紧接着又被访问,导致发生频繁的换入换出现象。

image-20240801152026453

近期最少使用算法LRU:为每个Cache设置一个计数器,用于记录没每个Cache多久没有 被访问,在进行替换时替换出最久没被访问的一个。

​ 当访问一个Cache块时,将此Cache计数器置零,将比这个Cache计数器小的Cache计 数器加一(最大的仍然会是最大的,无需多余操作)

​ 当有空闲块时,也需要将没有命中的块计数器加一。当没有空闲块时,需要将计数器 最大的块替换,新加入的块的计数器置零,其余块计数器加一。

​ LRU考虑了局部性原理,实际运行的效果优秀,Cache的命中率高。
​ 如果被频繁访问的主存块的数量要大于Cache块的数量那么会产生抖动现象。

image-20240801153718230

最近不经常使用算法LFU:为每个Cache设置一个计数器,用于记录每个Cache被访问过 几次,在Cache满时替换计数器最小的Cache块。

image-20240801174548245

​ 曾经经常使用的主存块未来不一定可以用到,没有很好的遵循局部性原理,实际运行效果不如LRU。

小结
image-20240801174744047

3.5.4Cache写策略

写命中时

即当CPU要写数据的地址在Cache中可以找到。

写回法:只修改Cache中的内容,当Cache块被换出时才写入主存。需要对每个Cache增加 一个脏位,用来表示有没有被修改过。

全写法:同时将需要修改的数据写入Cache中和内存中。一般采用写缓冲写入数据,如果 写入数据很频繁可能会因为写缓冲饱和发生而阻塞。

写不命中时

即要写入数据的地址在Cache中找不到时。

写分配法:先将内存中的数据调入Cache中,然后对Cache中数据进行写入/修改。通常搭 配写回法使用。

非写分配法:直接写入内存,不用调入Cache,通常搭配全写法使用。

小结
image-20240801225209900

3.6.1页式存储器

​ 页式存储器就是将一个进程在逻辑上分为若干个大小相同的页面,页面大小与块大小相同。每个页面可以离散的放入不同的主存块中。

​ 为了实现由逻辑地址到物理地址的转换,操作系统需要为每个进程建立一个页表。

image-20240802092944923

3.6.2虚拟存储器

在进程运行时,无需将所有代码调入主存,只需要将需要运行的代码调入主存。

看操作系统。

4.1.1指令

​ 指令:是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令集合称为这台计算机的指令系统或者指令集。(一台计算机只可以执行自己的指令系统的指令,不能执行其他系统的指令)

指令格式

​ 一条指令通常包括操作码和地址码两个部分。

​ 根据地址码的数目,可以将指令分为 零地址指令、一地址指令、二地址指令.......

零地址指令:只需要给出操作码,不需要给出地址码

常见零地址指令:1.不需要操作数的指令:如空操作、停机、关中断等操作
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算机结果压回栈顶

一地址指令:需要给出操作码和一个地址码的指令

常见一地址指令:1:只需要一个操作数的指令:如取反、加1、取补等等。
指令含义:OP(A1) → A1 ;
需要进行三次访存:取指令、取数据、将结果保存

​ 2:需要两个操作数,但是一个操作数隐含在寄存器中(如ACC)
​ 指令含义:(ACC)OP(A1)→ACC
​ 需要完成两次访存:取指令、取数据

二地址指令:需要给出操作码和两个地址的指令
常见二地址指令:需要两个操作数的算数运算、逻辑运算等等。
指令含义 (A1) OP (A2) → A1
需要完成四次访存:取指令、取数据1、取数据2、存结果

三地址指令:需要给出操作码和三个地址的指令

常见三地址指令:需要两个操作数的逻辑运算、算数运算等、并且把结果存放到指定地址
指令含义:(A1) OP (A2) → A3
需要完成四次访存:取指令、取数据1、取数据2、存结果

四地址指令:需要给出操作码和四个地址码的指令
常见四地址指令:需要两个操作数的逻辑运算、算数运算等、把结果存放到指定地址并且 指向下一条指令。

​ 正常情况下取指令之后PC加1,但是四地址指令可以指向任意指令位置
​ 指令含义:(A1)OP(A2) →A3 , A4=要执行的下一条指令。

按照指令长度对指令分类
image-20240802111538824
按照操作码长度对指令分类
image-20240802111644171
按照操作类型对指令分类
image-20240802111839959
小结
image-20240802112010905

4.1.2拓展操作码

对 定长的指令字结构和可变长的操作码进行扩展

如果指令只有十六位,并且每个地址占4位,那么三地址指令需要12位表示地址,只剩4位表示操作码。故指令由 0000 到 1111来表示,这里将1111保留不做指令,当出现1111时,表明这是一条二地址指令,将五到八位作为指令码,一地址和零地址指令以此类推。

image-20240802212757465

4.2.1指令寻址

​ 在执行完成一条指令之后,如何找到下一条指令。
​ 设置一个程序计数器PC,PC指向的地址就是下一条指令的位置

​ 如果指令是顺序执行的,只需要将PC+1或者+指令长度即可

​ 如果指令是跳跃执行的,将PC指指向跳跃指令指向的指令

image-20240802214354472

4.2.1数据寻址

数据寻址:确定一条指令的地址码指向的真实地址

为了确定采取哪一种数据寻址方式,在指令中加入寻址特征位

image-20240802215456451

直接寻址:指令中的形式地址就是物理地址

​ 优点:直接寻址的方式简单,不需要专门计算操作数的地址。只需要访存两次
​ 缺点:当操作数的地址改变时,指令失效

间接寻址:指令的地址指向的是 存放数据地址的地址

​ 需要访存三次,需要先取指令,然后访问存放数据地址的地址,然后访问数据 地址

​ 优点:扩大了寻址范围(指令中可能用16位表示数据地址的地址,表示的地址 可能用32位表示数据地址)便于编制程序(方便子程序的返回)
​ 缺点:需要访存三次,需要先取指令,然后访问存放数据地址的地址,然后访 问数据地址

寄存器寻址:指令中给出的地址并非是内存地址,而是寄存器编号,数据存放在寄存器中

​ 优点:取完指令后无需访问内存,之访问寄存器;寄存器数量少,可以用更 少的位表示寄存器编号,减少指令长度增加执行速度。

​ 缺点:寄存器数量优先且造价较贵。

寄存器间接寻址:指令中给出的寄存器编号,但寄存器中实际存储的是数据的地址

​ 只需要访问两次内存:取指令、取数据。比一般的间接寻址要快。

隐含寻址:不是明显的给出操作数的地址,而是指令中隐含着操作数的地址(如两个数相 加只给出一个数的地址,另一个数隐含在ACC寄存器中)

​ 优点:有利于缩短指令字长
​ 缺点:需要增加存储操作数或者隐含地址的硬件

立即寻址:指令的地址码部分 就是操作数本身,一般采用补码形式存储(#后面跟数一般 就表示立即数)

​ 优点:只需要取指令访问一次内存,指令执行时间最短
​ 缺点:地址码的位数限制立即数的范围

基址寻址:指令存放的地址码是地址偏移量,将基址寄存器中的地址加上地址码内容可以 得到有效地址。(基址寄存器存放的是程序的起始地址,只可以由操作系统或 管理程序确定,无法由用户确定)

image-20240803093530090

​ 优点:可以扩大寻址范围

变址寻址:指令存放的地址码视为基地址,需要增加一个变址寄存器IX存放偏移量,数据 地址=基地址 + 变址寄存器中的偏移量。

​ 编址寄存器中的值是面向用户的,用户可以容易的修改寄存器内容,适合编制 循环程序。

复合寻址:将基址寻址和变址寻址结合起来,即使用基址寄存器,也使用变址寄存器。

相对寻址:将程序计数器PC的内容加上指令格式中地址码表示的偏移量即是有效地址。 (PC指向的是下一条指令的地址,偏移量可正可负)

​ 优点:方便代码在程序内部浮动。

堆栈寻址:操作数被存放到堆栈之中,隐含使用堆栈指针(SP)作为操作数地址

​ 可以采用多个寄存器表示堆栈的不同的层(成本较高),也可以采用内存划分 一部分存储做逻辑堆栈(成本较低)

​ 在进行运算时,弹出堆栈最上方两个元素,运算完成后再将结果压入栈顶

image-20240803101324464

4.3.1高级语言与机器级代码的对应关系

内存表示用 [ ] 表示内存地址,前面要加上读取数据的大小

image-20240803102520429

常用的寄存器:

image-20240803102827564

对于通用寄存器可以进行分开使用:如AX表示EAX的后16位。AL可以表示后八位,AH可以表示后面 9-16位

image-20240803103109295 image-20240803103038249

image-20240803103253021

4.3.2常见的 X86汇编指令

​ 数据来源包括:1.寄存器、2.内存、3.指令中的常数

​ X86不允许两个操作数同时来自主存

​ d表示目的操作数、s表示源操作数,最终处理完成的结果要放到目的操作数的位置,故d表示的目的操作数只可能来自于寄存器或主存,不会是指令 常数。

算数运算

image-20240803104405065

逻辑运算

image-20240803104742551

其他指令

image-20240803104831594

4.3.3AT&T格式和Intel格式

image-20240803112208967

4.3.4选择语句的机器级表示

无条件转移指令

直接跳转到相应地址

​ 1.可以直接给出跳转地址 image-20240803113022941
​ 2.跳转地址可以来自寄存器 image-20240803113046909
​ 3.跳转地址可以来自内存 image-20240803113129172
​ 4.采用标号标记跳转位置 image-20240803113255323

条件转移指令

需要满足一定的条件然后跳转到相应地址

image-20240803113557713

例:将C语言翻译为汇编指令

image-20240803113749631

4.3.5循环语句的机器级表示

实现循环语句的组成部分:

​ 1.循环前的初始化
​ 2.是否直接跳过循环
​ 3.循环主体
​ 4.是否继续循环

image-20240804095605184

也可以使用loop指令来实现循环操作:

image-20240804100037201

4.3.6 函数调用的机器级表示

call和ret指令

​ 在进行函数调用时,会把函数的栈帧压入堆栈,当函数调用完成后,将函数的栈帧从栈中删除。每个函数的栈帧主要包括:定义的局部变量、函数调用相关信息。

​ 在汇编语言中使用 call指令实现函数调用(call 函数名)
​ 使用 ret指令作为函数返回( ret )

​ call指令作用:1.将IP旧值压栈保存(保存在函数栈帧顶部)
​ 2.设置IP新值,无条件转移至被调用函数的第一条指令

​ ret指令作用:从函数的栈帧顶部找到IP旧值,将其出栈并恢复IP寄存器

如何访问栈帧数据

方法一:使用Push指令和Pop指令
push指令将esp减4(指向下一地址)然后将数据压入
Pop指令将栈顶元素弹出并将esp加4(指回上一条指令)

方法二:使用Mov指令,将数据直接指向相应地址

如何切换栈帧

调用者执行call 指令

被调用者保存上一层函数的栈帧,设置当前函数的栈帧

image-20240804111420745

在调用结束时,恢复上一层函数的栈帧

image-20240804111507809

最后执行ret指令,从栈顶找到返回值,出栈并恢复IP值

栈帧保存内容

1.每一个栈帧的最顶部需要保存上一个函数栈帧的基地址
2.栈帧的 最底部 会保存返回地址(IP地址)
3.栈帧底部会保存函数的局部变量(越早定义的变量越靠近栈顶
4.栈帧顶部会保存函数的调用参数(越先出现的参数越靠近栈顶

image-20240804112419626
小结
image-20240804113011466

4.4 CISC和RISC

​ CISC和RISC是指令设计的两种思路,CISC设计思路:一条指令可以完成一个复杂的基本功能(如X86架构,主要用于电脑);RISC设计思路:一条指令用于完成一个基本动作,需要多条指令组合完成一个复杂的基本功能(如ARM架构,主要用于手机)。

image-20240804113741386

5.1CPU功能和基本结构

CPU功能:

1.指令控制:完成取指令、分析指令、和执行指令的操作,即程序的顺序控制

2.操作控制:一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由 内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控 制这些部件按指令的要求进行动作。

3.时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有 的控制信号。

4.数据加工:对数据进行算数和逻辑运算。

5.中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。

image-20240805094029210
运算器的基本结构

​ 1.算数逻辑单元 ALU:主要进行算数/逻辑运算。

​ 2.通用寄存器:用于存放各种操作数和各种地址信息,SP寄存器是堆栈指针,用于展示 栈顶地址。

​ 3.暂存寄存器:用于暂时存储从主存中传入的数据

​ 4.累加寄存器Acc:用于暂时存放ALU的运算结果,用于实现加法运算

​ 5.程序状态字寄存器Psw:保留运算结果的各种状态信息,如:溢出标志OP、符号标志 SF、零标志ZF、进位标志CF等等。PSW中的这些位参与并决 定微操作的形成。
​ 6.移位器:对运算结果进行移位运算

​ 7.计数器:控制乘除运算的操作步数

控制器的基本结构

​ 1.程序计数器PC:用于指出下一条指令在主存中的存放位置,PC有自增功能。

​ 2.指令寄存器IR:用于保存当前正在执行的指令。

​ 3.指令译码器:对指令的操作码部分进行移码,像控制器提供特定的操作信号。

​ 4.微操作信号发生器:根据IR的内容、PSW内容以及时序信号,产生控制整个计算机系 统所需要的各种控制信号,其结构有组合逻辑型和存储逻辑型两种

​ 5.时序系统:用于产生时序信号(控制指令执行的先后顺序),由统一时钟分频得到

​ 6.存储器地址寄存器MAR:用于存放要访问的主存单元的地址。

​ 7.存储器数据寄存器MDR:用于存放要存入主存的信息或者从主存读出的信息

image-20240805100614193

其中黄色框的寄存器代表用户可见,灰色框的寄存器代表用户不可见

5.2指令的执行过程

​ 指令周期:指CPU从主存中每取出并执行一条指令所需的全部时间,一个指令周期最 少由取指周期和执行周期组成。

​ 完成某一个子工作需要的时间就是一个机器周期,通常一个指令周期用若干个机器周期(CPU周期)来表示。一个机器周期又包含若干个时钟周期,时钟周期是CPU操作的最基本单位。

​ 如果完成所有子工作所需机器周期都是相同的,那么这种CPU叫做定长机器周期CPU如果不同子工作完成所需要的机器周期是不同的,这种CPU称为不定长的机器周期CPU

完整的指令周期:

image-20240806102934908

​ 四个工作周期都可能进行访存操作:取指周期为了取指令、间址周期为了取地址、执行周期为了取操作数、中断周期为了保存程序断点。

取指周期

1.当前指令地址送至存储器地址寄存器,记做:(PC)→MAR

2.CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1→R

3.将MAR所指主存中的内容经数据总线送入MDR,记做: M(MAR) → MDR

4.将MDR中的内容(此时是指令)送入IR,记做:(MDR) → IR

5.CU发出控制信号,形成下一条指令地址,记做:(PC)+1 → PC

image-20240806103804626

间址周期

1:将指令的地址码送入MAR,记做:Ad(IR)→MAR 或 Ad(MDR) → MAR

2:CU发出控制信号,启动主存做读操作,记做:1→R

3:将MAR所指主存中的内容经数据总线送入MDR,此时MDR中就是需要的操作数。记做 M(MAR) → MDR。可以在使用时直接从MDR中取数据,也可以将MDR数据拼接到IR中 的指令地址中。

image-20240806104234115

执行周期

按照IR的指令操作码和 操作数通过ALU操作产生执行结果。

中断周期

暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。

1:CU控制将SP减1(栈顶指针移动一位),修改后的地址送入MAR记做:
(SP) - 1→SP , (SP)→ MAR

2:CU发出控制信号,启动主存做写操作,记做:1→ w

3:将断点 (PC内容) 送入MDR,记做:(PC) → MDR

4:CU控制将中断服务程序的地址送入PC

image-20240806105158321
指令执行方案

方案一:单指令周期

​ 对所有指令都选用相同的执行时间来完成,执行时间取决于最长的指令执行时间,指令之间串行执行

​ 缺点:对于较短执行时间的指令也需要 使用较高的周期来完成,会减低整体运行速度

方案二:多指令周期

​ 对不同的指令按照不同的执行周期来完成,各个指令之间串行执行

​ 缺点:需要更加复杂的硬件设计

方案三:流水线方案

​ 在指令执行的不同阶段需要用到的硬件是不同的,在一个指令完成一个阶段后让其他指令执行,尽可能让多个指令同时运行但是处于不同的执行步骤之中。指令之间并行执行

小结
image-20240806110943516

5.3CPU的数据通路

数据通路指的是数据在功能部件之间传输的路径

单总线结构

组件之间的信息交换依靠一根总线完成,同一时间只有两个组件之间可以进行信息交换

image-20240808112525801

​ 例: image-20240808113415425

image-20240808113539733
专用通路结构
image-20240808225046157

5.4.1硬布线控制器

​ 每发出一个微命令 就可以完成一个微操作,微命令和微操作是对应的

​ 比如:微命令 :PCout 、MARin 有效,可以完成微操作:(PC)→ MAR

​ 根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些“微命令”

image-20240809140948210
硬布线控制器的设计

步骤:

​ 1.分析每个阶段的微操作序列(那些指令在哪个阶段执行、在什么条件下执行)

​ 2.选择CPU的控制方式(采用定长机器周期还是不定长机器周期,每个机器周期安排几 个节拍)

​ 3.安排微操作时序(怎么在规定节拍内完成所有微操作)

​ 4.电路设计(确定每个微操作命令的逻辑表达式,并用电路实现)

分析每个阶段的微操作序列:
image-20240809142025634
选择CPU的控制方式

假设采用定长机器周期并且每个机器周期安排三个节拍

安排微操作时序

将一个阶段的所有操作在安排在三个节拍完成

原则:

​ 1.微操作的先后顺序不得随意更改
​ 2.被控对象不同的微操作尽量在一个节拍内完成
​ 3.占用时间较短的微操作尽量在一个节拍内完成,并允许有先后顺序

取指周期:

image-20240809142734655

间址周期:

image-20240809142926665

执行周期:

image-20240809143153692
电路设计

​ 列出操作时间表
​ 写出微操作命令的最简表达式
​ 画出逻辑图

5.4.2微程序控制器

微程序控制器是在CPU出厂之前将所有指令的微程序存入 控制器存储器中

微程序控制器的基本结构

image-20240809152001709
小结
image-20240809152516626

5.4.3微指令的设计

微指令的格式

1.水平型微指令:一条微指令可以定义多个可并行的微指令

优点:微程序较短,执行速度快
缺点:微指令长,编写微程序较麻烦

image-20240809153253419

2.垂直型微指令:一条微指令只可以定义一个微命令,由微操作码字段规定具体功能

优点:微指令短,简单,便于编写微程序
缺点:微程序长,执行速度慢,工作效率低

image-20240809153409879

3.混合型微指令

在垂直型的基础上增加一些不太复杂的并行操作。

微指令较短,仍便于编写;微程序也不长,执行速度加快。

微指令的编码方式

1.直接编码:在微指令的操作控制字段中,每一位代表一个微操作命令

image-20240809154451066

​ 优点:简单、直接、执行速度过快、操作并行性好
​ 缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,需要存储空间大

2.字段直接编码:将微程序的控制字段分成若干个段,每段经过译码后发出控制信号

微命令字段分段的原则:

​ 1.互斥性微命令分在同一段内,相容性微命令分在不同段内。
​ 2.每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
​ 3.一般每个小段还要留出一个状态,表示本字段不发出任何微命令。例如:当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。

image-20240810091717163

优点:可以缩短指令字长
缺点:需要通过译码电路后再发出微指令,速度较慢

image-20240810091757649

3.字段间接编码:一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。

image-20240810092044965

优点:可以进一步缩短微指令字长
缺点:削弱了微指令并行控制能力,通常作为字段直接编码方式的一种辅助手段。

微指令地址的形成方式
image-20240810095326906 image-20240810095547439
小结
image-20240810095714914

5.4.4微程序控制单元的设计

设计步骤:

​ 1.分析每个阶段的微操作序列
​ 2.写出对应机器指令的微操作命令以及节拍安排
​ 3.确定微指令格式
​ 4.编写微指令码点

image-20240810102504893

image-2024081010	3401700

image-20240810103850531 image-20240810103924118
微程序分类:

静态微程序:微程序无需改变,采用ROM

动态微程序:通过改变微指令和微程序改变机器指令,采用EPROM

硬布线控制器和微程序控制器的区别
image-20240810104204987
小结
image-20240810114520561

5.6.1指令流水线

顺序执行方式

image-20240810115412421

一个指令必须等待前一个指令执行完成后才会执行

优点:设计简单,硬件代价小
缺点:执行指令速度较慢,同一时刻处理机只有一条指令在执行,各个部件的利用率很低

流水线方式

一次重叠执行方式

指令的第一个阶段与上一条指令的最后一个阶段有重叠
image-20240810120033610

优点:程序的执行时间缩短了,各个部件利用率明显提高
缺点:硬件开销增加,控制过程更加复杂

两次重叠执行方式

一条指令的前两个阶段与上一条指令的后两个阶段有重叠

image-20240810120236912

指令执行时间进一步缩短

流水线的性能指标

​ 1.吞吐率(TP):指单位时间内流水线完成的任务数量

​ TP = n(任务数量) / T(完成时间)

​ 2.加速比(S):完成同样的任务不使用流水线和使用流水线所花费的时间之比

​ S= T0 / T

​ 3.效率:流水线设备的利用率

image-20240810122711593 image-20240812135949936

5.6.2指令流水线的影响因素和分类

五段式架构的指令的执行周期:

IF:取值阶段
ID:译码阶段
EX:执行阶段
M:访存阶段
WB:写入阶段

image-20240812140305407

​ 为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为100ns。

​ 流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。

影响流水线的因素

1.结构相关(资源冲突)

​ 由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。

​ 解决方法:
​ 1.后一个相关指令暂停一周
​ 2.资源重复配置(将指令和数据放入不同的寄存器)

image-20240812141301376

2.数据相关(数据冲突)

​ 数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。

​ 解决方法:
​ 1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”(空指令)两种方法。

​ 2.数据旁路技术:将上一步ALU中得到的结果直接拿到下一步需要运算的组件中

​ 3.编译优化:通过编译器调整指令顺序来解决数据相关。

image-20240812141421054

3.控制相关(控制冲突)

​ 当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。

​ 解决方法:

​ 1.,转移指令分支预测
​ 2.预取转移成功和不成功两个控制流方向上的目标指令
​ 3.加快和提前形成条件码
​ 4.提高转移方向的猜准率

image-20240813101640340
流水线的多发技术

1.超标量技术:

image-20240813102601286

​ 每个时钟周期内可并发
​ 多条独立指令要配置多个功能部件
​ 不能调整指令的执行顺序
​ 通过编译优化技术,把可并行执行的指令搭配起来

2.超流水技术

image-20240813102817433

​ 在一个时钟周期内再分段(3段)
​ 在一个时钟周期内一个功能部件使用多次( 3次)
​ 不能调整指令的执行顺序
​ 靠编译程序解决优化问题

3.超长指令字

image-20240813103139105

由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条
具有多个操作码字段的超长指令字(可达几百位)
采用多个处理部件

小结
image-20240813103932009

5.7多处理器

SISD 单指令流单数据流:
各个指令序列只能并发不可并行,每条指令处理一两个数据。不是数据级并行技术。

​ 硬件组成:一个处理器+一个存储器。如果采用指令流水线,需要设置多个功能部件,采用多模块交叉存储器。

SIMD 单指令流多数据流:

​ 各个指令只能并发不可并行,但是每条指令可以同时处理具有多个相同特征的数据,是一种数据级并行技术。

​ 硬件组成:一个指令控制器(CU)+多个执行单元 + 多个局部存储器 + 一个主存储器。每个执行单元有各自的寄存器、局部存储器、地址寄存器。不同执行单元执行同一条指令,处理不同的数据。

MIMD 多指令流多数据流

​ 各个指令序列并行执行,分别处理不同的数据,是一种线程级并行或线程级以上的并行技术。

image-20240813113237378
向量处理器

​ 向量处理器是一种SIMD的进阶应用。向量处理的一条指令的处理对象是向量,擅长对向量型数据并行计算、浮点数运算等

image-20240813113823747

5.7.2硬件多线程

image-20240813164815560

6.1总线

​ 总线是为多个部件分时 共享的公告信息传送线路

​ 共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享。
​ 分时是指同一时刻只允许有一个部件向总线发送信息,如果系统中有多个部件,则它们只能分时地向总线发送信息。

总线的特性

1.机械特性:尺寸、形状、管脚数、排列顺序
2.电器特性:传输方向和有效电平范围
3.功能特性:每根传输线的功能(地址、数据、控制)
4.时间特性:信号的时序关系

串行总线和并行总线

按照数据传输格式将总线分为串行总线和并行总线。

串行总线:每次只可以传输一位比特的数据

​ 优点:只需要一根传输线,成本低。广泛应用于长距离传输,不易产生干扰;应用于计算机内部时可以节省布线空间。

​ 缺点:在数据发送和接受的时候要进行拆卸和装配,要考虑串行-并行转换问题

image-20240814231511128

并行总线:每次可以传输多位比特的数据

​ 优点:总线的逻辑时序比较简单,电路设计容易

​ 缺点:信号线数量多,占用更多的不限空间,远距离传输时成本高。线路之间可以会产生干扰。

image-20240814231519889
片内总线、系统总线、通信总线

按照总线的功能将总线分为片内总线、系统总线、通信总线

片内总线:是芯片内部的总线。是CPU芯片内部寄存器之间、寄存器与ALU之间的公共链 接线。

系统总线:是计算机系统内各个功能部件之间互相链接的总线。按系统总线传输信息内容 的不同,又可分为3类:数据总线地址总线控制总线。

​ 数据总线 DB: 负责传输各个功能部件之间的数据信息,包括指令和操作数 总线的位数(根数)与机器字长和存储字长有关;传输方向 是双向的。
​ 地址总线 AB: 传输地址信息,包括主存单元或者I/O端口的地址;总线的位 数(根数)与主存地址空间大小以及设备数量有关。数据传输 方向是单向的。

​ 控制总线 CB:传输控制信息,一根控制线传输一个控制信息。对于单根控制 线来说,数据是单向传输的,但是对于整个控制总线来说数据 传输是双向的。

通信总线:通信总线式用于计算机系统之间或计算机系统与其他系统之间的信息传输 的总线,也成为外部总线。

系统总线的结构:

​ 单总线结构:

image-20240814234238565

​ 双总线结构:

image-20240814234529355

​ 三总线结构:

image-20240814234756031
小结
image-20240814235035356
总线的性能指标

1.总线的传输周期(总线周期):一次总线操作所需的时间(包括申请阶段、寻址阶段、传输 阶段和结束阶段),通常由若干个总线时钟周期构成。

2.总线时钟周期:即机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各 个部件,总线也要受此时钟的控制。

3.总线的工作频率:总线上各种操作的频率,为总线周期的倒数。若总线周期=N个时钟周 期,则总线的工作频率=时钟频率/N。实际上指一秒内传送几次数据

4.总线的时钟频率:即机器的时钟频率,为时钟周期的倒数。若时钟周期为T,则时钟频 率为1/T。实际上指一秒内有多少个时钟周期。

5.总线宽度:又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线 的根数,如32根称为32位(bit)总线。

6.总线带宽:可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常 用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)表示。

image-20240814235907549 image-20240814235939122

image-20240815000356600

7.总线复用:总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线 传输更多的信息,从而节省了空间和成本。

8.信号线数:地址总线、数据总线和控制总线3种总线数的总和称为信号线数。

6.3总线操作和定时

总线周期的四个阶段:申请分配阶段、寻址阶段、传输阶段、结束阶段

申请分配阶段:由需要使用总线的主模块(或主设备)提出申请,经总线仲裁机构决定将 下一传输周期的总线使用权授予某一申请者。也可将此阶段细分为传输请 求和总线仲裁两个阶段。

寻址阶段:获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启 动参与本次传输的从模块。

传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送。

结束阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权。

总线定时

​ 总线定时是指总线在双方交换数据的 过程中需要时间配合 关系的控制,这种控制称为总线定时,他的实质是一种协议或者规则。

同步定时方式:总线控制器采用统一的时钟信号来协调发送和接受双方的定时关系

​ 若干个时钟产生相等的时间间隔,每个间隔构成一个总线周期。在一个总 线周期中,发送方和接收方可进行一次数据传送。

​ 因为采用统一的时钟,每个部件或设备发送或接收信息都在固定的总线传 送周期中,一个总线的传送周期结束,下一个总线传送周期开始。

image-20240815002804282

image-20240815002441848

异步定时方式:在异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依靠 传送双方相互制约的“握手”信号来实现定时控制。

​ 主设备提出交换信息的“请求”信号,经接口传送到从设备;从设备接到主设 备的请求后,通过接口向主设备发出“回答”信号。

image-20240815003301459

image-20240815003354444

小结
image-20240815003739008

7.1.1输入输出系统和I/O控制方式

I/O控制方式

包括程序直接控制方式、中断驱动方式、DMA方式、通道控制方式。

看操作系统笔记 5.1.3

I/O组成

I/O由I/O软件和I/O硬件两个部分组成

小结
image-20240815233247370

7.1.2外部设备

image-20240816001004353

7.2 I/O接口

I/O接口:又叫做I/O控制器,主要负责协调主机与外部设备之间的数据传输

I/O接口的作用

1:数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配
2:错误或状态监测:通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用
3:控制和定时:接收从控制总线发来的控制信号、时钟信号
4:数据格式转换:串-并、并-串等格式转换
5:与主机和设备通信:实现主机—I/O接口一I/O设备之间的通信

I/O接口的工作原理
image-20240816003221274
接口与端口

统一编址:I/O端口的编址和内存编址统一

​ 靠不同的地址码来区分内存和I/O设备。访存类指令都可以访问I/O端口

image-20240816003616396 image-20240816004220243

独立编址:I/O端口的编址与内存编址无关,是独立编址的

​ 靠不同的指令来区分I/O设备。只能用专门的I/O指令去访问I/O端口

image-20240816003648596 image-20240816004358770

I/O接口分类
image-20240816004602442
小结
image-20240816004704757

7.3.1程序查询方式

​ 程序查询方式是当CPU启动I/O操作时,当I/O设备正在准备数据的时候,CPU会不停的轮询检查I/O设备的状态,只有当I/O设备准备完成时,CPU才会读写数据。在I/O设备准备的过程中,CPU不可以做其他工作。

image-20240816200147797
小结
image-20240816205704020

7.3.2中断的作用和原理

​ 程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

中断的过程
image-20240816210442196
中断的分类
image-20240816211113508
中断请求标记

​ 每个中断源向CPU发出中断请求的时间是随机的。
​ 为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。
​ 这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。

image-20240816211853958

​ 对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/O的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
​ CPU响应中断必须满足以下3个条件:

​ 1:中断源有中断请求。
​ 2:CPU允许中断即开中断。
​ 3:一条指令执行完毕,且没有更紧迫的任务。

中断判优

​ 中断判优要解决多个中断信号同时发送时先处理哪个的问题。

​ 中断判优既可以用硬件实现,也可用软件实现:
​ 硬件实现是通过硬件排队器实现的,可以设置在CPU中,也可以分散在各个中断源中
​ 软件实现是通过查询程序实现的。

image-20240816212425224

优先级设置

image-20240816212454906

7.3.3多重中断

image-20240816213336811
中断屏蔽技术

​ 中断屏蔽技术主要用于多重中断,CPU要具备多重中断的功能,须满足下列条件:
​ 1:在中断服务程序中提前设置开中断指令。
​ 2:优先级别高的中断源有权中断优先级别低的中断源。

​ 每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。

image-20240816214628896

image-20240816215134518
小结
image-20240816215256494

7.3.4程序中断方式

​ 在I/O设备准备数据的时候,CPU可以去处理其他任务,当I/O设备准备完成后,会向CPU发送一个中断信号

image-20240817001539721

7.3.5DMA控制方式

image-20240817003225701
DMA控制方式的步骤
image-20240817003147352
DMA传送方式
image-20240817003335447
中断方式和DMA方式的区别

image-20240817003049639

posted @ 2024-08-17 00:41  小花护符  阅读(317)  评论(0编辑  收藏  举报