该文章笔记来源于2023王道计算机组成原理网课。删除了部分大纲之外的内容,并做了一些补充。主要是为了自己考研复习使用。也方便大家参考学习!
24考研深入浅出计算机网络笔记
早期的冯诺依曼机
“存储程序”的概念是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直到程序执行结束。
冯诺依曼计算机的特点
数据驱动方式:
主存储器的基本组成
运算器的基本组成
控制器的基本组成
计算机的工作过程
汇编语言指令和机器语言指令一一对应
LOAD: 取数操作 ,MUL: 乘法操作
编译程序:将高级语言编写的源程序全部语句一次全部翻译成机器语言程序,而后在执行机器语言程序(只需翻译一次)。 例如:使用我们使用C语言写的程序,经过编译和汇编之后,最终形成.exe文件,该.exe文件是用机器语言描述的程序,每次运行这个程序,只需加载.exe文件。
解释程序:将源程序的一条语句翻译成对应于机器语言的语句,并立即执行。紧接着在翻译下一句(每一次都要翻译)。 编译型语言执行效率较解释型语言高。 注:编译、汇编、解释程序,可统称为“翻译程序”。
计算机体系结构:机器语言程序员所见到的计算机系统的属性概念性的结构与功能特性(指令系统、数据类型、寻址技术、I/O机理)
计算机组成原理:实现计算机体系结构所体现的属性,对程序员“透明”(具体指令的实现)
“透明”:看不见
“公开透明”:看得见
总容量=存储单元个数×存储字长 bit =存储单元个数×存储字长/8 Byte
Eg:MAR为32位,MDR为8位
总容量=2^32×8 bit=4GB
n个2进制位能表示多少种不同的状态
2^10:K
2^20:M
2^30:G
2^40:T
注:注意与存储器的容量或者文件的大小中的K、M、G、T的区别
动态测试:基准程序(跑分软件)是用来测量计算机处理速度的一种实用程序,以便于被测量的计算机性能可以与运行相同程序的其他计算机性能进行比较。
思考:
1、主频高的CPU一定比主频低的CPU快吗?
答:不一定,如两个CPU,A的主频为2GHz,平均CPI=10,一秒钟可以执行0.2G条指令;B的主频为1GHz,平均CPI=1,一秒钟可以执行1G条指令。
2、若A、B两个CPU的平均CPI相同,那么A一定更快吗?
答:不一定,还要看指令系统,如A不支持乘法指令,只能用多次加法实现乘法;而B支持乘法指令。
3、基准程序执行的越快说明机器性能越好吗?
答:基准程序中的语句存在频度差异,运行结果也不能完全说明问题。
知识点回顾
存储器的容量:衡量计算机的存储容量
机器字长:衡量计算机并行处理的能力
数据通路带宽:衡量计算机在功能部件之间传送数据的能力
任意进制转换成十进制
二进制<=>八进制、十六进制
各种进制的常见书写方式
十进制转换成任意进制
无符号整数,即“自然数”,0、1、2、3、4、5…
C语言中的无符号整数:
unsigned short a=1; //无符号整数 (短整型 2B)
unsigned int b=2; //无符号整数 (整型 4B)
无符号整数的表示
无符号整数的加法运算
无符号整数的减法运算
带符号整数,即“整数”,-2、-1、0、1、2、3、4、5…
C语言中的带符号整数:
short a=1; //带符号整数 (短整型 2B)
int b=-2; //带符号整数 (整型 4B)
原码的缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理
用补码表示真值–符号位可以参与运算
原码、反码、补码的转换(计算)
原码、反码、补码快速转换技巧(手算)
补码的加法运算(例1)
补码的加法运算(例2)
补码的减法运算
补码的减法运算(例3)
注:对比无符号整数的减法运算。优点:用同一套电路即可处理所有的加减法,省钱!
知识回顾与重要考点
注:反码与原码表示的范围是一样的,当n是整数时,真值负数最小时,原码是1111 1111,反码是1000 0000。
定点小数的加减法运算
小数的加减运算和整数的处理逻辑是一样的。
复合逻辑
异或:AB不同Y为1,相同为 0;同或:AB相同Y为1,不同为0。
一位全加器
如果输入(Ai、Bi、Ci-1)只有一个1,那么进位为0;若输入至少2个1,则进位为1。
G1、P1在C1、C2、C3、C4的运算当中,可以把G1、P1送到后边的全加器里。G2、P2…也是如此,一般套娃到C4就会结束,不然电路就会很复杂。
加法器原理
cin是加到A和B的最低位,cout是A和B的最高位相加后向更高位产生的一个进位信息。
计算机底层的硬件在处理加法或减法时,不论输入的是有符号数还是无符号数,底层的硬件都是用同一套电路来处理的,最后在我们判断是否发生溢出的时候,有符号数的判断逻辑和无符号数的判断逻辑存在显著区别。那有符号数和无符号数是如何判断溢出的呢?
第一个位基(01101)和第二个位基(01101)相加的时候,需要错位,计算机处理的方式是将ACC、MQ里的数据统一右移一位。
当前位为1,则ACC加上被乘数,之后更新ACC。
当前位为0,则ACC加上0,ACC的值不变,ACC、MQ里的数据逻辑右移一位。右移后当前位为1,则ACC加上被乘数,更新ACC。
统一右移一位之后,当前位是乘数的符号位,不参与运算,此时已经重复4次。
最后不要忘了修改符号位。
原码一位乘法手算模拟
注:以上是小数的一位乘法,整数的一位乘法类似。只需把小数点改成逗号,注意整数小数点固定位置。
2、补码乘法运算
1、原码的除法运算
手算除法(十进制)
手算除法(二级制)
原码除法:恢复余数法
将ACC的值更新为11110,此时相减结果是个负数,说明应该上商0。恢复余数。
x,y均为0,异或之后结果为0.则符号位为0.
原码除法:恢复余数法(手算)
原码除法:加减交替法(不恢复余数法)
注:定点小数的除法运算,最后的商也必须是定点小数,因此在除法运算中,我们规定被除数一定要小于除数。如果被除数大于除数,商就会大于1,而定点小数无法表示大于1的范围。通过第一步的商,如果商为1,那么硬件电路就会检测出这个问题,并停止除法运算。
2、补码的除法运算
补码除法:加减交替法
异号相除:够减商0,不够减商1
同号相除:够减商1,不够减商0
够减:被减数绝对值大于减数
大小端模式
边界对齐
边界对齐方式:起始地址能被自身长度整除!
定点数的局限性:定点数可表示的数字范围有限,但我们不能无限制的增加数据的长度。
从科学计数法理解浮点数
浮点数的表示
浮点数尾数规格化
规格化浮点数的特点
移码
这个运算有点特殊。
当偏置值为2^n-1时,此时移码相对于之前整体下移了一位。
IEEE754标准
看两个例子,就明白了十进制与IEEE754的转换过程了。
若要表示的数绝对值还要更小,怎么办?【阶码全1,阶码全0用作特殊用途】
单精度浮点数阶码占8bit,能表示范围0~255。0代表全0,255代表全1。
知识点回顾
X=-0.101×2^(-101)
-0.101: 补码:1.011 双符号位补码:11.011 扩展:11.011000000
2^(-101): 补码:1011 双符号位补码:11011
存储器的层次化结构
存储器的分类–层次
存储器的分类–存储介质
存储器的分类–存取方式
相联存储器既可以按地址又可以按内容寻址。
存储器的分类–信息的可更改性
存储器的分类–信息的可保存性
RAM都是易失性存储器;
ROM都是非易失性存储器;
随机存取存储器:RAM(专有名词);
随机存取:是存取方式,ROM和RAM存取方式都是随机存取。
基本的半导体元件及原理
注:MOS管可理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通。
存储器芯片的基本原理
驱动器在译码器后面,保证译码器输出的电信号是稳定可靠的。
片选线作用:若有多个存储芯片,保证此次读取指定芯片的数据,CS给予低电平,其他芯片为高电平。
DRAM(动态RAM)用于主存,SRAM(静态RAM)用于Cache
DRAM芯片:使用栅极电容存储信息
SRAM芯片:使用双稳态触发器存储信息
1:电容内存储了电荷
0:电容内未存储电荷
若触发器里存储的的二进制的1,当字选择线接通之后,BLX输出低电平信号
若触发器里存储的的二进制的0,当字选择线接通之后,BL输出低电平信号
写入0:给BL加低电平,给BLX加高电平,呈现A低B高
栅极电容:每个存储元制造成本更低,集成度高,功耗低。电容内的电荷只能维持2ms,即便不断电,2ms后信息也会消失,2ms之内必须“刷新”一次(给电容充电)
双稳态触发器:每个存储元制造成本更高,集成度低,功耗大。只要不断电,触发器的状态就不会改变
DRAM的刷新
DRAM的地址线复用技术
地址:00000000。
同时送行列地址,需要8根地址线。两次送只需要4根地址线。
地址线复用技术:地址线是原来的1/2(行和列相等)且地址线分行、列两次传送。
这里地址线取决于行和列的最大值。
地址引脚:log2max{行,列}
WE头上没有横杠,高电平表示写,低电平表示读。
增加主存的存储字长-位扩展
增加主存的存储字数-字扩展
线选法
译码片选线
主存容量扩展-字位同时扩展
①可以存储低四位–(D0、D1、D2、D3)
②可以存储另四位–(D4、D5、D6、D7)
本节回顾
补充:译码器
当m=T/r时,存取流水线的效率最高,存储体的数量最少,成本最低。
思考?
假设有m个存储体,第一种方法:可以根据体号确定它属于第几个存储体;第二种方法:用十进制地址x对m取余
局部性原理
性能分析
有待解决的问题
注:每次被访问的主存块,一定会被立即调入Cache.
知识回顾
全相联映射
直接映射
主存块号%2^3,相当于留下最后三位二进制数
若Cache总块数=2^n,则主存块号末尾n位直接反映它在Cache中的位置
将主存块号的其余位作为标记即可
Cache行:标志位(有效位、一致性维护位、替换算法控制位、标记位)+数据位(存放数据)
注意区分cache行和cache地址,装入cache的地址是低c+b位cache容量:是指cache存储数据的大小;cache总容量:是在cache容量基础上,加上所有标记cache块的地址所占的内存。
随机算法RAND
先进先出算法(FIFO)
近期最少使用算法(LRU)
如上图4个Cache块,只需要2bit的信息来表示计数器,刚好可以表示0、1、2、3这四种数字。使得硬件电路变得很简单。
LRU算法–基于“局部性原理”,近期被访问过的主存块,在不久的将来很可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀。Cache命中率高。
若被频繁访问的主存块数量>Cache行的数量,则有可能发生“抖动”,如:{1、2、3、4、5、1、2、3、4、5…}
最不经常使用算法(LRU)
知识回顾
写命中–全写法
写不命中–写分配法
写不命中–非写分配法
多级Cache
现代计算机常采用多级Cahe,离CPU越近的速度越快,容量越少,离CPU越远的速度越慢,容量越大。
知识回顾
指令的定义
指令(又称机器指令):是指计算机执行的某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
注:一台计算机只能执行自己的指令系统,不能执行其他系统的指令。
指令格式
零地址指令
一地址指令
二、三地址指令
四地址指令
指令-按地址码数目分类
指令-按指令长度分类
机器字长和存储字长固定不变。
指令由操作码和若干地址码组成
定长指令字结构:指令系统中所有指令的长度相等。
变长指令字结构:指令系统中所有指令的长度不等。
定长操作码:指令系统中所有指令的操作码长度相等
可变长操作码:指令系统中所有指令的操作码长度可变
定长指令字结构+可变长操作码–>扩展操作码指令格式(不同地址数的指令使用不同长度的操作码)
顺序寻址(PC)+“1”–>PC
跳跃寻址:由转移指令指出
本节回顾
直接寻址
间接寻址
寄存器寻址
寄存器间接寻址
隐含寻址
立即寻址
扩展:ACC加法指令的地址码可采用“分段”方式解决,即程序段和数据段分开。如果固定数组的首地址,那么数组地址7就不用改变。
基址寻址中程序浮动指的是整段程序在内存里的浮动,相对寻址中程序浮动指的是一段代码在程序内部的浮动。
注:无条件转移指令jmp2,就不会管PSW的各种标志位。PC=2
X86汇编语言指令基础
destination:目的地(d目的操作数)
source:来源地(s源操作数)
目的操作数d不可以是常量
在进行除法运算之前,需要把被除数位扩展,
如32b/32b–>64b/32b,存放64位的被除数需要两个寄存器,edx:eax,高32位存放在edx,低32位存放在eax
X86汇编语言当中不允许两个操作数同时来源于主存。
程序中的选择语句(分支结构)
无条件转移指令–jmp
无条件转移指令,类似于c语言里的goto语句
无条件转移指令无法实现if,else语句
条件转移指令–jxxx
示例:选择语句的机器级表示
扩展:cmp指令的底层原理
存储器容量:决定了计算机需要用来进行寻址的比特数,决定了地址的长度。
运算器的基本结构
CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。
如:两个操作数分别来自主存和R0,最后结果存回R0,那么从主存中取来的操作数直接放入暂存器,就不会破坏运算前R0的内容。
在R0给的信号不稳定之前,ALU会产生一个输出信号送到内部总线上,就会与R0送到内部总线上的信号冲突,从而导致运算的错误。在ALU的输出端加一个暂存寄存器,等R0送到总线上的信号稳定之后,ALU把运算的结果放到暂存寄存器中,在ALU的输出稳定之后,让三态门导通,把运算结果送到内部总线上,给R0的输入端加上有效的电信号,就会把运算的结果输入到R0寄存器中。
指令周期流程
指令周期的数据流-取址周期
指令周期的数据流-间址周期
指令周期的数据流-执行周期
执行周期的任务是根据IR指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
指令周期的数据流-中断周期
数据通路通常指指令执行过程中数据经过的路径以及路径上的部件。
数据通路=电路+部件(组合+时序),并且由控制信号进行控制。
组合逻辑元件(操作元件):不能存储,如多路选择器MUX、ALU、译码器。
时序逻辑元件(状态元件):能存储,如寄存器。
数据通路-CPU内部单总线方式
以下内容结合1.2.2“计算机的工作过程”进行学习
每个时钟周期内,CU都会发出一组相应的控制信号,来完成某一个微操作,到下一个时钟周期,CU又会发出第二个控制信号,完成第二个微操作。
CPU内部总线方式-例题
(R0)目的操作数,有括号需要进行一次间接寻址,表示R0中存放的是操作数在主存中的存储地址。
R1源操作数,没有括号表示操作数直接存放在R1寄存器中。
专用数据通路方式-取值周期
采用CPU内部总线:结构简单,实现容易,性能较低,存在较多的冲突现象。
专用数据通路:结构复杂,硬件量大,不易实现,性能高,基本不存在数据冲突现象。
数据总线是双向的:CPU–>内存,内存–>CPU
地址总线是单向的:CPU–>内存
CU发出一个微命令,可完成对应微操作。如:微命令 1使得PCout、MARin有效。完成对应的微操作1(PC)->MAR
根据指令操作码、目前的机器周期、节拍信号(T0、T1、T2)、机器状态条件(如PSW中溢出、正负性等)、即可确定现在这个节拍下应该发出哪些微命令。
1 硬布线控制器
2 硬布线控制器的设计(不考,便于理解)
分析每个阶段的微操作序列
安排微操作时序的原则-取值周期
安排微操作时序的原则-间值周期
安排微操作时序的原则-执行周期
电路设计-组合逻辑设计
采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中。
微命令与微操作一一对应,一个微命令对应一根输出线
有的微命令可以并行执行,因此一条微指令可以包含多个微命令
相容性微命令:可以并行完成的微命令。
互斥性微命令:不允许并行完成的微命令。
硬布线与微程序的比较
举个例子,你在图书馆复习408,在做某道题,你就是CPU(也就是CPU在执行当前指令)。
1.陷入:你想起来昨天晚上的那局王者被单杀,气不过,然后来了一把(你是学习态,想做游戏态的事情,是不是很像系统调用),打完又灰溜溜做题(返回下一条指令)。
2.故障:你突然发现这道题的知识点不会(也就是不在你的内存中),你就去翻书(外存),查到之后还要继续做这道题(返回本条指令)。
3.终止:你突然很累,大脑宕机,不想学习,直接回寝室睡大觉,不回来做题,这就是终止(不可恢复)。
4.外中断:和你自己没关系,旁边来了个妹妹,打断了你的学习,你看了十分钟又灰溜溜的做题,这就是外中断,和你自己(CPU)没关系。
指令流水线的定义
一条指令的执行过程可以分成多个阶段(或过程)。根据计算机的不同,具体的分法也不同。
取指:根据PC内容访问主存储器,取出一条指令送到IR中。
分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。
执行:根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。
设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
指令流水线的表示方式
流水线的性能指标
机器周期的设置
IF:取指阶段;
ID:指令译码阶段(指令译码,从通用寄存器中取出当前指令所需要的操作数),imm立即数;
EX:执行阶段;
M:访存阶段;
WB:写回通用寄存器组
cache:data cache和insrtuction cache,将数据和指令放在两个独立的模块中,对这两个模块的访问可以并行进行。
影响流水线的因素
①结构相关
②数据相关
如果有后续的指令可以提前执行,不需要依赖前序指令的执行结果,可以通过编译器调整指令顺序来解决数据相关。(类似于插入空操作)
③控制相关
流水线的分类
①部件功能级、处理机级和处理机间级流水线
②单功能流水线和多功能流水线
③动态流水线和静态流水线
④线性流水线和非线性流水线
流水线的多发技术
常见的5类指令:运算类指令、LOAD指令、STORE指令、条件转移指令、五条件转移指令
运算类指令的执行过程
LOAD指令的执行过程
STORE指令的执行过程
Tips:只考选择题
单指令流单数据流SISD结构:一个指令流对应一个数据流
单指令流多数据流SIMD结构:一个指令流对应多个数据流
多指令流单数据流MISD结构:多个指令流对应一个数据流(事实上不存在)
多指令流多数据流MIMD结构:多个指令流对应多个数据流
M:Multiple
S:Single
l:Instruction
D:Data
总线简图
总线的物理实现
为什么要用总线?
早期计算机外部设备少时大多采用分散连接方式,不易实现随时增减外部设备。
为了更好的解决I/O设备和主机之间连接的灵活性问题,计算机的结构从分散连接发展为总线连接。
总线的特性
1.机械特性:尺寸、形状、管脚数、排列顺序
2.电气特性:传输方向和有效的电平范围
3.功能特性:每根传输线的功能(地址、数据、控制)
4.时间特性:信号的时序关系
数据通路表示的是数据流经的路径
数据总线是承载的媒介
①片内总线
片内总线是芯片内部的总线。
它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线。
②系统总线
系统总线是计算机系统内各功能部件。(CPU、主存、I/O接口)之间相互连接的总线。
按数据总线传输信息内容的不同,又可分为三类:数据总线、地址总线和控制总线。
③通信总线
通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线。
总线标准
USB总线:
即插即用、热拔插(带电拔插)、菊花链形式连接众多外设
可扩充性好,一个USB控制器可连接127个外部USB设备
可以为低电压设备供电(5V)
高速传输,最新标准可达1280MB/s
总线传输的四个阶段
总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,它的实质是一种协议或规则。
同步定时方式-读命令
同步定时方式是指系统采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。
若干个时钟产生相等的时间间隔,每个间隔构成一个总线周期。
在一个总线周期中,发送方和接收方可进行一次数据传送。
因为采用统一的时钟,每个部件或设备发送或接收信息都在固定的总线传送周期中,一个总线的传送周期结束,下一个总线传送周期开始。
优点:传送速度快,具有较高的传输速率;总线控制逻辑简单。
缺点:主从设备属于强制性同步;不能及时进行数据通信的有效性检验,可靠性较差。
同步通信适用于总线长度较短及总线所接部件的存取时间比较接近的系统。
异步定时方式
在异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依靠传送双
方相互制约的“握手”信号来实现定时控制。
主设备提出交换信息的“请求”信号,经接口传送到从设备;从设备接到主设备的请求后,通过接口向主设备发出“回答”信号。
根据“请求”和“回答”信号的撤销是否互锁,分为以下3种类型。
优点:总线周期长度可变,能保证两个工作速度相差很大的部件或者设备之间可靠地进行信息交换,自动适应时间的配合。
缺点:比同步控制方式稍复杂一些,速度比同步定时方式慢。
半同步通信
本节回顾
I/O接口:又称I/O控制器、设备控制器、负责协调主机与外部设备之间的数据传输。(I/O控制器就是一块芯片,常被集成在主板上)
I/O接口的工作原理
统一编址 V.S. 独立编址
I/O接口的类型
独占查询:CPU100%的时间都在查询I/O状态,完全串行。
定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的间隔内CPU可以执行其他程序。
中断的基本概念
中断请求的分类
中断判优-优先级设置