计算机组成与设计2021年总结
Table of Contents
计算机组成原理考点 #
小题 #
根据国标规定,汉字占2B。
小题 根据国标规在虚存中,地址映射由?完成。
存储单元是什么?
虚存的作用?
汉字的编码:输入码(外码)用于汉字输入,机内码(内码)用于内部处理,输出码(字型码)
冯计算机结构,流水线
计算 #
章节 | 题目 |
---|---|
机器数 | 补码加减法,原码一位乘,补码一位乘,原码一位除(不恢复余数),溢出判断,规格化,原移码转换,原反补转换,进制转换,浮点数转真值,IEEE 754 |
存储器 | Cache命中率,利用率和平均访问时间,DMA和中断方式访存效率。主存地址在Cache中的位置映射。 |
其他 | CPI和主频 |
原码一位乘法注意 #
- 硬件配置:部分积在ACC累加器中,乘数在MQ移位寄存器中,被乘数在公共寄存器X中。最终ACC保存高位结果,MQ保存低位结果。
- 可以用分隔符标明原来MQ寄存器内的内容。当MQ中原内容全部被移出,机器立刻停机。
- 第一次操作不移位,最后一次操作只移位。
- 一开始,ACC是0,每次如果MQ最低位是1则ACC加X的内容。
- 由于原码,所以需要自己判断符号。具体做法是最后异或。
- ACC保存小数,MQ保存整数。
- 由于是原码,小数采用一位符号位,且采用逻辑移位(因为符号位不参与运算。补码是参与运算的,也就因此可以自动生成符号(补码的作用就是把符号也实现运算的封闭性))
- 1位符号位的作用是兜进位。
- 为了加速,可以不+0,而是碰到要+0就直接逻辑移位。
- 每次加的时候,看着X寄存器加。
补码校正乘法注意 #
补码校正法和原码一位乘法的区别(除了这三条,其余当作原码一位乘法计算):
- ACC和X采用双符号位;
- 算术移位;
- 最后可能要校正(ACC要加X寄存器内的反补码);
如果符号不相同,让负的那个作被乘数(即X寄存器),这样不需要校正。
Booth算法和校正法的区别 #
- 最后一次移位后不管怎样都要加
- MQ寄存器多了最高的“符号位”和最低的“附加位”
- 每次加的数由原来的X补、0变成了X补、X反补、0.
算法 | 加法次数和移位次数的关系 |
---|---|
原码一位乘法 | 最后移位后一定不需要加法了 |
校正法 | 最后移位后如果需要校正还需要加X的反补码 |
Booth算法 | 最后移位后必然需要加法,加X的反补码,X的补码或+0 |
Booth法的MQ的写法 #
一开始可以写成例如0//1001//0的形式,左边0是符号位,右边0是附加位。然后,右边的“//”不管怎么移位都定住不动,左边的“//”随着移位去动。当两个“//”重合了,就完成了所有移位操作。
简答 #
章节 | 题目 |
---|---|
IO方式 | 3种IO方式,IO中断过程(包括多重),DMA和周期挪用,中断隐指令,比较DMA和中断方式,中断屏蔽字,中断响应(顺序)和其条件 |
CPU和机器指令 | 三种周期(指令,时钟,机器),CISK和RISK,计算机如何区分指令和数据,微程序指令入口地址的形成,扩展操作码,微程序和微操作和机器指令的关系,组合逻辑和微程序设计的比较,指令集设计应当考虑的因素,CPU的功能,指令流水 |
存储器 | 单管RAM的工作原理,集中刷新分散刷新,DRAM和SRAM区别,CPU某些寄存器作用,寻址方式(变址寻址,存储器寻址,间接寻址),Cache如何访存,多层次存储的好处,如何提高访存速度,交叉存储,存储对齐,Cache替换算法,设计Cache映射 |
机器数 | ALU概念,超前进位的理念,Booth算法的运算器结构 |
分析设计 #
章节 | 题目 |
---|---|
CPU,指令和微程序 | 指令格式,写各个周期指令,写ADD、SUB指令的微程序,指令设计(例题:扩展操作码),设计微指令(例题),设计时序系统 |
存储器 | 存储器扩展,Cache组相联地址设计,虚存 |
数字逻辑 | 卡诺图F(0,2,4,8,…),并由卡诺图画出逻辑电路 |
冯诺伊曼计算机的特点是什么? #
M1 | M2 |
---|---|
五大组成部分 | 运算器,控制器,存储器,输入设备,输出设备构成;以运算器为中心 |
指令的存储 | 指令和数据同等地位存储,可用地址寻址 |
指令的表示 | 由操作码和地址码组成;二进制表示 |
程序的表示 | 程序顺序存储在存储器内,通常自动顺序取出 |
结合框图说明现代计算机的硬件组成? #
M1 | M2 |
---|---|
三大组成部分 | CPU,主存,IO设备;其中,CPU和主存合称主机,IO设备又称外设。 |
CPU的作用 | ALU完成各种算术逻辑运算;CU解释指令并发出操作命令,执行之。 |
主存的作用 | 存放程序和数据,直接与CPU交换信息。 |
IO设备 | 受CPU的控制,完成各种IO操作。 |
说明CPU某些寄存器作用 #
MAR、MDR、ALU中的累加器ACC,乘商寄存器MQ,操作数寄存器X,变址寄存器IX,基址寄存器BR,CU中的程序计数器PC,指令寄存器IR。
计算机是怎样区分指令和数据的 #
- 通过不同的时间段来区分指令和数据,即在取指令阶段(或取指微程序)取出的为指令,在执行指令阶段(或相应微程序)取出的即为数据。
- 通过地址来源区分,由PC提供存储单元地址的取出的是指令,由指令地址码部分提供存储单元地址的取出的是操作数。
- 通过取出后放置的位置区分:取来的机器指令应存放在指令寄存器,而取来的数据(或操作数)则应该存放在以累加器为代表的通用寄存器内。
说明海明码的原理? #
海明码是对多个数据位使用多个校验位的纠错码编码方案。
对每个校验位采用偶校验计算其值,把每个数据位分配到不同的校验位的计算中去。
如果某一位出错,则引起与之相关的若干校验位变化。这样就能直接看出是哪一位错了,起到纠错的效果。
2^r>=k+r+1.
为什么IEEE 754中采用移码表示阶码? #
因为有助于简化判零线路。利于判机器0.
定点运算器的组成?为什么要使用MQ寄存器? #
组成:ALU、通用寄存器、MQ寄存器、多路选择器、输入输出逻辑电路。
MQ功能:
过程 | 乘法 | 除法 |
---|---|---|
运算前 | 乘数 | 被除数低位 |
运算后 | 结果低位 | 结果 |
为什么要用DMA,周期挪用的原理 #
为了进一步提高CPU的资源利用率,使I/O设备直接与内存交换信息,所以用DMA方式。当CPU和I/O设备同时访问主存时,CPU总是将总线占有权让给DMA一个存取周期,叫做周期挪用。
说明微指令和微操作、微程序和机器指令、微程序和程序之间的关系。 #
- 微操作是指由微命令控制实现的最基本操作,微指令是微操作控制信号代码化的结果,一条微指令对应着一个或几个微操作命令(即微命令)。
- 微程序是一系列微指令的有序集合。在微程序控制的计算机中,一条机器指令的功能通常是由一段微程序完成的。微程序存放在控存中,而机器指令属于机器的指令集,由机器指令构成的程序存放在内存中。
- 微程序是由计算机的设计人员编写的,存放在控制存储器中,只能读出,不能修改。而程序是一系列机器指令的有序集合,用于解决实际问题,可由普通程序员编写,存放在主存中,可以更新修改。
存储器的结构层次体现?为什么要分这些层?计算机如何管理它们? #
M1 | M2 |
---|---|
二级层次划分 | Cache-主存、主存-辅存 |
Cache-主存作用 | 速度问题。 |
主存-辅存作用 | 容量问题。 |
管理调度 | Cache-主存的调度通过硬件完成;主存-辅存的调度通过硬件和操作系统(虚存技术)共同完成。 |
存储器的带宽? #
单位时间内,存储器存取的信息量。
比较静态RAM和动态RAM? #
M1 | M2 |
---|---|
存储元的原理 | SRAM是双稳态触发器,DRAM是电容 |
刷新 | SRAM只要不断点,信息就不会丢;DRAM需要刷新才能不丢 |
速度 | SRAM快,DRAM慢 |
功耗 | SRAM大,DRAM小 |
集成度 | SRAM低,DRAM高 |
价格 | 显然 |
什么是刷新? #
为了防止信息丢失,将DRAM存储元中的信息读出再写入的数据再生过程,称为刷新。
比较DRAM的刷新方式? #
M1 | M2 |
---|---|
集中刷新 | 在最大刷新间隔内,集中占用一段时间进行刷新。这段时间必须停止读写操作,即死区。 |
分散刷新 | 刷新安排在存取周期内,不存在死区。延长了存取周期,且刷新过于频繁而没有必要。 |
异步刷新 | 结合了集中刷新和分散刷新的特点,相对于分散刷新而言,**它降低了刷新次数;**相对于集中刷新,它缩短了死区。 |
透明刷新 | 在CPU不占用时刷新;使得刷新对CPU透明,但是电路复杂。 |
以全相联映射为例,说明带Cache的系统中,如何读取数据? #
CPU发出地址后,地址映射机构按照全相联映射方式将贮存地址和Cache中所有字块的字块标记进行比较,从而判断访问的内容所在块是否在Cache中。与此同时,也在访问主存。如果Cache有,则中断对主存的访问,将Cache中的字送入CPU;如果Cache没有,则继续访问主存,找到后,将此字传给CPU的同时,按全相联映射方式转换Cache地址块号,将主存块号送入Cache,如果Cache满,则执行替换算法(FIFO,LRU)和注意善后(写回,写直达)。
Cache映射有哪些方式? #
M1 | M2 | M3 |
---|---|---|
直接映射 | 主存字块只能和固定的Cache块对应。 | 成本低,电路简单,但是利用率、命中率低。 |
全相联 | 主存字块可以和任意的Cache块对应。 | 成本高,电路复杂,利用率高。 |
组相联 | 上述两种折中,在组内构成全相联。 | 集中上述优点。即:成本不高,电路简单,利用率高。 |
什么是中断? #
计算机执行程序时,出现特殊情况或请求时,停止现行程序运行,转向对这些情况或请求的处理。处理完毕再返回间断处,继续执行原程序。
ALU的组成? #
加法器和寄存器。
什么是寻址方式? #
确定本条指令的数据地址和下一条指令的地址的方法。前者称为数据寻址,后者称为指令寻址。
基址寻址和变址寻址的区别? #
M1 | M2 | M3 |
---|---|---|
用途 | 为程序或数据分配空间 | 循环和数组问题 |
寄存器 | 不可变,操作系统定 | 可变,用户定 |
数据 | 可变 | 不可变 |
CPU的结构和功能? #
结构拍了照片。
CPU有6个功能:
M1 | M2 |
---|---|
指令控制 | 控制程序的顺序执行 |
操作控制 | 产生指令所需的微操作命令 |
时间控制 | 对各种操作进行时序控制 |
数据加工 | 进行算术逻辑运算 |
处理中断 | - |
CU的功能:取,分析,执行;处理输入输出、异常处理。
CPU响应中断的条件? #
有中断请求;CPU开中断;在指令执行结束时。
中断隐指令的作用? #
关中断;保存PC;生成服务程序入口地址。
单重中断和多重中断的服务程序的区别? #
开中断的时间不同:单重中断在中断返回时开中断,多重中断在保护完现场后就开中断。
多级结构存储器的一致性原则和包含性原则? #
不同层级的存储器中,同一数据的值应当相同。内层存储器的数据一定包含在外层存储器中。
DMA接口的组成? #
主存地址计数器,数据数量计数器,控制状态逻辑,DMA请求触发器,DBR,中断机构。
说明DMA接口电路的工作过程? #
首先CPU预处理:向DMA接口设置主存缓冲区地址、数据大小、传送方向,并启动外设。
数据传送:当外设准备完成,向DMA接口发出DMA请求,DMA接口再向CPU发出DMA请求,实现周期窃取;主存地址送总线,DMA接口将数据送数据总线,修改主存缓冲区地址和计数器,传送一字(CPU继续执行主程序);若计数器不溢出,则继续发出DMA请求,重复上述过程;若计数器溢出,则发出中断请求(一定是全都传送完成才发出中断请求,要不就变成程序中断方式了)。
后处理:CPU响应中断请求,进入中断服务程序,进行校验(如果错转诊断程序),完成善后。
为什么大量数据需要DMA方式? #
程序中断方式速度慢,且容易丢失数据。
DMA方式能取代中断方式吗? #
不能。
- DMA方式只能用于高速的简单数据传递,不能像中断那样处理特殊情况。
- DMA方式的后处理依赖于中断请求。
什么是指令周期?指令周期是否有固定长度? #
指令周期是CPU取出并执行一条指令的时间。
为了提升机器的运行效率,即便是在同步控制的机器中,不同长度的指令周期也是不一样长的。
中断周期应该做什么?中断周期后是什么阶段? #
中断周期应执行中断隐指令(关中断,存PC,转入口);
中断周期结束就进入取指周期。
节拍、机器周期、指令周期的关系?和微程序设计的关系? #
- 指令周期是CPU取出并执行一条指令的时间。
- 机器周期是在同步控制的机器中,所有指令执行的一个基准时间,通常以访问一次存储器所需的时间作为一个机器周期。
- 时钟周期是计算机主工作时钟的周期,是计算机最基本的时钟单位,是主频的倒数。
每个机器周期包含若干时钟周期。可见,一条时钟周期对应执行一条微指令。一个执行机器周期运行一段微程序。
微指令由若干同时执行的微命令组成。也就是同时执行的微操作。
组合逻辑控制器和微程序控制器的特点? #
M1 | 组合逻辑 | 微程序 |
---|---|---|
产生微指令的方法 | 组合逻辑电路 | 存储逻辑 |
核心器件 | 由门电路构成的复杂树形网络 | 控存CROM |
规整性 | 不规整 | 规整 |
可扩展性 | 不易扩展 | 易扩展,常用于系列机 |
速度 | 快 | 慢 |
比较程序和微程序? #
M1 | 微程序 | 程序 |
---|---|---|
构成 | 微指令 | 机器指令 |
作用 | 表述机器指令 | 显然 |
对用户 | 不提供给用户 | 显然 |
编写者 | 计算机设计人员 | 一般程序员 |
存储 | CROM | 主存 |
简述微程序控制器的原理? #
将控制器需要的微操作命令以微指令的方式写成微程序,放在CROM中。
CPU执行机器指令时,从CROM中取出微指令,解释后产生控制器所需的位操作命令序列。
- 先读取取指周期的微程序,用其中的微命令控制访存,读取机器指令,送入IR。
- 根据IR的操作码译码,通过微地址形成电路,产生微程序入口地址,送入uIR。
- 执行微程序。
- 回到(1).
微程序控制器如何根据操作码形成微程序入口地址? #
机器指令到了IR后,其操作码部分作为微地址形成部件的输入,形成微指令地址。微地址形成部件是一个编码器,可用PROM实现。指令的操作码作为PROM的地址输入,该PROM的存储单元中就放着指令对应的微程序的入口地址。
如何设计组合逻辑控制器? #
- 拟定指令集;
- 确定CPU结构;
- 确定时序系统,拟定指令流程;
- 安排指令的微操作节拍;
- 列出微操作命令的时间表;
- 写出每一个微操作命令的逻辑表达式并化简;
- 画出逻辑电路图。
如何设计微程序控制器? #
- 拟定指令集;
- 确定CPU结构;
- 安排时序系统,拟定指令流程;
- 安排指令的微操作节拍;
- 确定微指令格式(包括编码方式和后续地址形成方式);
- 编写微指令码点。
操作控制字段的常见编码方式? #
直接编码(直接控制)、字段直接编码、字段间接编码、混合编码。
计算机硬件技术指标? #
M1 | M2 |
---|---|
机器字长 | - |
存储性能 | 存储容量、数据通路带宽,吞吐量(取决于存取周期) |
运算速度 | 响应时间,主频,IPC,MIPS,FLOPS |
【存储器】
存储器数据总线32位,存取周期200ns,求存储器的带宽?
每次传送32/8=4B,则200ns传送4B
则4B/200ns=20MB/s。
【存储器】
求1100、1101的海明码。
2^r>=r+k+1,即2^r>=r+5,得r=3,需要3位,则得到形如CCXCXXX的校验形式。
其中,
D1->3,011.
D2->5,101.
D3->6,110.
D4->7,111.
则C1=D1^D2^D4,
C2=D1^D3^D4,
C3=D2^D3^D4.
当1100时,C1C2C3=011,当1101时,C1C2C3=100.(写这个连续XOR的时候不要硬算。要用偶校验的定义。)
即1100->0111100,1101->1010101.
【存储器】
求海明码1100100,1100111是否出错。
根据上一题,有
CCXCXXX,
C1=D1^D2^D4,
C2=D1^D3^D4,
C3=D2^D3^D4.
则1100100的C1C2C3=110,原码为0100,错误情况(XOR结果(只要偶校验出错出错就置1,只要偶校验正确就置0))为A1A2A3=011,因此A3A2A1=110,(注意这里写A3A2A1便于进行带权展开)所以第6位错了。
则1100111的C1C2C3=110,原码为0111,错误情况为A1A2A3=111,即A3A2A1=111,所以第7位错了。
【Cache】
块大小为4,共2K大小Cache,共256K的主存。
注意:一定要把主存和Cache的基本单位都换成“块”!
设计Cache内地址:共2^9个块,所以是9|2.
设计全相联映射的主存地址格式:主存块数量是2^18/块大小2^2=2^16.Cache中块数量是Cache容量2^11/块大小2^2=2^9.因此映射编号有2^16/2^9=2^7位,所以是7|9|2.
设计4路组相联的主存地址格式:Cache分组数是块数量0.5k/路数4=2^7,主存块数量是2^18/块大小2^2=2^16,则主存分区数量是主存块数量2^16/Cache分组数量2^7=2^9,则主存分区标记为9位。每个分区的大小是Cache分组数即2^7。因此是9|7|2,即分区|Cache组号|块内地址
设计全相联方式下的主存地址格式:主存块数是主存容量2^18/块大小2^2=2^16. 则格式为16|2.(主存块号+块内字号)
【Cache】
Cache命中4800次,访问主存200次,Cache的周期是30ns,主存的周期是150ns.
求命中率?
Cache命中次数4800/Cache命中次数4800+主存次数200=48/50=0.96.
求该系统的平均访问时间?
命中率0.96*Cache周期30+非命中率0.04*主存周期150=34.8ns.
求系统的效率?
Cache周期/平均访问时间=30/34.8=0.862
性能提升?
即主存周期/平均访问时间=150/34.8=4.31
则提升了4.31-1=3.31倍。
【Cache大字长】
主存1MB,直接映射,Cache16KB,存储字长32bits,块大小4,求ABCDEH地址在Cache中的哪个字节处?
注意:块的单位是字!因此,这里块大小为4,代表着一个块是4字大小,在本题中就是16B!
块大小为4个字,其中一个字32bits=4B,则一个块就是2^4B.
因此主存有2^20/2^4=2^16个块,Cache有2^14/2^4=2^10个块,所以主存分组为2^16/2^10=2^6组,即6位。
【扩展操作码】
指令字长16位,操作数地址6位,如果定义13条2地址指令,问还能定义多少1地址指令?
2地址指令:0000 6 6 - 1100 6 6正好13条
则1地址可以从前面是1101开始,即1101 000000 6 一直到1111 111111 6. 6个全0到全1是2^6种(根据下面的地址规律),则其有高位01 10 11三种组合,所以是3*2^6种。
【扩展操作码】
指令字长16位,操作数地址6位,一地址N种,零地址M种,求二地址最多多少种?如操作码变长呢?
不可以成为前缀。且二地址的发挥空间是16-6*2=4位,则其数量是2^4-M-N,14.
如果操作码变长,则是2^4-M/2^12-N/2^6,15.
来自题目的注意 #
- 如何设计指令格式?根据操作的种类确定操作码长度;根据寻址特征的种类确定寻址特征字段长度;剩下的长度都留给形式地址。
- 直接寻址的范围是数据地址给出的;
- 一次间址的寻址范围是存储字长,多次间址的寻址范围是存储字长少一位(用于在存储器的这个单元中指出是否是多次间址)
- 立即数可以是无符号数或有符号数(补码表示)。例如6位,则无符号数是0-63,有符号数由于是补码表示,是-32到+31
- 相对寻址情况下,地址字段就是补码表示的有符号数,即-32到+31(假设此字段的长度为6)
- 相对寻址便于程序浮动。
- 可通过双字长指令提升寻址范围,或者通过和目标等长 的基址寄存器、变址寄存器,或者小于目标,但是可以移
- 位再与形式地址相加。
来自题目的注意2 #
响应优先级是优先于处理优先级的。因为屏蔽字是进入某个中段源的中断周期后才设置的,但是大家实际上是先通过排队器来决定谁先进入针对其的中断周期。这个排队的过程由于在主程序,其屏蔽字为全0.
或者说,屏蔽字是为了防止被多重中断而使用的。因为在主程序排队器阶段,屏蔽字全0,大家平等。
地址规律 #
可以标出当前的二进制位是第几位,从1开始数。
例如当前编号是11,则这些位全1就是2^11-1,这一位就是2^(11-1).
想要多少种不同的编码,例如想要2^11种不同的编码,就让他是11位的从全0到全1.
Chap.1 计算机系统概论 #
现代计算机的硬件框图? #
冯诺伊曼计算机的特点 #
冯机的主要思想是“存储程序”。
方面 | 概述 |
---|---|
组成部分 | 运算器,存储器,控制器,输入输出设备 |
存储程序 | 指令和数据同等地位存储在存储器中;指令是顺序存放而构成程序 |
二进制化 | 指令和数据都是二进制表示 |
指令格式 | 由地址码和操作码构成 |
以运算器为中心 | 输入输出绕不开运算器 |
现代计算机:尝试绕过运算器进行IO。
计算机的工作步骤 #
- 把程序和数据装入主存;
- 从程序的起始地址运行程序;
- 取出第一条指令,经过分析、执行,使计算机各部件协同运行,并得到下一条指令地址;
- 用新得到的地址继续执行程序,每条指令重复上述过程,直到程序结束。
计算机如何区分指令和数据 #
通过地址来源区分:如果是根据PC取出则是指令,如果是根据操作地址取出就是数据;通过时序阶段区分:如果是取指阶段取出就是指令,如果是执行阶段取出就是数据;通过取出后的保存区分:如果是保存在IR就是指令,如果保存在诸如ACC,MQ,X等地方就是数据。
计算机的性能指标 #
机器字长 #
计算机进行一次整数运算,所能处理的二进制位数。一般是8的整数倍。
CPU内的寄存器一般采用这个子长,它反映了计算机运算的精度。
数据通路带宽 #
数据总线可以并行传输数据的位数。
主频 #
CPU时钟周期的倒数。时钟周期是CPU最小的时序单位。
CPI #
Clock cycle Per Instruction,即每个指令需要多少个时钟周期。
MIPS #
Million Instructions Per Second,百万指令/s。
FLOPS #
Floating-point Operations Per Second,浮点运算次数/s.
其他要点 #
主频高的CPU一定快吗? #
还要看架构,机器字长、CPI、MIPS等。因为主频和CPU速度没有直接关系。
三种字长 #
“字长” | 解释 |
---|---|
机器字长 | 计算机进行整数运算处理的二进制的位数 |
存储字长 | 一个存储单元存储二进制代码的长度 |
指令字长 | 指令的二进制长度 |
Chap.4 存储器 #
存储器的层次结构 #
**即Cache-主存层次和主存、辅存层次。**前者用于提升速度,CPU访存速度加快,同时价格接近主存(比Cache速度的存储器低多了);后者用于扩容,CPU获得了辅存大小、主存速度的空间,同样是速度快,价格低。
综合上述两个层级,可以发现它们的目的是相同的。即:从整体上看,获得了一个价格低、速度快、容量大的存储系统。
此层次完全由硬件进行信息调度,对程序员透明。
存储器的性能指标 #
- 存储容量。
- 单位成本。例如每位的价格。
- 存储速度。见下表。
概念 | 解释 |
---|---|
存取周期 | **进行一次完整操作所需的完整时间。或:两次独立访存操作之间最小的时间间隔。**存取周期包括存取时间+恢复时间。因此存取周期会比存取时间长。(破坏性读出存储器需要在存取时间后立即恢复数据。这两个时间加起来就是存取周期。) |
带宽 | 即传输数据率。 |
SRAM、DRAM #
存储元、存储单元和存储体 #
存储元负责存储单个比特。存储单元是多个这种存储比特的存储元的集合,负责存储字节、字。存储体是多个存储单元构成的。
SRAM的特点 #
利用双稳态触发器(六管MOS)来存储。因此其支持非破坏性读出,但是断电易失。因为触发器只要带电就可以保证数据一直在,所以称为Static RAM.
SRAM的速度快,用作Cache。
DRAM的特点 #
DRAM**采用存储元电路上的栅极电容**存储比特,因此需要刷新。因为只要不刷新,过1-2ms后数据就会消失,所以相对于稳定的SRAM,给他起名Dynamic RAM.
DRAM的速度比SRAM慢,因此用作主存。
DRAM采用地址复用,访存时先读行地址,再读列地址。
DRAM的刷新 #
三种刷新 #
刷新方式 | 刷新对象 | 时机 | 特点 |
---|---|---|---|
集中刷新 | 整个DRAM | 刷新周期到来时 | 有死区,不影响存取周期 |
分散刷新 | 某一行 | 每个读写周期的后段 | 无死区,但是存取周期变长 |
异步刷新 | 某一行 | 刷新周期/行数作为周期,这个周期到来时 | 缩短了死区,不影响存取周期 |
集中刷新:每次刷新周期到来时,不允许访存,直接对整个DRAM进行刷新。
分散刷新:把对某一行的刷新操作放到存取周期内进行。霸占了存取周期很多时间。这样极大延长了存取周期,效率不高。
异步刷新:不再霸占存取周期时间了,但是每过“刷新周期/行数”时间就得进入一小段死区。
什么是刷新 #
刷新是无需片选的,针对某一行的读写操作。它在无需片选(即可以把所有存储体都选上)的情况下,拿着某一行的地址,先读出来,再写回去。
大端存储和小端存储 #
所谓,即:存储字仍然是从低到高排列,但是这个字内的字节存储如果是大端存储就是正常顺序(即小地址存编号小的字节,大地址存编号较大的字节),如果是小端存储就是逆序排列。如果这些内容超过了一个字长,则在下一个字内部也是这么排。
边界对齐存储 #
如何对齐? #
例如顺序地往次存储器里面放数据,如果不对齐那就是按顺序只要有空就把它填满,如果这一行(即这一个字)没有空间了,就另起一行把剩下的部分写进去即可。如果对齐,那就是如果这个字没有空间了,就直接另起一行写入。(具体写到头部还是尾部要看大端对齐还是小端对齐。)
即:所谓对齐就是一看没空了就另起一行。因为另起一行一定是有空的。
好处 #
以存储字长为4B的机器为例,边界对齐能保证半字一定是2的整数倍,字一定是4的整数倍,这样能使得读取长度<=字长的数据就一次性读出。能够提升读取速度,且做到完全相同的读取速度,提升效率,且能适应指令流水。
缺点是它比较浪费空间。这是一种空间换时间的思想。
如果不边界对齐会怎么样 #
即便读取<字长长度的数据,仍然可能需要2次访存。
多模块存储器 #
为提升访存速度,提出多模块存储器概念。多模块存储器就是像拆电脑拆出来的内存条,其中由多个芯片构成!
单体多字存储器 #
这种存储器由单个存储体构成,区别只是在于这种存储器可以一次性读出多个连续的字。
这对于连续存放的程序很有用,但是不连续的程序就没有意义。
多体并行存储器 #
这种存储器由多个存储体构成,根据编址方式分为高位交叉和低位交叉编址。
高位交叉编址
把高位作为存储体编号。因此,程序仍然连续存放,各个存储器一般无法并行工作,作用不大。因此,这种存储器仍然称为顺序存储器,就是因为程序仍然顺序存放。各个存储体无法交叉工作。
低位交叉编址
它真正实现了存储体的交叉寻址、并行工作。它把低位作为存储体编号。因此可以实现流水线读取。
多体并行低位交叉存储器的流水线读取 #
设总线传输延时r,整个多体并行低位交叉存储器的存取周期为T,设要读取m个字,则需要(m-1)r+T时间。
这个过程中,每个模块的启动间隔是总线传输延时r。
Cache 高速缓冲存储器 #
Cache是SRAM,速度非常快,能与CPU速度匹配。因此放在CPU和主存之间。
程序访问局部性原理 #
时间局部性:由于存在循环,所以当前用到的内容很可能一会也用到。
空间局部性:由于程序顺序存放,所以~
CPU访问主存流程(Cache存在的情况下) #
读:先找Cache,或者同时找Cache和主存。如果Cache里有,就用Cache的(如果也同时找了主存,则同时中断对主存的查找);如果Cache里没有,就去主存找,或继续主存的查找。找到后,把找到的数据**所在的块也写入Cache。如果Cache对应块**位置满,则执行替换算法(LRU、FIFO、RAND算法)。
写:为防止内容不一致,使用全写法和写回法。
注意访问单位 #
CPU对Cache的访问是字为单位,Cache和主存之间的访问是块为单位。
*命中率和平均访问时间计算 #
PDF P136.
*Cache主存地址块映射 #
映射 | 解释 | 块标记 |
---|---|---|
直接映射 | 直接把主存划分成若干Cache大小的区域,每个区域中的块在这个区域内第几块,其映射到Cache内就第几块 | 主存组号+组内块号 |
全相联映射 | 主存内任意的块可以映射到Cache的任意的块 | 主存块号 |
组相联映射 | 主存分成若干区域。每个区域内的第i块只能放在Cache的第i组内。 | 主存区号+Cache组号 |
其他要点 #
存储器的分类 #
随机存储器RAM、只读存储器ROM、串行访问存储器。
或者主存、缓存、Cache。
FlashMemory #
闪存是基于EPROM的,所以实际上是一种ROM。
它像ROM一样,可以不带电保存数据,同时又能具有比ROM高得多的存取速度。
Cache块大小和命中率、效率的关系 #
不是。虽然Cache块越大,局部性原理越透彻,能保证把更大的局部空间进行加速,但是Cache块大了,一次从主存放入Cache的数据过多,速度较慢;并且Cache块大了就意味着Cache块少了,命中率下降。
提高访存速度的措施 #
- 利用层次结构(Cache-主存/主存-辅存)
- 调整主存结构(低位交叉高位交叉)
- 采用高速器件
Chap.5 IO系统 #
IO接口的结构和功能 #
结构 #
组成 | 解释 |
---|---|
数据缓冲寄存器(DBR) | CPU对外设的读写实际上就是对DBR的读写。 |
控制逻辑电路 | - |
设备选择电路 | 设备要知道这个地址是否在访问自己。 |
命令译码器和命令寄存器 | 接收CPU来的命令并执行 |
设备状态标记 | CPU查询时可以得知情况 |
内部接口 | 与系统总线(即CPU和主存)相连。并行传输。 |
外部接口 | 与外设相连。可能是串行的,因此需要串并转换功能。 |
功能 #
接口主机和外设的交接界面。主机和外设在工作方式、速率上有较大差别,于是接口就出来调和它们了:在各个外设和主机之间传输数据时进行协调的结构。协调包括传输速率、电平和格式转换等。
功能 | 解释 |
---|---|
主机和外设的通信联络控制 | 协调它们的时序和速率。 |
地址译码和设备选择 | 设备要知道这个地址是否在访问自己。 |
数据缓冲 | 协调它们的时序和速率。 |
格式转换 | 转换信号的格式。例如模拟-数字转换、串行-并行转换。 |
传送控制命令和状态信息 | CPU给外设命令;外设给CPU状态。 |
IO端口 #
端口是接口中的寄存器,它只具有寄存器的功能。
端口+控制功能=接口。
IO端口的编址方式 #
IO端口的分类 #
数据端口(即数据寄存器,DBR)——可读写的端口。
状态端口(即状态寄存器)——只读端口。
控制端口——只写端口。
统一编址(存储器映射方式) #
把这种寄存器当作内存空间进行编址。
好处:更方便,不需要单独的IO指令。
缺点:速度慢,占用地址空间。
独立编址(IO映射方式) #
这种寄存器的地址独立于内存地址空间。
坏处:需要有专门的IO指令来访问端口。
程序查询方式 #
接口设计 #
主要由DBR、状态端口、命令端口构成。
流程 #
- CPU设置传送参数,发出命令,启动设备;
- CPU不断读取状态段口,直到设备准备就绪;
- 传送一次数据,并让计数器-1,地址参数+1;
- 如果计数器非0,则跳转到2.
评价 #
CPU和外设串行工作,必须中止现有程序并插入一段新程序,CPU原地踏步。且不支持多个外设同时通信。
程序中断方式 #
和查询方式的区别在于:不是CPU去主动查询外设状态了,而是外设自己准备,等着准备好了就告知CPU,请求CPU为自己服务。CPU视当前情况,可以进入中断服务程序为其服务。
外中断和内中断 #
即外设引起的中断和电脑自己产生的中断(例如算术溢出、软件主动要求中断等)。内中断不可被屏蔽、不可被关中断。
中断请求触发器INTR #
此触发器可以在CPU里,也可以分散在各个中断源中。每个中断源占一位。
中断判优 #
用于同时有多个中断请求,CPU去选择一个响应。硬件实现:排队器,可以集中在CPU,也可以分散在各个设备上。软件实现:中断查询程序。
中断响应 #
CPU响应中断的条件:中断比当前中断优先级高;开中断;当前指令执行完毕。
中断隐指令 #
CPU响应中断后,转到中断服务程序。这个过程由硬件实现,所以不是指令实现。但是像一条指令,所以称中断隐指令。
操作 | 解释 |
---|---|
关中断 | 防止后续保存断点的操作被打扰 |
保存程序断点 | 保存PC的值(入栈),便于一会赋值 |
生成中断服务程序入口地址 | 通过软件查询法或硬件向量法生成入口地址,赋值给PC |
中断向量和中断向量地址 #
中断向量是中断服务程序入口地址。每个外设都对应一个中断向量,因为它们的功能各不相同。CPU维护一个中断向量表来作这一点。
中断向量地址是中断服务程序入口地址的地址。
硬件向量法
硬件产生此外设对应的中断类型号,此中断类型号指出了CPU维护的向量表中的中断向量地址。
软件查询法
编程实现~。
保护现场和保存断点的区别 #
前者是包括保存中断屏蔽字(保存屏蔽字是因为一会要设置屏蔽字)、CPU某些寄存器、程序状态字;后者只是PC值而以(提供中断返回地址罢了)。
中断处理 #
操作 | 解释 |
---|---|
执行中断隐指令 | 包括关中断、保存断点、生成服务程序入口地址 |
保护现场 | ~~~ |
置屏蔽字 | ~~ |
开中断 | ~ |
执行中断服务程序 | |
关中断 | ~ |
恢复屏蔽字 | ~~ |
恢复现场 | ~~~ |
中断返回 #
操作 | 解释 |
---|---|
开中断 | ~ |
中断返回 | ~ |
中断屏蔽触发器 #
如果是1则代表屏蔽它。
DMA方式 #
特点 #
- 传送服务完全由接口电路完成(计数、地址确定等),不用CPU去管。
- 主存应设置缓冲区,以及时接收和供给数据。
- 中断请求只用于应对异常情况。
DMA接口的结构和功能 #
- 接收外设的DMA请求,并代替外设向CPU发出DMA请求。
- 控制总线,传输数据。
- 修改计数器,更新主存地址。
- DMA结束时提出中断请求。
结构 | 解释 |
---|---|
主存地址计数器、传送长度计数器 | 修改计数器,更新主存地址。 |
DBR | - |
DMA请求触发器 | 表示DMA请求 |
控制/状态逻辑 | 指定传送方向,对CPU响应信号进行协调同步 |
中断机构 | DMA传送完成,提出中断 |
DMA传送方式——周期挪用 #
- 如果CPU当前没在访存,则DMA直接霸占。
- 如果CPU正在访存,则CPU存取周期结束后就让出总线控制权。
- 如果CPU和DMA同时想要访存,则让给DMA一个或几个访存周期。
DMA传送过程 #
过程 | 解释 |
---|---|
预处理 | 即CPU完成一些必要工作和DMA请求的发出。首先,CPU发出一些IO指令,测试设备状态;然后,设置有关端口的初值,设置传送方向,启动设备。CPU继续执行原有程序,当DMA设备准备就绪,就给DMA接口发送DMA请求,DMA接口再给CPU发DMA请求。 |
数据传送 | 完全由DMA接口控制数据的传送。 |
后处理 | **即DMA接口发出中断请求,由服务程序进行结束处理。**这里,中断服务程序要做的包括校验数据(如果出错则进入诊断程序)、是否继续使用DMA等。 |
其他要点 #
接口的分类 #
接口分类标准 | 解释 |
---|---|
串行和并行接口 | 外接口支持的类型。(注意,不是内接口。因为内接口永远是并行。) |
程序查询接口、程序中断接口、DMA接口 | 按主机访问IO设备的控制方式。 |
可编程、不可编程接口 | 灵活性 |
DMA其他的传送方式 #
停止CPU访问数据总线——CPU直接停止程序,保持现有状态。
DMA和CPU交替访问——对数据总线进行时分多路复用TDM。
DMA方式VS程序中断方式 #
- DMA方式只有预处理和后处理占用CPU资源,DMA传输只需要DMA接口的控制。
- DMA请求可以在任何机器周期被响应,只要CPU不占用总线就能响应。
- DMA请求的优先级高于中断请求。
- DMA方式依赖于中断方式,因为需要提出中断请求以结束DMA传送,并进行后处理。
Chap.6 运算方法 #
定点数原反补移码 #
注意,纯小数的最低位是2^(-n),但是整数的最高位是2^(n-1).
码 | 表示范围 |
---|---|
无符号数纯小数 | 表示格式是0.XXXXXX,其中一位用来做符号位,只有n位有效,所以是[0,1-2^(-n)].(类比原码纯小数。) |
无符号数整数 | 表示格式是XXXXXX,不存在符号位,全n+1位都有效,所以是[0,2^(n+1)-1] |
原码纯小数 | n+1位字长,则小数点后面有n位,则最低位表示的数字是2^(-n),则小数点后面全1就是小数点后面全0再减去2^(-n),即1-2^(-n)。又因为符号位单独作用,所以存在正0和负0问题,所以最终是[-(1-2^(-n)),1-2^(-n)]. |
原码纯整数 | n+1位字长,则除去符号位有n位,最高位代表2^(n-1),则得到全1应该用全0,即2^(n)减去1(最低位1),即2^n-1.又因为符号位单独作用,所以存在正0和负0问题,所以最终是[-(2^n-1),2^n-1] |
反码纯小数 | 只是取反了,和原码没有区别,仍然存在正0负0,仍然是[-(1-2^(-n)),1-2^(-n)]. |
反码纯整数 | 只是取反了,和原码没有区别,仍然存在正0负0,仍然是[-(2^n-1),2^n-1] |
补码纯小数 | 去掉了负0的问题,匀给了-1,即[-1,2^n-1] |
补码纯整数 | 去掉了负0的问题,匀给了-2^n,即[-2^n,2^n-1] |
移码纯小数 | 小数不存在移码。 |
移码纯整数 | 只是补码符号位取反,和补码没有区别,即不存在负0问题,即[-2^n,2^n-1] |
注意,移码只是以2^n平移了真值。因此,移码大,真值就大。(如果把整个码都看成无符号数)
定点数溢出 #
上溢出和下溢出 #
例如定点小数的表示范围是[-(1-2^(-n)),1-2^(-n)],则如果得出>=1的结果,超出了上述表示区间上限,称为上溢出;得出<=-1的结果,超出了上述表示区间下限,称为下溢出。
溢出处理 #
对于定点小数,只要溢出就是出错。(但是浮点小数不算出错。)
溢出出现的前提 #
溢出只有在两个同符号数运算时发生。
溢出的判断方式 #
- 单符号位判断:改变即溢出
- 双符号位判断:相互不同即溢出
- 符号位进位和数据位进位判断:相互不同即溢出
浮点数溢出 #
两侧溢出 #
浮点数溢出和定点数溢出的最大不同在于:浮点数要分成正、负两种上溢和下溢。它的溢出图是两段式的。
溢出处理 #
尾数溢出和阶码溢出:如果尾数溢出,则没有问题,可以通过右规解决;如果阶码溢出,那是真溢出了(如果大于最大,则机器停机;如果小于最小,则按机器0处理)。
浮点数规格化 #
从提升精度角度考虑规格化的定义 #
为了提升浮点数的精度(尾数有效位数越多,精度越大),要求尾数最高位必须是有效值。所谓有效值,就是1.(补码看情况也许为0.)
左规 #
左规只会出现在浮点运算完成后。
把运算完成后,不规格的数字变成规格的即可。
可能需要左规多次。
右规 #
右规只会出现在浮点运算溢出时。
浮点运算溢出,符号位不相同了,但是最高符号位表示真的符号位,所以右规即可。
如果右规,必然只需要右规一次。
浮点运算的一般步骤 #
步骤 | 解释 |
---|---|
对阶 | 先求阶差,然后小阶看大阶(右移会影响精度) |
尾数求和 | 对尾数进行定点纯小数运算 |
规格化 | 尾数溢出则右规(右移会影响精度),尾数过小则左规 |
舍入 | 由于右移会影响精度,如果把1移没了,则在移后的最低位+1(0舍1入法)(可能又得右规);或者直接让最低位=1(恒置1法). |
溢出判断 | 根据浮点数的溢出定义进行判断。如果阶码上溢出,则溢出了;如果阶码下溢出,则按机器0处理。(此是尾数是必然不可能溢出的,因为已经右规和舍入完成) |
74LS181 算术逻辑单元 #
可实现16种逻辑运算、16种算术运算。其中,加法器是并行加法器。
海明码 #
n+k<=2^k-1.
构造校验后的数据 #
- 确定位数:取上述k。
- 确定校验位分布:取2^i-1.因此,分别在第1,2,4,8,…位上。
- 确定分组:例如原数据第3位,3拆成011,则由校验位1和校验位2检验(因为第1位和第2位是1)。
- 算出各校验位的值:根据上述分组,可以知道原数据每一位由哪些校验位。我们反过来看,对于每个校验位,它校验了哪些数据位,然后把它校验的这些数据位XOR(也就是根据偶校验的规则对于它的数据进行校验),就得到这个校验位的值。
检验是否出错 #
同上述步骤4,找出每个校验位对应的校验对象,做XOR,看结果是否为0.(即看它们是否符合偶校验的规则。)
例如,最终把各个校验位和它们校验对象XOR得出的结构按从高到低位排列,例如如果是000则没错,例如如果是011则原数据第三位错了。
注意 #
数据的最低位都是“第一位”,而不是“第0位”。
其他要点 #
算法 | 加法次数和移位次数的关系 |
---|---|
原码一位乘法 | 最后移位后一定不需要加法了 |
校正法 | 最后移位后如果需要校正还需要加X的反补码 |
Booth算法 | 最后移位后必然需要加法,加X的反补码,X的补码或+0 |
校正法 #
- 无论被乘数的符号如何,就直接当成原码乘法算。最后看如果乘数为正,则不管;如果乘数为负,则要加X寄存器的数的原码的相反数的补码(即[-X]补)校正。
- 如果一正一负相乘,则把负的那个当作被乘数,这样可以不考虑校正。因为算法与被乘数无关。
- 补码乘法要采用算术移位,因为符号参与运算。
- X和ACC都采用双符号位(高符号位用于计算符号,低符号位兜进位),MQ仍然是无符号数。
- 注意双符号位11和11相加,如果低位没有进位则得10.
- 为什么要对乘数的正负进行讨论?因为MQ不存在符号位,这会出现问题;而ACC自带符号位,所以符号位没有问题。
Booth算法 #
- 仍然采用校正思想,每次都进行校正,因此仍然采用X寄存器内的反补码和补码。每一轮加的就是X寄存器内的反补码和补码。
- 每一轮通过“辅助位-MQ最低位”的值来判断。如果为1则+X寄存器补码,如果为-1则+X寄存器反补码。如果为0则什么也不做。
- MQ增加了两位,分别是符号位和附加位,分别在原n位的MQ的基础上,在最高为左边和最低位右边添加,从而成为n+2位MQ的新的最高位和最低位。
- ACC和X寄存器仍然采用双符号位,算术移位。
- 仍然按原码一位乘法判断结束,即原来MQ中的值都被移走了(这里是都被移动到附加位及其右边去了)。区别在于,当完成原码一位乘法中的最后一次移位后,还需要再进行一次加法。
计算机为什么不能精确表示数字 #
对于整数,只要字长足够就可以表示;但是小数不可以。因为小数都是以1/2^n的加法组合进行表示的。显然0.1无法被表示。
字长相同的情况下,定点和浮点表示的优劣 #
定点利用了全部字长来表示这个小数,精度很高;
浮点数划分了一部分作为阶码,扩充了表示范围,但是相应地,尾数变短了,精度下降。
为什么用IEEE 754移码表示阶码,用原码表示尾数 #
- 因为移码方便比较大小,它只是平移了原码。
- 因为n+1位的移码表示范围还是[-(2^n-1),2^n-1],加上2^n就是[1,2^(n+1)-1]。如果判断下溢,则判断阶码是否为0,就知道是否下溢了。
相同位数的定点数和浮点数,表示的数据个数是一样多的 #
因为编码的状态个数完全相同。
它们的区别只是精度上的区别。浮点数用精度换取了范围。
Chap.7指令系统 #
指令的一般格式 #
指令 | 格式 | 例 |
---|---|---|
零地址 | OP | 停机指令(无需操作数);栈运算(从栈顶弹出操作数,隐含操作数) |
一地址 | OP|A | 只有目的操作数或隐含另一个操作数 |
二地址 | OP|A1|A2 | 俩操作数 |
三地址 | OP|A1|A2|A3 | 俩操作数,A3是结果 |
四地址 | OP|A1|A2|A3|A4 | 俩操作数,A3是结果,A4是下一条指令地址 |
扩展操作码 #
定长操作码的坏处:不能兼容多种指令格式。每条指令的操作码长度是固定的。
为了丰富指令格式,引入扩展操作码。
扩展操作码的作用在于在指令字长一定的情况下,分出各种不同地址数量的指令。例如零地址、一地址、……。
基本原理就是把不属于这一类指令的字段用1填充,用以区分。属于其前缀的指令就不能采用全1操作码,以防冲突。
例如如果希望每种指令都是15种,字长16位,则:
指令格式 | 例 |
---|---|
三地址 | 0000 XXXX XXXX XXXX-1110 XXXX XXXX XXXX,15条 |
二地址 | 1111 0000 XXXX XXXX-1111 1110 XXXX XXXX,15条 |
零地址 | 1111 1111 1111 0000-1111 1111 1111 1111,16条 |
注意,零地址会多一条。
寻址方式 #
有效地址和形式地址 #
写在地址码部分的地址可能不是真实地址。因此,可以通过寻址方式,计算形式地址得出有效地址。有效地址才是真实地址。
主要寻址方式 #
指令寻址和数据寻址。
指令寻址包括顺序寻址和跳跃寻址,前者是PC+1,后者是JMP。
数据寻址即通过地址码计算出有效地址。
数据寻址 #
数据寻址方式 | 解释 |
---|---|
隐含寻址 | 例如加法之前先把数存到ACC里面 |
立即数寻址 | 地址码就是操作数本身 |
寄存器寻址 | 地址码字段存放的是寄存器的名称。操作数在寄存器里。 |
寄存器间接寻址 | 加速版本的间址。即:把有效地只放在某寄存器中,访问此寄存器即可找到真实地址。地址码字段存放的是寄存器的名称。 |
相对寻址 | PC内容加地址码字段就是有效地址。 |
基址寻址 | 扩大寻址范围,有利于多道程序和浮动程序的设计。基址寄存器内容由操作系统决定。使用哪个作为基址寄存器可由用户决定。 |
变址寻址 | 扩大寻址范围,便于数组处理和循环程序。 |
堆栈寻址 | CPU内有特定的栈顶寄存器SP指出堆栈读写单元的地址。 |
基址寻址和变址寻址的区别 #
两者的区别是:基址寻址的地址码是可变的,意思是基址是首地址,地址码是机动指针;变址寻址的操作码是不可变的,意思是操作码是首地址,变址是机动指针。
其他要点 #
指令长度 #
指令长度可以等于机器字长(这样操作比较简便),也可以是单字长指令(等于机器字长),半字长指令、双字长指令。
Chap.8,9,10 CPU结构和功能、CU #
CPU的结构 #
ALU #
结构 | 功能 |
---|---|
算术逻辑单元(ALU) | 运算 |
移位器 | - |
暂存寄存器 | 暂存从主存读取的内容。(一般不可直接放在某些寄存器中,怕破坏其内容) |
累加寄存器(ACC) | 1.暂存ALU运算的信息;2.作为加法运算的一个操作数。 |
通用寄存器组(X等) | 存放ALU运算信息以及作为操作数; |
程序状态字寄存器(例如溢出标识OF,符号标识SF…) | 状态信息 |
计数器 | 控制诸如乘法运算等进程 |
CU #
结构 | 功能 |
---|---|
程序计数器(PC) | 下一条指令地址 |
指令寄存器(IR) | 当前正在执行的指令本身 |
指令译码器 | 翻译操作数字段,从而提供操作信号 |
存储器地址寄存器(MAR) | - |
存储器数据寄存器(MDR) | - |
时序系统 | 由统一的时钟控制的系统,用于产生各种时序信号 |
微操作信号发生器 | 根据CLK、IR、状态信息,产生控制信号,分为组合逻辑型和微程序型 |
指令周期 #
指令周期、机器周期和节拍(时钟周期) #
CPU完成一条指令的时间。包括取指、间址、中断、执行。其中,上述四个小周期称为机器周期。每个机器周期又分为若干时钟周期。时钟周期是电脑执行操作的最小时间单位,又称节拍。
取指、间址、中断、执行周期都需要访存。即取指令、取有效地址、取操作数、保护断点。
这四个周期都通过触发器表示出来。处在某一周期,则此周期对应的触发器的值为1.
微程序控制器的基本概念 #
我的CPU实验中的二进制串是微指令,其中每一位都是微命令。微地址就是我的PC中从1开始加。微周期就是我按CP之间的间隔。
“微” | 解释 |
---|---|
微操作 | 计算机中最小的操作单位。 |
微命令 | 一条微操作实现一条微命令。 |
微指令 | 一条微指令包含若干微命令。 |
微周期 | 取微指令的时间+执行其所有微操作的时间。 |
微地址 | 控存中存放微指令的地址。 |
微程序 | 一个机器指令由一段微程序实现。 |
微指令的格式 #
水平型微指令 #
操作控制字段+顺序控制字段。即操作码+下地址。操作码就是我那些二进制串,下地址用于产生下一条微指令的地址。
微指令的直接编码方式,字段直接编码方式和字段间接编码方式 #
直接编码就是我做实验用的那种:每一位代表一个微操作(微命令)是否有效。
字段直接编码方式就是把互斥的微命令分到同一组,作为一个字段,然后对其进行编码,然后读取的时候分别对这些字段译码。要注意字段不能过长否则译码过慢,而且要留出全0作为“什么也不执行”。
字段的一些微命令需要由其他字段来解释。这削弱了并行性。
垂直型微指令 #
每条微指令只能对应一个微操作。这就类似于机器指令的结构了。但是效率过低。
混合型微指令 #
在垂直型微指令的基础上,加上若干并行操作。
#
微地址的形成方式 #
- 下地址直接给出;(断定方式)
- 机器指令译码给出;
- uPC+1给出;
- 外界标识位输入决定;
- 网络测试给出;
- 硬件直接给出;(例如电脑开机的第一条地址,就是硬件直接给出。它就是0号微地址,也就是取指周期的微程序入口)
其他要点 #
为什么中断周期的进栈是SP-1 #
因为计算机中的栈是向低地址增大。因此栈扩大,则SP得-1.
指令的单周期、多周期、流水线方案 #
单周期就是定长周期,所有指令不管是否复杂,其指令周期长度都和所有指令中最花时间的那个指令一样长。
多周期就是变长周期,所有指令都可以有适合自己的指令周期长度,即需要多少时钟周期,就分配多少时钟周期。
流水线方案即让指令尽量并行执行,它在每个时钟周期启动一个指令周期,期望每个时钟周期都能完成一个指令周期。让不同的指令同时在自己的指令周期中,但是它们所处的阶段不同。
一般认为取指周期等于机器周期 #
机器周期是一个基准时间,一般等于CPU访问一次主存的最段时间。因此,如果存储字长=指令字长,则取指周期等于机器周期。
CU的输入信号 #
- 指令译码器的指令信息
- CLOCK
- 程序状态信息
CPU控制方式 #
控制方式 | 解释 |
---|---|
同步控制方式 | 有统一的时钟信号:以最慢的指令作为基准。以后就统一按这个信号作为基本单位。控制单元简单,但是执行慢。 |
异步控制方式 | 没有统一的信号,合干戈的。控制单元复杂,但是执行块。 |
联合控制方式 | 大部分指令采用同步控制,少部分指令采用异步控制。 |
微程序控制器的工作流程(关于取指周期微程序) #
- 将公共的取指微程序入口送入CMAR,一般这个地址都是0号单元。执行公共的取指微程序。
- 取到指令后,通过微地址形成部件形成此指令的微程序的入口地址,送入CMAR。
- 执行此微程序。
- 回到1.
除了取指周期微程序,还可以加入其它机器周期的微程序。
因此,如果机器的指令集为n,那么至少有n+1段微程序。