导图社区 输入输出系统
这是一篇关于输入输出系统的思维导图,主要内容包括:I/O系统基本概念,外部设备,I/O 接口,I/O方式、数据的表示和运算、存储系统、指令系统、中央处理器、总线等。
编辑于2025-11-12 20:51:03计算机系统概述
计算机发展历程
什么是计算机系统
硬件+软件
硬件的发展
第一代:电子管时代
第二代:晶体管时代
第三代:中小规模集成电路时代
第四代:大规模、超大规模集成电路时代
软件的发展
目前的发展趋势
更微型、多用途
更巨型、超高速
计算机系统层次结构
计算机硬件的基本组成
五大部分
输入设备
将信息转换成机器能识别的形式
输出设备
将结果转换成人们熟悉的形式
主存储器
存放数据和程序
运算器
算术运算、逻辑运算
控制器
指挥各部件,使程序运行
主机
冯诺依曼结构

首次提出“存储程序”概念
以运算器为中心
工作方式:控制流驱动方式
现代计算机结构
以存储器为中心
CPU = 运算器 + 控制器
各硬件部件

主存

存储体

存储单元
每个存储单元存放一串二进制代码
存储字(word)
存储单元中二进制代码的组合
存储字长
存储单元中二进制代码的位数
存储元
即存储二进制的电子元件,每个存储元可存 1 bit
易混淆
1个字节(Byte)= 8bit
1B=1个字节,1b=1个bit
MAR
Memory Address Register(存储地址寄存器)
地址存储器,用于指明要读/写哪个存储单元。其位数反应存储单元数量
位数 = 与地址码相同
MDR
Memory Data Register(存储数据寄存器)
数据寄存器,用于暂时存要读/写的数据。其位数=字存储字长
位数 = 存储字长
运算器

ACC
累加计数器,存放操作数、运算的结果
Accumulator
MQ
乘商寄存器,进行乘、除法时用得到
Multiple-Quotient Register
ALU
算术逻辑单元,用电路实现各种算数运算、逻辑运算
Arithmetic and Logic Unit
X
通用寄存器,存放操作数
控制器

PC
程序计数器,存放下一条指令的地址
Program Counter
IR
指令寄存器,存放当前执行的指令
Instruction Register
CU
控制单元,分析指令,给出控制信号
Control Unit
寄存器的分类
用户可见寄存器(不透明)
概念
用户程序中的指令可直接访问或间接修改其值的寄存器
例子
通用寄存器
地址寄存器
段寄存器、变址寄存器、基址寄存器、堆栈指针、帧指针
专门用来存放首地址或指针信息
程序计数器 PC
用户部分可见寄存器(半透明)
概念
用户程序中的指令只能读取部分信息的寄存器,其内容由CPU根据执行结果自动设定,用户能隐含都出去部分内容但是不能修改
例子
程序状态寄存器 PSWR
标志寄存器 FLAG
用户不可见寄存器(透明)
概念
用户程序不能进行任何访问操作的寄存器,大多用来记录控制信息和状态信息,只能由CPU硬件或操作系统进行访问
例子
指令寄存器 IR
用来存放正在执行的指令,只能被硬件访问
存储地址寄存器 MAR
存储数据寄存器 MDR
用来存放地址位置和数据,只能被硬件访问
中断请求寄存器、进程控制块指针、系统堆栈指针、页表基址寄存器等
工作过程
初始:指令、数据存入主存,PC指向第一条指令
从主存中取指令放入IR、PC自动+1、CU分析指令、CU指挥其他部件执行指令
计算机软件
两类软件
系统软件
管理计算机系统的硬件资源,向上层应用程序提供服务
应用软件
按应用场景需要编制成的各种程序,直接为用户提供服务
三个级别的语言
高级语言、汇编语言、机器语言
编译程序(编译器)——将高级语言一次全部翻译为汇编语言,或直接翻译为机器语言
汇编程序(汇编器)——将汇编语言翻译成机器语言
解释程序(解释器)——高级语言翻译为机器语言(翻译一句执行一句)
软件和硬件的逻辑功能等价性
同一个功能,既可以用硬件实现,也可以用软件实现
指令集体系结构
ISA(Instruction Set Architechure)
ISA定义一台计算机可以支持哪些指令,以及每一条指令的作用是什么、每条指令的用法是什么
计算机的层次结构
M4:高级语言机器(执行高级语言)
M3:汇编语言机器(执行汇编语言)
M2:操作系统机器(向上提供广义指令)
软件
M1:传统机器(执行机器语言指令)
M0:微程序机器(执行微指令)
硬件
计算机系统的工作原理
计算机性能指标
存储器的容量
MAR的位数反应存储单元数量
MDR反应每个存储单元的大小
CPU
时钟周期
CPU中最小的时间单位,每个动作至少要1个时钟周期
主频(时钟频率)
=1/时钟周期,单位:Hz
计算机操作的最小单位时间
CPI
执行一条指令所需的时钟周期数(Cycle Per Instruction)
控制因素
系统结构
计算机组织
指令集
CPU执行时间
运行一个程序所花费的时间
=(指令条数*CPI)/ 主频
IPS
每秒执行多少条指令 = 主频\平均CPI
FLOPS
每秒执行多少次浮点运算
其他
数据通路宽度
数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)
吞吐量
指系统在单位时间内处理请求的数量
响应时间
指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间
常用数量单位
描述存储容量、文件大小:2^10,M=2^20, G=2^30, T=2^40
描述频率、速率:K=10^3, M=10^6, G=10^9, T=10^12
补充单位:P=10^15, E=10^18, Z=10^21
数据的表示和预算
数制与编码
进位计数值
r进制数
基数=r,每个数码位可能出现r种字符。逢r进1
r进制数 -> 十进制
r 进制数的数值=各数码位与位权的乘积之和
二进制<->八进制
每 3 个二进制位对应一个八进制位
二进制<->十六进制
每 4 个二进制位对应一个十六进制位
十进制->r进制
整数部分:除基取余,先取得的“余”是证书的低位
小数部分:乘积取整法,先取得的“整”是小数的高位
真值和机器数
真值:实际的带正负号的数值(人类习惯的样子)
机器数:把正负号数字化的数(存到机器里的样子)
定点数的表示
无符号数
整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。
n位的无符号数表示范围为:0 ~ 2^n-1
通常只有无符号整数,而没有无符号小数
有符号数

原码

用尾数表示真值的绝对值,符号位“0/1”对应“正/负”
表示范围
整数:
小数:
真值0有 +0 和 -0 两种形式
反码
若符号位为0,则反码与原码相同 若符号位为1,则数值位全部取反
表示范围
整数:
小数:
真值0有 +0 和 -0 两种形式
补码
正数的补码 = 原码 负数的补码 = 反码末位+1(要考虑进位)
表示范围
整数:
小数:
真值0只有一种表示形式
作用
使用补码可将减法操作转变为等价的加法,ALU 中无需集成减法器。执行加法操作时,符号位一起参与运算
转换小妙招
负数原码转为补码:从右(最低位)往左(最高位)数找到第一个1。1不变,1的左边取反,右边不变样
移码
补码的基础上将符号位取反。注意:移码只能用于表示整数
表示范围
与补码相同
作用

移码表示的整数很方便对比大小
C语言中的强制类型转换
零扩展&符号扩展
运算方法和运算电路
数字电路基本知识
逻辑门电路
多路选择器

作用
电路的 “守门员”。在多个输入数据中,只允许其中一个数据通过MUX。
若有 k 个输入,则控制信号的位数m ≥ ⌈log_2 k⌉ bit
图形
通常用“梯形”表示,有多个输入、一个输出、一个控制信号(梯形的更长的一边是输入端、更短的一边是输出端)
在电路图中,控制信号常用英文缩写“XXXop”表示,图形常用“虚线箭头”
三态门

作用
电路的“守门员”。根据控制信号决定是否让输入的数据通过
图形
小三角。有一个输入、一个输出、一个控制信号。
逻辑表达式
与
如ABC,表示A与B与C 仅当A、B、C均为1时,ABC为1 A、B、C中有一个或多个为0,则ABC为0
或
如A+B+C,表示A或B或C 仅当A、B、C均为0时,A+B+C为0 A、B、C中有一个或多个为1,则A+B+C为1
非
若A为1,则 A 非 为0
若A为0,则 A 非 为1
加法器
实现方法
一位全加器

只能支持 1bit 加
实现
本位和
向更高位的进位
并行加法器

串行进位

实现:n 个一位全加器简单串联,可支持 n bit 并行添加
缺点:进位信息是串行产生的,运算速度较慢
并行进位

实现:对“串行进位”的加法器电路进行优化,增加CLA部件
有点:进位信息是并行产生的,运算速度更快
带标志位的加法器
在并行加法器的基础上,增加电路逻辑,输出OF、SF、ZF、CF 等标志位
OF(Overflow Flag)
概念
溢出标志:判断带符号数的加减运算是否发生了溢出。
OF=1时,说明发生了溢出
工作原理
最高位的进位 次高位的进位
反映带符号数加减运算是否溢出。
SF(Sign Flag)
概念
符号标志:用于判断带符号数加减运算结果的正负性
SF=0时表示运算结果为正
工作原理
也就是取运算结果的最高位(符号位)
反映带符号数加减运算的正负性。
ZF(Zero Flag)
概念
零标志:用于判断加减运算结果是否为0。
ZF=1表示运算结果为0
判断原理
无符号数加法的溢出
最高位产生的进位=1时,发生溢出,否则未溢出。
无符号数减法的溢出
减法变加法,最高位产生的进位=0时,发生溢出,否则未溢出。
工作原理
仅当运算结果所有 bit 全0时,ZF才为1,此时表示运算结果为0
CF(Carry Flag)
概念
进位/借位标志:判断无符号数加减法是否发生了溢出
当CF=1时说明发生了溢出
工作原理
算术逻辑单元ALU(Arithmetic and Logic Unit)
功能
算术运算
加减乘除
逻辑运算
与、或、非、异或、移位
其他
求补码、直送
总共支持k种功能
实现原理
最简单的实现方式:多个功能电路+MUX,通过控制信号选通过MUX的某个线路
看懂ALU
输入
两个 n bit 运算数 A、B
与机器字长相同
m bit 控制信号
由控制器经过指令译码产生
控制信号位数
其他输入信号(如:来自更低位的进位信息)
输出
n bit 运算结果 F
与机器字长相同
OF/ZF/SF/CF等标志信息
标志位信息送入PSW寄存器(又称FR)
其他输出信号(如:往更高位的进位信息)
考点补充
CPU主要由运算器、控制器组成
ALU是运算器的核心
加法器是ALU的核心(加减乘除运算都是基于加法实现的)
定点数移位运算
算数移位

左移 1 位相当于 × 基数;右移移位相当于 ÷ 基数
原码
符号位不参与移位。左移、右移都补 0
反码
符号位不参与移位。
正数:左移、右移都补 0
负数:左移、右移都补 1
补码
负数补码最右边的 1 及其右边与原码相同,最右边的 1 的左边与反码相同

符号位不参与移位。左移补 0,右移补 1
逻辑移位
左移、右移都补 0,移出的位舍弃
可以看作是对“无符号数”的算数移位
循环移位
不带进位位
用移出的位补上空缺
带进位位
移出的位放到进位位,原进位位补上空缺
由于原、反、补码位数有限,因此某些时候算数移位不能精确等效乘法、除法
加减法运算
定点数的加减运算
原码
加法
同号相加
数值部分 = 被加数、加数的绝对值进行相加
符号位不变
异号相加
数值部分=被加数、加数中,绝对值更大的减绝对值更小的
符号位与绝对值更大的数相同
减法 —— 将减数取负,转变为加法
补码
符号位参与加法运算;减法要转变成等价的加法
注意:已知 [Y]补码,如何求 [-Y]补码? —— 将[Y]补码全部位取反,末位+1
溢出判断(补码)
Key:正+正=负(上溢);负+负=正(下溢)
方法一

两个加数为正、运算结果为负时发生溢出;或者 两个加数为负、运算结果为正时溢出。
方法二

V=Cs⊕C1
若符号位的进位Cs与最高数值位的进位C1不同则发生溢出,否则不溢出
方法三

