导图社区 计算机组成原理-王道考研
分享王道考研的计算机组成原理思维导图知识汇总,主要内容有第一章计算机系统概述、第二章数据的表示和运算、第三章存储系统、第四章指令系统、第五章中央处理器等。
编辑于2022-10-08 16:09:12 江苏省王道考研 计算机组成原理
第一章 计算机系统概述
计算机的发展
什么是计算机系统
计算机系统=软件+硬件
软件
系统软件
用来管理整个计算机系统
Eg:操作系统、数据库管理系统(DBMS)、标准程序库、网络软件、语言处理程序、服务程序
应用软件
按任务需要编制成的各种程序
Eg:抖音、王者荣耀、迅雷、美图秀秀…
硬件的发展
摩尔定律
揭示了信息进步的速度
集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将增加一倍
软件的发展
机器语言
汇编语言
高级语言
目前的发展趋势
“两极”分化
一极是微型计算机向更微型化、网络化、高性能、多用途方向发展;
另一极是巨型机向更巨型化、超高速、并行处理、智能化方向发展。
计算机硬件的基本组成
早期冯诺依曼机
五大部分
输入设备
将信息转换成机器能识别的形式
输出设备
将结果转换成人们熟悉的形式
主存储器
存放数据和程序
运算器
算术运算,逻辑运算
控制器
指挥各部件,使程序运行
主机
首次提出“存储程序”概念
冯诺依曼计算机的特点
1. 计算机由五大部件组成
2. 指令和数据以同等地位存于存储器,可按地址寻访
3. 指令和数据用二进制表示
4. 指令由操作码和地址码组成
5. 存储程序
6.以运算器为中心
输入/输出设备与存储器的数据传送通过运算器完成
现代计算机
以存储器为中心
CPU=运算器+控制器
各个硬件的工作原理
主存储器(主存)
存储体
概念
存储单元:每个存储单元存放一串二进制代码
存储字(word):存储单元中二进制代码的组合
存储字长:存储单元中二进制代码的位数
存储元:即存储二进制的电子元件,每个存储元可存1bit
存储地址寄存器(MAR)
地址寄存器,用于指明要读/写哪个存储单元
MAR位数反应存储单元的个数
存储数据寄存器(MDR)
数据存储器,用于暂存要读/写的数据
MDR位数=存储字长
运算器
用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)
ACC:累加器,用于存放操作数,或运算结果
MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果
X:通用的操作数寄存器,用于存放操作数
ALU:算术逻辑单元,通过内部复杂的电路实现算术运算、逻辑运算
控制器
CU:控制单元,分析指令,给出控制信号
IR:指令寄存器,存放当前执行的指令
PC:程序计数器,存放下一条指令地址,有自动加1功能
工作过程
(寄存器)表示寄存器里面的内容
初始:指令、数据存入主存,PC指向第一条指令
从主存中取指令放入IR、PC自动加1、CU分析指令、CU指挥其他部件执行指令
计算机的层次结构
五层
M4 虚拟机器(高级语言机器)
用编译程序翻译成汇编语言程序
M3 虚拟机器(汇编语言机器)
用汇编程序翻译成机器语言程序
M2 虚拟机器(操作系统机器)
向上提供”广义指令“
系统调用
M1 传统机器(用机器语言的机器)
执行二进制机器指令
M0 微程序及其(微指令系统)
由硬件直接执行微指令
下层是上层的基础,上层是下层的扩展
软件
硬件
三个级别的语言
机器语言:二进制代码
汇编语言:助记符
高级语言:Java,C/C++
编译程序———将高级语言一次全部翻译为汇编语言,或直接翻译为机器语言
如:C、C++
汇编程序——将汇编语言翻译成机器语言
解释程序——高级语言翻译为机器语言(翻译一句执行一句)
如:JavaScript、Python、Shell
计算机的性能指标
存储器的性能指标
总容量=存储单元个数×存储字长 bit
1Byte = 8bit
MAR的位数反映存储单元数量
MDR反映每个存储单元大小=存储字长
CPU的性能指标
CPU主频
CPU内数字脉冲信号振荡的频率
CPU时钟周期
CPU中最小的时间单位,每个动作至少要1个时钟周期
CPU主频(时钟频率)= 1/CPU时钟周期
CPI
执行一条指令所需的时钟周期数
执行一条指令的耗时=CPI×CPU时钟周期
CPU执行时间(整个程序的耗时)=CPU时钟周期数/主频=(指令条数×CPI)/主频
IPS
每秒执行多少指令
IPS=主频/平均CPI
FLOPS
每秒执行多少次浮点运算
系统整体的性能指标
数据通路带宽
数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)
吞吐量
指系统在单位时间内处理请求的数量
响应时间
指从用户像计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间
基准程序
基准程序是用来测量计算机处理速度的一种实用程序
一些问题
主频高的CPU一定比主频低的CPU快吗?
不一定
若A,B两个CPU的平均CPI相同,那么A一定更快吗?
不一定
基准程序执行得越快说明机器性能越好吗?
不一定
第二章 数据的表示和运算
数制与编码
进位计数制
常见进制
基数,每个数码位所用到的不同符号的个数,r进制的基数为r,逢r进1
十进制(D),二进制(B),八进制,十六进制(H,0x)
其他进制转为十进制
r进制数的数值=各数码位与位权的乘积之和
二进制,八进制,十六进制之间的相互转换
每三个二进制对应一个八进制位
每四个二进制位对应一个十六进制位
注意“补位”
十进制转为其他进制
整数部分
除基取余法:先取得的“余”是整数的低位
小数部分
乘基取整法:先取得的“整”是小数的高位
真值和机器数
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式,正负号需要被“数字化”
BCD码
8421码
每4个二进制位对应一个十进制位(有6个冗余状态)
8、4、2、1分别对应每一位的权值
0000~1001分别对应0~9,进行加法后若超出该范围,则需+0110进行修正(强制向高位进1)
余3码
8421码+(0011)
2421码
权值是2、4、2、1
2421码规定 0~4的第一位是0,5~9的第一位是1
无符号整数的表示和运算
无符号整数
全部二进制为都是数值位,没有符号位,第i位的位权是
n bit 无符号整数表示范围0~-1,超出即溢出,意味着该计算机无法一次处理这么多
可以表示的最小的数 全0,可以表示的最大的数 全1
计算机硬件如何做无符号整数的加法
从最低位开始,按位相加,并往更高位进位
计算机硬件如何做无符号整数的减法
“被减数”不变,“减数”全部位按位取反,末位+1,减法变加法
从最低位开始,按位相加,并往更高位进位
带符号整数的表示和运算
带符号整数的表示
原码
符号位“0/1”对应“正/负”,剩余的数值位表示真值的绝对值
若机器字长n+1位,带符号整数的原码表示范围:-(-1)≤x≤-1
真值0有两种表现形式
+0,[+0]=0,0000000;
-0,[-0]=1,0000000;
原码的缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理,费钱!贵!
补码
正数:补码和原码,反码一致
负数:反码的末位+1
更快速的方法(手算)
正数:不变
负数:从右往左找到第一个1,这个1左边的所有“数值位”按位取反
逆向转换,方法一样
补码的数值位不能解读为“位权”
反码
正数:反码和原码,补码一致
负数:原码的符号位不变,数值位取反
补码的加法运算
从最低位开始,按位相加(符号位参与运算)并往更高位进位,超出的部分舍弃
补码的减法运算
“被减数”不变,“减数”全部位按位取反、末位+1,减法变加法
从最低位开始,按位相加,并往最高位进位
原/反/补码的特性对比
常见考点
两个数A和B进行某种运算后,是否发生溢出?——手算做题可以带入十进制验证,是否超出合法范围
移码
补码的基础上,符号位取反
注意:移码只能用于表示整数
真值0只有一种表示形式 [0]=10000000
若机器字长n+1位,移码整数的表示范围:-2≤x≤2-1(与补码相同)
真值增大,移码增大
移码表示的整数很方便用于硬件串路比较大小
移码常用于浮点数阶码
定点小数的表示和运算
定点数
定点整数:带符号整数
定点小数
小数不可以用移码表示
表示方法,运算方法,各种码制的转换方式与整数相同
运算方法和运算电路
算数逻辑单元
ALU
实现算数运算、逻辑运算、辅助功能(移位、求补等)
基本结构:输入、输出、控制
电路基础知识
逻辑运算
与、或、非
与非、或非、异或、同或
门电路
最基础的逻辑元件,用于实现逻辑运算
逻辑表达式就是电路的数学化表示。根据逻辑运算的规则对逻辑表达式进行优化,也就是在优化电路
加法器的实现
一位全加器的设计
本位和
本位向高位的进位
串行加法器
一位全加器+进位触发器,只能一位一位地加
串行进位的并行加法器
多个全加器简单串联,可多位同时加
计算速度取决于进位产生和传递的速度
回忆:各种门电路的图形,全加器的图形和输入输出信号
加法器、ALU的改进
串行进位的并行加法器
把n个全加器串接起来,就可进行两个n位数的相加。
如何更快的产生进位?
结论:第 i 位向更高位的进位 Ci可根据 被加数、加数的第 1~i 位, 再结合C0即可确定
并行加法器的优化
各级进位信号同时形成,又称为先行进位、同时进位
标志位的生成
OF(溢出标志)
有符号数的加减运算是否发生了溢出,OF=1时,说明发生了溢出
硬件的计算方法:OF=最高位产生的进位⊕次高位产生的进位
注意:OF位对无符号数的加减法无意义
SF(符号标志)
有符号数加减运算结果的正负性,SF=0表示运算结果为正数,SF=1表示运算结果为负数
硬件的计算方法:SF=最高位的本位和
注意:SF位对无符号数的加减法无意义
ZF(零标志)
表示运算结果是否为0.ZF=1表示运算结果为0,ZF=0表示运算结果非0
硬件的计算方法:两个数的运算结果为n bit,只有n bit全为0时,ZF=1
CF(进位/借位标志)
表示无符号数的加减法是否发生了进位或借位。当CF=1时,说明无符号数加减运算发生了进位或借位,也即发生了溢出
硬件的计算方法:CF=最高位产生的进位⊕sub
sub=1表示减法
sub=0表示加法
注意:CF位对有符号数的加减法无意义
仅对无符号数加减法有意义
仅对有符号数加减法有意义
定点数移位运算
通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权
小数点后移1位相当于×10
小数点前移1位相当于÷10
算术移位
原码
符号位保持不变,仅对数值位进行移位
右移:高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位≠0,则会丢失精度
左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位≠0,则会出现严重误差
反码
正数:与原码相同
负数:
右移:高位补1,低位舍弃
左移:低位补1,高位舍弃
补码
正数:与原码相同
负数:
负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码
右移:高位补1,低位舍弃
左移:低位补0,高位舍弃
逻辑移位
右移:高位补0,低位舍弃
左移:低位补0,高位舍弃
循环移位
不带进位位
用移出的位补上空缺
移出的位放到进位位
带进位位的循环左移
移出的位放到进位位
原进位位补上空缺
由于原、反、补码位数有限,因此某些时候算术移位不能精确等效乘法、除法
定点数的乘、除法运算
乘法运算
乘法运算的实现思想
原码的一位乘法
符号位单独处理:符号位=两个数符号位的异或
数值位取绝对值进行乘法计算
实现方法:先加法再移位,重复n次
机器实现原理
在正式进行乘法之前,ACC置0
判断MQ中,当前参与乘法的一个位
当前位=1,则ACC加上被乘数
当前位=0,则ACC加上0
算完一位后,将ACC和MQ逻辑右移一位
逻辑右移,高位补0
ACC的低位移到MQ
MQ原来的最低位用不到了,直接丢弃
重复第二步,直到MQ运算到乘数的符号位,乘数的符号位不参与计算
修改符号位为原两个符号位的异或
手算模拟
补码的一位乘法
补码乘法中使用“双符号位补码”
进行n轮加法、移位,最后再多来一次加法
在MQ增加了一位辅助位,根据MQ中的最低位和辅助位来确定加什么
手算模拟
除法运算
除法运算的思想
规律:忽略小数点,每确定一位商,进行一次减法,得到4位余数,在余数末尾补0,再确定下一位商。确定5位商即可停止(机器字长为5位)
原码除法:恢复余数法
符号位单独处理:符号位=两个数符号位的异或
数值位取绝对值进行乘法计算
实现方法:上商0/1,得到余数,余数末尾补0
机器实现原理
计算机很傻,会默认上商1,如果搞错了再改上商0,并“恢复余数”
首先上商1,让ACC与负除数的补码相加,如果此时符号位为1,说明搞错了,恢复余数
将ACC和MQ整体逻辑左移,ACC高位丢弃,MQ低位补0
重复上述步骤,直到MQ被商填满
余数是ACC剩下的数乘2
手算模拟
左移n次,上商n+1次,最后一次上商余数不左移
原码除法:加减交替法(不恢复余数法)
若余数为负,可直接商0,并让余数左移1位再加上|除数|,得到下一个新余数
若余数位正,则商1,让余数左移1位再减去|除数|,得到下一个新余数
手算模拟
余数的正负性与商相同
最后一步时若余数为负,需商0,并+[|y|]得到正确余数
加/减n+1次,每次加减确定一位商;左移n次(最后一次加减完不移位)最终可能还要再多一次加
补码除法:加减交替法
符号位参与运算
被除数/余数、除数采用双符号位
运算过程
最开始
被除数和除数同号,则被除数减去除数;
异号则被除数加上余数
余数和除数同号,商1,余数左移一位减去除数;
余数和除数异号,商0;余数左移一位加上除数;
重复n次
末位商恒置1
精度误差不超过2
浮点数的表示与运算
浮点数的表示
浮点数的作用和基本原理
阶码E反映浮点数的表示范围及小数点的实际位置
尾数M的数值部分的位数n反映浮点数的精度
阶码:常用补码或移码表示的定点整数
尾数:常用原码或补码表示的定点小数
浮点数规格化
规格化浮点数:规定尾数的最高数值位必须是一个有效值 。
左规:当浮点数运算的结果为非规格化时要进行规格化处理,
右规:当浮点数运算的结果尾数出现溢出(双符号为01或10)时,
注:采用“双符号位” ,当溢出发生时,可以挽救。更高的符号位是正确的符号位
规格化的原码尾数,最高数值位一定是1
规格化的补码尾数,符号位与最高数值位一定相反
浮点数的表示范围
IEEE754标准
阶码用移码表示
移码=真值+偏置值
令偏置值=127D,即2-1
浮点数的加减运算
加减运算
对阶
使两个数的阶码相等,小阶向大阶看齐,尾数每左移一位,阶码加1
求阶差
对阶
尾数加减
通常用双符号位,可以拯救溢出
规格化
左归
尾数最高数值位为无效位时,尾数左移,阶码减1
右归
尾数双符号位不同时,尾数右移,阶码加1
舍入
0舍1入法
在尾数右移时,被移去的最高数值位为0,则舍去
被移去的最高数值位为1,则在尾数的末位加1,这样做可能会使尾数又溢出,此时需再做一次右规
恒置1法
尾数右移时,不论丢掉的最高数值位是1还是0,都使右移的尾数末位横置1,这种方法同样有使尾数变大和变小的两种可能
溢出判断
阶码上溢
抛出异常(中断)
阶码下溢
按机器0处理
采用双符号位,可拯救尾数溢出
强制类型转换
char → int → long → double
float → double
int → float:可能会损失精度(float尾数的数值位有1+23位)
float → int:t可能会溢出,也可能会损失精度(如小数转整数)
精度从小到大,转换过程中没有损失
其余内容
C语言里的强制类型转换
C语言里的定点整数是用“补码”存储的
无符号数与有符号数:不改变数据内容,改变解释方式
长整数变短整数:高位截断,保留低位
短整数变长整数:符号扩展
数据的存储与排列
大小端模式
大端方式:高地址存最高有效字节,低地址存最低有效字节
小段方式:高地址存最低有效字节,低地址存最高有效字节
边界对齐
现代计算机通常是按字节编址,即每个字节对应一个地址
通常也支持按字,按半字,按字节寻址
第三章 存储系统
存储系统基本概念
存储器的层次结构
主存——辅存:实现了虚拟存储系统,解决了主存容量不够的问题
Cache——主存:解决了主存与CPU速度不匹配的问题
存储器的分类
按层次
高速缓存(Cache)
主存储器(主存,内存)
辅助存储器(辅存,外存)
可直接被CPU读写
按存储介质
半导体存储器(Cache,主存)
磁表面存储器(磁带,磁盘)
光存储器(光盘)
按存取方式
随机存取存储器(RAM)
顺序存取存储器(SAM)
直接存取存储器(DAM)
相联存储器(CAM)
串行访问存储器:读写某个存储单元所需时间与存储单元的物理位置有关
按信息的可更改性
读写存储器(磁盘,内存,Cache)
只读存储器(CD-ROM,BIOS)
按信息的可保存性
易失性存储器(主存,Cache)
非易失性存储器(磁盘,光盘)
按读出后存储信息被破坏
破坏性读出(DRAM芯片)
非破坏性读出(SRAM芯片)
存储器的性能指标
存储容量:存储字数×存储字长
MDR位数反映存储字长
单位成本:每位价格=总成本/总容量
存储速度:数据传输率(主存带宽)=数据的宽度/存储周期
数据的宽度即存储字长
存储周期
存储周期=存取时间+恢复时间
主存储器的基本组成
半导体元件的原理
MOS管,作为通电“开关”
电容,存储电荷(即存储二进制0/1)
存储芯片的基本原理
译码驱动电路
译码器将地址信号转化为字选通线的高低电平
存储矩阵(存储体)
由多个存储单元构成,每个存储单元又由多个存储元构成
读写电路
每次读/写一个存储字
由多个存储单元构成,每个存储单元又由多个存储元构成
地址线,数据线,片选线,读写控制线;每根线都会对应一个金属引脚
如何实现不同的寻址方式
现代计算机通常按字节编址(每个字节),即每个字节对应一个地址
按字节寻址、按字寻址、按半字寻址、按双字寻址
SRAM和DRAM
存储元件不同导致的特性差异
DRAM的刷新
多久刷新一次?
2ms
每次刷新多少存储单元?
以行为单位,每次刷新一行存储单元
为什么要用行列地址?
减少选通线的数量
如何刷新?
有硬件支持,读出一行的信息后重新写入,占用1个读/写周期
在什么时刻刷新?
假设DRAM内部结构排列成128×128的形式,读/写周期0.5us
分散刷新
集中刷新
死区
异步刷新
死时间
可在译码阶段进行刷新
“刷新”由存储器独立完成,不需要CPU控制
DRAM的地址线复用技术
拆分为行列地址(DRAM行、列地址等长)
导致地址线,地址引脚减半
现在的主存通常采用SDRAM芯片
ROM
MROM
掩模式只读存储器
写入信息后,任何人不可重写(只能读出)
可靠性高,灵活性差,生产周期长,只适合批量定制
PROM
可编程只读存储器
用专门的设备写入信息一次后就不可更改
EPROM
可擦除可编程只读存储器
修改次数有限,写入时间很长
用某种方法擦除数据,可进行多次重写
UVEPROM
用紫外线照射8-20分钟,擦除所有信息
EEPROM
可用“电擦除”的方式,擦除特定的字
闪存
Flash Memory(U盘,SD卡)
断电后也能保存信息,可进行多次快速擦除重写
由于闪存需要先擦除再写入,因此闪存写的速度要比读速度更慢
每个存储元只需单个MOS管,位密度比RAM高
SSD
固态硬盘
可进行多次快速擦除重写
SSD速度快,功耗低,价格高
个人电脑常用SSD取代传统的机械硬盘
手机辅存也使用Flash芯片,但相比SSD使用的芯片集成度高,功耗低,价格贵
计算机内的重要的ROM
BIOS芯片(ROM),存储了“自举装入芯片”,负责引导装入操作系统(开机)
逻辑上,主存由RAM+ROM组成,且两者统一编址
一些考点
很多ROM是可以写的
RAM芯片是易失性的,ROM芯片是非易失性的
很多ROM也具有“随机存取”的特性
主存储器与CPU的连接
存储器芯片的基本结构
译码驱动电路
存储矩阵
读写电路
地址线,数据线,片选线,读写控制线
单块存储芯片与CPU的连接
多块存储芯片与CPU的连接
位扩展法(数据总线宽度>存储芯片字长)
字扩展法(扩展主存字数)
线选法
片选法
字位扩展法
关于译码器知识的补充
提升主存速度
存取周期
可以连续读/写的最短时间间隔
DRAM芯片的恢复时间比较长,有可能是存取时间的几倍
SRAM的恢复时间较短
双口RAM
作用:优化多核CPU访问一根内存条的速度
需要有两组完全独立的数据线,地址线,控制线。CPU,RAM中也要有更复杂的控制电路。
两个端口对同一主存操作有以下4种情况
1.两个端口同时对不同的地址单元存取数据
2.两个端口同时对同一地址单元读出数据
3.两个端口同时对同一地址单元写入数据
写入错误
4.两个端口同时对同一地址单元,一个写入数据,一个读出数据
读出错误
解决方法:置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问。
对比操作系统“读者-写者问题”
多模块存储器
单体多字存储器
多体并行存储器
假设每个存储体存取周期为T,存取时间为r,假设T=4r
高位交叉编址
用更高的几位判断进入哪块存储体
连续取n个存储字,耗时nT
低位交叉编址
用更低的几位判断进入哪块存储体
连续取n个存储字,耗时T+(n-1)r
应该取几个“体”?
采用“流水线”的方式并行存取(宏观上并行,微观上串行)
存取周期为T,存取时间为r,为了使流水线不间断,应保证模块数m≥T/r
存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数m≥T/r
给定一个地址x,如何确定它属于第几个存储体?
根据体号判断
用x对m取余
每个模块都有相同的容量和存取速度
各模块都有独立的读写控制电路,地址寄存器和数据寄存器,他们既能并行工作,又能交叉工作。
外部存储器
计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器
磁盘存储器
Key:磁盘存取时间的计算
优点
存储容量大,位价格低
记录介质可以重复使用
记录信息可以长期保存而不丢失,甚至可以脱机存档
非破坏性读出,读出时不需要再生
缺点
存取速度慢
机械结构复杂
对工作环境要求较高
组成
存储区域
一块硬盘含有若干个记录面,每个记录面划分为若干条磁道,而每条磁道又划分为若干个扇区,扇区(也称块)是磁盘读写的最小单位,也就是说磁盘按块存取。
磁头数
即记录面数,表示硬盘总共有多少个磁头,磁头用于读取/写入盘片上记录面的信息,一个记录面对应一个磁头。
柱面数
表示硬盘每一面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面。
扇区数
表示一条磁道上有多少个扇区
磁盘存储器
磁盘驱动器
核心部件是磁头组件和盘片组件
磁盘控制器
是硬盘存储器和主机的接口
性能指标
磁盘的容量
一个磁盘所能存储的字节总数
非格式化容量
磁记录表面可以利用的磁化单元总数
格式化容量
按照某种特定的记录格式所能存储信息的总量
记录密度
盘片单位面积上记录的二进制的信息量
道密度
沿磁盘半径方向单位长度上的磁道数
位密度
磁道单位长度上能记录的二进制代码位数
面密度
位密度和道密度的乘积
磁盘所有磁道记录的信息量一定是相等的,并不是圆越大信息越多,故每个磁道的位密度都不同
越内侧的磁道位密度越大
平均存取时间
寻道时间(磁盘移动到目的磁道)+ 旋转延迟时间(磁头定位到所在扇区)+ 传输时间(传输数据所花时间)
有的题还会加磁盘控制器延迟
数据传输率
单位时间内向主机传送数据的字节数
设磁盘转数为r(转/秒),每条磁道容量为N个字节,则数据传输率为D=Nr
磁盘地址
驱动器号+柱面(磁道)号+盘面号+扇区号
磁盘的工作过程
寻址
读盘
写盘
磁盘阵列
RAID0
逻辑上相邻的两个扇区在物理上存到两个磁盘
无冗余和无校验的磁盘阵列
没有容错能力
RAID1
镜像磁盘阵列
存两份数据
有容错能力,但容量减少一半
RAID2
采用纠错码的海明码的磁盘阵列
逻辑上连续的几个bit物理上分散存储在各个盘中
RAID3
RAID4
RAID5
固态硬盘(SSD)
原理
基于闪存技术Flash Memory,属于电可擦除ROM,即EEPROM
组成
闪存翻译层
负责翻译逻辑块号,找到对应页(Page)
存储介质:多个闪存芯片(Flash Chip)
每个芯片包含多个块(block)
每个块包含多个页(page)
读写性能特性
以页(page)为单位读/写
相当于磁盘的“扇区”
以块(block)为单位“擦除”,擦干净的块,其中的每页都可以写一次,读无限次
支持随机访问,系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
读快,写慢。要写的也如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
与机械硬盘相比的特点
SSD读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘通过移动磁臂旋转磁盘控制读写位置,有寻道时间和旋转延迟
SSD安静无噪音,耐摔抗震,能耗低,造假更贵
SSD的一个“块”被擦除次数过多(重复读同一个块)可能会坏掉,而机械硬盘的扇区不会因为写的次数太多而坏掉
磨损均衡技术
思想:将“擦除”平均分布在各个块上,以提升使用寿命
动态磨损均衡
写入数据时,优先选择累计擦除次数少的新闪存块
静态磨损次数
SSD监测并自动进行数据分配,迁移,让老旧的闪存快承担以读写为主的储存任务,让较新的闪存块承担更多的写任务
Cache
基本概念和原理
存储系统存在的问题
双端口RAM、多模块存储器提高存储器的工作速度
优化后速度与CPU差距依然很大
所以就有了Cache(高速缓冲存储器)
Cache的工作原理
实际上,Cache 被集成在CPU内部,Cache用SRAM实现,速度快,成本高
局部性原理
空间局部性
在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的
Eg:数组元素、顺序执行的指令代码
时间局部性
在最近的未来要用到的信息,很可能是现在正在使用的信息
Eg:循环结构的指令代码
基于局部性原理,不难想到,可以把CPU目前访问的地址“周围”的部分数据放到Cache中
性能分析
其他概念
主存与Cache之间以“块”为单位进行数据交换
主存的“块”又叫“页/页框/页面”;Cache的“块”又叫“行”
主存地址可拆分为(主存块号,块内地址)的形式
有待解决的问题
如何区分 Cache 与 主存 的数据块对应关系? ——Cache和主存的映射方式
Cache 很小,主存很大。如果Cache满了怎么办? ——替换算法
CPU修改了Cache中的数据副本,如何确保主存中数据母本的一致性? ——Cache写策略
Cache和主存的映射方式
Cache中存储的信息
有效位(0/1)+标记+整块数据
其中“标记"用于指明对应的内存块,不同映射方式,“标记"的位数不同
全相联映射
主存块可以放在Cache的任意位置
主存地址结构:标记(整个主存块号)+块内地址
优点:Cache存储空间利用充分,命中率高
直接映射
每个主存块只能放到一个特定的位置:Cahce块号=主存块号%Cache总块数
主存地址结构:标记(主存块号前几位)+行号(主存块号末几位)+块内地址
优点:对于任意一个地址,只需对比一个“标记”,速度最快
若Cache总块数=2,则主存块号末尾n位直接反映它在Cache中的位置
组相联映射
Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置,组号=主存块号%分组数
主存地址结构:标记(主存块号前几位)+组号(主存块号末几位)+块内地址
优点:另外两种方式的折中,综合效果最好
n路组相联映射——n个Cache行为一组
Cache替换
替换情况
全相联映射
Cache完全满了才需要替换,需要在全局选择替换那一块
直接映射
如果对应位置非空,则毫无选择地直接替换
组相联映射
分组内满了才需要替换,需要在分组内选择替换哪一块
Cache替换算法
抖动现象:频繁的换入换出现象(刚被替换的块很快又被调入)
随机算法(RAND)
若Cache已满,则随机选择一块替换
实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定
先进先出算法(FIFO)
若Cache已满,则替换最先被调入Cache的块
实现简单,最开始按照#0#1#2#3放入Cache,之后轮流替换#0#1#2#3
FIFO依然没考虑局部性原理,最先被调入Cache的块也可能是被频繁访问的
近期最少使用(LRU)
为每一个Cache块设置一个“计数器”,用于记录每个Cache块已经有多久没有被访问了。当Cache满后替换“计数器”最大的
计数器变化逻辑
命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变
未命中且还有空闲行时,新装入的行的计数器设为0,其余非空闲行全加1
未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1
LRU基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。 LRU算法的实际运行效果优秀,Cache命中率高。
若被频繁访问的主存块数量>Cache行的数量,则有可能发生“抖动”
最近不经常使用(LFU)
为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换“计数器”最小的
新调入的块计数器=0,之后每访问一次计数器+1.需要替换时,选择计数器最小的那行
若有多个计数器最小的行,可按行号递增或FIFO策略进行选择
曾经被经常访问的主存块在未来不一定会用到,并没有很好的遵循局部性原理,因此实际运行效果不如LRU
Cache写策略
写命中
全写法
当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲
“写缓冲”:SRAM实现的FIFO队列
访存次数增加,速度变慢,但更能保证数据一致性
使用写缓冲,CPU写的速度很快,若写操作不频繁,则效果很好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞
写回法
当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存
减少了访存次数,但存在数据不一致的隐患
写不命中
写分配法
当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改,搭配写回法使用
非写分配法
当CPU对Cache写不命中时只写入主存,不调入Cache,搭配全写法使用
多级Cache
现代计算机常采用多级Cache
离CPU越近的速度越快,容量越小
离CPU越远的速度越快,容量越大
各级Cache间常采用“全写法+非写分配法”
Cache和主存之间常采用“写回法+写分配法”
第四章 指令系统
指令格式
操作码、地址码的概念
指令(又称机器指令)
是指示计算机执行某种操作的命令,是计算机运行的最小功能单位
指令集
一台计算机的所有指令的集合构成该机的指令系统,也称为指令集
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。
一条指令通常要包括操作码字段和地址码字段两部分
操作码:用户要干什么?
地址码:对谁进行操作?
有的指令不需要地址码(停机)
根据地址码数目不同分类
零地址指令
1. 不需要操作数,如空操作、停机、关中断等指令
2. 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
Eg:数据结构:“后缀表达式”
一地址指令
1. 只需要单操作数,如加1、减1、取反、求补等
指令含义:OP(A1)→A1
完成一条指令需要3次访存:取指 →读A1 →写A1
注:A1 指某个主存地址, (A1)表示 A1 所指向的地址中的内容
2. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
指令含义: (ACC)OP(A1)→ACC
完成一条指令需要2次访存:取指 → 读A1
二地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A1
完成一条指令需要访存4次,取指 →读A1 →读A2 →写A1
三地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A3
完成一条指令需要访存4次,取指 →读A1 →读A2 →写A3
四地址指令
指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指 →读A1 →读A2 →写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改为A4所在地址
根据指令长度分类
概念
指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
半字长指令、单字长指令、双字长指令 ——指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等
根据操作码的长度不同分类
定长操作码:指令系统中所有指令的操作码长度都相同
n位→2条指令
控制器的译码电路设计简单,但灵活性较低
可变长操作码:指令系统中各指令的操作码长度可变
控制器的译码电路设计复杂,但灵活性较高
根据操作类型分类
1. 数据传送
LOAD 作用:把存储器中的数据放到寄存器中
STORE 作用:把寄存器中的数据放到存储器中
数据传送类:进行主存与CPU之间的数据传送
数据传送类:进行主存与CPU之间的数据传送
2. 算术逻辑操作
算术:加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
3. 移位操作
算术移位、逻辑移位、循环移位(带进位和不带进位)
4. 转移操作
无条件转移 JMP
条件转移 JZ:结果为0; JO:结果溢出; JC:结果有进位
调用和返回 CALL和RETURN
陷阱(Trap)与陷阱指令
程序控制类:改变程序执行的顺序
5. 输入输出操作
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)
输入输出类(I/O):进行CPU和I/O设备之间的数据传送
运算类
扩展操作码
定长操作码:指令系统中所有指令的操作码长度都相同
可变长操作码:指令系统中各指令的操作码长度可变
定长指令字结构+可变长操作码 →扩展操作码指令格式
不同地址数的指令使用不同长度的操作码
指令格式
1.不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
对比数据结构的“哈夫曼树”的“前缀编码”
2.各指令的操作码一定不能重复。
通常情况下,
设地址长度为n,上一层留出m种状态,下一层可扩展出m×2种状态
优:在指令长度有限的前提下仍保持比较丰富的指令种类
缺:增加了指令译码和分析的难度,使控制器的设计复杂化
指令寻址
什么是指令寻址
确定下一条要执行的指令的存放地址
始终由程序计数器PC指明
顺序寻址
(PC)+ "1"——> PC
此处的"1"要理解为1个指令字长
每次取指令结束后,一定会PC+"1"
跳跃寻址
执行转移类指令导致的PC值改变
每一条指令的执行都分为“取指令”、“执行指令”两个阶段
数据寻址
什么是数据寻址
确定本条指令的地址码指明的真实地址
求出操作数的真实地址成为有效地址(EA)
直接寻址
指令字中的形式地址A就是操作数的真实地址EA,即EA=A
一条指令的执行:取指令,访存1次;执行指令,访存1次;
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址
缺点:A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改
间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)
优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。
缺点:指令在执行阶段要多次访存(1次间址需2次访存,多次寻址需根据存储字的最高位确定几次访存)
寄存器寻址
在指令字中直接给出操作数所在的寄存器编号,即EA=R,其操作数在由R所指的寄存器内。
一条指令的执行:取指令,访存1次;执行指令,访存0次;
优点:指令字短且执行速度快,支持向量/矩阵运算。
缺点:寄存器价格昂贵,计算机中寄存器个数有限
寄存器间接寻址
寄存器R中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R)
一条指令的执行:取指令,访存1次;执行指令,访存1次;
特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
隐含寻址
不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址
优点:有利于缩短指令字长
缺点:需增加存储操作数或隐含地址的硬件
立即寻址
形式地址A就是操作数本身,又称为立即数,一般采用补码形式
#表示立即寻址特征
一条指令的执行:取指令,访存1次;执行指令,访存0次;
优点:指令执行阶段不访问主存,指令执行时间最短
缺点:A的位数限制了立即数的范围,如A的位数为n,且立即数采用补码时,可表示的数据范围为-2~2-1
偏移寻址
什么是偏移寻址
以某个地址作为起点,形式地址视为“偏移量”
几种偏移寻址的区别在于偏移的起点不一样
基址寻址
将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A
以程序的起始存放地址作为起点
优点1:便于程序“浮动”,方便实现多道程序并发运行
基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定
在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)
当采用通用寄存器作为基址寄存器是时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统决定
优点2:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)
变址寻址
有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,EA=(IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器
程序员自己决定从哪里作为起点
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址)
优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序
基址&变址复合寻址
先基址后变址寻址:EA=(IX)+(BR)+A
相对寻址
把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示
王道书的小错误:“A是相对于当前指令地址的位移量” 应为:“A是相对于下一条指令地址的位移量”
以程序计数器PC所指地址作为起点
优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。
堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址
机器级代码
考试要求
只需关注x86汇编语言
能结合C语言看懂汇编语言的关键语句(看懂常见指令,选择结构,循环结构,函数调用)
结合汇编语言分析机器指令的格式、寻址方式
x86汇编语言基础知识
mov 目的操作数d,源操作数s
#mov指令功能:将源操作数s复制到目的操作数d所指的位置
如何指明内存的读写长度
dword ptr——双字,32bit
word ptr——单字,16bit
byte ptr——字节,8bit
若未指明主存读写长度,默认32bit
如何判断操作数类型
[地址]:地址所指的内容
一个十进制/十六进制数:立即数
寄存器
EAX,EBX,ECX,EDX 通用寄存器(X=未知)
AX,BX,CX,DX 使用通用寄存器的低16bit
AH,BH,CH,DH 低16bit的高八位 AL,BL,CL,DL 低16bit的低八位
ESD,EDI 变址寄存器,变址寄存器可用于线性表,字符串的处理
EBP,ESP 堆栈基指针,堆栈顶指针,堆栈寄存器用于实现函数调用
每个寄存器都是32bit
常用的x86汇编指令
目的操作数d不可以是常量
算术运算
add d,s 加 #计算d+s,结果存入d
sub d,s 减 #计算d-s,结果存入d
mul d,s 乘 #无符号数d*s,乘积存入d
div s 除 #无符号数除法 edx:eax/s,商存入eax,余数存入adx
neg d 取负数 #将d取负数,结果存入d
inc d 自增++ #将d++,结果存入d
dec d 自减-- #将d--,结果存入d
逻辑运算
and d,s 与 #将d,s逐位相与,结果放入d
or d,s 或 #将d,s逐位相或,结果放入d
not d 非 #将d逐位取反,结果放入d
xor d,s 异或 #将d,s逐位异或,结果放入d
shl d,s 左移 #将d逻辑左移s位,结果放回d(通常s是常量)
shr d,s 右移 #将d逻辑右移s位,结果放回d(通常s是常量)
其他指令
用于实现分支结构、循环结构的指令:cmp,test,jmp,jxx
用于实现函数调用的指令:push,pop,call,ret
用于实现数据转移的指令:mov
AT&T格式和Intel格式
选择语句的机器级表示
x86处理器中程序计数器PC通常被称为IP
CISC和RISC
CISC: Complex Instruction Set Computer
设计思路:一条指令完成一个复杂的基本功能。
代表:x86架构,主要用于笔记本、台式机等
RISC: Reduced Instruction Set Computer
设计思路:一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能
代表:ARM架构,主要用于手机、平板等
第五章 中央处理器
CPU的功能和结构
CPU的功能
1. 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
2. 操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
3. 时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
4. 数据加工。对数据进行算术和逻辑运算。
5. 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
运算器和控制器的功能
运算器的基本结构
1. 算术逻辑单元:主要功能是进行算术/逻辑运算。
2. 通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
专用数据通路方式
根据指令执行过程中的数据和地址的流动方向安排连接线路
性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现
CPU内部单总线方式
将所有寄存器的输入端和输出端都连接到公共的通路上
结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低
3. 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容。
4. 累加寄存器(ACC):它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。
5. 程序状态字寄存器/标志寄存器(PSW):保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
6. 移位器:对运算结果进行移位运算。
7. 计数器:控制乘除运算的操作步数。
控制器的基本结构
1. 程序计数器(PC):用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
2. 指令寄存器(IR):用于保存当前正在执行的那条指令。
3. 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。
4. 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
5. 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
6. 存储器地址寄存器(MAR):用于存放所要访问的主存单元的地址。
7. 存储器数据寄存器(MDR):用于存放向主存写入的信息或从主存中读出的信息。
CPU的基本结构
用户可见的寄存器(可编程):程序计数器/程序状态字寄存器(PC),通用寄存器组(R0-R3),累加寄存器(ACC),标志寄存器(PSW)
用户不可见的寄存器:存储器地址寄存器(MAR),存储器数据寄存器(MDR),指令寄存器(IR),暂存寄存器
指令执行过程
指令周期
CPU从主存中每取出并执行一条指令所需的全部时间
指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。
一个机器周期又包括若干时钟周期(也称为节拍,T周期或CPU时钟周期,它是CPU操作的最基本单位)
每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等
指令周期流程
取指周期
当前指令地址送至存储器地址寄存器,记做:(PC)→MAR
CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1→R
将MAR所指主存中的内容经数据总线送入MDR,记做M(MAR)→MDR
将MDR中的内容(此时是指令)送入IR,记做:(MDR)→IR
CU发出控制信号,形成下一条指令地址,记做(PC)+1→PC
间址周期
将指令的地址码送入MAR,记做Ad(IR)→MAR或Ad(MDR)→MAR
CU发出控制信号,启动主存做读操作,记做:1→R
将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR)→MDR
将有效地址送至指令的地址码字段,记做:(MDR)→AD(IR)
执行周期:根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果
中断周期:暂停当前任务去完成其他任务,为了能够恢复当前任务,需要保存断点;一般用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。
CU控制将SP减1,修改后的地址送入MAR,记做:(SP)-1→SP,(SP)→MAR; 本质上是将断点存入某个存储单元,假设其地址为a,故可记做a→MAR
CU发出控制信号,启动主存做写操作,记做:1→W
将断点(PC内容)送入MDR,记做:(PC)→MDR
CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址→PC
四个工作周期都有CPU访存操作,只是访存的目的不同
取指周期:取指令
间址周期:取有效地址
执行周期:取操作数
中断周期:保存程序断点
指令执行方案
方案1.单指令周期
对所有指令都选用相同的执行时间来完成
指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。
方案2.多指令周期
对不同类型的指令选用不同的执行步骤来完成 。
指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程 。
方案3.流水线方案
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中 。
指令之间并行执行。
数据通路
数据通路的概念
数据在功能部件之间传颂的路径
由控制部件产生的控制信号建立数据通路
信息从哪里开始中间经过哪些部件最后传到哪里
数据通路的基本结构
CPU内部单总线方式
内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线;
系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线。
CPU内部多总线方式
专用数据通路方式
多路选择器与三态门
控制器
硬布线控制器
前提知识
CU发出一个微命令,可完成对应微操作
一个节拍内可以并行完成多个“相容的”微操作
同一个微操作可能在不同指令的不同阶段被使用
不同指令的执行周期所需节拍数各不相同。为了简化设计,选择定长的机器周期,以可能出现的最大节拍数为准(通常以访存所需节拍数作为参考)
若实际所需节拍数较少,可将微操作安排在机器周期末尾几个节拍上进行
设计步骤
1. 分析每个阶段的微操作序列(取指、间址、执行、中断四个阶段)
2. 选择CPU的控制方式
3. 安排微操作时序
1.微操作的先后顺序不得随意更改
2.被控对象不同的微操作尽量安排在一个节拍内完成
3.占用时间较短的微操作尽量安排在一个节拍内完成并允许有先后顺序
4. 电路设计
1.列出操作时间表
2.写出微操作命令的最简表达式
3.画出逻辑图
特点
指令越多,设计和实现就越复杂,因此一般用于 RISC(精简指令集系统)
如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。
由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。
微程序控制器
设计思路
程序:由指令序列组成
微程序:由微指令序列组成,每一种指令对应一个微程序
微命令与微操作一一对应
微命令中可能包含多个微命令
指令是对程序执行步骤的描述
微指令是对指令执行步骤的描述
指令是对微指令功能的“封装”
采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中
微程序控制器的基本结构
一些考点
取指周期的微程序段通常是公用的,故如果某指令系统中有n条机器指令,则CM中微程序的个数至少是n+1个
一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包括间址周期、中断周期的微程序段
物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把它们看作一个整体。因此,“一条指令对应一个微程序”的说法是正确的
工作原理
指令周期=取值周器→间址周期→执行周期→中断周期。其中间址、中断周期可有可无
处理取指周期、间址周期、中断周期的微指令序列通常是公用的。执行周期的微指令序列各不相同
取指周期的微指令序列固定从#0 开始存放。执行周期的微指令序列的存放根据指令操作码确定
概念对比
程序vs微程序﹔指令vs微指令;主存储器vs控制器存储器(CM);MAR vs CMAR;MDR vsCMDR;PCvs uPC;lR vs ulR
微命令、微操作、微指令、微程序之间的关系
指令周期:从主存取出并执行一条机器指令所需的时间
微周期(微指令周期)∶从控制器存储器取出一条微指令并执行相应微操作所需的时间
微指令的设计
相容性微命令:可以并行完成的微命令
互斥性微命令:不允许并行完成的微命令
微指令的格式
水平型微指令
一条微指令能定义多个可并行的微命令
优点:微程序短,执行速度快
缺点:微指令长,编写微程序较麻烦
垂直型微指令
一条微指令只能定义一个微命令,由微操作码字段规定具体功能
优点:微指令短,简单,规整,便于编写微程序
缺点:微程序长,执行速度慢,工作效率低
混合型微指令
在垂直型基础上增加一些不太复杂的并行操作
微指令较短,仍便于编写;微程序也不长,执行速度加快
微指令的编码方式
直接编码(直接控制)方式
在微指令的操作控制字段中,每一位表示一个微操作命令,某位为1,表示该控制信号有效
优点:简单,直观,执行速度快,操作并行性好
缺点:微指令字长过长,n个微指令就要求微指令的操作字段有n位,造成控存容量极大
字段直接编码方式
将微指令的控制字段分成若干“段”,每段经译码后发出控制信号
微指令字段分段原则
1.互斥性微命令分在同一段内,相容性微命令分在不同段内
2.每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
3.一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作
优点:可以缩短微指令字长
缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢
字段间接编码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码
优点:可进一步缩短微指令字长
缺点:削弱了伪指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段
下地址的形成方式
微指令的下地址字段指出(断定方式)
根据机器指令的操作码形成
增量计数器法
分支转移
通过测试网络决定
由硬件产生微程序入口地址
微程序控制单元的设计
设计步骤
1.分析每个阶段的微操作序列
2.写出对应机器指令的微操作命令及节拍安排
3.确定微指令格式
4.编写微指令码点
微程序设计分类
静态微程序设计和动态微程序设计
静态:微程序无需改变,采用ROM
动态:通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM
毫微程序设计
微程序设计 用 微程序解释机器指令
毫微程序设计 用 毫微程序解释微程序
硬布线与微程序的比较
指令流水线
定义
一条指令的执行过程可以分成多个阶段(或过程)
根据计算机的不同,具体的分法也不同
指令执行方式
1.顺序执行方式
传统冯诺依曼机采用顺序执行方式,又称串行方式
总耗时:T=n×3t=3nt
优点:控制简单,硬件代价小
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低
2.一次重叠执行方式
总耗时:T=3t+(n-1)×2t=(1+2n)t
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了
3.二次重叠执行方式
总耗时:T=3t+(n-1)×t=(2+n)t
与顺序执行方式相比,指令的执行时间缩短将近2/3,这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令正在执行
表示方法
1.指令执行过程图
主要用于分析指令执行过程以及影响流水线的因素
2.时空图
主要用于分析流水线的性能
性能指标
1.吞吐率(TP)
吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量
装入时间/排空时间
2.加速比(S)
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
3.效率(E)
流水线的设备利用率称为流水线的效率
机器周期的设置
为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准
流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用
影响流水线的因素
1.结构因素(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关
解决办法
1.后一相关指令暂停一周期
2.资源重复配置:数据存储器+指令存储器
2.数据相关(数据冲突)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关
解决办法
1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
2.数据旁路技术(转发机制)
3.编译优化:通过编译器调整指令顺序来解决数据相关
3.控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
解决办法
1.转移指令分支预测
简单预测(永远猜true或false)
动态预测(根据历史情况动态调整)
2.预取转移成功和不成功两个控制流方向上的目标指令
3.加快和提前形成条件码
4.提高转移方向的猜准率
流水线的分类
根据流水线使用的级别
功能级流水线
处理机级流水线
处理机间流水线
按流水线可以完成的功能
单功能流水线 指只能实现一种固定的专门功能的流水线
多功能流水线 指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
按同一时间内各段之间的连接方式
静态流水线
动态流水线
按流水线的各个功能段之间是否有反馈信号
线性流水线
非线性流水线
流水线的多发技术
超标量技术
每个时钟周期内可并发多条独立指令
要配置多个功能部件
不能调整指令的执行顺序
通过编译优化技术,把可并行执行的指令搭配起来
超流水技术
在一个时钟周期内再分段
在一个时钟周期内一个功能部件使用多次
不能调整指令的执行顺序
靠编译程序解决优化问题
超长指令字
由编译程序挖掘出指令间潜在的并行性
将多条能并行操作的指令组合成一条
具有多个操作码字段的超长指令字(可达几百位)
采用多个处理部件
五段式指令流水线
通常,RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存
运算类指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:取出操作数至ID段锁存器
EX:运算,将结果存入EX段锁存器
M:空段
WB:将运算结果写回指定寄存器
取数(LOAD)指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm
EX:运算,得到有效地址
M:从数据Cache中取数并放入锁存器
WB:将取出的数写回寄存器
存数(STORE)指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm,将要存的数放到B
EX:运算,得到有效地址,并将锁存器B的内容放到锁存器Store
M:写入数据Cache
WB:空段
条件转移指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:进行比较的两个数放入锁存器A、B,偏移量放入Imm
EX:运算,比较两个数
M:将目标PC值写回PC
很多教材把写回PC的功能段称为“WrPC”段,其耗时比M段更短,可安排在M段时间内完成
WB:空段
无条件转移指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:偏移量放入Imm
EX:将目标PC值写回PC
M:空段
WB:空段
转移类指令常采用相对寻址
多处理器的基本概念
SISD、SIMD、MIMD、向量处理机
SISD(单指令流单数据流)
特性
各指令序列只能并发、不能并行,每条指令处理一两个数据
不是数据级并行技术
硬件组成
一个处理器+一个存储器
若采用指令流水线,需设置多各功能部件,采用多模块交叉存储器
SIMD(单指令流多数据流)
特性
各指令序列只能并发、不能并行,但每条指令可同时处理多个具有相同特征的数据
是一种数据级并行技术
硬件组成
一个指令控制部件(CU)+多个处理单元/执行单元(如ALU)+多个局部存储器+一个主存储器
每个执行单元有各自的寄存器组、局部存储器、地址寄存器
不同执行单元执行同一条指令,处理不同的数据
MISD(多指令流单数据流)
多条指令并行执行,处理同一个数据。现实中不存在这种计算机
MIMD(多指令流多数据流)
特性
各指令序列并行执行,分别处理多个不同的数据
是一种线程级并行、甚至线程级以上并行技术
进一步分类
多处理器系统
特性
各处理器之间,可以通过LOAD/STORE指令,访问同一个主存储器,可以通过主存相互传送数据
硬件组成
一台计算机内,包含多个处理器+一个主存储器
多个处理器共享单一的物理地址空间
多计算机系统
特性
各计算机之间,不能通过LOAD/STORE指令直接访问对方的存储器,只能通过“消息传递”相互传送数据
硬件组成
由多台计算机组成,因此拥有多个处理器+多个主存储器
每台计算机拥有各自的私有存储器,物理地址空间相互独立
向量处理机(SIMD思想的进阶应用)
特性
一条指令的处理对象是“向量”
擅长对向量型数据进行计算、浮点数计算,常被用于超级计算机中,处理科学研究中巨大运算量
硬件组成
多个处理单元,多组“向量寄存器”
主存储器应采用“多个端口同时读取”的交叉多模块存储器
主存储器大小限定了机器的解题规模,因此要有大容量的、集中式的主存储器
共享内存多处理器的基本概念
多处理器系统(简称)
多个处理器共享一个主存储器
多个处理器共享单一的地址空间,都可以通过LOAD、STORE指令访问共享的主存储器
多核处理器的基本概念
一个CPU芯片包含多个处理器,即多个核,因此通常也被称为 片级多处理器,意思是:一块芯片上集成了多个处理器
所有核共享一个LLC,并共享主存储器
第六章 总线
总线概述
基础概念
总线是一组能为多个部件分时共享的公共信息传送线路
分时是指同一时刻只允许有一个部件向总线发送信息,如果系统中有多个部件,则它们只能分时地向总线发送信息
共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享
总线的特性
1. 机械特性:尺寸、形状、管脚数、排列顺序
2. 电气特性:传输方向和有效的电平范围
3. 功能特性:每根传输线的功能(地址、数据、控制)
4. 时间特性:信号的时序关系
总线的分类
按数据传输格式
串行总线
优点:只需要一条传输线,成本低廉,广泛应用于长距离传输;应用于计算机内部时,可以节省布线空间
缺点:在数据发送和接收的时候要进行拆卸和装配,要考虑串行并行转换的问题
并行总线
优点:总线的逻辑时序比较简单,电路实现起来比较容易
缺点:信号线数量多,占用更多的布线空间;远距离传输成本高昂
按总线功能
片内总线
片内总线是芯片内部的总线
它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线
系统总线
系统总线是计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线
按系统总线传输信息内容的不同
数据总线(DB)
用来传输各功能部件之间的数据信息,它是双向传输总线,其位数(根数)与机器字长、存储字长有关
双向
区分
数据通路表示的是数据流经的路径
数据总线是承载的媒介
地址总线(AB)
传输地址信息,包括主存单元或I/O接口的地址;位数(根数)与主存地址空间大小及设备数量有关
单向
控制总线(CB)
一根控制线传输一个信号;有出:CPU送出的控制命令;有入:主存(或外设)返回CPU的反馈信号
系统总线的结构
单总线结构
结构:CPU、主存、I/O设备(通过I/O接口)都连接在一组总线上,允许I/O设备之间、I/O设备和CPU之间或I/O设备与主存之间直接交换信息
优点:结构简单,成本低,易于接入新的设备
缺点:带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作
双总线结构
通道是具有特殊功能的处理器,能对I/O设备进行统一管理,通道程序放在主存中
结构:双总线结构有两条总线,一条是主存总线,用于CPU、主存和通道之间进行数据传送;另一条是I/O总线,用于多个外部设备与通道之间进行数据传送
优点:将较低速的I/O设备从单总线上分离出来,实现存储器总线和I/O总线分离
缺点:需要增加通道等硬件设备
支持突发(猝发)传送:送出一个地址,收到多个地址连续的数据
三总线结构
结构:三总线结构是在计算机系统各部件之间采用3条各自独立的总线来构成信息通路,这3条总线分别为主存总线、I/O总线和直接内存访问DMA总线。
优点:提高了I/O设备的性能,使其更快地响应命令,提高系统吞吐量。
缺点:系统工作效率较低。
四总线结构
1. 桥接器:用于连接不同的总线,具有数据缓冲、转换和控制功能
2. 靠近CPU的总线速度较快
3. 每级总线的设计遵循总线标准
拓展:搜索“北桥芯片、南桥芯片”
通信总线
通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线
按时序控制方式
同步总线
异步总线
总线的性能指标
总线的传输周期(总线周期)
一次总线操作所需的时间(包括申请阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期构成
总线时钟周期
即机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制
现在的计算机中,总线时钟周期也有可能由桥接器提供
总线的工作频率
总线上各种操作的频率,为总线周期的倒数。
总线的时钟频率
即机器的时钟频率,为时钟周期的倒数
总线宽度
又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位(bit)总线
总线带宽
可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位而可用字节/秒(B/S)表示
总线带宽=总线工作频率×总线宽度(bit/s)=总线工作频率×(总线宽度/8)(B/s)
总线带宽是指总线本身能到达的最高传输速率,在计算实际的有效传输效率时,要用斯实际传输的数据量除以耗时
总线复用
总线复用是指一种信号线在不同的时间传输不同的信息,可以使用较少的线传输更多的信息,从而节省了空间和成本
信号线数
地址总线,数据总线和控制总线3总线数的总和称为信号线数
大多数情况下,一个总线周期包含多个总线时钟周期
总线操作和定时
总线周期的四个阶段
1.申请分配阶段:由需要使用总线的主模块(或主设备)提出申请,经总线仲裁机构决定将下一传输周期的总线使用权授予某一申请者。也可将此阶段细分为传输请求和总线仲裁两个阶段
2.寻址阶段:获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启动参与本次传输的从模块
3.传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送
4.结束阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权
总线定时
总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,它的实质是一种协议或规则
同步通信(同步定时方式)
由统一时钟控制数据传送
若干个时钟产生相等的时间间隔,每个间隔构成一个总线周期
在一个总线周期中,发送方和接收方可进行一次数据传送
因为采用统一的时钟,每个部件或设备发送或接收信息都在固定的总线传送周期中,一个总线的传送周期结束,下一个总线传送周期开始
优点:传送速度快,具有较高的传输速率;总线控制逻辑简单
缺点:主从设备属于强制性同步;不能及时进行数据通信的有效性检验,可靠性较差
同步通信适用于总线长度较短及总线所接部件的存取时间比较接近的系统
异步通信(异步定时方式)
采用应答方式,没有公共时钟标准
主设备提出交换信息的“请求”信号,经接口传送到高从设备;从设备接到主设备的请求后,通过接口向主设备发出“回答”信号
根据“请求”和“回答”信号的撤销是否互锁,分为以下三种类型
1.不互锁方式
主设备发出“请求”信号后,不必等到接到从设备的“回答”信号,而是经过一段时间,便撤销“请求”信号
而从设备在接到“请求”信号后,发出“回答”信号,并经过一段时间,自动撤销“回答”信号。双方不存在互锁关系
速度最快,可靠性最差
2.半互锁方式
主设备发出“请求”信号后,必须待接到从设备的“回答”信号,才撤销“请求”信号,有互锁的关系
而从设备在接到“请求”信号后,发出“回答”信号,但不必等待获知主设备的“请求”信号已经撤销,而是隔一段时间后自动撤销“回答”信号。不存在互锁关系
3.全互锁方式
主设备发出“请求”信号后,必须待接到从设备的“回答”信号,才撤销“请求”信号
从设备发出“回答”信号,必须待获知主设备“请求”信号已撤销后,再撤销其“回答”信号。双方存在互锁关系
最可靠,速度最慢
优点:总线周期长度可变,能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换,自动适应时间的配合
缺点:比同步控制方式稍复杂一些,速度比同步定时方式慢
半同步通信
同步、异步结合
统一时钟的基础上,增加一个“等待”响应信号WAIT
分离式通信
充分挖掘系统总线每瞬间的潜力
分离式通信的一个总线传输周期
子周期1
主模块申请占用总线,使用完后放弃总线的使用权
子周期2
从模块申请占用总线,将各种信息送至总线上
特点
1.各模块均有权申请占用总线
2.采用同步方式通信,不等对方回答
3.各模块准备数据时,不占用总线
4.总线利用率提高
共同点:
第七章 输入/输出系统
I/O系统基本概念
基本概念
“I/O”就是“输入/输出”
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备
I/O接口:又称I/O控制器,设备控制器,负责协调主机与外部设备之间的数据传输
I/O系统基本组成
一般来说,I/O系统由I/O软件和I/O硬件两部分构成
I/O硬件
包括外部设备,I/O接口,I/O总线等
I/O软件
包括驱动程序,用户程序,管理程序,升级补丁等
通常采用I/O指令和通道指令实现主机与I/O设备的信息交换
I/O指令
CPU指令的一部分
操作码:识别I/O指令
命令码:做什么操作
设备码:对哪个设备进行操作
通道指令
通道能识别的指令
通道程序提前编制好放在主存中
在含有通道的计算机中,CPU执行I/O指令对通道发出命令,由通道执行一系列通道指令,代替CPU对I/O设备进行管理
I/O控制方式
程序查询方式
CPU不断轮询检查I/O控制器中的“状态寄存器”,检测到状态为“已完成”之后,再从数据寄存器取出输入数据
主要特点:CPU有“踏步”等待现象,CPU和I/O串行工作
优点:接口设计简单,设备量少
缺点:CPU在信息传送过程中要花费很多时间用于查询和等待,而且如果采用独占查询,则在一段时间内只能和一台外设交换信息,效率大大降低
独占查询:CPU100%的时间都在查询I/O状态,完全串行
定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态,查询的间隔内CPU可以执行其他程序
程序中断方式
中断的基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些需紧急处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊情况进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序
等待I/O时CPU可以先去执行其他程序,键盘I/O完成后I/O控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据
中断请求标记
每个中断源向CPU发出中断请求的时间是随机的
为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR
对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向端口发出中断查询信号,以获取I/O的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻
中断的工作流程
1.中断请求
中断源向CPU发送中断请求信号
2.中断响应
响应中断的条件
关中断
关中断的作用:实现原子操作
原子操作:这一系列的操作,要么一点不做,要么全部完成
PSW中的IF
IF=1表示开中断
IF=0表示关中断
狭义的中断
非屏蔽中断:关中断时也会被响应,如:掉电
可屏蔽中断:关中断时不会被响应
3.中断处理
中断隐指令
保存原程序的PC值,并让PC指向中断服务程序的第一条指令
主要任务
关中断
保存断点
可以存入堆栈,也可以存入指定单元
引出中断服务程序
软件查询法
硬件向量法
由硬件产生向量地址(中断类型号),再由向量地址找到入口地址
中断服务程序
主要任务
保护现场
保护通用寄存器和状态寄存器的内容,存入堆栈或特定存储单元
中断服务(设备服务)
恢复现场
中断返回
多重中断
单重中断
执行中断服务程序时不响应新的中断请求
多重中断
又称中断嵌套,执行中断服务程序时可响应新的中断请求
屏蔽字
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字
屏蔽字设置的规律
1.一般用1表示屏蔽,0表示正常申请
2.每个中断源对应一个屏蔽字
3.屏蔽字中1越多,优先级越高。每个屏蔽字中至少有一个1(至少屏蔽自身)
DMA控制方式
DMA接口,即DMA控制器,也是一种特殊的I/O控制器
主存与高速I/O设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数
DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求
DMA控制器工作流程
1.接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求
2.CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期
3.确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数
4.规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
5.向CPU报告DMA操作的结束(通过中断信号)
传送后
传送前
传送时
DMA传送过程
I/O与主机并行工作,程序与传送并行工作
解决I/O设备和CPU同时访问主存时的数据冲突
1.停止CPU访问主存
优点:控制简单
缺点:CPU处于不工作状态或保持状态,未充分发挥CPU对主存的利用率
2.DMA与CPU交替访存
优点:不需要总线使用权的申请、建立和归还过程
缺点:硬件逻辑更为复杂
3.周期挪用(周期窃取)
通道控制方式
通道:可以理解为是“弱鸡版的CPU”,通道可以识别并执行一系列通道指令,通道指令种类、功能通常比较单一
外部设备
输入设备:鼠标、键盘等
输出设备
显示器
分类
按显示设备所用的显示器件分类
阴极射线管(CRT)
字符、图形、图像
光栅扫描、随机扫描
液晶显示器(LCD)
LED显示器
按所显示的信息内容分类
字符显示器
图形显示器
图像显示器
参数
屏幕大小
以对角线长度表示,常用的有12~29英寸等
分辨率
所能表示的像素个数,屏幕上的每一个光点就是一个像素,以宽、高的像素的乘积表示,例如,800×600
灰度级
灰度级是指黑白显示器中所显示的像素点的亮暗差别
n位可以表示2ⁿ种不同的亮度或颜色
刷新
光点只能保持极短的时间便会消失,为此必须在光点消失之前再重新扫描显示一遍,这个过程称为刷新
刷新频率
单位时间内扫描整个屏幕内容的次数
通常显示器刷新频率在60~120Hz
显示存储器(VRAM)
也称刷新存储器,为了不断提高刷新图像的信号,必须把一帧图像信息存储在刷新存储器中。其存储容量由图像分辨率和灰度级决定,分辨率越高,灰度级越多,刷新存储器容量越大。
VRAM容量 = 分辨率 × 灰度级位数
VRAM带宽 = 分辨率 × 灰度级位数 × 帧频
打印机
击打式和非击打式
串行和行式
针式、喷墨式和激光
外存储器
I/O接口
I/O接口的概念,结构和作用
I/O接口:又称I/O控制器,设备控制器,负责协调主机与外部设备之间的数据传输
I/O接口的结构
数据缓冲寄存器(DBR)
暂存即将输入输出的数据
主机和外设的速度匹配
状态/控制寄存器
命令字:CPU对设备发出的具体命令
状态字:设备的状态信息,供CPU检查
串-并转换机构
数据格式的转换
1/O控制逻辑
根据命令字向设备发出控制信号
地址译码逻辑
将地址信号映射到指定I/O端口
I/O接口的作用
数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配
错误或状态监测:通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用
控制和定时:接收从控制总线发来的控制信号、时钟信号
数据格式转换:串-并、并-串 等格式转换
与主机和设备通信:实现 主机—I/O接口—I/O设备 之间的通信
I/O接口的工作原理
数据线:读写数据、状态字、控制字、中断类型号
地址线:指明I/O端口
控制线:读/写IO端口的信号、中断请求信号
控制寄存器、状态寄存器在使用时间上是错开的,因此有的I/O接口中可将二者合二为一
1.发命令:发送命令字(控制字)到I/O控制寄存器,向设备发送命令(需要驱动程序的协助)
2.读状态:从状态寄存器读取状态字,获得设备或I/O控制器的状态信息
3.读/写数据:从数据缓冲寄存器发送或读取数据,完成主机与外设的数据交换
I/O端口
I/O端口是指接口电路中可以被CPU直接访问的寄存器
统一编制
把I/O端口当作存储器的单元进行地址分配,用统一的访存指令就可以访问I/O端口,又称存储器映射方式
靠不同的地址码区分内存和I/O设备,访存类的指令都可以访问I/O端口
RISC机器常用
优点:不需要专门的输入/输出指令,所有访存指令都可直接访问端口,程序设计灵活性高,端口有较大的编址空间,读写控制逻辑电路简单
缺点:端口占用了主存地址空间,使主存地址空间变小,外设寻址时间长(地址位数多,地址译码速度慢)
独立编制
I/O端口地址与存储器地址无关,独立编址CPU需要设置专门的输入/输出指令访问端口,又称I/O映射方式
靠不同的指令区分内存和I/O设备,只能用专门的I/O指令访问I/O端口
Intel处理器常用,IN,OUT就是IO指令
优点:使用专用I/O指令,程序编制清晰,I/O端口地址位数少,地址译码速度快,I/O端口的地址不占用主存地址空间
缺点:I/O指令类型少,一般只能对端口进行传送操作,程序设计灵活性差,需要CPU提供读/写,I/O设备读/写两组控制信号,增加了控制逻辑电路的复杂性
分类
按数据传送方式
并行接口:一个字节或一个字所有位同时传送
串行接口:一位一位的传送
按主机访问I/O设备的控制方式
程序查询接口
中断接口
DMA接口
按功能的灵活性
可编程接口
不可编程接口