计算机组成原理
第一章 计算机系统概述
1,计算机发展历程
1,计算机系统
计算机系统由硬件和软件构成,硬件是计算机的实体部分,软件是在硬件上运行的各类程序和相关的数据文档。
计算机的性能的好坏取决于软件和硬件功能的总和。
1,计算机软件
计算机软件由系统软件和应用软件组成
1,系统软件
系统软件是用来管理整个计算机系统的,比如操作系统,数据库管理(DBMS),标准程序库,网络软件,语言处理程序,服务程序。
2,应用软件
是按任务需要编制成的各种程序,比如抖音,王者等等
2,硬件的发展
1,第一代:电子管时代
1946年,第一台电子数字计算机,逻辑元件是电子管,直接使用机器语言进行编程(二进制)。
2,第二代:晶体管时代
用晶体管替代电子管,计算机体积减小,功耗降低,高级编程语言FORTRAN,有了计算机的雏形
3,第三代:中小规模集成电路时代
把元件集成在基片上,高级语言开始出现,有了分时操作系统
4,第四代:大规模、超大规模集成电路时代
开始出现微处理器,微型计算机,个人计算机萌芽,诞生了Windows,Macos,Linux等操作系统
摩尔定律:揭示了信息技术的进步
集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将提升一倍。
3,软件的发展
机器语言,汇编语言
FORTRAN,PASCAL,C++,java
dos,windows,android,ios
4,目前的发展趋势
两极分化
一极是微型计算机向更微型化、网络化、高性能、多用途发展
另一极是巨型机向更巨型化、超高速、并行处理、智能化方向发展
2,计算机硬件的基本组成
1,冯诺依曼结构
1,首次提出存储程序的概念
存储程序的概念是指将指令以二进制码的形式事先输入计算机系统的主存储器(内存),然后按其在存储器中的首地址执行程序的第一条指令,以后就按照该程序的规定顺序执行其他指令,直到程序结束
2,以运算器为中心
输入输出设备与存储器之间的数据传输通过运算器完成,导致数据计算效率降低,现代以存储器为中心
3,冯诺依曼计算机特点
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码(指令类型)和地址码(数据的存放地址)组成
- 存储程序(提前把指令和数据存放在存储器)
- 以运算器为中心
2,现代计算机结构
- 以存储器为中心
- CPU=运算器+控制器,运算器和控制器之间的关系十分紧密
- CPU和主存储器统称为主机,平时生活中的主机会包含一些其他外设
- 主存储器是内存,辅存储器是外存,如硬盘。
- 5,输入和输出设备加上辅存储器统称为I/O设备
3,五大部分
1,输入设备
将(计算机要处理的数据和程序)信息转换成机器能识别的形式(二进制)
2,输出设备
将运算结果转换成人们熟悉的形式
3,存储器
存放程序和数据。存储器分为主存储器(内存)和辅存储器(外存,比如机械硬盘)。CPU能够直接访问的是主存储器,辅存储器一般被归为外设IO设备。
4,运算器
进行算术运算和逻辑运算
5,控制器
指挥各部件使得程序运行
3,计算机各个硬件的工作原理
1,主存储器
1,存储体(用于存放数据的,可以存放二进制0,1)
数据在存储体内按地址存储,存储体会被分成一个一个的存储单元,每个存储单元存放一串二进制代码。每个存储单元通常存储的是8bit的整数倍。每个存储单元对应一个地址。
存储单元中这串二进制代码的组合被称为一个存储字(Word),一个字(world)=16bit
存储单元中这个存储字包含多少个二进制位被称为存储字长。
存储元,即存储二进制的电子元件,每个存储元可存1bit。
2,MAR(存储地址寄存器)
MAR的位数反映存储单元的个数,存储单元个数=2^MAR位数
3,MDR(存储数据寄存器)
MDR位数=存储字长
一个字(world)=16bit,跟计算机结构有关,可能是32bit或者64bit
1B=1个字节=8bit
1b=1个bit
2,运算器
用于实现算术运算(如:加减乘除),逻辑运算(如:与或非)
1,ACC(累加器)
用于存放操作数(加减乘除,与非)或运算结果
2,MQ(乘商寄存器)
只有在乘、除运算时用于存放操作数或运算结果
3,X(通用操作数寄存器)
用于存放操作数,有多个
4,ALU(算术逻辑单元)
通过内部复杂的电路实现算术运算、逻辑运算,前三个是存放数据的,结构并不复杂
加 | 减 | 乘 | 除 | |
---|---|---|---|---|
ACC | 被加数、和 | 被减数、差 | 乘积高位 | 被除数、余数 |
MQ | 乘数、乘积低位 | 乘数、乘积低位 | 乘数、乘积低位 | 商 |
X | 加数 | 减数 | 被乘数 | 除数 |
3,控制器
取指令,分析指令,执行指令
1,CU(控制单元)
分析指令,给出控制信号
2,IR(指令寄存器)
存放当前执行的指令
3,PC(程序计数器)
存放下一条指令地址,有自动加1功能
4,计算机工作过程
1,取指令
(PC)—>MAR
PC通过总线把PC的值(主存的地址)存放到地址寄存器MAR中
M(MAR)---->MDR
根据MAR的值把对应地址上的二进制内容放到MDR数据寄存器
(MDR)—>IR
CPU将MDR的内容存放到指令寄存器IR当中
取指令结束(PC)+1—>PC
2,分析指令
OP(IR)—>CU
将指令的操作码送到CU,CU分析指令后去执行
3,执行指令
前面两个步骤是必经的步骤,且是相同的
假设分析出来的操作码是加法指令
AD(IR)—>MAR
CU根据操作码得出是加法指令,将指令的地址码发到MAR
M(MAR)---->MDR
根据MAR的值把对应地址上的二进制内容放到MDR数据寄存器
MDR—>X
MDR把数据送到X通用操作数寄存器
(ACC)+X—>ACC
由ALU实现加法运算
4,计算机系统的多级层次结构
1,五个层次
M0和M1属于硬件,M2,M3,M4属于软件
M0—>M4:下层是上层的基础,上层是下层的扩展
- M0:微程序机器
执行微指令,对上层二进制机器指令的分解,由硬件直接执行微指令
- M1:传统机器
执行机器语言的二进制指令
- M2:操作系统机器(虚拟机器)
向上提供广义指(系统调用)
- M3:汇编语言机器(虚拟机器)
执行汇编语言,需要经过汇编程序翻译成机器二进制语言才可以被执行,汇编语言指令和机器语言指令是一 一对应的。
- M4:高级语言机器(虚拟机器)
执行高级语言,高级语言程序会被编译程序翻译成汇编语言程序
2,三个级别的语言
高级语言、汇编语言、机器语言
- 编译程序
将高级语言一次全部翻译为汇编语言,或直接翻译成机器语言
- 汇编程序
将汇编语言翻译成机器语言
- 解释程序
将高级语言一句一句翻译成机器语言,翻译一句就执行一句
5,计算机的性能指标
1,存储器的容量
MAR位数反映存储单元的个数(最多支持多少个)
MDR位数=存储字长=每个存储单元的大小
总容量=存储单元个数*存储字长
2,CPU
1,时钟周期
CPU中最小的时间单位,每个动作至少要1个时钟周期,单位微秒,纳秒
2,主频(时钟频率)
CPU内数字脉冲信号振荡的频率,是时钟周期的倒数,单位是赫兹,Hz,每秒执行多少个时钟周期
3,CPI
执行一条指令所需的时钟周期数
执行一条指令的耗时=CPI*CPU时钟周期数
4,CPU执行时间
执行整个程序的耗时
5,IPS
每秒执行多少条指令,IPS=主频/平均CPI
6,FLOPS
每秒执行多少次浮点运算
3,常用数量单位
当描述文件大小或者存储器的大小K=2^10=1024
当描述数据的处理速率相关时,K=1000
4,系统整体的性能指标
- 数据通路带宽:
数据总线一次所能并行传送信息的位数(各种硬件部件通过数据总线传输数据)
- 吞吐量:
系统单位时间内处理请求(一条指令或一个程序)的数量
取决于信息能够多块地输入内存,CPU能多块地取指令,数据能够多块地从内存取出或存入,以及所得到的结果能多快地从内存送给一台外部设备。
这些步骤中的每一步都关系到主存,因此系统吞吐量取决于主存的存取周期。
- 相应时间:
从用户向计算机发送一个请求,到系统对该请求作出响应并获得它所需要的结果的等待时间。
- 基准程序(跑分)
是用来测量计算机处理速度的一种实用程序,以便于被测量的计算机性能可用与运行相同程序的其它计算机性能进行比较。
第二章 数据的表示和运算
1,进位计数制
1,r进制数
基数=r,每个数码可能出现r中字符,逢r进1
基数:每个数码所用到的不同符号的个数,r进制的基数为r
2,r进制数—>十进制
r进制数的十进制数值=各数码位与位权的乘积之和
3,二进制—>八进制
每3个二进制位对应一个八进制位
4,二进制—>十六进制
每4个二进制位对应一个十六进制位
5,十进制—>r进制
整数部分:除基取余法(短除),先取得的”余数“是整数的低位,商为0止
小数部分:乘基取整法,先取得的“整数”是小数的高位
6,真值和机器数
真值:符合人类习惯的数字,实际带正负号的数值
机器数:把正负号数字化的数,数字实际存到机器里的形式
2,BCD码
BCD码是用二进制编码的十进制,可以实现二进制和十进制的快速转换
1,8421码
每4个二进制位对应一个十进制位(有6个冗余状态)
8、4、2、1分别对应每一位的权值
00001001分别对应09,进行加法后若超出该范围,则需要+0110进行修正(强制向高位进1)
2,余3码
8421码+(0011),无权码
3,2421码
2、4、2、1分别对应每一位的权值
表示04时最高位为0,表示59时最高位为1
3,无符号整数的表示和运算
无符号整数即自然数
1,无符号整数在计算机硬件内的表示
- 全部二进制位都是数值位,没有符号位,第i位的位权是2^i+1
- n bit无符号整数的表示范围0~(2^n )-1,超出则溢出,意味着该计算机无法一次处理这么多
- 可以表示的最小的数全0,可以表示的最大的数全1.
2,无符号整数加法、减法运算的实现原理
1,加法:
从最低位开始,按位相加,并往更高位进位
2,减法
被减数不变,减数全部按位取反、末位+1,减法变加法
从最低位开始,按位相加,并往高位进位
4,带符号整数的表示和运算
1,表示
1,原码
- 符号位“0/1”对应“正/负”,剩余的数值位表示真值的绝对值
- 若机器字长n+1位,带符号整数的原码表示范围是:-(2^n -1) <= x <= 2^n -1
- 真值0有两种表示形式:+0和-0
缺点:符号位不能参与运算
2,反码
正数:不变
负数:符号位不变,数值位取反
3,补码
正数:不变
负数:末位+1
2,原码和补码快速相互转换
正数的原码,反码,补码都一样
负数的的原码转换成补码的技巧!!!
从右往左找到第一个1,这个1左边的所有”数值位“按位取反
TIPS:
是数值位按位取反,符号位不取反
该1的左边取反,这个1及其右边的不变
3,补码的加法
从最低位开始,按位相加(符号位参与运算),并往更高位进位,舍弃溢出的位
TIPS
4,补码的减法
A-B=A+(-b)—>[A]补-[B]补=[A]补+[-B]补
1,已知一个数的补码,求这个数的负数的补码
从右往左找到第一个1,这个1左边的所有
5,带符号数补码的减法
被减数不变,减数全部位按位取反,末位+1(转成补码),减法变加法
从最低位开始,按位相加,并往更高位进位
5,原反补码特性对比
n+1 bit | 合法表示范围 | 最大的数 | 最小的数 | 真值0的表示 |
---|---|---|---|---|
带符号整数:原码 | -(2"-1) ≤x≤ 2"-1 | 0,111…111=2"-1 | 1,111…111= -(2"-1) | [+0]原=0,000…000 [-0]原=1,000…000 |
带符号整数:反码 | -(2"-1) ≤x≤ 2"-1 | 0,111…111=2"-1 | 1,000…000=-(2"-1) | [+0]原=0,000…000 [-0]原=1,000…000 |
带符号整数:补码 | -2"≤x≤ 2"-1 | 0,111…111=2"-1 | 1,000…000=-2" | [0]补 =0,000…000真值0只有一种补码 |
无符号整数0≤x≤2n+1-1= 2n+1-1=0 | 0≤x≤ (2^(n+1))-1 | 111…111=(2^(n+1))-1 | 000…000 =0 | 000…000 |
原码和反码的合法表示范围完全相同,都有两种方法表示真值0
补码的合法表示范围比原码多一个负数,只有一种方法表示真值0
6,带符号整数的移码表示
补码基础上,符号位取反即可得到移码(移码只能用于表示整数)
n+1 bit | 合法表示范围 | 最大的数 | 最小的数 | 真值0的表示 |
---|---|---|---|---|
带符号整数:原码 | -(2"-1) ≤x≤ 2"-1 | 0,111…111=2"-1 | 1,111…111= -(2"-1) | [+0]原=0,000…000 [-0]原=1,000…000 |
带符号整数:反码 | -(2"-1) ≤x≤ 2"-1 | 0,111…111=2"-1 | 1,000…000=-(2"-1) | [+0]原=0,000…000 [-0]原=1,000…000 |
带符号整数:补码 | -2"≤x≤ 2"-1 | 0,111…111=2"-1 | 1,000…000=-2" | [0]补 =0,000…000真值0只有一种补码 |
带符号整数:移码 | -2"≤x≤ 2"-1 | 1,111…111=2"-1 | 0,000…000=-2" | [0]移 =1,000…000真值0只有一种移码 |
无符号整数0≤x≤2n+1-1= 2n+1-1=0 | 0≤x≤ (2^(n+1))-1 | 111…111=(2^(n+1))-1 | 000…000 =0 | 000…000 |
7,定点小数的表示和运算
定点数可以分为定点整数和定点小数,前者即带符号整数
定点整数的编码方式:原码,反码,补码,移码(小数点默认在最低位后面)
定点小数的编码方式:原码、反码、补码(小数点默认在符号位后面)
8,算术逻辑单元(ALU)
1,ALU
算术运算(加减乘除等),逻辑运算(与或非等),辅助功能(移位,求补等)
基本结构:输入、输出、控制
2,电路基础知识
1,逻辑运算
与或非:与的优先级大于或,满足类似加法的分配律和结合律
与非:先进行与运算,再进行非运算
或非:先进行或运算,再进行非运算
异或:异1同0
同或:同0异1
2,门电路
最基础的逻辑元件,用于实现逻辑运算
3,逻辑表达式
逻辑表达式就是电路的数学化表示,根据逻辑运算的规则对逻辑表达式进行优化,也就是在优化电路
3,加法器的实现
1,一位全加器(FA)
本位和,本位向高位的进位
2,串行加法器
一位全加器+进位触发器,只能一位一位地加
串行加法器:只有一个全加器,数据逐位串行送入加法器中进行运算。进位触发器用来寄存进位信号,以便参与下一次运算。如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。
3,串行进位的并行加法器
多个全加器简单串联,可以多位同时加,计算速度取决于进位产生和传递的速度
串行进位的并行加法器:把n个全加器串接起来,就可进行两个n位数的相加。串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
9,定点数的移位
1,算术移位
左移1位相当于乘基数,右移移位相当于除基数
- 原码:
原码的算数移位,符号位保持不变,仅对数值位进行移位。
右移:高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位#0,则会丢失精度
左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位x0,则会出现严重误差
- 反码
反码的算数移位——正数的反码与原码相同,因此对正数反码的移位运算也和原码相同。右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。
反码的算数移位——负数的反码数值位与原码相反,因此负数反码的移位运算规则如下,右移:高位补1,低位舍弃。左移:低位补1,高位舍弃。
- 补码
补码的算数移位——正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。
补码的算数移位——负数补码=反码末位+1导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。规律——负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码负数补码的算数移位规则如下:右移(同反码):高位补1,低位舍弃。左移(同原码):低位补0,高位舍弃。
2,逻辑移位
左移,右移都补0,移出的位舍弃
3,循环移位
不带进位:用移出的位补上空缺
带进位:移出的位放到进位位上,原进位位补上空缺
10,定点数的乘法运算
1,原码1位乘法
符号位通过异或确定;数值部分通过被乘数和乘数绝对值的n轮加法、移位完成根据当前乘数中参与运算的位确定(ACC)加什么。若当前运算位=1,则(ACC)+[|x]]原;若=O,则(ACC)+0。每轮加法后ACC、MQ的内容统一逻辑右移
每轮加法后ACC、MQ的内容统一逻辑右移
2,补码1位乘法
符号位、数值位都是由被乘数和乘数进行n轮加法、移位,最后再多来一次加法
11,定点数的除法运算
12,C语言中定点整数的强制类型转换
C语言中定点整数是用补码存储的
无符号数与有符号数:不改变数据内容,改变解释方式
长整数变短整数:高位截断,低位保留
短整数变长整数:符号扩展
13,数据的存储和排列
1,大小端模式
最高有效字节(MSB),最低有效字节(LSB)
多字节数据在内存里一定是占连续的几个字节
大端:低有效字节放到高位,高有效字节放到低位,便于人类阅读
小端:低有效字节放到低位,高有效字节放到高位,便于机器处理
2,边界对齐
现代计算机通常是按字节编址,即每个字节对应1个地址通常也支持按字、按半字、按字节寻址。假设存储字长为32位,则1个字=32bit,半字=16bit。每次访存只能读/写1个字
14,浮点数的表示
1,浮点数的作用和基本原理
通过阶码+尾数来表示
尾数给出具体的数值,阶码指明小数点前移、后移多少位
阶码通常是用补码、移码的表示的定点整数
尾数通常是用补码、原码表示的定点小数
2,浮点数规格化
尾数的最高数值位必须是一个有效值(类比十进制科学计数法,通常我们会让数值部分最高位为非0)
- 左规:
数值位最高位无效时,通过尾数算数左移、阶码减1的方法处理,直到尾数最高数值位有效时停止
- 右规:
若采用双符号位表示尾数,则当运算后尾数“假溢出”时,可以通过尾数右移、阶码加1的方法处理
- 原码表示的尾数规格化:
尾数的最高数值位必须是1
- 补码表示的尾数规格化:
尾数最高数值位必须和尾数符号位相反
15,浮点数标准IEEE 754
数符部分是1位(表示正负性)
阶码部分用移码表示(隐藏表示最高位1)
尾数部分用原码表示
阶码真值=移码-偏移量
类型 | 数符 | 阶码 | 尾数数值 | 总位数 | 偏置值(十六进制表示) | 偏置值(十进制表示) |
---|---|---|---|---|---|---|
短浮点数(float) | 1 | 8 | 23 | 32 | 7FH | 127 |
长浮点数(double) | 1 | 11 | 52 | 64 | 3FFH | 1023 |
临时浮点数(long double) | 1 | 15 | 64 | 80 | 3FFFH | 16383 |
16,浮点数运算
1,加减法
1,对阶
小阶向大阶看齐,尾数算数右移一位,阶码加1,直到阶码相同
tip:对阶可能导致丢失末位精度
2,尾数加减
通常采用双符号位表示尾数,这样可以挽救尾数溢出
3,规格化
左规:尾数最高的数值位为无效位时,尾数左移,阶码减1
右规:尾数符号位不同时,尾数右移,阶码加1
4,舍入
尾数的位数有限导致的问题,常用方法:0舍入1,恒置1
5,溢出判断
阶码上溢:抛出异常(中断)
阶码下溢:按机器0处理
2,强制类型转换
1,无损
char->int->long->double
float->double
2,有损
int->float:可能会损失精度(float尾数的数值位有1+23位)
float->int:可能会溢出,也可能会损失精度(如小数转整数)
第三章 存储系统
3.1存储系统概述
1,存储器的层次结构
CPU
寄存器(如ACC,MQ等)
Cache(高速缓冲存储器)
主存(内存)
磁盘(辅存)
磁带,光盘(外存)
由上到下,越靠近CPU的速度越快,容量越小,价格越高,主存及以上可用被CPU直接读写
辅存中的数据要被调入主存后才能被CPU访问
主存—辅存:实现虚拟存储系统,解决了主存容量不够的问题(需要硬件+操作系统,通过页面置换算法)
Cache—主存:解决了主存与CPU速度不匹配的问题(这两层之间的数据交换硬件自动完成,经常被访问的代码会被复制一份到Cache)
2,存储器的分类
1,按照存储介质分类
-
半导体存储器(如主存,cache)
-
以磁性材料存储信息(磁盘,磁带)
-
以光介质存储信息(光盘)
2,按存取方式分类
- 随机存取存储器(RAM,如内存)
读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关
- 顺序存取存储器(SAM,如磁带)
读写一个存储单元所需时间取决于存储单元所在的物理位置
- 直接存取存储器(DAM,如磁盘,机械硬盘)
既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取。
- 相关联存储器(CAM,如快表)
可以按照内容检索到存储位置进行读写,“快表”就是一种相联存储器
3,按信息可更改性
- 读写存储器
即可读,也可写,如磁盘,内存,cache
- 只读存储器(ROM)
只能读,不能写,如实体音乐专辑通常采用CD-ROM,实体电影采用蓝光光碟,BIOS通常写在ROM中)
4,断电后信息是否消失
断电后,存储信息消失的存储器——易失性存储器(主存、Cache)
断电后,存储信息依然保持的存储器——非易失性存储器(磁盘、光盘)
5,信息读出来后,原信息是否被破坏
信息读出后,原存储信息被破坏——破坏性读出(如DRAM芯片,读出数据后要进行重写)
信息读出后,原存储信息不被破坏——非破坏性读出(如SRAM芯片、磁盘、光盘)
3,存储器的性能指标
1.存储容量:
存储字数×字长(如1M×8位)。MDR位数反映存储字长
2.单位成本:
每位价格=总成本/总容量。
3.存储速度:
数据传输率=数据的宽度/存储周期。数据的宽度即存储字长
TIPS:存储周期=存储时间+恢复时间
3.2主存储器
3.2.1主存储器的基本组成
1,基本半导体元件
MOS管,作为通电开关
电容,存储电荷(根据是否存储了电荷来代表二进制的0/1)
MOS管和电容构成了存储元,电容充电的过程是写数据,放电读数据的过程
2,存储器芯片结构
译码驱动电路:译码器将地址信号转化为字选通线的高低电平
存储矩阵(存储体):由多个存储单元构成,每个存储单元又由多个存储元构成
读写电路:每次读/写一个存储字
地址线,数据线,读写控制线(可能是分开的两根,也可能是单独的一根)
3,寻址
现代计算机通常按字节编址(每个字节),即每个字节对应一个地址
3.2.2 SRAM和DRAM
Dynamic Random Access Memory,即动态RAM
Static Random Access Memory,即静态RAM
DRAM用于主存、SRAM用于Cache
1,两种不同存储元件的差异
两者的核心区别(存储元不一样):
DRAM使用栅极电容存储信息,是破坏性读出,读出后应有重写的操作
SRAM使用双稳态触发器存储信息,非破坏性读出,无需重写,速度更快
类型特点 | SRAM(静态RAM)常用做Cache | DRAM(动态RAM)常用作内存 |
---|---|---|
存储信息 | 双稳态触发器 | 电容 |
破坏性读出 | 非 | 是 |
读出后是否需要重写(再生) | 不用 | 是 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
发热量 | 大 | 小 |
存储成本 | 高 | 低 |
易失/非易失性存储器 | 易失(断电后信息消失) | 易失(断电后信息消失) |
需要刷新? | 不需要 | 需要(分散,集中,异步)由存储器独立完成,不需要CPU控制 |
送行列地址 | 同时送 | 分两次发送(地址线复用技术,导致地址线,地址引脚减半) |
2,DRAM的刷新
电容内的电荷只能维持2ms。即便不断电,2ms后信息也会消失
2ms之内必须“刷新”一次(给电容充电)
- 刷新周期
一般为2ms
- 每次刷新多少存储单元
以行为单位,每次刷新一行存储单元
- 为什么要用行列地址
减少选通线的数量
- 如何刷新
有硬件支持,读出一行信息后重新写入,占用一个读/写周期
- 什么时刻刷新
分散刷新,集中刷新,异步刷新
3,DRAM的地址复用技术
行列地址分两次送,可使得地址线更少,芯片引脚更少
3.2.3 只读存储器ROM
RAM芯片——易失性,断电后数据消失
ROM芯片——非易失性,断电后数据不会丢失
1,掩膜式只读存储器(MROM)
(Mask Read-Only Memory)
厂家按照客户需求,在芯片生产过程中直接写入信息,之后任何人不可重写(只能读出)可靠性高、灵活性差、生产周期长、只适合批量定制
2,一次性可编程只读ROM(PROM)
Programmable Read-Only Memory
用户可用专门的PROM写入器写入信息,写一次之后就不可更改
3,可擦除可编程只读存储器(EPROM)
(Erasable Programmable Read-Only Memory)
允许用户写入信息,之后用某种方法擦除数据,可进行多次重写
分为UVEPROM和EEPROM
- UVEPROM (ultraviolet rays)
用紫外线照射8~20分钟,擦除所有信息
- EEPROM(也常记为E2PROM,第一个E是Electrically)
可用“电擦除”的方式,擦除特定的字
4,闪速存储器(Flash Memory)
U盘,SD卡就是闪存
在EEPROM基础上发展而来,断电后也能保存信息,且可进行多次快速擦除重写
注意:由于闪存需要先擦除在写入,因此闪存的“写”速度要比“读”速度更慢。
5,固态硬盘(Solid State Drivers,SSD)
由控制单元+存储单元(Flash芯片)构成,与闪速存储器的核心区别在于控制单元不一样,但存储介质都类似,可进行多次快速擦除重写。SSD速度快、功耗低、价格高。目前个人电脑上常用SSD取代传统的机械硬盘
6,小结
-
主存由RAM和ROM(用来启动的BIOS)组成,两者是同一编址
-
很多ROM芯片虽然名字是“Read-Only”,但很多ROM也可以“写”
-
闪存的写速度一般比读速度更慢,因为写入前要先擦除
-
RAM芯片是易失性的(随机存取),ROM芯片是非易失性的。很多ROM也具有“随机存取”的特性
3.3 主存储器与CPU的连接
3.3_1 主存储器与CPU的连接
1,单块存储芯片与CPU的连接
MAR和MDR都在CPU里面,MDR通过数据总线和主存进行数据交互,MAR通过地址总线和数据进行交互。
译码驱动电路,存储矩阵,读写电路,地址线,数据线,片选线,读写控制线
2,多块存储芯片与CPU的连接
- 位扩展法
增加主存的存储字长
8片8K×1位的存储芯片
→1个8K×8位的存储器,容量8KB
- 字扩展法
增加主存的存储字数,分为线选法和片选法
线选法 | 译码片选法(实际更多在用) |
---|---|
n条线——>n个片选信号 | n条线——>2^n个片选信号 |
电路简单 | 电路复杂 |
地址空间不连续 | 地址空间连续 |
- 字位同时扩展法
选择存储器芯片,与CPU进行连接
3,关于译码器的知识补充
3.3_2双端RAM和多模块存储器
1,存储周期
连续读/写的最短时间间隔
存储周期T=存储取时间+恢复时间
DRAM芯片(破坏性读)的恢复时间比较长,有可能是存取时间的几倍(SRAM的恢复时间比较短)
而CPU的读写速度比主存快很多,主存恢复时间太长怎么办?可用通过双端口RAM和多模块存储来解决这个问题
2,双端口RAM
作用:优化多核CPU访问一根内存条的速度
支持两个CPU同时访问RAM
可同时读/写不同的存储单元;
可同时读同一个存储单元;
不能同时写(或者一读一写)同一个单元
若发生“冲突”,则发出“BUSY”信号,其中一个CPU的访问端口暂时关闭
3,多模块存储器
1,单体多字存储器
每次只能并行读出m个连续字,灵活性比较差
总线宽度也要扩展为m个字
2,多体并行存储器
- 高位交叉编址
理论上多个存储体可用被并行访问,但是由于通常会连续访问,因此实际效果相当于单纯的扩容
- 低位交叉编址!!!
但存储模块数m>=T/r时,可使流水线不间断
每个存储周期内可读写地址连续的m个字
微观上m个存储模块被串行访问,宏观上,每个存储周期内所有模块被并行访问
3.4外部存储器
计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。
所谓“磁表面存储”,是指把某些磁性材料薄薄地涂在金属铝或塑料表面上作为载磁体来存储信息。磁盘存储器、磁带存储器和磁鼓存储器均属于磁表面存储器。
磁表面存储器的优点:
①存储容量大,位价格低;
②记录介质可以重复使用;
③记录信息可以长期保存而不丢失,甚至可以脱机存档;
④非破坏性读出,读出时不需要再生。
磁表面存储器的缺点:
①存取速度慢;
②机械结构复杂;
③对工作环境要求较高。
外存储器既可以作为输入设备,也可以作为输出设备。
(既可以存数据,也可以读数据)
3.4.1 磁盘存储器
1,磁盘原理
1,磁盘设备的组成
存储区域。一块硬盘含有若干记录面,每个记录面划分为若干磁道,而每条磁道又划分
为若干扇区,扇区(也称块)是磁盘读写的最小单位,即磁盘按块存取。
- 存储区域
一块硬盘含有若干记录面,每个记录面划分为若干磁道,而每条磁道又划分为若干扇区,扇区(也称块)是磁盘读写的最小单位,即磁盘按块存取。
磁头数(Heads):即记录面数,表示硬盘总共有多少个磁头,磁头用于读取/写入盘片上记录面的信息,一个记录面对应一个磁头。
柱面数(Cylinders):表示硬盘每面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面。
扇区(Sectors):表示每条磁道上有多少个扇区。
- 硬盘存储器
硬盘存储器由磁盘驱动器、磁盘控制器和盘片组成。
磁盘驱动器:核心部件是磁头组件和盘片组件,温彻斯特盘是一种可移动磁头固定盘片的硬盘存储器。
磁盘控制器:硬盘存储器和主机的接口,主流的标准有IDE、SCSI、SATA等。
2,磁盘的性能指标
- 容量
一个磁盘所能存储的字节总数称为磁盘容量。磁盘容量有非格式化容量和格式化容量之分。
非格式化容量是指磁记录表面可以利用的磁化单元总数。
格式化容量是指按照某种特定的记录格式所能存储信息的总量。
- 记录密度
记录密度是指盘片单位面积上记录的二进制的信息量,通常以道密度、位密度和面密度表示
道密度是沿磁盘半径方向单位长度上的磁道数;
位密度是磁道单位长度上能记录的二进制代码位数;
面密度是位密度和道密度的乘积。
TIPS:磁盘所有磁道记录的信息量一定是相等的,并不是圆越大信息越多,故每个磁道的位密度都不同。越内侧的磁道位密度越大
- 平均存取时间
平均存取时间=寻道时间(磁头移动到目的磁道)+
旋转延迟时间(磁头定位到所在扇区)+
传输时间(传输数据所花费的时间)
- 数据传输率
磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
假设磁盘转数为r(转/秒),每条磁道容量为N个字节,则数据传输率为D=rN
3,磁盘地址
驱动器号(2bit)|柱面(磁道)号(8bit)|盘面号(4bit)|扇区号(4bit)
确定硬盘|确定移动磁头臂(寻道)|激活某个磁头|通过旋转扇区划过磁头下方
4,硬盘的工作过程
硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制
字,第二步是执行控制字。
硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻既读又写,也不可能在同一时刻读
两组数据或写两组数据。
2,磁盘阵列RAID
RAID(Redundant Array of Inexpensive Disks,廉价冗余磁盘阵列)是将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。
RAID的分级如下所示。在RAID1~RAID5的几种方案中,无论何时有磁盘损坏,都可以随时拔出受损的
磁盘再插入好的磁盘,而数据不会损坏。
RAIDO:无冗余和无校验的磁盘阵列。
RAID1:镜像磁盘阵列。
RAID2:采用纠错的海明码的磁盘阵列。
RAID3:位交叉奇偶校验的磁盘阵列。
RAID4:块交叉奇偶校验的磁盘阵列。
RAID5:无独立校验的奇偶校验磁盘阵列。
1,思想
利用磁盘廉价的特点提高存储性能、可靠性和安全性
2,RAID0
条带化,提高存取速度,没有容错能力
3,RAID1
镜像磁盘互为备份,容量减少一半
4,RAID2~5
通过数据校验提高容错能力
3.4.2固态硬盘SSD
1,原理
基于闪存技术Flash Memory,属于电可擦除ROM,即EEPROM
2,组成
1,闪存翻译层
负责翻译逻辑块号,找到对应页(Page)
2,存储介质
多个闪存芯片(Flash Chip)——每个芯片包含多个块(block)——每个块包含多个页(page)
3,读写性能特性
1,以页为单位读/写
相当于磁盘的“扇区
2,以块为单位“擦除”
擦干净的块,其中的每页都可以写一次,读无限次
3,支持随机访问
系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
4,读快,写慢
读快、写慢。要写的页如果有数据,则不能写入,需要将块内其他页
全部复制到一个新的(擦除过的)块中,再写入新的页
4,与机械硬盘相比的特点
SSD读写速度快,随机访问性能高,用电路控制访问位置;
机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
SSD安静无噪音、耐摔抗震、能耗低、造价更贵
SSD的一个“块“被擦除次数过多(重复写同一个块)可能会坏掉,而机械硬盘的扇区不会因为写的次数太多而坏掉
5,磨损均衡技术
1,思想
将“擦除”平均分布在各个块上,以提升使用寿命
2,动态磨损均衡
写入数据时,优先选择累计擦除次数少的新闪存块
3,静态磨损均衡
SSD监测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的储存任务,让较新的闪存块承担更多的写任务
3.5高速缓冲存储器(Cache)
3.5.1Cache的基本概念和原理
1,工作原理
将某些主存块复制到Cache中,缓和CPU与主存之间的速度矛盾
注:实际上,Cache被集成在CPU内部
Cache用SRAM实现,速度快,成本高
2,局部性原理
基于局部性原理,不难想到,可以把CPU目前访问的地址“周围”的部分数据放到Cache中
1,时间局部性
在最近的未来要用到的信息,很可能是现在正在使用的信息
2,空间局部性
在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的
3,性能分析
1,理解Cache命中率、缺少率
命中率H:CPU欲访问的信息已在Cache中的比率
缺失(未命中)率M=1-H
2,两种方式
先访问Cache,发现未命中再访问主存
同时访问Cache和主存,若Cache命中则停止访问主存
4,其它概念
主存与Cache之间以“块”为单位进行数据交换
主存的“块”又叫“页/页框/页面”;Cache的“块”又叫“行”
主存地址可拆分为(主存块号,块内地址)的形式
3.5.2Cache—主存之间的映射方式
1,Cache中存储的信息
有效位(0/1)+标记+整块数据
其中“标记”用于指明对应的内存块,不同映射方式,“标记”的位数不同
2,全相联映射
1,概念
主存块可以放到Cache的任意位置
2,主存地址结构
标记(整个主存块号)+块内地址
3,优缺点
优点:Cache存储空间利用充分,命中率高;
缺点:查找“标记”最慢,有可能需要对比所有行的标记
3,直接映射
1,概念
主存块只能放到特定的某个Cache行,行号=主存块号%总行数
2,主存地址结构
标记(主存块号前几位)+行号(主存块号末几位)块内地址
3,优缺点
优点:对于任意一个地址,只需对比一个“标记”,速度最快;
缺点:Cache存储空间利用不充分,命中率低
4,组相联映射
1,概念
主存块可以放到特定分组中的任意位置,所属组号=主存块号%总组数
2,主存地址结构
标记(主存块号前几位)+组号(主存块号末几位)块内地址
3,优缺点
优点:另外两种方式的折中,综合效果较好
术语:n路组相联映射——每n个Cache行为一组
3.5.3Cache替换算法
Cache很小,主存很大,当Cache满了要怎么办
1,随机算法(RAND)
若Cache已满,则随机选择一块替换
过于Freestyle,效果很差
2,先进先出算法(FIFO)
优先替换最先被调入Cache的主存块
不遵循局部性原理,效果差
3,近期最少使用算法(LRU)
将最久没有被访问过的主存块替换。每个Cache行设置一个“计数器”,用于记录多久没被访问
基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。
4,最不经常使用(LFU)
将被访问次数最少的主存块替换。每个Cache行设置一个“计数器”,用于记录被访问过多少次
曾经被经常访问的主存块在未来不一定会用到,LFU实际运行效果不好
3.5.4Cache写策略
CPU修改了Cache中的数据副本,如何确保主存中数据母本的一致性?
——Cache写策略
1,写命中
1,全写法(写直通法,write-through)
当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲(write buffer)
2,写回法(write-allocate)
当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存
2,写不命中
1,写分配法
当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用。
2,非写分配法
当CPU对Cache写不命中时只写入主存,不调入Cache。通常搭配全写法使用。
3,多级Cache
现代计算机通常采用多级Cache结构,各级Cache间常采用“全写法+非写分配法”,Cache和主存间常采用“写回法+写分配法”
3.6虚拟存储器
3.6.1页式存储
1,概念
页式存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的“页面”,
“页面”大小与“块”的大小相同。每个页面可以离散地放入不同的主存块中。
页面是逻辑上的概念,块是物理层面上的概念
2,虚地址和实地址
逻辑地址(虚地址):程序员视角看到的地址
物理地址(实地址):实际在主存中的地址
逻辑地址=逻辑页号+页内地址
(虚地址=虚页号+页内地址)
物理地址=主存块号+页内地址
(实地址=实页号+页内地址)
CPU执行的机器指令中,使用的是“逻辑地址”,因此需要通“页表”将逻辑地址转为物理地址。
页表的作用:记录了每个逻辑页面存放在哪个主存块中
3.6.2虚拟存储器
1,虚拟存储系统
把辅存的一部分数据调入内存
2,页式虚拟存储器
将程序拆分成大相等的页面
有效位:这个页面是否已调入主存
脏位:这个页面是否被修改过
引用位:用于“页面置换算法”,比如,可以用来统计这个页面被访问过多少次
物理页:即主存块号
磁盘地址:即这个页面的数据在磁盘中的存放位置
3,段式虚拟存储器
按照功能模块将程序拆分成成一段一段的
把程序按逻辑结构分段,每段再划分为固定大小的页,
主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。
每个程序对应一个段表,每段对应一个页表。
虚拟地址:段号+段内页号+页内地址
第四章 指令系统
4.1指令系统
4.1.1指令格式
一条指令由操作码、地址码组成,其中地址码可能有0~4个
指令是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成该计算机的指令系统,也称为指令集。
1,按地址码数目分类
1,零地址指令
指令含义:1.不需要操作数,如空操作、停机、关中断等指令
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
2,一地址指令
1.只需要单操作数,如加l、减1、取反、求补等,指令含义:OP(A1)→A1,完成一条指令需要3次访存:取指→读A1→写A1
2.需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
指令含义:(ACC)OP(A1)→ACC
完成一条指令需要2次访存:取指→读A1
注:A:指某个主存地址,(A1)表示A1所指向的地址中的内容
3,二地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A1
完成一条指令需要访存4次,取指→读A1→读A2→写A1
4,三地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A3
完成一条指令需要访存4次,取指→读A1→读A2→写A3
5,四地址指令
指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指→读A1→读A2→写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位A4所指地址
2,按指令长度分类
1,指令字长的概念
指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
半字长指令、单字长指令、双字长指令——指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存
2,定长指令字结构
指令系统中所有指令的长度都相等
3,变长指令字结构
指令系统中各种指令的长度不等
3,按操作码长度分类
1,定长操作码指令
指令系统中所有指令的操作码长度都相同n位→2条指令
2,可变操作码指令
指令系统中各指令的操作码长度可变
4,按操作类型分类
1,数据传送类
进行主存和CPU之间的数据传送
如:
LOAD 作用:把存储器(源)中的数据放到寄存器(目的)中
STORE 作用:把寄存器(源)中的数据放到存储器(目的)中
2,运算类
算术逻辑操作,移位操作
- 算术
加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
- 逻辑
与、或、非、异或、位操作、位测试、位清除、位求反
- 移位
算术移位、逻辑移位、循环移位(带进位和不带进位)
3,程序控制类
改变程序执行的顺序
如:
无条件转移JMP
条件转移 JZ:结果为O;JO:结果溢出;JC:结果有进位
调用和返回 CALL和RETURN
陷阱(Trap)与陷阱指令
4,输入输出类
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)
4.1.2扩展操作码指令格式
定长指令字结构+可变长操作码→扩展操作码指令格式
在设计扩展操作码指令格式时,必须注意以下两点:
1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
2)各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
1,定长操作码:
在指令字的最高位部分分配固定的若干位(定长)表示操作码。-一般n位操作码字段的指令系统最大能够表示2”条指令。
-优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
-缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。
2,扩展操作码(不定长操作码):
全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。-最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
-优:在指令字长有限的前提下仍保持比较丰富的指令种类;
-缺:增加了指令译码和分析的难度,使控制器的设计复杂化。
4.2指令的寻址方式
4.2.1指令寻址
1,什么是指令寻址
确定下一条要执行的指令的存放地址(始终由程序计数器PC给出)
2,顺序寻址
(PC)+‘1’—>PC
此处的“1"代表当前取出的指令的指令字长
每次取指令结束后,一定会PC+‘1’
3,跳跃寻址
执行转移类指令导致的PC值改变
4.2.2数据寻址
定义:确定本条指令的地址码指明的真实地址
寻址方式 | 有效地址 | 访存次数(指令执行期间) | 寻址特征 |
---|---|---|---|
隐含寻址 | 程序指定 | 0 | 0000 |
立即寻址 | A即是操作数 | 0 | 0001 |
直接寻址 | EA=A | 1 | 0010 |
一次间接寻址 | EA=(A) | 2 | 0011 |
寄存器寻址 | EA=R1 | 0 | 0100 |
寄存器间接一次寻址 | EA=(R1) | 1 | 0101 |
(转移指令)相对寻址 | EA=(PC)+A | 1 | 0110 |
(多道程序)基址寻址 | EA=(BR)+A | 1 | 0111 |
(循环,数组)变址寻址 | EA=(IX)+A | 1 | 1000 |
堆栈寻址 | 入栈/出栈时EA的确定方式不同 | 硬堆栈不访存,软堆栈访存1次 | 1001 |
1,直接寻址
指令字中的形式地址A就是操作数的真实地址EA,即EA=A。
一条指令的执行:取指令访存1次执行指令访存1次暂不考虑存结果共访存2次
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。
2,间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。
优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。
便于编制程序(用间接寻址可以方便地完成子程序返回)。
缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存)。
3,寄存器寻址
在指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在由Ri所指的寄存器内。
一条指令的执行:取指令访存1次执行指令访存0次暂不考虑存结果共访存1次
优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
缺点:寄存器价格昂贵,计算机中寄存器个数有限。
4,寄存器间接寻址
寄存器间接寻址:寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)。
一条指令的执行:
取指令访存1次
执行指令访存1次
暂不考虑存结果共访存2次
特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
5,隐含寻址
不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址
优点:有利于缩短指令字长。
缺点:需增加存储操作数或隐含地址的硬件
6,立即寻址
形式地址A就是操作数本身,又称为立即数,一般采用补码形式。#表示立即寻址特征。
一条指令的执行:
取指令访存1次
执行指令访存0次
暂不考虑存结果共访存1次
优点:指令执行阶段不访问主存,指令执行时间最短
缺点:A的位数限制了立即数的范围。如A的位数为n,且立即数采用补码时,可表示的数据范围为-2n-1~2n-1-1
4.2.3数据寻址2(偏移寻址)
1,变址寻址
程序员自己决定从哪里作为“起点”
有效地址EA等于指令字中的形式地址A与变址寄存器X的内容相加之和,即EA=(IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器。IX—>index register
- 注:
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址)。
- 优点
在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器Ⅸ的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
2,基址寻址
以程序的起始存放地址作为”起点“
将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。
- 注:
基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。
在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
- 优点:
可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)
3,相对寻址
以程序计数器PC所指地址作为“起点”
把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量(A是相对于下一条指令的偏移量,不是相对于当前指令,因为PC的值已经自动加1了),可正可负,通常用补码表示。
- 优点:
操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令。
4.2.4数据寻址3(堆栈寻址)
堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。
硬堆栈:用专用寄存器组来实现的堆栈,无需访存,速度快,但成本高
软堆栈:用存储器的一块内存来实现的堆栈,需要访存,速度相对硬堆栈慢,成本低,更常用,比如用来保存函数调用时当前函数的相关信息
4.3程序的机器级代码表示
默认是X86架构的汇编语言,不涉及ARM,等其它架构。
4.3.1高级语言与机器代码之间的对应
1,x86汇编语言指令基础
指令的作用:处理数据或者改变程序执行流
指令的格式:操作码+地址码
操作码指明怎么处理
地址码指明数据在哪
数据可用放在寄存器里,主存里,指令里
2,mov
mov 目的操作数,源操作数
将源操作数复制到目的操作数
3,常用的八个寄存器
- 通用寄存器:
EAX,EBX,ECX,EDX(可用来存放任何数据)
E代表Extended,是32bit的意思,ax,bx,cx,dx是16bit的通用寄存器
ah,al分别代表高8位,低8位
- 变址寄存器:
ESI,EDI(可用于线性表,字符串的处理)
- 堆栈寄存器(实现函数调用)
EBP:堆栈基指针
ESP:堆栈顶指针
4.3.2常用的x86汇编指令
1,算术运算类指令
功能 | 英文 | 汇编指令 | 注释 |
---|---|---|---|
加 | add | add d,s | 计算d+s,结果存入d |
减 | subtract | sub d,s | 计算d-s,结果存入d |
乘 | multiply | mul d,s | imul d,s | 无符号数d*s,乘积存入d | 有符号数d * s,乘积存入d |
除 | divide | div s | idiv s | 无符号数除法edx:eax/s,商存入eax,余数存入edx | 有符号数除法edx:eax/s,商存入eax,余数存入edx |
取负数 | negative | neg d | 将d取负数,结果存入d |
自增++ | increase | inc d | 将d++,结果存入d |
自减– | decrease | dec d | 将d–,结果存入d |
2,逻辑运算类指令
功能 | 英文 | 汇编指令 | 注释 |
---|---|---|---|
与 | and | and d,s | 将d,s逐位相与,结果放回d |
或 | or | or d,s | 将d,s逐位相或,结果放回d |
非 | not | not d | 将d逐位取反,结果放回d |
异或 | exclusive or | xor d,s | |
左移 | shift left | shl d,s | |
右移 | shift right | shr d,s |
3,其它类指令
1,实现分支循环的指令
cmp,test,jmp,jxx
2,实现函数调用的指令
push,pop,call,ret
3,实现数据转移的指令
mov
4.3.3_ATu0026T格式和Intel格式
AT&T格式(Unix,Linux常用格式) | Intel格式(Windows的常用格式) | |
---|---|---|
目的操作数d,原操作数s | op s,d(源操作数在左,目的操作数在右) | op d,s(源操作数在右,目的操作数在左) |
寄存器的表示 | mov %ebx,%eax(寄存器名之前必须加”%“) | mov eax,ebx(直接写寄存器名即可) |
立即数的表示 | mov 985 , 985,%eax(立即数之前必须加“ 985,”) | mov eax,985(直接写数字即可) |
主存地址的表示 | mov %eax,(af996h)注:用小括号表示 | mov [af996h],eax注:用中括号表示 |
读写长度的表示 | movb $5,(af996h) movb $5,(af996h) movb $5,(af996h) movb $5,(af996h) 注:指令后加b,w,l分别表示读写长度为byte,word,dword | mov byte ptr[af996h],5 mov byte ptr[af996h],5 mov byte ptr[af996h],5 mov byte ptr[af996h],5 注:在主存地址前说明读写长度byte,word,dword |
主存地址便宜量的表示 | movl -8(%ebx),%eax 注:偏移量(基址) movl 4(%ebx,%ecx, 32),%eax 注:偏移量(基址,变址,比例因子) | mov eax,[ebx-8]注:【基址+偏移量】 mov eax,[ebx+ecx32+4] 注:【基址+变址比例因子+偏移量】 |
4.3.4选择语句的机器级表示
1,jmp
无条件转移指令
jmp<地址>#PC无条件转移至<地址>
jmp128 #<地址>可以用常数给出
jmp eax#<地址>可以来自于寄存器
jmp [999]#<地址>可以来自于主存
jmp NEXT#<地址>可以用‘标号’确定
2,jxxx
条件转移指令
cmp a,b #比较a和b两个数
je<地址>#jump when equal,若a==b则跳转
jne <地址>#jump when not equal,若a!=b则跳转
jg<地址>#jump when greater than,若a>b则跳转
jge<地址>#jump when greater than or equal to,若a>=b则跳转
jl<地址>#jump when less than,若a<b则跳转
jle<地址>#jump when less than or equal to,若a<=b则跳转
举例:
cmp eax,ebx #比较寄存器eax和ebx里的值
jg NEXT#若 eax>ebx,则跳转到NEXT:
4.3.5循环语句的机器级表示
1,用条件转移指令实现循环
用条件转移指令实现循环,需要4个部分构成:
①循环前的初始化
②是否直接跳过循环?
③循环主体
④是否继续循环?
2,用loop指令实现循环
理论上,能用loop指令实现的功能一定能用条件转移指令实现
Looptop: #循环开始
....
loop Looptop #ecx--,若ecx!=0,挑转到Looptop,只能是ecx寄存器,不能是其它的
使用loop指令可能会使代码更清晰简洁
补充:loopx指令——如loopnz,loopz。
loopnz——当ecx!=0&&ZF==0时,继续循环
loopz——当ecx!=0&&ZF==1时,继续循环
4.4CISC和RISC
1,CISC
CISC: Complex Instruction Set ComputerR
设计思路:一条指令完成一个复杂的基本功能。
代表:x86架构,主要用于笔记本、台式机等
80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令
比如设计一套能实现整数、矩阵加/减/乘运算的指令集
CISC的思路:除了提供整数的加减乘指令除之外,还提供矩阵的加法指令、矩阵的减法指令、矩阵的乘法指令
一条指令可以由一个专门的电路完成
有的复杂指令用纯硬件实现很困难→采用“存储程序”的设计思想,由一个比较通用的电路配合存储部件完成一条指令
RISC的思路:只提供整数的加减乘指令一条指令一个电路,电路设计相对简单,功耗更低“并行”、“流水线”
2,RISC
RISC: Reduced Instruction Set Computer
设计思路:一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。
代表:ARM架构,主要用于手机、平板等
3,比较
对比项目 类别 | CISC | RISC |
---|---|---|
指令系统 | 复杂庞大 | 简单精炼 |
指令数目 | 一般大于200条 | 一般小于100条 |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有Load/store资料 |
各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
各种指令使用频度 | 相差很大 | 都比较常用 |
通用寄存器数量 | 较少 | 多 |
目标代码 | 难以用优化编译生成高效的目标代码程序 | 采用优化的编译程序,生成代码比较高效 |
控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
第五章 中央处理器
5.1CPU的功能和基本结构
1,CPU的功能
- 指令控制
完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制
一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制
对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工
对数据进行算术和逻辑运算。
- 中断处理
对计算机运行过程中出现的异常情况和特殊请求进行处理。
2,运算器的功能
对数据加工
3,控制器的功能
协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令
- 取指令:
自动形成指令地址;自动发出取指令的命令。
- 分析指令:
操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。执行指令:
根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及1/0设备完成相应的操作。
- 中断处理:
管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。
4,运算器的基本结构
1.算术逻辑单元:
主要功能是进行算术/逻辑运算。
2.通用寄存器组:
如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
3.暂存寄存器:
用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容。
4.累加寄存器:
它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。
5.程序状态字寄存器:
保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
6.移位器:
对运算结果进行移位运算。
7.计数器:
控制乘除运算的操作步数。
5,控制器的基本结构
1.程序计数器:
用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
2.指令寄存器:
用于保存当前正在执行的那条指令。
3.指令译码器:
仅对操作码字段进行译码,向控制器提供特定的操作信号。
4.微操作信号发生器:
根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
5.时序系统:
用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
6.存储器地址寄存器:
用于存放所要访问的主存单元的地址。
7.存储器数据寄存器:
用于存放向主存写入的信息或从主存中读出的信息。
6,数据通路的基本结构
1,专用通路
专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路。
性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
2,内部总线
CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。
结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。
7,CPU的基本结构
ALU(运算器),寄存器,CU(控制单元),中断系统
其中寄存器分为用户可见(可编程)的和用户不可见的
用户可见的:
通用寄存器组,程序状态字寄存器PSW,程序计数器PC,累加器ACC
不可见的:
指令寄存器IR
暂存寄存器DR
存储器地址寄存器MAR
存储器数据寄存器MDR
5.2指令执行过程
1,指令周期
指令周期是CPU从主存中每取出并执行一条指令所需的全部时间
指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。
一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。
指令周期包括四个( 不一定都有):取指周期,间址周期,执行周期,中断周期
通过四个标志触发器(FE,IND,EX,INT)判断是四个周期的哪个阶段
2,数据流
1,取指周期
根据PC中的内容取出指令代码并存放到IR中
2,间指周期
根据IR中的指令地址码取操作数有效地址
3,执行周期
根据指令字的操作码和操作数进行相应的操作
4,中断周期
保存断点,送中断向量,处理中断请求
3,执行方案
1,单指令周期
所有指令选用相同的执行时间(所有类型的指令的指令周期相同),指令间串行,指令周期取决于执行时间最长的指令的执行时间。
会降低整个系统的运行速度
2,多指令周期
不同类型的指令周期选用不同的执行步骤,指令间串行,可选用不同个数的时钟周期来完成不同指令的执行过程。
需要更复杂的硬件设计。
3,流水线方案
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。指令之间并行执行。
5.3数据通路的功能和基本结构
5.3.1单总线结构
1,数据通路功能
数据通路:数据在功能部件之间传送的路径。
信息从哪里开始中间经过哪些部件最后传到哪里
内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线;
系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类l/0接口间互相连接的总线。
2,单总线的三种情况
- 1,寄存器之间的数据传递
- 2,主存与CPU之间的数据传输
- 3,执行算术或逻辑运算
5.3.2专用通路结构
单总线结构在同一时刻,只允许两个部件之间进行数据流通
专用数据通路可以支持 多个部件之间同时进行数据流通
5.4控制器的功能和工作原理
5.4.1硬布线控制器的设计
设计步骤:
1.分析每个阶段的微操作序列
- 取指周期(所有指令都一样)
PC → MAR
1→R
M(MAR)→ MDR
MDR → IR
OP(IR)→ID
(PC)+1→PC
- 间址周期(所有指令都一样)
Ad(IR)→ MAR
1→R
M(MAR)→ MDR
MDR→ Ad(IR)
- 执行周期(各不相同)
2.选择CPU的控制方式
假设采用同步控制方式(定长机器周期),一个机器周期内安排3个节拍。
3.安排微操作时序
- 原则一
微操作的先后顺序不得随意更改
- 原则二
被控对象不同的微操作尽量安排在一个节拍内完成
- 原则三
占用时间较短的微操作尽量安排在一个节拍内完成,并允许有先后顺序
4.电路设计
(1)列出操作时间表
(2)写出微操作命令的最简表达式
(3)画出逻辑图
硬布线控制器的特点:
指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)
如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。
由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。
5.4.2微程序控制器的基本原理
1,概念对比
程序:由指令序列组成
微程序:由微指令序列组成,每一种指令对应一个微程序
指令是对程序执行步骤的描述
微指令是对指令执行步骤的描述
微命令与微操作一一对应
微指令中可能包含多个微命令
指令周期:从主存取出并执行一条机器指令所需的时间
微周期(微指令周期):从控制器存储器取出一条微指令并执行相应微操作所需的时间,微指令可能对应一个或多个微操作
小结:
微命令就是微操作,一个微指令控制多个微命令,一个微程序由多个微指令组成,一个机器指令对应一个微程序
2,CU的结构
1,微地址形成部件
产生初始微地址和后继微地址,以保证微指令的连续执行。
2,顺序逻辑
根据某些机器标志和时序信息确定下一条微指令的存放地址
3,CMAR(uPC)
微地址寄存器,接收微地址形成部件送来的微地址,为在CM中读取微指令作准备。
4,地址译码器
将地址码转化为存储单元控制信号。
5,控制存储器CM
用于存放各指令对应的微程序,控制存储器用只读存储器ROM构成。
6,CMDR(uR)
用于存放从CM中取出的微指令,它的位数同微指令字长相等。
3,工作原理
处理取指周期、间址周期、中断周期的微指令序列通常是公用的。执行周期的微指令序列各不相同
指令周期=取址周器一>间址周期一>执行周期一>中断周期。其中间址、中断周期可有可无
取指周期的微指令序列固定从#0开始存放。执行周期的微指令序列的存放根据指令操作码确定
5.4.3微指令的设计
1,微指令的格式
相容性微命令:可以并行完成的微命令。
互斥性微命令:不允许并行完成的微命令。
1,水平型微指令
一条微指令能定义多个可并行的微命令。
优点:微程序短,执行速度快;
缺点:微指令长,编写微程序较麻烦。
2,垂直型微指令
一条微指令只能定义一个微命令,由微操作码字段规定具体功能
优点:微指令短、简单、规整,便于编写微程序;
缺点:微程序长,执行速度慢,工作效率低。
3,混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作。
微指令较短,仍便于编写;微程序也不长,执行速度加快。
2,水平型微指令的编码格式
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
1,直接编码(直接控制)
控制码的每个bit位对应一个微命令,微指令执行速度最快
优点:简单、直观,执行速度快,操作并行性好。
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大。
2,字段直接编码
将互斥性的微命令分在同一个段内,相容的分在不同的段
每个段留出一个状态表示“不操作”
微指令操作码需要经过译码电路处理,因此执行速度更慢
将微指令的控制字段分成若干“段”,每段经译码后发出控制信号
微命令字段分段的原则:
①互斥性微命令分在同一段内,相容性微命令分在不同段内。
②每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
③一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。
优点:可以缩短微指令字长。
缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
3,字段间接编码
一个字段的微命令需要用另一个字段的微命令解释
可能需要多级译码电路处理,执行速度最慢
3,下一条微指令地址的形成方式
1,断定法(下地址法):
微指令格式中设置一个下地址字段,由微指令的下地址字
段直接指出后继微指令的地址,这种方式又称为断定方式。
2,计数器法
(CMAR)+1→CMAR
3,根据机器指令操作码确定执行周期微程序首地址
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。
4,由专门的硬件指明取指/中断周期的微程序首地址
第一条微指令地址由专门硬件产生(用专门的硬件记录取指周期微程序首地址)
中断周期由硬件产生中断周期微程序首地址(用专门的硬件记录)
5.4.4微程序控制单元的设计
1,设计步骤
1.分析每个阶段的微操作序列
2.写出对应机器指念的微操作命令及节拍安排
(1)写出每个周期所需要的微操作(参照硬布线)
(2)补充微程序控制器特有的微操作:
a.取指周期:
Ad (CMDR) → CMAR
OP(IR)→ CMAR
b.执行周期:
Ad(CMDR) →CMAR
3.确定微指令格式
根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数。
根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数。
最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
4.编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
2,微程序设计分类
1,静态微程序设计和动态微程序设计
静态微程序无需改变,采用ROM
动态通过改变微指令和微程序改变机器指令
有利于仿真,采用EPROM
2,毫微程序设计
毫微程序设计的基本概念
微程序设计用微程序解释机器指令
毫微程序设计用毫微程序解释微程序
毫微指令与微指令的关系好比微指令与机器指令的关系
3,硬布线与微程序的比较
微程序控制器 | 硬布线控制器 | |
---|---|---|
工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路 |
根据当前的指令码、状态和时序,即时产生 | ||
执行速度 | 慢 | 快 |
规整性 | 较规整 | 烦琐,不规整 |
应用市场 | CISC CPU(如X86) | RISC CPU |
易扩充性 | 易扩充修改 | 困难 |
5.6指令流水线
5.6.1指令流水线的基本概念
1,基本概念
一条指令的执行过程可以分成多个阶段(或过程)
根据计算机的不同,具体的分法也不同。
**取指:**根据PC内容访问主存储器,取出一条指令送到IR中。
**分析:**对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。
**执行:**根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。
1,顺序执行方式
一条指令执行完了才去执行下一条指令
传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有
一条指令在执行,各功能部件的利用率很低。
2,一次重叠执行方式
第二条指令的第一个阶段和第一个指令的第一个阶段同时执行
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。
3,二次重叠执行方式
与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。
2,表示方法
指令流程图:主要用于分析影响流水线的因素和指令执行过程
时空图:主要用于分析流水线的性能
3,性能指标
1,吞吐率
吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。
设任务数为n;处理完成n个任务所用的时间为T
则计算流水线吞吐率(TP)的最基本的公式为TP=n/Tk
Tk =(k+n-1) At
流水线的实际吞吐率为
TP =n/(k+n-1)At
当连续输入的任务n→oo时,得最大吞吐率为TPma=l/A。
2,加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
设T。表示不使用流水线时的执行时间,即顺序执行所用的时间;T表示使用流水线时的执行时间
则计算流水线加速比(s)的基本公式为S=To/Tk
当连续输入的任务n→无穷时,最大加速比为Smax=K
实际加速比为
S=(k+n-1)At k+n-1
3,效率
流水线的设备利用率称为流水线的效率。
在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。
则流水线效率(E)的一般公式为E=(n个任务占用k时空区有效面积/n个任务所用的时间与k个流水段所围成的时空区总面积)=To/TK
5.6.2指令流水线的影响因素和分类
1,影响因素
1,结构相关(资源冲突,互斥)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
解决办法:
1.后一相关指令暂停一周期
2.资源重复配置:
数据存储器+指令存储器
2,数据相关(数据冲突,同步)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
解决办法:
1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
2.数据旁路技术。
3.编译优化:通过编译器调整指令顺序来解决数据相关
3,控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
解决办法:
1.转移指令分支预测。简单预测(永远猜ture或false)、动态预测(根据历史情况动态调整)
2.预取转移成功和不成功两个控制流方向上的目标指令
3.加快和提前形成条件码
4.提高转移方向的猜准率
2,分类
1,部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶
差、对阶、尾数相加以及结果规格化等4个子过程。
处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5
个子过程。
处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放
在与下一个处理机所共享的存储器中。
2.单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
单功能流水线指只能实现一种固定的专门功能的流水线:
多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
3.动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这
对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
4.线性流水线和非线性流水线
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线
适合进行线性递归的运算。
3,流水线多发技术
- 超标量技术
- 超流水技术
- 超长指令字
5.6.3五段式指令流水线
①IF取指→②ID译码&取数→③EX执行→④M访存→⑤WB写回寄存器
运算类指令、LOAD指令、STORE指令、条件转移指令、无条件转移指令
5.7多处理器
5.7.1多处理器的基本概念
基于指令流的数量和数据流的数量,将计算机体系结构分为SISD、SIMD、MISD和MIMD四类。常规的单处理器属于SISD,而常规的多处理器属于MIMD。
1,SISD(单指令流单数据流)
特性
各指令序列只能并发,不能并行,每条指令处理一两个数据,不支持数据并行技术
硬件组成
一个处理器+一个主存储器,若采用指令流水线,需设置多个功能部件,采用多模块交叉存储器
2,SIMD(单指令多数据流)
特性
各指令序列只能并发,不能并行,但每条指令可以同时处理多个具有相同特征的数据,是一种数据并行技术
硬件组成
一个指令控制部件(CU)+多个处理单元/执行单元(如ALU)+多个局部存储器+一个主存储器
每个执行单元有各自的寄存器组、局部存储器、地址寄存器
不同执行单元执行同一条指令,处理不同的数据
3,MISD(多指令流单数据流)
多条指令并行执行,处理同一个数据。现实中不存在这种计算机
4,MIMD(多指令流多数据流)
特性
各指令序列并行执行,分别处理多个不同的数据
是一种线程级并行、甚至是线程级以上并行技术
进一步分类
- 多处理器系统(共享存储多处理器系统)
特性:各处理器之间,可以通过LOAD/STORE指令,访问同一个主存储器,可通过主存相互传送数据
硬件组成:一台计算机内,包含多个处理器+一个主存储器,多个处理器共享单一的物理地址空间
- 多计算机系统
特性:各算机之间,不能通过LOAD/STORE指令直接访问对方的存储器,只能通过“消息传递”相互传送数据
硬件组成:由多台计算机组成,因此拥有多个处理器+多个主存储器。每台计算机拥有各自的私有存储器,物理地址空间相互独立
5,向量处理机(SIMD思想的进阶应用)
特性:
一条指令的处理对象是“向量”
擅长对向量型数据并行计算、浮点数运算,常被用于超级计算机中,处理科学研究中巨大运算量
硬件组成:
多个处理单元,多组“向量寄存器”主存储器应采用“多个端囗同时读取”的交叉多模块存储器
主存储器的大小限定了机器的解题规模,因此要有大容量的、集中式的主存储器
6,共享内存多处理器(SMP)
一多个处理器共享一个主存储器多个处理器共享单一的地址空间,都可以通过LOAD、STORE指令访问共享的主存储器
5.7.2硬件多线程的基本概念
细粒度多线程 | 粗粒度多线程 | 同时多线程(SMT) | |
---|---|---|---|
指令发射 | 轮流发射各线程的指令(每个时钟周期发射一个线程) | 连续几个时钟周期,都发射同一线程的指令序列,流水线阻塞时,切换另一个线程 | 一个时钟周期内,同时发射多个线程的指令 |
线程切换率 | 每个时钟周期切换一次线程 | 只有流水线阻塞时才切换一次线程 | NULL |
线程切换代价 | 低 | 高,需要重载流水线 | NULL |
并行性 | 指令级并行,线程间不并行 | 指令级并行,线程间不并行 | 指令级并行,线程级并行 |
第六章 总线
6.1总线概述
6.1.1总线基本概念与分类
1,总线的定义
总线是一组能为多个部件分时共享的公共信息传送线路。
共享是指总线上可以挂接多个部件,各个部件之间互相交换的信息都可以通过这组线路分时共享。
分时是指同一时刻只允许有一个部件向总线发送信息,如果系统中有多个部件,则它们只能分时地向总线发送信息。
2,总线的特性
1.机械特性:尺寸、形状、管脚数、排列顺序
2.电气特性:传输方向和有效的电平范围
3.功能特性:每根传输线的功能(地址、数据、控制)
4.时间特性:信号的时序关系
3,总线的分类
1,按数据传输格式
-
串行总线(一次只传输一个bit)
优点:只需要一条传输线,成本低廉,广泛应用于长距离传输;
应用于计算机内部时,可以节省布线空间。
缺点:在数据发送和接收的时候要进行拆卸和装配,要考虑串行一并行转换的问题。 -
并行总线
优点:总线的逻辑时序比较简单,
电路实现起来比较容易。
缺点:信号线数量多,占用更多的布线空间;远距离传输成本高昂;由于工作频率较高时,并行的信号线之间会产生严重干扰,对每条线等长的要求也越高,所以无法持续提升工作频率。
2,按总线的功能(连接的部件)
-
片内总线
片内总线是芯片内部的总线。
它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线。 -
系统总线
系统总线是计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线。
按系统总线传输信息内容的不同,又可分为3类:数据总线、地址总线和控制总线。1)数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数与机器字长、存储字长有关。
2)地址总线用来指出数据总线上的源数据或目的数据所在的主存单元或l/0端口的地址,它是单向传输总线,地址总线的位数与主存地址空间的大小有关。
3)控制总线传输的是控制信息,包括CPU送出的控制分令和主存(或外设)返回CPU的反馈信号。 -
通信总线
通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线。
3,按时序控制方式
同步总线和异步总线
4,系统总线的结构
1,单总线结构
-
结构:CPU、主存、I/O设备(通过I/O接口)都连接在一组总线上,允许I/O设备之间、I/O设备和CPU之间或I/O设备与主存之间直接交换信息。
-
优点:结构简单,成本低,易于接入新的设备。
-
缺点:带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作。
注:单总线并不是指只有一根信号线,系统总线按传送信息的不同可以细分为地址总线、数据总线和控制总线。
2,双总线结构
- 结构:双总线结构有两条总线,一条是主存总线,用于CPU、主存和通道之间进行数据传送;另一条是/0总线,用于多个外部设备与通道之间进行数据传送。
- 优点:将较低速的I/0设备从单总线上分离出来,实现存储器总线和I/0总线分离。
- 缺点:需要增加通道等硬件设备。
支持突发(猝发)传送:送出一个地址,收到多个地址连续的数据。
通道是具有特殊功能的处理器,能对I/0设备进行统一管理。通道程序放在主存中。
3,三总线结构
- 结构:三总线结构是在计算机系统各部件之间采用3条各自独立的总线来构成信息通路,这3条总线分别为主存总线、1/0总线和直接内存访问DMA总线。
- 优点:提高了l/O设备的性能,使其更快地响应命令,提高系统吞吐量。
- 缺点:系统工作效率较低。因为这三个总线同一时刻只能有一个在工作
6.1.2总线的性能指标
1.总线的传输周期(总线周期)
一次总线操作所需的时间(包括申请(仲裁)阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期构成。
2.总线时钟周期
即机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制。
3.总线的工作频率
总线上各种操作的频率,为总线周期的倒数。实际上指一秒内传送几次数据。
4.总线的时钟频率
即机器的时钟频率,为时钟周期的倒数。实际上指一秒内有多少个时钟周期。
5.总线宽度
又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位(bit)总线。
6.总线带宽
可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)表示。总线带宽=总线工作频率×总线宽度(bit/s)=总线工作频率×(总线宽度/8)(B/s)
7.总线复用
总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线传输更多的信息,从而节省了空间和成本。
8.信号线数
地址总线、数据总线和控制总线3种总线数的总和称为信号线数。
6.2总线仲裁(408不考,简单了解即可)
同一时刻只能有一个设备控制总线传输操作,可以有一个或多个设备从总线接收数据。
将总线上所连接的各类设备按其对总线有无控制功能分为:
主设备:获得总线控制权的设备。
从设备:被主设备访问的设备,只能响应从主设备发来的各种总线命令。
为什么要仲裁?
总线作为一种共享设备,不可避免地会出现同一时刻有多个主设备竞争总线控制权的问题。
总线仲裁的定义:
多个主设备同时竞争主线控制权时,以某种方式选择一个主设备优先获得总线控制权称为总线仲裁。
1,集中仲裁方式
工作流程:
1.主设备发出请求信号;
2.若多个主设备同时要使用总线,则由总线控制器的判优、仲裁逻辑按一定的优先等级顺序确定哪个主设备能使用总线;
3.获得总线使用权的主设备开始传送数据。
1,链式查询方式
“总线忙”信号的建立者是获得总线控制权的设备
优先级:
离总线控制器越近的部件,其优先级越高;离总线控制器越远的部件,其优先级越低。
优点:链式查询方式优先级固定。只需很少几根控制线就能按一定优先次序实现总线控制,结构简单,扩充容易。
缺点:对硬件电路的故障敏感,并且优先级不能改变。当优先级高的部件频繁请求使用总线时,会使优先级较低的部件长期不能使用总线。
2,计数器定时查询方式
- 结构特点:
用一个计数器控制总线使用权,相对链式查询方式多了一组设备地址线,少了一根总线响应线BG;它仍共用一根总线请求线。
- 优点:
1.计数初始值可以改变优先次序
-计数每次从“0”开始,设备的优先级就按顺序排列,固定不变;
-计数从上一次的终点开始,此时设备使用总线的优先级相等:
-计数器的初值还可以由程序设置
2.对电路的故障没有链式敏感
- 缺点:
1.增加了控制线数
-若设备有n个,则需[logzn]+2条控制线
2.控制相对比链式查询相对复杂
3,独立请求方式
- 结构特点:
每一个设备均有一对总线请求线BR;和总线允许线BGi。
- 优点:
1.响应速度快,总线允许信号BG直接从控制器发送到有关设备,不必在设备间传递或者查询。
2.对优先次序的控制相当灵活。
- 缺点:
1.控制线数量多
-若设备有n个,则需要2n+1条控制线。其中+1为BS线,用于设备向总线控制部件反馈已经是否正在使用总线。
2.总线的控制逻辑更加复杂
2,分布仲裁方式
特点:不需要中央仲裁器,每个潜在的主模块都有自己的仲裁器和仲裁号,多个仲裁器竞争使用总线。
当设备有总线请求时,它们就把各自唯一的仲裁号发送到共享的仲裁总线上;
每个仲裁器将从仲裁总线上得到的仲裁号与自己的仲裁号进行比较;
如果仲裁总线上的号优先级高,则它的总线请求不予响应,并撤销它的仲裁号;
最后,获胜者的仲裁号保留在仲裁总线上。
6.3总线操作和定时器
1,总线传输的四个阶段
1,申请分配阶段:
由需要使用总线的主模块(或主设备)提出申请,经总线仲裁机构决定将下一传输周
期的总线使用权授予某一申请者。也可将此阶段细分为传输请求和总线仲裁两个阶段。
2,寻址阶段:
获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启动参与本次
传输的从模块。
3,传输阶段:
主模块和从模块进行数据交换,可单向或双向进行数据传送。
4,结束阶段:
主模块的有关信息均从系统总线上撤除,让出总线使用权。
2,定时
总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,它的实质是一种协议或规则
1,同步通信(同步定时方式)由统一时钟控制数据传送
总线控制器采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。
若干个时钟产生相等的时间间隔,每个间隔构成一个总线周期。
在一个总线周期中,发送方和接收方可进行一次数据传送。
因为采用统一的时钟,每个部件或设备发送或接收信息都在固定的总线传送周期中,一个总线的传送周期结束,下一个总线传送周期开始。
优点:传送速度快,具有较高的传输速率;总线控制逻辑简单。
缺点:主从设备属于强制性同步;不能及时进行数据通信的有效性检验,可靠性较差。
同步通信适用于总线长度较短及总线所接部件的存取时间比较接近的系统。
2,异步通信(异步定时方式)采用应答方式,没有公共时钟标准
在异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依靠传送双方相互制约的“握手”信号来实现定时控制。
主设备提出交换信息的“请求”信号,经接口传送到从设备;从设备接到主设备的请求后,通过接口向主设备发出“回答”信号。
优点:总线周期长度可变,能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换,自动适应时间的配合。
缺点:比同步控制方式稍复杂一些,速度比同步定时方式慢。
根据“请求”和“回答”信号的撤销是否互锁,分为以下3种类型。
1)不互锁方式 (速度最快,可靠性最差)
主设备发出“请求”信号后,不必等到接到从设备的“回答”信号,而是经过一段时间,便撤销“请求”信号。
而从设备在接到“请求”信号后,发出“回答”信号,并经过一段时间,自动撤销“回答”信号。双方不存在互锁关系。
2)半互锁方式
主设备发出“请求”信号后,必须待接到从设备的“回答”信号后,才撤销“请求”信号,有互锁的关系。
而从设备在接到“请求”信号后,发出“回答”信号,但不必等待获知主设备的“请求”信号已经撤销,而是隔一段时间后自动撤销“回答”信号,不存在互锁关系。
3)全互锁方式 (最可靠,速度最慢)
主设备发出“请求”信号后,必须待从设备“回答”后,才撤销“请求”信号;
从设备发出“回答”信号,必须待获知主设备“请求”信号已撤销后,再撤销其“回答”信号。双方存在互锁关系。
3,半同步通信 同步、异步结合
统一时钟的基础上,增加一个“等待”响应信号
4,分离式通信 充分挖掘系统总线每瞬间的潜力
分离式通信的一个总线传输周期
子周期1主模块申请占用总线,使用完后放弃总线的使用权
子周期2从模块申请占用总线,将各种信息送至总线上
特点:
1.各模块均有权申请占用总线
2.采用同步方式通信,不等对方回答
3.各模块准备数据时,不占用总线
4.总线利用率提高
6.4总线标准(408不考,简单了解即可)
总线标准是国际上公布或推荐的互连各个模块的标准,它是把各种不同的模块组成计算机系统时必须遵守的规范。按总线标准设计的接口可视为通用接口,在接口的两端,任何一方只需根据总线标准的要求完成自身方面的功能要求,而无须了解对方接口的要求。
根据总线在计算机系统中的位置,可分为
系统总线:通常与CPU直接相连,用于连接CPU与北桥芯片、或CPU与主存等
局部总线:没有直接与CPU连接,通常是连接高速的北桥芯片,用于连接了很多重要的硬件部件(如显卡、声卡等)
设备总线、通信总线:通常由南桥芯片控制,用于连接计算机与计算机,或连接计算机与外部1/0设备
1,系统总线
1,ISA
2,EISA
3,FBS、QPI
2,局部总线
1,VESA
2,PCI
3,AGP
4,PCI-E
3,设备总线(通信总线)
1,RS-232C
2,SCSI
3,PCMCIA
4,USB
5,IDE(ATA)
6,SATA
第七章 输入/输出系统
7.1IO系统基本概念
7.1.1输入输出系统和IO控制方式
1,基本概念
I/O设备就是可以将数据输入到计算机(主机,CPU和主存储器),或者可以接收计算机输出数据的外部设备
1,IO硬件
包括外部设备、I/O接口、I/O总线等。
2,IO软件
包括驱动程序、用户程序、管理程序、升级补丁等。
-
I/O指令是CPU指令的一部分(注:l/O指令与普通指令格式略有不同,操作码指明了CPU要对I0接口做什么,命令码指明了10接口要对设备做什么)
-
通道指令是通道能识别的资料,通道程序提前编制好放在主存中在含有通道的计算机中,CPU执行I/O指令对通道发出命令,由通道执行一系列通道指令,代替CPU对I/O设备进行管理
2,I/O控制方式
I/O接口:又称I/O控制器(I/O Controller)、设备控制器,负责协调主机与外部设备之间的数据传输
I/O控制器多种多样,也会制定相应的标准,如:用于控制USB设备的IO接口、用于控制SATA 3.0硬盘的IO接口等(l/O控制器就是一块芯片,常被集成在主板上)
1,程序查询方式
CPU不断轮询检查l/O控制器中的“状态寄存器”,检测到状态为“已完成”之后,再从数据寄存器取出输入数据
2,程序中断方式
等待键盘l/O时CPU可以先去执行其他程序,键盘I/O完成后I/O控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据
3,DMA方式
DMA: DirectMemory Access,直接内存访问。
DMA控制方式:主存与高速I/O设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数。DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求。
注:DMA接口,即DMA控制器,也是一种特殊的I/O控制器
4,通道方式
可以理解为是“弱鸡版的CPU”。通道可以识别并执行一系列通道指令,通道指令种类、功能通常比较单一
7.1.2外部设备
1,输入设备
用于向计算机系统输入命令和文本、数据等信息的部件。键盘和鼠标是最基本的输入设备。
2,输出设备
用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件。显示器和打印机是最基本的输出设备。
1,显示器
- 分类
按显示设备所用的显示器件分类:
☆阴极射线管(CRT)显示器
液晶显示器(LCD)
LED显示器
按所显示的信息内容分类:
字符显示器
图形显示器
图像显示器
-
参数
-
屏幕大小
以对角线长度表示,常用的有12~29英寸等。
- 分辨率
所能表示的像素个数,屏幕上的每一个光点就是一个像素,以宽、高的像素的乘积表示,例如,800x600、1024×768和1280×1024等。
- 灰度级
灰度级是指黑白显示器中所显示的像素点的亮暗差别,在彩色显示器中则表现为颜色的不同,灰度级越多,图像层次越清楚逼真,典型的有8位(256级)、16位等。n位可以表示2”种不同的亮度或颜色。
- 刷新
光点只能保持极短的时间便会消失,为此必须在光点消失之前再重新扫描显示一遍,这个过程称为刷新。
- 刷新频率:
单位时间内扫描整个屏幕内容的次数,按照人的视觉生理,刷新频率大于30Hz时才不会感到闪烁,通常显示器刷新频率在60~120Hz。
- 显示存储器(VRAM)
也称刷新存储器,为了不断提高刷新图像的信号,必须把一帧图像信息存储在刷新存储器中。其存储容量由图像分辨率和灰度级决定,分辨率越高,灰度级越多,刷新存储器容量越大。
VRAM容量=分辨率X灰度级位数
VRAM带宽=分辨率×灰度级位数×帧频
2,打印机
-
按印字原理不同可分为
击打式打印机:利用机械动作使印字机构与色带和纸相撞而打印字符
优:设备成本低
印字质量好
如:机打发票
缺:噪声大
银行回执单
速度慢
(防伪性好)
非击打式打印机:采用电、磁、光、喷墨等物理、化学方法来印刷字符
优:速度快
噪声小
缺:成本高 -
按打印机工作方式不同可分为
串行打印机:逐字打印
速度慢
行式打印机:逐行打印
速度快 -
按工作方式可分为
针式打印机
原理:在联机状态下,主机发出打印命令,经接口、检测和控制电路,间歇驱动纵向送纸和打印头横
向移动,同时驱动打印机间歇冲击色带,在纸上打印出所需内容。
特点:针式打印机擅长“多层复写打印”,实现各种票据或蜡纸等的打印。它工作原理简单,造价低
廉,耗材(色带)便宜,但打印分辨率和打印速度不够高。
喷墨式打印机
原理:带电的喷墨雾点经过电极偏转后,直接在纸上形成所需字形。彩色喷墨打印机基于三基色原理,
即分别喷射3种颜色墨滴,按一定的比例混合出所要求的颜色。
特点:打印噪声小,可实现高质量彩色打印,通常打印速度比针式打印机快;但防水性差,高质量打
印需要专用打印纸。
激光打印机
原理:计算机输出的二进制信息,经过调制后的激光束扫描,在感光鼓上形成潜像,再经过显影、转
印和定影,便在纸上得到所需的字符或图像。
特点:打印质量高、速度快、噪声小、处理能力强;但耗材多、价格较贵、不能复写打印多份,且对
纸张的要求高。激光打印机是将激光技术和电子显像技术相结合的产物。感光鼓(也称为硒鼓)
是激光打印机的核心部件。
3,外存储器
是指除计算机内存及CPU缓存等以外的存储器。硬磁盘、光盘等是最基本的外存设备
7.2IO接口
I/O接口:又称I/o控制器(I/O Controller)、设备控制器,负责协调主机与外部设备之间的数据传输
1,结构和作用
1,数据缓冲寄存器(DBR)
2,状态/控制寄存器
3,串-并转换机构
4,I/O控制逻辑
5,地址译码逻辑
2,I/O端口
指IO控制器中可被CPU访问的寄存器
统一编址:
独立编址:
3,分类
并行接口、串行接口;程序查询接口、中断接口、DMA接口;可编程接口、不可编程接口
7.3I/O方式
7.3.1程序查询方式
CPU一旦启动I/O,必须停止现行程序的运行,并在现行程序中插入一段程序。主要特点:CPU有“踏步”等待现象,CPU与I/O串行工作。
优点:接口设计简单、设备量少。
缺点:CPU在信息传送过程中要花费很多时间用于查询和等待,而且在一段时间内只能和一台外设交换信息,效率大大降低。
独占查询:CPU100%的时间都在查询/O状态,完全串行
定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态。查询的间隔内CPU可以执行其他程序。
7.3.2中断的作用和原理
1,中断的基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
2,中断的工作流程
1.中断请求
中断源(可用产生中断请求信号的设备)向CPU发送中断请求信号。
2.中断响应
响应中断的条件(是否关中断)
判优:多个中断源同时提出请求时通过中断判优逻辑响应一个中断源。
3.中断处理
中断隐指令。(修改PC的值)
中断服务程序。
3,中断请求的分类
1,内中断
也称异常,例外,陷入,信号的来源:CPU内部,与当前执行的指令有关
2,外中断
信号的来源是CPU的外部
4,中断请求标记
每个中断源向CPU发出中断请求的时间是随机的。
为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。
这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。
对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/O的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
CPU响应中断必须满足以下3个条件:
①中断源有中断请求。
②CPU允许中断即开中断。
③一条指令执行完毕,且没有更紧迫的任务。
5,中断判优
有多个中断信号同时到来,通过中断判优来确定先处理哪个。
中断判优既可以用硬件实现,也可用软件实现:
硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中;
软件实现是通过查询程序实现的。
- 中断判优-优先级设置
1.硬件故障中断属于最高级,其次是软件中断;
2.非屏蔽中断优于可屏蔽中断;
3.DMA请求优于I/O设备传送的中断请求
4.高速设备优于低速设备;
5.输入设备优于输出设备:
6.实时设备优于普通设备。
6,中断处理过程
1,中断隐指令(CPU自动完成)
中断隐指令的主要任务:
①关中断。
在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
②保存断点。
为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
③引出中断服务程序。
引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器(PC)。
可以通过软件和硬件两种方法实现查询到中断服务程序的入口地址。
由硬件产生向量地址,再由向量地址找到入口地址:
向量地址指向中断向量的地址
中断向量指向中断服务程序的入口地址
2,中断服务程序
中断服务程序的主要任务:
①保护现场
保存通用寄存器和状态寄存器的内容(eg:保存ACC寄存器的值),以便返回原程序后可以恢复CPU环境。可使用堆栈,也可以使用特定存储单元。
②中断服务(设备服务)
主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中(eg:中断服务的过程中有可能修改ACC寄存器的值)
③恢复现场
通过出栈指令或取数指令把之前保存的信息送回寄存器中(eg:把原程序算到一般的ACC值恢复原样)
④中断返回
开中断,通过中断返回指令回到原程序断点处。
单重中断:执行中断服务程序时不响应新的中断请求。
7.3.3多重中断
1,单重中断与多重中断
单重中断:执行中断服务程序时不响应新的中断请求。
多重中断:又称中断嵌套,执行中断服务程序时可响应新的中断请求。
1,中断隐指令
单重中断 | 多重中断 |
---|---|
关中断 | 关中断 |
保存断点(PC) | 保存断点(PC) |
送中断向量 | 送中断向量 |
2,中断服务程序
单重中断 | 多重中断 |
---|---|
保护现场 | 保护现场和屏蔽字 |
NULL | 开中断 |
执行中断服务程序 | 执行中断服务程序 |
NULL | 关中断 |
恢复现场 | 恢复现场和屏蔽字 |
中断返回 | 中断返回 |
屏蔽字:屏蔽一些低优先级的中断源
2,中断屏蔽电路
中断屏蔽技术主要用于多重中断,CPU要具备多重中断的功能,须满足下列条件。
①在中断服务程序中提前设置开中断指令。
②优先级别高的中断源有权中断优先级别低的中断源。
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
屏蔽字设置的规律:
1.一般用‘1’表示屏蔽,'0’表示正常申请。
2.每个中断源对应一个屏蔽字(在处理该中断源的中断服务程序时,屏蔽寄存器中的内容为该中断源对应的屏蔽字)。
3.屏蔽字中‘1越多,优先级越高。每个屏蔽字中至少有一个’1‘(至少要能屏蔽自身的中断)。
7.3.4程序中断方式
7.3.5DMA方式
1,DMA控制器
1,主要功能
1)接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求。
2)CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期。
3)确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。
4)规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。向CPU报告DMA操作的结束。
5)向CPU报告DMA操作的结束
2,组成
主存地址计数器:存放要交换数据的主存地址
传送长度计数器:记录传送数据的长度
数据缓冲寄存器:暂存每次传送的数据
DMA请求触发器:设备准备好数据后将其置位
控制/状态逻辑:由控制和时序电路及状态标志组成中断机构:数据传送完毕后触发中断机构,提出中断请求
2,传送过程
1,预处理
CPU完成寄存器初值设置等准备工作
2,数据传送
CPU继续执行主程序,DMA控制器完成数据传送
3,后处理
后处理:CPU执行中断服务程序做DMA结束处理
3,传送方式
主存和DMA控制器之间有一条数据通路,因此主存和I/O设备之间交换信息时,不通过CPU。但当I/O设备和CPU同时访问主存时,可能发生冲突,为了有效的使用主存,DMA控制器和CPU通常采用以下三种方式使用主存
1,停止CPU访存
控制简单CPU处于不工作状态或保持状态未充分发挥CPU对主存的利用率
2,交替访存
不需要总线使用权的申请、建立和归还过程硬件逻辑更为复杂
3,周期挪用(周期窃取)
DMA访问主存有三种可能:
CPU此时不访存(不冲突)
CPU正在访存(存取周期结束让出总线)
CPU与DMA同时请求访存(I/O访存优先)
4,特点
①它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
②在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
③主存中要开辟专用缓冲区,及时供给和接收外设的数据。
④DMA传送速度快,CPU和外设并行工作,提高了系统效率。
⑤DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
5,与中断方式的区别
中断 | DMA | |
---|---|---|
数据传送 | 程序控制(程序的切换—>保存和恢复现场) | 硬件控制(CPU只需进行预处理和后处理) |
中断请求 | 传送数据 | 后处理 |
响应 | 指令执行周期结束后响应中断 | 每个机器周期结束均可,总线空闲时即可响应DMA请求 |
场景 | CPU控制,低速设备 | DMA控制器控制,高速设备 |
优先级 | 优先级低于DMA | 优先级高于中断 |
异常处理 | 能处理异常事件 | 仅传送数据 |