采用双符号位补码表示数值,若运算结果的两个符号位不同则溢出,相同则未发生溢出
概念
模4补码:双符号位补码
模2补码:单符号位补码
注:上述三种逻辑表达式中,V=1时溢出,V=0时未发生溢出
无符号数加减运算
实现原理
加法的实现 —— 从最低位开始,按位相加,并往更高位进位
减法的实现
①“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法
② 从最低位开始,按位相加,并往更高位进位
溢出判断
加法:最高位产生的进位=1时,发生溢出,否则未溢出。
减法:减法变加法,最高位产生的进位=0时,发生溢出,否则未溢出。
溢出判断(手算判断) —— n bit 无符号整数表示范围 0~(2^n)-1,超出此范围则溢出
补码加减法运算
补码加减运算电路
n bit补码 X + Y,按位相加即可 n bit补码 X – Y:将减数Y全部按位取反,末位+1,得到[-Y]补,减法变加法
无符号整数的加减法也可用该电路实现
乘除法运算
定点数源码乘法运算
乘法运算的实现思想

符号单独处理:符号位 =
数值位去绝对值进行乘法计算
实现方法:先加法再移位,重复n次

无符号整数的乘法运算原理

运算过程
开始
①被乘数、乘数分别放入寄存器X、Y;②乘积寄存器P置为0;③计数器Cn的初始值置为n
进行n轮处理
重复n轮加法、移位运算,直到计数器Cn=0:
1. 将乘数寄存器Y的最低位,送入“控制逻辑”进行判断
2. ①若Y的最低位为1,则执行加法,运算结果写回P(注意加法产生的进位需保存至进位触发器C); ②若Y的最低位为0,则什么也不做。
3. 将【C, P, Y】视为整体,逻辑右移一位
4. 计数器Cn减1
结束
当计数器 Cn=0 时,乘法运算结束。用 2n 位【P, Y】暂存乘法运算结果,但最终仅保留低 n 位【Y】作为最终结果
溢出判断
若丢弃的高n位【P】不全为0,说明发生溢出,并设置OF标志位=1
溢出处理
摆烂:程序员可以选择忽略乘法溢出,乘法结果错了也不管
不摆烂:也可以在乘法指令之后执行一条“溢出自陷指令”,当OF=1时会触发“异常处理程序”来处理溢出
本质是模拟无符号整数乘法的手算过程——“逐位相乘,错位相加”
带符号整数的乘法运算原理

开始
①被乘数、乘数 分别放入寄存器X、Y
②乘积寄存器P 置为0,辅助位置为0
③计数器Cn 的初始值置为 n
进行 n 轮处理
重复 n 轮 加/减法、移位运算,直到计数器Cn = 0:
1. 将乘数寄存器Y的最低位、辅助位,2bit 送入“控制逻辑”进行判断
2. 根据寄存器Y的最低位、辅助位,决定是“+[x]补”“-[x]补”“+0”
3. 将【P, Y, 辅助位】视为整体,算数右移一位
4. 计数器Cn减1
结束
当计数器Cn=0 时,乘法运算结束。用 2n 位【P, Y】暂存乘法运算结果,但最终仅保留低 n 位【Y】作为最终结果
溢出判断
若2n位的高 n+1 位不完全相同,说明发生溢出,并设置OF标志位=1
溢出处理
摆烂:程序员可以选择忽略乘法溢出,乘法结果错了也不管
不摆烂:也可以在乘法指令之后执行一条“溢出自陷指令”,当OF=1时会触发“异常处理程序”来处理溢出
计算机实现乘法运算的三种方式
ALU、移位器、寄存器、控制逻辑组成的乘法电路
该电路实现 n bit无符号数相乘,至少需要 n 个时钟。
进方案:可以实现“两位乘法”,每轮处理乘数寄存器Y的末尾2bit,实现,此时仅需 n/2 个时钟即可完成运算
阵列乘法器(快速乘法器的一种)

很多快速乘法器都可以在一个时钟内完成乘法运算
用移位运算、加、减运算等效实现乘法

优点:在没有乘法运算电路、不支持乘法指令的计算机中,也可以等效实现乘法效果
缺点:运算速度很慢(在非流水线计算机中,每条指令的执行都至少需要1个时钟)
无符号整数除法
一些概念
余数的数学定义——被除数 = 商 × 除数 + 余数
双精度除法
2n bit ÷ n bit,得到 n bit 商、n bit 余数
对于无符号整数的双精度除法,商可能溢出
单精度除法
n bit ÷ n bit,得到 n bit 商、n bit 余数
对于无符号整数的单精度除法,商不可能溢出
开始
将数据放入寄存器
①除数放入寄存器Y
②被除数放入寄存器【R,Q】并完成零扩展
③计数器Cn 的初始值设为 n
特殊情况检查
如果除数为0,发生“除数为0”异常,停止除法运算,调出操作系统的异常处理程序
如果 |被除数|<|除数|,则 商=0,余数=被除数,除法器不必再执行
进行 1+n 轮处理(计算 1+n 位商)
上商规则
如果【R】-【Y】>= 0 ,则上商1;否则上商0
上商 0 的情况因为之前减去之后变成负数,还需要加上除数恢复原样
第1轮特殊处理(商溢出判断)
直接上商,若第一位商=1,发生“商溢出”异常,停止除法运算
直接上商,若第一位商=0,说明不会发生“商溢出”,不必保存这位商,也不让 Cn --,除法运算继续
其余n轮处理
上商的规则:如果【R】-【Y】≥ 0,则上商 1;否则上商 0
①先左移,空出的位用于上商
②上商,背后的过程可能会进行加法/减法
③计数器 Cn --,当计数器Cn=0 时,除法运算结束
结束
当计数器Cn=0 时,除法运算结束。n bit 寄存器【R】保存余数、n bit 寄存器【Q】保存商
浮点数的表示与运算
存储系统
存储系统基本概念
层次结构
高速缓存(Cache)
主存储器(主存、内存)
可直接被CPU读写
主存-辅存:实现虚拟存储系统,解决了主存容量不够的问题
Cache-主存:解决了主存与CPU速度不匹配的问题
辅助存储器(辅存、外存)
分类
按层次结构
同上↑
按存储介质
半导体存储器、磁表面存储器、光存储器
按存取方式
随机存取存储器(RAM),如内存
给地址就能立刻跳到对应单元读写,像翻书直接翻到某一页。
顺序存取存储器(SAM),如磁带
必须从头到尾顺序走过前面所有单元才能到达目标,像磁带只能快进快退播放。
直接存取存储器(DAM),如磁盘
先直接跳到目标区域(寻道),再在区域内顺序查找,像唱片机把唱针放到指定音轨后再顺序播放。
相联存储器(可按内容访问的存储器,CAM),如快表
给定一个关键字(内容),硬件同时把所有单元的内容与关键字比较,找到匹配项后再给出对应的地址或把整条记录读出。
因此它的寻址是 “内容指定为主,地址指定为辅” 的混合方式:
按信息可更改性
读/写存储器
只读存储器(ROM)
断电后信息是否消失
易失性存储器,如内存、Cache
非易失性存储器,如磁盘、光盘
信息读出后,原信息是否被破坏
破坏性读出,如DRAM芯片
非破坏性读出,如SRAM芯片、磁盘
存储器性能指标
存储容量=存储字数×字长
单位成本(每位价格)=总成本/总容量。
数据传输率(主存带宽)=数据的宽度/存储周期。
存储周期=存取时间+恢复时间
内存的存放方式
边界对齐存放
数据元素的起始地址是其自身大小的整数倍
字边界对其存放
指令的起始地址必须是“字长”的整数倍。
不对齐存放
数据元素的起始地址可以是任意内存位置
主存储器
主存储器的基本组成
基本元件
MOS管,作为通电“开关”

电容,存储电荷(即存储二进制 0/1)
存储芯片的结构

译码驱动电路
译码器将地址信号转化为字选通线的高低电平
存储矩阵(存储体)

由多个存储单元构成,每个存储单元又由多个存储元构成
读写电路
每次读/写一个存储字
地址线、数据线、片选线、读写控制线(可能分开两根,也可能只有一根)
寻址
现代计算机通常按字节编址(每个字节),即每个字节对应一个地址
按字节寻址、按字寻址、按半字寻址、按双字寻址
SRAM 和 DRAM
DRAM(栅极电容)

工作过程
读出1:MOS管接通,电容放电,数据线上产生电流
读出0:MOS管接通后,数据线上无电流
电容放电信息被破坏,是破坏性读出。 读出后应有重写操作,也称“再生
刷新
刷新量级
DRAM 每次刷新一行存储单元
刷新周期
一般为2ms
刷新方式
有硬件支持,读出一行的信息后重新写入,占用1个读/写周期
刷新时机
分散刷新:每次读写完都刷新一行(没有死时间)
集中刷新:2ms内集中安排时间全部刷新
异步刷新:2ms内每行刷新1次即可
地址线复用技术
使用行列地址减少选通线的数量
SRAM(双稳态触发器)

工作过程
1:A高B低
0:A低B高
SDRAM
SDRAM的工作方式与传统的DRAM有很大不同。传统DRAM与CPU之间采用异步方式交换数据,CPU发出地址和控制信号后,经过一段延迟时间,数据才读出或写入。在这段时间里,CPU不断采样DRAM的完成信号,在没有完成之前,CPU插入等待状态而不能做其他工作。
目前主存常用的是基于SDRAM(synchronous DRAM)芯片技术的内存条。
ROM
掩膜式只读存储器(MROM)
存储内容由半导体制造厂按用户提出的要求在芯片的生产过程中直接写入,无法修改
一次可编程只读存储器(PROM)
存储内容由用户用专门的设备(编程器)一次性写入,之后无法修改
可擦除可编程只读存储器(EPROM) (Erasable Programable)
修改次数有限,写入时间很长
紫外线擦除(UVEPROM)
电擦除(EEPROM)
闪速存储器(Flash Memory)
如U盘,写入速度较快
固态硬盘(Solid State Drives)
控制单元+FLASH芯片
tips
RAM芯片是易失性的,ROM芯片是非易失性的。很多ROM也具有“随机存取”的特性
闪存的写速度一般比读速度更慢,因为写入前要先擦除
很多ROM芯片虽然名字是 “Read-Only”,但很多ROM也可以“写”
提升主存速度
存取周期 T=存取时间 r + 恢复时间
双端口 RAM

支持两个 CPU 同时访问 RAM
情况
可同时读/写不同的存储单元;
可同时读同一个存储单元;
不能同时写(或者一读一写)同一个单元
若发生“冲突”,则发出“BUSY”信号,其中一个 CPU 的访问端口暂时关闭
多模块存储器
单体多字存储器
每次并行读出 m 个连续的字
总线宽度也要扩展为 m 个字
多体并行存储器
高位交叉编址

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

低位交叉编址

当存储模块数 m≥T/r 时,可使流水线不间断

每个存储周期内可读写地址连续的 m 个字
微观上,m 个模块被串行访问;宏观上,每个存取周期内所有模块被并行访问
主存与CPU的连接
存储器芯片的基本结构

