导图社区 计算机组成原理系统笔记考研期末
这是一个关于计算机组成原理系统笔记考研期末的思维导图,系统地整理了计算机组成原理的核心知识点,包括CPU结构、存储器体系、输入输出系统、指令系统等。
编辑于2024-08-26 21:42:46第一章 计算机系统概述
通用计算机的诞生
1945年报告中提出,“存储程序”计算机:冯·诺依曼结构
冯·诺依曼结构的基本思想
最重要思想:“存储程序”
工作方式:要完成的工作编写为程序,将程序和数据送入主存并执行。程序一旦启动,计算机能够自动完成逐条取出指令和执行指令的任务
特点
1. 采用“存储程序”的工作方式
2. 计算机由五大部件组成(运算器、存储器、控制器、输入设备、输出设备)
3. 指令和数据以同等地位存储在存储器中,形式上两者没有区别,但计算机应能区分
4. 指令和数据用二进制代码表示,指令由操作码和地址码组成,可按地址寻址
现代计算机结构模型与工作方式
具体内容就是之后章节内容
计算机语言
机器语言
计算机唯一可以直接识别和执行的语言,机器指令由二进制表示
汇编语言
汇编语言程序:由汇编指令构成
汇编指令:用助记符和符号来表示的指令。(与机器指令一一对应)
高级语言
面向算法描述,一条语句对应多条指令,有“面向过程”与“面向对象”之分
处理逻辑:顺序结构、选择结构、循环结构
高级语言开发程序环境
语言处理系统
语言处理程序:编辑器+翻译转换软件
编译方式:预处理程序、编译器、汇编器、链接器
解释方式:解释程序
语言的运行时系统
操作系统(人机接口+操作系统内核)、指令集体系结构、计算机硬件
翻译程序
汇编程序:汇编语言源程序->机器语言目标程序
编译程序:高级语言源程序->汇编/机器语言目标程序,执行时只要启动目标程序即可
解释程序:将高级语言语句逐条翻译成机器指令并立刻执行,不生成目标文件
不同层次语言之间的等价转换
现代(传统)计算机系统层次
计算机性能指标
字长(都得是字节的整数倍)
机器字长:指CPU内部用于整数运算的数据通路的宽度
等于CPU内部用于整数运算的运算器位数和通用寄存器宽度
指令字长:一个指令字中包含的二进制代码位数
存储字长:一个存储单元存储的二进制代码长度
带宽
数据通路带宽
数据总线一次性所能传送信息的位数
总线带宽
总线宽度×总线工作频率
主存容量
主存储器的最大容量=存储单元个数(MAR位数n,2^n)×存储字长(MDR位数)
运算速度
吞吐量
单位时间内处理请求的数量
响应时间
CPU时间+等待时间(磁盘访问、储存器访问、IO操作、操作系统开销)
CPU时钟周期
CPU最小时间单位,每个动作至少需要一个时钟周期,主频倒数
主频
CPI
执行一条指令所需的时钟周期数
CPU执行时间
运行一个程序所花时间=(指令条数×CPI)/主频
计算能力
每秒执行多少条指令
KIPS、MIPS
每秒执行多少次浮点运算,衡量科学计算计算机的系统性能
KFLOPS、MFLOPS、GFLPOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS(每个差3位)
补充术语
兼容机(系列机):相同或相似的指令集,相同或相似的操作系统(指令系统向后兼容)
兼容:计算机软件或硬件通用性,通常在同一系列不同型号的计算机间通用
软件可移植性:某系列中计算机软件,直接或很少修改,运行在另一个系列中
固件:将程序固定在ROM中的部分
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉
重点在有没有生成目标文件,最终都转换为机器语言。
整体性能指标
CPU区分指令与数据,依据是指令周期不同阶段
程序的转换处理过程
第二章 数据的表示和运算
数据的表示
数制与编码
真值与机器数
机器数:用0和1编码的计算机内部的0/1序列
真值:机器数代表的实际值,现实中带正负号的数,X
数值数据表示的三要素(要确定一个数值数据的值必须先确定这三个要素)
进位计数制
十进制(后缀D)、二进制(后缀B)、十六进制(后缀H,或前缀0x表示)、八进制(后缀O)
定/浮点表示
浮点整数、定点小数、浮点数(解决小数点问题)
二进制编码
原码、补码、反码、移码(解决正负号问题)
十进制数与R进制数之间的转换
R进制到十进制(按“权”展开)
十进制到二进制,再将二进制转十六(四位一组)或八进制(三位一组)
机器数表示方法
定点数的表示
原码
最高位为符号位,数值部分不变
补码
定义:[X]补 = 2^n + X(-2^n <= X < 2^n,mod 2^n)
理解:为了机器数加减运算的统一。 实际上是模运算,一个负数的补码等于模减该负数的绝对值,即时钟从10点到6点,可以倒拨4格:10-4=6;也可以顺拨8格,10+8=18=6
反码
原码与补码相互转化的过渡
移码
数值加一个偏置常数,通常在真值X上加2^n(便于浮点数加减运算时对阶,阶数有正有负,统一加一个常数让阶数都为正方便比较)
不同机器数之间的转换关系
范围与真值0
定点整数
原码
范围:- (2^n - 1) <= x <= 2^n - 1
最大:0,111...111
最小:1,111...111
真值零: 0,000...000,1,000...000
反码
范围:- (2^n - 1) <= x <= 2^n - 1
最大:0,111...111
最小:1,000...000
真值零: 0,000...000,1,111...111
补码
范围:- 2^n <= x <= 2^n - 1
最大:0,111...111
最小:1,000...000
真值零: 0,000...000
定点小数
原码
范围:- (1 - 2^-n) <= x <= 1 - 2^-n
最大:0,111...111
最小:1,111...111
真值零: 0,000...000,1,000...000
反码
范围:- (1 - 2^-n) <= x <= 1 - 2^-n
最大:0,111...111
最小:1,000...000
真值零: 0,000...000,1,111...111
补码
范围:-1 <= x <= 1 - 2^-n
最大:0,111...111
最小:1,000...000
真值零: 0,000...000
有符号数与无符号数
有符号数:最高位的0/1表示正/负
无符号数:整个机器字长全部二进制位均为数值位,无符号位
同时有无符号数和带符号数,在C编译器中隐含将带符号整数强制转换为无符号数
浮点数的表示(约定小数点位置)
一般格式
浮点数真值格式:N = r^E × M(r阶码的底,E阶码用移码表示,M尾数,S数符)
表示范围(原码对称,故表示范围关于原点对称)
浮点数范围比定点数大,但个数不变,故数更稀疏且不均匀
规格化浮点数
规格化数形式:+/-1.M × r^E
为了表示更多有效数字,规定规格化数的小数点前为1
基数2:原码规格化最高位一定是1,补码规格化数的尾数最高位一定与尾数符号相反(基数4原码最高两位不全为0,基数8原码最高三位不全为0)
IEEE754标准
+/-1.M × 2^E(S数符,E阶码用移码表示全0全1特殊表示,M(Significand)尾数用原码表示,隐含尾数最高数位)
短浮点数
数符1+阶码8+尾数23=总位数32(偏置值127)
范围:1 × 2^(1-127) ---------- 1.111...111 × 2^(254-127)
长浮点数
数符1+阶码11+尾数52=总位数64(偏置值1023)
范围:1 × 2^(1-1023) ---------- 1.111...111 × 2^(2046-1023)
特殊数的表示
阶码全0,尾数M=0,真值X=0+(0-)
阶码全0,尾数M!=0,非规格化小数
阶码全1,尾数M=0,真值X=+∞(-无穷)
阶码全1,尾数M!=0,非数值NaN
数据存储时的字节排列
大端方式:从最高有效字节到最低有效字节的顺序存储数据(从左到右,正常思维)
小端方式:从最低有效字节到最高有效字节的顺序存储数据(从右到左,便于机器)
边界对齐问题:存储数据不满字长,填充空白,虽然浪费空间,但提高效率(若数据不对齐可能额外存取一次)
数据的运算
布尔代数和基本逻辑电路
基本逻辑运算:与或非,任何逻辑表达式可写成三种基本运算的逻辑组合
组合逻辑电路:没有存储功能,输出仅依赖于当前输入
具有存储功能,其输出不仅依赖于当前输入,还依赖于存储单元当前状态
组合逻辑部件(功能部件,利用基本逻辑门电路构成):译码器、编码器、多路选择器、加法器
加法器(所有算数运算部件都基于加法器)
一位加法器(全加器)
输入:加数A和B,低位进位Cin
输出:和:F = A ⊕ B ⊕ Cin 高位进位:Cout=A·B + A·Cin + B·Cin
串行加法器
n个全加器相连,进位触发器用来寄存进位信号,每一级进位依赖于前一级进位,进位信号逐级形成 Cout=A·B + (A⊕B)·Cin
并行加法器(单级/多级)
各级进位信号同时形成,又称先行进位,各进位之间无等待,相互独立并同时产生
辅助函数:Gi = Ai·Bi Pi = Ai + Bi 全加逻辑方程:Si = Pi⊕Ci Ci+1 = Gi + Pi·Ci
C1 = G0 + P0·C0 C2 = G1 + P1·C1 = G1 + P1·G0 + P1·P0·C0 C3 = G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0 由上式可知:各进位之间无等待,相互独立并同时产生
n位带标志加法器
溢出标志OF(仅有符号数加减法有意义)
含义:有符号数的加减法是否发生了溢出
计算:OF=最高位产生的进位⊕次高位产生的进位
符号标志SF(仅有符号数加减法有意义)
含义:有符号数加减运算结果的正负性
SF=最高位的本位和
零标志ZF
含义:运算结果是否为0
计算:n 位全0,ZF=1
进/借位标志CF(仅无符号加减法有意义)
含义:加法时为进位标志,减法时为借位标志
计算:CF=最高位进位⊕sub(减法sub=1,加法sub=0)
ALU
利用二路选择器+带标志加法器构造加/减运算器
加/减运算器基础上加寄存器、移位器、控制逻辑可实现ALU
算数运算:取负、移位、加减乘除、扩展
逻辑运算:与或非
C语言中各类运算
算术运算:无符号数、带符号的、浮点数的加减乘除运算
位运算:与、或、取反、异或
逻辑运算:&&、||、!
移位运算(王道分原码补码反码讨论,此处是C语言)
逻辑左/右移(无符号数)
高(低)位移出,低(高)位补0(若高位移出1,则左移发生溢出)
算数左/右移(带符号数)
左移:高位移出,低位补0(若移出位不等于新的符号位,则溢出)
右移:低位移出,高位补符(可能数据丢失)
循环移位
带进位标志位的循环移位
不带进位标志位的循环移位,移出的位需要同时进入进位寄存器
位扩展和位截断
扩展
无符号数:0扩展(前面补0)
带符号数:符号扩展(前面补符)
截断
强行将高位丢弃,故可能发生溢出
定点数的运算
定点数的加减运算
可通过二路选择器+带标志加法器实现加/减运算器
计算机中所有运算都基于加法器实现
加法器不知道所运算的是带符号数还是无符号数
加法器不判定对错,总是取低n位为结果,并生成标志信息
无符号加法溢出条件:CF=1
有符号加溢出条件:OF=1
无符号减法溢出:差为负数,即借位CF=1
其他溢出判定方法见下方
减法做比较大小
无符号数大于:CF=0
有符号数大于:OF=SF
原码定点数加减法运算(符号不参与运算)
加法准则
符号相同:绝对值相加,符号不变
符号不同:绝对值大的减去绝对值小的,符号取绝对值大的
减法准则
减数符号取反,做原码加法运算
补码定点数加减法运算(符号参与运算)
公式:[A+B]补=[A]补 + [B]补(MOD 2^n) [A-B]补=[A]补 + [-B]补(MOD 2^n)
补码溢出的判定方法
一位符号位
参与运算的两个数符号相同,结果符号变化,则溢出
最高位进位与次高位进位不同,则溢出
双符号位(存储仅一符号位,进入ALU后两位符号位)
在乘除等运算中,为了不丢弃中间的溢出结果,多位符号位可以保留符号位和溢出的数值位,保留正确的中间结果
00正数,无溢出
01正溢出(符号位不同,最高位为真正符号)
10负溢出(符号位不同,最高位为真正符号)
11负数,无溢出
定点数的乘除运算
整数的乘运算
高级语言中两个n位整数相乘得到的结果也是n位整数,即取2n位乘积中的低n位
溢出问题(硬件不判溢出,仅保留2n位乘积):乘积的高n位全0或全1,并等于低n位的最高位时不溢出(无符号高n位全0)
相同机器数无符号数和有符号数高n位可能不同,低n位相同,故指令分无符号数乘指令、有符号数乘指令
乘法运算比移位和加法等运算所用时间长,故往往用组合运算代替,例如x×20,20=2^4+2^2,故x×20=(x<<4)+(x<<2)
乘法实现细节可在考前看重新看一遍王道回忆细节,前期理解即可
整数的除法运算
整数除运算除了-2^(n-1)/-1会溢出,其他情况不溢出
不能整除时需要舍入
正数:商取比自身小的最接近的整数
负数:商取比自身大的最接近整数(加偏移量2^k-1,右移k位)
整数除法运算复杂,约30或更多时钟周期(除数为2的幂次形式,用右移代替)
除法实现细节可在考前看重新看一遍王道回忆细节,前期理解即可
浮点数的加减运算
对阶
小阶看齐大阶,将阶码小的尾数右移一位,阶加一,直到两个数的阶码相等
尾数求和
规格化(若补码负数则关注第一个0位置,虽然IEEE754标准尾数是原码)
最后形式:+/-1.xxx...xxx
左规:结果为+/-0.0...01xxx...xxx时,需要左规,尾数左移一次,阶码减1,直到第一个1移到小数点左边,作为隐藏位
每次阶码减1判断是否下溢,阶码下溢,结果为0
右规:结果为+/-1x.xxx...xxx时,需要右规,尾数右移一次,阶码加1,直到第一个1移到小数点左边,作为隐藏位
每次阶码加一后判断是否上溢,阶码上溢,中断处理
舍入
IEEE754舍入方式
就近舍入(舍入为最近可表示的数)
非中间数:0舍1入,中间数:强迫结果为偶数
朝+∞方向舍入(+∞方向最近的可表示的数)
朝-∞方向舍入(-∞方向最近的可表示的数)
朝0方向舍入=直接截去
舍入结果可能导致尾数未规格化,需再次右规判断溢出情况
若运算结果尾数为0,阶码也置0
不同类型转换
char--->int
前面补0
int<--->unsigned
都可能溢出丢失数据
int--->float
不会发生溢出,但可能有数据舍入
double--->float或int
可能发生溢出,可能舍入
float或double--->int
数据向0方向截断
char--->int--->long--->double float--->double
范围精度由小变大,无损失
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉
第三章 存储系统
存储器的层次结构
存储器的基本概念
记忆单元(存储基元/存储元/位元):具有两种稳态,表示二进制数码0和1的物理器件
存储单元/编址单位:主存中具有相同地址的记忆单元构成一个存储单元
编址方式:字长编址,按字编址
MAR与MDR
存储器地址寄存器MAR:用于存放主存单元地址的寄存器
存储器数据寄存器MDR:用于存放主存单元中的数据的寄存器
存储器的分类
按工作性质/存取方式分类
随机存取存储器RAM:每个单元读写时间一样(定义上讲一样,但有SRAM),且与各单元所在位置无关
内存(DRAM),Cache(SRAM)
顺序存取存储器SAM:数据按顺序从存储载体的始端读出或写入
磁带
直接存取存储器DAM:直接定位到要读写的数据块,在读写某个数据块时按顺序进行
磁盘
相联存储器CAM:按内容检索到存储位置进行读写
快表
按存储介质分类
半导体存储器
双极型、静态MOS型、动态MOS型
磁表面存储器
磁盘、磁带
光存储器
CD、CD- ROM、DVD
按信息的可更改性分类
读写存储器
可读可写
只读存储器
只能读不能写
按断电后信息的可保存性分类
非易失性存储器:信息可一直保留,不需电源维持
ROM、磁表面存储器、光存储器
易失性存储器:关闭电源时信息自动丢失
RAM、Cache
按功能/容量/速度/所在位置分类
寄存器:封装在CPU中,存放当前执行的指令和使用的数据
触发器实现,速度快容量小
高速缓存:位于CPU内部或附近,用于存放当前要执行的局部程序段和数据
SRAM实现,速度可与CPU匹配,容量小
内存储器MM(主存储器):位于CPU外,存放已被启动的程序及数据
用DRAM实现,速度较快,容量较大
外存储器AM(辅助存储器):位于主机之外,用来存放暂不运行的程序、数据或存档文件
用磁表面或光存储器实现,容量大而速度慢
存储器的传送与结构
主存的结构
主存的主要性能指标
存储容量:包含的存储单元的总数(按字节连续编址,每个存储单元为1个字节)
存储速度:数据传输率(主存带宽)= 数据带宽/存储周期
存取时间:从CPU送出内存单元的地址码开始,到主存读出数据并送到CPU所需时间
存取周期/读写周期/访问周期=存取时间+恢复时间:连续两次访问存储器所需的最小时间间隔
主存带宽:数据传输率,每秒主存进出信息的最大数量
半导体随机存储器与只读存储器
半导体存储器
SRAM与DRAM
区别\名称
SRAM
DRAM
存储信息
触发器(双隐态0 1)
电容(充放电)
破坏性输出
非破坏性读出
破坏性读出
需要刷新
不需要
需要(电荷仅维持2ms)
送行列地址
同时送
分两次(地址线复用,线数量减半)
运行速度
快
慢
集成度
低(6个逻辑元件)
高(1-3个逻辑元件)
发热量/功耗
大
小
存储成本
高
低
用途
Cache
主存
DRAM的刷新:DRAM电容的电荷维持1-2ms,必须刷新(读出一行数据重新写入,占一个读写周期)
集中刷新:集中刷新期间不能访问存储器
分散刷新:没有死区时间,但加长了系统的存取周期
异步刷新:刷新周期除以刷新次数,得到刷新时间间隔t,每t秒刷新一次
透明刷新:刷新安排在译码阶段,不存在死时间
芯片引脚
SRAM:芯片引脚 = 地址线 + 数据线 + 片选线(1) + 读写控制线(2)
DRAM:芯片引脚 = 地址线/2(地址复用) + 数据线 + 行列通选线(2) + 读写控制线(2)(片选线由行列通选线代替)
只读存储器
ROM的特点
信息只能读不能(在线)写
非破坏性读出,无需再生
随机存取,非易失性存储器(特殊方式写入)
ROM类型
掩膜式只读存储器MROM
芯片生产过程中写入
一次性可编程只读存储器PROM
允许用户用专门设备写入,写入无法修改
可擦除可编程只读存储器RPROM
用户利用编程器写入信息,修改次数有限
闪存存储器Flash Memory
想想U盘特点,写前需要先擦除(写比读慢)
固态硬盘SSD
固态电子储存芯片阵列,控制单元+存储单元(下文具体)
主存储器与CPU的连接
横线表示低电平有效
主存容量扩展
位扩展
CPU的数据线数与存储芯片的数据位数不相等,对存储位数扩位,即位扩展(地址线连接方式不变)
字扩展
增加存储器中字的数量,位数不变(芯片地址线、数据线、读写控制线响应并联,由片选信号区分芯片的地址范围)
片选
线选法:用除片内寻址外的高位地址线直接连接至各个存储芯片的片选端
n条线------>n个选片信号
译码片选法:用除片内寻址外的高位地址通过译码器禅师片选信号
n条线------>2^n个选片信号
字位同事扩展法
存储器同时增加存储字的数量,又要增加储存字长
通常将CPU地址线低位与存储芯片的地址线连接,高位用于片选
解决内存访问速度慢的三个措施
提高主存芯片本身的速度
采用芯片内部行缓冲,以提高芯片本身速度
双端口存储器:两套独立的读/写控制电路、地址缓存、地址译码及地址线和数据线
解决的问题:恢复时间问题(存取周期=存取时间+恢复时间)
对同一地址两端口同时写入数据冲突 对同一地址单于,一个端口写,一个端口读冲突
解决:利用置忙“信号Busy=0”暂时关闭端口,解决冲突
采用多模块存储器技术
单体多字存储器
存储器只有一个存储体(每个存储单元存储m个字,总线宽度m个字,每次性并行取出m个字)
多体并行存储器
高位交叉编址
通常会连续访问,因此实际效果相当于单纯的扩容
低位交叉编址
程序存放在相邻模块中,采用流水线存取
存取周期 T = 存取时间r(总线传输周期) + 恢复时间
当存储模块数>=T/r时,可使流水线不间断
存储器宽度:存取速率 = 字数·字长 / 时间
每个存储周期内可读写地址连续的m个字
取m个字耗时:T + (m-1)·r
微观上,m个模块被串行访问;宏观上,每个存储周期内所有模块被并行访问
在主存与CPU之间加入Cache(下一部分介绍)
高速缓冲存储器
程序访问的局部性原理
时间局部性
刚被访问过的单元很可能不久又被访问
空间局部性
刚被访问过的单元的邻近单元很可能不久被访问(数组)
具有Cache机制的CPU的基本访存过程
引入Cache减少了对内存的访问,CPU能在快速Cache内得到数据
Cache和主存都被划分为相等的块。当CPU发出读请求时,若访存地址在Cache中,直接对Cache进行读操作与主存无关。若Cache不命中,则仍需访问内存,并把此字所在的块一次性从主存调入Cache
Cache和主存之间的映射方式
直接映射
每个主存块只能放到一个特定位置:Cache块号 = 主存块号 % Cache总块数
地址结构:标记 + Cache行号 + 块内地址
无需替换
全相联映射
主存块可以放在Cache任意位置
地址结构: 标记 + 块内地址
全局替换
组相联映射
Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置:组号 = 主存块号 % 分组数
地址结构:标记 + Cache组号 + 块内地址
分组内替换
计算位数:有效位 + 脏位(写回法时)+ 标记 + n位(若用LRU算法,2^n路组相联映射)
Cache替换算法
随机算法
随机确定替换的Cache块
先进先出算法(FIFO)
选择最早调入的进行替换
近期最少使用算法(LRU)
根据局部性原理,选择近期内最久没有访问过的Cache行
计数器:记录Cache块多久未访问,访问计数器值最大
若命中,比命中计数器低的计数器值+1,本身置0
若未命中,其余非空闲行全+1
最不经常使用算法(LFU)
将一段时间内访问次数最少的Cache行换出
访问后计数器+1,数值可能很大(最大值相同则FIFO)
计数器清0时,仅将比自己小的数+1 ------> 计数器最大为(块号-1)
补充:抖动
频繁换入换出(频繁访问块数 > Cache行数量)
Cache写策略(一致性问题)
写命中
全写法(写直通法):对Cache写命中后,把数据同时写入Cache和主存(利用写缓冲)
在Cache和主存之间加一个写缓冲(FIFO队列)
CPU同时写数据到Cache和写缓冲
写回法:对Cache命中时,只修改Cache内容,不立即写入主存,只有当此块被换出时才写回主存
存在数据不一致的隐患,需要设置一个标记位
写不命中
写分配法:加载主存中的块到Cache,然后更新Cache块
非写分配法:只写入主存,不进行调块
多级Cache技术(L1/L2/L3)
越靠近CPU速度越快容量越小(平衡Cache速度与命中率、成本的结果)
L1Cache的命中时间比命中率更重要
指令与数据Cache分离------>减少指令流水线资源冲突(L2 Cache中不分离)
如何提高Cache命中率
增大Cache容量,选择适中的块大小
采用多级Cache技术
采用快速查找算法,并采用并行判定是否命中
采用有效替换算法,淘汰Cache中暂不使用的内容
编译器优化目标程序,程序员写Cache友好的程序
虚拟存储器
存储管理技术的发展过程
扩大主存
采用交换(分区和分页)和覆盖方式(缺点:对程序员不透明,空间利用率低)
虚拟存储器
虚拟存储器的基本概念
采用“按需调页”方式分配主存,这就是虚拟存储管理的概念
虚拟存储技术的实质
虚程序员在比实际主存空间大得多的逻辑地址空间中编写程序,不管实际运行机器主存大小,运行时其他程序大小
程序执行时,把当前需要的程序段和相应数据块调入主存,其他不用部分放在磁盘
执行指令时,通过硬件将逻辑地址转化为物理地址
在发生程序或数据访问失效(缺页)时,由操作系统进行主存和磁盘之间的信息交换
大页面、全相联、写回法
磁盘开销大,故页命中率比Cache命中率更重要
地址格式
实地址(物理地址)= 主存页号 + 页内地址
虚地址(逻辑地址)= 虚拟页号(段号)+ 页内地址(段内地址)
虚拟存储器方式
页式虚拟存储器
虚拟地址转化为物理地址:由页表基址寄存器取出页表基地址,由虚拟地址中虚页号在页表中找到对应实页号,实页号和页内地址一起组成物理地址
分页基本思想(程序员透明)
内存被分为固定长且较小存储块(页框、实页、物理页)
每个进程也被分为固定长程序块(页、虚页、逻辑页)
无需连续页框来存放一个进程
操作系统为每个进程生成一个页表
通过页表实现逻辑地址向物理地址的转换
页表结构:装入位 + 修改(脏)位 + 替换控制位 + 访问权限位 + 禁止缓存位 + 实页号 + 虚页号(隐含)
缺点:页处理、保护、共享不方便,故引出段式虚拟存储器
引入快表的页式虚拟存储器
引入快表后,CPU访存过程
根据局部性原理,将一些经常访问的页放入高速缓冲器中构成快表,极大提高查询效率
命中情况
Cache命中,Page必然命中,TLB不一定命中
Cache不命中,无法判断TLB和Page命中情况
Page不命中,Cache和TLB不命中
快表结构:虚页号(分为Tag+Index)+主存页表项
TLB全相联时没有index,虚页号需要与每个Tag比较 组相联时,虚页号高位为Tag,低位为Index,用作组索引
实现
多用全相联+采用随机替换策略+采用回写策略
段式虚拟存储器
段式虚拟存储器的地址转变过程:
便于编写程序,编译器优化和操作系统调度管理(对程序员不透明) 段可作为独立逻辑单位被其他程序调用,形成段间连接,产生规模较大的程序
首先根据段号与段表基址形成对应的段表行,然后根据段表行的装入位判断是否已调入主存。已调入主存,则从段表读出该段在主存中的起始地址,与段内地址相加,得到实地址
段表结构:段号 + 段首址 + 装入位 + 段长
缺点:段长不同,段间容易留下多余零碎空间,引出段页式虚拟存储器
段页式虚拟存储器
段、页式结合,程序按模块分段,段内分页,程序对主存的调入调出仍以页为基本传送单位
虚地址:段号 + 段内页号 + 页内地址
用段表和页表(每段一个)进行两级定位管理
访存过程:首先根据段号得到段表地址,从段表中取出该表的页表起始地址,与虚地址段内页号合成,得到页表地址。最后从页表取出实页号,与页内地址组成实地址
外存储器
磁盘存储器
磁盘存储器:磁盘驱动器 + 磁盘控制器 + 盘片
磁盘地址与性能指标
磁盘地址
驱动器号 + 柱面(磁道)号 + 盘面号 + 扇区号
磁盘容量:存储的字节总数
非格式化容量:磁化单元总数
格式化容量:按某种记录格式所能存储信息的总量
记录密度
道密度:沿磁盘半径方向单位长度的磁道数
位密度:磁道单位长度上能记录的二进制代码位数
面密度:位密度与道密度的乘积
平均存取时间 = 寻道时间(磁头移动到目的磁道) + 旋转延迟时间(磁头定位到所在扇区) + 传输时间(传输数据所花费的时间)
平均延迟时间=转半圈时间
数据传输率:单位时间向主机传送数据的字节数(磁盘转数r转每秒,每条磁道容量N个字节,数据传输率Dr=r·N)
磁盘阵列RAID
目的:提升读写速度,提升容错能力
RAID0
无冗余和无校验的磁盘阵列
RAID1
镜像的磁盘阵列
RAID2
纠错的海明码的磁盘阵列
RAID3
位交叉奇偶校验的磁盘阵列
RAID4
块交叉奇偶校验的磁盘阵列
RAID5
块级分布式奇偶校验的磁盘阵列
RAID6
二维块交叉奇偶校验的磁盘阵列
固态硬盘SSD
原理:Flash Memory,电可擦除ROM,即EEPROM
组成
闪存翻译层:负责翻译逻辑块号,找到对应页
存储介质:闪存芯片组
读写
页为单位,相当于磁盘扇区
以块为单位擦除,每页可以写一次,读无限次
随机访问。读快写慢,写的页如果有数据不能写入,需要将块内其他页复制到新的块中,写入新的页
同一块擦除过多可能坏掉
磨损均衡技术
动态磨损均衡
写入数据时,优先选择累计擦除次数少的新闪存块
静态磨损均衡
SSD监测并自动进行数据分配、迁移,让老旧的块承担更多读为主的任务
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉
软硬件结合,故机组操作系统(详细)都涉及
第四章 指令系统
指令系统概述
机器指令处于硬件和软件的交界面(本章提及的指令都是机器指令)
相当于一个菜谱指定的一个完整做菜过程
微指令是微程序级命令,属于硬件范畴(第五章)
相对于洗、切、煮、炒等做菜的“微过程”
伪指令是由若干个机器指令构成的指令序列,属于软件范畴
相对于由多个菜谱合成一个“大菜”的过程
汇编指令是机器指令的汇编表示形式,即符号表示
机器指令和汇编指令一一对应,都属于机器级指令
指令包含的信息
操作码 + 源操作数 + 结果值 + 下一条指令地址(隐含PC)
指令格式
遵循的原则
尽量短,且有足够的操作码位数,指令编码必须有唯一解释
指令字长是字节整数倍,指令尽量规整
指令的基本格式:操作码 + 地址码
指令系统中指令长度是否相同
定长指令字结构:速度快,控制简单
变长指令字结构:字长整数倍
单字长指令,双字长指令,半字长指令(与机器字长比)
操作数地址码的数目不同
零地址指令:OP
无需操作数的指令
零地址的运算类指令仅使用在堆栈计算机中(操作数隐含在栈顶与次栈顶)
一地址指令:OP A1
只有目的操作数的单操作数指令(存到原地址)
隐含约定目的地址的双操作数指令(到ACC)
二地址指令:OP A1 A2
算数和逻辑运算指令,分别给出目的操作数和源操作数地址,目的操作数地址还用于保存本次运算结果
三地址指令:OP A1 A2 A3(结果)
算数和逻辑运算指令,结果存A3
四地址指令:OP A1 A2 A3(结果) A4(下址)
算数和逻辑运算指令,多了下一条执行命令的地址(A4)
多地址指令
大中型机中成批处理数据的指令,向量、矩阵等(SIMD)
定长操作码指令格式
在指令字最高位分配固定的若干位表示操作码,简化硬件设计,提高译码和识别速度
扩展操作码指令格式
短码不能是长码的前缀
指令操作码不能重复
丰富了指令种类,但增加了指令译码和分析难度,控制器设计复杂
指令寻址方式
寻址方式的确定
在操作码中给定寻址方式
有专门的寻址方式位
指令寻址
顺序寻址
通过程序计数器(PC)+n->PC(n为指令的总字节数),自动生成下一条指令的地址
跳跃寻址(跳跃结果是当前指令修改PC值)
通过转移类指令实现,是否跳跃受到状态寄存器和操作数的控制
绝对地址:由标记符直接得到
相对地址:相对于当前指令地址的偏移量
数据寻址(指令中表示一个操作数的地址)
格式
操作码+寻址特征+形式地址A
补充:有效地址EA(真实的地址)
隐含寻址
不访存,EA程序指定
不显示的给出操作数地址,在指令中隐含操作数地址(规定ACC为第二操作数地址)
立即(数)寻址
不访存,A即是操作数
地址字段给出的不是操作数的地址,而是操作数本身(即立即数,补码形式)
直接寻址
访存一次,EA=A
指令字中的形式地址就是真实地址(寻址范围受限)
间接寻址
访存多次(具体看几次间接寻址),EA=(A)
指令的地址字段给出存储地址信息的地址(套娃,扩大寻址范围)
寄存器寻址
不访存,EA=Ri
指令字中直接给出操作数所在的寄存器编号
寄存器间接寻址
访存多次(具体看几次间接寻址),EA=(Ri)
寄存器给出操作数的地址信息
偏移寻址
相对寻址
访存一次,EA=(PC) + A(PC已自增)
广泛用于转移指令,方便代码在程序内部浮动
基址寻址
访存一次,EA=(BR) + A
面向操作系统,解决程序逻辑空间与存储物理空间的无关性,有利于多道程序的设计(BR为基准,偏移A)
BR:基址寄存器=重定位寄存器,指向程序起始地址,由操作系统管理
显式:用户决定通用寄存器
隐式:默认寄存器
变址寻址
访存一次,EA=(IX) + A
用于数组处理,适合编写循环代码,A是数组首地址,IX不断加一。(A为基准,偏移IX)
IX:变址寄存器,面向用户(作为偏移量)
堆栈寻址
堆栈是存储器(或专用寄存器组)中一块特定、后进先出原则管理的存储区,读写单元地址由堆栈指针SP给出(指令表现为无操作数,隐含使用SP)
硬堆栈:寄存器构成的堆栈(成本高,容量小)
软堆栈:主存划分的区域
CISC和RISC
项目\类别
CISC
RISC
指令系统
复杂庞大(指令一般大于200条)
简单精简(指令一般小于100条)
指令字长
不固定
定长
可访存指令
不加限制
只有Load/Store指令
指令执行时间
相差较大
绝大多数在一个周期内完成(流水线下,宏观上一个周期)
指令使用频率
相差很大
都比较常用
通用寄存器数量
很少(微程序,控制存储器占CPU>50%)
多(组合逻辑控制,硬布线仅10%)
目标代码
难以用优化编译生成高效的目标代码程序
采用优化编译程序,生成代码较为高效
控制方式
绝大多数为微程序控制
绝大多数为组合逻辑控制
指令流水线
可以通过一定方式实现
必须实现
兼容性
软件兼容,兼容低档机
无法兼容
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉
第五章 中央处理器
CPU的功能和基本结构
CPU干嘛的
周而复始的执行指令
执行指令过程中,发现处理异常
每个指令结束,查询并响应中断
组成(袁春风版,MIPS指令集架构,了解即可)
数据通路
组合逻辑单元
加法器、ALU、扩展器、多路选择器
存储信息的状态单元
触发器、寄存器、数据/指令存储器
控制单元
可以通过王道这个图,记一下哪些是用户可见寄存器,各部件主要功能
运算器
算数逻辑单元ALU:算数/逻辑运算等
暂存寄存器
累加寄存器ACC:通用寄存器,暂时存放ALU运算结果,也可作加法运算的一个输入端
移位器:对操作数和运算结果进行移位运算
计数器:控制乘除运算操作步数
程序状态字寄存器PSW:保留算数逻辑运算指令或测试指令的结果的各种状态信息
通用寄存器组:触发器构成
控制器
程序计数器PC:指出下一条指令在主存中的存放地址
下指令地址计算逻辑(PC是n×8位地址)
顺序执行时
PC = PC + n
转移执行时
PC = PC + n + 立即数(跳转的指令条数)× 4
指令寄存器IR:用于保存当前执行的指令
指令译码器:仅对操作码子段译码,向控制器提供特定操作信号
存储器地址寄存器MAR:用于存放要访问的主存单元地址
存储器数据寄存器MDR:用于存放向主存写入的信息或从主存读出的信息
时序系统:用于产生各种时序信号
微操作信号发生器:根据指令、PSW、时序信号,产生控制计算机系统的信号
指令执行的过程
CPU指令执行的过程(袁)
取指令
缺页,越界,访问权限保护错
PC+1送PC
指令译码
非法指令
进行主存地址运算
取操作数
缺页异常,越界,访问权限保护错
算数逻辑运算,存结果
溢出,缺页
以上每步都需检测“异常”,自动切换异常处理程序
检测是否有“中断”请求,有则转中断处理
指令周期
指令周期:CPU从主存中取出并执行一条指令的全部时间
机器周期(CPU周期):内存中读取一个指令字的最短时间(指令字长为存储字长n倍,则n次取数据,机器周期为存取周期n倍)
指令周期
取值周期
间址周期
执行周期
中断周期
具体数据流,不用可以记,题目做到最后都会记得
指令执行方案(袁具体讲解了三种控制器的设计)
单指令周期
每条指令在一个时钟周期内完成,时钟周期选取时间最长的访存指令
多指令周期
把一个指令的执行分成多个阶段,每个阶段在一个时钟周期内完成(时钟周期以最复杂阶段所花时间为准)规定每个阶段最多只能完成1次访存或寄存器堆读/写或ALU
优势
时钟周期短
不同指令所用周期数可以不同
允许功能部件在一条指令执行过程中被重复利用
流水线方案
数据通路的功能和基本结构
数据通路
组成
组合逻辑元件(操作元件)
加法器
多路选择器MUX
算数逻辑部件ALU
译码器
存储元件(状态元件):具有存储功能
寄存器
存储器
元件间连接方式
总线连接方式
分散连接方式
分类
单总线数据通路
所有寄存器的输入输出端连接在同一条公共通路上
存在冲突,同一时钟周期仅传送一个数据,即仅一个寄存器输出,可多寄存器读数据
时钟周期:往往以一个寄存器out开始,寄存器in结束,选择最长的时间,故以Read/Write为准
三总线数据通路
多总线上传送不同数据,提高效率
专用数据通路方式
控制器的功能和工作原理
硬布线控制器
输入信号
指令寄存器:指令译码器产生的信息
时钟:时序系统产生的机器周期信号和节拍信号
PSW标志:来自执行单元的反馈信息
外来信号:中断请求、DMA请求
输出信号
CPU内部的控制信号:寄存器间数据传输、PC修改
控制总线的控制信号
存储器:访存控制信号
I/O设备:I/O访问设备信号、中断、总线响应信号
设计方法(单周期多周期控制器的总体思路一样)
根据每条指令的功能,分析控制信号的取值,用表列出。根据列出指令和控制信号的关系,写出每个控制信号的逻辑表达式。
分析输入输出信号->建立输入输出的关系->由关系写逻辑表达式->设计电路
微程序控制器
基本概念
将每条机器指令编成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令
微命令:是微操作的控制信号(控制序列最小单位)
微操作:是微命令的执行过程(最基本、不可再分操作)
微指令:是若干微命令的集合
微周期:指读取一条微指令并执行相应微操作所需时间
微程序:微命令的有序集合(一条指令功能由一段微程序实现)
微程序控制器组成和工作过程
控制存储器CM:存放微程序,ROM组成
过程
取微指令
自动将取指微程序入口自动送入CMAR
CM中读出微指令送入CMDR
机器指令操作码字段通过微地址形成部件产生微程序的入口地址,并将其送入CMAR
从CM中逐条取出对应的微指令并执行
执行完后,继续从头循环往复
微指令编码方式
直接编码法
微指令的微命令字段中每位都代表一个微命令,选不选用只要将对应位置置0或1
字段直接编码法
微指令的微命令字段分成若干段,把互斥微命令组合装同一段,每个字段独立编码,每个编码代表一种微命令(000表示无微指令)
字段间接编码法
一个字段的微指令由另一个字段中的微指令解释(两层译码,缩短指令字长,但削弱并行控制能力)
下条微地址的确定问题
增量(计数器)法:下条微指令地址隐含在微程序计数器uPC中
断定(下址字段)法:在本条微指令中明显指定下条微指令地址
公共微程序:取指周期微程序通常是公用的,故某指令系统n条机器指令,则CM中微程序个数至少为n+1个(不考虑公用间址/中断周期微程序,考虑则+3)
下条执行的微程序四种情况
取指微程序首址:每条指令执行前,CPU先执行取指微程序
第一条微指令:每条指令取出后,转移到该指令对应的第一条微指令执行
顺序执行:顺序取出下条微指令执行
分支执行:按条件转移到不同微指令执行
微指令格式
水平型微指令
一条微指令能定义多个可并行的微命令
微程序短、微指令长、执行速度快、并行能力强
垂直型微指令
一条微指令只能定义一个微命令
微程序长、微指令短、执行速度慢、规整便于编写微程序
混合型微指令
动态微程序设计和毫微程序设计
动态微程序设计(静态,用ROM)
能按用户要求改变微程序
需要可写控制寄存器支持(EPROM)
毫微程序设计:主存的每条指令都由放在控制存储器中的微程序解释执行,通过控制线对硬件进行直接控制(套娃)
硬布线和微程序控制器
对比\类别
硬布线控制器
微程序控制器
执行速度
快
慢
规整性
繁琐、不规整
规整
应用场合
RISC
CISC
易扩充性
不易扩展
易扩展
异常和中断机制
操作系统中详细
指令流水线(现代)
基本概念
五段式:取指IF、译码ID/RF、执行EX、访存MEM、写回WB
吞吐率:TP = n / [(k+n-1)·Δt] ,n是任务数,k为流水段段数,Δt为时钟周期
n趋向于∞时,最大吞吐率TPmax = 1/Δt
加速比:S = k·n·Δt / [(k+n-1)·Δt] = k·n / (k+n-1) ,n是任务数,k为流水段段数,Δt为时钟周期
n趋向于∞时,最大加速比Smax = k
流水线效率:E = n个任务占用的时空区有效面积/n个任务所用的时间与k个流水段所围成的时空区总面积 = T0/(k·Tk)
补充
IF和ID/RF段不需控制信号控制,只有EXE、MEM和Wr需要
ID段生成所有控制信号,并随指令的数据同步向后续阶段流动
寄存器和存储器的竞争问题可利用时钟信号解决
每个功能部件后面都要有锁存器(缓冲寄存器),保存本流水段的结果
流水线冒险处理
数据冒险(RAW、WAR、WAW)
硬件阻塞(stall)
控制复杂,要加阻塞电路和转发检测电路
软件插入“NOP”指令
最差的做法,硬件开销小
合理实现寄存器堆的读/写操作,同一周期内先写后读
不能解决所有数据冒险
转发(旁路)技术
add指令的r1的计算结果在执行完EX操作后就已经得出,算出来的值放在EX和MEM之间的流水段寄存器中
可以直接把数据从流水段寄存器中取到sub指令执行的ALU输入端
and指令同理将MEM和WB之间的流水段寄存器值取到ALU输入端
Load-use数据冒险无法利用转发旁路技术解决冲突
load指令最早在第四阶段MEM后产生结果,故不能解决load指令和随后第一条指令间的数据冒险,需阻塞一个时钟周期
编译优化:调整指令顺序(不能解决所有数据冒险)
结构冒险:同一部件同时被不同指令所使用
设置多个部件,避免冲突。如指令存储器IM和数据存储器DM分开
寄存器读口和写口独立开,时钟周期的前半个执行写操作,后半个读操作,避免冲突
控制冒险
分支预测
静态分支预测
动态分支预测
延迟分支(软件):将分支指令无关的指令调到分支指令后,用于填充延迟槽(延迟损失时间片)
高级流水线技术
超标量流水线技术(空分复用)
超长指令字技术(时分复用)
超流水技术(指令的潜在并行性)
多处理器基本概念
SISD、SIMD、MIMD的基本概念
SISD 单指令流单数据流
特性
各指令序列只能并发,不能并行,每条指令处理一两个数据
不是数据级并行技术
硬件组成
一个处理器+一个主存储器
若采用指令流水线,需多个功能部件,采用多模块交叉存储器
SIMD 单指令流多数据流
特性
多指令序列只能并发,不能并行,但每条指令可同时处理很多相同特征数据
数据级并行技术
硬件组成
一个指令控制部件(CU)+多个处理单元/执行单元 + 多个局部存储器 + 一个主存储器
每个执行单元有各自寄存器组、局部存储器、地址寄存器
不同执行单元执行同一条指令,不同数据
MISD 多指令流单数据流
不存在
MIMD 多指令流多数据流
特征
各指令序列并行执行,分别处理多个不同数据
是一种线程级并行,甚至线程级以上并行技术
分类(联想一下现实)
多处理器系统(共享内存多处理器/多处理器系统/多核处理器)
各处理器间,通过LOAD/STORE访问同一主存
多个处理器(共享单一物理地址空间)+一个主存储器
多计算机系统
不能直接访问不同计算机的存储器,只能通过“消息传递”通信
向量处理机(SIMD进阶)
指令处理对象是向量
主存储器采用“多端口同时读取”的交叉多模块存储器
多核处理器的基本概念
共享内存多处理器的基本概念
一个CPU芯片中包含多个处理器(一块芯片上集成了多个处理器)
所有核共享一个LLC(Last-Level-Cache),并共享主存储器
硬件多线程的基本概念
细粒度多线程
粗粒度多线程
同时多线程 SMT
指令发射
轮流发射各线程指令 (每个时钟周期)
发射同一线程指令 仅当流水线阻塞时切换
一个时钟周期内,同时发射多个线程指令
线程切换频率
每个时钟周期切换一次线程
仅流水线阻塞时切换
NULL
线程切换代价
低
高,需要重载流水线
NULL
并行性
指令级并行,线程间不并行
指令级并行,线程间不并行
指令级并行,线程级并行
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉
第六章 总线
总线基本概念
总线特点
分时
同一时刻只允许有一个部件向总线发送信息
共享
总线上可以挂接多个部件,各个部件之间互相交换的信息可以通过这组线路分时共享
总线特性
机械特性
尺寸、形状、管脚数、排列顺序
电气特性
传输方向和有效的电平范围
功能特性
每根传输线的功能(地址、数据、控制)
时间特性
信号的时序关系
总线的猝发传输
一个总线周期内传输存储地址连续的多个数据字的总线传输方式
总线的分类
按总线功能分类
芯片内总线:在芯片内部各元件之间提供连接
系统总线:系统主要功能部件间提供连接
数据总线(双向)
数据线宽度反映一次能传送数据的位数,数据(指令、操作数、中断信号)
地址线(单向)
地址线宽度反映最大的寻址空间
控制线
典型的控制信号:时钟、复位、总线请求/允许、中断请求/回答、存储器读/写、I/O读/写、传输确认
通信总线:在主机和I/O设备之间或计算机系统之间提供连接
按数据传输格式
串行总线
一条传输线(长距离传输,价格低廉)
并行总线
成本高,布线空间干扰
系统总线的结构
单总线结构
将CPU、主存、I/O设备都挂载到一组总线上
双总线结构
一条是主存总线,连接CPU、主存、通道,另一条是I/O总线用于在多个外部设备和通道间传输
三总线结构
主存总线、I/O总线、直接内存访问 DMA 总线
四总线结构
总线的性能指标
总线的传输周期
一次总线操作所需要的时间,总线传输周期由若干总线时钟周期构成
申请阶段、寻址阶段、传输阶段、结束阶段
总线带宽(最高传输速率)= 总线工作频率·(总线宽度/8)(B/S)
总线定时方式
同步定时方式:控制线上用一个时钟信号进行定时,有确定的通信协议
异步定时方式:用握手信号定时(应答方式)
不互锁方式
半互锁方式
全互锁方式
补充异步传输时间的计算:第一次数据传输时间+MAX(三次握手(三倍传输时间),存储器取数时间)+三次握手(三倍传输时间)
半同步方式:解决异步方式对噪声敏感问题,就绪和应答等握手信号都在时钟的上升沿有效
请求-回答方式:CPU启动一次读或写事物,然后等待存储器回答
分离总线事物方式:CPU启动一次读/写事务后释放总线,存储器启动一次回答事务,请求使用总线
总线标准
系统总线:主板上的总线,连CPU与北桥芯片或CPU与主存
ISA:并行系统总线,不支持总线仲裁
EISA:并行系统总线,突发传输
FBS、QPI
局部总线:主板外的总线,连北桥芯片及硬件部件
VESA:高速传送活动图像的局部总线
PCI:为外围设备使用的总线,即插即用,桥连接
不依附于某个具体处理器,并行局部总线,突发传送,多主设备、兼容性、奇偶校验、可扩展性、多路复用
PCI-Express:最新的总线和接口标准,串行局部总线,热插拔
AGP:视频接口标准,并行,连接主存和图形存储器
设备总线:南桥芯片控制,连计算机或外设
RS-232C:串行二进制交换数据的终端设备
SCSI、PCMCIA:并行
USB;连接外部设备的IO总线,即插即用,热插拔,串行传输
连接硬盘的总线
IDE:集成设备电路,硬盘光驱
SCSI:智能通用接口标准
SATA:串行硬件驱动器接口
视频传输标准
VGA:视频图形阵列
DVI:数字视频接口
HDMI:高清多媒体接口
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉
第七章 输入/输出系统
I/O接口
I/O设备控制器及其插座(网卡、显卡、键盘适配器、磁盘控制器)
I/O接口功能
数据缓冲:匹配主机和外设工作速度的匹配
错误或状态检测:提供状态寄存器,保存错误或状态信息供CPU查用
控制和定时:提供控制和定时逻辑,接受系统总线来的控制定时信号
数据格式转换:外部接口数据转换为内部接口格式(串并等)
主机和设备通信
I/O接口的基本结构
系统总线
数据线:读写数据、状态字、控制字(命令字)、中断类型号
地址线:指明I/O端口
控制线:读/写、I/O端口信号、中断请求类型号
步骤
发命令:发送命令字到I/O控制寄存器,向设备发命令(驱动程序协助)
读状态:从状态寄存器读取状态字,获得设备或I/O控制器状态
读/写数据:从数据缓冲寄存器发送或读取数据,完成主机与外设的数据交换
I/O端口及其编址
I/O端口:指接口电路中可被CPU直接访问的寄存器
统一编址(存储器映射方式)
I/O端口当作存储器单元进行地址分配
不需要专门输入输出指令,占用存储器地址,速度慢
RISC常用,以不同地址码区分
独立编址(I/O映射方式)
I/O端口地址与存储器地址相互独立
需要专门的输入输出指令,I/O指令类型少,程序灵活性差
I/O传输方式
轮询方式
程序直接控制(无条件传送)
对简单外设定时(同步)进行数据传送
程序查询方式(条件传送)
I/O设备将状态放到一个状态寄存器,操作系统阶段性查询状态寄存器中特定状态
程序中断方式(中断驱动方式)
若一个I/O设备需要CPU干预,通过中断请求通知CPU,CPU中止当前程序的执行,调出中断处理程序执行,结束后返回程序继续执行
中断过程
中断检测(硬件实现)
中断响应(中断隐指令,硬件实现)
中断响应的条件
CPU处于开中断状态
在一条指令执行完
至少要有一个未被屏蔽的中断请求
中断响应过程
1. 关中断
开关中断,原子操作,记录在PSW中
2. 保护断点和程序状态
PC/PSW到堆栈
3. 识别中断源
取得中断服务程序首地址和初始PSW送PC和PSWR(向量中断方式/软件查询方式)
补充:向量中断(中断方式)
中断类型号:用于得到中断向量,可等价
中断向量:中断服务程序的入口地址
中断处理(中断服务程序,软件实现)
4. 保存现场和屏蔽字
5. 开中断
6. 执行中断服务程序
7. 关中断
8. 恢复现场和屏蔽字
9. 开中断、中断返回
中断优先级
中断响应优先级:多个中断同时请求时选择哪个响应
硬件故障属于最高级
非屏蔽中断>可屏蔽中断
DMA请求>I/O设备传送的中断请求
高速设备>低速设备
输入设备>输出设备
实时设备>普通设备
访管>程序性>重新启动
中断处理优先级:本中断与其他中断间的关系
多重中断和中断屏蔽技术
CPU暂停现行的中断服务程序,转去处理新的中断程序
直接存储器访问方式(DMA方式)
I/O设备需要进行数据传送时,通过DMA控制器向CPU提出DMA传送 请求,CPU响应后让出系统总线,由DMA控制器接管总线,磁盘等高速外设成批地直接和主存进行数据交换
组成
主存地址计数器AR:存放要交换数据的主存地址
传送长度计数器WC:记录传送数据的长度,计数溢出时,数据即传送完毕,自动发中断请求信号
数据缓冲寄存器:暂存每次传送的数据
DMA请求触发器:I/O发出控制信号,使得DMA请求触发置位
“控制/状态”逻辑:由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步
中断机构:当一个数据块传送完毕后触发中断机构,向CPU提出中断请求
DMA传送方式
停止CPU访问主存
DMA和CPU交替访存
周期挪用(周期窃取)
传送过程
预处理:由CPU完成一些必要的准备工作(寄存器置初值、设置传送方向、启动该设备)
数据传送:DMA的数据传输可以以单字节(或字)为基本单位,也可以以数据块为基本单位,数据传送阶段完全由DMA控制
后处理:DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理
DMA方式和中断方式的区别
中断
DMA
数据传送
程序控制 程序切换->保护和恢复现场
硬件控制 CPU只需要预处理与后处理
中断请求
传送数据
后处理
响应
执行指令周期后响应中断
每个机器周期结束均可,总线空闲时即可响应DMA请求
场景
CPU控制,低速设备
DMA控制器控制,高速设备
优先级
优先级低于DMA
优先级高于中断
异常处理
能处理异常事件
仅传送数据
通道方式和I/O处理器方式
橙色边框为二级知识点:掌握
红色边框为一级知识点:熟悉