导图社区 计算机组成原理思维导图
北京理工大学813计算机组成原理,课本的所有知识罗列,具体细节参考王道或者课本进行补充,非常实用,值得收藏。
编辑于2022-07-04 10:54:52计算机组成原理
第一章 计算机系统概述
计算机系统层次结构
多层次结构的计算机系统
虚拟机器M2 (操作系统机器)也称混合层 软硬件划分并不绝对,可通过固化使硬件实现软件功能 计算机组成原理主要研究M0 M1的组成和设计
计算机系统的基本组成
软件系统和硬件系统共同构成了一个完整的计算机系统
计算机软件
应用软件
又称应用程序,用户根据任务需要所编制的各种程序为用户解决某个应用领域中的各类问题而编制的程序
科学计算程序、数据处理程序、过程控制程序、事务管理程序
系统软件
一组保证计算机系统高效、正确运行的基础软件通常作为系统资源提供给用户使用
操作系统OS、数据库管理系统DBMS、语言处理程序、服务程序、网络软件系统、标准库系统
计算机硬件的基本组成
冯诺依曼机特点
计算机由运算器、存储器、控制器、输出\输出设备五大部件组成
指令和数据以同等地位存放于存储器内,并可按地址寻址
指令和数据均以二进制数表示
指令由操作码和地址组成
操作码表示操作的性质
地址码表示操作数在存储器的位置
指令和数据均以二进制数表示
指令在存储器内按顺序存放,通常指令是顺序执行的,在特定条件下,可根据运算结果或设定的条件改变运算顺序
冯诺依曼机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成
现代计算机以存储器为核心
计算机的功能部件
输入设备
输出设备
存储器
主存储器(内存储器)
CPU直接访问主存
外存需调入主存才可被CPU访问
工作方式为按地址存取
相联存储器按内容存取,块表和Cache也属于按内容存取
组成
存储体
存放二进制信息 包含多个存储单元 每个存储单元包含多个存储元件,每个存储元件存放一个二进制代码
存储单元长度为存储字长,不一定等于数据字长(一个字可能包括几个存储字)
地址寄存器 MAR
位数对应存储单元的个数 MAR与PC长度相等
数据寄存器 MDR
位数与存储字长相等
时序控制逻辑
总容量 = 存储单元个数 × 存储字长
辅助存储器(外存储器)
运算器
用于进行算术运算和逻辑运算
算术逻辑单元 ALU
通用寄存器
累加寄存器 ACC(必备
乘商寄存器 MQ(必备
操作数寄存器 X(必备
变址寄存器 IX
基址寄存器 BR
程序状态寄存器 PSW
也称标志寄存器
控制器
程序计数器 PC
指令寄存器 IR
控制单元 CU
计算机软硬件的关系
软件和硬件的逻辑等价性
对于某一功能来说,既可以由硬件实现,也可以由软件实现,从用户角度上看二者在功能上等价
硬件实现的性能要优于软件实现的性能
计算机系统的工作原理
存储程序方式
程序执行前,需要将程序所含的指令和数据送入主存,一旦程序被启动执行,就无需操作人员干预,自动逐条完成指令的取出和执行任务
高级语言程序和机器语言程序的转换
三个级别的语言
机器语言
二进制代码,唯一能被计算机直接识别和执行的语言
汇编语言
高级语言
翻译程序
汇编程序
将汇编语言源程序翻译成机器语言目标程序
解释程序
将源程序在的语句按其执行顺序逐条翻译成机器语言指令并执行
编译程序
将高级语言编译成机器语言或汇编语言
程序和指令的执行过程
计算机的工作过程
程序和数据装入主存
将源程序转换为可执行文件(程序的执行过程)
预处理阶段
预处理器将#开头的文件处理输出hello.i文件
编译阶段
编译器对预处理的文件进行编译,生成汇编语言源程序hello.s
汇编阶段
汇编器将汇编语言文件翻译成机器语言指令,打包成可重定位目标文件hello.o(二进制文件)
链接阶段
链接器将多个可重定位目标文件和库函数合并成可执行文件(二进制文件)并保存在磁盘上
从可执行文件的首地址开始逐条执行指令(指令的执行过程)
根据PC取指令到IR
指令译码并送出控制信号
取操作数
指令执行
回写结果
计算机性能指标
机器字长
机器字长(也称字长)
是指CPU一次能处理数据的位数,通常与CPU的寄存器位数有关,指CPU内部用于整数运算的数据通路的宽度,字长等于CPU内部用于整数运算的运算器位数和通用寄存器宽度
机器字长会直接影响加法器(或ALU)、数据总线以及存储字长的位数
字
用来表示被处理信息的单位,用来度量数据类型的宽度
指令字长
一个指令字中包含的二进制代码位数
存储字长
一个存储单元包含的二进制代码长度(MDR的长度)
存储字长决定MDR的位数,机器字长决定CPU内部寄存器位数,指令字长可以是存储字长的0.5,1,2等倍,机器字长可以是存储字长的1,2,4等倍,但指令字长和机器字长两者本身无必然倍数关系即互不影响
机器字长、数据字长、存储字长都没有必然关系,但是一般相等
运算速度
吞吐量
系统在单位时间内处理请求的数量
主要取决于主存的存取周期
响应时间
用户向计算机发送一个请求到系统作出响应并获得结果的等待时间
通常包括CPU时间和等待时间
CPU时钟周期
通常为节拍周期或T周期 (主频的倒数)
CPU中最小的时间单位,执行指令至少需要1个时钟周期
主频(CPU时钟频率)
CPU时钟频率 = 1 / CPU时钟周期
对于同一个型号的计算机,主频越高,执行指令速度越快,单位Hz(赫兹)
时钟频率的提高可能会对CPU结构造成影响导致其他性能指标降低,因此不能保证执行速度有同倍数的提高
主频越高,计算速度越快,但不能保证响应速度越快
指令条数少不代表执行时间少,时钟频率搞不能说明执行速度快
CPI
执行一条指令所需的时钟周期数,一般为某个程序或机器的平均值
系统结构、指令集、计算机组织都会影响CPI,但CPI不受时钟频率影响,时钟频率会加快指令的执行速度而不会影响CPI大小(二者独立)
CPU执行时间
运行一个程序所花费的时间
CPU执行时间=CPU时钟周期数/主频=(指令条数*CPI)/主频 本质上是【 时钟周期总数 × CPU时钟周期 】
MIPS
每秒执行多少百万条指令,反映的是机器执行顶点指令的速度,对不同机器可能不准确或者不客观
选取一组指令组合,使得到的平均CPI最小,由此得到的MIPS就是峰值MIPS(PeakMIPS)
MIPS = 主频/(CPI ×10^6)【每秒执行的指令总数对应的时钟周期数即为主频】
MFLOPS
每秒执行多少百万次浮点运算 10^6
基于完成操作的次数而非指令条数
GFLOPS
10^9
TFLOPS
10^12
PFLOPS
10^15
EFLOPS
10^18
ZFLOPS
10^21
其他术语
系列机
具有基本相同的体系结构,使用相同基本指令系统的不同型号的计算机组成的产品系列
兼容
硬件或软件的通用性,向后兼容是指时间上向过去兼容
固件
将程序固化在ROM中组成的部件称为固件,是一种具有软件特性的硬件,目前操作系统已经实现部分固化
基准程序
专门用来进行性能评价的一组程序
可以通过在不同机器上运行相同的基准程序来比较运行时间,但是也有缺陷
可以通过考虑每个程序的使用频率再加权的方式
易错点
一般将控制器和运算器集成到同一个芯片上,称为中央处理器CPU(存储器中的MAR MDR也在CPU上),CPU和主存储器一起组成主机,其他硬件(I/O、外存)称为外设
CPU执行时间受到时钟周期(主频)、CPI、指令数三个方面的影响,必须同时考虑三者的变化才能比较执行速度的快慢
翻译程序的分类和区别
解释程序是将源程序的一条语句翻译成对应的机器代码并立即执行,然后继续翻译下一条并执行,翻译一句执行一句,不会生成目标程序
编译程序将高级语言源程序一次全部翻译成目标程序,生成目标文件
汇编程序也是一种翻译程序,将汇编语言源程序翻译成机器语言
编译程序产生目标代码的速度比解释程序的执行速度更快(循环类的代码
透明性
计算机技术中,一个存在的事物或概念从某个角度看似不存在,成为透明性现象
系统程序员所看到的底层机器级的概念性结构和功能特性对高级语言程序员(通常是应用程序员)来说是透明的
CPU中的IR、MAR、MDR对所有程序员透明
PSW,PC通用寄存器对汇编程序员不透明,对应用程序员透明
周期的区分
时钟周期
机器周期
指令周期
总线周期
微指令周期
存储周期
第二章 数据的表示和运算
数制与编码
进位计数制及其相互转换
使用二进制编码的原因
只有两种状态,方便使用高低电平对应
对应逻辑值的真和假
二进制编码和运算规则简单,便于实现算术运算
进位计数法
不同进制间的相互转换
二进制和八进制、十六进制相互转换
任意进制转换为十进制
十进制转为任意进制
小数部分
乘基取整法
从上往下由高位到低位
整数部分
除基取余法
从下往上由高位到低位
计算机中整数可以连续表示,小数是离散的,不是所有十进制小数都可以用二进制精确表示,但整数可以
定点数的编码表示
真值和机器数
把符号数字化的数称为机器数,而把带有"+"或"-"符号的数称为真值,一旦符号数字化,符号和数值就形成了一种新的编码
无符号数和有符号数
无符号数(只有整数)
机器字长相同时,寄存器的全部位数均用来表示数值,一般在全部为正值且不出现负值的场合下使用无符号整数(如地址运算或表示指针)
无符号数不属于机器数,无符号位
有符号数(机器数)
机器数的定点表示
定点小数
纯小数,小数点在符号位之后
定点整数
纯整数,小数点在数值位之后
原码
用机器数的最高位表示数的符号,其余各位表示数的绝对值(带符号的绝对值表示)
n位原码机器数能表示 2^n -1 个数,0有正零和负零两种表示方法
n+1 位及机器字长能表示的范围
小数
-( 1 - 2^ -n)~ 1 - 2^-n(关于原点对称
整数
- 2^n + 1~ 2^n -1(关于原点对称
优缺点
优点
和真值的对应关系简单,容易转换,且原码实现乘除法简单
缺点
0的表示不唯一,原码加减法较为复杂
反码
正数的反码和原码相同
负数的反码 = 原码符号位不变,数值位全部取反
补码
正数的补码和原码相同
负数的补码 = 原码符号位不变,数值位取反末位加一(符号位不变,数值位取反,末位加一同样适用于求补码的原码)
n+1 位及机器字长能表示的范围
小数
- 1 ~ 1 - 2^-n
整数
- 2^n ~ 2^n -1
优缺点
优点
0的表示唯一,相同位数比原码多一个最小负数,容易实现加减运算,且符号位可以参与运算
缺点
不直观,转换复杂
变形补码
原码补码反码特点总结:
最高位均为符号位
真值为正时,三者表示结果相同
真值为负时,最高位符号位均为1,原码数值位表示真值的绝对值,反码表示原码数值位取反,补码是原码数值位取反末位加一
移码
在真值(区分真值和数值)上加上一个常数偏置值再用补码表示
运算方法和运算电路
基本运算部件
加法器
一位全加器(FA)
全加器FA是最基本的加法单元
三个输入:加数A,加数B,低位传来的进位Ci-1
两个输出:本位和S,向高位进位Ci
串行进位加法器
n个加法器串行相连可得到n位加法器,串行进位又称行波进位,每级进位依赖于前一级进位,进位信号逐级形成
低位产生进位所需的时间将影响高位运算的时间,串行进位加法器的最长运算时间主要是由进位信号的传递时间决定的
并行进位加法器
对于输入的两个加数 A B
A ⊕ B称为进位传递函数
AB称为进位产生函数(本地进位)
原理
通过逻辑表达式可以看出本位的进位只与输入的所有加数和最低进位有关
实现超前进位的部件简称CLA部件,以这种方式实现的加法器称为全先行进位加法器
但随着位数增加,逻辑表达式的复杂度大大提高,通常采用组间和组内都并行的方式,实现两级或多级先行进位加法器
串行进位的并行加法器
单重跳跃分组进位(单级先行进位方式
将n位全加器分为若干小组,组内并行,组间串行
双重分组跳跃进位(两级先行进位方式
将n位全加器分成若干大组,大组再细分若干小组,大组间串行,小组间和小组内并行
74181芯片是四位并行进位的ALU电路,可完成16种算数运算和16种逻辑运算
74182芯片是CLA芯片,可实现4位并行进位的加法
算术逻辑单元ALU
ALU是一种功能较强的组合逻辑电路
由于加减乘除最后都能归结到加法运算,ALU的核心是带标志加法器
带标志加法器
使加法器能生成相应的标志信息
溢出标志OF逻辑表达式为 Cn ⊕ Cn-1(最高位-符号位进位异或次高位-数值最高位进位)
符号标志SF为和的标志
零标志ZF当且仅当F=0
进位/借位标志CF表达式为Cin ⊕ Cout
Cin=0时,CF=Cout
Cin=1时,CF为Cout取反(最低位Cin用来区分加法和减法,与下面无符号数溢出判断对应)
ALUop是操作控制端,ALUop的位数决定了操作的种类,n位则最多有2^n种不同操作,需要搭配多路选择器MUX
ALU可以实现算数运算、逻辑运算(加减乘除、与或非、移位等)
加/减法运算
补码加/减法运算器
定点数的移位运算
算术移位
算术移位的对象是有符号数,移位过程中符号位保持不变,只移动数值部分
算术移位规则
正数原码、补码、反码移位后空位都补0
负数原码移位后都补0
负数反码移位后都补1
负数补码左移时空位补0,右移时空位补1
移位后结果
对于正数,左移最高数值位丢1,结果出错,右移最低数值位丢1,影响精度
负数原码高位丢1,结果出错,低位丢1,影响精度
负数反码高位丢0,结果出错,低位丢0,影响精度
负数补码高位丢0,结果出错,低位丢1,影响精度
逻辑移位
将操作数视为无符号数,全部进行移位
左移时高位丢弃,低位添0,右移正好相反
循环移位
带进位标志位CF的循环移位(大循环
不带进位标志位的循环移位(小循环
补码加减运算规则
运算公式为 【A + B】补 = (【A】补 + 【B】补 )mod 2^(n+1) 【A - B】补 = (【A】补 + 【- B】补 )mod 2^(n+1)
特点
二进制规则,逢二进一
做加法则补码直接相加,做减法则转换为被减数与减数相反数的补码相加
数值位与符号位一起参与运算,符号位在运算中直接得到
最终运算结果的最高位丢弃,保留n+1位仍为补码
补码加减法运算器
原码和补码加减法电路相同,标志位生成也相同
原码加减运算规则(了解
加法规则
先判断符号位,相同则绝对值相加,结果符号位不变;不同则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同
减法规则
将减数符号取反,然后做加法运算
标志位的生成
零标志位ZF
ZF=1表明结果为0
符号标志位SF
SF=1表明结果为负数,表示结果的符号位,即F的最高位(对无符号数SF无意义
进/借位标志CF
表示无符号数加减运算时的进位/借位(对于有符号数CF无意义
无符号加法运算时,CF=1表明溢出
无符号减法运算时,CF=1表明不够减
加法时CF等于进位输出位Cout,减法时将Cout取反
溢出标志OF
OF=1表明带符号整数运算时结果溢出(对于无符号数OF无意义
带符号数溢出判断方法
采用一位符号位
参与运算的两操作数符号相同,但与结果不同则溢出(参与运算的两操作数结果不同一定不会溢出)
不能区分溢出类型
采用双符号位
采用变形补码做加法时,2为符号位连同数值部分一起运算,高位符号位产生的进位直接丢弃
当2位符号位不同时表示溢出,否则不溢出
不论是否已出,高位符号位(第一位)代表真正的符号位
能区分溢出类型(上溢和下溢
采用一位符号位和数据位进位情况
符号位进位和最高数值位进位相同,则无溢出,否则溢出
最高位和次高位进位异或判断,不能区分溢出类型
乘/除运算
乘/除法运算的基本原理
定点数乘法运算
原码一位乘法
符号位和数值位分开求取
运算规则
step1 被乘数和乘数取绝对值参与运算,看作无符号数,符号位由两个数符号位异或得到
step2 部分积初始为0,乘数的每一位与被乘数相乘后的部分积,与之前的结果累加
step3 从乘数的最低位开始判断,若为1,则加上被乘数的绝对值,若为0,则部分积为0,之后被乘数和部分积均逻辑右移一位
step4 重复step3 判断n次
注意
机器字长n+1位,数值部分n位相乘,结果2n+1位,数值部分2n位,
数值部分n位,则右移n次
结果低位存放在乘商寄存器MQ,高位存放在累加寄存器ACC
ACC初始存放部分积,初值为0,MQ存放乘数,移位时ACC低位放入MQ高位,MQ低位右移丢弃
过程中部分积的累加可能大于1,因此n为数值至少要n+1位,即单符号位和双符号位均可
补码一位乘法
校正法
采用原码一位乘运算规则,符号位参与运算直接算出,但要根据乘数整数判断校正
根据乘数y的符号选择校正
乘数y为正
无需校正
乘数y为负
矫正,加上被乘数相反数的补码
注意
采用原码一位乘的算法计算,补码参与运算,但是相加和移位时采用补码规则(算数移位,负数右移补1,整数补0)
考虑到运算时可能出现绝对值大于1的情况,有需要根据真正的符号位进行算术右移,因此部分积和被乘数取双符号位
Booth算法(也称比较法)
不再考虑正负,直接带符号进行计算,采用相加和相减操作计算补码数据的乘积
运算规则
step 1符号位参与运算,运算的数以补码表示
step2 被乘数和部分积取双符号位(原本补码再加一位真正的符号位)参与运算,部分积初值0,乘数取单符号位(即原本的补码)
考虑到运算时可能出现绝对值大于1的情况,有需要根据真正的符号位进行算术右移,因此部分积和被乘数取双符号位,来记录真正的符号位
step3 乘数末位增设一位,初值0
step4 根据乘数后两位的值来确定操作,移位按照补码右移规则(算术右移)
部分积+(低位-高位的结果×【x】补)后再移位
step5 按上述操作进行n+1次,第n+1步不移位
注意
对于n+1位补码计算,移位n次,最多累加n+1次(移位次数和数值位次数相同)
最后一次只可能产生累加,但是不移位
定点数除法运算
定点数的除法要求
避免除数或被除数为0
定点小数
0<|被除数|<|除数|
保证结果小于1,不溢出
定点整数
0<|除数|<|被除数|
保证结果大于1,从而得到整数商
原码除法运算
原码除法过程涉及减法,被除数取绝对值,除数有绝对值和负绝对值的补码参与加减运算,结果为商的绝对值原码
恢复余数法
原理
当余数为负数时,需加上除数,使其恢复为原来的余数
每次先加上除数相反数的补码,判断商值,商值为正则上1,商值为负则上0并恢复余数,加上除数的补码,完成一轮上商后被除数和商左移一位
特点
符号不参与运算,单独异或得到
n+1位原码逻辑左移n次,上商n+1次,累加次数至少n+1次
第一次上商为整数位,必为0,可用来判断溢出,该位为0时说明除法合法,可以操作
加减交替法(不恢复余数法)
符号和数值分开求取,比恢复余数法速度更快
运算规则
step1 先用被除数减去除数(补码加法实现),余数为正时商上1,余数和商逻辑左移一位后,减去除数;余数为负时商上0,余数和商左移一位后,加上除数
step2 重复上述过程,当n+1步余数为负时,需加上除数得到正确的余数
特点
n+1位原码有n位数值参与运算,n位小数,上商n+1次(第一次用来判断是否溢出),累加n+1/n+2次,逻辑左移n次,可以用移位次数判断除法是否结束
是对恢复余数法的改进,二者都可以只使用单符号位
补码除法运算(加减交替法)
补码除法也分恢复余数法和加减交替法,但一般只讨论加减交替法
符号位参与运算,运算数均是补码形式,结果也为补码,符号在运算中自动形成
运算规则
step1 符号位参与运算,除数、被除数、余数、商均是补码形式
step2 除法第一步根据除数与被除数的符号确定加减操作,若同号,则被除数减去除数,若异号,则加上除数,得到部分余数
step3 若除数与部分余数同号,则商上1,余数左移一位减去除数,若异号,则商上0,余数左移一位加上除数
step4 执行step3执行n次
step5 若对商的精度无特殊要求,一般采用“末位恒置1”法
特点
n+1位补码,n位小数,上商n+1次,累加n+1次(最后一次直接商1),移位n次,可用移位次数判断运算是否结束
除法运算对比总结
n+1位定点数,即n位小数,均只移位n次,上商n+1次,至少累加n+1次(原码恢复余数法恢复次数可能很多,不恢复余数法可能多一次累加恢复余数)
除法运算都是先累加,再上商移位的过程,都可只使用单符号位,且都用到了补码的加减法规则
乘法运算和除法电路的基本结构
乘法运算电路
无符号数乘法
C为加法器进位位,为了解决无符号加法时可能产生的进位,每次循环都对CPY同步逻辑右移
Cn是计数器,初值32,没循环一次减1,用来控制运算何时结束
补码乘法
由于是补码带符号运算 ,不需要专门的进位位C
同步算数左移
除法运算电路
除法
同步算术右移
余数寄存器开始时存放被除数高32位,Q存放低位
整数的表示和运算
无符号整数的表示和运算
全部位数用来表示数值
带符号整数的表示和运算
强制类型转换(整数类型间)
有符号数和无符号数
结果保持位值不变,仅改变解释方式,不改变数据内容
长整数变短整数
高位截取,低位保留直接赋值
短整数变长整数
有符号数
符号拓展(不改变原本的真值)
正数
原有的符号位移到新符号位,其他补0
负数
原码与正数相同
补码,原有符号位移到新符号位,整数空位补1,小数空位补0,整数在符号和数值之间补1,小数在数值后补0,以保持原本的值不变
反码,原有符号位移到新符号位,其他补1
无符号数
零拓展
拓展后的高位直接补0
浮点数的表示和运算
浮点数的表示
浮点数的一般格式
浮点数的真值:N =r^ E * M (E为阶码,M为尾数,r为浮点数阶码的底与尾数的基数相同)
一般格式
浮点数在机器中的形式(采用这种数据格式的机器称为浮点机)
表示范围
关于原点对称
浮点数阶码大于最大阶码时称为上溢,此时机器停止计算做溢出中断
浮点数阶码小于最小阶码时称为下溢,通常将尾数强制为0,按机器零处理
浮点数的规格化
规定尾数的最高数位必须是一个有效值,即尾数必须是规格化数来提高浮点数的精度
不同基数的浮点数,其规格化数的形式不同,规格化过程也不同(基数对应的最高数位不为0)
基数为2,尾数最高位为1称为规格化数
基数为4,尾数最高两位不全为零
基数为8,尾数最高三位不全为零
浮点机中基数一般隐含,基数越大,浮点数范围越大,但是精度下降
规格化过程
左规
当浮点数运算的结果为非规格化时要进行规格化处理,将尾数左移一位,阶码减1(基数为2时)。
右规
当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数右移一位,阶码加1(基数为2时)
原码规格化(最高数位为1)
正数为0.1××…×的形式,其最大值表示为0.11…1;最小值表示为0.10…0。尾数的表示范围为1/2≤M≤(1−2^ −n)。 负数为1.1××…×的形式,其最大值表示为1.10…0;最小值表示为1.11…1。尾数的表示范围为−(1−2^−n)≤M≤−1/2。
补码规格化(最高数位与符号位相异)
正数为0.1××…×的形式,其最大值表示为0.11…1;最小值表示为0.10…0。尾数的表示范围为1/2≤M≤(1−2^−n)。 负数为1.0××…×的形式,其最大值表示为1.01…1;最小值表示为1.00…0。尾数的表示范围为−1≤M≤−(1/2+2^−n)。
IEEE754标准
格式及规定
数符+阶码(含阶符)+尾数
数符正0负1
阶码用移码表示,偏置值7FH(127),3FFH,3FFFFH
尾数用原码表示,为规格化数,除去临时实数外,采用隐藏位方案,隐藏原码规格化数最高有效数位1,作为整数1
浮点数分布不等距,越靠近原点0越密集
特殊规定
(短浮点数为例,E是阶码,M是尾数):
1. E=0且M=0,则真值为0 2. E=0且M≠0,为非规格化数,真值 = (−1)^s×0.M×2^−126 3. 1≤E≤254(E非全1非全0)时,真值= (−1)s×1.M×2^(E−127) 4. E=255且M≠0时,真值为‘NaN’(非数值) 5. E=255且M=0时,真值为正无穷或负无穷(看符号位)
单双精度范围
浮点数的加/减法运算
加减法规则
step1 对阶
小阶向大阶看齐(小阶变大阶看齐,阶数增加,尾数右移
step2 尾数求和
对阶后按定点数规则求和
step3 规格化
按照IEEE标准规格化尾数为±1.XXXXX,将求和结果规格化
(溢出实际范围右规,右规一般只需一次,非规格化左规)
step4 舍入
截断法
直接截取所需位数,丢弃后续所有位(最简单
只可能变小
0舍1入法
尾数右移时舍弃的最高数位 为0则舍弃,为1则尾数末尾加1
可能导致尾数溢出从而增加一次右规,变大变小都有可能
恒置1法
尾数右移时不论丢弃的最高数值位是0或1都使右移后尾数最低位置1
变大变小都有可能
强制类型转换(涉及浮点数)
由范围和精度由小到大,转换过程没有损失
char->int->long->double
float->double
int->float
float能表示的数的范围更大,但是只有24位表示尾数,因此int无法精确转换成24位浮点数尾数,需要进行舍入处理,会影响精度
int/float->double
double的有效位数更多,不会影响精度
double->float
数过大则会发生溢出,不溢出也可能由于尾数位数有限导致舍入,从而影响精度
float/double->int
int没有小数部分,数据向0方向截断,舍入产生误差,且数字过大时会产生溢出
错题&易错点
第三章 存储系统
存储器的分类
按作用层次分类
主存储器(主存/内存)
辅助存储器(辅存/外存)
高速缓冲存储器(Cache)
按存储介质分类
半导体存储器
双极型半导体存储器(TTL)
MOS半导体存储器
磁表面存储器
磁盘
磁带
磁芯存储器
光盘存储器
非易失性
按信息可保存性分类
断电后存储信息是否消失
易失性存储器RAM
非易失性存储器ROM,磁表面存储器,光存储器
信息读出后是否被破坏
破坏性读出
DRAM
非破坏性读出
按存取方式分类
随机存储器RAM
静态SRAM
动态DRAM
按地址访问存储单元
只读存储器ROM
顺序存取存储器SAM
直接存取存储器DAM
存储方式兼有随机访问和顺序访问的特点,首先选取信息所在区域然后顺序存取(磁盘存储器)
按内容访问存储器CAM或相联存储器AM
块表TLB
层次化存储器的基本结构
多级存储器结构
三级存储系统
缓存Cache-主存层次
硬件实现,主要解决CPU和主存速度不匹配的问题
对所有程序员透明
主存-辅存层次
硬件+操作系统实现,主要解决存储系统的容量问题
对应用程序员透明,系统程序员不透明
主存储器
性能指标
存储容量
存储字数×字长
单位成本
每位价格=总成本/总容量
存储速度
数据传输率=数据带宽/存储周期
存取时间
从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间
存取周期(读写周期或访问周期)
存储器进行一次完整的读写操作需要的全部时间,即连续两次独立访问存储器操作之间所需的最小时间间隔
存取周期一般大于存取时间,对于破坏性读出的存储器,存取周期可达到存取时间的2倍,因为读写操作后需要一段恢复内部状态的复原时间
主存带宽(数据传输率)
每秒从主存进出信息的最大数量
提高存储器带宽的方法
缩短存取周期
增加存储字长,使每个存取周期可以访问更多的二进制数位
增加存储体
半导体随机存取存储器
半导体存储芯片结构
主要包括存储矩阵、译码驱动电路、读写电路等
译码驱动能把地址总线送来的地址信号翻译成存储单元的选择信号并配合读写电路进行读写操作
存储矩阵由大量相同的位存储单元阵列构成
存储芯片通过地址总线、数据总线、控制总线与外部链接
地址总线单向输入,位数与存储字的个数有关
数据总线是双向,位数与读出或写入的数据位数有关
控制总线
读/写控制线决定读写操作
片选线确定选中的芯片用来进行读写,可用于芯片扩容
SRAM
工作原理
双稳态触发器(六晶体管MOS)来记忆信息,信息被堵出后也能保持原状态,非破坏性读出
特点及原因
速度快
非破坏性读出,不需要再生和刷新
集成度低,价格贵,功耗更大
晶体管更多,导致功耗大,且硅含量更多,价格更贵,面积更大,集成度也更低
主要用于Cache
DRAM
工作原理
利用存储元电路中栅极电容上的电荷来存储信息,通常只需一个晶体管
刷新
DRAM每隔一定时间必须刷新,通常取2ms,称为刷新周期,对CPU透明(即刷新不需要外部干预),刷新不需要选片
刷新方式
集中刷新
指在一个刷新周期内,利用一段固定的时间,一次对存储器的所有行进行逐一再生,此期间停止对存储器的读写操作
优点:
读写操作时不受刷新工作影响
缺点
存在“死时间”,即访问“死区”,死时间长达一个刷新周期
分散刷新
把对每行的刷新分散到各个工作周期,存储器的系统工作周期分为两部分,前半部分用于正常读写操作,后半部分用于刷新
优点
没有死区,刷新在周期内不会产生死时间
缺点
加长了系统存取周期,降低整机速度
异步刷新
分散和集中刷新的结合,将刷新周期除以行数,得到两次刷新之间的时间间隔t,利用逻辑电路每隔t产生一次刷新请求(在刷新周期内对每一行都刷新一次,但是每一行只占用一个时间间隔t,刷新一行只需要停止一个存取周期)
如果将刷新安排在CPU对指令的译码阶段,这个阶段CPU不访问存储器,从而克服了分散刷新和集中刷新各自的问题
优点
死区变小,减少了刷新次数,一次刷新一行存储单元,死时间缩短为一个存取周期左右的时间
区别
再生
再生操作是随机的,只对所读的单元进行,读操作完成后进行再生,但是操作过程和刷新相同
恢复
电容中的电荷消失前必须进行恢复,恢复的过程分为再生和刷新
刷新
刷新操作按一定顺序进行,不是随机的
特点及原因
速度慢
破坏性读出且需要刷新
集成度高,价格便宜,容量大,功耗大
只用一个晶体管,更容易继承,功耗和价格也更低
主要用于主存,由于DRAM芯片容量较大,为了减少芯片的地址引脚数,DRAM通常采用地址引脚复用技术,行地址和列地址通过相同的引脚分先后两次输入,使地址引脚数减少一半
对比DRAM和SRAM
SDRAM芯片技术
读写受时钟信号控制,与CPU采取同步方式交换信号
支持突发传输
半导体芯片的译码驱动方式
主要用于地址总线给出地址后如何在内存中找到存储单元(即片内地址的查找
一维译码(线选法,也称单译码法)
适用于小容量存储器,只有一个行译码器 译码器的一根字选线对应一个存储单元,n条线对应2^n个存储单元
二维译码(重合法,或称双译码法)
适用于大容量存储器,提高了集成度,将线选法中单一的地址译码器分成了行地址译码器和列地址译码器,行和列的交汇处共同锁定一个单元
Flash存储器
ROM的特点
随机存取,非易失性
ROM的类型
掩模式只读存储器MROM
写入后无法修改
一次可编程只读存储器PROM
可实现一次性编程的只读存储器,写入后无法修改
可擦除可编程只读存储器EPROM
可擦除但是编程次数有限,且写入时间过长
后来升级为E2PROM,电擦除
Flash存储器
在EPROM和E2PROm上发展,电可擦除重写,非易失性,写速度变快
固态硬盘SSD
基于闪存的固态硬盘用控制单元和存储单元Flash芯片组成
DRAM芯片和内存条
内存条
由若干存储器芯片构成
主存容量的扩展
位扩展法
CPU的数据线数和存储芯片的数据位数不一定相等,需进行位扩展,对存储字长进行扩展 (地址线并联,数据线串联,片选线要连接到所有芯片)
字扩展法
增加存储器中字的数量,而字的位数不变 (地址线和数据线连接相同,通过片选线来选中部分芯片)
字位同时扩展法
各芯片连接地址线方式相同,数据线连接方式不同且通过片选信号来选择部分芯片
多模块存储器
空间并行技术,利用多个完全相同的存储模块的并行工作来提高存储器的吞吐率
单体多字存储器
存储器只有一个存储体,每个存储单元存储m个字,总线宽度也为m个字,一次并行读取m字,地址必须顺序排列在同一存储单元
一个存取周期内从同一地址取出m条指令,然后逐条送至CPU执行,(即每隔1/m存取周期就向CPU提供一条指令)
缺点
指令和数据在主存内必须连续存放
多体并行存储器
各模块有独立的读写控制电路、地址寄存器和数据寄存器,既能交叉工作又能并行工作
高位交叉编址(顺序方式/连续编址)
高地址表示体号,低地址表示体内地址
由于CPU总是按顺序访问存储模块,各模块不能顺序访问,只能提高存储器容量,不能提高CPU吞吐率
模块内地址连续,存取方式仍为串行存取
存取周期T,连续读写m个连续的字 t = mT
低位交叉编址(交叉方式/交叉编址)
高地址表示体内地址,低地址表示体号
总是把高位的体内地址送到由低位体号确定的模块内进行译码,程序连续存放在相邻模块中,可在不改变存储周期的情况下用流水线的方式实现并行存取
模块字长等于总线宽度,存取周期T,总线传送周期r,为了实现流水线方式,模块数量m应满足 m=T/r(m≥T/r) 此时连续读取n个字所需时间为 t = T + (n-1)r
对比总结
宏观下,一个存储周期内,交叉存储器可以提供的数据量变为原本的m倍; 围观下,要注意从开始到结束的具体完整时间
主存和CPU之间的连接
存储芯片的地址分配和片选
片选
地址的高位部分选择相应的存储芯片,然后由低位地址确定片内地址
线选法
对芯片的选取直接用高位地址线连接确定,一根线对应一个芯片
特点
不需要地址译码器,线路简单
但是地址空间不连续,选片的地址线必须分时低电平,不能同时产生有效电平,不能充分利用存储器空间
译码片选法
出片内寻址外的高位地址通过地址译码器芯片产生片选信号
存储器和CPU的连接步骤
step1 合理选择存储芯片
ROM通常存放系统程序、标准子程序等,RAM则为用户编程而设计
step2 地址线的连接
通常将CPU地址线的低位与存储芯片的地址线连接,用于确定片内地址;
而CPU地址线的高位则在扩充存储芯片时使用,实现片选,CPU与外接译码器连接,外接译码器再与芯片连接片选CS信号连接
step3 数据线的连接
CPU的数据线与存储芯片不一定相等,可能需要位扩展使得位数相等后连接
step4 读/写命令线的连接
CPU读写命令线一般可直接与存储芯片的存储控制线连接,若读写命令线分开则分开连接
step5 片选线的连接
片选信号与CPU的访存控制信号MREQ有关,MEQR为有效信号时才要求选中存储芯片,否则不要求存储器工作,可能在访问I/O
注
CPU的地址线决定整个主存空间的寻址范围,一般比存储芯片引脚数目多,地址总线决定了最大内存空间
CPU的数据线决定了一次可读写的最大数据宽度,因此也往往比单个存储芯片的数据线多
WE为读写控制线,CS为片选线,MRQE为访存控制信号,上面有横线(表非)时说明低电平有效,否则高电平有效
数据线并联 片内地址线(CPU地址低位)并联 CPU地址高位连接译码器形成片选线,芯片片选线各自单独连接 注意特殊的地址分配和电平要求即可
外部存储器
磁盘存储器
特点
优点
存储容量大,价格低,可重复使用,非易失性,非破坏性读出
缺点
存取速度慢,机械结构复杂,对环境要求高,串行读写
结构组成
磁盘驱动器
磁盘控制器
盘片
存储区域
磁头数
即记录面数,一个记录面对应一个磁头
柱面数
表示硬盘每个盘面上的磁道数
扇区数
表示每个磁道上有多少个扇区
性能指标
磁盘容量
一个磁盘所能存储的字节总数称为磁盘容量。磁 盘容量有非格式化容量和格式化容量之分
非格式化容量是指磁记录表面可以利用的磁化单元总数
格式化容量是指按照某种特定的记录格式所能存储信息的总量(一般为格式化的60%)
记录密度
记录密度是指盘片单位面积上记录的二进制的信息 量,通常以道密度、位密度和面密度表示
道密度是沿磁盘半径方向的磁道数
位密度是磁道单位长度上的二进制代码位数
面密度是道密度和位密度乘积
注意:磁盘所有磁道记录的信息量一定是相等的,并不 是圆越大信息越多,故每个磁道的位密度都不同。
平均存取时间
平均存取时间 = 寻道时间(磁头移动到目的磁道)+旋转延迟时间(磁头定位到目标扇区)+传输时间(传输数据)
寻道时间和旋转延迟时间一般取平均值
数据传输率
磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率
假设磁盘转数为r(转/秒),每条磁道容量为N个字节,则数据传输率为D=rN
为区别外部传输率,通常称之为内部传输速率,也称持续数据传输速率,而外部传输速率是指主机中的外设控制接口从(向)外存储器的缓存读出(写入)数据的速度,通常称为突发数据传输速率或接口传输速率
磁盘地址表示
驱动器号+柱面号(磁道)+盘面号(磁头)+扇区号
磁盘阵列
RAIN独立冗余磁盘阵列是将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问
分级
RAID0
无冗余和无校验的磁盘阵列
RAID1
镜像磁盘阵列
RAID2
采用纠错的海明码的磁盘阵列
RAID3
位交叉奇偶校验的磁盘阵列
RAID4
快交叉奇偶校验的磁盘阵列
RAID5
无独立校验的奇偶校验磁盘阵列
注
RAID1~5无论何时磁盘损坏,都可以更换受损磁盘而数据不会损坏,且随着序号变大存储容量不断变高
RAID0把连续多个数据块存放在不同物理磁盘的扇区中,提高了容量和速度,但没有容错能力
固态硬盘(SSD)
基于闪存技术,有固态电子存储芯片组成的硬盘,由控制单元和存储单元组成
读写速度快,低功耗,性能高,但价格昂贵可能磨损
数据先分块再分页,数据随机写慢是因为,写某一页时必须擦除整个块,并且写操作需要先将块内的其他数据转移保存才能擦除这个块
SSD会产生磨损,需要平均磨损处理
高速缓冲存储器(Cache)
Cache的基本原理
程序访问的局部性原理
时间局部性
在最近的未来要使用的信息可能就是现在正在使用的信息,因为程序中存在循环
空间局部性
在最近的未来要用到的信息可能与现在正在使用的信息在存储空间上是邻近的,因为指令通常顺序存放、顺序执行,数据通常是以向量、数组的形式簇聚在一起
工作流程和原理
流程图
主要步骤
CPU发出读请求,若访存地址在Cache命中,则将此地址转换成Cache地址,直接在Cache中读操作
若Cache不命中,则需访问主存,并将访问字所在的块从主存调入Cache,若Cache已满则采取替换算法
对于CPU的写请求,若Cache命中,则按照一定的写策略进行处理,若不命中,则去主存中操作并将对应的块调入Cache
Cache与CPU、CPU与主存间的数据交换以字为单元 Cache与主存之间的数据交换以Cache块为单位
命中
命中时
主存块已调入缓存且建立了映射关系
未命中
主存块未调入缓存且没有建立映射关系
命中率
CPU欲访问的信息已在Cache中的比率
Cache命中次数Nc,不命中而转去访问主存次数Nm,则命中率为 H=Nc/(Nc + Nm)
Cache-主存系统的平均访问时间
访问主存时间Tm,访问Cache时间Tc,命中率H
Cache和主存同时被访问
T=HTc+(1-H)Tm
先访问Cache,未命中时访问主存
T=Tc+(1-H)Tm
冲刷
通过将有效位清0来淘汰Cache行中的主存块,称为冲刷
Cache和主存之间的映射方式
Cache行中的信息是主存块的副本,地址映射是指把主存地址空间映射到Cache地址空间
为了指明Cache行是哪一块主存块的副本,要为每一块添加标记
为了说明Cache行是否有效,每个Cache行需要一个有效位
直接映射
主存中的每个块只能装入Cache中的唯一位置,若该位置已有内容则冲突,直接替换,无需替换算法
主存直接映射的地址结构
标记 + Cache行号 +块内地址
映射关系
Cache行号 = 主存块号 mod Cache总行数
特点
优点
实现简单
缺点
块冲突频率最高,空间利用率最低
适用于大容量高速Cache
命中条件
Cache行号对应的标记相等
有效位为1
全相联映射
主存中的每一块可以装入Cache中的任何位置,每行的标记用于指出该行对应主存的哪一块,CPu访存时需要与所有的Cache行的标记比较
主存直接映射的地址结构
标记 + 块内地址
映射关系
没有限制,任意主存块可以放在Cache的任意行
特点
优点
空间利用率高,命中率高
缺点
Cache的查找速度慢,实现成本高,需要相联存储器进行地址映射
命中条件
整个Cache中存在相同标记的Cache行
有效位为1
组相联映射
将Cache分为Q个大小相等的组,每组r个Cache行,每个主存块可以装入固定组中的任意一行,即组间采用直接映射,组内采用全相联映射
每组r个Cache行则成为r路组相联
Q=1时为全相联映射,r=1时为直接映射
主存直接映射的地址结构
标记 + Cache组号 + 块内地址
映射关系
Cache组号 = 主存块号 mod Cache组数
特点
优点
均衡,成本上接近直接映射,性能上接近全相联映射
缺点
实现复杂
命中条件
对应的Cache组内存在相同的标记
有效位为1
总结比较
对于某个主存块,直接映射只能映射到Cache中的某个唯一的固定行,全相联映射可以映射到所有Cache行,N路组相联可以映射到某个固定组内的N行,当Cache大小和主存块大小一定时
直接映射的命中率最低,全相联映射的命中率最高
直接映射的判断开销最小,所需时间最短,全相联映射开销最大,耗时最长
直接映射标记所占的额外空间开销最小,全相联映射标记所占的额外空间最大
Cache中主存块的替换算法
适用情形
只有全相联映射和组相联映射且产生冲突时需要替换算法
算法
随机算法(RAND)
随机确定替换的Cache块,实现简单,但是未考虑程序访问局部性原理,命中率低
先进先出算法(FIFO)
选择最早调入的行进行替换,未考虑局部性原理
近期最少使用算法(LRU)
依据程序访问局部性原理,选择近期内长久未访问过的Cache行作为替换的行,平均命中率较高(堆栈类算法
Cache每命中一次,命中行计数器清0,而其他各行计数器均加1,需要替换时比较各特定行的计数值,将计数值最大的行换出
其位数与Cache行数有关,不超过Cache行数(也可以是组内块数)
最不经常使用算法(LFU)
将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出
当程序的分块局部化范围超过了cache组大小时,命中率很可能很低,这种现象称为颠簸或抖动
Cache写策略
袁春风教材
全写法(写直通法,write-through)
写命中时
当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲(write buffer)
写缓冲可以解决速度不匹配,但是可能会出现缓冲饱和
写不命中时
写分配法(write-allocate)
主存中更新相应的存储单元,把主存中的块调入Cache
非写分配法(not-write-allocate)(只能配合全写法)
仅更新主存块而不将主存块调入Cache
缺点
增加了访存次数,降低Cache效率
写回法(write-back)
写命中时
当CPU对Cache写命中时,只修改Cache的内容,而不立即写入内存,只有当此块被换出时才写回内存
回写法设置赃位/修改位
若修改位为1,则说明对应Cache行的块被修改过,替换时需要写回主存
若修改位为0,则说明对应Cache行的块未被修改过,替换时不需要写回主存
写不命中时
写分配法
Cache的升级
多级Cache结构
L1Cache对L2Cache使用全写法,L2Cache对主存使用写回法,避免了频繁写造成的写缓存饱和
分离的Cache结构
将指令Cache和数据Cache分开设计,可以解决存取数据和预期指令的冲突,还可以充分利用指令和数据的不同局部性来优化性能
适用情形
与主存的结构有关
主存采用统一存储时使用统一缓存,主存采用指令、数据分开存储时使用分立缓存
与机器对指令的执行控制方式有关
采用超前控制或指令流水线时采用分立缓存
计算注意
Cache容量=存储容量+标记项总容量(注意赃位、有效位、替换控制位、标记位)
虚拟存储器
虚拟存储器的基本概念
虚拟存储器是一个逻辑模型,将主存或辅存统一编址,对应用程序员透明,对系统程序员不透明
功能
用户允许涉及的地址称为虚地址,虚地址对应的空间称为虚拟空间,用户给出逻辑地址,虚拟存储器提供对应物理地址的数据
实现
有辅助硬件将虚地址映射到主存当中的某个单元,主存单元地址成为实地址
处理一致性问题采用回写法(回写法有赃位)
采用回写法
地址转换
由CPU的存储器管理部件MMU完成
页式虚拟存储器
基本原理
页式虚拟存储器以页为单位,虚拟空间和主存空间都被划分为相同大小的页
主存的页称为实页、页框,虚存的页称为虚页
将虚拟地址分为虚页号+页内地址
虚拟地址到物理地址的转换由页表实现,页表是存放在主存中的记录虚页号和实页号(页和页框)对应关系的映射表
页表
表项
有效位/装入位
为1 对应页面从外存装入内存,页表项此时存放该页的物理页号(页框号)
为0 表明没有调入主存
若位置字段为NULL 则是未分配页
若位置字段不为空,则是还未写回外存的页??
修改位/赃位
表示页面是否被修改过(配合回写策略)
引用位/使用位/替换控制位
配合替换策略进行设置
访问权限位
禁止缓存位
说明页面是否可以装入Cache
存放位置
页表属于进程控制信息,存放在进程地址空间的内核区,页表在主存的首地址记录在页表基址寄存器中
页表基址是第一个页表项地址,每个进程都有页表基址指明进程起始
在页表中能查到全部的虚拟页
地址转换
根据虚拟地址的高位部分的虚页号找到对应的页表项
装入位为1
取出物理页号,和虚拟地址低位部分的页内地址拼接形成实际物理地址
装入位为0
缺页中断
由CPU中的存储器管理部件MMU自动完成
TLB(快表)
地址转换时需要两次访问主存(查询页表的物理地址以及从物理地址取得数据),还可能产生缺页中断,为了减少主存访问次数,根据程序的局部性原理,将一段时间总是访问的页表项装进高速缓冲器组成的块表TLB中,可以减少访存次数(相应的将主存中的页表称为慢表)
特点
通常采用全相联映射或者组相联映射
TLB是独立的硬件,每个TLB项包含页表表项和TLB标记字段
TLB标记一般为页表项对应的虚页号(组相联映射时则为虚页号的高位部分)
特点
优点
页面的长度固定,页表简单,调入方便
缺点
产生内部碎片,并且处理、保护、共享都不如段式虚拟存储器方便
段式虚拟存储器的基本原理
段是按程序的逻辑结构划分,每个段的长度因程序而异
虚拟地址分为段号+段内地址
段表
每一行记录了与某个段对应的段号、装入位、段起点和段长等信息,由于段的长度可变,段表中需要给出各段起始地址和长度(二维查找)
特点
优点
段的分界与程序的分界对应,具有逻辑独立性,便于编译、管理、修改和保护以及多道程序共享
缺点
段长度可变,分配空间不方便,容易产生外部碎片
段页式虚拟存储器的基本原理
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表。(先分段再分页)
地址为段号+段内页号+页内地址
虚拟存储器和Cache区别
Cache主要解决速度不匹配,虚拟存储器主要解决主存容量有限的问题
Cache全由硬件实现,对所有程序员透明,虚拟存储器由OS和硬件共同实现,对应用程序员透明,对系统程序员不透明
虚拟存储器不命中的影响更大,因此对TLB的命中率要求更高
Cache不命中时,CPU可以和主存直接通信,页表不命中时,需要缺页中断由硬盘调入主存,而不能直接通信
错题&易错点
第四章 指令系统
指令格式的基本概念
指令通常包括操作码字段和地址码字段
基本原则
完备性 能编制任何可计算程序
兼容性 兼容以前的低档指令系统
均匀性 对多种类型数据进行处理
整型:字节、字、双字
浮点数:单精度、双精度
指令格式
指令长度和机器字长没有固定关系,通常把指令字长等于机器字长的指令称为单字长指令
定字长指令结构
指令系统中所有指令相同
执行速度快,控制简单
变字长指令结构
指令长度随指令功能而异
指令集
所有指令的集合构成该指令的指令系统
指令的基本格式
OP(操作码)+A(地址码)
按地址码数目不同
零地址指令
OP
分类
不需要操作数的指令
空操作指令,停机指令,关中断指令
零地址的运算类指令
仅用在堆栈计算机中
一地址指令
OP+A
分类
只有目的操作数的单操作指令 OP(A)→ A
加一,减一,求反,求补等
隐含约定目的地址的双操作数指令 (ACC)OP(A) → ACC
按地址A取源操作数,隐含约定另一个操作数由ACC累加器提供,结果也存放在ACC中
二地址指令
OP+A1+A2
双操作数指令,(A1)OP(A2)→A1
常用的算数运算和逻辑运算一般均为双操作数指令,结果存放在目的地址中,完成一条指令需要访存四次(取指令,取A1,取A2,存A1)
三地址指令
OP+A1+A2+A3
四次访存(A1)OP(A2)→A3
四地址指令
(A1)OP(A2)→A3,A4
四次访存
定长操作码格式
在指令的最高为部分分配固定的若干位定长表示操作码
有利于简化计算机硬件设计,提高译码和识别速度
扩展操作码指令格式
扩展操作码是可变长操作码的常用方法,使操作码的长度随着地址码的减少而增加,不同地址数的指令有不同长度的操作码,从而有效缩短指令字长
注意
不允许短码是长码的前缀
各指令的操作码不能重复
通常对使用频率高的指令分配短操作码,使用频率高的指令分配长操作码,从而减少指令译码和分析的时间
计算时由地址码增多/变少的方向分配,按照一定的方向顺序
寻址方式
寻找数据或指令的有效地址的方式,将指令地址码字段中的形式地址A结合寻址方式计算出操作数在虚拟存储器中的真实地址,即有效地址EA
指令寻址
寻找下一条要执行的指令地址称为指令寻址
顺序寻址
程序计数器PC+1(1个指令字长),自动形成下一条指令的地址
跳跃寻址
转移类指令实现,下条指令的地址不是PC自动生成,而是计算后修改PC的值,仍是PC给出指令地址
数据寻址
数据寻址方式较多,通常在指令中设置字段,用于指明寻址方式
操作码+寻址特征+形式地址A
数据寻址方式(访存次数不考虑存储结果)
① 隐含寻址
不明显地给出操作数的地址,而是在指令中隐含操作数的地址
一般累加器ACC对单地址指令格式为隐含地址
特点
有利于缩短指令字长,但是需增加存储操作数或隐含地址的硬件
② 立即寻址(立即数寻址)
形式地址A就是操作数本身,又称为立即数,一般采用补码形式
取指令访存1次,执行指令0次(指令执行阶段不访存)
特点
执行执行时间最短(不访存),但是A的位数限制了立即数的范围
③ 直接寻址
指令字中的形式地址A是操作数的真实地址EA
EA=A
特点
简单,指令执行仅访问1次主存,不需专门计算操作数的地址
A的位数限制了指令操作数的寻址范围,操作数地址不易修改
④ 间接寻址
相对于直接寻址而言,指令的地址字段给出的形式地址是操作数有效地址所在的存储单元的地址, 也就是操作数地址的地址
EA=(A)
特点
指令执行需两次访存,查找真实地址以及取操作数,可扩大寻址范围(EA的位数大于主存形式地址A的位数),便于编程(间接地址可以方便完成子程序返回)
指令执行阶段需要多次访存,由于访问速度慢,因此扩大寻址范围时一般采用寄存器间接寻址
多次间接寻址
⑤ 寄存器寻址
指令字中直接给出操作数所在的寄存器编号
EA=Ri
特点
取操作数不访存,地址码长度短,执行速度快,但是寄存器价格昂贵,个数有限
⑥ 寄存器间接寻址
指令字中指明的寄存器编号,寄存器中给出的不是一个操作数,而是操作数所在的主存单元地址
EA=(Ri)
特点
扩大寻址范围,比一般间接寻址速度更快,但是取操作数时仍需访问主存
偏移寻址
⑦ 相对寻址
把PC的内容加上指令格式中的形式地址A而形成操作码的有效地址
EA=(PC)+A
特点
A的位数决定寻址范围,操作数地址不固定,且与之领地之间相差固定值,便于程序浮动,广泛用于转移指令
注意 PC在取出指令后会自动加1,假设转移指令的地址X,占2B,取出指令后PC值变为(PC)=X+2,此时JMP A的转移指令实际跳转到(PC)=X+2+A
⑧ 基址寻址
将CPU中基址寄存器BR的内容加上指令格式中的形式地址A
EA=(BR)+A
基址寄存器的选取
专用基址寄存器
面向操作系统,内容由操作系统或管理程序确定
通用寄存器
由用户决定哪个寄存器作为基址寄存器,内容由操作系统确定
特点
可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪一空间区域, 故有利于多道程序设计, 以及可用于编制浮动程序。
⑨ 变址寻址
有效地址EA等于指令字中的形式地址A和变址寄存器IX的内容之和
EA=(IX)+A
变址寄存器的选取
IX(专用寄存器)
通用寄存器
特点
面向用户,可扩大寻址范围,适合编制循环程序
基址寻址和变址寻址的区别
基址寻址面向系统,主要用于多道程序或数据分配存储空间,因此基址寄存器的内容通常由操作系统或管理程序确定,基址寄存器中的内容通常在执行过程中不可变,而A是可变的
变址寻址面向用户,主要用于处理数组问题,变址寄存器的内容由用户设定,在程序执行过程中变址寄存器的内容可变,而指令字中的A通常不可变
⑩ 堆栈寻址
堆栈是存储器中一块特定的后进先出的存储区该存储区中读写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针SP
硬堆栈
寄存器堆栈,成本高容量下
软堆栈
从主存中划出一片区域作为堆栈
堆栈寻址的寄存器都隐含使用SP,从而实现取操作数
数据的对齐和大小端存放方式
数据对齐
按边界存储是指半字、字、双字都按指定的边界对齐的方式存放,而不是随意存放,这样可保证对一个字长数据的读/写只需要一次存储器访问即可完成,提高了访问效率,但有时会导致存储空间的浪费,因此,这是一种以空间换时间的方法。
RISC采用边界对齐方式,级若位置放不下,自动顺延直到满足边界对齐
边界对齐便于实现指令流水
边界不对齐存放可以充分利用存储空间,但是可能导致部分短数据或短指令也放在不同的存储字中导致存取变慢
大小端
MSB 最高有效字节
LSB 最低有效字节
大端方式
从最高有效字节到最低有效字节的方式,MSB放前面(高地址对应高位)
小端方式
从最低有效字节到最高有效字节,LSB放前面(高地址对应低位)
数据存储和读取由低位到高位,小端方式有利于机器运算
CISC和RISC的基本概念
CISC复杂指令系统计算机
X86架构,用于笔记本、台式机,大多能实现软件兼容,
RISC精简指令系统计算机
基于20%的指令可以实现80%的程序的原理,但是不兼容
对比
CISC指令字长不固定,但是RISC一般定长
CISC对访存指令无限制,但是RISC只有存取指令允许访存
CISC各指令执行时间和使用频率相差很大,但是RISC不是
CISC对指令流水线无必然要求,但是RISC必须实现指令流水
CISC为微程序控制方式,RISC多为组合逻辑控制
高级语言程序和机器及代码间的对应
编译器
预处理-编译-汇编-链接
编译器 将预处理过的文件编译生成汇编语言源程序
汇编器与链接器的基本概念
链接器 将多个可重定位目标文件和库函数合并成可执行文件并保存在磁盘上
汇编器 将编译语言源程序翻译成机器指令,打包成可重定位目标文件
选择结构语句的机器级表示
循环结构语句的机器级表示
过程(函数)调用对应的机器级表示
第五章 中央处理器
CPU的功能和基本结构
CPU的功能
CPU由运算器和控制器组成,控制器负责协调并控制计算机各部件执行程序的指令序列,运算器是对数据进行加工
指令控制
完成取指令、分析指令和执行指令的操作,即程序的顺序控制
操作控制
指令的功能通常由若干操作信号组合实现,CPU管理并产生由内存取出的每条指令的操作信号,把这种操作信号送往相应部件,从而控制部件按指令要求动作
时间控制
对各种操作加以时间上的控制,为每条指令按时间顺序提供应有的控制信号
数据加工
对数据进行算术和逻辑运算
中断处理
对计算机运行过程中出现的异常情况和特殊请求进行处理
CPU的基本结构
运算器基本组成
数据加工的中心
算术逻辑单元ALU
算术/逻辑运算,核心是带标志加法器
暂存寄存器
用于暂存从主存读来的数据,该数据不能放在通用寄存器中,否则可能会被破坏,对应用程序员透明
累加寄存器ACC
通用寄存器,用于暂存ALU运算的结果信息,可以作为加法运算的一个输入端
通用寄存器组
用于存放操作数和各种信息,SP是堆栈指针
程序状态字寄存器PSW
保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,PSW的位参与并决定微操作的形成,对用户不透明(所有程序员可见)
移位器
对操作数或运算结果移位运算
计数器CT
控制乘除运算的操作步骤
乘法除法运算可以根据移位次数判断是否运算结束
控制器基本组成
控制器分为
硬布线控制器
微程序控制器
程序计数器PC
用于指出下一条指令在主存中的存放地址,CPU始终根据PC的内容取指令(跳转指令也是修改PC的值,再依据PC的值取指令)
程序通常顺序执行,PC有自增功能
指令寄存器IR
用于保存当前正在执行的指令
指令译码器
仅对操作码字段进行译码,向控制器提供特定的操作信号
存储器地址寄存器MAR
用于存放要访问的主存单元的地址
存储器数据寄存器MDR
用于存放向主存写入或者从主存读出的信息
时序系统
产生各种时序信号,由统一时钟分频得到
微操作信号发生器
根据IR的内容(指令)、PSW的内容(状态信息)和时序信号,产生控制整个计算机系统所需的各种控制信号
分为
组合逻辑型
存储逻辑型
基本结构
透明性总结
用户可见(对所有程序员不透明)
通用寄存器
PSW
PC
用户不可见(对所有程序员透明)
MAR
MDR
IR
指令缓冲器
Cache
微程序结构和功能
应用程序员不可见
暂存寄存器,虚拟存储系统
系统程序员可见
虚拟存储系统
汇编程序员可见
PC
指令执行过程
指令周期和时序
指令周期
CPU从主存中取出并执行一条指令的时间称为指令周期,不同指令的指令周期可能不同
机器周期(CPU周期)
一个指令周期由若干机器周期来表示
定长的机器周期
不定长的机器周期
时钟周期(节拍、T周期、CPU时钟周期)
一个机器周期由若干时钟周期来表示,时钟周期是CPU操作的最基本单位
每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等
指令周期的组成及相应的数据流
数据流是根据要求依次访问的数据序列
取指周期
任务是根据PC中的内容从主存中取出指令代码并存放在IR中,取指令的同时PC+1
数据流为
(PC)→(MAR)→地址总线→主存
CU发出读命令→控制总线→主存
主存中的指令→数据总线→MDR→IR(存放当前要执行的指令)
CU发出控制信号→PC自动+1
间址周期
任务是取操作数有效地址(在需要间接寻址时才会出现,可能没有间址周期),将指令中的地址码送到MAR并送至地址总线,然后由CU发出读命令,以获取有效地址并存放至MDR
数据流为
Ad(IR)→MAR→地址总线→主存
CU发出读命令→控制总线→主存
主存内的有效地址→数据总线→MDR(存放有效地址)
执行周期
任务是读操作数 ,并根据IR中的指令字的操作码通过ALU产生结果
不同指令的执行周期操作不同,没有固定的数据流向
中断周期
任务是处理中断请求
指令执行方案
一个指令周期通常包括不同的时间段(执行步骤),每个步骤完成指令的一部分,通常出于硬件成本和性能考虑,有三种方案来安排指令的执行步骤
单指令周期
指令周期全部相同,对所有指令都选择相同的执行时间来完成,指令之间串行执行
指令周期取决于执行时间最长的指令的执行时间
对于可以短时间完成的指令会导致资源浪费,降低系统运行效率
多指令周期
有多个不同的指令周期时长,对不同类型的指令选用不同的执行步骤,指令串行执行,可为每条指令选择不同的时钟周期
指令流水线方案
指令之间可以并行执行,通过在每个时钟周期启动一条指令,尽可能让指令并行执行
数据通路的功能和基本结构
CPU由数据通路和控制部件两大部分组成
数据通路的概念和功能
(CPU内)数据在功能部件之间传送的路径称为数据通路
包括数据通路上流经的部件,如ALU、通用寄存器、状态寄存器、异常和中断处理逻辑等
组成部分(数据通路中包含组合逻辑单元和存储信息的状态单元)
ALU
通用寄存器
状态寄存器
PC
IR
指令译码器
脉冲源和启停控制线
时序信号产生部件
操作控制信号形成部件
总线控制逻辑
中断机构
数据通路由控制部件控制,数据通路的功能是实现CPU内部的运算器与寄存器以及寄存器间的数据交换(CU、MAR、MDR不属于数据通路)
数据通路基本结构
区别内部总线和系统总线
内部总线指同一部件内相互连接的总线,如CPU内部连接各寄存器和运算部件的总线
系统总线指连接同一台计算机系统的各部件的总线,如CPU与主存之间的线路
CPU内部单总线方式
将所有寄存器的输入端和输出端都连接到一条公共通路上
结构简单,但数据传输存在较多的冲突现象,性能较低
一个时钟周期内只允许传送一个数据
适合多周期处理器(指令流水
连接中的注意事项
专用数据通路方式
根据指令执行中的数据和地址的流动方向安排线路,避免使用共享总线
性能较高,但硬件量大
CPU内部三总线方式
将CPU的所有寄存器的输入端和输出端连接到多条公共通路上,相比之下多总线方式允许同时在多个总线上传送不同的数据,提高效率
多总线在执行指令时所需的步骤大大减少
连接中的注意事项
三总线和单总线很难实现指令流水
控制器的功能和工作原理
控制器的结构和功能
从主存中取出指令,并指出下一条指令在主存中的位置
对指令进行译码或测试,产生相应的操作信号,以便启动规定的动作
指挥并控制CPU、主存、输入输出设备的数据流动方向
分类
根据控制器产生微操作信号的方式不同
硬布线控制
微程序控制器
硬布线控制器
基本原理
根据指令的要求、当前的时序以及内部和外部的状态,按时间的顺序发送一系列微操作控制信号,由复杂的组合逻辑门电路和一些触发器构成,因此又称组合逻辑控制器
硬布线控制器单元图
输入
指令寄存器译码产生的指令信息
时钟信号,时序系统产生的机器周期信号和节拍信号
标志寄存器PSW
来自执行单元的反馈信息
输出
CPU内部的控制信号
寄存器之间的数据传输
PC的修改
控制ALU进行相应的运算
CPU外部的控制信号(到总线)
到存储器
访存控制信号MREQ,读命令RD,写命令WR
到IO设备
访问设备的控制信号IO,中断响应信号INTA,总线响应信号HLDA
CPU的控制方式
控制单元控制一条指令执行的过程,实质上是依次执行一个确定的未操作序列的过程,对应的指令和微操作的执行时间也不同,有三种控制方式
同步控制方式
系统有统一的时钟,所有的控制信号均来源于同意时钟信号
通常以最长的微操作序列和最繁琐的微操作作为标准,采用完全统一的具有相同时间间隔和相同节拍作为机器周期运行不同的指令
电路简单,但是运行速度慢
异步控制方式
不存在基准时标信号,各部件按自身固有的速度工作,通过应答方式联络
运行速度快,但是控制电路复杂
联合控制方式
同步异步的折中,对各种不同的指令实行大部分采用同步控制,小部分采用异步控制
硬布线控制单元的设计
列出微操作命令的操作时间表→进行微操作信号综合→画出微操作命令的逻辑图
对微操作命令的节拍安排
节拍安排的原则
微操作的先后顺序不得轻易更改
控制对象不同的微操作尽量安排在同一个节拍内完成
占用时间短的微操作尽量安排在一个节拍内完成且允许有先后顺序
取指周期
T0
(PC)→MAR
1→R
T1
M(MAR)→MDR
(PC)+1→PC
T2
M(MDR)→IR
OP(IR)→ID
1→IND 1→EX
间址周期(完成取操作数地址的任务)
T0
Ad(IR)→MAR
1→R
T1
M(MAR)→MDR
T2
M(MDR)→Ad(IR)
1→EX
执行周期(P227)
访存指令
非访存指令
中断周期
微程序控制器
基本原理
采用存储逻辑实现,将微操作信号代码化,使每条机器指令转化为一段微程序并存入一个专门的存储器(控制存储器)中,微操作控制型号由微指令产生
基本概念
微命令与微操作
微命令是微操作的控制信号,是构成控制序列的最小单位
在微程序控制的计算机中,将控制部件向执行部件发出的各种控制命令称为微命令
微操作是微命令的执行过程,是计算机中最基本的不可再分解的操作
一个机器指令可以分解成一个微操作序列
微命令的分类
相容性微命令
可以同时产生,共同完成某一些微操作的微命令
互斥性微命令
不允许同时出现的微命令
微指令
微指令是若干微命令的集合
包括
操作控制字段/微操作控制字段
用于产生某一部操作所需要的各种操作控制信号
顺序控制字段/微地址码字段
用于控制产生下一条要执行的微指令地址
微地址
存放微指令的控制存储器的单元地址称为微地址
主存与控制存储器
主存在CPU外部,有RAM实现,用于存放程序和数据
控制存储器(CM)在CPU内部,用于存放微程序,用ROM实现
微程序相对固定,且通常不存放在主存中,故有可能用工作速度较高的ROM存放微程序,这种固化的微程序,称为固件
程序与微程序
程序是指令的有序集合,用于完成特定的功能
微程序是微指令的有序集合,用于完成某条机器指令的功能
微程序控制器的基本结构
控制存储器CM
微指令寄存器CMDR/μIR
微地址形成部件
微地址寄存器CMAR
示意图
微程序控制器的工作过程
step1 执行取微指令公共操作
机器开始运行时,自动将取址微程序的入口地址送入CMAR,并从CM中读取相应的微指令送入CMDR
取址微程序的入口地址一般CM的0号单元,取址微程序执行完成后,从主存中取出的机器指令已经存入IR中
step2 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序入口地址,并送入CMAR
step3 从CM中逐条取出对应的微指令并执行
step4 执行完对应于一条机器指令的微程序后,再次回到取址微程序的入口地址,继续step1,益以完成下一条机器指令的公共操作
注
通常,一条机器指令对应一个微程序,但由于所有指令的的取址操作相同,因此可将取址操作的微命令统一编成一个公共的微程序
间址周期和中断周期也可编出相应的公共微程序,除非题目特别说明,否则对于有n种机器指令的系统,微程序数至少为n+1(若强调了带有中断或间址,则也应加上作为公共微程序)
取址操作一定需要单独编成微程序的另一个原因是,在程序开始运行前,没有其他的指令对应的微程序可以运行,因此需要运行微指令
微指令的地址形成方式
微指令的下地址字段指出(断定方式)
微指令格式中设置下地址字段,由微指令的下地址字段直接指出后继微指令的地址
根据机器指令的操作码形成
机器指令取值到IR后,微指令的地址由操作码金微地址形成部件译码后形成
增量计数法
(CMAR)+ 1 → CMAR
分支转移
操作控制字段+转移方式+转移地址
转移方式指明判别条件,转移地址指明成功后去向
通过测试网络
由硬件产生微程序入口地址
微指令的编制
通常一条微指令对应一个机器周期
微指令的编码方式
直接编码方式(直接控制方式)
在微指令的操作控制字段中,每一位代表一个微操作命令某位为“1” 表示该控制信号有效
简单直观速度快,但是微指令字长过长,n个不同的微命令要求操作码字段有n位
字段直接编码方式
将微指令的控制字段分成若干 “段”,每段经译码后发出控制信号
分段原则
微指令的微命令字段分成若干小字段,把互斥性微命令组合在同一字段中,相容性微命令微命令组合在不同字段中
每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关,每段位数不能过多,否则译码复杂速度下降
一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作
可以缩短微指令字长,但是需要译码电路,比直接编码方式慢
字段间接编码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令, 故称为字段间接编码,又称隐式编码
进一步缩短指令字长,但是削弱了微指令的并行控制能力,通常只作为辅助手段
微指令的格式
水平型微指令
直接编码、字段直接编码、字段间接编码、混合编码都属于水平型微指令
一条水平型微指令定义几种并行的基本操作
微程序短,执行速度快,但是微指令长,编写复杂
垂直型微指令
采用类似机器指令操作码的方式,用微操作码字段规定微指令的功能
微指令短简单规整便于编写微程序,但是微程序长执行速度慢效率低
混合型微指令
在垂直型基础上增加一些不复杂的并行操作
仍便于编写,执行速度加快
微程序控制单元的设计和分类
设计
写出对应机器指令的微操作命令和节拍安排
写出每个周期的微操作
部分微操作命令
确定微指令格式
编写微指令码点
分类
静态动态
静态微程序设计,微程序无需改变,ROM
动态微程序设计,通过改变微指令和微程序来改变机器指令有利于仿真,但难度大,EPROM
毫微程序微程序
微程序直接通过控制线对硬件控制
毫微程序用来解释微程序,硬件由毫微程序直接控制
硬布线和微程序对比
硬布线速度快,但是难以修改扩充,微程序速度慢,但是规整灵活抑郁维护扩充
异常和中断机制
异常和中断的基本概念
中断
来自CPU外的设备向CPU发出的中断请求称为中断,也叫外中断
重点是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件,中断的检测必须通过中断请求线获取信息
异常
CPU内部产生的意外事件称为异常,也叫内中断
异常是CPU执行一条指令时由CPU在内部检测到的、与正在执行的指令相关的同步事件,异常的检测由CPU自身完成,不需要外界信号通知
异常和中断的分类
异常
软件中断
故障Fault
引起故障的指令启动后,执行结束前被检测到的一类异常事件
非法操作码,缺页,除数为0
断点为当前发生故障的指令,对于无法通过异常处理程序恢复故障,不能回到原断点执行,必须终止程序执行
陷入Trap
是预先安排的一种异常事件
自陷指令
自动返回自陷指令的下一条指令执行,当自陷指令为转移指令时,返回到转移目标指令
硬件中断
终止Abort
如果在执行指令的过程中发生了使计算机无法继续执行的硬件故障,只能终止程序
控制器出错,存储器校验错
程序终止,不能返回断点
中断
可屏蔽中断
通过可屏蔽中断请求线INTR向CPU发出的中断请求
IO请求
不可屏蔽中断
指通过专门的不可屏蔽中断请求线NMI向CPU发出的中断请求
电源掉电
异常和中断的检测与响应
响应过程
从CPU检测到异常或中断事件,到调出相应的处理程序,整个过程称为中断和异常的响应
step1 关中断
保存断点和程序状态期间,不能被新的中断打断,通常通过”中断允许“IF触发器来实现
step2 保存断点和程序状态
为了在处理异常或中断后能正确返回被中断的程序继续执行,必须将程序的断点保存在栈或特定寄存器中
step3 识别异常和中断类型并赚到相应处理程序
检测方式:软件识别&硬件识别
软件 CPU设置异常状态寄存器,用于记录异常原因,操作系统使用统一的查询程序按优先级进行查询
异常大多数软件识别,中断一般两者均可
硬件 向量中断,所有中断向量存放在中断向量表中,每个中断或异常被指定一个中断类型号,从而方便查找对应处理程序
用向量地址寻找中断服务程序的入口地址,方式为
向量地址内存放无条件转移指令,响应时向量地址送PC
设置向量地址表
指令流水线
指令流水线的基本概念
提高处理机并行性的两种方式
时间上的并行技术
将一个任务分解为不同的子任务,以便同一时间执行多个任务,即流水线技术
空间上的并行技术
一个处理机内设置多个执行相同任务的功能部件,并让这些部件并行工作,即超标量处理机
一条指令的执行过程可以分为多个阶段,根据计算机的不同,具体的分法也不同
设计原则
指令流水段个数以最复杂指令所用的功能段个数为准,流水段的长度以最复杂的操作所花的时间为准
流水线方式不能缩短单条指令的执行时间,但对于整个程序,执行效率得到提高
实现指令流水线对指令集的要求
指令长度应尽量一致,有利于简化取指令和指令译码操作
指令格式应尽量规整,尽量保证源寄存器的位置相同,有利于指令未知时就可以取寄存器操作数,否则需译码后才能确定指令中各寄存器编号的位置
采用Load/Store指令,其他指令都不能访存,可以将Load/Store指令的地址计算和运算指令的执行步骤放在同一个周期内,有利于减少操作步骤
数据和指令按边界对齐方式存放,有利于减少访存次数
传统冯诺依曼机采用顺序执行方式,也称串行执行方式
指令流水线的基本实现
对于单周期CPU,取址IF 译码ID 执行EX 访存MEM 写会WB串连在一起,单周期CPU的始终频率取决于数据通路中的关键路径(最长路径),只能以执行速度最慢的指令作为设计时钟周期的依据,因此单周期CPU执行效率不佳
流水线的数据通路
各种寄存器和数据存储器均采用统一时钟CLK同步,每来一个时钟,就有新的指令进入流水线,同时流水寄存器会锁存前段加工处理完成的数据和控制信号,为下一段功能部件提供数据输入
流水线分类
根据流水线使用的级别不同
功能部件级流水线
就是将复杂的算术逻辑运算组成流水线工作方式 例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程
处理机级流水线
把一条指令分成多个子过程
处理机间流水线
是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中
根据流水线可以完成的功能
单功能流水线
只能实现一种固定的专门功能的流水线
多功能流水线
通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
根据同一时间内各段的连接方式
静态流水线
在同一时间内,流水线的各段只能按同一种功能的连接方式工作
动态流水线
在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂(乱序执行)
根据流水段各个功能段之间是否有反馈信号
线性流水线
从输入到输出,每个功能段只允许经过一次,不存在反馈回路
非线性流水线
存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算
流水线的性能指标
吞吐率
吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。设任务数为n;处理完成n个任务所用的时间为Tk(第一个任务开始,最后一个任务结束为止的总时间),TP=n/Tk
加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。设T0表示不使用流水线时的执行时间,即顺序执行所用的时间;Tk表示使用流水线时的执行时间,则加速比S=T0/Tk
效率
流水线的设备利用率称为流水线的效率,流水线中各功能段的利用率。在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。
E=n个任务占用时空区有效面积/n个任务所用的时间与个流水段所围成的时空区总面积=T0/kTk
三种冒险的处理
指令流水线中,会遇到导致流水线无法正确执行后续指令而引起流水线阻塞或停顿,称为流水线冒险,主要分为三种
结构冒险(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突,即由硬件资源竞争造成的冲突
解决办法
前一条指令访存时,使后一条相关指令及其后续指令暂停一个时钟周期
单独设置数据存储器和指令存储器,使取址操作和取数据操作各自在不同的存储器中
Cache分立机制
数据冒险(数据冲突)
一个程序中,下一条指令会用到当前指令计算出的结果,此时这两条指令发生数据冲突,当多条指令重叠处理时会发生冲突
(先)写后读(Read After Write,RAW)
表示当前指令将数据写入寄存器后,下一条指令才能从该寄存器读取数据,否则先读后写,读出错
应该先写后读,但是先读后写,出错
(先)读后写(Write After Read,WAR)
表示当前指令读出数据后,下一条指令才能写入该寄存器,否则先写后读,读出错
写后写(WAW)
当前指令写入后下一条指令才能写入,否则出错
读后写中的后是先后次序,英文是After在……后,所以二者顺序相反,但是意思相同,都表示正确做法的情况,与实际发生的错误情况相反
解决办法
把遇到数据相关的指令及其后续指令都暂停一到几个时钟周期,直到数据相关问题消失在继续执行,分为
硬件阻塞stall
软件插入NOP指令(空操作)
插入气泡
设置相关专用通路(数据旁路技术)
级不等前一条指令把计算结果写回寄存器组,下一条指令也不去度寄存器组,而是直接把前一条指令的ALU计算结果作为输送给下一条指令作为输入开始计算,使本来需要暂停的操作可以继续执行
通过编译器对数据相关的指令编译优化的方法,调整指令顺序来解决数据相关
控制冒险(控制冲突)
指令通常顺序执行,但是在遇到改变指令顺序的情况下(转移指令、调用或返回)会改变PC值,造成断流从而引起控制冒险
解决办法
对转移指令进行分支预测,今早生成转移目标地址,分为
静态预测(简单预测)
总是预测条件不满足,继续执行分支指令后续指令
动态预测
根据历史情况进行动态调整预测,有较高的准确率
预取转移成功和不成功两个方向上的目标指令
加快和提前形成条件码
提高转移方向的猜准率
插入空操作或插入气泡也可以
异常或中断也会引起控制冒险,如Cache的缺失也会引起流水线阻塞,但不会引起异常,缺页会引起异常
高级流水线技术
超标量流水线(动态多发射技术)
每个时钟周期内可并发多条独立指令,不能调整指令的执行顺序要配置多个功能部件
通过编译优化技术,把可并行执行的指令搭配起来
超流水技术
在一个时钟周期内再分段(如 3 段),不能调整指令的执行顺序在一个时钟周期内一个功能部件使用多次( 3 次)
不能调整指令的执行顺序,靠编译程序解决优化问题
超长指令字
具有多个操作码字段的超长指令字(可达几百位),由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条,采用多个处理部件
超流水技术CPI仍为1,每个时钟周期还是执行一条指令,但是主频更高,超标量流水技术的CPI<1,但成本更高控制更复杂
多处理器基本概念
并行处理系统部分分类
SISD(单指令单数据流系统)
组成:传统的串行计算机处理方式,仅包含一个处理器和一个存储器
特点:一段时间内仅执行一条命令
改进:为了提高速度有时使用指令或者运算操作流水线,因此处理器有时设置多个功能部件,并采用多模块交叉方式组织存储器
学习内容多为SISD (IBM PC机)
SIMD(单指令多数据流系统)
组成:一个指令控制部件,多个处理单元和多个存储器(数据级并行技术)
特点:一个指令流同时对多个数据流进行处理,不同处理单元执行的同一条指令所处理的数据是不同的
扩展应用SSE,MMX,AVX指令集(PEPE相连处理机)
for循环处理数组最有效,使用case和分支选择语句时效率最低
MISD(多指令单数据流系统)
理论模型,实际不存在
MIMD(多指令多数据流系统)
大多数并行处理计算系统的处理方式
能同时执行多条指令分别处理多个不同的数据
每个计算机有独立的主存地址空间,通过消息传递来进行数据传送也称消息传递MIMD
多处理器系统是共享存储多处理器的简称SMP,具有共同的单一地址空间,通过存取指令来访问系统中的所以存储器,也称共享MIMD
SIMD是数据级并行技术,MIMD是并行程度更高的线程级并行及以上的并行计算技术
向量处理器VPS
优点:以流水线结构为主,克服通常流水线计算机指令处理量大,存储访问不均匀,流水不畅等缺点,大大减少指令数量,阻塞次数
组成:一个普通流水化的标量单元加上一个向量单元组成
特点:面向向量型数据,在各分量上执行的运算一般彼此无关,多采用流水线式,也有阵列式,用于求解大型文体
硬件多线程的基本概念
为了减少线程切换的开销,产生了硬件多线程,支持硬件多线程的CPU为每个线程提供单独的通用寄存器组和程序计数器
线程切换只需激活选中的寄存器,从而省略了数据交换的环节,减少开销,有三种实现方式
细粒度多线程
多线程间轮流交叉执行指令,多线程间指令不相关,可以乱序并行执行,处理器可以每个时钟周期切换线程
粗粒度多线程
仅在一个线程出现较大开销的阻塞时才切换线程,必须清除被阻塞的流水线,开销比细粒度更大
同时多线程
SMT是上述两种多线程技术的变体,实现指令级并行执行的同时实现线程级并行(Intel中的超线程即是同时多线程SMT)
多核处理器的基本概念
CPU中含有多个处理单元,每个处理单元称为一个核
核可以有独立Cache也可以共享Cache,核之间一般对称,并且共享主存储器,可以降低体积功耗
共享内存多处理器(SMP)的基本概念
具有共享的单一物理地址空间的多处理器称为共享内存多处理器SMP
特点:拥有共享的单一地址空间的并行处理系统,所以每个处理器都可以通过load/store访问系统中的存储器,不管是本地还是共享存储器
错题&易错点
第六章 总线
总线的基本概念
总线定义
总线是一组能为多个部件分时共享的公共信息传送线路
分时表明同一时刻只允许有一个部件向总线发送信息
共享表明总线上可以挂接多个部件,各个部件之间交换信息都可以通过总线分时共享,多个部件可同时从总线上接收相同的信息
总线的特性
机械特性
与物理连接有关,尺寸、形状、管脚数、排列顺序
功能特性
与数据宽度有关,每根传输线的功能是什么(地址、控制、数据)
时间特性
信号的时序关系
电气特性
决定传输方向和有效的电平范围
总线设备
主设备
获得总线控制权的设备
从设备
被主设备访问的设备,只能响应从主设备发来的各种总线命令
总线的分类
按数据传输格式分类
串行总线
优点
只需要一条传输线,成本低廉,广泛应用于长距离传输;应用于计算机内部时,可以节省布线空间。
缺点
在数据发送和接收的时候要进行拆卸和装配,要考虑串行-并行转换的问题
并行总线
优点
总线的逻辑时序比较简单,电路实现起来比较容易
缺点
信号线多,占据空间大,远距离传输成本高,且工作频率高时信号线互相干扰,因此对等长要求高
1. 工作频率相同时,串行总线传输速度比并行总线慢。 2.并行总线的工作频率无法持续提高,而串行总线可以通过不断提高工作频率来提高传输速度,最终超过并行总线
按总线功能分类
片内总线
芯片内部的总线,它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线
系统总线
计算机系统内各功能部件之间相互连接的总线
找传输信息内容不同,分为
数据总线
传输各部件之的数据信息
位数与机器字长、存储字长有关
双向传输总线
数据总线是物理媒介,数据通路是逻辑路径
地址总线
传输包括主存单元或I/O端口的地址
位数与主存地址空间大小及设备数量有关(与实际存储单元数无关)
单向传输总线
控制总线
一根控制线传递一个信号
包括
CPU送出的控制命令
主存或外设返回的反馈信号
典型的控制信号
时钟
复位
总线请求和总线允许
中断请求和中断应答
存储器读/写
I/O读/写
自主传输确认
控制总线宏观上双向,但控制信息和状态信息是单向传输
主板式总线是一种板级总线,主要连接主机系统印刷电路板的CPU和主存等部件,因此被称为处理器-主存总线,有时也将存储器总线和CPU总线分开,中间通过桥接器连接
底板式总线通常用于将系统的各个I/O功能模块连接到主机上,所以底板式总线属于I/O总线,典型的有PCI总线、AGP总线和PCI-express总线
通信总线
通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线
I/O总线
主要用于连接中低速I/O设备,通过IO接口与系统总线相连
常见USB、PCI总线
按时序控制方式
同步总线
异步总线
总线的组成及性能指标
系统总线的结构
单总线结构
CPU、主存、I/O设备(通过I/O接口)都连接在一组总线上,允许I/O设备之间、I/O设备和CPU之间或I/O设备与主存之间直接交换信息
IO可以统一编址,CPU直接访存
特点
优点:成本低、结构简单、易于接入新的设备
缺点:带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作
双总线结构
双总线结构有两条总线,一条是主存总线,用于CPU、主存和通道之间进行数据传送; 另一条是 I/O总线,用于多个外部设备与通道之间进行数据传送
支持突发传送(猝发)
在一个总线周期内传输存储地址连续的多个数据字的总线传输方式
通道
通道是具有特殊功能的处理器,能对I/O设备进行统一管理。 通道程序放在主存中
特点
优点:将较低速的I/O设备从单总线上分离出来,实现存储器总线和I/O总线分离
缺点:需要增加通道等硬件设备
三总线结构
传统的三总线结构:采用处理器-CACHE总线、主存总线和I/O总线三级总 线结构
特点
优点:提高了I/O的性能,使其快速地响应从而提高系统吞吐量
缺点:系统工作效率低(因为任意时刻只能使用一种总线
总线的性能指标
总线的传输周期(总线周期)
一次总线操作所需的时间(包括申请阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期构成
总线时钟周期(机器的时钟周期
计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制
总线的工作频率
总线上各种操作的频率,为总线周期的倒数
若总线周期=N个时钟周期,则总线的工作频率=时钟频率/N。实际上指一秒内传送几次数据
总线的时钟频率
即机器的时钟频率,为时钟周期的倒数,若时钟周期为T,则时钟频率为1/T。实际上指一秒内有多少个时钟周期
总线宽度
又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位(bit)总线
总线带宽
可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)
总线带宽是指总线本身所能达到的最高传输速率 在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时
总线带宽 = 总线工作频率 × 总线宽度 (bit/s)= 总线工作频率 × (总线宽度/8(B/s)
总线数据传输率的影响因素
与带宽有关
带宽由总线宽度、时钟频率和传输每个数据的时钟周期数决定
与总线裁决方式有关
总线的裁决方式和裁决速度会影响总线事务所用时间
与总线的定时方式有关
同步总线用时钟信号同步,而不像异步总线那样需要握手应答,因而比异步方式快
与信号类型有关
信号线分时复用有时会减慢总线的传输速度,将地址线和数据线分时复用后,写操作不能同时将地址和数据同时传送过去,因而降低了数据传输率
是否采用突发传送
减少了数据传送过程中的地址传送和申请/释放总线的开销,因而降低了数据传输速率
总线复用
总线复用是指一种信号线在不同的时间传输不同的信息。 可以使用较少的线传输更多的信息,从而节省了空间和成本
信号线数
地址总线、数据总线和控制总线3种总线数的总和称为信号线数
常见的总线标准
总线事务和定时
总线事务
通常把总线上一对设备之间的一次信息交换称为总线事务,从请求总线到完成总线使用的操作序列
典型的总线事务
存储器读写
IO读写
中断响应
包括请求操作、裁决操作(决定总线使用权归属)、地址传输、数据传输、总线释放
总线周期
申请分配阶段
由需要使用总线的主模块(或主设备)提出申请,经总线仲裁机构决定将下一传输周期的总线使用权授予某一申请者
也可分为传输请求和总线仲裁
寻址阶段
获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启动参与本次传输的从模块
传输阶段
主模块和从模块进行数据交换(可单向可双向)
结束阶段
主模块的有关信息均从系统总线上撤除,让出总线使用权
总线定时
同步定时方式
系统采用统一的时钟来协调发送方和接收方的定时关系
时钟产生相等的时间间隔,一个总线周期内,可以进行一次数据传送
因为采用统一的时钟,每个部件或设备发送或接收信息都在固定的总线传送周期中,一个总线的传送周期结束,下一个总线传送周期开始
特点
优点 传送速度快,传输率高,总线控制逻辑简单 (硬布线同步较慢,区分
缺点 主从设备强制性同步,不能及时进行有效性检验,可靠性差,且以最慢设备所花时间为标准定时,导致同步的总线不能过长,否则降低传输效率
同步通信适用于总线长度较短及总线所接部件的存取时间比较接近的系统
异步定时方式
在异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依靠传送双方相互制约的“握手”信号来实现定时控制
主设备提出交换信息的“请求”信号,经接口传送到从设备;从设备接到主设备的请求后,通过接口向主设备发出“回答”信号
特点
优点 总线周期长度可变,能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换,自动适应时间的配合
缺点 比同步控制方式稍微复杂,速度比同步慢
根据请求和回答信号的撤销以及是否互锁,分为
不互锁方式
主设备发出“请求”信号后,不必等到接到从设备的“回答”信号,而是经过一段时间,便撤销“请求”信号。而从设备在接到“请求”信号后,发出“回答”信号,并经过一段时间,自动撤销“回答”信号。双方不存在互锁关系
速度最快但可靠性差(一次握手)
半互锁方式
主设备发出“请求”信号后,必须等待接受到从设备的“回答”信号后,才撤销“请求”信号,主设备有互锁的关系。而从设备在接到“请求”信号后,发出“回答”信号,但不必等待获知主设备的“请求”信号已经撤销,而是隔一段时间后自动撤销“回答”信号,从设备不存在互锁关系
两次握手
全互锁方式
主设备发出“请求”信号后,必须等待从设备“回答”后,才撤销“请求”信号;从设备发出“回答”信号,必须等待获知主设备“请求”信号已撤销后,再撤销其“回答”信号。双方都存在互锁关系
三次握手
半同步通信(同步+异步)
统一时钟的基础上,增加一个“等待”响应信号
分离式通信
各模块均有权申请占用总线,采用同步通信方式不等对方回答
错题&易错点
第七章 输入/输出系统
I/O系统的基本概念
输入与输出系统
外部设备
输入与输出设备和通过输入/输出接口才能访问的外部设备
接口
在各个外设与主机之间传输数据时进行各种协调工作的逻辑部件
输入设备
输出设备
外存设备
I/O系统的基本组成
I/O软件
包括驱动程序、用户程序、管理程序、升级补丁等
通常采用I/O指令和通道指令实现CPU和I/O设备的信息交换
I/O指令
CPU指令的一部分
操作码+命令码+设备码
通道指令
通道自身的指令,指出数据的首地址、传送字数、操作命令,通道指令放在主存中
由CPU执行启动I/O设备的指令,由通道代替CPU对I/O设备进行管理
I/O硬件
包括外部设备、设备控制器和接口、I/O总线
I/O控制方式
程序查询方式(软件)
由CPU通过程序不断查询I/O设备是否已做好准备,从而控制I/O设备与主机交换信息
中断方式(软件+硬件)
只在I/O设备准备就绪并向CPU发出中断请求时才予以响应
DMA方式(硬件)
主存和I/O设备之间有一条直接数据通路,当主存和I/O设备交换信息时,无需调用中断服务程序
通道方式(软件+硬件)
在系统中设有通道控制部件,每个通道都挂接若干外设,主机在执行I/O命令时,只需启动有关通道,通道将执行通道程序,从而完成I/O操作
I/O接口(I/O控制器、设备控制器、I/O模块、I/O控制接口)
I/O接口的功能和基本结构
I/O接口的功能
I/O接口(I/O控制器)是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换
主要功能(要解决的问题)
实现主机和外设的通信联络控制,解决主机与外设的时序配合问题
IO接口与主机侧的设备通信包括
对主机通过地址总线送来的信息进行译码,确定是否选中本设备
接受总线传来的控制信息,以确定数据传送的方向
将接口的数据缓冲寄存器或状态寄存器的信息送到系统总线,或接收系统总线传来的数据和命令信息,将其送到接口的数据缓冲寄存器或控制寄存器
IO接口与设备侧的通信包括
将控制寄存器的命令译码,输到外部接口的控制线上
将数据缓冲寄存器的数据发送到外部接口的数据线上
接收外设的数据或状态信息,将其送到接口的数据缓冲寄存器或控制寄存器
进行地址译码和设备选择
实现数据缓冲,消除速度差距
在I/O接口中加入数据缓冲寄存器,以达到主机和外设工作速度的匹配,每个设备的IO都需要缓冲区
信号格式的转换
如电平转换、串并联转换、数模转换
传送控制命令和状态信息
错误和状态检测
具体操作
设备选址
传送命令
传送数据
反映IO设备的工作状态
I/O接口的基本结构
组成部分
内部接口
内部接口与系统总线相连,实质上是与内存、CPU相连。数据的传输方式只能是并行传输
外部接口
外部接口通过接口电缆与外设相连,外部接口的数据传输可能是串行方式,因此I/O接口需具有串/并转换功能
并行传输方式
多用于同步总线
串行传输方式
波特率/比特率
异步串行通信协议(联系计网)
设备选择电路
设备选址
命令寄存器和命令译码器
传送命令
数据缓冲寄存器DBR
传送数据,可以实现格式转换功能
设备状态标记
反映设备状态
各线路
数据线
数据缓冲寄存器与内存或CPU的寄存器的传送
状态寄存器和CPU实现设备状态信息的传送
CPU与控制寄存器实现对外设的控制信息的传送
IO接口中的控制命令字、状态字、中断类型号都经过数据线传送,只有数据线是双向传送
地址线
给出要访问IO接口寄存器的地址
控制线
控制信号,也可能参与地址译码,如用读信号确定是接收寄存器还是发送寄存器
仲裁信号、握手信号、定时信号、命令信息、总线请求和回答
CPU同外设之间的信息传送实质是对接口中的某些寄存器(即端口)进行读或写
IO接口类型
按数据传送方式
并行接口(一个字节或一个字的所有位同时传送)
串行接口(一位一位的传送)
这里的数据传送方式指的是外设和接口一侧的传送方式,而在主机和接口一侧,数据总是并行传送的。接口要完成数据格式转换
按主机访问IO的控制方式分为
程序查询接口
中断接口
DMA接口
按功能选择的灵活性分为
编程接口
不可编程接口
I/O端口及其编址
端口是硬件,是接口电路中可被CPU直接访问的寄存器,配合控制逻辑后称为接口
CPU对数据端口读写、控制端口写、状态端口读(后两者可合并)
编址方式
统一编址(存储器映射方式)
把I/O端口当做存储器的单元进行地址分配,用统一的访存指令就可以访问I//O端口
靠不同的地址码区分内存和I/O设备,I/O地址要求相对固定在地址的某部分
特点
优点
不需要专门的输入/输出指令,可使CPU访问I/O的操作更灵活、更方便,还可使端口有较大的编址空间
缺点
端口占用了存储器地址,使内存容量变小,而且利用存储器编址的I/O设备进行数据输入/输出操作,执行速度较慢
独立编址(I/O映射方式)
端口地址与存储器地址无关,独立编址CPU需要设置专门的输入/输出指令访问端口
靠不同的指令区分内存和IO设备
特点
优点:输入/输出指令与存储器指令有明显区别,程序编制清晰,便于理解
缺点:输出指令少,一般只能对端口进行传送操作,尤其需要CPU提供存储器读/写、I/O设备读/写两组控制信号,增加了控制的复杂性
I/O方式
程序查询方式
信息交换的控制完全由CPU执行程序实现
在接口中设置一个数据缓冲寄存器(数据端口)和设备状态寄存器(状态端口),主机进行操作时,先发出询问信号,读取设备状态并根据设备状态决定操作还是等待
主要过程
特点
优点 接口设计简单、设备量少
缺点 在信息传送过程中要花费很多时间用于查询和等待,而且在一段时间内只能和一台外设交换信息,效率大大降低
CPU有“踏步”现象,CPU与IO串行工作
程序查询方式接口结构
两种程序直接控制方试
无条件传送方式
处理器对外设接口进行周期性的定时访问,直接对IO端口进行数据存取
由于对于高速设备,定时访问的时间间隔短,需要频繁进行IO设备的访问,因而这种方式不宜用于高速设备的IO
条件传送方式/异步传送方式
在查询程序中安排相应的IO指令,由这些指令直接从IO接口中取得外设和接口的状态,根据这些状态来控制外设和主机的信息交换
根据查询方式不同
定时查询
独占查询
对于键盘和鼠标这种随机启动的低速IO设备,由于用户长时间没有输入,而引起查询程序长时间等待,降低处理器的处理效率,因而多采用中断的方式
对于非随机启动的字符设备,如针式打印机这种,可以采用程序查询方式
像磁盘、磁带和光盘存储器等成块传送设备一旦被启动,便一直传送数据,不需要处理器对每个数据传送启动,并且数据的传送时间很短,不适合程序查询方式
程序中断方式
中断的基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现处,继续执行原程序
工作流程
中断请求
中断源向CPU发送中断请求信号
中断响应
涉及中断判优逻辑
中断处理
中断隐指令
中断服务程序
程序中断的作用
实现CPU和I/O设备的并行工作
处理硬件故障和软件错误
实现人机交互,用户干预机器需要用到中断系统
实现多道程序、分时操作,多道程序的切换需要借助于中断系统
实时处理需要借助中断系统实现快速响应
实现应用程序和操作系统(管态程序)的切换,称为软中断
多处理器系统各处理器之间的信息交流和任务切换
中断的完整过程
中断响应
主机发现中断请求,中止现行程序的执行,到调出中断服务程序的过程
由硬件实现
中断响应的时间
断点保存的时间
中断源识别和判优的时间
获得中断服务程序入口地址和初始状态的时间
中断处理
由CPU执行中断服务程序来实现
由软件完成
先行段
保护现场和旧屏蔽字
设置新屏蔽字
开中断
本体段
运行具体的对应中断服务程序
恢复段
关中断
恢复现场和旧屏蔽字
清除中断请求
开中断
返回
中断响应过程
中断请求标记
为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR, 当其状态为“1”时,表示中断源有请求这些触发器可组成中断请求标记寄存器
该寄存器可集中在CPU中,也可分散在各个中断源中
INTR发出可屏蔽中断,NMI发出不可屏蔽中断
对于外中断,CPU在同一时刻(中断周期)即每条指令执行结束前向接口发出中断查询信号
对于执行时间很长的指令,可在执行过程中设置若干个查询断点
中断判优
可用硬件实现也可软件实现
硬件实现
通过硬件排队器实现,排队器可以设置在CPU中,也可以分散在各个中断源中(图为集中)
硬件判优方法
链式查询 (分散在各中断源)
独立请求(集中在CPU)
软件实现
编写查询程序实现,顺序固定
优先级顺序
硬件故障中断属于最高级中断,其次是软件中断
非屏蔽中断>可屏蔽中断
DMA请求>IO设备传送的中断请求
高速设备>低速设备
输入设备>输出设备
实时设备>普通设备
中断响应条件
中断源有中断请求
CPU允许中断(即处于开中断)
一条指令执行完毕且没有更紧迫的任务
中断处理过程
CPU响应中断后,经过由硬件直接实现的中断隐指令后转去执行中断服务程序,中断隐指令并不是指令系统中的真正指令,而是虚拟的说法,本质是硬件自动完成的一系列操作
中断隐指令
关中断
在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去
保存断点
为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来
x86保存PC和PSW到内存栈,MIPS机器没有PSW,只保存PC到特定寄存器
异常的断点可能是当前指令的地址,中断断点是下一条指令的地址
引出中断服务程序
引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器,将初始PSW,送往PSWR
产生入口地址的方法
软件查询法
硬件向量法
通常把中断服务程序的首地址PC和初始PSW称为中断向量IV(Interupt Vector)
中断向量IV存放在中断向量表中,中断向量所在的地址称为向量地址
因为每个中断向量在中断向量表的位置可以用对应表项的号码来标识,有些系统把该编号叫做中断向量,也有的被称为中断类型号
每个中断都有唯一的类型号,每个类型号都对应一个中断服务程序,每个中断服务程序都有入口地址,即中断向量,中断向量的地址是入口地址的地址
由CPU识别中断类型号,硬件产生向量地址,由向量地址从中断向量表中找到中断服务程序的入口地址
中断服务程序
保护现场
程序断点和状态寄存器由中断隐指令保护
这类信息称为断点信息,有硬件完成
指令无法访问PC,因此硬件完成, 若是系统提供了访问PSWR的指令,也可由软件来保存
保存通用寄存器内容由中断服务程序完成
这类信息称为现场信息
存储到特定主存区域
中断服务(设备服务)
恢复现场
通过出栈指令或取数指令把之前保存的信息送回寄存器中
中断返回
通过中断返回指令回到原程序断点处(返回而非转移
多重中断和中断屏蔽的概念
单重中断
执行中断服务程序时不响应新的中断请求
多重中断
又称中断嵌套,执行中断服务程序时可响应新的中断请求
实现多重中断的条件
在中断服务程序中提前设置开中断指令
优先级别高的中断源有权中断优先级别低的中断
为了保证级别低的中断不会干扰级别高的中断,宝成级别高的中断有权中断级别低的中断,可采用中断屏蔽技术
屏蔽技术可以改变处理优先级
响应优先级
CPU响应各中断源请求的优先次序,这种次序往往由硬件确定完成,不易改变
由查询程序或硬件判优排队线路决定的优先权,反映的是多个中断同时请求时哪个被先响应
处理优先级
CPU实际对各中断源请求的处理优先次序,如果不采用屏蔽技术,响应的优先次序就是处理的优先次序
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字
每个中断源对应一个屏蔽字(在处理该中断源的中断服务程序时,屏蔽寄存器中的内容为该中断源对应的屏蔽字)
屏蔽字中‘1’越多,优先级越高。每个屏蔽字中至少有一个’1’(至少要能屏蔽自身的中断)
多重中断和单重中断的对比
保存断点信息时包括PSW状态信息
线保护现场再保护屏蔽字
中断隐指令全部由硬件实现,中断服务程序由软件实现
多重中断要在程序运行期间保持开中断配合屏蔽字,实现允许高优先级的中断请求
DMA方式
基本概念
DMA方式是一种完全由硬件进行组信息传送的控制方式,具有程序中断方式的优点,主存和DMA接口之间有一条直接数据通路。由于DMA方式传送数据不需要经过CPU,因此不必中断现行程序,I/O与主机并行工作,程序和传送并行工作
因此也不必进行保护恢复现场等操作
在DMA方式中,当I/O设备需要进行数据传送时,通过DMA控制器(DMA接口)向CPU提出DMA传送请求,CPU响应之后将让出系统总线,由DMA控制器接管总线进行数据传送
DMA方式的主要特点
使主存与CPU的固定联系消失,主存可既被CPU访问,又可被外设访问
在数据块传送时,主存地址的确定、传送数据的计数都由硬件电路直接实现
主存中开辟专用缓冲区,及时供给和接收外设的数据
高速缓存是高速设备暂存低速设备的数据备份来弥补速度差异
缓冲区是存放低速向高速传递的数据
DMA传送速度快,CPU和外设并行工作,提高系统效率
DMA在传送开始先要通过程序进行预处理,结束后要通过中断方式进行后处理
DMA控制器的组成
DMA控制器的主要功能
传送前
step1 接收外设发出的DMA请求,向CPU发出总线请求
step2 CPU响应此总线请求,发出总线响应信号,DMA接管总线控制权进入DMA操作周期
传送中
step3 确定传送数据的主存单元地址及长度,并能自动修改主存地址技术和传送长度技术
step4 规定数据在主存和外设间的传送方向,发送读写等控制信号,执行数据传送操作
传送后
step5 向CPU报告DMA操作结束
注 DMA控制器必须具有控制系统总线的能力
在DMA传送过程中,DMA控制器将接管CPU的地址总线、数据总线和控制总线,CPU的主存控制信号被禁止使用。而当DMA传送结束后,将恢复CPU的一切权利并开始执行其操作
组成部分
主存地址寄存器
存放要交换数据的主存地址
传送长度计数器
记录传送数据的长度,技术溢出时表明数据传送完毕,自动发出中断请求信号
数据缓冲计数器
暂存每次传送的数据
DMA请求触发器
每当IO设备准备好数据后给出一个控制信号,使DMA请求触发器置位(写1)
“控制/状态”逻辑
由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步
中断机构
当一个数据块传送完毕后触发中断机构,向CPU提出中断请求
DMA传送过程
传送过程(以数据输入为例)
结束处理
检验送入主存的数据是否正确
测试过程中是否出错
错则转入诊断程序
决定是否使用DMA继续传送其他数据块
为了避免DMA和CPU争用主存,有效的分时使用主存,DMA与主存交换数据时有三种方式
停止CPU访问主存
当外设要求传送一批数据时,由DMA接口向CPU发一个停止信号,要求CPU放弃地址线、数据线和有关控制线的使用权,脱离总线停止访问主存,直到DMA传送一块数据结束后DMA接口通知CPU可以使用主存,将总线控制权交给CPU
CPU处于不工作或者保持原状态
特点
优点 控制简单
缺点 CPU对主存的利用率低
周期挪用(周期窃取)
每当IO设备发出DMA请求时,IO设备便挪用或窃取总线占用权一个或几个主存周期,而DMA不请求时,CPU仍继续访问主存
IO设备请求DMA传送时可能的三种情况和处理
CPU此时不需要访问主存
此时访存不冲突
CPU正在访问主存
等待CPU存取周期结束后让出总线控制权
CPU与DMA同时请求访存(访问冲突)
IO访存优先于CPU访存
避免IO未能及时访存导致的数据丢失
IO窃取一、二个存取周期,使CPU延缓对应存取周期后再访问主存
IO设备每挪用一个存取周期都要申请总线控制权、建立总线控制权和归还总线控制权,是一种单字传送方式
因此传送一个字对主存占用一个主存周期,但是对DMA接口可能需要多个,因此周期挪用的方式适用于IO设备的读写周期大于主存周期的情况
特点
优点 既实现了IO传送,又能发挥CPU和主存的效率
缺点 适用于IO读写周期大于主存周期的情况
DMA与CPU交替访问
将一个存取周期分为两个阶段,分别供CPU和DMA使用主存,每个存储周期二者都能访存
适用于CPU的工作周期比主存存取周期长的情况
CPU和DMA接口各自有独立的访存地址寄存器、数据寄存器和读写信号
特点
优点 不需要总线使用权的申请、建立和归还过程
缺点 逻辑硬件更为复杂
DMA方式和中断对比
DMA不需要保护现场
中断不适应高速设备,请求过于频繁
DMA只能传送连续的数据块,因为只指出了起始地址和个数,一次只能传送一个连续的数据块,不连续则要分多次
错题&易错点
操作系统
第一章 计算机系统概述
操作系统的基本概念
操作系统的发展历程
程序运行环境
CPU运行模式
内核模式
用户模式
中断和异常的处理
程序调用
程序的链接和装入
程序运行时内存映像和地址空间
操作系统结构
分层
模块化
宏内核
微内核
外核
操作系统引导
虚拟机
第二章 进程与线程
进程与线程
进程与线程的基本概念
进程/线程的状态与转换
线程的实现
内核支持的线程
线程库支持的线程
进程与线程的组织与控制
进程间通信
共享内存
消息传递
管道
CPU调度与上下文切换
调度的基本概念
调度的目标
调度的实现
调度器/调度程序
调度的时机与调度方式(抢占式/非抢占式)
闲逛进程
内核级线程与用户级线程调度
典型的调度算法
先来先服务调度算法
短作业(短进程、短线程)优先调度算法
时间片轮转调度算法
优先级调度算法
高响应比优先调度算法
多级队列调度算法
多级反馈队列调度算法
上下文及其切换机制
同步与互斥
同步与互斥的基本概念
基本的实现方法
软件方法
硬件方法
锁
信号量
条件变量
经典同步问题
生产者-消费者问题
读者-写者问题
哲学家进餐问题
死锁
死锁的基本概念
死锁预防
死锁避免
死锁的检测和解除
第三章 内存管理
内存管理基础
内存管理概念
逻辑地址与物理地址空间
地址变换
内存共享
内存保护
内存分配与回收
连续分配管理方式
页式管理
段式管理
段页式管理
虚拟内存管理
虚拟内存基本概念
请求页式管理
页框分配
页置换算法
内存映射文件
虚拟存储器性能的影响因素及改进方式
第四章 文件管理
文件
文件的基本概念
文件元数据和索引节点(inode)
文件的操作
建立
删除
打开
关闭
读
写
文件的保护
文件的逻辑结构
文件的物理结构
目录
目录的基本概念
树形目录
目录的操作
硬链接和软链接
文件系统
文件系统的全局结构
文件系统在外存中的结构
文件系统在内存中的结构
外存空闲空间管理办法
虚拟文件系统
文件系统挂载
输入/输出(I/O)管理
I/O管理基础
设备
设备的基本概念
设备的分类
I/O接口
I/O控制方式
轮询方式
中断方式
DMA方式
I/O软件层次结构
中断处理程序
驱动程序
设备独立性软件
用户层I/O软件
输入/输出应用程序接口
字符设备接口
块设备接口
网络设备接口
阻塞/非阻塞I/O
设备独立软件
缓冲区管理
设备分配与回收
假脱机技术(SPOOLing)
设备驱动程序接口
外存管理
磁盘
磁盘结构
格式化
分区
磁盘调度方法
固态硬盘
读写性能特效
磨损均衡