译码驱动电路
存储矩阵
读写电路
地址线、数据线、片选线、读写控制线
位扩展
字扩展
线选法
特点
地址空间不连续,会浪费一些没有用上的空地址位
n条线 ➡️ n个选片信号
电路简单
译码片选法
译码器的使用
特点
n条线 ➡️ 2^n 个选片信号
电路复杂
地址空间可连续
字位同时扩展
与CPU进行连接
将进行位扩展的芯片作为一组,各组的连接方式与位扩展的相同:由系统地址线高位译码产生若干片选信号,分别接到各组芯片的片选控制线
寻址方式
外部存储器
磁盘存储器
磁盘原理
磁表面存储
概念
是指把某些磁性材料薄薄地涂在金属铝或塑料表面上作为载磁体来存储信息。 磁盘存储器、磁带存储器和磁鼓存储器均属于磁表面存储器。
优点
①存储容量大,位价格低;
②记录介质可以重复使用;
③记录信息可以长期保存而不丢失,甚至可以脱机存档;
④非破坏性读出,读出时不需要再生。
缺点
①存取速度慢;
②机械结构复杂;
③对工作环境要求较高。
磁盘设备的组成
存储区域
磁头(Heads)
即记录面数,表示硬盘总共有多少个磁头,磁头用于读取/写入盘片上记录面的信息,一个记录面对应一个磁头。
柱面(Cylinders)
表示硬盘每一面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面。
扇区(Sectors)
表示每一条磁道上有多少个扇区。
硬盘存储器
磁盘驱动器
核心部件是磁头组件和盘片组件,温彻斯特盘是一种可移动头固定盘片的硬盘存储器。
包括读写电路、读\写转换开关、读写磁头与磁头定位伺服系统(纯纯硬件)
磁盘控制器
是硬盘存储器和主机的接口,主流的标准有IDE、SCSI、SATA等。
包括控制逻辑、时序电路、“串➡️并”转换和“并➡️串”转换电路(用于连接主机与盘驱动器)
磁盘记录介质
盘片,用来保存信息
性能指标
容量
格式化容量
按照某种特定的记录格式所能存储信息的总量。(实际可用容量)
非格式化容量
磁记录表面可以利用的磁化单元总数。(理论最大容量)
记录密度
道密度
沿磁盘半径方向单位长度上的磁道数(长)
磁盘所有磁道记录的信息量一定是相等的,并不是圆越大信息越多,故每个磁道的位密度都不同
位密度
磁道单位长度上能记录的二进制代码位数(宽)
面密度
位密度和道密度的乘积(长✖️宽)
平均存取时间
寻道时间+旋转延迟时间+传输时间
寻道时间:从最外面的磁道移动到最内磁道的时间
旋转延迟时间:寻找磁道的时间,通常取一圈的时间的一半
数据传输率
磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率
假设磁盘转数为r(转/秒),每条磁道容量为N个字节,则数据传输率为Dr=rN
磁盘地址:
驱动器号 | 柱面(磁道)号 | 盘面号 | 扇区号
冗余磁盘阵列
引出原因:系统总体性能的提高不匹配
处理器和主存性能改进快
辅存性能性能改进慢
措施:冗余磁盘阵列
RAID的基本思想
多个独立操作的磁盘按某种方式组织成磁盘阵列,以增加容量
类似于主存中的多体交叉技术,数据存储在多个盘体上,并行工作来提高数据传输速度
冗余磁盘技术来进行错误恢复以提高系统可靠性。
RAID特性
1.RAID是一组物理磁盘驱动器
2.数据分布一组物理磁盘上
3.冗余磁盘容量用于存储奇偶校验信息
RAID级别
RAID0:不遵循特性(3),所以无冗余
RAID1:镜像盘实现1对1冗余
RAID2:海明校验法生成多个冗余校验盘,不再使用
RAID3:奇偶校验法生成单个冗余盘
已知的RAID方案分为8级(0-7级),以及其他结合的
固态硬盘SSD
原理
基于闪存技术 Flash Memory,属于电可擦除ROM,即EEPROM
组成

闪存翻译层
负责翻译逻辑块号,找到对应页(Page)
存储介质:多个闪存芯片(Flash Chip)
每个芯片包含多个块(block)
每个块包含多个页(page)
读写性能特性
以页(page)为单位读/写
相当于磁盘的"扇区"
以块(block)为单位"擦除",擦干净的块,其中的每页都可以写一次,读无限次
支持随机访问,系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
读快、写慢。要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
与机械硬盘相比的特点
SSD读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
SSD 安静无噪音、耐摔抗震、能耗低、造价更贵
SSD的一个"块"被擦除次数过多(重复写同一个块)可能会坏掉,而机械硬盘的扇区不会因为写的次数太多而坏掉
磨损均衡技术
思想:将 "擦除" 平均分布在各个块上,以提升使用寿命
动态磨损均衡
写入数据时,优先选择累计擦除次数少的新闪存块
静态磨损均衡
SSD监测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的储存任务,让较新的闪存块承担更多的写任务
高速缓冲存储器
Cache 的基本原理
每次被访问的主存块,一定会被立即调入Cache
工作原理
将某些主存块复制到 Cache 中,缓和 CPU 与主存之间的速度矛盾
Cache 的功能完全由硬件实现
硬件自动拆分物理地址中的tag位和块内地址
Cache只用储存 tag 位 + 有效位 + 替换算法位 + 脏位
局部性原理
时间局部性
现在访问的地址,不久之后也很可能被再次访问
对于循环语句的执行
空间局部性
现在访问的地址,其附近的地址也很可能即将被访问
对于数组的访问
性能分析
Cache 命中率、缺失率
命中率 H:CPU欲访问的信息已在Cache中的比率
缺失(未命中)率 M = 1 - H
两种方式
先访问 Cache,发现未命中再访问主存
同时访问 Cache 和主存,若 Cache 命中则停止访问主存
容量计算
数据部分
Cache的总行数 * Cache行的数据部分位数
控制算法位
(有效位+替换算法位+脏位+tag标记位)* Cache的总行数
有效位:判断这个存储单元里面有没有数据
替换算法位:进行RLU替换算法时需要用的到
脏位:判断Cache行中的数据有没有被修改过(写回法需要)
相加即得Cache总容量
其他概念
主存与 Cache 之间以“块”为单位进行数据交换
主存的“块”又叫“页/页框/页面”;Cache的“块”又叫“行”
主存地址可拆分为(主存块号,块内地址)的形式
Cache 和主存映射方式
Cache 中存储的信息
有效位 (0/1) + 标记 + 整块数据
其中“标记”用于指明对应的内存块,不同映射方式,“标记”的位数不同
全相联映射

主存块可以放到 Cache 的任意位置
主存地址结构

标记 (整个主存块号) + 块内地址
优点:Cache 存储空间利用充分,命中率高;缺点:查找“标记”最慢,有可能需要对比所有行的标记
直接映射

主存块只能放到特定的某个 Cache 行,行号 = 主存块号 % 总行数
主存地址结构

标记 (主存块号前几位) + 行号 (主存块号末几位) + 块内地址
优点:对于任意一个地址,只需对比一个“标记”,速度最快;缺点:Cache 存储空间利用不充分,命中率低
组相联映射

主存块可以放到特定分组中的任意位置,所属组号 = 主存块号 % 总组数
主存地址结构

标记 (主存块号前几位) + 组号 (主存块号末几位) + 块内地址
优点:另外两种方式的折中,综合效果较好
术语:n 路组相联映射——每 n 个 Cache 行为一组
m路相联意味着每次标记位同时和m行种保存的标记位比较,所以比较器需要m个。
Cache替换算法
随机算法(RAND)
随便选一个主存块替换
过于 Freestyle,效果很差
先进先出算法(FIFO)
优先替换最先被调入 Cache 的主存块
不遵循局部性原理,效果差
近期最少使用(LRU)
将最久没有被访问过的主存块替换。每个 Cache 行设置一个“计数器”,用于记录多久没被访问
Cache块的总数 =2^n,则计数器只需n位
基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU 算法的实际运行效果优秀,Cache 命中率高。
计数器工作原理
①命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变;
②未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1;
③未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1
最不经常使用(LFU)
将被访问次数最少的主存块替换。每个 Cache 行设置一个“计数器”,用于记录被访问过多少次
新调入的块计数器=0,之后每被访问一次计数器+1。需要替换时,选择计数器最小的一行
若有多个计数器是最小的行,可按行号递增、或FIFO策略进行选择
曾经被经常访问的主存块在未来不一定会用到,LFU 实际运行效果不好
何时需要替换
直接映射无需考虑替换
组相联映射考虑组内替换
全相联映射全局考虑替换
Cache 写策略
写命中
全写法 (写直通法, write-through)

当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲 (write buffer)
写回法 (write-allocate)

当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存
写不命中
写分配法 (write-allocate)

当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用。
非写分配法 (not-write-allocate)

当CPU对Cache写不命中时只写入主存,不调入Cache。通常搭配全写法使用。
多级Cache
现代计算机通常采用多级Cache结构,各级Cache间常采用“全写法 + 非写分配法”,Cache和主存间常采用“写回法 + 写分配法”
Cache读策略
CPU读取Cache里面有没有所需数据
没有命中
从主存调取相应的主存块到Cache
命中
直接读取
硬件会把行号和块内地址自动拆分出来定位到Cache
指令系统
指令的基本格式
指令集体系结构(ISA)
概念
机器指令(简称指令)
是指示计算机执行某种操作的命令。
一台计算机的所有指令的集合构成该机的指令系统,也称指令集。
CPU能理解并且直接执行
指令系统(ISA)
完整定义了软件和硬件之间的接口,是机器语言或汇编语言程序员所应熟悉的。
ISA 规定内容
1)指令格式,指令寻址方式,操作类型,以及每种操作对应的操作数的相应规定。
2)操作数的类型,操作数寻址方式,以及是按大端方式还是按小端方式存放。
大端存储
低地址字节放在结果的高位,高地址字节放在低位。(顺序)
小端存储
低地址字节放在结果的低位,高地址字节放在高位。(倒序)
3)程序可访问的寄存器编号、个数和位数,存储空间的大小和编址方式。
4)指令执行过程的控制方式等,包括程序计数器、条件码定义等。
指令格式
一条指令由操作码、地址码组成,其中地址码可能有 0~4 个
按地址码数目分类
零地址指令
格式
OP
语义: 对栈顶若干元素做运算,结果压回栈顶
实际应用
不需要操作数,如空操作、停机、关中断等指令
堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈
一地址指令
格式
OP A
语义
OP(A1)→A1
ACC ← (ACC) OP (A)
注:A1 指某个主存地址, (A1)表示 A1 所指向的地址中的内容
实际应用
只需要单操作数,如加1、减1、取反、求补等
完成一条指令需要3次访存:取指 → 读A1 → 写A1
需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
完成一条指令需要2次访存:取指 → 读A1
二地址指令
格式
OP A1, A2
语义: (A1) OP (A2) → A1(结果覆盖第一个源)
实际应用
常用于需要两个操作数的算术运算、逻辑运算相关指令
完成一条指令需要访存4次,取指 → 读A1 → 读A2 → 写A1
三地址指令
格式
OP A1, A2, A3
语义: (A1) OP (A2) → A3
实际应用
常用于需要两个操作数的算术运算、逻辑运算相关指
完成一条指令需要访存4次,取指 → 读A1 → 读A2 → 写A3
四地址指令
格式
OP A1, A2, A3, A4
语义: (A1) OP (A2) → A3,下条指令地址=A4
实际应用
跟三地址一样,只是最后变成将PC的值修改为A4所在的地址
完成一条指令需要访存4次,取指 → 读A1 → 读A2 → 写A3
按指令长度分类
指令字长的概念(对比机器字长、存储字长)
指令字长
一条指令的总长度(可能会变)
机器字长
CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长
一个存储单元中的二进制代码位数(通常和MDR位数相同)
指令字长的类型
半字长指令、单字长指令、双字长指令
指令长度是机器字长的多少倍
定长指令字结构
所有指令长度相同
变长指令字结构
各指令长度不同
指令字长会影响取指令所需的时间。 如机器字长=存储字长=16bit,则取一条双字长指令需要两次访存
按操作码长度分类
定长操作码
控制器的译码电路设计简单,但灵活性较低
可变长操作码
控制器的译码电路设计复杂,但灵活性较高
扩展操作码指令格式
定长指令字结构+可变长操作码
不同地址数的指令使用不同长度的操作码
按操作类型分类
数据传送类
CPU、主存之间的数据传送
LOAD 作用:把存储器中的数据放到寄存器中
STORE 作用:把寄存器中的数据放到存储器
进行主存与CPU之间的数据传送
运算类
算数逻辑操作、移位操作
算术:加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
程序控制类
无条件转移 JMP
条件转移 JZ:结果为0;JO:结果溢出;JC:结果有进位
调用和返回
CALL和RETURN
陷阱(Trap)与陷阱指令
改变程序的执行顺序
输入输出类
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)
进行CPU和I/O设备之间的数据传送
指令格式与操作码设计
扩展操作码的定义
扩展操作码举例

指令字长16位,4位为基本操作码字段OP,剩余12位为地址字段A1、A2和A3
但至少须将1111留作扩展操作码之用,即三地址指令为15条;二、一址一样
扩展操作码格式
不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同
各指令操作码设计需避免重复
对使用频率较高的指令,分配较短的操作码 对使用频率较低的指令,分配较长的操作码 从而尽可能减少指令译码和分析的时间。
扩展操作码的实现
留出特定状态用于扩展
例如:16位指令字中留出1位用于扩展
指令系统设计实例
15条三地址指令,12条二地址指令,62条一地址指令,32条零地址指令
设地址长度为n,上一层流出m种状态,下一层可扩展出 m*2^n 种状态
指令的寻址方式
指令寻址
概念
下一条 欲执行 指令 的 指令地址
始终由程序计数器 PC 指明
顺序寻址
(PC) + "1" ----> PC
此处的"1"要理解为 1 个指令字长
因为有些指令是超过一个字节的,如果计算机进行按字编址那么PC向下移动不只是+1了
解决办法:读入一个字,根据操作码判断这条指令的总字节数 n,修改PC的值
每次取指令结束后,一定会PC+"1"
跳跃寻址
概念
执行转移类指令导致的 PC 值改变
CPU 永远根据 PC 的内容取主存取指令
绝对转移
地址码直接指出转移目标地址
相对转移
地址码指出转移目的地址相对于当前PC值的偏移量(相对寻址)
数据寻址
概念
确定 本条指令 的 地址码指明的真实地址
求出操作数的真实地址,称为有效地址(EA —— effective address)
直接寻址

