计算机组成原理补充疑难点
¶第一章 - 计算机系统概述
-
计算机硬件发展:
电子管 ➡ 晶体管 ➡ 中小规模集成电路 ➡ 超大规模集成电路
-
数据库管理系统(DBMS)是操作系统软件,数据库系统(DBS)是用户软件。
-
计算机系统结构
- 软硬件逻辑上等效
- 计算机硬件结构:
- 冯·诺伊曼机:
- 运算器为中心
- 包括:运算器、存储器、控制器、输入设备、输出设备
- 特点:后面学的都是冯·诺依曼机,有什么特点看对不对的上就行
- 现代机:
- 存储器为中心(最慢的部分放在首位)
- I/O操作尽可绕开CPU
- 冯·诺伊曼机:
- 语言层次:
高级语言 ➡ 汇编语言 ➡ 机器语言
-
计算机的工作过程 - 1:(看看就行,后面会详细)
0: 刚开始时,PC = 0
,即当前要执行的指令的地址在0号主存地址.
1:PC -> MAR
,控制器通过地址总线告诉内存(主存储器)要取的数据,导致MAR = 0
.
2&3:MAR -> 存储体 -> MDR
,取出数据到MDR,导致MDR = 000001 0000000101
.
4: 控制器通过总线取走MDR的数据,存放到IR,导致IR = 000001 0000000101
.
5: CU控制单元取走IR的操作码部分,CU因此得知这时取数指令.
6:IR -> MAR
,控制器将IR的地址码发给MAR,导致MAR = 5
.
7&8:MAR -> 存储体 -> MDR
, 导致MDR = 0000000000000010 = 2
.
9:MDR -> ACC
,控制器取出MDR数据到累加寄存器ACC中,导致ACC = 0000000000000010 = 2
.
10:上一条指令执行后PC = PC+1
. -
计算机的工作过程 - 2:(重点!!!)
- 执行指令的工作流程:
- 取指令
- 指令译码、执行指令(取操作数、运算等)
- 完成指令,取下一条指令
- ⬇不放图,图要记在脑海里!!!⬇
- 各阶段寄存器数据流动方向:
- 取指令:
PC ➡ MAR、MAR ➡ M主存 ➡ MDR、MDR ➡ IR
同时PC+1 ➡ PC
- 分析指令:
OP(MAR)➡ CU
,指令的操作数部分放入控制单元CU - 执行指令:
Ad(IR)➡ MAR、MAR ➡ MDR、MDR ➡ ACC
(执行过程各不相同、以加法指令为例)
- 取指令:
- 执行指令的工作流程:
-
计算机的多级层次结构(简单了解):
- 上层分别是
高级语言 ➡ 汇编语言 ➡ 机器语言
,下层是微程序 ➡ 微指令
- 上层分别是
-
各硬件(记忆):
- 运算器:ACC累加寄存器、ALU算术逻辑单元、MQ乘商寄存器、X通用寄存器(可通过编程变成其它寄存器)、IX变址寄存器(理解为可随意改变的基址,IX+A就是当前地址)、BR基址寄存器、PSW程序状态寄存器
- 存储器:MAR(存储地址寄存器)、MDR(存储数据寄存器)
- 存储器结构:
存储元件(1bit) ➡ 存储单元(1B或者1B的偶数倍,这个数值就是存储字长)
- MAR标志地址,所以其位数对应着存储单元的个数,如
MAR = 10bit,存储单元 = 2^10 = 1024个
- MDR标志数据,所以其位数一般是存储字长或者存储字长的
2^n
倍
- 存储器结构:
- 控制器:IR指令寄存器(当前指令)、PC程序计数器(下一条指令地址)、CU控制单元
-
计算机性能指标:
- 机器字长:一次整数运算的数据的最大位数,一般情况下等于内部寄存器(ACC等)的位数
- 数据通路带宽:数据总线一次能够传输数据的位数(此处指外部数据总线,而非CPU内部总线)
- 主存容量
- 运算速度(理解):
- 吞吐量:单位时间内处理请求的数量,主要取决于主存速度
- 响应时间:发送请求到收到响应的时间
- 主频:CPU单位时间内的时钟周期数
- CPI(Clock Per Instruction):一条指令占用周期数
- CPU执行时间:一个程序消耗时间
- 计算能力:
- MIPS:每秒(PS)多少百万条指令(MI)
- MFLOPS:每秒多少百万次浮点运算,十亿(GFLOPS),万亿(TFLOPS)
¶第二章 - 数据的表示和运算
-
海明码补充知识点(详细请查看计网-海明码) :
-
进制转换:
2 ➡ 8/16
:小数点为分界线,每3或者4位为一组分别计算,不足3或4位就补08/16 ➡ 2
:小数点为分界线:每1位都写成3或4位二进制数(不足就补0)任意 ➡ 10
:每项乘权值求和10 ➡ 任意
(重点!!!):- 整数部分(除基取余法)
- 小数部分(乘基取余法)
-
字符串编码(已删):- ASCⅡ编码:7b
- 0~31:控制字符
- 127:DEl
- 48~57:0~9
- 65~90、97~122:A~Z、a~z
- 汉字的表示和编码:
- 每个编码2个字节
- 输入编码(计算机输入)、汉字内码(计算机处理,坐标)、汉字形码(计算机图形输出)
- 大端和小端:
- 整数127(十进制)在计算机(64位)中大/小端字节序
- ASCⅡ编码:7b
-
校验码:奇偶、CRC、海明码,参考计网
-
定点数的表示(重点!!!尤其补码!!!):
- 定点整数
- 定点小数
- 原码的表示范围:
- 最小负全1,最大正全1,用幂次累加和公式计算 - 反码的表示范围:正不变、负全变
- 补码:正不变、负全变并+1(补码到原码也是这个!)
- 整数:
- 在原码当中,“+0”
0 000 0000
和“-0”1 000 0000
表示同一个数 - 即0的反码可以表示成“-0”
1 111 1111
和“+0”0 000 0000
,反码中“-0” + 1 = “+0”
,这样负数对于的反码整体“+1右移”,使0不再重复,解放出一个最小值-2^n
- 在原码当中,“+0”
- 小数:
-
- 在原码当中,“+.0”
0 . 000 0000
和“-.0”1 . 000 0000
表示同一个数
- 在原码当中,“+.0”
- 即0的反码可以表示成“-0”
1 . 111 1111
和“+0”0 . 000 0000
,反码中“-.0” + 0 . 000 0001 = “+.0”
,这样负数对于的反码整体“+.000 0001右移”,使.0不再重复,解放出一个最小值-1
-
- 符号相同时,补码数据部分越大,码值越大
- 模4补码:2位符号数;模2补码:1位符号数
- 整数:
- 移码:补码符号位取反
- 本质上是加上一个2^n使得符号取反,所以不可用于纯小数
-
定点数的移位运算
- 算数移位(符号位不参与运算)(重点!!!但只记图,下面的理解为主):
- 正数:正数的原码、反码、补码相同,均移位添0即可
- 负数:
- 原码:移位添0
- 反码:反码数据位正好与原码相反,所以原码是移位添0,反码就应该移位添1
- 补码:负数补码当中,最右边的1及其右边同原码、左边同反码,所以左移应该同原码补0,右该同反码补1
- 逻辑移位:不管操作数,看出无符号数,左右移都添0
- 循环移位
- 不带进位位的循环左移将最高位进入最低位和标志寄存器位
- 不带进位位的循环右移将最低位进入最高位和标志寄存器位
- 算数移位(符号位不参与运算)(重点!!!但只记图,下面的理解为主):
-
定点数的加减运算
- 原码:
- “正+正”或者“负+负”可能溢出
- 补码(可以直接运算)(重点!!!):
- 溢出判断
- 原码:
-
符号扩展(理解为主):
-
定点数的乘法运算(要会算!!!):
- 乘法可以用加法和移位运算实现
- 原码乘法:
- 符号位异或确定
- 手算:直接乘
- 手算模拟ALU
- 补码乘法模拟ALU:
- 原码除法运算
- 补码除法运算
-
浮点数的表示(超重点!!!每个概念都要搞懂)::
- 如
+11 +3.026
或者+15 +0.0003026
- 浮点数尾数部分规范化:
- 原码
- 补码
- IEEE 754:
- 移码的定义是
移码 = 真值 + 偏置值
,一般偏置值 = 2^(n-1),这时刚好移码 = 补码符号位取反
- IEEE 754的偏置值是
2^(n-1) - 1
- 例子:
- 移码的定义是
- 如
-
数据存储:
- 边界对齐方式和边界不对齐方式
- 注意!边界对齐方式是不足字或半字就立即填充,而不是在最后填充
- 如
A(4B)、B(1B)、C(2B)
应该填充为A(4B)、B(1B)+T(1B)、C(2B)
而不是A(4B)、B(1B)、C(2B)+T(1B)
- 边界对齐方式和边界不对齐方式
-
ALU算术逻辑单元:也就是数字电路课上的小芯片.
- 电路从左到右分别是:
与、或、非
与非、或非、异或
- 标志位(CF、OF、ZF、SF):
- CF(进位/借位标志)
- OF(Overflow Flag、溢出标志):符号位进位⊕最高位进位
- ZF(Zero Flag、零标志)
- SF(符号标志):和的符号
- 电路从左到右分别是:
习题1:
习题2:
- 补码
1000 0000
的原码是1000 0000
,原码里表示-0,补码中表示-128,所以转成原码会产生溢出
习题3:
¶第三章- 存储系统
-
存储器的层次结构
- 外存中的程序要执行必须先调入主存
-
RAM和ROM:
- RAM(随机存储器):
- 随机存取,用于高速缓存存储器(如内存)
- 易失性
- ROM(只读存储器):
- 只能读不能写(狭义上),随机存取(广义上,在写入上有某些限制);
- 和随机存储器一起构成主存,存储某些固定不变的程序(如BIOS);
- 非易失性
- RAM(随机存储器):
-
存储器的性能指标:
- 大容量、低成本、高速度
存储容量 = 存储字数 * 字长
单位成本 = 总成本 / 总容量
- 存储速度
数据传输率 = 数据宽度 / 存储周期
-
半导体存储芯片(半导体存储器)组成结构:
- 图中是一种拓展方式,还有其他方式
- 读写控制器:决定读还是写操作
- 片选器:决定哪个芯片被选中(用来存取数据)
- 地址线:决定要读写数据位于芯片中的哪些存储单元
- 数据线:双向(读写),位数与读写数据的位数有关
- 数据线数与地址线数共同反应存储芯片容量大小
-
SRAM和DRAM
- 都是半导体随机存储器,SRAM用于高速缓存(Cache),DRAM用于主存(内存)
- SRAM(静态RAM):
- 使用双稳态触发器(六管MOS)记忆信息
- 非破坏性读出,但具有易失性(信息很快就会自己消失)
- 存取速度快(Cache比主存快)、集成度低、功耗大、成本高
- 行列地址同时发送(DRAM是先行后列)
- 习题:
- 地址线
1024 = 2^10,10根
,
- 地址线
- DRAM(动态存储器):
- 使用电容存储信息
- 破坏性读出,且有易失性(电容难以长时间留住电荷,需要充电)
- 存取速度慢(相对SRAM)、集成度高、功耗低、容量大、成本低
- 分别送行列地址
- 刷新(DRAM特有,单位是行):
- 集中刷新
- 固定时间刷新、存在死区(一段时间内无法访问DRAM)
- 但读写速度快,读写不会受到刷新影响(指读写的过程中被刷新)
- 分散刷新
- 分时刷新/读写、没有死区(分时,宏观下没有死区)
- 存取周期长、降低整机速度
- 异步刷新
- 相当于读写占用时间片更多的分散刷新
- 减小了死区
- 透明刷新:刷新安排在译码阶段,不存在死区
- 集中刷新
- SRAM与DRAM对比(理解!!!):
-
存储器的读写周期:
- RAM读周期:存储器连续两次读操作时(读开始到下一次读开始),必须间隔的时间
- RAM写周期:存储器启动到数据线上的数据全部可靠地写入存储器的时间
-
闪存(FLASH)和固态(SSD)
-
主存与CPU连接(总线、容量扩展/集成、片选)(超重点!!!):
- 连接:数据总线、控制总线、地址总线
- 细分下来又有:读写命令线“WE/WR”(控制),片选线“CS/CE”(地址)
- 主存容量的扩展:
- 位扩展:
- 1B中每1b所在的存储芯片都不同
- 并联、每次同时读取8个存储芯片的一位
- 地址总线不变,数据总线n倍
- 字扩展:
- 8B中每1B所在的存储芯片都不同
- 串联、每次读取1个存储芯片的一字节
- 数据总线不变,地址总线n倍
- 字位同时扩展:
- 8B中每1B所在的存储芯片都不同,同时1B中每1b所在的存储芯片都不同(图中只分成4位,每4b不同)
- 串联+并联、每次从1组存储芯片中同时读取该组所有芯片的1位
- 位扩展:
- 片选:
- 线选法:几个存储器就几根地址线,哪根地址线“亮了”就选择哪个存储器
- (译码)片选法:加个译码器,如
01
是1号、10
是2号,这样4个存储器只需要2根线而非4根线。
- 连接:数据总线、控制总线、地址总线
-
双端口RAM和多模块存储器(理解):
- 双端口RAM:
- 多模块存储器:
- 普通存储器:每行为一个存储单元
- 单体多字存储器:每个存储单元存储m个字,总线宽度也为m个字,一次并行读出m个字
- 多体并行存储器:每个模块都有相同的容量和存取速度,各个模块都有独立的读写控制电路、地址寄存器、数据寄存器
- 高位交叉编制:
- 本质上仍是顺序存储器
- 低位交叉编址:
- 可使用流水线方式
- 试想:连续访问
00000、00001、00010、00011、00100
时,对于高位交叉编制,依然是顺序地一直访问一个存储器,而低位交叉编址则是并行访问多个存储器。
- 高位交叉编制:
-
Cache和主存的映射
- 直接映射:每个主存块只能放在特定Cache块
- 全相联映射:每个主存块可以放在任意Cache块
- 组相联映射:每个主存块可以放在特定Cache组中的任意Cache块
-
Cache写策略(命中:Cache中是否有所需数据)(理解):
- 写命中:全写法(同时写入主存和Cache)、写回法(只修改Cache,不立即写入主存)
- 写不命中:写分配法(加载内存块到Cache,然后修改Cache)、非写分配法(只写入主存、不调入Cache)
- 多级Cache(通常三级,L1、L2、L3缓存):离CPU越近的Cache越快,容量一般越小。
- 可以避免因频繁写造成的写缓存饱和溢出
-
虚拟存储器(超重点!!!):
- 问题引出:
- 磁盘可能有坏道,这会影响数据的连续存储,怎么让数据跳过坏道实现”连续存储“?
- 多根内存条,每个内存条都有自己的从零开始的实际物理地址,怎么区分不同内存的”相同地址“?
- 多个磁盘,有的磁盘需要和其他磁盘合并为一个虚拟磁盘,有的磁盘需要划分出多个虚拟磁盘,怎么将虚拟磁盘的地址映射到实际磁盘物理地址?
- 页式虚拟存储器:以页(大小相等)为基本单位
- 地址变换过程
- 根据虚拟地址中的虚页号加上页表基地址,去页表找到对应的物理页号
- 物理页号+页内地址即可找到实际物理地址
- 段式虚拟存储器:以段(大小不等)为基本单位,其它基本与页式存储器类似
- 地址变换过程
- 问题引出:
-
存储系统大题(超重点!!!):
- Cache行的完整构成:
Tag(标记)、V(有效)、替换信息、行号、组号、脏位、块内数据、块内地址
- 影响Cache行构成的因素:
PA位数、Cache总行数、Cache块大小、Cache-主存映射方式、写策略、替换算法
- Tag标记:受到PA(物理地址)位数、Cache块大小(块内地址位数)、Cache行数(组号/行号)、映射方式的影响(4者唯一确定Tag标记位数):
- 全相联:
- 直接相联(相当于1行就是1组):
- 组相联:
- V有效位:一定是1个比特
- 替换信息:
- 随机替换:0 bit
- LRU:N个比特,N是:
- 直接映射:0 bit
- 全相联:log(2,Cache总行数) bit
- 组相联:log(2,Cache路数/组内行数) bit
- 脏位:
- 写回法:1 bit
- 直写法:0 bit
- Tag标记:受到PA(物理地址)位数、Cache块大小(块内地址位数)、Cache行数(组号/行号)、映射方式的影响(4者唯一确定Tag标记位数):
- 例题1
- Cache行的完整构成:
注意地址线数与地址位数的区别!!!,以下可能用"位"但实际是"线".
习题1:
- 注意是问的芯片引脚,不是存储器线路
习题2:
- 4行2列,每行
2k × 8位
,即每行地址数2^11 = 11位
,0B1F = 0000 1011 XXXX XXXX
舍弃后11位是0000 1
即第二个(第一个是0)芯片,其地址是…
习题3:
4K = 12线
而不是16K = 14线
,想想看增加了4倍的存储单元(存储单元的位数增加了2倍),需要额外2根片选线(相当于地址线,但因为多个芯片不是整体而是组合,实际上是控制线)来定位.
习题4:
- 注意不是芯片扩展,而是芯片内存储单元阵列!
- DRAM的行列地址线共用,所以行列数尽可能接近,同时DRAM按行刷新,行要少.
习题5:
- 用流水线做!
习题6:
习题7:
习题8:
- 主存地址32位,即物理地址32位,直接映射(行号10位),块内地址(4bit),所以
Tag = 32 - 10 - 4 = 18位
;回写(脏位1bit),有效位(1bit),一共20位,Cache索引位一共20位 × 2^10 = 20K
,数据位4K*32=128K
¶第四章 - 指令系统
-
指令格式(了解!):半字长指令、单字长指令、双字长指令: 指令长度是机器字长的多少倍
- 指令字长会影响取指令所需时间。如: 机器字长 = 存储字长 = 16bit, 则取一条双字长指令需要两次访存
- 零地址指令:
OP
- 空操作、停机、关中断
- 一地址指令:
OP A1
- 只有目的操作数的单操作数指令(+1、-1、求反、求补)、隐含约定目的地址的双操作数指令
- 二地址指令:
OP A1 A2
- 算数和逻辑运算指令
- 三地址指令:
OP A1 A2 A3(结果)
- 运算结果存放在A3
- 需要四次访存:取指令、取操作数×2、存放结果
- 四地址指令:
OP A1 A2 A3(结果) A4(下址)
- 相对于三址多了下一条执行命令的地址A4
-
定长操作码(RISC)、扩展(不定长)操作码(CISC)
-
指令寻址和数据寻址(重点!!!):
- 指令寻址:
- 顺序寻址:通过程序计数器PC自动+1,生成下一条指令地址
- 跳跃寻址:结果是修改当前指令的PC值
- 数据寻址(在指令中标记操作数的地址、操作码+地址(寻址特征+形式地址A)):
- 隐含寻址:不给出操作数地址,而是指令中隐含。
- 比如ALU中加法需要取一个数,另一个数隐含
- 不访存
- 立即(数)寻址:形式地址A就是操作数本身
- 不访存
- 直接寻址:形式地址A就是真实地址
- 访存一次
- 间接寻址:形式地址A给出的是存有操作数地址的地址(套娃)
- 具体看几次间接寻址
- 寄存器寻址:形式地址A给出操作数所在的寄存器编号
- 不访存
- 偏移寻址(区别在于偏移的”起点“不同):
- 相对寻址:以PC为起点
- EA = (PC) + A
- 形式地址A是相对于PC的偏移量
- 基址寻址:以程序起始地址为起点
- EA = 基址寄存器的内容(BR) + 形式地址A
- 基址寄存器BR的内容由操作系统指定,即使指定通用寄存器X为基址寄存器BR,其内容仍由操作系统指定。
- 变址寻址:程序员自己决定起点(通过修改IX而非PC,修改PC的是跳跃寻址)
- EA = 变址寄存器(IX) + 形式地址A
- 通用寄存器X可作变址寄存器IX;变址寄存器IX面向用户,内容可由用户改变
- 相对寻址:以PC为起点
- 隐含寻址:不给出操作数地址,而是指令中隐含。
- 指令寻址:
-
CISC和RISC(理解):
习题1:
¶第五章 - 中央处理器
-
CPU基本结构(重点!!!):
- 运算器:算术逻辑单元ALU、程序状态字寄存器PSW、暂存寄存器、累加寄存器ACC、通用寄存器组(AX~DX、SP等)、移位器、计数器CT等
- 控制器:程序计数器PC、指令寄存器IR、指令译码器、存储器地址寄存器MAR、存储器数据寄存器MDR、时序系统和微操作信号发生器
- 只有PC、PSW、ACC、X是可见(可编程)的
- PC,可用条件转移指令改变其值
- PSW,条件转移指令需要用到PSW的值,且比较指令可改变PSW的值
- ACC,加法乘法可直接改变其值
- X,通用寄存器,可以存放数据或者地址,位数一般与机器字长相等
-
指令周期:CPU完成一条指令的时间
- 包含多个机器周期、每个机器周期又包含多个时钟周期
- 每个指令周期包含的机器周期可能不等、每个机器周期包含的时钟周期(节拍)也可能不等
- 基本组成:取指周期、间址周期、执行周期、中断周期
- 无条件转移指令只有取指和执行
-
不同周期的数据流(重点!!!):
- 取址周期:
(PC) ➡ MAR
、1 ➡ R
、M(MAR) ➡ MDR
、(MDR) ➡ IR
、(PC) + 1 ➡ PC
- 取址周期由控制器自动进行,不需要得到指令才进行
- 间址周期:
Ad(IR) ➡ MAR
、1 ➡ R
、M(MAR) ➡ MDR
、(MDR) ➡ Ad(IR)
- 间址周期取的是操作数的地址,而不是操作数!
- 执行周期:各不相同、具体分析
- 中断周期:
- 执行周期完成后,只有检测到中断才会进入中断周期
- 修改栈顶指针SP减一,送入MAR(保存断点至主存)
(SP) - 1 ➡ SP
、(SP) ➡ MAR
- 读写控制
1 ➡ W
- 保存PC内容到主存
(PC) ➡ MDR
- 中断处理,将中断服务程序的入口地址(由向量地址生成部件生成)
向量地址 ➡ PC
- 取址周期:
-
指令执行方案:
- 单指令周期:所有指令周期时间相等,取决于最长那个
- 多指令周期:不同指令选用不同执行步骤完成,不定长周期
- 流水线周期:指令之间尽量并行(有些指令之间或者指令不同步骤之间没有资源冲突,可以并行)
- RISC必须实现流水线
- CISC通过优化实现流水线
-
数据通路:
- 不包含控制部件!!!
- 总线结构
- 单总线结构:所有寄存器的输入输出在同一条公共通路上
- 三总线方式:数据总线、控制总线、数据总线
- 专用数据通路:减少共享线路、专线专用
-
控制器的设计(重点!!!):
- 硬布线控制器的设计(根据指令、时序以及PSW等,按照时间顺序,由硬件电路产生一些微操作控制信号):
- 控制单元CU的信号来源:指令译码器、时序信号、执行单元的反馈标志、来自总线的控制信号
- 控制器的时序系统:
- 时钟周期:用时钟信号控制节拍发生器,每个节拍内机器可以完成一个或几个需要同时执行的操作
- 机器周期:可以视为所有指令执行过程中的一个基准时间,通常以存取周期作为基准时间
- 指令周期:取指、间址、执行、中断
- CPU控制方式:同步(统一时钟)、异步(无时钟,各自按照自己的速度工作(有前置步骤的可以暂停或”预判“))、联合控制(同步异步结合,大部件同步,小部件异步)
- 微程序控制器(用软件设计硬件的技术):
- 术语:
- 微命令:控制部件向执行部件发出的控制信号,是构成控制序列的最小单位。
- 例如:打开/关闭控制门电路的电位信号
- 微操作:执行部件接收到微命令后执行的操作,和微命令是一一对应的
- 微命令是微操作的控制信号,微操作是微命令的执行过程,微操作是执行部件中最基本的操作
- 微指令:若干微命令的集合,存放在一个控制存储器中。存放微指令的控制存储器的单元被称为微地址。
- 同一CPU周期内,并行执行的一组微命令,存储在控制存储器上,叫做一条微指令
- 微周期:从读取一条微指令,到执行完成的时间
- 微程序:实现一条机器指令功能的微指令序列
程序 ➡ 微程序(机器指令) ➡ 微指令(微周期) ➡ 微命令(微操作)
- 微命令:控制部件向执行部件发出的控制信号,是构成控制序列的最小单位。
- 微指令至少包含:
- 操作控制字段:用于产生某一步操作的各种操作控制信号
- 顺序控制字段:控制产生下一条要执行的微指令地址
- 主存储器与控制存储器:
- 主存:RAM,存放程序和数据
- 控存:ROM,存放微程序
- 微地址寄存器(CMAR)和微指令寄存器(CMDR/μIR)
- 类比MAR和MDR
- 微指令的控制/编码方式:如何对微指令的控制字段进行编码,以形成控制信号
- 直接编码法:不需要进行译码。其中每一位都代表一个微操作命令,例如控制字段中的某位为1,则代表着控制信号有效,0代表无效。
- 字段直接编码法:
- 如图微指令被分成三段,互斥的微命令(微操作)可以放在不同的段,相容的微命令则可以放在同一段内
- 每个字段都需要留出一个状态表示此字段无效
- 字段间接编码法:一个字段的某些微命令需要由另一个字段当中的某些微命令来解释。
- 微指令格式:
- 水平型微指令:一次能够执行多个并行操作的微命令。
- 直接编码、字段直接编码、字段间接编码都属于这种
- 垂直型微指令:
- 设置微操作码字段,其规定了微指令的功能,并不强调并行控制功能
- 水平型微指令:一次能够执行多个并行操作的微命令。
- 硬布线控制与微程序控制对比
- 微程序控制器的时序系统相对简单
- 术语:
- 硬布线控制器的设计(根据指令、时序以及PSW等,按照时间顺序,由硬件电路产生一些微操作控制信号):
-
指令流水线(重点!!!):
- 一条指令的执行一般分为:取指、分析、执行。也可以分成其它步骤,但因保证其并行度
- 流水线需要装入时间和排空时间
- 流水线的分类:
- 流水级别分类:部件功能级流水线(CPU内的各部件流水线)、处理机级流水线(子进程流水线)、处理机间流水线(分布式、每个处理机专门完成一种任务)
- 功能分类:单功能流水线,多功能流水线
- 连接方式分类:静态流水线(同一时间内,流水线的各段只能按照同一种功能的连接方式工作),动态流水线(不同段完成的运算可能不一样,可以提高效率,但控制困难)
- 反馈信号分类:线性流水线(无反馈回路)、非线性流水线(存在反馈回路,适合线性递归运算)
-
影响流水线性能的因素(理解):
- 结构相关/资源冲突:多条指令并行过程中争抢同一互斥资源
- 可能发生冲突时,使后一条指令及其后续指令暂停
- 增加资源,使指令在不同资源上运行
- 数据相关/数据冲突:下一条指令可能会用到当前指令的最终结果
- 可能发生冲突时,使后一条指令及其后续指令暂停
- 设置专用通路,直接将当前指令的运行结果作为下一条指令输入,而不是先存入寄存器再输入。也叫数据旁路技术
- 编译器优化,调整指令顺序
- 控制相关/控制冲突:例如分支结构中的并行,当前指令未运行完成前,后一条指令无法确定分支的流向
- 分支预测,尽早生成转移目标地址,不对就重新运行错误分支点即可
- 同时预取转移成功和不成功两个方向上的目标指令
- 加快前提形成条件码
- 提高转移方向的猜准率
- 结构相关/资源冲突:多条指令并行过程中争抢同一互斥资源
-
流水线性能指标(理解):
- 吞吐率:
- 流水线的加速比:不使用流水线与使用流水线的时间比值
- 流水线效率:有效时空面积与总时空面积比值
-
流水线多发技术(假定指令周期分为四个阶段:
取指FI、译码ID、执行EX、回写WR
)(了解):- 超标量技术
- 超流水线技术
- 超长指令字技术
¶tool
1 | 四号红: <font color=red size=4></font> |