计算机组成原理
计算机系统概述
计算机发展时代
-
第一代计算机——电子管时代
-
第二代计算机——晶体管时代
-
第三代计算机——中小规模集成电路
-
第四代计算机——超大规模集成电路
计算机系统层次结构
-
硬件部分
-
冯诺依曼 “存储程序”
-
特点
-
由运算器、存储器、控制器、输入设备、输出设备组成
-
指令和数据的地位相同
-
指令和数据用二进制代码表示
-
早期的冯诺依曼机以运算器为中心,IO设备通过运算器传送数据
- 现代计算机以存储器为中心,
使IO操作绕过CPU进行
- 现代计算机以存储器为中心,
-
-
工作方式
-
将指令以代码的形式事先输入计算机主存,然后从第一条指令开始,按顺序执行,直至结束
-
属于控制流驱动
-
-
-
功能部件组成
-
主机
-
CPU
-
运算器
-
(核心)算术逻辑单元ALU
-
通用寄存器
-
累加器ACC
-
乘商寄存器MQ
-
操作数寄存器X
-
变址寄存器/基址寄存器
-
-
状态寄存器PSW
(标志寄存器)
-
-
控制器
-
程序计数器PC
-
指令寄存器IR
-
控制单元CU
-
指令译码器
-
时序系统
-
微操作信号发生器
-
-
-
MAR/MDR(逻辑上属于主存)
-
-
主存
-
地址寄存器MAR
-
数据寄存器MDR
-
地址译码器
-
时序控制逻辑
-
存储体
-
存储单元:存储字
- 存储元件:一个二进制位
-
-
-
-
IO设备
-
辅存
- 辅存不能由CPU直接访问,属于IO设备
-
输入设备
-
输出设备
-
-
-
-
软件部分
-
系统软件
-
操作系统OS、数据库管理系统DBMS、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序
- 注:数据库系统(DBS)不是一个软件概念。
它由数据库、数据库管理系统、数据库管理员(DBA)和数据库应用系统构成。
- 注:数据库系统(DBS)不是一个软件概念。
-
-
应用软件
-
科学计算类程序
-
工程设计类程序
-
数据统计与处理程序
- 会计电算化
-
-
性能指标
-
字长
-
机器字长
一次整数运算的位数
- 通用寄存器(用于运算)
-
指令字长
指令字的位数
- 指令寄存器IR
-
存储字长
存储单元的位数
- 数据寄存器MDR
-
数据字长(数据通路带宽)
外部数据总线一次并行传送的数据位数
-
-
主存容量
- PC、MAR的位数与之相关
-
运算速度
- 吞吐量、响应时间、主频、CPU时钟周期、CPI、MIPS
-
用基准程序进行性能评价
数据的表示和运算
-
校验码
-
奇偶校验码
- 检测奇数位错误,无纠错能力
-
循环冗余码CRC
-
具备检错和纠错能力
- 位数与多项式的选取有关
-
适合计算机网络中对大量数据的校验
-
-
海明码
-
确定位数
-
检测和纠正一位错
- 信息位n,校验位k满足
2^k >= n+k+1
- 信息位n,校验位k满足
-
检测2位错,纠正1位错
- 增加一位校验位(全校验位,对整体做偶校验)
-
-
校验位分布
-
信息位D4D3D2D1
校验位P3P2P1- Pi位于2^(i-1)处(1,2,4,8.......)
海明码:H7H6H5H4H3H2H1
海明码:D4 D3D2 P3 D1 P2 P1
- Pi位于2^(i-1)处(1,2,4,8.......)
-
-
校验分组
- 一个校验位校验多个数据位,
一个数据位被多个校验位校验
D1 => H3 => 3=1+2 => 由P1P2校验
D2 => H5 => 5=1+ 4 => 由P1P3校验
D3 => H6 => 6= 2+4 => 由P2P3校验
D4 => H7 => 7=1+2+4 => 由P1P2P3校验
- 一个校验位校验多个数据位,
-
校验位取值
- Pi=该组数据位求异或
-
校验与纠错
-
Si = Pi与该组数据位的异或值
-
S3S2S1=000,无错误
S3S2S1=001,第一位出错
......
-
-
码距(海明距)
-
两个合法码字之间相差的比特位数
-
检测e个误码,码距d>=e+1
-
纠正t个误码,码距d>=2t+1
-
-
-
-
表示
-
机器数:原码、补码、反码、移码
-
定点数
-
无符号数
-
有符号数
-
定点小数
-
定点整数
-
-
-
浮点数
-
规格化浮点数
-
满足1/2 <= |M| <= 1
-
原码规格化:0.1xxx或1.1xxx
-
补码规格化:0.1xxx或1.0xxx
-
-
IEEE754浮点数
-
单精度浮点数
- 32位 = S/1 + E/8 + M/23
-
双精度浮点数
- 64位 = S/1 + E/11 + M/52
-
-
特殊浮点数
-
阶码全为0
-
尾数全为0
- 表真值0,+0或-0由符号位决定
-
尾数不全为0
- 表非规格化小数 0.M * 2^(-126)
-
-
阶码全为1
-
尾数全为0
- 表∞,+/-由符号位决定
-
尾数不全为0
- 表NaN
-
-
-
-
-
运算
-
定点数运算
-
移位运算
-
算术移位(有符号数)
-
逻辑移位(无符号数)
-
-
加减法
-
原码加减法
-
补码加减法
-
-
乘法
-
原码一位乘法
- 双符号位、累加n次、移位n次
-
补码一位乘法
(Booth算法)-
双符号位、累加n+1次、移位n次
-
符号位参与运算,起始末尾补0
01加乘数,10减乘数
-
-
-
除法
-
原码加减交替法
- 加减N+1次(余数为负,则为N+2次)移位N次
-
补码加减交替法
-
加减N+1次、移位N次
-
余数与除数同号商1,异号商0
-
同号相除做减法,够减商1,不够减商0
异号相除做加法,够减商0,不够减商1- “够减”:被除数符号没有改变
(被除数与余数同号)
- “够减”:被除数符号没有改变
-
-
-
溢出判断
-
-
浮点数运算
-
加减法
-
对阶
-
小阶对大阶,尾数右移,阶码+1
- 可能引起舍入
-
-
尾数求和
-
规格化
-
左规:尾数左移,阶码-1
-
右规:尾数右移,阶码+1
- 可能引起舍入
-
-
舍入
-
“0”舍“1”入法
-
恒置“1”法
-
截断法
-
-
溢出判断
-
浮点数的溢出看阶码是否溢出
-
阶码上溢:进入中断处理
-
阶码下溢:按机器0处理
-
-
-
-
-
硬件结构
-
运算部件
-
进位产生函数G = AB
-
进位传递函数P = A⊕B
-
进位C[i] = G[i] + P[i]C[i-1]
-
一位全加器
-
和S[i] = A[i]⊕B[i]⊕C[i-1]
-
进位C[i] = A[i]B[i] + (A[i]⊕B[i])C[i-1]
-
-
串行进位加法器
- 进位C[i] = G[i] + P[i]C[i-1]
-
并行进位加法器
-
进位C[i] = G[i] + P[i]C[i-1]
-
C4=G4 + P4C3
- =G4 + P4(G3+P3C2)
-
=G4 + P4G3 + P4P3C2
-
=G4 + P4G3 + P4P3G2 + P4P3P2C1
-
=G4+P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0
-
-
-
分组并行进位方式
-
单级先行进位方式
-
组内并行、组间串行
-
组内CLA电路、组间串行进位
-
-
多级先行进位方式
-
组内并行、组间并行
-
组内BCLA电路、组间CLA电路
-
-
-
算术逻辑单元ALU
-
带标志加法器(核心)
-
溢出标志OF = C[n]⊕C[n-1]
-
进位/借位标志 CF = C[out]⊕C[in]
- =C[out]⊕Sub
-
符号标志SF = 结果最高位F[n-1]
-
零标志ZF = 结果各位或非
(仅当F=0时,ZF=1)
-
-
MUX多路选择器
- 位数s决定了运算的类型数2^s
-
-
-
运算电路
-
补码加减运算电路
-
减法时控制端sub的作用
- 对Y取非加1,转换为负数补码
-
进位位CF = Sub ⊕Cout
-
加法时表示有进位(无符号数溢出)
-
减法时表示有借位(无符号数溢出)
-
-
溢出位OF = Cn ⊕Cn-1
- 表带符号数溢出
-
-
无符号数乘法运算电路
-
补码乘法运算电路
-
除法运算电路
-
-
-
数据存储排列方式
-
大端方式
- 便于人类阅读
-
小端方式
- 便于机器阅读
-
存储系统
分类
-
按作用
-
主存储器
-
辅助存储器
-
高速缓冲存储器(Cache)
-
-
按存储介质
-
磁表面存储器
- 磁盘、磁带
-
磁芯存储器
-
半导体存储器
-
光存储器
- 光盘
-
-
按存取方式
-
随机存储器(RAM)
-
静态随机存储器(SRAM)
-
双稳态触发器,非破坏性读出,不需要刷新
-
速度快、集成度低、功耗大、成本高
-
常用作Cache
-
一次性送行列地址
-
-
动态随机存储器(DRAM)
-
栅极电容,破坏性读出
-
速度慢、集成度高、功耗低、成本低
-
常用作主存
-
刷新机制
-
刷新周期
- 通常2ms
-
刷新方式
-
集中刷新
- 一次性刷新所有行。
读写操作不受刷新工作影响,
但在刷新期间(死区)不能访问存储器
- 一次性刷新所有行。
-
分散刷新
- 存取一次,刷新一行。
优点:没有死区
缺点:增加了存取周期(一半时间用于刷新)
- 存取一次,刷新一行。
-
异步刷新
- 间隔一定时间,刷新一行。
缩短了“死时间”
- 间隔一定时间,刷新一行。
-
-
特点
-
刷新操作对CPU是透明的
-
刷新单位是行,且一次选通所有芯片(即所有芯片的行同时被刷新)
-
刷新操作类似于读操作,但有所不同
-
-
-
分两次送行列地址
-
-
-
只读存储器(ROM)
-
特点
-
RAM和ROM都支持随机存取
-
ROM结构简单,位密度更高
-
-
分类
-
MROM掩模式只读存储器
-
PROM一次可编程只读存储器
-
EPROM可擦除可编程只读存储器
-
UVEPROM紫外线擦除
-
E²PROM电擦除
-
-
Flash闪存
-
特点:快速擦除与重写
-
U盘、内存卡
-
-
SSD固态硬盘
-
组成:控制单元+存储单元(Flash芯片)
-
特点:读写速度快、功耗低、价格高
-
-
-
-
串行访问存储器
-
顺序存取存储器SAM
- 磁带
-
直接存取存储器DAM
- 磁盘、光盘
-
-
相联存储器
- 快表
-
-
按信息的可保存性
-
易失性存储器
- RAM
-
非易失性存储器
- ROM、磁盘、磁带、光盘
-
主存储器
-
芯片
-
存储芯片的引脚
-
地址线
- DRAM采用地址复用技术,地址线减半(行列地址分开送)
-
数据线
-
片选线
- SRAM:1个
DRAM:2个(行通选+列通选)
- SRAM:1个
-
读/写控制线
- 1~2个
-
(供电引脚、接地引脚 可忽略)
-
-
-
容量扩展
-
位扩展法
-
字扩展法
-
线选法
- n条地址线对应n个选片信号
-
译码片选法
- n条地址线对应2^n个选片信号
-
-
字位同时扩展法
-
-
双端口RAM
-
冲突情况
- 对同一地址单元,同时写入 或 边写边读
-
-
多模块存储器
-
单体多字存储器
- 每个存储单元存储m个字,总线带宽也为m,一次读取m个字。增大了存储带宽,但要求连续存放
-
多体并行存储器
-
高位交叉编址(顺序方式)
-
低位交叉编址(交叉方式)
- 存取周期为T,存取时间(总线传送周期)为r,
则模块数m>=T/r时,可实现流水线方式存取;
连续存取n个字,所需时间是t = T+(n-1)r
- 存取周期为T,存取时间(总线传送周期)为r,
-
-
外存储器
-
磁盘存储器
-
优点:容量大、价格低、非易失、非破坏读出等
缺点:存取速度慢、机械结构复杂,环境要求高 -
磁盘分类
- 固定头磁盘:磁头固定,每个磁道一个磁头
活动头磁盘:磁头可伸缩移动
固定盘磁盘:磁盘永久固定在驱动器内
可换盘磁盘:磁盘可移动和替换
- 固定头磁盘:磁头固定,每个磁道一个磁头
-
磁盘存储器结构
-
磁盘驱动器
-
磁盘控制器
- 磁盘和主机的接口
-
盘片
-
-
存储区域划分
-
磁头数(记录面数)
-
柱面数(磁道数)
-
扇区数(块)
-
-
性能指标
-
记录密度
-
道密度
- 半径方向单位长度的磁道数
-
位密度
- 磁道上单位长度位数。内侧大,外侧小
-
面密度
- 道密度×位密度
-
-
磁盘容量
-
非格式化容量
- 单元总数,由道密度、位密度计算而来
-
格式化容量
- 按照特定格式可存储信息总量,
小于非格式化容量
- 按照特定格式可存储信息总量,
-
-
平均存取时间
- 寻道时间 + 旋转延迟时间 + 传输时间
-
数据传输率
-
-
磁盘阵列
-
可靠性低;冗余高(除了0无冗余)
-
RAID0
- 无冗余、无校验
-
RAID1
-
镜像磁盘阵列
- 一半冗余
-
-
RAID2
-
采用海明码校验的磁盘阵列
- 纠正1位错,发现2位错
-
-
RAID3
- 位交叉奇偶校验
-
RAID4
- 块交叉奇偶校验
-
RAID5
- 无独立校验的奇偶校验
-
可靠性高;冗余低
-
-
格式化
-
物理格式化(低级格式化)
-
划分扇区,检测坏扇区,并用备用扇区替换
-
扇区=头部+数据区域+尾部
-
-
逻辑格式化(高级格式化)
- 各分区文件系统初始化
-
-
磁盘调度
-
磁盘调度时间
- 寻道时间+旋转延迟时间+传输时间
-
寻道算法
-
先来先服务FCFS
-
最短寻找时间优先SSTF
- 可能出现“饥饿”现象
-
扫描算法SCAN(电梯调度算法)
从起始点往内侧或者外侧移动,移到起始点或者终点停止,向另一侧移动。注意题目表面哪一侧为内侧方向。
- 边缘与内部磁道的扫描频率不同
-
循环扫描算法C-SCAN
-
LOOK调度/C-LOOK调度
- 改进的SCAN和C-SCAN算法,扫描到最远端的一个请求后即可返回,不必扫描到磁盘端点
-
-
减少旋转延迟时间
-
扇区采用交替编号
-
不同盘面错位编号
-
-
-
-
固态硬盘SSD
-
闪存芯片
-
由若干块组成,每块由若干页组成
页相当于主存的物理块 -
以“页”为单位读
以“块”为单位写 -
支持随机访问
-
-
闪存翻译层
-
磨损均衡技术
-
动态磨损均衡技术
- 将擦除分布在各个块上
-
静态磨损均衡技术
- 隔一段时间,根据写的频率进行数据迁移
-
-
-
优点
- 由半导体存储器构成,无移动部件,随机访问比磁盘快,无噪声和震动,能耗低、抗震性好
-
Cache高速缓冲存储器
-
局部性原理
-
时间局部性
-
空间局部性
-
-
主存-Cache层次
-
主存和Cache之间的数据交换由硬件实现
-
CPU与Cache交换单位:字
Cache与主存交换单位:Cache行/块 -
平均访问时间
- 命中率为H;Cache访问时间Tc;主存访问时间Tm
平均访问时间:
(同时访问C和M)Ta = HTc +(1-H)Tm
(先访问C再访问M)Ta = HTc +(1-H)(Tm+Tc)
- 命中率为H;Cache访问时间Tc;主存访问时间Tm
-
访问效率
- E=Tc/Ta
cache访问效率=cache访问时间/平均访存时间
- E=Tc/Ta
-
-
Cache-主存映射方式
-
直接映射
- 地址结构:Tag + Cache行号 + 块内地址
-
全相联映射
- 地址结构:Tag(隐含行数) + 块内地址
-
组相联映射
-
Cache行分组,组间直接映射,组内全相联映射
-
地址结构:Tag(隐含路数) + 组号 + 块内地址
(路数&组号 => 行数)
(路数即组内行数)
-
-
-
Cache替换算法
-
随机算法
-
FIFO先进先出算法
-
LRU近期最少使用算法
-
计数器规则:记录多久未访问
命中置0,其余加1;
未命中且有空闲行,装入并置0,其余加1;
未命中且无空闲行,淘汰,装入置0,其余加1 -
抖动现象
-
-
LFU最不经常使用算法
- 计数器规则:记录访问的次数
新行置0,访问一次加1;
优先换出最小的行,相同时按FIFO换出
- 计数器规则:记录访问的次数
-
-
Cache写策略
-
写命中时
-
全写法(写直通法)
- 同时写入Cache和主存,
需要增加一个写缓冲队列
- 同时写入Cache和主存,
-
写回法
- 仅在换出时写回主存
-
-
写未命中时
-
写分配法
- 加载到Cache写入
-
非写分配法
- 直接写入主存
-
-
最佳实践
-
Cache之间:全写法+非写分配法
- 因为Cache写入速度比主存快,可以防止写缓冲区溢出
-
Cache和主存之间:写回法+写分配法
- 减少对主存的频繁访问
-
-
-
Cache结构
-
地址映射表
-
标记(Tag位)
-
有效位
- 1位
-
修改位
-
1位
- 采用全写法似乎不需要修改位
-
-
替换算法位(LRU位)
- LRU算法的计数器位:
根据组大小(路数)确定位数
2路-1位;4路-2位;8路-3位
- LRU算法的计数器位:
-
-
数据
- 有效容量
-
虚拟存储器
-
页式虚拟存储器
-
页表
-
页表结构
-
有效位(装入位)
- 表示页面是否装入主存
-
脏位
- 修改位
-
引用位
- 使用位,配合替换策略
-
物理页号
- 实页号
-
-
-
快表(TLB)
-
按内容查找,相联存储器
-
位于Cache中
-
-
具有TLB和Cache的多级存储系统
数据访问过程-
虚拟地址 = 虚页号 + 页内地址
物理地址 = 实页号 + 页内地址 -
1)虚页号 => 实页号
-
访问TLB,命中,则直接获取实页号
-
TLB未命中,则需访问页表(可同时访问)
-
若页表未命中,则进行缺页处理后获取实页号
- 缺页中断属于内部中断
-
-
2)物理地址 => 数据
-
先访问Cache,若命中,存取数据
-
Cache未命中,访问主存(可同时进行)
- cache完全由硬件实现,不会产生中断
-
-
-
Cache缺失处理由硬件完成;
缺页处理由软件完成;
TLB缺失既可由硬件又可由软件处理
-
-
段式虚拟存储器
-
优点:逻辑独立性,便于共享;
缺点:段长可变,容易在段间留下碎片 -
虚拟地址 = 段号 + 段内地址
-
段表结构 = 段首址 + 有效位 + 段长
-
段表结构
-
段首址
-
段长
-
有效位(装入位)、(修改位?)
-
-
-
段页式虚拟存储器
-
程序按逻辑分段,段内按固定大小分页
-
虚拟地址 = 段号 + 段内页号 + 页内地址
-
指令系统
指令系统是计算机的主要属性,位于硬件和软件的交界面上
指令格式
-
基本指令格式
-
零地址指令
-
OP
-
无操作数的指令
- 空操作、停机、关中断
-
操作数隐含在栈顶和次栈顶的运算类指令
-
-
-
一地址指令
-
OP+A1
-
单操作数指令
- OP(A1) -> A1
-
隐含目的地址(ACC)的双操作数指令
- (ACC)OP(A1) -> ACC
-
-
-
二地址指令
-
OP+A1+A2
- (A1)OP(A2) -> A1
-
-
三地址指令
-
OP+A1+A2+A3
- (A1)OP(A2) -> A3
-
-
四地址指令
-
OP+A1+A2+A3+A4(下址)
- (A1)OP(A2) -> A3;(A4) -> PC
-
-
-
定长指令字格式 VS 变长指令字格式
-
定长操作码 VS 可变长操作码
-
扩展操作码指令格式
(定长指令字+可变长操作码)- 不允许短码是长码的前缀
寻址方式
-
指令寻址
-
顺序寻址
- PC+1->PC(1指令字长 = 1存储字长)
PC+2->PC(1指令字长 = 2存储字长)
注意是按字编址还是按字节编址
- PC+1->PC(1指令字长 = 1存储字长)
-
跳跃寻址
- 根据指令,如Jmp、Call等改变PC的值
-
-
数据寻址
(指令格式 = 操作码+寻址特征+形式地址)
(A形式地址、EA有效地址、(EA)操作数)-
隐含寻址
- 指令中隐含操作数的地址,如ACC
-
立即(数)寻址
- 操作数 = A
-
直接寻址
-
EA = A;(EA) = (A)
- 寻址范围有限
-
-
间接寻址
-
EA = (A);(EA) = ((A))
- 扩大了寻址范围
-
-
寄存器寻址
- EA = R;(EA) = (R)
-
寄存器间接寻址
- EA = (R);(EA) = ((R))
-
相对寻址
-
EA = (PC) + A
- 便于程序浮动
注:相对下一条指令地址的偏移量
- 便于程序浮动
-
-
基址寻址
-
EA = (BR) + A
- BR是基址寄存器,面向操作系统
-
-
变址寻址
-
EA = (IX) + A
- IX是变址寄存器,面向用户
-
-
基址变址复合寻址
-
EA = (IX) + (BR) + A
- 先基址再变址
-
-
堆栈寻址
-
堆栈指针SP指向栈顶元素
(注:栈底在下,SP增加才是退栈)-
出栈Pop X
- (Msp) -> X
(SP)+1 -> SP
- (Msp) -> X
-
入栈Push Y
- (SP)-1 -> SP
(Y) -> Msp
- (SP)-1 -> SP
-
-
分类
-
硬堆栈
- 寄存器堆栈
-
软堆栈
- 主存区域
-
-
-
汇编指令
-
寄存器表示
-
x86共8个32位通用寄存器
-
EAX累加器
-
EBX基址寄存器
-
ECX计数寄存器
-
EDX数据寄存器
-
ESI变址寄存器(source index)
-
EDI变址寄存器(destination index)
-
EBP堆栈基指针(base pointer)
-
ESP堆栈顶指针(stack pointer)
-
-
-
汇编指令格式
-
AT&T格式 和 Intel格式 的区别
-
AT&T格式
-
源操作数在前;目的操作数在后
-
使用小括号()
-
disp(base, index, scale)
偏移(基址, 变址, 比例)
如:8(%edx, %eax, 2) -
操作码后面紧跟字母:
"b"表示byte,
“w”表示word,
“l”表示long(双字,可缺省) -
只能用小写字母
-
-
Intel格式
-
目的操作数在前;源操作数在后
-
使用中括号[]
-
[base + index * scale + disp]
[基址 + 变址 * 比例 + 偏移]
如:[edx + eax * 2 + 8] -
操作码后面跟:
“byte ptr”
“word ptr”
“dword ptr”(双字,可缺省)
-
-
-
-
一些汇编指令
-
imul带符号整数乘法
-
两个操作数:前者(目的)必须是寄存器
-
三个操作数:第一个为目的操作数,必须为寄存器
-
-
idiv带符号整数除法
- 单操作数(除数)
被除数:edx:eax
商->eax
余数->edx
- 单操作数(除数)
-
位操作
- and、or、xor、not
-
取负
- neg
-
cmp/test
- 都不保存结果
cmp是减法操作
test是按位与
- 都不保存结果
-
注意:源操作数和目的操作数不能同时为存储器
- 对于push/pop指令,由于堆栈位于内存,所以操作数不能来自存储器
-
-
条件转移指令之switch
-
当条件值较为接近时,可以构造跳转表快速跳转到目标位置
-
break时使用无条件转移指令
-
-
三类循环转移指令
- ecx用作循环计数器
-
补充内容:关于C语言程序的内存分配
-
内存分配方式
-
静态存储区分配
- 编译时就已分配
-
栈分配
- 内存使用由高地址向低地址,后进先出
-
堆分配
- 动态内存分配,内存使用由低地址向高地址
-
-
内存区划分
-
栈区
- 函数参数、局部变量、返回值
-
堆区
- 动态分配(new、malloc)
-
静态全局区
- 静态变量和全局变量
-
只读区(文本常量区)
- 常量、字符串
-
程序代码区
- 二进制代码
-
-
栈帧
-
记录一次过程调用中的局部变量、参数等
-
一个栈帧对应一个未执行完的函数
-
用EBP和ESP的两个指针界定栈帧的范围
-
栈帧可保证不同函数访问相同的局部变量名时不冲突
-
-
CISC和RISC的比较
-
复杂指令集CISC
-
复杂、庞大,指令多
-
字长不固定,格式不规整,
访存指令不限制 -
执行时间相差较大
使用频度相差很大 -
较少
-
难以优化编译
-
微程序控制
-
可以通过一定方式实现
-
-
精简指令集RISC
-
简单、精简,指令少
-
字长固定,格式规整,
仅Load/Store可访存 -
绝大多数指令在一个周期内完成;
各指令都比较常用 -
多
-
适合优化编译
-
组合逻辑控制(硬布线控制)
-
必须实现
-
中央处理器
CPU
-
CPU功能
-
指令控制
-
操作控制
-
时间控制
-
数据加工
-
中断处理
-
-
CPU结构
-
运算器
-
算术逻辑单元ALU
-
暂存寄存器
- 对应用程序员透明;暂存从主存读取的数据
-
累加寄存器
- 暂存ALU的运算结果
-
通用寄存器组
- AX、BX、CX、DX、SP等
-
程序状态寄存器
- OF、SF、ZF、CF等
-
移位器
-
计数器
- 控制乘除运算的步数
-
-
控制器
-
程序计数器PC
-
指令寄存器IR
-
地址寄存器MAR
-
数据寄存器MDR
-
CU控制单元
-
指令译码器
-
时序系统
-
微操作信号发生器
-
-
-
-
CPU中的寄存器分类
-
对用户可见
-
通用寄存器
-
PSW
-
PC
-
ACC
-
基址/变址
-
-
对用户透明
-
MAR
-
MDR
-
IR
-
暂存寄存器
-
移位器
-
-
-
CPU内部数据通路
-
数据通路类型
-
CPU内部单总线
- ALU的输入端增加一个暂存寄存器,目的是避免总线数据冲突
-
CPU内部三总线
-
专用数据通路
-
使用三态门或多路选择器控制数据流通
-
性能较高,硬件量大
-
-
-
数据通路部件
-
操作元件(组合逻辑元件)
-
状态元件(存储元件)
-
-
控制器
-
硬布线控制器
-
特点:实现复杂,不利于指令扩充;速度快
常用于RISC -
微操作信号发生器
-
输入信号
-
操作码
- 经过译码器译码
-
机器周期信号
- 由时序系统产生
-
节拍信号
- 由时序系统产生
-
标志信息
- 如PSW,ACC的符号,来自IO设备或主存的信息
-
-
输出信号
- 微操作控制信号(微命令)
-
-
CPU控制方式
P.216
-
同步控制方式
- 统一时钟信号控制
-
异步控制方式
- 各部件按自己的速度工作,通过应答方式联络
-
联合控制方式
- 大部分同步,小部分异步
-
-
硬布线控制单元设计
-
-
微程序控制器
-
常用于CISC
-
基本结构
-
微地址形成部件
-
微地址寄存器CMAR或μPC
-
控制存储器CM
-
微指令寄存器CMDR或μIR
-
-
微指令
-
分类
-
水平型微指令
-
微操作控制字段
-
编码方式
-
直接编码(直接控制)方式
- 每个位对应一个微操作
-
字段直接编码方式
-
将互斥微命令分在同一个段内,相容性微命令分在不同段内
-
对每个段内的微命令进行编码,留出全0表示不进行任何微操作
-
-
字段间接编码方式
- 进一步缩短微指令字长,但也削弱了并行控制能力
-
-
-
微地址码字段
- 给出下地址
-
-
垂直型微指令
- 微操作码 + 目的地址 + 源地址
-
混合型微指令
-
-
注意
-
区分以下概念:
微程序、微指令、微命令、微操作、微周期、微地址-
微操作和微命令 是相对应的
-
一个微指令可以同时发出多个微命令
-
一个微程序包含了多条微指令
-
一个指令对应一个微程序,可以对应若干微程序段
-
-
特别区分:微程序,微程序段
-
逻辑上,一个指令对应一个微程序(可以由若干微程序段组成)
-
一些CPU不含间址和中断周期的微程序段,
但至少含有一个公共的取值微程序段 -
因此,n个指令对应n个微程序;
n个指令至少有n+1个微程序段
-
-
-
-
微地址的形成方式
-
断定方式
- 由微操作的下地址直接给出
-
操作码形成
- 操作码经微地址形成部件得到
-
增量计数器法
- (CMAR)+1 -> CMAR
-
分支转移
-
测试网络
-
硬件直接产生
-
加电后,第一条微指令由硬件产生
-
由硬件产生中断周期微程序首地址
-
-
-
微程序控制单元设计步骤
-
指令执行过程
-
不同层次的周期
-
指令周期
-
机器周期
-
定长机器周期
-
不定长机器周期
-
-
时钟周期
- 节拍/T周期
-
-
指令执行步骤
-
取值周期FE
- (PC) -> MAR
1 -> R
M(MAR) -> MDR
(MDR) -> IR
(PC)+1 -> PC
- (PC) -> MAR
-
间址周期IND
-
Ad(IR) -> MAR 或 Ad(MDR) -> MAR
1 -> R
M(MAR) -> MDR
[可选] (MDR) -> Ad(IR)- 注:间址周期是将操作数的有效地址存入MDR
(间址不是直接寻址,操作数的地址在主存)
- 注:间址周期是将操作数的有效地址存入MDR
-
-
执行周期EX
-
中断周期INT
- (SP) -1 -> SP
(SP) -> MAR
1 -> W
(PC) -> MDR
(MDR) -> M(MAR)【即栈顶位置】
中断向量地址 -> PC
- (SP) -1 -> SP
-
-
指令执行方案
-
单指令周期
- 执行时间相同,串行执行
-
多指令周期
- 执行时间不同,串行执行
-
流水线方案
-
指令集特征
-
指令长度尽量一致,指令格式尽量规整
-
仅Load/Store访存(RISC指令集特点)
-
数据和指令在存储器中“对齐”存放
-
-
表示方式
-
指令-时间 图像
-
指令流水线时空图
-
空间上分为5个功能段
- IF、ID、EX、MEM、WB
-
时间上,区分:装入时间、排空时间
-
-
-
实现过程
-
流水寄存器
-
后面流水段所需要用到的全部数据信息
- 如:PC+4、指令、立即数、目的寄存器、ALU运算结果、标志信息
-
前面传递过来的,后面要使用的所有控制信号
-
-
执行过程(五段式)
-
取指(IF)
-
(PC)+4 -> PC
- 准备取下一条指令
-
(PC)+4 -> IF/ID流水寄存器
- 后续可能使用(如相对转移指令)
-
指令字 -> IF/ID流水寄存器
- 准备译码
-
-
译码/读寄存器(ID)
- 发生数据相关(写后读)时,该段需要推迟到相应冲突指令的WB之后
-
执行/计算地址(EX)
-
lw访存指令:计算访存地址
-
jmp无条件转移指令:修改PC值(WrPC)
-
其他指令:进行计算
-
-
访存(MEM)
-
lw访存指令:进行访存操作
-
条件转移指令:WrPC
-
-
写回(WB)
-
load指令:将取得数据写入寄存器
-
store指令:不做任何操作
-
运算类指令:运算结果写入寄存器
-
-
-
冒险
-
结构冒险(互斥问题)
-
资源冲突,是互斥问题
如:取指和访存争用主存 -
解决办法
-
前一条指令访存时,后续指令暂停一个时钟周期
-
L1 Cache采用数据Cache和指令Cache分离的方式,从而避免资源冲突
-
-
-
数据冒险(同步问题)
-
类型
-
RAW写后读相关
- 当指令按序发射时,只可能出现此类冲突
-
WAR读后写相关
-
WAW写后写相关
-
-
解决
-
硬件阻塞(stall) 或 软件插入“NOP”空指令
-
转发机制(数据旁路技术)
-
编译优化,调整指令顺序
-
-
-
控制冒险
-
转移指令改变了指令执行顺序,引起控制冒险
-
解决方法:尽早确定WrPC段
-
分支预测
- 对转移指令进行分支预测,尽早生成目标地址
-
预取转移成功和不成功两个控制流上的目标指令
-
加快和提前形成条件码
-
提高转移方向的猜准率
-
-
-
-
-
性能指标
-
吞吐率
- 单位时间完成的任务数量
-
加速比
- 不使用流水线与使用流水线的时间之比
-
效率
-
设备利用率,设备处于忙碌的时间占总时间的比
-
在时空图上,表现为,有效面积同总面积的比
-
-
-
分类(?存疑)
-
按照使用级别
-
部件功能级流水
-
对某个部件(如ALU)内部再进行分解
- 如,浮点加法操作分成四个部件功能:
求阶差、对阶、尾数求和、规格化
- 如,浮点加法操作分成四个部件功能:
-
-
处理机级流水
-
即狭义的指令流水线
- 取指、译码、执行、访存、写回
-
-
处理机间流水
-
宏流水线
- 多处理机
-
-
-
按照可以完成的功能
-
单功能流水线
- 具体功能:如浮点数加法流水线
-
多功能流水线
- 指令流水线(按不同连接方式,可实现不同功能)
-
-
按照同一时间内各段的连接方式
-
静态流水线
-
动态流水线
-
-
按照各段间是否有反馈信号
-
线性流水线
- 无反馈,每个段只经过一次
-
非线性流水线
-
存在反馈回路,某些段可能多次经过
- 如乘法运算时,转换为多次重复的加法操作
-
-
-
-
高级流水线技术
-
多发射技术
-
超标量流水线技术
(动态多发射技术)-
超标量即配置多个功能部件,支持并行执行
-
在一个时钟周期内,CPU并发多条指令
-
?超标量技术不能调整指令的执行顺序
-
?若CPU支持乱序发射,则运行时可以动态调整指令顺序
-
-
超长指令字技术
(静态多发射技术)-
同样需要配置多个处理部件
-
由编译程序将可并行执行的指令合并成一个具有多个操作码的超长指令字
-
-
-
超流水线技术
-
将功能段进一步划分成多个子过程,当第一个子过程执行完后,该部件就可以接受下一条指令。从而使得该部件的时钟周期缩短,于是就可以提高CPU主频更快执行指令
- 理解:
超流水线技术之于流水线技术,
相当于流水线技术之于串行执行。
提高分段数,从而提高并行度。
(部件数量不变,CPI不变,主频提高)
- 理解:
-
-
-
-
异常和中断
-
分类
-
异常
-
故障(软件中断)
-
由指令引起的软件异常
-
如:非法操作码、除数为0、缺页故障
-
故障异常处理后,重新计算PC值以恢复执行
-
故障异常无法处理时,程序终止
-
-
自陷(软件中断)
- 系统调用指令、条件自陷指令
-
终止(硬件中断)
-
指令执行过程中产生的硬件故障,是随机发生的
-
如:控制器出错、存储器校验错
-
-
-
外中断(硬件中断)
-
可屏蔽中断INTR
- I/O中断、特殊事件(按下ESC、定时器到时)
-
不可屏蔽中断NMI
- 电源掉电
-
-
-
比较
-
异常
-
异常由指令自身产生,异常检测由CPU自身完成
-
异常阻止指令的执行,检测到异常后立即处理
-
-
外中断
-
中断由外部事件引起,通过中断请求线通知CPU
-
中断不阻止指令的执行,一般在中断周期检测中断信号,并响应中断请求
-
-
-
中断响应过程
多处理器
-
按照指令流和数据流的数量
-
SISD单指令流单数据流结构
- 一个处理器一个存储器,采用流水线方式提高速度,可设置多个功能部件,采用多模交叉存储器
-
SIMD单指令流多数据流结构
-
数据级并行技术
-
一个指令控制部件,多个处理单元
-
不同处理部件对同一条指令所处理的数据不同
-
适合数组的处理,不适合分支结构的处理
-
向量处理器是SIMD的变体,实现了直接操作一维数组(向量)指令集的CPU
-
如:显卡对每个像素点处理
-
-
MISD多指令流单数据流结构
- 不存在
-
MIMD多指令流多数据流结构
-
线程级(以上)并行技术
-
多计算机系统(消息传递MIMD)
-
如:分布式计算机系统
-
每个计算机节点拥有私有存储器,通过消息传递进行数据传送
-
-
多处理器系统(共享存储MIMD)
-
共享存储多处理器(SMP)系统
多个处理器,单个存储器
-
UMA统一存储访问多处理器
- 对所有存储单元的访问无差别,时间大致相同
-
NUMA非统一存储访问多处理器
- 主存被分配给不同处理器或内存控制器;
处理器可以更快访问分配给自己的主存
- 主存被分配给不同处理器或内存控制器;
-
-
-
-
-
实现并行性
-
多核处理器
- 真正意义上的并行
-
硬件多线程(单核)
-
细粒度多线程
-
指令发射:轮流发射各线程指令
-
线程切换:每个时钟周期切换一次,代价低
-
并行度:指令级并行,线程级不并行
-
-
粗粒度多线程
-
指令发射:连续几个周期,发射同一个线程的指令
-
线程切换:高,需要重载流水线
-
并行度:指令级并行,线程级不并行
-
-
同时多线程(SMT)
-
指令发射:一个周期内同时发射多个线程的指令
-
并行度:线程级并行
-
-
-
总线
总线特性
-
机械特性
-
电气特性
-
功能特性
-
时间特性
总线分类
-
按功能
-
片内总线
-
CPU内部数据通路
-
CPU内部单总线
- ALU的输入端增加一个暂存寄存器,目的是避免总线数据冲突
-
CPU内部三总线
-
专用数据通路
-
使用三态门或多路选择器控制数据流通
-
性能较高,硬件量大
-
-
-
-
系统总线
-
数据总线
- 双向传输
-
地址总线
-
单向传输
-
主存地址空间+I/O空间
-
-
控制总线
-
CPU送出的控制命令(单向)
-
主存/外设返回CPU的反馈信号(单向)
-
-
-
I/O总线
-
位于IO接口与系统(总线)之间,
低速IO设备与高速总线分离 -
如USB、PCI总线
-
-
通信总线
-
计算机系统间的信息传送(外部总线)
-
IO接口与外部设备之间(外部总线)
-
-
-
按时序控制方式
-
同步总线
- 统一时钟信号
-
异步总线
- 各部件按自己的速度工作,通过应答方式联络
-
-
按数据传输格式
-
并行总线
-
串行总线
-
系统总线的结构
-
单总线结构
- CPU、主存、IO设备都在同一条总线上,
不同设备可能会争用总线
- CPU、主存、IO设备都在同一条总线上,
-
双总线结构
-
主存总线
- 负责CPU、主存、通道之间的数据传送
-
I/O总线
- 负责外部设备和通道之间的数据传送
-
-
三总线结构
-
主存总线
- 负责CPU和主存之间的数据传送
-
I/O总线
- 负责CPU和外设之间的数据传送
-
直接内存访问(DMA)总线
- 负责主存和高速外设之间的数据传送
-
性能指标
-
总线传输周期
- 包括申请、寻址、传输、结束4个阶段
-
总线时钟周期
- 机器时钟或桥接器时钟
-
总线工作频率
- 总线周期倒数
-
总线时钟频率
- 时钟周期的倒数
-
总线宽度(位宽)
- 并行数据位数
-
总线带宽
-
单位时间最多传输数据的位数
-
总线带宽 = 总线工作频率×(总线宽度/8)
-
-
有效传输速率
- 总线带宽去除冗余校验信息的传输速率
-
总线复用 & 信号线
-
信号线:地址总线 或 数据总线 或 控制总线
-
总线复用:同一种信号线在不同时间传输不同的信息
-
总线事务
-
总线事务五阶段
-
请求阶段
-
仲裁阶段
-
寻址阶段
-
传输阶段
- 每次只传送一个字长
-
释放阶段
-
-
突发(猝发)传送方式
-
传输阶段传送连续单元的数据,每个时钟周期可以传送一个字长的信息
-
一组数据传送完成后才释放总线
-
总线定时
-
同步定时方式
-
系统统一时钟信号协调
-
优点:速度快、逻辑简单
缺点:强制同步,不能及时检验数据有效性,可靠性差 -
适用于总线长度较短,所接部件的存取时间比较接近的系统
-
-
异步定时方式
-
依靠双方“握手”信号实现定时控制。
“请求”信号,“回答”信号 -
优点:总线周期长度可变,适应双方速度差异
缺点:复杂,速度慢 -
分类
-
不互锁方式
- 请求撤销不必等待响应到来
-
半互锁方式
- 响应到来后才撤销请求,
撤销响应不必等待请求撤销
- 响应到来后才撤销请求,
-
全互锁方式
- 请求撤销后才撤销响应,
响应撤销后才撤销请求
- 请求撤销后才撤销响应,
-
-
I/O
I/O指令
-
I/O指令
- CPU执行,对通道发出命令
-
通道指令
- 通道执行,代替CPU对设备进行管理
-
I/O指令 = 操作码 + 命令码 + 设备码
-
操作码:指明CPU对IO接口做什么
-
命令码:指明IO接口对设备做什么
-
I/O接口(设备控制器)
-
功能
-
进行地址译码和设备选择
-
主机和外设的通信控制
-
数据缓冲
-
信号格式转换
-
传送控制命令(给外设)
传送状态信息(来自外设,反馈给CPU)
-
-
结构
-
I/O端口
-
数据缓冲寄存器
- 数据线:数据
-
状态/控制寄存器
- 数据线:控制字、状态字、中断类型号
-
-
地址译码和IO控制逻辑
-
地址线:指明I/O端口(寄存器地址)
-
控制线:读写信号、中断请求信号
-
-
外设界面控制逻辑
- 数据、状态、控制
-
-
类型
-
按数据传送方式(接口与外设)
-
并行接口:1字节/1字 同时传送
-
串行接口:1位 1位传送
-
-
-
I/O端口
-
端口类型
-
数据端口
- CPU可读写
-
状态端口
- CPU只读
-
控制端口
- CPU只写
-
-
编址方式
-
统一编址(存储器映射方式)
-
优点:不需要专门的IO指令,CPU通过访存指令即可
缺点:端口占用存储器地址,使内存容量变小;执行速度慢 -
通常分配给端口的地址靠近地址空间的顶端
-
-
独立编址(I/O映射方式)
- 优点:使用IO指令访问端口,程序编制清晰
缺点:IO指令少,只能进行传送操作;控制复杂,需要多提供一组IO设备读写控制信号
- 优点:使用IO指令访问端口,程序编制清晰
-
-
I/O控制方式
-
程序查询方式(轮询)
-
独占查询
-
定时查询
-
-
程序中断方式
-
中断请求
-
中断源
-
中断请求标记触发器
-
中断请求标记寄存器
- 可集中在CPU中,也可分散在各中断源
-
-
中断响应判优
-
中断响应过程
-
中断隐指令(硬件)
-
关中断
-
保存断点和状态字
- PC、PSW
-
识别并响应中断
-
识别中断
-
软件识别方式
- CPU设置一个异常状态寄存器,
由操作系统查询中断类型并处理
- CPU设置一个异常状态寄存器,
-
硬件识别方式
- 中断向量:中断服务程序的首地址
中断向量表:中断类型号->中断向量
- 中断向量:中断服务程序的首地址
-
-
中断响应判优
-
实现方式
-
软件查询
-
硬件排队器
-
-
一般原则
-
不可屏蔽中断 > 内部异常 > 可屏蔽中断
-
内部异常中:硬件故障 > 软件中断
-
DMA中断 > I/O设备中断
-
高速设备 > 低速设备
输入设备 > 输出设备
实时设备 > 普通设备
-
-
-
转中断服务程序
-
-
-
中断服务程序(软件)
-
保存现场和屏蔽字
-
开中断
-
执行中断服务程序
-
若出现新的中断请求
-
单重中断
- CPU对新的中断不予响应
-
多重中断(中断嵌套)
-
中断处理优先级
-
按照中断响应判优逻辑
-
中断屏蔽技术
-
屏蔽触发器
-
1表示屏蔽,0表示可响应
-
优先级越高,“1”越多;
至少有一个“1”(屏蔽自身)
-
-
屏蔽字寄存器
- 内容是屏蔽字
-
-
-
-
-
-
关中断
-
恢复现场和屏蔽字
-
开中断、中断返回
- 恢复断点PC和状态字PSW
-
-
-
-
DMA方式
-
DMA控制器的组成
-
主机-控制器接口
-
CR命令/状态寄存器
-
MAR主存地址寄存器
-
DR数据寄存器
-
DC数据计数器
-
-
I/O控制逻辑
-
控制器-设备接口
-
-
DMA控制器的功能
-
接收外设发出的DMA请求,向CPU发出DMA传送请求(总线请求)
-
CPU响应总线请求,接管总线,进入DMA操作周期
-
确定数据的主存单元地址,修改地址计数
-
规定传送方向,发出读写控制信号,执行数据传送
-
向CPU报告DMA传送结束(发出程序中断)
-
-
三种DMA传送方式(访存方式)
(CPU和DMA控制器的访存冲突或总线冲突)-
停止CPU访存
-
周期挪用(周期窃取)
-
未发生冲突
-
CPU正在访存,待存取周期结束后,CPU让出总线
-
同时请求访存,IO设备优先,因为IO设备不立即访存可能丢失数据
-
-
DMA/CPU交替访存
- 适用于CPU的工作周期比主存的存取周期长的情况
-
-
传送一个块的过程
-
预处理
- 设置DMA控制器的寄存器:
1)主存起始地址 -> AR
2)IO设备地址 ->DAR
3)传送数据个数 ->WC
启动IO设备
- 设置DMA控制器的寄存器:
-
数据传送
-
CPU继续执行主程序,
DMA控制器完成一批数据的传送- 循环执行:
1)DMA请求总线
2)主存地址 -> 总线
3)数据(字) -> IO设备或主存
4)修改主存地址寄存器
5)修改数据计数器
- 循环执行:
-
-
后处理
-
DMA控制器发出中断请求
CPU做DMA结束处理- 决定是否继续使用DMA传送其他数据
-
-
-
注意区分:中断请求、DMA请求(总线请求)
-
中断请求只在指令执行的中断周期响应
DMA请求在每个机器周期(总线空闲)均可响应 -
外设向DMA控制器发出DMA请求,
然后DMA控制器向CPU发出总线请求;
-
-
DMA传送结束后,DMA控制器向CPU发出中断请求
-
通道方式
-
I/O通道:专门负责输入/输出的处理机(硬件)
-
1个通道控制多个I/O接口;
1个I/O接口控制多个设备 -
CPU给出通道程序的首地址和要访问的I/O设备;通道程序执行完后,向CPU发出中断请求
-
通道与DMA方式比较
-
DMA方式由CPU控制传输的数据大小
-
通道方式由通道控制
-
-
字节多路通道用作连接大量低速或中速的I/O设备
-
I/O设备
-
按使用特性
-
人机交互类外部设备
-
存储设备
-
网络通信设备
-
-
按传输速率
-
低速设备
- 键盘、鼠标
-
中速设备
- 打印机
-
高速设备
- 磁盘、光盘
-
-
按信息交换单位
-
块设备(有结构设备)
- 磁盘
-
字符设备(无结构类型)
- 打印机、交互式终端机
-
-
显示器(VRAM)
-
刷新存储器,至少存储一帧的图像信息(通常还会保存即将渲染的图像)
-
VRAM容量 = 分辨率 × 灰度级位数
-
VRAM带宽 = 分辨率 × 灰度级位数 × 帧频
-
磁盘
- 子主题 1
Comments NOTHING