概念
指令字中的形式地址A就是操作数的真实地址EA,即EA=A
一条指令的执行
取指令 访存1次
执行指令 访存1次
暂不考虑存结果共访存2次
优点
简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址
缺点
A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。
间接寻址

概念
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A) 。
优点
可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。
便于编制程序(用间接寻址可以方便地完成子程序返回)。
缺点
指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存)。
寄存器寻址

概念
在指令字中直接给出操作数所在的寄存器编号,即EA =Ri,其操作数在由Ri所指的寄存器内
优点
指令在执行阶段不访问主存,只访问寄存器,
指令字短且执行速度快,支持向量/矩阵运算。
缺点
寄存器价格昂贵,计算机中寄存器个数有限 。
一条指令执行
取指令 访存1次
执行指令 访存0次
暂不考虑存结果共访存1次
寄存器间接寻址

概念
寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)
特点
与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
一条指令的执行
取指令 访存1次
执行指令 访存1次
暂不考虑存结果共访存2次
隐含寻址

概念
不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址 。
优点
有利于缩短指令字长
缺点
需增加存储操作数或隐含地址的硬件
立即寻址

形式地址A就是操作数本身,又称为立即数,一般采用补码形式。#表示立即寻址特征。
优点
指令执行阶段不访问主存,指令执行时间最短
缺点
A的位数限制了立即数的范围。
如A的位数为n,且立即数采用补码时,可表示的数据范围为−2^n~2^n − 1
偏移寻址
概念
以某个地址作为起点形式地址视为“偏移量”
基址寻址:以程序的起始存放地址作为“起点”
变址寻址:程序员自己决定从哪里作为“起点”
相对寻址:以程序计数器PC所指地址作为“起点”
基址寻址
 
概念
将CPU中基址寄存器(BR —— base address register)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即 EA=(BR)+A。
便于多程序并行
基址寄存器存储的是固定地址,指令里面存的是偏移量
需要使用寄存器!!!
优点
便于程序“浮动”,方便实现多道程序并发运行
两种方式
基址寄存器
基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
普通寄存器作为基址寄存器
当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
优点
可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);
用户不必考虑自己程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动) 。
变址寻址

概念
有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA= (IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器 。
便于循环程序
变址寄存器存储的是变量,指令里面存的是固定地址
需要使用寄存器!!!
方式
在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序
特点
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)
基址 & 变址复合寻址
基址寻址:EA=(BR)+A
变址寻址:EA=(IX)+A
先基址后变址寻址:EA=(IX)+(BR)+A
相对寻址
概念
把 程序计数器PC 的内容加上指令格式中的 形式地址A 而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示 。
便于转移指令
优点
操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令
ATTENTION
取出当前指令后, PC会指向下一条指令,相对寻址是相对于下一条指令的偏移
堆栈寻址
概念
操作数存放在堆栈中,隐含使用堆栈指针(SP — Stack Pointer)作为操作数地址。
堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。
方式
硬堆栈
靠CPU内专用寄存器/存储区,地址硬布线、速度快,但成本高
软堆栈
把主存当栈,用寄存器存栈顶指针,灵活但慢一步,成本低
程序的机器代码表示
指令的格式
操作码
各种操作指令
地址码
数据在寄存器

在汇编指令中,给出寄存器名,每一个寄存器都是32bit
通用寄存器:eax、ebx、ecx、edx
AX、BX、CX、DX

通用寄存器可以使用低16bit
AH、AL、BH、BL

用用计算器可以使用指定8bit
变址寄存器:esi、edi
esi:Source Index,源变址寄存器。它通常用于存储源数据的地址,在字符串操作和内存复制等操作中作为源地址指针。
edi:Destination Index,目的变址寄存器。它通常用于存储目标数据的地址,在字符串操作和内存复制等操作中作为目标地址指针。
堆栈寄存器:ebp、esp
ebp:Base Pointer,基址指针寄存器。它通常用于指向当前栈帧的底部,存储着栈帧的基地址,可以用于访问栈帧中的局部变量和函数参数。
esp:Stack Pointer,堆栈指针寄存器。它指向当前栈帧的顶部,即下一个可用的栈空间。随着函数调用和局部变量的分配,esp 会相应地增加或减少。
数据在主存
在汇编指令中,给出读写长度、主存地址
dword ptr [地址] #32bit
word ptr [地址] #16bit
byte ptr [地址] #8bit
数据在指令
在汇编指令中,直接给出常量,即“立即寻址”可用十进制表示、也可用十六进制(常以h结尾)
常用的X86汇编指令
其他指令
用于实现分支结构、循环结构的指令:cmp、test、jmp、jxxx
用于实现函数调用的指令:push、pop、call、ret
用于实现数据转移的指令
mov
指令功能
mov 目的操作数d, 源操作数s
将 源操作数 s 所指地址,复制到 目的操作数d 所指的位置
例子
mov eax, dword ptr [ebx]
#将 ebx 所指主存地址的 32bit 复制到 eax 寄存器中
mov dword ptr [ebx], eax
#将 eax 的内容复制到 ebx 所指主存地址的 32bit
mov eax, byte ptr [ebx]
#将 ebx 所指的主存地址的 8bit 复制到 eax
mov eax, [ebx]
#若未指明主存读写长度,默认 32 bit
mov [af996h], eax
#将 eax 的内容复制到 af996h 所指的地址(未指明长度默认32bit)
mov eax, dword ptr [ebx+8]
#将 ebx+8 所指主存地址的 32bit 复制到 eax 寄存器中
mov eax, dword ptr [af996-12h]
#将 af996-12 所指主存地址的 32bit 复制到 eax 寄存器中
算术运算指令
逻辑运算指令
AT&T 和 Intel 格式对比
住地址和偏移量的表示
选择语句
注:Intel x86 处理器中,程序计数器 PC (Program Counter)通常被称为 IP(Instruction Pointer)
无条件转移语句(jmp)
指令方式
jmp <地址>
#PC 无条件转移至 <地址>
jmp 128
#<地址>可以用常数给出
jmp eax
#<地址>可以来自于寄存器
jmp [999]
#<地址>可以来自于主存
jmp NEXT

#<地址>可以用“标号”锚定
条件转移指令(jxxx)
指令方式
je <地址>
# jump when equal,若a==b则跳转
jne <地址>
# jump when not equal,若a!=b则跳转
jg <地址>
# jump when greater than,若a>b则跳转
jge <地址>
# jump when greater than or equal to,若a>=b则跳转
jl <地址>
# jump when less than,若a<b跳转
jle <地址>
# jump when less than or equal to,若a<=b则跳转
操作方式
每次进行条件指令时,前面都需要有一个 cmp 指令将两个数值进行比较
cmp eax, ebx # 比较寄存器eax和ebx里的值 jg NEXT # 若 eax > ebx,则跳转到 NEXT:
示例
在机器代码里面,else逻辑在前,if逻辑在后
补充:cmp指令底层原理
cmp的本质逻辑:进行 a-b 减运算,并生成标志位OF、ZF、CF、SF
条件判断
条件转移指令根据相应标志位进行条件判
je <地址>
# 若a==b则跳转,ZF==1?
jne <地址>
# 若a!=b则跳转,ZF==0?
jg <地址>
# 若a>b则跳转,ZF==0 && SF==OF?
jge <地址>
# 若a>=b则跳转,SF==OF?
jl <地址>
# 若a<b则跳转,SF!=OF?
jle <地址>
# 若a<=b则跳转,SF!=OF || ZF==1?
循环语句
利用条件转移语句实现
用 loop 指令循环
注:在 x86 中 ecx 默认为循环计数器,所以,loop指令需要搭配使用ecx
函数调用
高级语言的函数调用
call & return
机器代码
函数调用指令: call <函数名>
①将IP旧值压栈保存(保存在函数的栈帧顶部)
②设置IP新值,无条件转移至被调用函数的第一条指令
函数返回指令: ret
从函数的栈帧顶部找到 IP旧值,将其出栈并恢复IP寄存器
例子
访问栈帧
为什么栈顶在下,栈顶在上
大多数系统通常按照如图所示过程进行分区
使用的寄存器

ebp:指向当前栈帧的“底部”
esp:指向当前栈帧的“顶部”
x86 系统中,默认以4字节为栈的操作单位
用 push & pop 指令访问
指令格式
Push 🐶
// 先让esp减4,再将 🐶 压入
注1:🐶 可以是立即数、寄存器、主存地址 注2:🐴 可以是寄存器、主存地址 注3:x86 默认以4字节为单位
Pop 🐴
//栈顶元素出栈写入 🐴 ,再让 esp加4
例子
push eax
#将寄存器eax的值压栈

push 985
#将立即数985压栈

push [ebp+8]
#将主存地址[ebp+8]里的数据压栈

pop eax
#栈顶元素出栈,写入寄存器eax

pop [ebp+8]
#栈顶元素出栈,写入主存地址[ebp+8]

用 mov 指令访问
概念
mov 指令,结合 esp、ebp 指针访问栈帧数据
注:可以用减法/加法指令,即 sub/add 修改栈顶指针 esp 的值
例子
sub esp, 12
#栈顶指针-12

mov [esp+8], eax
#将eax的值复制到主存[esp+8]
mov [esp+4], 958
#将985复制到主存[esp+4]
mov eax, [ebp+8]
#将主存[ebp+8]的值复制到eax
mov [esp],eax
#将eax的值复制到主存[esp]
add esp, 8
#栈顶指针+8

注:在X86当中,mov指令不支持两个地址都来自于主存
切换栈帧
1. call指令

①将IP旧值压栈保存(效果相当于 push IP)
②设置IP新值,无条件转移至被调用函数的第一条指令(效果相当于 jmp add)
2. enter指令(调用)
等价代码
push ebp

#保存上一层函数的栈帧基址(ebp旧值)
mov ebp,esp

#设置当前函数的栈帧基址(ebp新值)
注
在每个函数开头的“例行处理”
每个栈帧底部,用于保存上一层栈帧的基址
3. leave指令(返回)
等价代码
mov esp, ebp

#让esp指向当前栈帧的底部
pop ebp

