2022考研计算机组成原理
https://gitee.com/fakerlove/computer-organization
2022考研计算机组成原理
1. 概述
1.1 发展历程
1.2 计算机系统层次结构
1.2.1 五大部件
1) 存储器
类比:
- 存储体 — 存储单元 — 存储原件(0/1)
- 大楼 — 房间 — 床位 (有人/没人)
重要概念:
- 存储单元 :存放一串二进制代码(可能是指令,也可能是数据)
- 存储字 : 存储单元中二进制代码的组合
- 存储字长:存储单元中二进制代码的位数(32位/64位)
每个存储单元赋予一个地址号,每个存储单元中存放一个存储字;存储单元按地址寻访
MAR(Memory Address Register)存储器地址寄存器:存地址的,反映存储单元的个数
MDR(Memory Data Regester)存储器数据寄存器:存数据的,反映存储字长
设MAR=4位 说明存储单元个数是2的4次方=16个(反映存储单元的个数);
MDR=8位,说明存储字长8位
解释:计算机中的主存数据寄存器(MDR),与主存地址寄存器(MAR)帮助完成CPU和主存储器之间的通信:
- MAR用来保存数据被传输到的位置的地址或者数据来源位置的地址;
- MDR保存要被写入地址单元或者从地址单元读出的数据。
2) 运算器
运算器的功能是什么,如何工作?
- 加法运算
- 乘法运算
- 或与非
运算器结构:
- ALU(Arithmetic Logic Unit):算数逻辑单元,核心运算单元;通常是个组合电路,其特点是如果输入撤销,那么输出结果也会撤销,所以如果要保存结果需要在输入输出端加上相应的寄存器(ACC,X);
- ACC(Accumulator):累加器;
- X: 数据寄存器;
- MQ:乘商寄存器(在乘法过程中,产生的结果是操作数的两倍)为了把乘法结果都保存下来,需要此寄存乘法增加的部分;
ACC | MQ | X | |
---|---|---|---|
加法 | 被加数、和 | 加数 | |
减法 | 被减数、差 | 减数 | |
乘法 | 乘法结果的高位 | 乘数、乘法结果的低位 | 被乘数 |
除法 | 被除数、余数 | 商 | 除数 |
乘法:加法+移位操作 (这里有点不太清楚)
除法:减法+移位操作 (这里有点不太清楚)
(回去看看《编码》、《CSAPP》第二章理解理解,再回过来看看)
3) 控制器
功能:
- 解释指令
- 保证指令按顺序执行
基本结构:
完成一条指令:
- 取指令(PC)
- 分析指令(IR)
- 执行指令(CU)
结构:
- CU:核心控制单元,执行指令
- PC:程序计数器,用来存放当前要执行指令的地址,具有计数功能(PC) + 1 —> PC(不同的机型,这里不一定+1,即相邻两个指令的物理地址不一定相邻)
- IR:指令寄存器,存放当前欲执行的指令
4) 输入设备
5) 输出设备
1.2.2 指令完成
这里要好好理解每一个指令步骤,理解了每一个步骤就相当于理解了这一章。
(1)主机完成一条取数指令的步骤
取数指令的功能:把存储体(主存/内存)中的数存到ACC中
完成一条指令的三个阶段:
- 取指令
- 分析指令
- 执行指令
(注:指令:操作码+地址码)
取数操作步骤分析(如图):
- 要执行的指令的地址保存在PC中,指令保存在存储体中;第一步将PC中要执行的指令的地址放入MAR;
- MAR将指令地址送给存储体M;
- 在控制器的控制下,存储体M将指令地址中的指令送给MDR;
- 在控制器的控制下,将MDR中的指令存到IR中;(到此,取指令的操作完成;PC—>MAR—>M—>MDR—>IR)
- 分析指令:将IR中指令的操作码部分给CU,由CU去分析控制执行;
- 把IR中指令中待取的数的地址部分送到MAR;
- MAR将数的地址送给存储体M;
- 在控制器的控制下,存储体M将数的地址中的数送给MDR;
- 在控制器的控制下,MDR中的数交给ACC保存。
(2)主机完成一条存数操作步骤
存数指令的功能:把存放在ACC中的计算结果存到内存单元M中
存数操作步骤分析(如图):
- 要执行的指令的地址保存在PC中,指令保存在存储体中;第一步将PC中要执行的指令的地址放入MAR;
- MAR将指令地址送给存储体M;
- 在控制器的控制下,存储体M将指令地址中的指令送给MDR;
- 在控制器的控制下,将MDR中的指令存到IR中;(到此,取指令的操作完成;PC—>MAR—>M—>MDR—>IR)
- 分析指令:将IR中指令的操作码部分给CU,由CU去分析控制执行;
- 把IR中指令中待存的数的地址送到MAR;(从这一步开始不同)
- MAR将数的地址送给存储体M,告诉存储体要存进来一个数,其地址是多少;
- 在控制器的控制下,将ACC中要存的数交给MDR;
- 在控制器的控制下,将MDR中的数交给存储体。
1.3 计算机硬件指标
1.3.1 字长
机器字长
CPU一次能处理数据的位数(如可以对两个8位二进制数进行加法,就是8位),与CPU中的寄存器(ACC,X,MQ)的位数有关。
- 一般来说,机器字长越长性能越好。
- 机器字长反映了计算机的运算精度,即字长越长,数的表示范围也越大,精度也越高。
存储字长
一个存储单元存储一串二进制代码(存储字专),这属串二进制代码的位数称为存储字长,存储字长可以是8位、16位、32位等。
指令字长
一个指令字中包含二进制代码的位数。
编址
- 按字编址,就是机器字长编址,机器为32 位,4B就是一个单位,机器字长为64 位,8B就是一个单位
- 按字节编址,1B就是 一个单位
1.3.2 运算速度
前两个是硬件指标;后四个是从指令执行的角度来衡量的。
1) 各种周期比较
时钟周期 | 时钟周期是计算机中最基本的、最小的时间单位 | |
机器周期(cpu周期) | 机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成 | |
指令周期 | 一般由若干个机器周期组成,是从取指令,分析指令到执行完所需的全部时间。 取指周期 间址周期 执行周期 中断周期 | |
存储周期 | 存储器进行一次“读”或“写”操作所需的时间称为存储器的访问时间(或读写时间),而连续启动两次独立的“读”或“写”操作(如连续的两次“读”操作)所需的最短时间,称为存取周期(或存储周期)。 | |
存取时间 | 存储访问时间,也可以称之为存取时间,是指从启动一次存储器操作到完成该操作所经历的时间。 | |
总线周期 | 总线周期通常指的是CPU完成一次访问MEM或I/O端口操作所需要的时间。一个总线周期由几个时钟周期组成。 |
存取时间<存储周期时钟周期<机器周期<指令周期将机器周期定为单位1ns,则指令周期为1~4ns,时钟周期为1/6s,总线周期为2/3ns(一个总线周期一般包含bai4个时钟周期)。
2) CPI
CPU 执行一条指令所需的时钟周期数
系统结构,指令集,计算机组织都会影响CPI,而时钟频率不会
3) 主要的计算
1.3.3 存储容量
存放二进制信息的总位数
1.3.4 专业术语
兼容
软件或者硬件上的通用 通常在同一系列不同型号的计算机间通用
2. 数据表示和运算
2.1 数据与编码
2.1.1 进制转换
2.1.2 校验码
2.2 定点数的表示和运算
2.2.1 表示
- 寄存器的位数反映无符号数的表示范围
一. 有符号数
- 真值:带符号的数
- 机器数:符号数字化的数
没有专门的硬件用于存储小数点,其都是以约定俗成的方式存在
1) 原码表示法
整数定义
小数定义
正数的原码符号位为0;数值位为其真值负数的原码符号位为1;数值位为其真值
- 原码的特点
- 简单直观
- 但是用原码做加法时,会出现以下问题:
2) 补码表示法
- 整数定义
小数定义
正数的补码符号位为0;数值位为其真值负数的补码符号位为1;数值位为其真值对应位求反后末位加1
3) 反码表示法
- 整数定义
小数定义
正数的补码符号位为0;数值位为其真值负数的补码符号位为1;数值位为其真值对应位求反
三种机器数的小结
最高位为符号位,书写上~~用“,”(整数)~~或“.”(小数)将数值部分和符号位隔开
对于正数,原码=补码=反码
对于负数,符号位为1,其数值部分原码除符号位外每位按位取反末尾加1→补码 不加一→反码
表示范围
tips:[y]补 连同符号在内,每位取反,末位加1,即得[-y]补
二. 数的定点表示和浮点表示
定点表示
- 定义:小数点按约定方式标出
浮点表示
- 浮点数的一般形式:N=S×r的j次方
在计算机中,S是小数、可正可负;j是整数、可正可负
表示范围
浮点数的存储格式
浮点数(Floating-point Number)是对实数的一种近似表示,由一个有效数字(即尾数)加上幂数来表示,通常是乘以某个基数的整数次幂得到。以这种表示法表示的数值,称为浮点数。表示方法类似于基数为10的科学计数法。利用浮点进行运算,称为浮点计算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
计算机对浮点数的表示规范遵循电气和电子工程师协会(IEEE)推出的 IEEE754 标准,浮点数在 C/C++ 中对应 float 和 double 类型,我们有必要知道浮点数在计算机中实际存储的内容。
IEEE754 标准中规定 float 单精度浮点数在机器中表示用 1 位表示数字的符号,用 8 位表示指数,用 23 位表示尾数,即小数部分。对于 double 双精度浮点数,用 1 位表示符号,用 11 位表示指数,52 位表示尾数,其中指数域称为阶码。IEEE754 浮点数的格式如下图所示。 注意,IEE754 规定浮点数阶码 E 采用"指数e的移码-1"来表示,请记住这一点。为什么指数移码要减去 1,这是 IEEE754 对阶码的特殊要求,以满足特殊情况,比如对正无穷的表示。
移码
移码(又叫增码)是对真值补码的符号位取反,一般用作浮点数的阶码,引入的目的是便于浮点数运算时的对阶操作。
对于定点整数,计算机一般采用补码的来存储。正整数的符号位为 0,反码和补码等同于原码。负整数符号位为1,原码、反码和补码的表示都不相同,由原码变成反码和补码有如下规则: (1)原码符号位为1不变,整数的每一位二进制数位求反得反码; (2)反码符号位为1不变,反码数值位最低位加1得补码。
比如,以一个字节 8bits 来表示 -3,那么[ − 3 ] 原 = 10000011 [-3]_原=10000011[−3]原=10000011,[ − 3 ] 反 = 11111100 [-3]_反=11111100[−3]反=11111100,[ − 3 ] 补 = 11111101 [-3]_补=11111101[−3]补=11111101,那么 -3 的移码就是[ − 3 ] 移 = 01111101 [-3]_移=01111101[−3]移=01111101。
如何将移码转换为真值 -3 呢?先将移码转换为补码,再求值。
浮点数的规格化
若不对浮点数的表示作出明确的规定,同一个浮点数的表示就不是唯一的。例如( 1.75 ) 10 (1.75)_{10}(1.75)10可以表示成1.11 × 2 0 1.11\times 2^01.11×20,0.111 × 2 1 0.111\times2^10.111×21,0.0111 × 2 2 0.0111\times2^20.0111×22等多种形式。当尾数不为0时,尾数域的最高有效位为1,这称为浮点数的规格化。否则,以修改阶码同时左右移动小数点位置的办法,使其成为规格化数的形式。
单精度浮点数真值
IEEE754 标准中,一个规格化的 32 位浮点数 x 的真值表示为: x = ( − 1 ) S × ( 1. M ) × 2 e x=(-1)S\times(1.M)\times2ex=(−1)S×(1.M)×2e e = E − 127 e=E-127e=E−127 其中尾数域值是1.M。因为规格化的浮点数的尾数域最左位总是1,故这一位不予存储,而认为隐藏在小数点的左边。
在计算指数 e 时,对阶码E的计算采用原码的计算方式,因此 32 位浮点数的 8bits 的阶码 E 的取值范围是 0 到 255。其中当E为全 0 或者全 1 时,是 IEEE754 规定的特殊情况,下文会另外说明。
双精度浮点数真值
64 位的浮点数中符号为 1 位,阶码域为 11 位,尾数域为 52 位,指数偏移值是 1023。因此规格化的 64 位浮点数 x 的真值是: x = ( − 1 ) S × ( 1. M ) × 2 e x=(-1)S\times(1.M)\times2ex=(−1)S×(1.M)×2e e = E − 1023 e=E-1023e=E−1023
- float单精度浮点数(4个字节,32位)在机器中表示:用1位表示数字的符号(正负号),8位表示指数,23位表示尾数(即小数部分)
- double双精度浮点数(8个字节,64位):1位表示符号(正负号),11位表示指数,52位表示尾数
浮点数阶码E用**“指数e的移码-1”表示,还可以用阶码E的移码(特殊的移码)+阶码E的真值(即指数)**表示。
阶码的移码:假设阶码用8个二进制位表示,则该阶码的移码为 2(n-1) ,但注意这里的移码是特殊的移码,仅偏移2(n-1)-1=127 。
2.2.2 加法运算
2.2.3 补码加减运算
2.2.4 定点数的乘除运算
一. 原码乘法
- 符号位与数值位分开求,乘积符号由两个数的符号位“异或”形成,而乘积的数值部分则是两个数的绝对值相乘之和。
1. 题目
2) 步骤一
- 被乘数 x 和乘数 y 均取绝对值参加运算
- 符号位为$ x_s ⊕ y_s $
3) 步骤二
- 累加寄存器(ACC)取 n+1 位(包含一位符号位,以便右移,故最终结果中ACC的第一位是符号位),初始化为0
- 乘商寄存器(MQ)取 n 位(不含符号位),初始化为 |y| 的数值部分
4) 步骤三
- 从乘数的最低位开始判断,若 =1,则部分积加上被乘数|x|,然后右移一位;若=0,则部分积加上0,然后右移一位,由于是无符号数,故移位采用逻辑右移
- 重复以上步骤,判断N次。
5) 步骤四
- ACC中的第25位和MQ中的第14位为乘积的数值部分
由步骤1可知,符号为 -,故乘积为 -0.10001111
二. 补位乘法介绍
1) 题目
2) 步骤一
- 符号位参与运算,运算的数均以补码表示,被乘数 x 取双符号位,乘数 y 取单符号位
- 计算被乘数 x 的负数的补码
3) 步骤二
- 累加寄存器(ACC)取 n+2 位(取双符号位,以便进行溢出检查,故最终结果中ACC的前两位是符号位),对应 [x]补 和 [-x]补 ,初始化为0
- 乘商寄存器(MQ)初始化为 [y]补(取单符号位),末尾增设附加位(数值为0),共n+2位
4) 步骤三
- 根据y的次低位和最低位的取值确定操作(如下表),由于是有符号数,故移位采用补码的算术右移
- 重复上述步骤,判断N+1次,但第N+1次不再移位(共进行N+1次累加和N次右移)
5) 步骤四
ACC和MQ的前10位为乘积(前2位为符号),故|XY|补=11.01110001,XY=-0.10001111
题目
解答过程
情况说明 | 操作 | 高部分积 | 低部分积(最后一位为y_n) | 丢失位(第一位为y_n+1) | |
---|---|---|---|---|---|
加法后的结果 | |||||
右移了 | 右移 | ||||
右移 | 右移了, | ||||
加法后的结果 | |||||
右移 | 右移了 | ||||
区别
三. 除法
2.2.5 溢出概念的判别方法
2.3 浮点数的表示和运算
2.3.1 表示
2.3.2 浮点数的加减运算
2.4 ALU
3. 存储系统
3.1 概述
3.1.1 分类
1) 根据作用(层次分类)
高速缓冲存储器(cache)
主存储器(主存,内存)
辅助存储器(辅存,外存)
2) 根据材料分类
- 磁表面存储器 :磁盘磁带
- 磁芯存储器 :DRAM
- 半导体存储器 :ROM,RAM
- 光存储器 :光存储器
3) 材料不同特性不同
存储方式
1.磁盘(直接存取) 磁带(顺序存取) 2.DRAM 3.ROM,RAM(随机存取) 4.光存储器
信息的可保存性
断电后是否容易消失:容易失去RAM 读出时是否破坏信息:破坏性读出DRAM
随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
比如高速缓存 SRAM,主存 DRAM
注意点,随机存储和随机存取存储器(RAM)是不一样的。ROM也支持随机存取,但不是随机存取存储器
3.1.2 性能指标
1) 存储容量
存储容量 = 存储单位的数量 × 字长
比如:1M × 8位(bit) 个人理解: 存储容量 = 地址总线数 × 数据总线数
2) 单位成本
单位成本 = 总成本 / 总容量
存储速度(存储时间Ta/存储周期Tm/主存带宽Bm)
3) 存储时间Ta
存储时间:完成一次操作的时间
比如完成的一次读出 或 写入
4) 存储周期Tm
存储周期 = 存储时间 + 恢复时间
理解:两次操作中之间的最小时间间隔
5) 主存带宽Bm
主存带宽,又名存储数率 表示每秒从主存进出信息的最大数量
最大通路数,就像烤冷面一样,是由好多条好多条构成的一板
3.1.3 层次结构
分为两层 cache-主存一层 ,主存-辅存一层
3.2 半导体存储器
3.2.1 存储芯片的基本结构
1) 容量计算
2^10 = 1k 2 ^ 14 = 1k × 2^4 =16K
2) 选择控制
3) 选片 #CS #CE
单信号控制读写 #WE(低电平写,高电平读)
双信号控制读写 #OE(允许读) #WE(允许写)
4) 引脚数目
数据线
地址线 根据题目---如果是总线复用技术,行地址和列地址会分别发送,地址线会减半 DRAM采用地址复用技术,而SRAM 不能采用
片选线 1--根据题目要求来,地址复用,片选线为2,无特殊说明为1
读写控制线2------可以是1,根据题目要求
例题
例如 容量为 1024 *8 位,按字节寻址,所需要引脚数目
地址线 按字节寻址,2^10=1024 ,需要10根地址线
数据线 按字节编址,所以需要 8位,
片选线1
读写控制2
10+8+1+2=21
例如 容量为 1024 *8 位DRAM ,按字节寻址,采用地址复用技术,所需要引脚数目
地址线 按字节寻址,2^10=1024 ,需要10根地址线,采用地址复用技术。地址线为5
数据线 按字节编址,所以需要8位,
片选线2
读写控制2
5+8+2+2=17
3.2.2 RAM的分类
1) SRAM,DRAM的工作原理
DRAM 刷新
- 集中刷新
- 分散刷新:没有死区
- 异步刷新
DRAM刷新单位为行
用途
- DRAM为主存
- SRAM为高速缓存
2) 简单模型改进行列地址
3) DRAM的刷新
4) RAM的读写周期
3.2.3 存储系统ROM
3.3 存储器与CPU协同工作
3.3.1 存储器的简单模型
存储器简单模型:
实际中MAR,MDR是在CPU里,理论上是在主存里
存储器地址连线 (A地址线,D数据线)
1) 字扩展
线选法
译码片选法⭐⭐
首先得了解电路
与非门
与非门真值表
A | B | Y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
逻辑表达式:*Y=(A·B)'=(A')+(B')*
与门
输入A 输入B 输出Y 0 0 0 0 1 0 1 0 0 1 1 1 或门
输入A 输入B 输出F 0 0 0 0 1 1 1 0 1 1 1 1 或非门
输入A 输入B 输出Y 0 0 1 0 1 0 1 0 0 1 1 0 异或门
A B 输出Y 0 0 0 0 1 1 1 0 1 1 1 0
首先得看懂电路,带圆圈的都是 取反,
题目要求的低电平--就是输出为0,合理选择 电路
2) 位扩展
3) 字位扩展
3.4 如何提高访问/存储的速度
3.4.1 存储周期
提高速度的办法引入: 双口RAM和多模块存储器
双端口 物理上的并行多模块 时间上的并行
3.4.2 双端口RAM
双端口会给两个CPU都有个"忙"的标记,防止出现同时写入之类的情况
3.4.3 多模块存储器
单体多字存储器 (略) 和 多体并行存储器
低位多体交叉存储器的性能分析
3.5 高速缓冲存储器Cache
cache出现的原因: 避免速度差造成的拥堵
时间局部性:未来要用到的信息可能是我现在正在用的信息 空间局部性:未来要用的信息,从存储角度说,可能在我正在用的信息的附近
所以我把正在使用的信息,和附近的信息都放入cache 单位:块
3.5.1 Cache 工作原理
CPU在Cache中找到有用的数据被称为命中Cache高速缓存 : 存放的是cpu经常调用的主存中的内容的副本 问题1: 主存中的块放到Cache中哪个位置 – 地址映射
3.5.2 Cache与内存的地址映射
主存字块标记: 记录一些和替换算法相关的
1) 全相联映射 - 空位随意放
需要知道: 主存的块号(主存的哪一块) , 和该块中的具体地址
2) 直接映射 - 一对一映射
主存一一对应放入Cache,当主存超过Cache容量时候,取余 放到余数的位置
3) 组相联映射
3.5.3 Cache性能分析
例题1: 同时访问Cache和主存
例题2: 先访问Cache再访问主存
例题3:
3.5.4 Cache 替换算法
当Cache装满后,CPU又经常调用主存中一个数据,这个数据没有在Cache里备份,那么这个数据 什么时候 会替换Cache中的内容
除了直接映射(一对一映射):他会把对应位置的数据直接踢走 剩下两种 全相联映射 和 组相联 就需要替换算法 随机算法RAND 先入先出算法FIFO - First Input First Output 近期最少使用算法(LRU) - Least Recently Used 最不经常使用算法(LFU) - Least Frequently Used
全相联情况下置换例题
组相联映射下多种置换算法的比较
Cache 总结
当命中的时候 CPU直接从Cache里面取数据 当没有命中的时候 CPU从内存里去,并且内存会更新Cache里面的内容 (添加/置换) 以提高命中率
3.5.5 Cache 写策略
CPU对Cache内容修改后,Cache如何与主存保持一致
1) 写回法:-命中
增加脏位: 看看是把Cache修改后的内容写回内存还是直接覆盖掉
2) 全写法write-through - 命中
利用缓冲buffer 实现 Cache的内容一改变,主存的内容就改变
3) 写分配法 - 未命中
CPU想修改Cache中的某一数据,但是这个数据恰恰在Cache中没存,所以从主存赶紧调入到Cache里,再修改这个数据
4) 非写分配法 - 未命中
CPU要修改的数据,Cache中没有,CPU就知己在主存内修改
5) 总结
Cache 总容量=行数(块大小+标记位)
Cache标记位=Tag(必有)+有效位(必有)+替换算法位(根据题目要求)+脏位(根据题目要求)
Tag=题目算出来的
- 全相连=主存地址位数-块内地址位数
- 组相连=主存地址位数-行数-块内地址位数
- 组相连=主存地址位数-组数-块内地址位数
有效位=1
替换算法位---组相连,2路组相连(LRU替换算法)--需要1 位,4路组相连(LRU替换算法)--2 位
脏位--只有写回法才需要,一般不加。直接题目说明需要写回,才加
6) 多级Cache
3.6 虚拟存储器 - 提高存储系统的容量
重点:地址转化 虚拟存储器的访问过程
3.6.1 页式虚拟存储器
相关知识点: 操作系统 页式存储
3.6.2 段式存储
段的长度是不固定的,和分组还不一样
3.6.3 快表TBL
3.6.4 页式虚拟存储例题
页框号 : 实页号
常用的虚拟存储器寻址系统由______两级存储器组成。 A.Cache—辅存 B.主存—辅存 C.主存—Cache
主存——辅存 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。
4. 指令系统
4.1 指令系统的基本概念
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,实际上每条指令的各个部分都可以看作是单个数字,将这些数字拼在一起就形成了指令。把指令的数字形式称为机器语言,这样的指令序列叫做机器代码。指令的基本格式如下:
其中操作码指明了指令的操作性质及功能,地址码则给出了操作数的地址。
指令的长度是指一条指令中所包含的二进制代码的位数,它取决于操作码字段的长度、操作数地址的个数及长度。指令长度与机器字长没有固定的关系,可以等于机器字长,也可以大于或小于机器字长。通常,把指令长度等于机器字长的指令称为单字长指令,指令长度等于半个机器字长的指令称为半字长指令,指令长度等于两个机器字长的指令称为双字长指令。
在一个指令系统中,若所有指令的长度固定,则称为定长指令结构。若各种指令的长度随指令功能而异,则称为变长指令结构。定长指令结构系统控制简单,但不够灵活,变长结构指令系统灵活但控制较复杂。
4.1.1 指令的基本格式
1) 四地址指令
其指令格式如下:
指令含义:(A1) OP (A2) → A3,A4=下条将要执行指令的地址。
符号含义:OP 为具体的操作,Ai表示地址,(Ai)表示存放于该地址的内容。执行一条四地址的双操作数运算指令,共需访问 4 次主存:第一次取指令本身;第 2 次取第一操作数;第 3 次取第二操作数;第 4 次保存运算结果。
若指令字长为 32 位,操作码占 8 位,4 个地址码字段各占 6 位,则指令操作数的直接寻址范围为 26=64。
2) 三地址指令
其指令格式如下:
指令含义:(A1) OP (A2) → A3,(PC) + 1 → PC(隐含)
符号含义:OP 为具体的操作,Ai表示地址,PC 为程序计数寄存器,用于存放下一条指令的地址,从而消除四地址指令中的 A4,形成更短的三地址指令。
执行一条三地址的双操作数运算指令,也需访问 4 次主存:第一次取指令本身;第 2次取第一操作数;第 3 次取第二操作数;第 4 次保存运算结果。
若指令字长为 32 位,操作码占 8 位,3 个地址码字段各占 8 位,则指令操作数的直接寻址范围为 28=256。
3) 二地址指令
其指令格式如下:
指令含义:(A1) OP (A2) → A1,(PC) + 1 → PC(隐含)
符号含义:A1为目的操作数地址,A2为源操作数地址。
执行一条二地址的双操作数运算指令,共需访问 4 次主存:第一次取指令本身;第 2次取目的操作数;第 3 次取源操作数;第 4 次保存运算结果。并且源操作数地址中原存的内容被破坏了。
若指令字长为 32 位,操作码占 8 位,两个地址码字段各占 12 位,则指令操作数的直接寻址范围为 212=4K。
二地址指令有两个操作数,这些操作数并不一定都在主存中,往往有一个或两个在通用寄存器中,这样构成不同的类型,详见后面的二地址指令的分类。当操作数放在通用寄存器中时,每个通用寄存器有一个编号,需要指定相应的寄存器编号即可。
4) 一地址指令
其指令格式如下:
指令含义:(ACC) OP (A1) → ACC,(PC) + 1 → PC(隐含)
符号含义:ACC 为累加寄存器。
执行一条一地址的双操作数运算指令,共需访问两次主存:第一次取指令本身;第 2次取第二操作数。
若指令字长为 32 位,则操作码占 8 位,一个地址码字段则占 24 位,指令操作数的直接寻址范围为 224=16M。
5) 零地址指令
其指令格式如下:
指令含义:无地址码。例如,空操作(NOP)、停机(HLT)、子程序返回(RET)和中断返回(IRET)等,这类指令没有地址码,其操作数的地址隐含在堆栈的栈顶指针 SP 中。
参加的两个操作数来自于堆栈的栈顶和次堆栈栈顶
例如,零地址加法指令仅用在堆栈计算机中,操作数和结果都保存在堆栈中,参与加法运算的两个操作数隐含地从堆栈顶部弹出,送到运算器中进行运算,运算的结果再隐含地压入堆栈。所有这些指令都会执行(PC)+1→PC。
4.1.2 定长操作码指令格式
指令系统中的每一条指令都有一个唯一的操作码,指令不同,其操作码的编码也不同。所谓定长操作码指令格式是指操作码字段的位数和位置是固定的。
假定指令系统共有 m 条指令,指令中操作码字段的位数为 N 位,m 和 N 有如下关系式:
m≤2N,即 N≥log2m
根据指令格式中的地址码的个数可将指令分为零地址指令、一地址指令、二地址指令、三地址指令和多地址指令等。
指令字长度等于机器字长度的指令,称为
单字长指令
。指令字长度等于两个机器字长度的指令,称为双字长指令
。
4.1.3 扩展操作码指令格式
扩展操作码指令格式就是操作码的长度不固定,操作码的长度随地址码个数的减少而增加,不同的地址数的指令可以具有不同长度的操作码。这样在满足需要的前提下,有效地缩短了指令字长。
在设计操作码指令格式时,必须注意以下两点:
☆ 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
☆ 各条指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码,而对使用频率较低的指令,
分配较长的操作码,从而尽可能减少指令译码和分析的时间。
例题
【例 6.1】 假设指令字长为 16 位,操作数的地址码为 6 位,指令有零地址和一地址两种格式。
(1)设操作码固定,零地址指令有 512 种,则一地址指令最多有几种?
(2)采用扩展操作码技术,零地址指令有 512 种,则一地址指令最多有几种?
解:
(1)对于一地址指令,操作码长度=16-6=10,这 10 位操作码可有 $2^{10}=1024 $种操作。由于操作码固定,也就是说零地址和一地址的操作码长度均为 10 位,则除去零地址指令 512种,剩下一地址指令最多 1024-512=512 种。
(2)采用扩展操作码技术,操作码位数可变,则一地址和零地址的操作码长度分别为10 和 16 位。可见一地址指令操作码每减少一种,就可多构成 种零地址指令操作码。
设一地址指令有 X 种,则零地址指令最多有种,
依题意:
所以,X=1016,即此种情况下,一地址指令最多有 1016 种。
本例中第(1)题操作码指令属于定长操作码指令格式,第(2)题属于扩展
操作码指令格式。考生应领会两种指令格式的区别。
4.1.4 多字长指令格式
由于机器数据字长不同,每台机器处理的数据字长也不统一。为了扩大寻址空间,可以采用两个字长或多个字长来存放一个指令字。
双字指令
用两个机器字来存放的指令称为双字指令。若第一个指令字的操作数地址字段中存放得下,可把该数据安排在第一个指令字中,则在读出指令的同时也得到相关数据;否则只能将其存放在指令的第二个指令字中。例如,若机器字长为 16 位,设计双字指令格式如下:
三字指令
用三个机器字来存放的指令称为三字指令。
4.1.5 指令格式的优化与设计
指令格式的优化设计的主要目标有两个:一是节省程序的存储空间;二是指令格式要尽量规整,以减少硬件译码的复杂程度。
利用哈夫曼压缩思路,根据每类指令的使用频度,使用频度高的指令的操作码用较短的二进制位来表示,使用频度较低的指令的操作码用较长的二进制位来表示,使得平均二进制位数变短。
求哈夫曼编码的过程如下:
构造哈夫曼树。将所有使用频度值作为树的叶子节点,找出两个权值最小的相加,相加后的值作为新节点的权值,放入其中再作比较,继续用两个权值最小的节点相加,形成一个新节点,重复以上过程,直至根节点。
哈夫曼编码。按照二叉树左 1 右 0 的原则,在哈夫曼树上标出。然后从根节点到叶子节点的路径上的二进制符号即为该叶子节点对应的哈夫曼编码,将其作为该类指令的操作码。
4.2 指令的寻址方式
4.2.1 有效地址的概念
指令的地址码字段并不一定代表操作数的真实地址,把它称为形式地址,记为 A。操作数的真实地址称为有效地址,记为 EA,它是由寻址方式和形式地址共同确定的。
所谓寻址方式,就是寻找指令或操作数的有效地址的方式,也就是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法。寻址方式分为指令寻址和数据寻址两大类。
4.2.2 数据寻址和指令寻址
1)指令寻址
指令寻址分为顺序寻址和跳跃寻址两种:
☆ 顺序寻址。通过程序计数器 PC 加 1,自动形成下一条指令的地址。
☆ 跳跃寻址。通过转移类指令实现。例如,对于 JMP 7 指令,无论在什么位置,它执行完后,便无条件地将 7 送至 PC,跳过其他指令,直接执行第 7 条指令。
2)数据寻址
数据寻址方式较多,为了区分各种方式,在指令中通常设一字段,用来指明属于哪种寻址方式,由此可知指令的格式如图 6.2 所示。
4.2.3 常见数据寻址方式
1) 立即寻址
立即寻址的方式是:操作数本身设在指令字内,即形式地址 A 不是操作数的地址而是操作数本身,又称之为立即数。数据是采用补码形式存放的,如图 6.3 所示,图中“#”表示立即寻址特征。
特点:指令在执行阶段不访存,但 A 的位数限制了立即数的范围。
立即寻址通常用于对某寄存器或主存单元赋初值。
2) 直接寻址
直接寻址的方式是:指令字中的形式地址 A 就是操作数的真实地址 EA,即 EA=A。如图 6.4 所示。
特点:简单,只访问一次主存,但 A 的位数限制了操作数的寻址范围,例如 A 为 8 位,则寻址范围为 28=256 个存储单元,相对主存空间而言,这个范围太小了。
3) 隐含寻址
隐含寻址的方式是:操作数隐含在操作码或某个寄存器中。例如,一地址格式的加法指令只给出一个操作数的地址,另一个操作数隐含在累加器 ACC 中,
特点:有利于缩短指令字长,但需要增加硬件。
4) 间接寻址
间接寻址的方式是:指令中的形式地址不直接指出操作数的地址,而是指出操作码有效地址所在的存储单元地址,也就是说有效地址是由形式地址间接提供的,称为间接寻址,即 EA=(A),如图 6.6 所示,它是一次间接寻址,还可以有多次间接寻址。
例如,若 A 为 8 位,直接寻址范围为 2^8,一次间接寻址的寻址范围可达 28×28=2^16。
特点:采用间接寻址扩大了寻址范围,但指令在执行阶段需要多次访存,一次间接寻址需要访问主存 2 次,两次间接寻址需要访问主存 3 次,依次类推,n 次间接寻址需要访问主存 n+1 次。
5) 寄存器寻址
寄存器寻址的方式是:在指令字中直接给出寄存器的编号,即 EA=Ri,其操作数在由Ri所指的寄存器内。
特点:可以减少指令字的长度,指令执行阶段不访存,只访问寄存器,速度快,但需要利用寄存器,而计算机中的寄存器个数有限。
6) 寄存器间接寻址
寄存器间接寻址的方式是:寄存器 Ri中不是操作数,而是操作数所在主存单元的地址,即 EA=(Ri)。
特点:与一般间接寻址相比速度更快,但和寄存器寻址相比,指令的执行阶段需要访存(操作数在主存中)。
7) 基址寻址
基址寻址的方式是:设有基址寄存器 BR,其操作数的有效地址 EA 等于指令字中的形式地址与基址寄存器 BR 中的内容(称为基地址)相加,即 EA=A+(BR)。
有时,基址可放在通用寄存器中,这样由用户指出是哪个通用寄存器存放基址,例如,以下指令格式指出基址存放在 Ri通用寄存器中:
特点:扩大寻址范围(因为基址寄存器的位数可以大于形式地址 A 的位数),适合多道程序设计,但需要增加硬件。
通常基址寄存器BR中的内容完全由操作系统或管理程序确定,也就是说基址寄存器是面向操作系统的,用户不能随意改变。
8) 变址寻址
变址寻址的方式是:其有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 的内容相加之和,即 EA=A+(IX)。IX 是专用的变址寄存器,也可以采用通用寄存器作为变址寄存器。
特点:扩大寻址范围(前提是变址寄存器的位数大于形式地址 A 的位数),便于数组运算等处理,但需要增加硬件。
变址寻址和基址寻址的区别是,变址寄存器IX中的内容由用户给定,也就是说变址寄存器是面向用户的。
9) 相对寻址
相对寻址的方式是:有效地址是将程序计数器 PC 的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成,即 EA=(PC)+A。
对于JMP A的转移指令而言,每当CPU从存储器中取出一个字节时,会自动执行(PC)+1→PC,若该转移指令的地址为X,且占 2 个字节,在取出该指令后,PC的值会增 2,从而PC的值变为X+2,这样在执行完该指令后会自动跳转到X+2+A的地址继续执行。
特点:转移地址不固定,可随 PC 值的变化而定,因而无论程序在主存中的哪些区域都可正确执行,有利于编写浮动程序。
10) 堆栈寻址
堆栈寻址的方式是:计算机中设有堆栈,操作数只能从栈顶地址指示的存储单元中存或取,可视为一种隐含寻址。
特点:无主存访问,访问堆栈时不需要给出要访问堆栈单元的地址,但应用有限。
名称 | 用途 | 缺点 | 优点 | 访存次数 |
---|---|---|---|---|
立即寻址 | 立即寻址通常用于对某寄存器或主存单元赋初值 | A 的位数限制了立即数的范围。 | 指令在执行阶段不访存, | 0 |
直接寻址 | A 的位数限制了操作数的寻址范围 | 简单 | 1 | |
间接寻址 | 采用间接寻址扩大了寻址范围, | 指令在执行阶段需要多次访存, | 一次间接寻址需要访问主存 2 次,两次间接寻址需要访问主存 3 次,依次类推n 次间接寻址需要访问主存 n+1 次 | |
隐含寻址 | 加法指令,PUSH指令,简化地址结构 | 但需要增加硬件。 | 有利于缩短指令字长, | 0 |
寄存器寻址 | 缩短指令中的某个地址段的位数 | 可以减少指令字的长度,指令执行阶段不访存,只访问寄存器,速度快, | 但需要利用寄存器,而计算机中的寄存器个数有限。 | 0 |
寄存器间接寻址 | 1 | |||
基址寻址 | 适合多道程序设计 | 扩大寻址范围 | 但需要增加硬件。 | 1 |
变址寻址 | for 循环 | 扩大寻址范围,便于数组运算等处理, | 但需要增加硬件。 | 1 |
相对寻址 | 有利于编写浮动程序。 | 转移地址不固定,可随 PC 值的变化而定, | 1 | |
堆栈寻址 | 0 |
【例 6.2】 一台计算机字长为 16 位,按字节编址,其指令字长为 16 位,第一个字节(高字节)包括操作码(5 位)和寻址方式 m(3 位),第二个字节(低字节)是地址码。如要执行的指令放在主存 100、101 两个字节中,指令 LOAD m A 表示从主存单元取数,送入累加器 ACC 中。ACC、变址寄存器 IX、程序计数器 PC 均为 8 位,如图 6.7 所示,求在立即寻址、直接寻址、间接寻址、相对寻址和变址寻址方式下指令完成时,ACC 的内容是什么?
解:(1)在立即寻址方式下,指令中直接给出操作数,放在地址码字段中,A=300,而LOAD m A 指令用于将 A 数据送入 ACC 中,即 A→ACC,所以(ACC)=A=300。
(2)在直接寻址方式下,EA=A=300,而 LOAD m A 指令用于将(EA)→ACC,所以
(ACC)=(EA)=(300)=102。
(3)在间接寻址方式下,A=300,EA=(A)=(300)=102,LOAD m A 指令用于将(EA)→ACC,所以(ACC)=(EA)=(102)=200。
(4)在相对寻址方式下,A=300,EA=(PC)+A=100+300=400,而 LOAD m A 指令用于将(EA)→ACC,所以(ACC)=(EA)=(400)=500。
(5)在变址寻址方式下,A=300,EA=(IX)+A=200+300=500,而 LOAD m A 指令用于将(EA)→ACC,所以(ACC)=(EA)=(500)=600。
11)寄存器种类
总共有14个16位寄存器,8个8位寄存器。
通用寄存器:
数据寄存器:
AH(8位) AL(8位) AX(16位) (AX和AL又称累加器)
BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器)
CH(8位) CL(8位) CX(16位) (计数器,CX用于字符串操作,控制循环的次数,CL用于移位)
DH(8位) DL(8位) DX(16位) (数据,DX一般用来做32位的乘除法时存放被除数或者保留余数)
指针寄存器:
SP 堆栈指针 (存放栈顶地址)
BP 基址指针 (存放堆栈基址偏移)
变址寄存器:
主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,
即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操作数和运算结果,有时运算结果就是需要的存储单元地址的偏移.
SI 源地址 (源变址寄存器)
DI 目的地址 (目的变址寄存器)
控制寄存器:
IP 指令指针
FLAG 标志寄存器
① 进位标志 CF,记录运算时最高有效位产生的进位值。
② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。
③ 零标志 ZF,运算结果为0时ZF位置1,否则置0。
④ 溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。
⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。
段寄存器
CS 代码段 IP
DS 数据段
SS 堆栈段 SP BP
ES 附加段
4.2.4 指令类型
一、按功能划分
1、数据处理指令:包括算术运算指令、逻辑运算指令、移位指令、比较指令等。
2、数据传送指令:包括寄存器之间、寄存器与主存储器之间的传送指令等。
3、程序控制指令:包括条件转移指令、无条件转移指令、转子程序指令、循环指令等。
4、输入输出指令:包括各种外围设备的读、写指令等。有的计算机将输入输出指令包含在数据传送指令类中。
5、状态管理指令:包括诸如实现置存储保护、中断处理等功能的管理指令。
二、向量指令和标量指令:有些大型机和巨型机设置功能齐全的向量运算指令系统。向量指令的基本操作对象是向量,即有序排列的一组数。
三、特权指令和用户指令:在多用户环境中,某些指令的不恰当使用会引起机器的系统性混乱。如置存储保护、中断处理、输入输出等这类指令,均称为特权指令,不允许用户直接使用。
转移指令,子程序调用,返回指令用于解决变动程序只能指令执行次序需求
具体讲解
1)算术逻辑运算指令
用于支持二进制加法、减法、比较和求补码等基本的算术运算。通常情况下,根据算术运算的结果设置程序状态字 PSW 的各个状态位,一般有 Z(结果为 0)、N(结果为负)、V(结果溢出)、C(产生进位或借位)4 个状态位。当满足括号内所指出的条件时,相应位置成 1,否则为 0。例如,结果为 0 时,Z=1,否则 Z=0,依次类推。
2)移位操作指令
用于支持移位操作。可分为算术移位、逻辑移位和循环移位三种,可以将操作数左移或右移若干位。
3)数据传送指令
用于实现寄存器与寄存器、寄存器与存储器(主存)单元、存储器单元与存储器单元之间的数据传送。一次可以传送一个数据或一批数据。
4)转移类指令
用于控制程序流的转移,分为无条件转移和条件转移等类型。
☆ 无条件转移指令不受任何条件的约束,直接把程序转移到指令所规定的目的地,在那里继续执行。
☆ 条件转移指令则根据计算机处理结果来决定程序如何执行,它先测试根据处理结果设置的条件码,然后根据所测试的条件是否满足来决定是否转移。通常情况下,利用算术指令建立的条件码 N、Z、V、C 来控制程序的执行方向,实现程序的分支。
4.3 CISC 和 RISC 技术
4.3.1 什么是 CISC 和 RISC
指令系统的发展有两种截然不同的方向,一种是增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化;另一种是减少指令种类和简化指令功能,提高指令的执行速度。前者称为复杂指令集计算机(CISC),后者称为精简指令集计算机(RISC)。
4.3.2 CISC 的特点
CISC 的中心思想是在指令系统中增加更多、更复杂的指令,以适应不同应用领域的需要。其主要特点如下:
☆ 指令系统复杂庞大,指令数目一般为 200~300 条。
☆ 指令长度不固定,指令格式多,寻址方式多。
☆ 可以访存的指令不受限制。
☆ 各种指令使用频度相差很大。
☆ 各种指令执行时间相差很大,大多数指令需要多个时钟周期才能完成。
☆ 控制器大多数采用微程序控制。
☆ 难以用优化编译生成高效的目标代码程序。
4.3.3 RISC 的特点
RISC 的中心思想是要求指令系统简化,尽量使用寄存器-寄存器操作指令。其主要特点如下:
☆ 选取使用频度较高的一些简单指令复杂指令的功能由简单指令的组合来实现。
☆ 指令长度固定,指令格式种类少,寻址方式种类少。
☆ 只有 Load/Store(取指/存数)指令访存,其余指令的操作在寄存器之间进行。
☆ CPU 中有多个通用寄存器。
☆ 控制器采用组合逻辑控制。
☆ 采用流水技术,大部分指令在一个时钟周期内完成。
☆ 采用优化了的编译程序。
RISC机一定是流水CPU,而流水CPU不一定是RISC机。
4.3.4 RISC 和 CISC 的比较
RISC 和 CISC 的比较如下:
☆ RISC 更能充分利用 VLSI 芯片的面积。CISC 机的控制器大多采用微程序控制,其控制存储器在 CPU 芯片内所占的面积为 50%以上,而 RISC 机控制器采用组合逻辑控制,其硬布线逻辑只占 CPU 芯片面积的 10%左右。
☆ RISC 更能提高运算速度。RISC 机的指令数、寻址方式和指令格式种类较少,又设有多个通用寄存器,并适合流水线工作,所以运算速度更快,大多数指令在一个时钟周期内完成。
☆ RISC 便于设计,可降低成本,提高可靠性。RISC 机指令系统简单,所以机器设计周期短;其逻辑简单,所以可靠性高。
☆ RISC 有利于编译程序代码优化,编译程序容易选择更有效的指令和寻址方式。
☆ RISC 不易实现指令系统兼容。从指令系统兼容性来看,CISC 大多能实现软件兼容,即高档机包含了低档机的全部指令,并可加以扩充。但 RISC 机简化了指令系统,指令数量少,格式也不同于老机器,因此大多数 RISC 机不能与老机器兼容。
CISC | RISC | |
---|---|---|
指令系统 | 复杂 | 简单 |
指令数目 | 大于200条 | 小于100条 |
指令字长 | 不固定 | 固定 |
访存储 | 不加限制 | Load/Store |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
控制方式 | 微程序 | 组合逻辑 |
5. 中央处理器
5.1 CPU 的结构
早期CPU由运算器和控制器组成,称为中央处理机。随着ULSI技术的发展,CPU芯片外部增加了一些逻辑功能部件,CPU越来越复杂,因此CPU基本部分有了运算器、cache、控制器三大部分,称为中央处理器。
5.1.1 CPU 功能
**指令控制:**由于程序是一个指令序列,这些指令的相互顺序不能任意颠倒,必须严格按程序规定的顺序进行。
操作控制: CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应部件,从而控制这些部件按指令的要求进行动作。
**时间控制:**对各种操作实施时间上的定时。
**数据加工:**对数据进行算术运算和逻辑运算处理。
5.1.2 CPU的结构
1) 控制器
**控制器:**程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。
控制器的功能:
(1)从指令cache中取出一条指令,并指出下一条指令在指令cache中的位置。
(2)对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作。比如一次数据cache的读/写操作,一个算术逻辑运算操作,或一个输入/输出操作。
(3)指挥并控制CPU、数据cache和输入/输出设备之间数据流动的方向。
2) 运算器
**运算器:**算术逻辑单元(ALU)、通用寄存器、数据缓冲寄存器DR和状态条件寄存器PSW组成。
运算器的功能:
(1)执行所有的算术运算。
(2)执行所有的逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。
通常,一个算术操作产生一个运算结果,而一个逻辑操作则产生一个判决。
CPU中的主要寄存器
(1)数据缓冲寄存器(DR)
数据缓冲寄存器用来暂时存放ALU的运算结果,或由数据存储器读出的一个数据字,或来自外部接口的一个数据字。缓冲寄存器的作用是:
1.作为ALU运算结果和通用寄存器之间信息传送中时间上的缓冲;
2.补偿CPU和内存、外围设备之间在操作速度上的差别。
(2)指令寄存器(IR)
指令寄存器用来保存当前正在执行的一条指令。
1.当执行一条指令时,先把它从指令cache存储器(简称指存)读出,然后再传送至指令寄存器。
2.对操作码进行测试,以便识别所要求的操作。(指令译码器的工作)指令寄存器中操作码字段的输出就hi指令译码器的输入。
3.操作码一经译码之后,即可向操作控制器发出具体操作的特定信号。
(3)程序计数器(PC)
为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。
1.程序执行之前,必须将它的起始地址(第一条指令所在的指存单元地址)送入PC,因此PC的内容即是从指存提取的第一条指令的地址。
2.当执行指令时,CPU将自动修改PC的内容,以便使其保持的总是将要执行的下一条指令的地址。
3.由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1.
(4)数据地址寄存器(AR)
用来保存当前CPU所访问的数据cache存储器中(简称数存)单元的地址。
1.作用:由于要对存储器阵列进行地址译码,所以必须使用地址寄存器来保持地址信息,直到一次读/写操作完成为止。
2.信息的存入一般采用电位-脉冲方式,即电位输入端对应数据信息位,脉冲输入端对应控制信号。(结构和数据缓冲寄存器、指令寄存器不一样)
3.在控制信号作用下,瞬时地将信息打入寄存器。
(5)通用寄存器(R0~R3)
当算术逻辑单元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区。
例如:在执行一次假发运算时,选择两个操作数(分别放在两个寄存器)相加,所得的结果送回其中一个寄存器(如R2)中,而R2中原有的内容即被替换。
在众多通用寄存器中,其中任何一个可存放源操作数,也可存放结果操作数。
(6)状态字寄存器(PSW)
功能:
1.保存由算术指令和逻辑指令运算或测试结果建立的各种条件代码。
如:运算结果进位状态(C),运算结果溢出标志(V),运算结果为零标志(Z),运算结果为负标志(N)。这些标志通常为1位触发器保存。
2.保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。因此,状态条件寄存器是一个由各种状态条件标志拼凑而成的寄存器。
指令周期
指令周期:取出一条指令并执行这条指令的时间。
单周期:在一个CPU周期中完成取指和执行操作(少数指令可实现)。
多周期:大多数指令需要在多个CPU周期中完成指令周期的全部操作。
用户可见寄存器:通用寄存器,程序状态寄存器,程序计数器5.1.3 五条基本指令
一、MOV指令(传送指令,RR型)
MOV RO,R1
MOV执行(R1)->R0
MOV取指周期
1.程序计数器PC中装入第一条指令地址101(八进制);
2.PC的内容被放到指令地址总线ABUS(I)上,对指存进行译码,并启动读命令;
3.从101号地址读出的MOV指令通过指令总线IBUS装入指令寄存器IR;
4.程序计数器内容加1,变成102,为取下一条指令做好准备。
5.指令寄存器中的操作吗(OP)被译码;
6.CPU识别出是MOV指令。至此,取指周期即告结束。
MOV执行周期
1.操作控制器(OC)送出控制信号到通用寄存器,选择R1(10)作源寄存器,选择R0作目标寄存器;
2.OC送出控制信号到ALU,指定ALU做传送操作;
3.OC送出控制信号,打开ALU输出三态门,将ALU输出送到数据总线DBUS上。注意,任何时候DBUS上只能有一个数据。
4.OC送出控制信号,将DBUS上的数据,入到数据缓冲寄存器DR(10);
5.OC送出控制信号,将DR中的数据10打入到目标寄存器R0,R0的内容由00变为10.至此,MOV指令执行结束。
二、LAD指令(取数指令,RS型)
LAD R1,6
LAD从数存6号单元取数(100)->R1
LAD取指周期
步骤和MOV取指周期相同。
LAD执行周期
1.操作控制器OC发出控制命令打开IR输出三态门,将指令中的直接地址码6放到数据总线DBUS上;
2.OC发出操作命令,将地址码6装入数存地址寄存器AR;
3.OC发出读命令,将数存6号单元中的数100读出到DBUS上;
4.OC发出命令,将DBUS上的数据100装入缓冲寄存器DR;
5.OC发出命令,将DR中的数100装入通用寄存器R1,原来R1中的数10被冲掉。至此,LAD指令执行周期结束。
注意,数据总线DBUS上分时进行了地址传送和数据传送,所以需要2个CPU周期。
ADD指令(加法指令,RR型)
ADD R1,R2
ADD执行(R1)+(R2)->R2,结果为(R2)=120
ADD取指周期
步骤和MOV取指周期相同。
ADD执行周期
1.操作控制器OC送出控制命令到通用寄存器,选择R1做源寄存器,R2做目标寄存器;
2.OC送出控制命令到ALU,指定ALU做R1(100)和R2(20)的加法操作;
3.OC送出控制命令,打开ALU输出三态门,运算结果120放到DBUS上;
4.OC送出控制命令。将DBUS上数据打入缓冲寄存器DR;ALU产生的进位信号保存状态字寄存器在PS中;
5.OC送出控制命令,将DR(120)装入R2,R2中原来的内容20被冲掉。至此,ADD指令执行周期结束。
STO指令(存数指令,RS型)
STO R2,(R3)
STO用(R3)间接寻址,(R2)=120写入数存30号单元
STO取指周期
步骤和MOV取指周期相同。
STO执行周期
1.操作控制器OC送出操作命令到通用寄存器,选择(R3)=30做数据存储器的地址单元;
2.OC发出操作命令,打开通用寄存器输出三态门(不经过AU以节省时间),将地址30放到DBUS上;
3.OC发出操作命令,将地址30打入AR,并进行数存地址译码;
4.OC发出操作命令到通用寄存器,选择(R2)=120,作为数存的写入数据;
5.OC发出操作命令,打开通用寄存器输出三态门,将数据120放到DBUS上;
6.OC发出操作命令,将数据120写入数存30号单元,它原先的数据40被冲掉。至此,STO指令执行周期结束。
注意,DBUS是单总线结构,先送地址(30),后送数据(120),必须分时传送。
JMP指令(转移指令)
无条件转移指令,用来改变程序的执行顺序。
JMP 101
JMP改变程序执行顺序到101号单元
JMP取指周期
步骤和MOV取指周期相同。
JMP执行周期
1.OC发生操作控制命令,打开指令寄存器IR的输出三态门,将IR中的地址码101发送到DBUS上;
2.OC发出操作控制命令,将DBUS上的地址码101打入到程序计数器PC中,PC中的原先内容106被更换。于是下一条指令不是从106号单元取出,而是转移到101号单元取出。至此,JMP指令执行周期结束。
小结:
所有指令的取指周期是完全相同的,而且是一个CPU周期。但是指令的执行周期,由于各条指令的功能不同,所用的CPU是各个不相同的。
其中MOV、ADD、JMP指令是一个CPU周期;LAD和STO指令是两个CPU周期。
5.2 控制器时序系统,控制方式
5.2.1 控制方式
CPU的时序控制方式
1.同步控制方式 同步控制方式就是各项操作都用统一的时序信号控制,在每个机器周期中产生统一数目的节拍电位和工作脉冲。 2.异步控制方式 异步控制方式就是各项操作不采用统一的时序信号控制,根据具体情况来决定。各操作之间的衔接是由“结束-起始”信号来实现的。 3.联合控制方式 是上面两种的结合。在功能部件内采用同步方式,在功能部件之间采用异步方式。例如,CPU内部采用同步方式,延长节拍法。当CPU与其他部件进行数据交换的时候就开始采用异步方式,CPU只需要给出“起始”信号,然后让其他部件去工作,工作结束之后,就向CPU发送“结束”信号。
5.2.2 时序系统
节拍
在一个机器周期内,要完成若干个微操作。所以把一个机器周期分为若干个相等的时间段,每一个时间段对应一个电位信号,称为节拍电位信号,每一个节拍内完成一个微操作,完成微操作的开始时间由工作脉冲决定的。
不同机器周期内的节拍数也不相同。节拍的选取一般有以下几种方法: (1).统一节拍法 以最复杂的机器周期为基准决定出节拍数目大小和节拍时间长短。 (2).分散节拍法 根据机器周期实际需求,需要多少个节拍,分配多少个节拍。 (3).延长节拍法 在照顾大多数机器周期的前提下,选取一个适当的节拍数,作为基本节拍。如果多于这个节拍数,就延长一个或者两个节拍。 (4).时钟周期插入 在一些微型计算机中,不设置节拍,而是直接使用时钟周期信号。时钟周期可以不断插入等待始终周期。
工作脉冲
相当于是执行微操作的起点。
多级时序系统 小型计算机多采用机器周期、节拍、工作脉冲三级时序系统。 节拍电位和工作脉冲的时间配合关系 节拍电位是信息的载体,工作脉冲相当于的触发器的开关。
5.3 指令执行过程
5.3.1 指令周期
指令周期和机器周期 指令周期就是指从取指令、分析取数到完成这个指令的所有时间。 机器周期又称CPU周期。通常将一个指令周期分为多个机器周期,每个周期完成一个基本操作。例如一个指令周期可以分为:取指周期(机器周期)、取数周期(机器周期)、执行周期(机器周期)和中断周期(机器周期)。
指令周期 = i × 机器周期
一条指令所需的最短时间为两个机器周期:取指周期和执行周期。 机器周期的大小由CPU对主存的最短操作时间来决定的(因为操作大致分为CPU对其内部和对主存的,CPU对主存操作时间较长,所以选用对对主存操作时间最短来定义)。
5.3.2 指令运行的基本过程
一般可以分为三个阶段:取指令阶段、分析取数阶段和执行阶段。 1.取指令阶段 取指令阶段就是将指令从主存中取出放入到指令寄存器中,具体操作: (1).将程序计数器(PC)中的地址内容发送到地址寄存器(MAR)中,然后发送到地址总线(AB)上。 (2).由控制单元(CU)向控制总线(CB)发送读命令。 (3).从主存中将指令读出,经过数据总线(DB)送入到数据寄存器(MDR)中。 (4).将MDR中的指令放入到指令寄存器(IR)中。 (5).将PC内容进行自加,为下一条指令做好准备。
以上的操作对于任何的指令来说都是必要的,称为公共操作。过程图为:
2.分析取数阶段 此阶段主要完成两个功能:一个是通过指令译码器(ID)来识别和区分指令。另一个是通过地址形成部件来获得操作数地址,从而获取操作数。由于指令的功能不同,寻址方式不同,所以在这个阶段的操作也各不相同。 这个阶段还可以细分为间址周期、取数周期。 3.执行阶段 这个阶段就是完成指令的各个操作,形成稳定的运算结果,并将其存储起来。
总的来说,计算机的基本工作过程就是取指令、取数、执行指令。一直循环,直到遇到停机指令或者外来的干预为止。
5.4 微程序控制原理
本章主要讲的是微操信号发生器(也叫控制单元、CU)的工作原理。微程序设计技术的实质是将程序设计技术和存储技术相结合。 程序设计技术体现在:将微操作信号进行编码,形成控制字(微指令),然后微指令按照时间先后排列形成微程序,微程序和指令(机器指令)一一对应的。 存储技术体现在:将微程序存放在一个只读的控制存储器中。
5.4.1 微程序控制的基本概念
1. 微程序设计的提出与发展 这个设计理念最早是由应该剑桥大学的M.V.Wikes教授于1951年提出的。也就是:一条指令(机器指令)可以分解为许多基本的微命令序列。 2.基本术语 (1).微命令和微操作 微命令和微操作是一一对应的,根据字面意思去理解:微命令是命令,是做微操作的控制信号,而微操作是一种操作,指的是微命令的操作过程。 微命令之间有兼容性和互斥性之分。兼容的微命令可以同时产生,互斥的则不能同时产生。 (2).微指令、微地址 微指令是若干个微命令的集合,也是控制存储器中的一个单元的内容。微地址就是微指令在控制存储器中的地址。 一条微指令一般包含两个部分信息(类似于指令,也是包含两部分:操作码和地址码): <1>.微操作控制字段,又称微操作码控制字段,用来产生很多微操作的信号,进而产生微操作的。 <2>.顺序控制字段,又称微操作地址码字段,用来产生下一条微指令地址的。 (3).微周期 从控制存储器中读取并执行一条微指令的全部时间。 (4).微程序 一系列微指令有序排列的结合就是微程序。每一条机器指令都对应一个微程序。
简单说一下我对这几个概念之间关系的理解
5.4.2 微指令编码法
这里说的微指令编码法指的就是操作控制字段的编码方法。 1.直接控制法(不译码法) 这种形式的微指令字中,微操作控制字段中的每一个独立的二进制就代表一个微命令,1的话就代表微命令有效;0的话代表微命令无效。
2.最短编码法: 将所有的微命令统一编码,若微命令的总数为N,操作控制字段的长度为L,他俩之间满足这个关系式: L>=log2N 举个简单的例子:假如有6条微命令,那么我们就可以用三位二进制来表示这个6条命令,还能多出两个表示其他命令。
3.字段编码法 将上述两者进行折中。将操作控制字段分为很多个小段,小段内采用最短编码法,段与段之间采用直接控制法。 采用字段编码法要注意以下的规则: <1>把互斥性的微命令分在同一段内,兼容性的分在不同段内。因为每个段内只产生一个微命令,所以就会解决在一个微指令中同时出现两个互斥的微命令的这种情况。 <2>每个小段内的信息位不能太多(做题的时候一般每个小段内互斥的找三个就可以了,太多了的话难找)。 <3>每个小段都要留一个状态表示不发出任何微命令。例如:三位二进制表示的时候,其中的000就表示不操作。
5.4.3 微程序控制器的组成和工作过程
1.微程序控制器的基本组成 (1).控制存储器(CM) 这是核心部件,是用来存放微程序的。 (2).微指令寄存器(uIR) 用来存放从CM中取出的微指令的。 (3).微地址形成部件 用来产生初始微地址和后继微地址的。 (4).微地址寄存器(uMAR) 保存从微地址形成部件传来的微地址的,为在CM中读取该微指令做准备。 2.微程序控制器的工作过程 这个微程序控制器的工作过程就是在完成机器指令的过程(机器指令的操作码部分经过译码进入到微程序控制器,然后微程序控制器控制完成指令的工作,将机器指令分解为一个个的微指令,然后又将微指令细分为微操作去控制完成),具体流程: (1).执行取指令的公共操作。当机器开始运行的时候,自动将取指微程序的入口地址送入到uMAR中,然后从CM中读出相应的微指令送入到uIR中。然后微指令产生相应的微命令来实现取指令的操作。 (2).取到指令之后,由机器指令通过微地址形成部件来形成与他对应的微程序入口地址,然后送入到uMAR暂存地址。 (3).从CM中逐条取出对应微指令并执行。 (4).在执行完一条机器指令之后,继续从第一步,开始取下一条指令。
3.机器指令对应的微程序 通常一个机器指令对于一个微程序。但是由于像取指令这种公共操作,我们完全可以将它独立编成一个微程序。同样道理,我们也可以编出间址周期和中断周期的微程序。所以说,若一个指令系统中有n种及其指令,则控制存储器中的微程序至少有n+1个。
5.4.4 微程序设计
1.微程序设计方法 在实际进行微程序设计的时候,我们往往希望能够让微指令字长短一些,减少微程序的长度,提高微程序的执行速度。 (1).水平型微指令以及水平型微程序设计 水平型微指令指的是一次能同时发出并执行多个微命令的微指令。他的微指令字长,执行一个机器指令的微指令个数少,并行能力强。微指令和指令的差别很大。由于面向内部逻辑控制,称为硬方法。 (2).垂直型微指令以及垂直型微程序设计 垂直型微指令指的是一次只能发出并执行一个微命令的微指令。他的微指令字段,执行一个机器指令的微指令个数多,并行能力弱。微指令和机器指令相似。由于面向算法,称为软方法。 (3).混合型微指令 综合前两者的特点。具有不太长的微指令字和一定的并行能力。 2.微指令的运行方式 (1).串行方式 在这种方式下,指令是一个接着一个执行的,一个指令完全执行完毕之后,开始执行下一个指令。这就导致,在取微指令阶段,CM在工作,但是数据通路在等待;在执行阶段,CM在等待,数据通路在工作。 (2).并行方式 这种方式就能解决上述的问题,充分利用资源。在本条机器指令的执行微指令阶段,就可以开始预取下一条微指令了。但是这种方式存在一个问题:如果下一条要取的微指令的地址需要现在执行的微指令的运算结果的话,就要等现在执行的微指令执行完毕之后才能取到下一条微指令的地址。
(3).串、并行混合方式 下一条要取的微指令地址不需要现执行微指令的运算结果的时候,就让他采用并行方式;而要取下一条微指令的地址需要现执行微指令的运算结果的时候,就让他采用串行方式。 3.微程序仿真 微程序仿真指的的是用一台计算机的微程序去模仿另一台计算机的指令系统,让不兼容的计算机之间具有程序兼容的能力。总而言之,就是让一台计算机能够运行自己的程序的同时,还能运行另一台计算机的另一套程序。这要怎么实现呢?
我们将进行仿真的计算机称为宿主机,将被仿真的机器称为目标机。宿主机为什么能执行自己的程序呢?因为宿主机在他的主存储器和控制存储器中有和本机有关的程序。我们只需要在主存储器中和控制存储器中加入和目标机有关的程序就可以实现运行目标机的程序了(在宿主机的主存储器中加入目标机的程序以及仿真支持软件,在宿主机的控制存储器中加入目标机的 解释目标机指令的微程序)。 4.动态微程序设计 一般情况下,一台计算机的指令系统就对应一系列固定的微程序,设计好之后就不允许改变了,这样的设计叫做静态微程序设计;反之,若能够根据不同的应用目标就能改变微程序,那么这样的设计就叫做动态微程序设计。 根据其原理,他就需要可写控制存储器的支持了。 5.用户微程序设计 指的是用户可借助可写控制存储器来进行微程序设计,通过本机指令系统中保留的扩充指令用的操作码或者未定义的操作码来定义用户扩充指令,然后根据用户扩充的指令来编写对应的微程序,然后将编写的微程序写入到控制存储器中。这样用户设计的指令就能像本机原来的指令一样去使用了。
控制单元的主要功能就是发出不同的微操作控制信号。 以下为一个单累加器结构(与运算器连接的只有一个累加寄存器)的简单CPU模型: 其中的G为标志触发器,当G为1的时候表示机器运行,为0的时候表示停机。 这个CPU包含三类指令:非访存指令、转移指令和访存指令。其中非访存指令和转移指令在执行周期的时候不放问存储器,而访存指令在执行周期访问存储器。他们的指令周期如下,其中访存指令又可以细分为直接访存和间接访存:
在简单的CPU模型中,一般将指令周期分为四个CPU周期:取指、间址、执行、中断。为了区别他们,可以在CPU中设置四个标志触发器:
哪个触发器处于1,就表示机器处于哪个周期。
(1)列出微操作命令的操作时间表
1、写出对应机器指令的微操作及节拍安排(注意:每条微指令结束都要指明下一条的地址)
取指阶段
执行阶段
非访存指令
访存指令
转移类指令
2、确定微指令格式
微指令的编码方式
- 采用直接控制
后续微指令的地址形成方式
- 由机器指令的操作码通过微地址形成部件形成
- 由微指令的下地址字段直接给出
微指令字长
- 由 20 种微操作确定 操作控制字段 ,最少 20 位
- 由 38 条微指令确定微指令的 下地址字段 为 6 位
- 微指令字长 可取 20 + 6 = 26 位
微指令字长的确定
- 38 条微指令中有 19 条38 条微指令中有 19 条是关于后续微指令地址 -> CMAR
- 1 条:OP ( IR ) -> 微地址形成部件 -> CMAR
- 18 条:Ad ( CMDR ) CMAR
- 若用 Ad ( CMDR ) 直接送控存地址线,则 省去了输至 CMAR 的时间,省去了 CMAR
- 同理
- OP ( IR ) -> 微地址形成部件 -> 控存地址线,可省去 19 条微指令,2 个微操作
- 即:
- 下地址字段最少取 5 位:38 - 19 = 19
- 操作控制字段最少取 18 位:20 - 2 = 18
- 38 条微指令中有 19 条38 条微指令中有 19 条是关于后续微指令地址 -> CMAR
省去了 CMAR 的控制存储器
最终确定(考虑留有一定的余量)
- 取操作控制字段:18位 -> 24位
- 下地址字段:5位 -> 6位
3、编写微指令码点(只要对指令译码,然后执行控制字段对应操作即可)
操作
对应指令码点
5.4.5 指令的微操作序列
控制器在实现一个指令单时候,总要把每条指令分解为一系列时间上先后有序的最基本、最简单的微操作,这个序列就是微操作序列。下面举两个简单的例子,分析它的微操作序列:
1.加法指令ADD@R0,R1 这条指令是将R0的内容作为地址送到主存中,取回一个操作数,和R1中的操作数进行相加,然后将结果送回到主存中。 ((R0))+(R1)->(R0)
(1).取指周期 取指周期是微操作序列的公共操作,每个指令都要执行这个周期。
<1>PCout和MARin有效,将PC内保存的指令地址经过CPU内部总线送到MAR中,记作:(PC)->MAR <2>控制单元CU通过控制总线,向主存发送读命令,记作:Read。 <3>主存通过数据总线,将地址内的指令送至MDR中,记作:M(MAR)->MDR。 <4>MDRout和IRin有效,将MDR中的指令保存在指令寄存器(IR)中,记作:(MDR->IR)。到这里,指令已经从主存中取出并且放到了指令寄存器中,然后指令的操作码经过指令译码器(ID)开始控制控制单元(CU)了。 <5>PC内容加1,记作:(PC)+1->PC。 (2).取数周期 取数周期完成取操作数的任务,其中一个操作数在主存中,另一个在寄存器R1中。
<1>R0out和MARin有效,将被加数地址经过内部总线送到MAR中,记作:(R0)->MAR。 <2>向主存发出读命令,Read。 <3>存储器通过数据总线将MAR所指单元的内容送至MDR,同时MDRout和Yin(Y是直接连接在ALU的一端的一个寄存器,下面有图)有效,记作:M(MAR)->MDR->Y。 (3).执行周期 完成加法运算任务,并将结果写回到主存。
<1>R1out和ALUin有效,同时CU发送ADD控制信号,使得R1和Y的内容相加,结果送到寄存器Z(ALU输入直接相连的一个寄存器,详情见下图),记作(R1)+(Y)->Z。 <2>Zout和MDRin有效,将Z中保存的数据放入到数据寄存器中,记作(Z)->MDR。 <3>向主存中发写命令,记作:Write。
2.转移指令JC A 这是一条转移指令,就是改变PC的值,让其不再顺序取指。如果上次运算有进位(C=1),就转移,A为位移量,也就是PC要加的数,转移后的地址为PC+A,这就是转移之后下一条指令的地址。
(1).取指周期 公共操作,和上一条的完全一样(准确来说是每一条指令的都一样)。 (2).执行周期 如果有进位就执行(PC+A)->PC,没有的话就跳过一下几步。 <1>PCOUT和ALUin有效,记作(PC)->Y(C=1) <2>Ad IRout和ALUin有效,同时CU发送ADD信号,让IR中的地址码字段A和Y的内容相加,结果送到寄存器Z,记作Ad(IR)+(Y)->Z(C=1) <3>Zout和PCin有效,将转移地址送入PC,记作(Z)->PC(C=1)·
5.5 流水线
5.5.1 指令流水原理
可以将指令周期简单分为取指令和执行指令
取指令由取指部件完成,执行指令由执行部件完成,如果采用串行化执行,则在执行指令1时,取指部件是空闲的。
指令的二级流水
在执行指令1阶段,同时将指令2取出放入指令缓存部件,等执行部件执行指令1结束,则直接执行指令2,理想情况,流水线的效率将加倍。
仍存在的问题:
指令执行时间一般大于取值时间,因此取值阶段要等待一段时间,存放在缓冲区的指令不能立即交给执行部件;
当遇到条件转移指令时,下一条指令是不可知的;采用猜测法,遇到条件转移指令时,也将下一条指令取出送入指令缓冲区,如果转移没有发生则继续执行,如果转移发生,则重新取指令。
将指令处理过程进一步细分:
取指FI 从存储器取出一条指令放入指令部件缓冲区
指令译码DI 确定操作性质和操作数地址形成方式
计算操作数地址CO 计算操作有效地址
取操作数FO 从存储器中取出操作数
执行指令EI 执行指令,将结果存入目的位置
写操作书WO 将结果存入寄存器
将指令周期分为6个阶段,可以实现指令的6级流水
5.5.2 影响流水线性能因素
1) 结构相关 资源相关
不同指令争用同一部件产生资源冲突
FO取指和FI取操作数会发生访存冲突
解决方式:
- 流水线完成前一条指令对数据的存储器访问时,暂停取后一条指令
- 设置独立存储器存放操作数和指令
- 采用指令预取技术,将指令预取到指令队列中,这样取操作数操作便可以独占存储器访问
2) 数据相关
指令在流水线中重叠执行,当后继指令需要用到前面的指令产生的结果时发生的
不同指令重叠操作,可能改变对操作数的读写访问顺序
数据相关冲突有:
写后读相关:先写入寄存器,再读出寄存器
读后写相关:先读寄存器,再写寄存器
写后写相关:指令1先写寄存器,指令2再写寄存器
解决方式:
后推法 遇到数据相关时,停顿后继指令运行,直到前面指令结果已经生。为硬件阻塞,软件插入NOP 指令
定向技术 旁路技术 将某条指令执行结果不送回寄存器而是直接送到其他指令所需的地方
数据旁路技术用于解决数据相关
3) 控制相关
由转移指令引起 若是条件转移指令,则转移目标地址可能发生跳转,影响流水线效率。
解决方式:
尽早判别转移是否发生,尽早生成转移目标地址
预取转移成功和不成功两个方向的目标指令
加快和提前形成条件码
分支预测
5.5.3 流水线性能
1) 吞吐率
单位时间内流水线完成指令或输出结果数量
最大吞吐率:流水线在连续流动达到稳定状态后所得吞吐率
m段流水线各段时间均为t
实际吞吐率:流水线完成n条指令实际吞吐率
2) 加速比
m段流水线速度与等功能非流水线速度之比
3) 效率
流水线中各功能段利用率
流水线效率为流水线各段处于工作时间时空区和流水线中各段总时空区之比,如图
5.5.4 流水线多发技术
假定指令周期分为四个阶段:取指FI 译码ID 执行EX 回写WR
1) 超标量技术
在每个时钟周期内同时并发多条独立指令
处理机中配置多个功能部件和指令译码电路,多个寄存器端口和总线;编译程序决定哪几条相邻指令可并行执行
例如 三条指令是相互独立的,可以并行执行
MOV BL,8
ADD AX,1756H
ADD CL,4EH
2) 超流水线技术
在一个时钟周期内再分段,一个功能部件使用多次
3) 超长指令字技术
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字
5.5.5 流水线结构
1) 指令流水线结构
将指令执行阶段分为取指 指令译码 地址形成 取操作数 执行指令 回写结果几个阶段,对应相应结构如下
2) 运算流水线结构
将浮点加法运算分成对阶 尾数加 结果规格化 3个阶段
3) 五级流水线
经典的五级流水线:取址、译码/读寄存器、执行/计算有效地址、访问内存(读或写)、结果写回寄存器
处理器内部有很多通用寄存器,这些寄存器用来存储指令的操作数,它对程序员可见,如x86有8个通用寄存器,RISC处理器则更多,常有32个或64个等。这一堆寄存器也被叫做Register file(寄存器堆)。
在流水线设计中,为了确保不同流水线节拍不会相互影响,在每个阶段引入了流水线寄存器来分隔各个流水线节拍:
寄存器就像是红灯,信号只在固定的时间才会将左端节拍的值传递给右端节拍,这样各个节拍的工作就不会出现紊乱。
在汇编语言中,ALU(算术逻辑单元)直接访问通用寄存器进行运算,在硬件实现时,通用寄存器中的数据先被读到流水线寄存器中,即ALU的输入寄存器中,ALU运算结束后,数据会存储在ALU的输出寄存器中,最后再送回到通用寄存器中。下图为ALU、通用寄存器、ALU输入输出寄存器的结构图。
流水线寄存器对程序员是不可见的,ALU指令的执行节拍可以进一步细分为3个子节拍:
(1)从寄存器堆中读取寄存器的值。
(2)进行运算。
(3)将运算结果写回到寄存器堆中。
根据这个分析,处理器的流水线可以进一步细分。MIPS处理器在设计时,将处理器的执行过程划分为5个阶段。
流水线阶段 | 描述 |
---|---|
IF | Instruction Fetch,取指 |
ID | Instruction Decode,译码 |
EX | Execute,执行 |
MEM | Memory Access,内存数据读或者写 |
WB | Write Back,数据写回到通用寄存器中 |
5级流水线
在MIPS的5级流水线中,从寄存器堆中读数据到ALU输入寄存器这个步骤被放在了ID阶段,将运算结果写回到寄存器堆被作为一个独立的阶段。
到目前为止,我们都认为数据已经存放在寄存器中,事实上,数据被存放在内存(Memory)中,在RISC处理器中,数据要先从内存load(导入)到寄存器中,然后再参与运算,然后将运算结果store(导出)到存储器中去。因此,MIPS的5级流水线增加了一个MEM阶段。
对于运算指令,在MEM阶段空闲。对于load指令,在EX阶段计算要访问的地址,在MEM阶段从内存中将数据读入到MEM register(MEM和WB之间的流水线寄存器)中,在WB阶段,将MEM register的数据写回到Register file中。对于store指令,在EX阶段计算要访问的地址,在MEM阶段将寄存器中的数据写回到存储器中。
下图是MIPS 5级流水线的执行顺序图:
这5级流水线可以说是史上最经典的流水线,早期的MIPS、ARM9等处理器使用这种流水线,以后的处理器也都能看到它的影子,包括x86处理器等。
6. 总线
6.1 概述
6.1.1 概念
系统总线
- 数据总线的功能来搭载信息,
- 地址总线来决定将信息送往何处,
- 控制总线来决定如何动作。
6.1.2 分类
按功能层次分类
- 片内总线:CPU内部寄存器和寄存器之间、寄存器和ALU(运算器)之间的公共连接线。
- 系统总线:(CPU、主存、I/O接口)之间的总线,分时复用的话,可以分为数据总线、地址总线和控制总线。
- 功能总线:计算机与其他系统(远程设备、测试设备)之间的总线
按数据线的多少分类
- 并行总线:含有多条双向数据线(由于电生磁的缘故,速度低于串行总线)
- 串行总线:只含有一条双向数据线或两条单向数据线
6.1.3 结构分类
单地址总线中,统一编码,所以不需要I/O 指令
单总线结构框图
双总线结构框图
三总线结构框图
三总线结构的又一形式
四总线结构框图
6.1.4 性能指标
6.2 组成和结构
1) 地址总线
地址总线的宽度决定了CPU的寻址能力
2) 数据总线
宽度决定了CPU和其他部件进行数据传送时一次的数据传送量
- 指令
- 操作数
- 中断信号
3) 控制总线
宽度决定了CPU对系统中其他器件的控制能力
- 握手应答信号
- 时序信号
- I/O设备和存储设备的响应信号
例题:若内存容量为4GB,字长为32,则______。 A.地址总线和数据总线的宽度都为32 B.地址总线的宽度为30,数据总线的宽度为32 C.地址总线的宽度为30,数据总线的宽度为8 D.地址总线的宽度为32,数据总线的宽度为8 答案:A 内存容量为4GB,即内存单元的地址宽度为32位。字长为32位即要求数据总线的宽度为32位,因此地址总线和数据总线的宽度都为32。
6.3 设计和实现
6.3.1 仲裁
为了保证同一时刻只有一个主设备使用主线,就需要设置一个总线判优和仲裁控制机构,判优来确定那个那个设备先使用总线,仲裁这个词理解成管理,判优按照仲裁控制可以分为集中式控制和分布式控制
1) 集中仲裁方式
集中式仲裁就是把所有的仲裁全部放在一起,大家想要仲裁的话就去同一个地方去仲裁。
链式查询方式
1.主设备发送BR信号(BR信号有效,说明不止一个设备在请求),此时看BS线是否有效,有效的话就等BS完了之后再请求。 2.当BS信号无效之后,BR信号此时被总线控制器响应,发送出BG信号,然后BG信号开始传送,直到传送到从设备。
计数器定时查询方式
相比与链式加了一条线:计数器查询线(这个计数器开始从0一直加,0代表第一个设备)用来查询请求是哪个设备发出的。 这种计数的开始有两种:1.每次从0开始(这样就和链式的一样了)2.从上次中止的开始(这样每个设备被查询的机会相等)
需要
独立请求方式
既然比较难确定是哪个设备发出的信号,那老子就给每个设备都加上一根BR,总线控制器看到BRk的k之后就直接知道是第k个设备发出的请求。
需要2n+1 根数据线
2) 分布仲裁方式
直接给每个设备发一个总线控制器,在这样的主线上,主设备可以启动一个总线周期,而从设备只能响应主设备的请求。既然没有了集中的总线控制器,那么就会出现到底总线给哪个设备用呢?一般采用优先级、冲突检测或公平策略来进行仲裁。而这其中的冲突检测就是我们计算机网络中著名的CS(载波侦听)MA(多路访问)/CD(边发边听)
6.3.2 定时方法
总线事物(总线传输周期):
- 申请分配阶段:主模块申请,总线仲裁决定
- 寻址阶段:主模块向从模块给出地址和命令
- 传数阶段:主模块和从模块交换数据
- 结束阶段:主模块撤销有关信息
总线通信的四种方式:
- 同步通信:由统一时标控制数据传送
- 异步通信:采用应答方式,没有公共时钟标准
- 半同步通信:同步、异步结合
- 分离式通信:充分挖掘系统总线每个瞬间的潜力
不同速度之间传送数据时,采用同步方式,也可以用异步方式
1) 同步定时方式
他俩用同一个时钟,这个时钟发信号了,他俩就开始工作。而这个时钟周期的话由于必须适应最慢的接口,而导致变大,整体变慢。
2) 异步定时方式
他俩不用通过时钟来控制请求和回答,而是通过:不互锁、半互锁和全互锁来控制请求的撤销和回答的撤销
异步通信方式,也叫做应答方式,没有公共的时钟信号,也没有固定的时间间隔,完全依靠“握手”解决定时控制
传送操作是由双方按需分配时间的
(1)不互锁:请求的结束和回答的结束不互锁(也就是没有关系) (2)半互锁:请求的结束,并没有撤销,等到回答信号之后才撤销请求,而回答信号的撤销由自己决定
(3)全互锁:请求的结束之后,收到回答信号,撤销请求的同时,给回答发送请求,让其撤销回答信号
6.4 举例
1) 系统总线标准
2) 局部总线标准
3) 设备总线标准
4) 视频总线标准
5) 总结
7. 输入输出系统
- I/O接口:主机与I/O设备之间设置的一个硬件电路及相应的软件控制;
- 输入设备:把现实的信息形式变换为计算机能接受并识别信息形式的设备;
- 输出设备:将计算机处理过的二进制代码信息,转换为人们能识别信息形式的设备;
- I/O端口的统一编制方式:将I/O端口地址看作是内存单元地址的一部分。特点:I/O地址占用了存储空间,减少了主存的容量,访问I/O使用访问主存的专用指令;
- I/O端口的不统一(即独立)编制方式:I/O端口地址与内存单元的地址是分开的,有各自独立的存储空间。特点:不影响主存容量,访问I/O时使用专用指令;
- I/O的控制方式有:程序查询方式、程序中断方式、直接存储器存取方式(DMA);
- I/O设备与主机采用程序查询方式交换信息,CPU与设备处于串行工作状态;程序中断方式,CPU与设备并行工作;
- 中断:计算机在执行程序的过程中,当出现异常情况或特殊情况时,计算机停止现行程序的运行,转向对这些异常或特殊请求的处理,处理结束后,再返回到现行程序的间断处继续执行源程序,这个过程就叫做中断;
- 中断识别的方法有:程序查询法、硬件查询法、独立请求法;
- I/O设备的中断传输方式可以做到实时响应,但大批量传输数据时,中断次数过于频繁,效率受到影响;
- DMAC与CPU同时访问主存所引起主存使用权冲突的处理方法有:停止CPU使用主存法、DMAC与CPU交替使用主存法、周期挪用发;
- 在采用DMA方式的I/O系统中,其基本思想主要是主存与外存设备之间建立直接的数据通道;
7.1 基本概念
7.1.1 I/O系统演变过程
早期: CPU和I/O串行工作,分散连接
**程序查询方式:**由CPU通过程序不断查询I/O设备是否已做好准备,从而控制I/O设备与主机交换信息。
接口模块和DMA阶段: CPU和I/O并行工作,总线连接
**中断方式:**只有I/O设备准备就绪并向CPU发出中断请求时才予以响应。
**DMA方式:**主存和I/O设备之间有一条直接数据通路,当主存和I/O设备交换信息时,无需调用中断服务程序。
具有I/O通道结构的阶段
在系统中设有通道控制部件,每个通道都挂接若干个外设,主机在执行I/O命令时,只需启动有关通道,通道将执行通道程序,从而完成I/O操作。
具有I/O处理机的阶段
7.1.2 I/O系统基本组成
一般来说,I/O系统由I/O软件和I/O硬件两部分构成。
I/O软件: 包括驱动程序、用户程序、管理程序、升级补丁等
通常采用I/O指令和通道指令实现CPU和I/O设备的信息交换。
I/O指令: CPU指令的一部分
操作码 命令码 设备码 操作码:识别I/O指令
命令码:做什么操作
设备码:对哪个设备进行操作
通道指令: 通道自身的指令
指出数据的首地址、传送字数、操作命令
通道指令放在主存中
由CPU执行启动I/O设备的指令,由通道代替CPU对I/O设备进行管理
I/O硬件 包括外部设备、设备控制器和接口、I/O总线等。
7.1.3 I/O方式简介
只有DMA是纯硬件实现的,其他都有一定的程序和指令
7.1.4 外部设备
外部设备也称为外围设备,是除了主机以外的、能直接或间接与计算机交换信息的装置。
输入设备:用于向计算机系统输入命令和文本、数据等信息的部件。键盘和鼠标是最基本的输入设备。如:键盘、鼠标。
**输出设备:**用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件。
**外存设备:**是指除计算机内存及CPU缓存等以外的存储器。硬磁盘、光盘等是最基本的外存设备。
1. 显示器
**屏幕大小:**以对角线长度表示,常用的有12~29英寸等。
**分辨率:**所能表示的像素个数,屏幕上每一个光点就是一个像素,以宽、高的像素的乘积表示,例如:800600,1024768和1280*1020等。
**灰度级:**灰度级是指黑白显示器中所显示的像素点的亮暗差别,在彩色显示器中则表现为颜色的不同,灰度级越多,图像层次越清楚逼真,典型的有8位(256级)、16位等。n位可以表示 2n2n 种不同的亮度或颜色。
**刷新:**光点只能保持极短的时间便会消失,为此必须在光点消失之前再重新扫描显示一遍,这个过程称为刷新。
刷新频率:单位时间内扫描整个屏幕内容的次数,按照人的视觉生理,刷新频率大于30Hz时才不会感觉闪烁,通常显示器刷新频率在60~120Hz。
**显示存储器(VRAM)😗*也称刷新存储器,为了不断提高刷新图像的信号,必须把一帧图像信息存储在刷新存储器中。其存储容量由图像分辨率和灰度级决定,分辨率最高,灰度级越多,刷新存储器容量越大。
VARM容量=分辨率×灰度级位数VARM带宽=分辨率×灰度级位数×帧频VARM容量=分辨率×灰度级位数VARM带宽=分辨率×灰度级位数×帧频
2. 外存储器
计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。
所谓"磁表面存储",是指某些磁性材料薄薄地涂在金属绿或塑料表面上作为载磁体来存储信息。磁盘存储器、磁带存储器和磁鼓存储器均属于磁表面存储器。
磁表面存储器的优点:
- 存储容量大,位价格低;
- 记录介质可以重复使用;
- 记录信息可以长期保存而不丢失,甚至可以脱机存档;
- 非破环性读出,读出时不需要再生。
磁表面存储器的缺点:
- 存取速度慢;
- 机械结构复杂;
- 对工作环境要求较高。
**原理:**当磁头和磁性记录介质由相对运动时,通过电磁转换完成读/写操作。
**编码方式:**按某种方案(规律),把一连串的二进制信息变换成存储介质磁层中一个磁化翻转状态的序列,并使读/写控制i电路容易、可靠地实现转换。
**磁记录方式:**通常采用调频制(FM)和改进型调频制(MFM)的记录方式。
外存储器既可以作为输入设备,也可以作为输出设备。(既可以存数据,也可以读数据)
磁盘存储器
磁盘设备的组成:
存储区域:
一块硬盘含有若干个记录面,每个记录面划分为若干条磁道,而每条磁道又划分为若干个扇区,扇区(也称为快)是磁盘读写的最小单位,也就是说磁盘按块存取。
- 磁头数(Heads):即记录面数,表示硬盘总共有多少个磁头,磁头用于用于读取/写入盘片上记录面的信息,一个记录面对应一个磁头。
- 柱面数(Cylinders):表示硬盘每一面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面。
- 扇区数(Sectors):表示每一条磁道上有多少个扇区。
记录面*磁道*扇区
硬盘存储器:
硬盘存储器由磁盘驱动器、磁盘控制器和盘片组成。
磁盘控制器:核心部件是磁头组件和盘片组件,温切斯特盘是一种可移动头固定盘片的硬件存储器。
磁盘控制器:是硬盘存储器和主机的接口,主流的标准有IDE、SCSI、SATA等。
磁盘的性能指标:
**磁盘的容量:**一个磁盘所能存储的字节总数称为磁盘容量。磁盘容量有非格式化容量和格式化容量之分。(容量:非格式化>格式化)
非格式化容量是指磁记录表面可以利用的磁化单元总数;
格式化容量是指按照某种特定的记录格式所能存储信息的总量。
**记录密度:**记录密度是指盘片单位面机上记录的二进制的信息量,通常以道密度、位密度和面密度表示。
道密度是沿磁盘半径方向单位长度上的磁盘数;
位密度是磁道单位长度上能记录的二进制代码位数;
面密度是位密度和道密度的乘积。
注:磁盘所有磁道记录的信息量一定是相等的,并不是圆越大信息越多,故每个磁道的位密度都不同。
平均存取时间:
平均存取时间=寻道时间(磁头移动到目的磁道)+旋转延迟时间(磁头定位道所在扇区)+传输时间(传输数据所花费的时间)某磁盘的转速为10000转/分,平均寻道时间 6ms,磁盘传输速率为20MB/s,磁盘控制器延迟时间为0.2ms,读取一个4KB的扇区大概需要多少时间---9.4ms
平均寻道时间6ms
旋转延迟时间=60/10000=6ms ,6ms 转一圈。平均时间寻找 扇区时间为3ms
传输时间 4KB/20MB=0.2ms
6+3+0.2+0.2
**数据传输率:**磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
假设磁盘转速为r(转/秒),每条磁道容量为N个字节,则数据传输率为Dr=rNDr=rN
磁盘地址:
主机向磁盘控制器发送寻址信息,磁盘的地址一般如图所示:
驱动器号 | 柱面(磁道)号 | 盘面号 | 扇区号 |
---|---|---|---|
磁盘的工作过程:
硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。
硬盘属于机械式部件,其读写操作时串行的,不可能在同一时刻既读又写,也不可能读两组数据或写两组数据。
磁盘阵列:
RAID(廉价冗余磁盘阵列)是将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。
RAID分级如下:
- RAID0:无冗余和无校验的磁盘阵列
- RAID1:镜像磁盘阵列
- RAID2:采用纠错的海明码的磁盘阵列
- RAID3:位交叉奇偶校验的磁盘阵列
- RAID4:块交叉奇偶校验的磁盘阵列
- RAID5:无独立校验的奇偶校验磁盘阵列
RAID通过同时使用多个磁盘,提高了传输率;通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量;通过镜像功能,可以提高安全可靠性;通过数据校验,可以提供容错能力。
光盘存储器
光盘存储器是利用光学原理读/写信息的存储装置,它采用聚焦激光束对盘式介质以非接触的方式记录信息。
**特点:**存储密度高,携带方便,成本低,容量大,存储期限长,容易保存等
光盘的类型如下:
- CD-ROM:只读型光盘,只能读出其中内容,不能写入或修改。
- CD-R:只可写入一次信息,之后不可修改。
- CD-RW:可读可写光盘,可以重复读写。
- DVD-ROM:高容量的CD-ROM,DVD表示通用数字化多功能光盘。
固态硬盘
在微小型高档笔记本电脑中,采用高性能Flash Memory作为硬盘来记录数据,这种"硬盘"称固态硬盘。
固态硬盘除了需要Flash Memory外,还需要其他硬件和软件的支持。
注:闪存(Flash Memory)是在E2PROM的基础上发展起来的,本质上是只读存储器。
7.2 I/O接口
7.2.1 功能
I/O接口(I/O控制器)是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换。
接口的功能(要解决的问题):
- 实现主机和外设的通信联络控制
- 进行地址译码和设备选择
- 实现数据缓冲
- 信号格式的转换
- 传送控制命令和状态信息
接口的功能(具体操作):
- 设备选址
- 传送命令
- 传送数据
- 反馈I/O设备的工作状态
7.2.2 基本结构
内部接口:内部接口与系统总线相连,实质上是与内存、CPU相连,实质上是与内存、CPU相连。数据的传输方式只能是并行传输的。
**外部接口:**外部接口通过接口电缆与外设相连,外部接口的数据传输可能是串行方式,因此I/O接口需具有串/并转换功能。
一个工作过程,以控制外设输入为例:
地址线--IO接口中寄存器的地址
控制线--读写信号,仲裁信号,握手信号,
数据线--IO接口中的命令字,IO接口中的状态字,中断类型信号
7.2.3 接口和端口
I/O端口是指接口电路中可以被CPU直接访问的寄存器。
I/O端口要想能够被CPU访问,必须要有端口地址,每一个端口都对应着一个端口地址。
I/O端口及其编码方式:
统一编址:
把I/O端口当做存储器的单元进行地址分配,用统一的访存指令就可以访问I/O端口,又称为存储器映射方式。
靠不同的地址码区分内存和I/O设备,I/O地址要求相对固定在地址的某部分。
**优点:**不需要专门的输入/输出指令,可是CPU访问I/O的操作更灵活、更方便,还可使端口有较大的编址空间。
**缺点:**端口占用了存储器地址,使内存容量变小,而且利用存储器编址的I/O设备进行数据输入/输出操作,执行速度较慢。
独立编址:
I/O端口地址与存储器地址无关,独立编址CPU需要设置专门的输入/输出指令访问端口,又称I/O映射方式。
靠不同的指令区分内存和I/O设备。
**优点:**输入/输出指令与存储器指令有明显区别,程序编址清晰,便于理解。
**缺点:**输入/输出指令少,一般只能对端口进行传送操作,尤其需要CPU提供存储器读/写,I/O设备读/写两组控制信号,增加了控制的复杂性。
7.2.4 接口的类型
按数据传送方式:
并行接口:一个字节或一个子所有位同时传送。
串行接口:一位一位地传送。
注:这里所说的数据传送方式指的是外设和接口一侧的传送方式,而在主机和接口一侧,数据总是并行传送的。接口要完成数据格式转换。
**按主机访问I/O设备的控制方式:**程序查询接口,中断接口,DMA接口。
**按功能选择的灵活性:**可编程接口,不可编程接口。
7.3 I/O方式
1) 程序查询方式
流程图:
**优点:**接口设计简单,设备量少。
**缺点:**CPU在信息传送过程中要花费很多时间用于查询和等待,而且在一段时间内只能和一台外设交换信息,效率大大降低。
接口结构:
2) 程序中断方式
1. 中断的基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊情况,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
2. 工作流程
- 中断请求:中断源向CPU发送中断请求信号。
- 中断响应:响应中断的条件。中断判优:多个中断源同时提出请求。
- 中断处理:中断隐指令。中断服务程序。
注:中断隐指令----是指指令系统中没有的指令,它由CPU在中断响应周期自动完成。其功能是保护程序断点、硬件关中断、向量地址送PC(硬件向量法)或中断识别程序入口地址送PC(软件查询法)。
中断请求
中断请求的分类:
中断请求标记
每个中断源向CPU发出中断请求的时间是随机的。
为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为"1"时,表示中断源有请求。
这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。
对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/O的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
CPU响应的条件
- CPU接受到中断请求信号
- CPU 允许中断,即开中断
- 一条指令执行完毕,且没有更紧迫的任务。
所以中断响应是在一条指令执行之末,和下面的DMA响应是不一样的。DMA是在存取周期结束后即可
内中断不可被屏蔽
中断判优
实现: 既可以用硬件实现,也可用软件实现;
硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中;
软件实现是通过查询程序实现的。
](https://img2020.cnblogs.com/blog/165687
优先级设置:
- 硬件故障中断属于最高级,其次是软件中断;
- 非屏蔽中断优于可屏蔽中断;
- DMA请求优于I/O设备传送的中断请求,
- 高速设备优于低速设备;
- 输入设备优于输出设备
- 实时设备优于普通设备。
中断处理
过程:
流程---中断隐指令(3步)---中断服务程序(4步)
中断隐指令的主要任务:
**关中断:**在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确低执行下去。
**保存断点:**为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC),程序状态寄存器PSW的内容)保存起来。可以存入堆栈,也可以存入指定单元。
**引出中断服务程序:**引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器(PC)。
可通过软件查询法和硬件向量法。
硬件向量法:由硬件产生向量地址,再由向量地址找到入口地址。
中断服务程序的主要任务:
- **保护现场:**一是保存程序断点(PC),已由中断隐指令完成;二是保存通用寄存器和状态寄存器的内容,由中断服务程序完成。可以使用堆栈,可以是使用特定存储单元。
- **中断服务(设备服务)😗*主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中。
- **恢复现场:**通过出栈指令或取数指令把之前保存的信息送回寄存器中。
- **中断返回:**通过中断返回指令回到原程序断点处。
3. 单重中断和多种中断过程
单重中断不允许其他中断来打断,只允许中断一次
流程
单重中断 | 多重中断 | |
---|---|---|
中断隐指令 | 关中断 | 关中断 |
保存断点(PC) | 保存断点(PC) | |
送中断向量 | 送中断向量 | |
中断服务程序 | 保护现场 | 保护现场和屏蔽字 |
- | 开中断 | |
执行中断服务程序 | 执行中断服务程序 | |
- | 关中断 | |
恢复现场 | 恢复现场和屏蔽字 | |
开中断 | 开中断 | |
中断返回 | 中断返回 |
中断屏蔽技术
中断屏蔽技术主要用于多重中断,CPU要具有多重中断的功能,须满足下列条件。
- 在中断服务程序中提前设置开中断指令。
- 优先级别高的中断源有权中断优先级别低的中断源。
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
4. 小结
程序中断的作用如下:
- 实现CPU与I/O设备的并行工作。
- 处理硬件故障和软件错误。
- 实现人机交互,用户干预机器需要用到中断系统。
- 实现多道程序、分时操作,多道程序的切换需借助于中断系统。
- 实现处理需要借助中断系统来实现快速响应。
- 实现应用程序和操作系统(管态程序)的切换,称为"软中断"。
- 多处理器系统中各处理器之间的信息交流和任务切换。
总线仲裁方式--争取的是对总线的使用权,可以是IO设备,也可以是硬盘
中断判优--IO设备争取CPU的判优方式
中断向量是中断服务程序的入口地址,可以快速识别中断源
中断向量地址是中断服务程序的入口地址的地址
中断服务程序是通过执行事先编号的某个特定的程序来完成的。一般属于操作系统的模块
中断优先级由高到低
- 硬件故障(最高)
- 访管指令(Traps)
- DMA
- 程序性
- 重新启动(最低)
3) DMA方式
1. DMA控制器
每准备好一个数据都要中断CPU,由CPU运行中断服务程序来完成一次传送
磁盘机、磁带机等高速设备需要大批量的数据传送->CPU大量时间用于中断服务
由硬件实现控制大批量的数据传送->DMA控制器
在DMA方式中,当I/O设备需要进行数据传送时,通过DMA控制器(DMA接口)向CPU提出DMA传送请求,CPU响应之后将让出系统总线,由DMA控制器接管总线进行数据传送。其主要功能有:
- 接受外设发出的DMA请求,并向CPU发出总线请求。
- CPU响应此总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期。
- 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
- 向CPU报告DMA操作的结束。
**中断机构:**当一个数据块传送完毕后触发中断机构,向CPU提出中断请求。
**控制/状态逻辑:**由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步。
**DMA请求触发器:**每当I/O设备准备好数据后给出一个控制信号,使DMA请求触发器置位。
**主存地址计数器:**简称AR,存放要交换数据的主存地址。
**传送地址长度计数器:**简称WC,用来记录传送数据的长度,计数溢出时,数据即传送完毕,自动发中断请求信号。
**数据缓冲寄存器:**用于暂存每次传送的数据。
2. DMA传送过程
3. DMA传送方式
主存和DMA控制器之间有一条数据通路,因此主存和I/O设备之间交换信息时,不通过CPU。但当I/O设备和CPU同时访问主存时,可能发生冲突,为了有效地使用主存,DMA控制器与CPU通常采用以下3种方式使用主存。
停止CPU访问主存
控制简单;CPU处于不工作状态或保持状态,未充分发挥CPU对主存的利用率。
DMA与CPU交替访存
一个CPU周期分为C1C1和C2C2两个周期;C1C1专供DMA访存,C2C2专供CPU访存。
不需要总线使用权的申请、建立和归还过程。硬件逻辑更为复杂
周期挪用(周期窃取)
DMA访问主存有三种可能:
- CPU此时不访存(不冲突)
- CPU正在访存(存取周期结束让出总线)
- CPU和DMA同时请求访存(I/O访存优先)
4. DMA方式的特点
主存和DMA接口之间有一条直接数据通路。
由于DMA方式传输数据不需要经过CPU,因此不必中断现行程序,I/O与主机并行工作,程序和传送并行工作。
DMA方式具有下列特点;
- 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
- 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据。
- DMA传送速度快,CPU和外设并行工作,提高了系统效率。
- DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
5. DMA方式与中断方式
中断 | DMA | |
---|---|---|
数据传送 | 程序控制 程序的切换->保存和恢复现场 | 硬件控制 CPU只需进行预处理和后处理 |
中断请求 | 传送数据 | 后处理 |
响应 | 指令执行周期结束后响应中断 | 每个机器周期结束均可,总线空闲时可响应DMA请求 |
场景 | CPU控制,低速设备 | DMA控制器控制,高速设备 |
优先级 | 优先级低于DMA | 优先级高于中断 |
异常处理 | 能处理异常事件 | 仅传送数据 |