#将esp所指元素出栈,写入寄存器ebp
4. ret指令
从函数的栈帧顶部找到 IP旧值,将其出栈并恢复IP寄存器
栈帧内的内容
未使用区域:gcc 编译器将每个栈帧大小设置为 16B 的整数倍(当前函数的栈帧除外)因此栈帧内可能出现空闲未使用的区域。
总结
CSIC和RSIC
CSIC(Complex Instruction Set Computer)
设计思路
一条指令完成一个复杂的基本功能。
类比
有很多库函数的C语言
除了提供整数的加减乘指令除之外, 还提供矩阵的加法指令、矩阵的减法指令、矩阵的乘法指令
一条指令可以由一个专门的电路完成 有的复杂指令用纯硬件实现很困难
则采用“存储程序”的设计思想,由一个比较通用的电路配合存储部件完成一条指令
代表
x86架构,主要用于笔记本、台式机等
RISC: Reduced Instruction Set Computer
设计思路
一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。
类比
没有库函数的C语言
只提供整数的加减乘指令
一条指令一个电路,电路设计相对简单,功耗更低“并行”、“流水线”
代表
ARM架构,主要用于手机、平板等
中央处理器
CPU的功能和基本结构
CPU的功能
指令控制
完成取指令、分析指令和执行指令的操作,即程序的顺序控制
操作控制
一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
时间控制
对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信
数据加工
对数据进行算术和逻辑运算
中断处理
对计算机运行过程中出现的异常情况和特殊请求进行处理
运算器
功能
对数据进行加工
基本结构
算术逻辑单元ALU
主要功能是进行算术/逻辑运
暂存寄存器
用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容
适用于单总线结构配合ALU
指令:两个操作数分别来自主存和R0,最后结果存回R0
操作:从主存中取来的操作数直接放入暂存器,就不会破坏运算前R0的内容
概念:ALU需要两个信号同时输入,但是总线每次只能传输一个数字,如果没有暂存寄存器,主存的数据没有地方放,可能就会随便找一个寄存器就把寄存器里面的东西给覆盖掉了
用户不可见
通用寄存器组
如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
程序状态字寄存器PSR
保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志 (OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成
用户可见
别称:标志寄存器 Flag Register
累加寄存器ACC
它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算
移位器
对运算结果进行移位运算
计数器
控制乘除运算的操作步数
通路方式
专用数据通路方式
概念
根据指令执行过程中的数据和地址的流动方向安排连接线路。
优缺点
性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
方法1

使用多路选择器根据控制信号选择一路输
方法2

使用三态门可以控制每一路是否输出
如:R0out为1时R0中的数据输出到A端 R0out为0时R0中的数据无法输出到A端
CPU内部单总线方式

概念
将所有寄存器的输入端和输出端都连接到一条公共的通路上
优缺点
结构简单,容易实现,但数据传输存在较多冲突的现象,性能较
控制器
功能
取指令
自动形成指令地址;自动发出取指令的命令。
控制器可以区分存储单元中存放的是指令还是数据的原因(指令里面写了是取数据还是取指令)
分析指令
操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址
执行指令
根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。
中断处理
管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。
基本结构

程序计数器PC
用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能(PC也算是寄存器)
用户可见
机器指令不能显式使用PC,也就是没有直接操作 PC 的指令,比如将PC的值赋给其他寄存器
指令译码器
仅对操作码字段进行译码,向控制器提供特定的操作信号。
时序系统
用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到
微操作信号发生器
根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
指令寄存器IR
用于保存当前正在执行的那条指令
只能被硬件访问
用户不可见
存储器地址寄存器MAR
用于存放索要访问存储单元的地址
存储器数据寄存器MDR
用于存放向主存写入的信息或从主存中读出的信息
数据通路
基本结构
专用通路
内部总线
概念
CPU内部数据流经的路径上的部件,主要是CPU内部进行数据运算,存储和传送的部件,这些部件的宽度基本上要一致,才能互相匹配
CPU内部总线的宽度、运算器的位数、通用寄存器的宽度
决定了 n 位 CPU 里面的 n
这里面的n指的是机器字长,机器字长也指的是数据通路的宽度
指令执行过程
指令周期
概念
CPU从主存中每取出并执行一条指令所需的全部时间
指令周期常常用若干机器周期来表示,机器周期又叫CPU周期
一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)
时钟周期:每个时钟周期称为一个节拍,机器的主频就是时钟周期的倒数
每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。

指令周期的分类

取指周期
间址周期
执行周期
中断周期
中断周期是指令执行后完成的
标志触发器FE、IND、EX、INT

四个工作周期都有CPU访存操作,只是访存的目的不同
取指周期是为了取指令
间址周期是为了取有效地址
执行周期是为了取操作数
中断周期是为了保存程序断点
数据流
取指周期:根据PC中的内容取出指令代码并存放在IR中
1. 当前指令地址送至存储器地址寄存器,记做:(PC) → MAR
2. CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1 → R
3. 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR
4. 将MDR中的内容(此时是指令)送入IR,记做:(MDR) → IR
5. CU发出控制信号,形成下一条指令地址,记做:(PC)+1 → PC
间址周期:根据IR中指令地址码取操作数有效地址
1. 将指令的地址码送入MAR, 记做:Ad(IR) → MAR 或 Ad(MDR) → MAR
2. CU发出控制信号,启动主存做读操作,记做:1 → R
3. 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR
另一种做法:将有效地址送至指令的地址码字段,记做:(MDR)→ Ad(IR)
执行周期:根据指令字的操作码和操作数进行相应的操作
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
中断周期:保存断点,送中断向量,处理中断请求
中断概念
暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。
一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。
过程
1. CU控制将SP减1,修改后的地址送入MAR 记做: (SP)-1 → SP,(SP) → MAR
2. CU发出控制信号,启动主存做写操作,记做:1 → W
3. 将断点(PC内容) 送入MDR,记做:(PC) → MDR
4. CU控制将中断服务程序的入口地址 (由向量地址形成部件产生)送入PC,记做:向量地址→ PC
执行方案
单指令周期:所有指令选用相同的执行时间,指令间串行

概念
对所有指令都选用相同的执行时间来完成 。
指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。
缺点
对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度
多指令周期:不同类型指令选用不同的执行步骤,指令间串行

概念
对不同类型的指令选用不同的执行步骤来完成
指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程
缺点
需要更复杂的硬件设计
流水线方案:隔一段时间启动一条指令,多条指令处于不同阶段,同时运行
概念
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中 。
指令之间并行执行
CPU类型
单周期CPU
一个指令周期就是一个时钟周期
多周期CPU
一个指令周期包含多个时钟周期
流水线CPU
一个流水段就是一个时钟周期
补充
边沿触发
规定存储元件中的状态只允许在时钟跳变边沿改变
时钟信号的跳变
正跳变
在时钟的上升沿进行的跳变
负跳变
在时钟的下降沿进行的跳变
数据通路
概念
组成数据通路的元件
组合逻辑元件(操作元件)
概念
任何时刻产生的输入仅取决于当前的输入
不含存储信号的逻辑单元,不受时间的控制,
输出与输入之间无反馈通路,信号单向传输
相关元件
加法器、算术逻辑单元(ALU)、译码器、多路选择器、三态门
时序逻辑元件(状态元件)
概念
任何时刻的输入不仅与该时刻的输入有关,还与时刻以前的输入有关
包含存储信号的记忆单元
必须在时钟节拍下工作
相关元件
各类寄存器和存储器
数据通路的基本结构
CPU内部单总线方式
CPU内部多总线方式
内部总线
同一部件,如CPU内部连接各寄存器及运算部件之间的总线
系统总线
同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线
专用数据通路方式
不论CPU内部结构有多么的复杂,它都可视为由 数据通路 和 控制部件 两大部件组成
单总线结构
操作示例
寄存器之间数据传送
指令
把PC内容送至MAR
操作流程及控制信号
(PC) → Bus
PCout有效,PC内容送总线
也可写为: (PC)→Bus→MAR
Bus → MAR
MARin有效,总线内容送MA
主存与CPU之间的数据传送
指令
如CPU从主存读取指令
操作流程及控制信号
(PC)→Bus→MAR
PCout和MARin有效,现行指令地址→MAR
1→R
CU发读命令(通过控制总线发出,图中未画出)
MEM(MAR)→MDR
MDRin有效
MDR→Bus→IR
MDRout和IRin有效,现行指令→IR
执行算术或逻辑运算
指令
一条加法指令
微操作序列及控制信号
Ad(IR)→Bus→MAR
MDRout和MARin有效
因为读指令操作之后MDR的内容和IR一样
或AdIRout和MARin有效
1→R
CU发读命令
MEM(MAR)→数据线→MDR
MDRin有效
MDR→Bus→Y
MDRout和Yin有效,操作数→Y
(ACC)+(Y)→Z
ACCout和ALUin有效,CU向ALU发送加命令
Z→ACC
Zout和ACCin有效,结果→ACC
专用通路结构
取指周期
(PC)→MAR
C0有效

(MAR)→主存
C1有效

1→R
控制单元向主存发送读命令
M(MAR)→MDR
C2有效

(PC)+1→PC
Op(IR)→CU
C4有效

控制器的功能和工作原理
硬布线控制器
微命令 & 微操作
概念
CU发出一个微命令,可完成对应的微操作
如: 微命令1:使得 PCout、MARin 有效。 完成对应的微操作1: (PC) ➡️ MAR
微操作

描述的是我们要完成的一个细分的工作,完成一个什么样子的功能
微命令

我们要完成这个微操作要发出哪一个控制信号
发出“微命令”的依据
指令操作码
目前的机器周期
节拍信号
机器状态条件
特点
一个节拍内可以并行完成多个“相容的” 微操作
同一个微操作可能在不同指令的不同阶段被使用
不同指令的执行周期所需节拍数各不相同。为了简化设计,选择定长的机器 周期,以可能出现的最大节拍数为准(通常以访存所需节拍数作为参考)
若实际所需节拍数较少,可将微操作安排在机器周期末尾几个节拍上进行
设计步骤
1. 分析每个阶段的微操作序列
待解决
确定哪些指令在什么阶段、在什么条件下会使用到的微操作
解决办法
罗列出所有指令在各个阶段的微操作序列,就可以知道在什么情况下需要使用这个微操作
2. 选择CPU的控制方式
待解决
每个机器周期安排几个节拍?
采用定长机器周期还是不定长机器周期?
3. 安排微操作时序
待解决
如何用3个节拍完成整个机器周期内的所有微操作?
原则
1. 微操作的先后顺序不得随意更改
2. 被控对象不同的微操作尽量安排在一个节拍内完成
例子
MDR ➡️ IR 是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成 OP ( IR ) ➡️ ID。也就是可以一次同时发出两个微命令
3. 占用时间较短的微操作尽量安排在一个节拍内完成并允许有先后顺序
4. 电路设计
(1) 列出操作时间表

列出在取指、间址、执行、中断周期,T0、T1、T2 节拍内有可能用到的所有微操作
(2) 写出为操作命令的最简表达式

(3) 画出逻辑图

特点
指令越多,设计和实现就越复杂,因此一般用于 RSIC(精简指令系统)
如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难
由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路及时产生
微程序控制器
微程序&微指令
程序
由指令序列组成
指令
对程序执行步骤的描述
微程序

由微指令序列组成,每一种指令对应一个微程序
微指令

对指令的具体执行步骤的描述
对应一个或者多个微操作
CU 的结构

微地址形成部件
产生初始微地址和后继微地址
微地址:即微指令在 CM 中的存放地址
初始微地址:通过 指令操作码 形成对应 微程序 的 第一条微指令的存放地址
顺序逻辑
根据某些 机器标志 和 时序信息 确定下一条微指令的存放地址
机器标志
根据指令地址码的 寻址特征 判断是否需要跳过 间地址周期
时序信息
根据中断信号判断是否进入中断周期
CMAR(μPC)
微地址寄存器,接收 微地址形成部件 送来的微地址,为在CM中读取微指令作准备
地址译码器
将 CMAR 内的地址信息译码为电信号,控制 CM 读出微指令
控制存储器 CM
存放所有机器指令对应的微程序(微指令序列)
用 ROM 实现,按地址寻访。通常在 CPU 出厂时就把所有微程序写入
CMDR(μIR)
微指令寄存器,用于存放当前要执行的微指令。CM(μPC)→μIR
工作原理
指令周期= 取指周期 -> 间址周期 -> 执行周期 -> 中断周期。
其中间址、中断周期可有可无
一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序
一条指令对应一个微程序
物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把它们看作一个整体
处理 取指周期、间址周期、中断周期 的微指令序列通常是 公用的。执行周期的微指令序列各不相同
取指周期的微指令序列固定从 #0 开始存放。执行周期的微指令序列的存放根据指令操作码确定
概念对比
微命令、微操作、微指令、微程序 之间的关系
微命令与微操作一一对应
微指令中可能包含多个微命令,因为有的微命令可以并行执行
微程序由一系列的微命令组成
一个微命令对应一根输出线
指令周期 vs 微周期
指令周期:从主存取出并执行一条机器指令所需的时间(描述指令的执行速度)
微周期(微指令周期):从控制器存储器取出一条微指令并执行相应微操作所需的时间(描述微指令的执行速度)
程序 vs 微程序
程序:由指令序列组成
微程序:由微指令序列组成,每一种指令对应一个微程序
指令 vs 微指令
指令:是对程序执行步骤的描述
微指令:是对指令执行步骤的描述
主存储器 vs 控制器存储器 (CM)
主存储器:存放机器指令
CM:存放微指令序列
PC vs μPC
PC:指明接下来操作的地址
μPC:指明接下来要执行的微指令的地址
IR vs μIR
μIR:暂存当前的微指令
微指令的设计
微指令格式
水平型微指令

每条微指令能定义多个可并行的微命令
优缺点

优点:微程序短,执行速度快
缺点:微指令长,编写微程序较麻烦
微命令与微操作一一对应,一个微命令对应一根输出线 有的微命令可以并行执行,因此一条微指令可以包含多个微命
垂直型微指令

每条微指令只能定义一个微命令,由微操作码指明
优缺点

缺点:微程序长,执行速度慢,工作效率低。
混合型微指令
在垂直型微指令的基础上加上一些简单的并行操作
特点
微指令较短,仍便于编写;微程序也不长,执行速度加快。
指令容斥
相容性微命令:可以并行完成的微命令
互斥性微命令:不允许并行完成的微命令
水平型微指令的编码方式
直接编码(直接控制)

控制码的每个bit对应一个微命令,
优缺点
优点:简单、直观,执行速度快,操作并行性好
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大
字段直接编码

原则
1. 将互斥性的微命令分在同一个段内,相容的分在不同的段
2. 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
3. 每个段留出一个状态表示“不操作”
优缺点
优点:可以缩短微指令字长
缺点:微指令操作码需要经过译码电路处理,因此执行速度更慢
字段间接编码

一个字段的微命令需要用另一个字段的微命令解释
优缺点
优点:可进一步缩短微指令字长
缺点:可能需要多级译码电路处理,执行速度最慢
缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段
下一条微指令地址的形成方式
断定法(下地址法)
根据当前执行的微指令下地址找到下一条微指令
计数器法
μPC+1顺序找到下一条微指令
操作码形成
根据指令操作码确定执行周期微程序首地址
分支转移
转移方式:指明判决条件
转移地址:指明转移成功后的去向
通过测试网络

由专门的硬件指明取指/中断周期的微程序首地址
微程序控制单元的设计
设计步骤
1. 分析每个阶段的微操作序列
取指周期的第一条微指令地址由硬件自动给出
上一条微指令的下地址表示下一条微指令的地址
2. 写出对应机器指令的微操作命令及节拍安排
写出每个周期所需要的微操作(参照硬布线)
补充程序控制器特有的微操作
3. 确定微指令格式
1. 根据微操作个数决定采用何种编码方式,以确定微指令操作控制字段的位数
2. 根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数
3. 最后按照控制字段位数和顺序控制字段位数就可以确定微指令字长
4. 编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点
微程序设计分类
静态微程序设计和动态微程序设计
静态
微程序无需改变,采用 ROM
动态
通过 改变微指令 和 微程序 改变机器指令有利于仿真,采用 EPROM
毫微程序设计
微程序设计 用 微程序解释机器指令
毫微程序设计 用 毫微程序解释微程序
毫微指令与微指令 的关系好比 微指令与机器指令 的关系
指令流水线
指令流水线基本概念和性能指标
基本概念
指令执行过程划分为不同阶段,占用不同的资源,就能使多条指令同时进行
表示方法
指令流程图:主要分析影响流水线的因素
时空图:主要分析流水线的性能
执行方式
设取指、分析、执行3个阶段的时间都相等,用t表示 ,按以下几种执行方式分析n条指令的执行时间
顺序执行方式

总耗时T = n×3t = 3nt
传统冯·诺依曼机采用顺序执行方式,又称串行执行方式
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低
一次重叠执行方式

总耗时T = 3t + (n-1)×2t = (1+2n)t
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。
二次重叠执行方式

总耗时T = 3t + (n-1)×t = (2+n)t
与顺序执行方式相比,指令的执行时间缩短近2/3。 这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。
性能指标
吞吐率
概念
吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量
公式
设任务数为n
处理完成n个任务所用的时间为Tk
一条指令的执行分为 k个阶段
每个阶段耗时Δt ,一般取Δt =一个时钟周期
当连续输入的任务n→∞时,得最大吞吐率为TPmax=1/Δt
理想状态
加速比
概念
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
公式
当连续输入的任务n→∞时,最大加速比为Smax=k
效率
概念
流水线的设备利用率称为流水线的效率
在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。
公式
当连续输入的任务n→∞时,最高效率为Emax=1
指令流水线影响因素和分类
影响因素
机器周期的设置
RSIC
结构相关(资源冲突)
概念
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关(图中红色和蓝色为冲突区域)

解决办法
暂停相关指令
后一相关指令暂停一周期
资源重复配置
数据存储器+指令存储器

数据相关(数据冲突)
概念
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。(如图红色区域为冲突点)

解决办法
暂停相关指令
把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。
硬件stall
根据指令流程图分析耗时
软件NOP
数据旁路技术
当 ALU 计算结果尚未写回寄存器时,直接把这条结果线“旁路”到后续指令的 ALU 输入端,从而消除 RAW 停顿。
编译优化
通过编译器调整指令顺序来解决数据相关。
控制相关(控制冲突)
概念
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。

解决办法
分支预测
预取两个方向的指令
加快和提前形成条件码
预测类型
简单预测(永远猜ture或false)
动态预测(根据历史情况动态调整)
提高转移方向的猜准率
分类
按使用级别
部件功能级
就是将复杂的算术逻辑运算组成流水线工作方式
例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
处理机级
是把一条指令解释过程分成多个子过程
如前面提到的取指、译码、执行、访存及写回5个子过程
处理机间
是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
按完成功能
单功能
指只能实现一种固定的专门功能的流水线
多功能
指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
按连接方式
动态
同一时间内,流水线的各段只能按同一种功能的连接方式工作
静态
同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。
这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂
按有无反馈信号
线性
从输入到输出,每个功能段只允许经过一次,不存在反馈回路
非线性
存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线
这种流水线适合进行线性递归的运算
多发技术
超标量流水线技术

概念
每个时钟周期内可 并发多条独立指令
特点
要配置多个功能部件
不能调整 指令的 执行顺序
通过编译优化技术,把可并行执行的指令搭配起来
多发射流水线
概念
同时发射多个指令,有多条流水线同时进行
前提
多个执行部件
结果
能达到小于1的CPI,定义CPI的倒数为IPC
分类
超长指令字技术

静态多发射
超长指令字处理器+编译器静态调度
概念
由 编译程序挖掘 出指令间 潜在 的 并行性,将 多条 能 并行操作 的指令组合成 一条
特点
具有 多个操作码字段 的 超长指令字(可达几百位)
采用 多个处理部件
超流水线技术

动态多发射
按序发射按序完成
只可能出现 先写后读(RAW)相关
按序发射无序完成
无序发射无序完成
超标量处理器+动态流水线调度
概念
在 一个时钟周期 内 再分段 ( 3 段)
在 一个时钟周期 内 一个功能部件使用多次( 3 次)
特点
不能调整 指令的 执行顺序
靠编译程序解决优化问
适合流水线方式的指令特点
指令长度尽量一致,有利于简化取指令和指令译码操作
指令格式少,且源寄存器位置相同,有利于在指令未知时就可读取操作
只有LOAD/STORE 指令才能对操作数进行存储访问,有利于减少操作步骤,规整流水线
数据和指令在内存中要“对齐”存放,有利于减少方寸次数和流水线的规整
规整、简单和一致等特性有利于指令的流水线执行
五段式指令流水线
①IF取指 ➡️ ②ID译码&取数 ➡️ ③EX 执行 ➡️ ④M访存 ➡️ ⑤WB写回寄存器
常用指令
运算类指令
流程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:取出操作数至ID段锁存器
EX:运算,将结果存入EX段锁存器
M:空段
WB:将运算结果写回指定寄存器
LOAD指令
流程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到 Imm
EX:运算,得到有效地址
M:从数据Cache中取数并放入锁存器WB:将取出的数写回寄存器
RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存
STORE指令
流程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm。将要存的数放到B
EX:运算,得到有效地址。并将锁存器B的内容放到锁存器 Store。
M:写入数据Cache
WB:空段
条件转移指令
在IF段结束止之后PC就会自动 +“1”
流程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:进行比较的两个数放入锁存器A、B;偏移量放入 Imm
EX:运算,比较两个数
M:将目标PC值写回PC(左图没画全)
WB:空段
很多教材把写回PC的功能段称为“WrPC段”,其耗时比M段更短,可安排在M段时间内完成
无条件转移指令
流程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:偏移量放入 Imm
EX:将目标PC值写回PC(左图没画全)
“WrPC段”耗时比EX段更短,可安排在EX段时间内完成。 WrPC段越早完成,就越能避免控制冲突。 当然,也有的地方会在WB段时间内才修改PC的值
M:空段
WB:空段
多处理器系统的基本概念
Flynn分类法
SISD(单指令流单数据流)模型
特点
每条指令处理一两个数据
eg:计组课程⼀直在学的就是SISD,每条指令可以处理⼀两个数据(移位指令、加法指令)
不是 数据并行技术
硬件组成
一个处理器 + 一个存储器
标量流水线处理机
若采⽤指令流⽔线,需设置多个功能部件,采⽤多模块交叉存储器
是时间并行技术
SIMD(单指令流多数据流)模型
特点
各指令序列只能并发、不能并⾏,但每条指令可同时处理很多个具有相同特征的数据
是一种 数据级并行技术
硬件组成
⼀个指令控制部件(CU)+ 多个处理单元/执⾏单元(如ALU)+ 多个局部存储器
每个执⾏单元有各⾃的寄存器组、局部存储器、地址寄存器。但整体只有⼀个程序计数器PC
不同执⾏单元执⾏同⼀条指令,处理不同的数据
应用实例
对数组元素的重复处理优化
eg:某些显卡常采⽤SIMD,图像处理时,常对每个像素点进⾏完全⼀样的渲染(⽐如加个粉红⾊滤镜)
eg:可⽤于优化for循环中对数组元素的重复处理
向量处理器
概念
SIMD的变体:多处理单元,多组向量寄存器
特点
⼀条指令的处理对象是“向量”
eg:向量处理机的LOAD指令,可以将⼀个向量取到向量寄存器中;加法指令,可以实现两个向量相加
擅⻓对向量型数据并⾏计算、浮点数运算,常被⽤于超级计算机中,处理科学研究中巨⼤运算
eg:空⽓动⼒学、核物理学、巨型矩阵计算问题
硬件组成
多个处理单元,多组“向量寄存器”
主存储器应采⽤“多个端⼝同时读取”的交叉多模块存储器
要有⼤容量的、集中式的主存储器,因为主存储器⼤⼩限定了机器的解题规模
MISD(多指令流单数据流)模型
多条指令并⾏执⾏,处理同⼀个数据。现实中不存在这种计算机
MIMD(多指令流多数据流)模型
特点
各指令序列并行执行,分别处理多个不同的数据
是⼀种 线程级并⾏、甚⾄是线程级以上并⾏技术
进一步分类
按存储访问时间是否一致
一致性内存访问(UMA)结构
处理器对所有存储单元的访问时间一致
非一致性内存访问(NUMA)结构
处理器对所有存储单元的访问时间可能不一致
按处理单元的位置及其互联方式
多核芯片
在一个CPU芯片中包含多个处理单元(运算核心),成为片级多处理器
对称多处理器
将多个相同类型的CPU通过总线互联,属于UMA结构处理器
按地址空间
多计算机系统
特性
各计算机之间,不能通过LOAD/STORE指令直接访问对⽅的存储器,只能通过“消息传递”相互传送
eg:多台计算机组成的“分布式计算系统”
硬件组成
由多台计算机组成,因此拥有多个处理器+多个主存储
每台计算机拥有各⾃的私有存储器,物理地址空间相互独⽴
多处理器系统
特性
各处理器之间,可以通过LOAD/STORE指令,访问同⼀个主存储器,可通过主存相互传送数据
eg:Intel i5、i7处理器
共享内存多处理器(SMP)的基本概念
概念
多处理器共享一个存储器
多个处理器共享单⼀的地址空间,都可以通过LOAD、STORE指令访问共享的主存储器
(Shared Memory multi Processor, SMP)
多处理器系统的简称
多核处理器(CMP)的基本概念
⽚级多处理器(Chip-Level MultiProcessing,CMP)
意思是:⼀块芯⽚上集成了多个处理器
⼀个CPU芯⽚中包含多个处理器,即多个核(core),因此通常也称为 。
所有核共享⼀个LLC(Last-Level Cache),并共享主存储器
硬件组成
⼀台计算机内,包含多个处理器+⼀个主存储器
多个处理器共享单⼀的物理地址空间
硬件多线程
超线程
就是同时多线程(SMT)
在一个单处理器或单个核中设置了两套线程状态部件,共享高速缓存和功能部件
选择题⼲扰选项出处,对⽐:多计算机系统
多个计算节点都有各⾃私有的主存储
各计算结点的地址空间相互独⽴,不能通过LOAD、STORE指令访问另⼀个计算结点的主存储器
总线
总线概念与分类
定义

一组能为多个部件分时共享的公共信息传送线路
共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享。
分时是指同一时刻 只允许有一个 部件向总线发送信息,如果系统中有多个部件,则它们只能分时地向总线发送信息。
特性
机械特性、电气特性、功能特性、时间特性
1. 机械特性:尺寸、形状、管脚数、排列顺序
2. 电气特性:传输方向和有效的电平范围
3. 功能特性:每根传输线的功能(地址、数据、控制)
4. 时间特性:信号的时序关系
尺寸 传输方向 信号和时序的关系
形状 电平有效范围
分类
按数据传输格式
串行
优缺点
优点:只需要一条传输线,成本低廉,广泛应用于长距离传输;应用于计算机内部时,可以节省布线空间。
缺点:在数据发送和接收的时候要进行拆卸和装配,要考虑串行并行转换的问题。
并行
优缺点
优点:总线的逻辑时序比较简单,电路实现起来比较容易
缺点:信号线数量多,占用更多的布线空间;远距离传输成本高昂;由于工作频率较高时,并行的信号线之间会产生严重干扰,对每条线等长的要求也越高,所以无法持续提升工作频率。
按功能
片内总线
片内总线是芯片内部的总线。
它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线
系统总线
系统总线是计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线。按系统总线传输信息内容的不同,又可分为3类:数据总线、地址总线和控制总线
数据总线
传输各功能部件之间的数据信息,包括指令和操作数;位数(根数)与机器字长、存储字长有关
易混淆的两个概念
数据通路表示的是数据流经的路径
数据总线是承载的媒介
传输方向
双向
有些总线可以实现数据/地址复用
地址总线
传输地址信息,包括主存单元或I/O端口的地址;位数(根数)与主存地址空间大小及设备数量有关;
传输方向
单向
控制总线
用来传输定时信号和命令信息
传输方向
有出:CPU送出的控制命令
有入:主存(或外设)返回CPU的反馈信号。
相关指令
时钟:用于总线同步
复位:初始化所有设备
总线请求:发出该请求信号的设备要使用总线。
总线允许:表明接收到该允许信号的设备可以使用总线
中断请求:表明某个中断正在请求
中断回答:表明某个中断请求已被接受。
存储器读:从指定的主存单元中读数据到数据总线上
存储器写:将数据总线上的数据写到指定的主存单元中。
I/O读:从指定的I/O端口中读数据到数据总线上
I/O写:将数据总线上的数据写到指定的I/O端口中
传输确认:表示数据已被接收或已被送到总线
用来传输定时信号和命令信息 (简单的二状态信息)
通信总线
通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线。
按时序控制方式
同步
异步
1. 传输的内容
2. 方向
3. 根数
总线结构
单总线结构
结构
CPU、主存、I/O设备(通过I/O接口)都连接在一组总线上,允许I/O设备之间、I/O设备和CPU之间或I/O设备与主存之间直接交换信息。
单总线并不是指只有一根信号线,系统总线按传送信息的不同可以细分为地址总线、数据总线和控制总线。
系统总线
优缺点
• 缺点:带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操
• 优点:结构简单,成本低,易于接入新的设备。
双总线结构
结构
主存总线
用于CPU、主存和通道之间进行数据传送;
I/O总线
用于多个外部设备与通道之间进行数据传送。
优缺点
• 优点:将较低速的I/O设备从单总线上分离出来,实现存储器总线和I/O总线分离。
• 缺点:需要增加通道等硬件设备
主存总线
支持突发(猝发)传送:送出一个地址,收到多个地址连续的数据。
通道
是具有特殊功能的处理器,能对I/O设备进行统一管理。通道程序放在主存中。
三总线结构
结构
主存总线 + I/O总线 + DMA总线
优缺点
• 优点:提高了I/O设备的性能,使其更快地响应命令,提高系统吞吐量。
• 缺点:系统工作效率较低
四总线结构
1. 桥接器:用于连接不同的总线,具有数据缓冲、转换和控制功能。
2. 靠近CPU的总线速度较快。
3. 每级总线的设计遵循总线标准(见本章第4节)
总线的性能指标
总线时钟周期
即机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制
现在的计算机中,总线时钟周期也有可能由桥接器提供
总线的传输周期(总线周期)
一次总线操作所需的时间(包括申请阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期构成。
大多数情况下,一个总线周期包含多个总线时钟周期 有的时候,一个总线周期就是一个总线时钟周期 有的时候,一个总线时钟周期可包含多个总线周期(上下沿切换)
总线的工作频率
总线上各种操作的频率,为总线周期的倒数。
若总线周期=N个时钟周期,则总线的工作频率=时钟频率/N。
实际上指一秒内传送几次数据。
总线的时钟频率
即机器的时钟频率,为时钟周期的倒数。
若时钟周期为T,则时钟频率为1/T。
实际上指一秒内有多少个时钟周期
总线宽度
又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位(bit)总线。
总线带宽
可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)表示
这里的总线带宽指的是最大传输速率
实际带宽(平均传输速率)= 总线带宽 × 总线利用率
总线带宽是指总线本身所能达到的最高传输速率。在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时
串行并行回顾
总线带宽 = 总线工作频率 × 总线宽度 (bit/s)
1. 工作频率相同时,串行总线传输速度比并行总线慢。
2. 并行总线的工作频率无法持续提高,而串行总线可以通过不断提高工作频率来提高传输速度,最终超过并行总线。
总线复用
总线复用是指一种信号线在不同的时间传输不同的信息。
可以使用较少的线传输更多的信息,从而节省了空间和成本。
信号线数
地址总线、数据总线和控制总线3种总线数的总和称为信号线数。
总线操作和定时
总线传输的四个阶段
申请分配阶段
由需要使用总线的主模块(或主设备)提出申请,经总线仲裁机构决定将下一传输周期的总线使用权授予某一申请者。也可将此阶段细分为传输请求和总线仲裁两个阶段。
寻址阶段
获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启动参与本次传输的从模块
传输阶段
主模块和从模块进行数据交换,可单向或双向进行数据传送。
结束阶段
主模块的有关信息均从系统总线上撤除,让出总线使用权。
定时概述
总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,它的实质是一种协议或规则
同步通信(同步定时方式)
概念
总线控制器采用一个统一的时钟信号来协调发送和接收双方的传送定时关系
假设:CPU作为主设备,某个输入设备作为从设备,低电平有效
同步通信适用于总线长度较短及总线所接部件的存取时间比较接近的系统。
过程
(1) CPU在T1时刻的上升沿给出地址信息
(2) 在T2的上升沿给出读命令(低电平有效),与地址信息相符合的输入设备按命令进行一系列的内部操作,且必须在T3的上升沿来之前将CPU所需的数据送到数据总线上。
(3) CPU在T3时钟周期内,将数据线上的信息传送到其内部寄存器中。
(4) CPU在T4的上升沿撤销读命令,输入设备不再向数据总线上传送数据,撤销它对数据总线的驱动。
优缺点
优点:传送速度快,具有较高的传输速率;总线控制逻辑简单
缺点:主从设备属于强制性同步;不能及时进行数据通信的有效性检验,可靠性较差。
异步通信(异步定时方式)
概念
主设备提出交换信息的“请求”信号,经接口传送到从设备;
eg:地址信息、读命令
从设备接到主设备的请求后,通过接口向主设备发出“回答”信号。
eg:要读出的数据
三种方式
不互锁方式
主设备
发出“请求”信号后,不必等到接到从设备的“回答”信号,而是经过一段时间,便撤销“请求”信号。
从设备
接到“请求”信号后,发出“回答”信号,并经过一段时间,自动撤销“回答”信号。双方不存在互锁关系。
速度最快 可靠性最差
半互锁方式
主设备
发出“请求”信号后,必须待接到从设备的“回答”信号后,才撤销“请求”信号,有互锁的关
从设备
而在接到“请求”信号后,发出“回答”信号,但不必等待获知主设备的“请求”信号已经撤销,而是隔一段时间后自动撤销“回答”信号,不存在互锁关系
全互锁方式
主设备
发出“请求”信号后,必须待从设备“回答”后,才撤销“请求”信号
最可靠 速度最慢
从设备
发出“回答”信号,必须待获知主设备“请求”信号已撤销后,再撤销其“回答”信号。双方存在互锁关系。
优缺点
优点:总线周期长度可变,能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换,自动适应时间的配合。
缺点:比同步控制方式稍复杂一些,速度比同步定时方式慢
半同步通信
概念
同步
发送方 用系统 时钟前沿 发信号
接收方 用系统 时钟后沿 判断、识别
异步
允许不同速度的模块和谐工作
统一时钟的基础上,增加一个“等待”响应信号WAIT
分离式通信
概念
一个总线传输周期(以输入数据为例)
主模块发地址 、命令
使用总线
从模块准备数据
不使用总线 总线空闲
从模块向主模块发数据
使用总线
分离式通信的一个总线传输周期
子周期1
主模块申请占用总线,使用完后放弃总线的使用权
子周期2
从模块申请占用总线,将各种信息送至总线上
特点
1. 各模块均有权申请占用总线
2. 采用同步方式通信,不等对方回答
3. 各模块准备数据时,不占用总线
4. 总线利用率提高
总线标准(选学)
系统总线
ISA
(Industry Standard Architecture)
(并行总线,1984提出)
EISA
(Extended Industry Standard Architecture)
(并行总线,1988年提出,在ISA基础上增加位宽)
FBS、QPI
(串行总线,Intel提出的两种系统总线,用于连接CPU与北桥芯片,QPI又称为multi-FSB)
(Front Side Bus)(QuickPath Interconnect)
VESA
(并行总线,1991年提出,用于传输图像)
(Video Electronics Standards Association)
局部总线
PCI
(并行总线,1992年提出,速度和VESA差不多,但是总线工作频率可以独立于CPU主频,用于连接显卡、声卡、网卡等,支持即插即用)
(Peripheral Component Interconnect)
APG
(并行总线,1996年提出,从PCI2.1基础上扩展而来,用于连接显存与主存)
(Accelerated Graphics Port)
PCI-E
(串行总线,2001年提出,工作频率很高,支持全双工通信)
(PCI Express)
设备总线(通信总线)
连接各种外设
RS-232C
(串行总线,1970年提出,用于极慢速的电传打印机)
(Recommended Standard 232C)
SCSI
(并行总线,1986年提出,用于连接硬盘、打印机、扫描仪等)
(Small Computer System Interface)
PCMCIA
(并行总线,1991年提出,用于连接外部存储卡,目的是增强个人电脑的信息互换)
(Personal Computer Memory Card International Association)
USB
(串行总线,1996年提出,采用差模信号,每次传递1bit,工作频率可以很高)
(Universal Serial Bus)
连接硬盘
IDE
(并行总线,1986年提出,又称ATA总线,Parallel ATA,主要用于连接硬盘、光驱等)
(Integrated Drive Electronics)
SATA
(串行总线,2001年提出,Serial ATA,主要用于连接硬盘、光驱等)
(Serial ATA)
为何串行总线取代并行总线
并行总线
用m根线每次传送m个比特,用高/低电平表示1/0,通常采用同步定时方式,由于线间信号干扰,因此总线工作频率不能太高。另外,各条线不能有长度差,长距离并行传输时工艺难度大。
串行总线
用两根线每次传送一个比特,采用“差模信号”表示1/0,通常采用异步定时方式,总线工作频率可以很高。现在的串行总线通常基于包传输,如80bit为一个数据包,包与包之间有先后关系,因此可以用多个数据通路分别串行传输多个数据包。因此某种程度上现在的串行总线也有“并行”的特点
总线的仲裁(选学)
基本概念
同一时刻只能有一个设备控制总线传输操作,可以有一个或多个设备从总线接收数据。
将总线上所连接的各类设备按其对总线有无控制功能分为:
主设备:获得总线控制权的设备
从设备:被主设备访问的设备,只能响应从主设备发来的各种总线命令。
为什么要仲裁
总线作为一种共享设备,不可避免地会出现同一时刻有多个主设备竞争总线控制权的问题。
总线仲裁的定义
多个主设备同时竞争主线控制权时,以某种方式选择一个主设备优先获得总线控制权称为总线仲裁。
总裁分类
集中仲裁
链式查询方式
计数器查询方式
独立请求方式
分布式仲裁
特点
不需要中央仲裁器,每个潜在的主模块都有自己的仲裁器和仲裁号,多个仲裁器竞争使用总线。
流程
1. 当设备有总线请求时,它们就把各自唯一的仲裁号发送到共享的仲裁总线上
2. 每个仲裁器将从仲裁总线上得到的仲裁号与自己的仲裁号进行比较
3. 如果仲裁总线上的号优先级高,则它的总线请求不予响应,并撤销它的仲裁号
4. 最后,获胜者的仲裁号保留在仲裁总线
输入输出系统
I/O系统基本概念
基本概念
IO硬件
输入设备、输出设备、外存设备、I/O接口(I/O控制器)
IO软件
IO指令
CPU执行的指令,用于控制IO接口或控制通道
注:I/O 指令与普通指令格式略有不同, 操作码:指明了CPU要对IO接口做什么, 命令码:指明了IO接口要对设备做什么
三段式指令
操作码
识别 I/O 指令
命令码
做什么操作
设备码
对哪个设备进行操作
通道指令
通道执行的指令,与CPU机器指令不是一套东西
通道程序提前编制好放在主存
包括驱动程序、用户程序、管理程序、升级补丁等
通常采用I/O指令和通道指令实现主机和I/O设备的信息交换
I/O控制方式
程序查询方式
CPU“忙等”慢速设备完成工作,二者串行工作
程序中断方式
设备准备数据时,CPU继续工作。设备准备好之后向CPU发出中断请求,CPU在指令周期的末位检查中断并做出中断响应(执行中断处理程序)
DMA方式
主存与IO交换信息时由DMA控制器控制,传输完一整块数据才需要中断
通道方式
通过IO指令启动通道,通道执行通道指令序列,通道程序存放在主存中
外部设备
输入设备
键盘
输入信息三个步骤
1||| 查出按下的是哪个键;
2||| 将该键翻译成能被主机接收的编码,如ASCII码;
3||| 将编码传送给主机
鼠标
工作原理
当鼠标在平面上移动时,其底部传感器把运动的方向和距离检测出来,从而控制光标做相应运动
输出设备
显示器
分类
阴极射线管(CRT)
扫描方式
光栅扫描、随机扫描
原理
主要由电子枪、偏转线圈、荫罩、高压石墨电极和荧光粉涂层及玻璃外壳5部分组成。
具有可视角度大、无坏点、色彩还原度高、色度均匀、可调节的多分辨率模式、响应时间极短
字符显示器
组成
显示字符的方法以点阵为基础。点阵是指由m×n个点组成的阵列
点阵的多少取决于显示字符的质量和字符窗口的大小。字符窗口是指每个字符在屏幕上所占的点数,它包括字符显示点阵和字符间隔。
概念
将点阵存入由ROM构成的字符发生器中
在CRT进行光栅扫描的过程中,从字符发生器中依次读出某个字符的点阵,按照点阵中0和1代码不同控制扫描电子束的开或关,从而在屏幕上显示出字符。

对应于每个字符窗口,所需显示字符的ASCII代码被存放在视频存储器VRAM中,以备刷新。
图像显示器
液晶(LCD)
发光二极管(LED)
参数
屏幕大小、分辨率、灰度级、刷新频率
灰度级
是指黑白显示器中所显示的像素点的亮暗差别,在彩色显示器中则表现为颜色的不同,灰度级越多,图像层次越清楚逼真,典型的有8位(256级)、16位等。
显示存储器(VRAM)
容量 = 分辨率 × 灰度级位数
带宽 = 分辨率 × 灰度级位数 × 帧频
打印机
击打式和非击打式
击打式打印机
利用机械动作使印字机构与色带和纸相撞而打印字符
优缺点
优:设备成本低印字质量好
缺:噪声大速度慢
机打发票 银行回执单(防伪性好)
非击打式打印机
采用电、磁、光、喷墨等物理、化学方法来印刷字符
串行和行式
串行打印机
逐字打印速度慢
行式打印机
逐行打印速度快
针式、喷墨式和激光
针式打印机
原理
在联机状态下,主机发出打印命令,经接口、检测和控制电路,间歇驱动纵向送纸和打印头横向移动,同时驱动打印机间歇冲击色带,在纸上打印出所需内容
特点
针式打印机擅长“多层复写打印”,实现各种票据或蜡纸等的打印。它工作原理简单,造价低廉,耗材(色带)便宜,但打印分辨率和打印速度不够高。
喷墨式打印机
原理
带电的喷墨雾点经过电极偏转后,直接在纸上形成所需字形。彩色喷墨打印机基于三基色原理,即分别喷射3种颜色墨滴,按一定的比例混合出所要求的颜色。
特点
打印噪声小,可实现高质量彩色打印,通常打印速度比针式打印机快;
但防水性差,高质量打印需要专用打印纸
激光打印机
原理
计算机输出的二进制信息,经过调制后的激光束扫描,在感光鼓上形成潜像,再经过显影、转印和定影,便在纸上得到所需的字符或图像。
特点
打印质量高、速度快、噪声小、处理能力强;
但耗材多、价格较贵、不能复写打印多份,且对纸张的要求高。激光打印机是将激光技术和电子显像技术相结合的产物。
感光鼓(也称为硒鼓)是激光打印机的核心部件。
外存储器
注:“外存储器”在 3.4 详细介绍过
I/O 接口

结构和作用
概念
I/O接口:又称I/O控制器(I/O Controller)、设备控制器,负责协调主机与外部设备之间的数据传输
外部接口
外部接口通过接口电缆与外设相连,外部接口的数据传输可能是串行方式,因此I/O接口需具有串/并转换功能
数据缓冲寄存器(DBR)
暂存即将输入输出的数据
主机和外设的速度匹配
状态/控制寄存器
命令字:CPU对设备发出的具体命令
状态字:设备的状态信息,供CPU检查
串-并转换机构
数据格式的转换
I/O控制逻辑
根据命令字向设备发出控制信号
地址译码逻辑
将地址信号映射到指定I/O端口
工作原理
I/O端口
指IO控制器中可被CPU访问的寄存器

统一编址

概念
IO 端口和主存地址空间统一,用访存指令访问 IO 端口(存储器映射方式)
原理
靠不同的地址码区分内存和I/O设备,I/O地址要求相对固定在地址的某部分
如系统总线中地址线共10根,则可以访问的存储单元个数为2!"= 1024个,假设要给10个I/O端口编址:
1. 0~9表示I/O地址,10~1023为主存单元地址
2. 0~1013表示主存单元地址,1014~1023为IO地址
3. 10~19表示I/O地址,0~9、20~1023为主存单元地址
优缺点
优点
不需要专门的输入/输出指令,所有访存指令都可直接
访问端口,程序设计灵活性高
端口有较大的编址空间
读写控制逻辑电路简单
缺点
端口占用了主存地址空间,使主存地址空间变小
外设寻址时间长(地址位数多,地址译码速度慢)
独立编址

概念
IO 端口地址与主存地址相互独立,用 IO 指令访问 IO 端口(I/O映射方式)
原理
靠不同的指令区分内存和I/O设备
优缺点
优点
使用专用I/O指令,程序编制清晰
I/O端口地址位数少,地址译码速度快
I/O端口的地址不占用主存地址空间
缺点
I/O指令类型少,一般只能对端口进行传送操作,程序设计灵活性差
需要CPU提供存储器读/写、I/O设备读/写两组控制信号,增加了控制逻辑电路的复杂性
分类
数据传送方式
并行接口:一个字节或一个字所有位同时传送。
串行接口:一位一位地传送。
主机访问I/O设备的控制方
程序查询接口
中断接口
DMA接口
按功能选择的灵活性
可编程接口
不可编程接口
I/O方式
程序查询方式
概念
CPU一旦启动I/O,必须停止现行程序的运行,并在现行程序中插入一段程序
主要特点
CPU有“踏步”等待现象,CPU与I/O串行工作。
优缺点
优点
接口设计简单、设备量少。
缺点
CPU在信息传送过程中要花费很多时间用于查询和等待,而且如果采用独占查询,则在一段时间内只能和一台外设交换信息,效率大大降低
查询方式
独占查询:CPU 100%的时间都在查询I/O状态,完全串行
定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的间隔内CPU可以执行其他程序
程序中断方式
中断系统
中断的基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
标志位
IF(Interrupt Flag)
IF=1表示开中断(允许中断)
IF=0表示关中断(不允许中断)
外中断
信号的来源
CPU外部,与当前执行的指令无关
CPU响应中断的时间
每条指令执行阶段的结束时刻
非屏蔽中断
关中断时也会被响应(如:掉电)
可屏蔽中断
关中断时不会被响应
工作流程
中断请求
中断源向CPU发送中断请求信号
每个中断源向CPU发出中断请求的时间是随机的
中断请求标记触发器INTR

为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置INTR,当其状态为“1”时,表示中断源有请求。
这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。
中断响应
响应中断的条件
1||| 中断源有中断请求
2||| CPU允许中断,即开中断
3||| 一条指令执行完毕,且没有更紧迫的任务
中断判优
概念
多个中断源同时提出请求时通过中断判优逻辑响应一个中断源
硬件实现(硬件排队器)

它既可以设置在CPU中,也可以分散在各个中断源中
软件实现(查询程序)

优先级设置
1. 硬件故障中断属于最高级,其次是软件中断
2. 非屏蔽中断优于可屏蔽中断
3. DMA请求优于I/O设备传送的中断请求
4. 高速设备优于低速设备
5. 输入设备优于输出设备
6. 实时设备优于普通设备
中断处理

中断隐指令
概念
保存原程序的PC值,并让PC指向中断服务程序的第一条指令
主要任务
1||| 关中断
保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断
2||| 保存断点
保证在中断服务程序执行完毕后能正确地返回到原来的程序
将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
3||| 引出中断服务程
取出中断服务程序的入口地址并传送给程序计数器(PC)
硬件向量法
软件查询法
中断服务程序
主要任务
1||| 保护现场
便于返回原程序后可以恢复CPU环境。
保存通用寄存器和状态寄存器的内容
可使用堆栈,也可以使用特定存储单元。
(eg:保存ACC寄存器的值)
2||| 中断服务(设备服务)
主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中
(eg:中断服务的过程中有可能修改ACC寄存器的值)
3||| 恢复现场
通过出栈指令或取数指令把之前保存的信息送回寄存器
(eg:把原程序算到一般的ACC值恢复原样)
4||| 中断返回
通过中断返回指令回到原程序断点处
单重中断与多重中断
单重中断

执行中断服务程序时不响应新的中断请求
多重中断

又称中断嵌套,执行中断服务程序时可响应新的中断请求
满足条件
1||| 在中断服务程序中提前设置开中断指令
2||| 优先级别高的中断源有权中断优先级别低的中断源
中断屏蔽技术
屏蔽字
设置规律

1. 一般用‘1’表示屏蔽,’0’表示正常申请
2. 每个中断源对应一个屏蔽字 (在处理该中断源的中断服务程序时,屏蔽寄存器中的内容为该中断源对应的屏蔽字)
3. 屏蔽字中‘1’越多,优先级越高。每个屏蔽字中至少有一个’1’(至少要能屏蔽自身的中断)。
程序执行轨迹
程序中断方式
工作流程
CPU占用情况
DMA方式

DMA控制器
主要功能
传送前
接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求
输入还是输出;
要传送多少个数据;
数据在主存、外设中的地址。
CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周
传送时
管理总线,控制数据传送
确定主存单元地址及长度,能自动修改对应参数
传送后
向CPU报告DMA操作的结束
组成
主存地址计数器:存放要交换数据的主存地址
传送长度计数器:记录传送数据的长度
数据缓冲寄存器:暂存每次传送的数据
DMA请求触发器:设备准备好数据后将其置位
控制/状态逻辑:由控制和时序电路及状态标志组成
中断机构:数据传送完毕后触发中断机构,提出中断请求
传送过程

预处理:CPU完成寄存器初值设置等准备工作
数据传送:CPU继续执行主程序,DMA控制器完成数据传送

后处理:CPU执行中断服务程序做DMA结束处理
传送方式
停止CPU访存:
概念
需要数据传送时,停止CPU访存,总线控制权交给DMA控制器
优缺点
优点
控制简单
缺点
CPU 处于不工作状态或保持状态未充分发挥 CPU 对主存的利用率
交替访存:
概念
将CPU周期分为DMA访存和CPU访存两个部分
优缺点
优点
不需要总线使用权的申请、建立和归还过程
缺点
硬件逻辑更为复
周期挪用(周期窃取):
概念
I/O设备需要访存时,挪用一个或几个存取周期
访问主存的三种可能
CPU 此时不访存(不冲突)
CPU 正在访存(存取周期结束让出总线)
CPU 与 DMA 同时请求访存(I/O访存优先)
特点
1||| 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
2||| 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
3||| 主存中要开辟专用缓冲区,及时供给和接收外设的数据
4||| DMA传送速度快,CPU和外设并行工作,提高了系统效率。
5||| DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
与中断方式的区别
CPU占用情况