计算机组成原理随记

1.计算机系统

计算机系统=硬件系统+软件系统

1.1 计算机硬件

冯·诺依曼计算机特点(EDVAC,存储程序概念,基本工作方式是控制流驱动)
1.采用存储程序的工作方式
2.计算机硬件系统由运算器,存储器,控制器,输入和输出设备5大部分组成
3.指令和数据以同等地位存储在存储器中
4.指令和数据采用二进制码表示
5.指令有操作码和地址码组成,操作码指出操作类型,地址码指出操作数地址

运算器:算术逻辑单元ALU,寄存器有累加器ACC、乘商寄存器MQ、操作数寄存器X、变址寄存器IX、基址寄存器BR、程序状态寄存器PSW等

存储器:主存和辅存(外存),CPU只能直接访问主存,

控制器:程序计数器PC(存放预执行指令地址,+1)、指令寄存器IR(存放当前指令)、控制单元CU

输入设备:

输出设备:

现代计算机的MAR和MDR集成在CPU中,CPU=运算器+控制器,主机=CPU+主存,cpu和主存之间通过总线相连

1.2 计算机软件

系统软件:OS、数据库管理系统DBMS、语言处理程序、网络软件系统、标准库程序等

应用软件:科学计算类程序、数据统计与处理程序等

高级语言:可以通过编辑程序翻译成汇编语言或机器语言,可以通过解释程序翻译成机器语言

汇编语言:可以通过汇编程序翻译成机器语言

机器语言:

软件和硬件逻辑功能的等价性:都可以实现功能

1.3 计算机工作

计算机系统的层次结构:下层是上层的基础,上层是下层的扩展

指令集体系结构ISA:定义了一台计算机可以执行的所有指令集合,属于软件可见部分

工作方式:存储程序

从源程序到可执行文件四个阶段:预处理–编译–汇编–链接

1.4 性能指标

机器字长:字长,计算机进行一次运算能处理的二进制位数,一般与寄存器,ALU有关

存储字长:一个存储单元长度

指令字长:一条指令的长度,为存储字长的整数倍

数据通路带宽:数据总线一次能并行传递位数,通常指外部数据总线,与CPU内部数据总线不同

主存容量:存储单元位数(MAR)*存储单元字长(MDR)

吞吐量:单位时间处理请求的数量

响应时间:CPU时间+等待时间

CPU时钟周期,CPU工作最小时间单位

CPU时钟频率(主频):时钟周期的倒数,每秒有多少个时钟周期,单位Hz

CPI:执行一条指令需要的时钟周期数

IPS:每秒执行多少条指令,主频/CPI

CPU执行时间:=CPU时钟周期/主频=(指令数*CPI)/主频

MIPS:每秒执行多少百万条指令

FLOPS:每秒执行多少次浮点运算

MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS、ZFLOPS:百万、十亿、万亿、千万亿、百京、十万京

基准程序:专门用来测试性能的程序

评价计算机性能的综合参数是吞吐率

当前设计提高计算机性能的主要途径是采用并行处理技术

兼容常指同一系列不同型号的计算机

2 数据的表示和运算

2.1 数制与编码

2.1.1 数值

计算机内部所有信息都是用二进制进行编码:1)二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制每一位;2)0、1对应逻辑真假;3)二进制运算简单,方便用逻辑门电路实现

二进制,八进制,十六进制:二进制–>八进制,二进制每三位转化为一位八进制;二进制–>十六进制,二进制每四位转化为一位十六进制

十进制–>二进制(任意进制):除基取余法

十进制-->二进制(任意进制):先算出来的都是更接近小数点的
整数部分:除基取余法,从下往上
小数部分:乘基取整法,从上往下

BCD码:(8421码、余3码、2421码)

8421码:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
余3码:8421码+0011
2421码:0000 0001 0010 0011 0100 1011 1100 1101 1110 1111

校验码

奇偶校验码:在有效信息位前面加一位奇偶校验位
奇校验码:整个校验码中1的个数为奇数
偶校验码:整个校验码中1的个数为偶数

海明码:信息位n,校验位k,共n+k位
2^k>=n+k+1

循环冗余校验(CRC)码:
信息位(k位)校验位(r位)
信息位k:题目给出信息码
r:生成多项式最高次幂(除数位数-1)
被除数:信息位+r位0

在这里插入图片描述

异或运算:1的个数为基数时为1;1的个数为偶数时为2

2.1.2 定点数

定点小数:小数点在符号位之后

定点整数:小数点在最低位之后

最高位符号位
原码:0的表示不唯一

反码:正数与原码相同;负数,符号位不变,数值位原码按位取反;0表示不唯一

补码:正数与原码相同;负数,符号位不变,数值位原码按位取反,末位+1;

!!从右往左找到第一个1,其左边按位取反
!!补码表示范围比原码多一位(最小),0唯一
!![x]补 求 [-x]补 连同符号位一起取反,末位+1

双符号位补码(模4补码):表示范围-1~1,小数
00正,11负,01正数上溢,10负数下溢

移码:在真值的基础上加上一个偏置值,设字长n位,偏置值为2^(n-1)
0表示唯一:10000000(补码0:00000000)

在这里插入图片描述

2.1.3 类型转换

强制类型转换时,机器存的内容不会改变

无符号和有符号同时参与运算,按无符号运算进行

长变短:截取

短变长:无符号整数用0扩展;有符号整数用符号扩展

2.1习题

6,8,13,14,15,18,23,24

2.2 运算方式和运算电路

2.2.1 基本运算部件

运算器由算术逻辑单元(ALU)、移位器、状态寄存器和通用寄存器组等组成。运算器的基本功能包括加、减、乘、除四则运算,与、或、非、异或等逻辑运算,以及移位、求补等操作。ALU的核心部件是加法器。

一位全加器

全加器(FA)是最基本的加法单元,有加数Ai、加数Bi,与低位传来的进位Ci-1共三个输入,有本位和Si与向高位的进位Ci共两个输出。

和表达式:Si*=*Ai ⊕Bi ⊕Ci-1

进位表达式:Ci=AiBi+(Ai ⊕Bi)Ci−1

串行进位加法器

把n个全加器相连可得到n位加法器

并行进位加法器
带标志加法器
OF(Overflow Flag)溢出标志: OF=最高位产生的进位⊕次高位产生的进位
含义:有符号数的加减运算是否发生了溢出。溢出时为1,否则置0。
注意:有符号数

SF(Sign Flag)符号标志: SF=最高位的本位和
含义:有符号数加减运算结果的正负性,结果为负时置1,否则置0。
注意:有符号数

ZF(Zero Flag)零标志:F=0
含义:表示运算结果是否为0。运算结果为0时ZF位置1,否则置0。
注意:无符号数

CF(Carry Flag)进位/借位标志:CF=最高位产生的进位⊕sub(sub=1表示减法) 或CF=Cin⊕Cout
含义:进位/借位标志,表示无符号数的加减法是否发生了进位或借位。进位/借位时置1,否则置0。
注意:无符号数

在这里插入图片描述

算术逻辑单元(ALU)

在这里插入图片描述

ALUop的位数决定了操作的种类

2.2.2 定点数的移位运算

当计算机没有乘除法运算电路时,可以通过加法和移位相结合来实现乘除法;左移相当于乘2,右移相当于除以2

逻辑移位:将操作数视为无符号整数,左移右移都补0

算术移位:将操作数视为有符号整数,左移补0,右移补1;左移时高位移除,发生溢出,右移时,低位移除,丢失精度

2.2.3 定点数的加减运算

计算机内部用补码进行运算

1.补码加减法运算

X+Y:按位相加即可;

X -Y:将减数Y全部按位取反,末位+1,得到[-Y]补,减法变加法

特点:
1)按二进制运算规则运算,逢二进一。
2)若做加法,两数的补码直接相加:若做减法,则将被减数与减数的机器负数相加。
3)符号位与数值位一起参与运算,加、减运算结果的符号位也在运算中直接得出。
4)最终运算结果的高位丢弃,保留n位,运算结果亦为补码
2.溢出判别方法

只有当两个符号相同的数相加,或两个符号相异的数相减才可能产生溢出

两个整数相加符号位为1;一个负数减去一个正数,符号位为0

1.采用一位符号位
只要参加操作的两个数符号相同,结果又与原操作数符号不同,则表示结果溢出。

2.采用双符号位
运算结果的两个符号位S1S2相同,表示未溢出;运算结果的两个符号位S1S2不同,表示溢出,此时最高位符号位代表真正的符号

3.采用一位符号位和数值位进位情况
若符号位的进位Cs与最高数位的进位C1相同,则说明没有溢出,否则表示发生溢出

在这里插入图片描述

在这里插入图片描述

3.加减运算电路

在这里插入图片描述

控制端Sub来控制,选择Y还是 Y取反 输入加法器,并将Sub作为低位同时送入加法器

4.原码加减

符号位和数值位分开处理

2.2.4 定点数的乘除运算

1. 乘法
原码一位乘法

符号位和数值位分开

符号位:异或

数值位:加法和逻辑右移

原码乘法手算:

在这里插入图片描述

原码乘法电路:

在这里插入图片描述

原码乘法例子:

在这里插入图片描述

补码一位乘法(Booth算法)

有符号数的乘法,采用相加和相减操作计算补码数据的乘积

1.符号位参与运算,运算的数均以补码表示
2.被乘数一般取双符号位参与运算,部分积取双符号位,初值为0,乘数取单符号位
3.乘数末位增设附加位yn+1,初值为0
4.根据(yn,yn+1)的取值来确定操作,见下表
5.移位按补码右移规则进行
6.按照上述算法进行n+1步操作,但第n+1步不再移位(共进行n+1次累加和n次右移),仅根据yn与yn+1的比较结果做相应的运算

在这里插入图片描述

补码乘法电路如下:

在这里插入图片描述

补码乘法例子:

在这里插入图片描述

2. 除法

除法运算可转换成“累加一左移”(逻辑左移),分为原码除法和补码除法

原码除法(不恢复余数法)

商符和商值是分开进行的,减法操作用补码加法实现,商符由两个操作数的符号位“异或”形成

手算过程:

在这里插入图片描述

原码除法电路图:

在这里插入图片描述

计算过程:

看余数寄存器R,正1减,负0加

设 [ x ] 原 = 0.1011 , [ y ] 原 = 1.1101,用不恢复余数法计算[ x / y ] 原

商的符号位:0⊕1=1。先计算出X=0.1011,Y=0.1101,-Y=[-|y|补]=1.0011

在这里插入图片描述

补码除法运算(加减交替法)

符号位与数值位一起参加运算,商符自然形成

除法第一步根据被除数和除数的符号决定是做加法还是减法;上商的原则根据余数和除数的符号位共同决定,同号上商“1”,异号上商“0”:最后一步商恒置“1”。

加减交替法的规则:同1减,异0加

1.符号位参加运算,除数与被除数均用补码表示,商和余数也用补码表示。
2.若被除数与除数同号,则被除数减去除数:若被除数与除数异号,则被除数加上除数。
3.若余数与除数同号,则商上1,余数左移一位减去除数:若余数与除数异号,则商上0,余数左移一位加上除数。
4.重复执行第③步操作n次。
5.若对商的精度没有特殊要求,则一般采用“末位恒置1”法。

在这里插入图片描述

2.3 浮点数的表示与运算

2.3.1 浮点数的表示

表示格式
N=(-1)^s * M * R^e
数符S取0或1,表示浮点数的符号
位数M,一般用定点原码表示的二进制小数
基数R是隐含的
阶数e表示指数,一般用移码(真值+偏置值)表示

32位浮点数:

在这里插入图片描述

表示范围

在这里插入图片描述

原码关于源点对称,故浮点数范围也是关于原点对称

上溢:超过最大表示范围,分为正上溢和负上溢,数据一旦产生上溢,计算机必须进行中断运算操作,进行溢出处理

下溢:结果在最小数和0之间,分为正下溢和负下溢,计算机当成0处理

规格化

尾数规格化,保证位数最高位为有效位

左规:阶码-1,尾数变大,0.001010

右规:阶码+1,尾数变小,1101.11001

判断是否规格化:
原码,尾数第一位为非0
补码,尾数第一位与符号位是否相反
IEEE 754 标准

在这里插入图片描述

尾数用原码表示,阶码用移码(原码+偏置值)表示;隐藏尾数最高位

特殊值

在这里插入图片描述

非规格化数:阶码全0尾数非0,尾数的隐藏位为0,阶码的指数为-126

在这里插入图片描述

定点数,浮点数的区别:

浮点数范围更大,定点数精度更大

2.3.2 浮点数的加减运算

1.对阶
尾数小数点位看齐,也就是两个阶码相等;小阶向大阶看齐

2.尾数加减
尾数的隐藏位记得还原

3.尾数规格化
左规右规,让位数第一位为1.101...
左规阶码-1,右规阶码+1,注意尾数左规右规不是小数点

4.舍入
0舍1入(四舍五入);恒置1;截断法

5.判断溢出
指数上溢或下溢:超过指数最大值或最小值,异常
左规:阶码-1,注意会不会指数下溢
右规:阶码+1,注意会不会指数上溢,同时尾数舍入

2.3.3 C语言浮点数类型

float和double对应ieee754的单精度和双精度

无损失:char->int -> long ->double;float -> double

int -> float:可能损失精度

float -> int 可能溢出,也可能损失精度

2.3.4 大小端和对齐存储

按字节编址

大端:给人看

小端:给机器看

边界对齐:字节,半字,字

3 存储系统

3.1 概述

1.分类:
按作用层次:
高速缓存存储器cache(速度可与CPU匹配、存储容量小、价格高、通常在CPU中)
主存储器(内存、存放计算机运行期间所需的程序和数据,可与CPU、cache、外存交换数据、容量较小、存取速度较快、每位的价格较高)
辅助存储器(外存、存放当前暂时不用的程序和数据、内容需要调入主存后才能被CPU访问、容量大、存取速度较慢、单位成本低)

按存储介质:
半导体存储器:以半导体器件存储信息;主存、Cache
磁表面存储器:以磁性材料存储信息;磁盘、磁带
光存储器:光盘

按存取方式分类:
随机存储器RAM:随机存储,存储时间与位置无关,读写方便,使用灵活,主要用于主存或高速缓冲存储器(动态RAM:电容充电原理寄存信息;静态RAM:触发器原理寄存信息)
只读存储器ROM:只能随机读出不能写入
	掩膜式只读存储器(MROM)
	次可编程只读存储器(PROM)
	可擦除可编程只读存储器(EPROM):慢,次数有限
	闪速存储器(Flash Memory):u盘
	固态硬盘(SSD)
相联存储器CAM:
不根据地址,而根据存储内容和指定地址来存储,可查找快表
串行访问存储器:
对存储单元进行读/写操作时,需按其物理位置的先后顺序寻址
	顺序存储器SAM:磁盘
	直接存储器DAM:磁盘、光盘

按信息的可保存性分类:
易失性存储器:RAM、主存、Cache
非易失性存储器:ROM、磁表面存储器、光存储器
破坏性读出:信息读出后,原存储信息被破坏;如DRAM芯片,读出数据后要进行重写
非破坏性读出:信息读出后,原存储信息不被破坏;如SRAM芯片、磁盘、光盘

信息的可更改性:
读写存储器(RAM):即可读、也可写(如:磁盘、内存、Cache)
只读存储器(ROM):只能读,不能写(如:实体音乐专辑通常采用CD-RGM,实体电影采用蓝光光碟,BIOS通常写在ROM中。
性能指标:
存储容量、单位成本、存储速度
存储容量:存储字数*字长,存储字数表示存储器地址空间数量,字长表示一次操作存储数据量
单位成本:总成本/总容量
存储速度:数据的宽度/存储周期

在这里插入图片描述

CPU、cache、主存能直接交换信息,外存需要读入主存才能和CPU交换信息

!主存和cache的数据调动由硬件完成,对所有程序员都是透明的;主存和辅存之间的数据调动由硬件和操作系统共同完成,对应用程序员是透明的

3.2 主存储器

3.2.1 半导体存储器SRAM和DRAM

半导体存储器:随机存储器RAM、只读存储器ROM;都是随机访问存储器

RAM:静态SRAM、动态DRAM;靠近cache的一层由SRAM实现,都是易失性存储器

ROM:非易失性存储器

SRAM地址线没复用;DRAM地址线复用,分两次传输

在这里插入图片描述

1. SRAM静态随机存储器

双稳态触发器(六晶体管MOS),非破坏性读出,不需要再生;一般可用作cache

存储元:存放二进制的物理器件

2. DRAM动态随机存储器

栅极电容,集成高,价格低,功耗低;破坏性读出,需要定时刷新

DRAM的电荷一般只能维持1-2ms,需要进行刷新
1.集中刷新:在一个刷新周期内利用一段固定时间刷新,这段时间不能读写,称为死时间,访存死区;优点是读写不受刷新影响,缺点是死区不访问存储器
2.分散刷新:一个工作周期内,前半部分读写,后半部分刷新;优点没有死区,缺点存储周期变长
3.异步刷新:结合前两种方法,一个刷新周期内每一行仅刷新一次(一段时间刷新一行,保证2ms内全部刷新一次)

集中刷新和异步刷新会有死时间
一次完整刷新过程只占用一个存储周期,从RAM上读出放大在写回RAM,这个过程都是RAM,没去CPU

刷新和再生过程不完全相同,刷新以行为单位,再生仅需要恢复被读出的那些数据

3. 芯片内部结构

在这里插入图片描述

由存储体、io读写电路、地址译码器和控制电路组成

3.2.2 只读存储器ROM

数据不会丢失,即使掉电,非易失

掩膜式只读存储器(MROM):生产过程中直接写入信息,不可重写,可靠性高、灵活性差、生产周期长、只适合批量定制
一次可编程只读存储器(PROM):
可擦除可编程只读存储器(EPROM):慢,次数有限
闪速存储器(Flash Memory):多次快速擦除重写,断电能保存,需要先擦除在写入,速度快,但写比读慢,U盘,sd卡
固态硬盘(SSD):可进行多次快速擦除重写,速度快、功耗低、价格高

3.2.3 主存储器的基本组成

CPU访问主存的过程:地址送到MAR中,读出对应地址的数据,从MDR读出

MDR位数与数据线位数相同;MAR位数与地址线数量相同

DRAM容量较大,地址较多,采用地址复用;行列优化:为减少地址引脚数量,尽量使行列相同,并且DRAM按行刷新,应使行的数量较少

存储阵列

3.2.4 多模块存储器

一种空间并行技术,利用多个完全相同的模块并行工作提高存储器的吞吐率(匹配CPU)

单体多字存储器:每个存储单元存储m个字,总线的宽度也为m个字,一次同时读出m条指令,指令和数量必须连续存放

多体并行存储器:多个模块,每个模块都有独立的读写控制电路、地址寄存器和数据寄存器;能并行工作,也能交叉工作
高位交叉编址(顺序):高位地址表示模块号,低位地址表示模块内地址;连续访问完一个模块再访问下一个模块

低位交叉编址(交叉):低位地址表示模块号,高位地址表示模块内地址;多个模块交叉访问
轮流启动方式:每个模块读写的位数正好等于总线的位数,想要实现轮流启动不停歇,
则设存储周期T,总线周期r,模块数 >= m(m=T/r)
连续读取m个字的时间t=T+(m-1)r
顺序方式读取m个字的时间t=mT

高位交叉编址:
在这里插入图片描述

低位交叉编址:

在这里插入图片描述
在这里插入图片描述

3.2 习题

8 13 15 16.18.19.22.23

3.3 主存储器和CPU的连接

1 . 连接原理

在这里插入图片描述

单个芯片的容量是有限的,通过存储器扩展技术,将多个芯片集成在一个内存条上,然后由多个内存条及主板的ROM芯片组成主存,在与CPU相连

2 . 容量扩展

位扩展

当CPU的位数大于芯片位数时,对芯片进行扩位,使它和CPU位数相等

在这里插入图片描述

各芯片的地址线、片选线和读写控制线并联;数据线分别引出

字扩展

位数相等,对存储单元数量进行扩展

在这里插入图片描述

各芯片地址线与系统地址线低位相连;系统地址线的高位连各芯片片选信号

字位同时扩展

在这里插入图片描述

3 . 地址分配和片选

线选法:CPU地址高位直接连芯片的片选信号,低电平有效

译码片选法:通过地址译码器连接片选信号

4 . 存储器和CPU的连接

1.选择合理的芯片
2.地址线的连接
3.数据线的连接
4.读写控制线的连接
5.片选线的连接

3.4 外部存储器

3.4.1 磁盘存储器

以磁盘为介质的存储器,

优点:存储容量大,位价格低;记录介质可重复使用;信息长期保存不丢失,可脱机存档;非破坏性读出,不需要再生。

缺点:存储速度慢,机械结构复杂,对工作环境要求高

相关概念
组成:磁盘驱动器、磁盘控制器和盘片
磁盘驱动器:驱动磁盘转动并在盘面上通过磁头进行读写操纵
磁盘控制器:磁盘驱动器与主机的接口,负责接收解释CPU命令,向磁盘驱动器发出各种控制信号,并检测状态

在这里插入图片描述

存储区域
磁头:一个面对应一个磁头
柱面数:每个盘面有多少个磁道
扇区数:

磁盘高速缓存:在内存中开辟出一部分区域用于缓冲将被送到磁盘上的数据;写磁盘是按簇进行,可以避免频繁的小块写盘;中间有些数据在写回磁盘前可被快速再次使用
原理

磁头和磁性记录介质相对运动时,通过电转换完成读写操作

编码方法:磁翻转

磁记录方式:调频制FM、改进型调频制MFM

性能指标
记录密度:道密度、位密度、面密度(面密度=位密度*道密度)
磁盘容量:非规格化>规格化(按某种记录格式)
存取时间:寻道时间+旋转延迟时间+传输时间,寻道时间和旋转延迟时间通常取平均值
数据传输速率:每秒传输字节数
磁盘地址
柱面(磁道)号 盘面(磁头)号 扇区号
工作过程

寻址、读盘、写盘;读写工作是串行的

磁盘阵列

独立冗余磁盘阵列RAID 是指将多个独立的磁盘组成一个独立的逻辑磁盘,数据在多个物理盘上面分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。

RAID0:无冗余和无校验的磁盘阵列,连续的多个块交替放在不同物理磁盘,可以交叉并行读写,即条带化数据,提高速度但没有容错能力
RAID1-RAID5磁盘损坏可直接拔出,再插入好的磁盘,数据不会损坏
RAID1:镜像磁盘阵列,两个磁盘互为备份
RAID2:采用纠错的海明码磁盘阵列
RAID3:位交叉奇偶校验的磁盘阵列
RAID4:块交叉奇偶校验的磁盘阵列
RAID5:无独立校验的奇偶校验磁盘阵列

3.4.2 固态硬盘

在这里插入图片描述

在这里插入图片描述

3.5 高速缓冲存储器

通常将存储系统分为“Cache-主存”层次和“主存-辅存”层次。

cache由SRAM组成,通常直接集成在CPU中。

3.5.1 程序访问程序性原理

时间局部性:现在用到的信息可能近期会再次使用到;例如,程序中的循环和需要多次重复的子程序片段,对数组的存储访问操作

空间局部性:未来用到的信息可能和现在用的信息在空间上是相邻的,因为指令和数据一般顺序存储、顺序使用。

3.5.2 cache基本工作原理

在这里插入图片描述

cache和主存都被划分为大小相等的块(cache称为行),每块由若干字节组成

cache只是主存中一小部分的副本

流程:1.当CPU发出读请求时,若访存地址在cache命中,将地址转换成cache地址,直接对cache读操作,与主存无关;
2.若cache不命中,需要访问主存,并把该字所在的主存块一次性从主存调入cache(地址映射);
3.若cache不命中且已满,需要根据替换算法选择一块,写回内存并从内存读入

整个过程由硬件实现,CPU和cache交换信息以字为单位,cache和主存交换信息以块为单位

cache读写流程要注意的问题:
1.数据查找:快速判断数据是否在cache中
2.地址映射:主存地址转化为cache地址
3.替换策略:cache满时如何替换
4.写入策略:保证cache和主存的数据一致性

3.5.3 cache与主存的映射方式

标记位:cache容量远小于主存,因此需要标记位指明是内存中哪一块的副本

有效位:信息是否有效

直接映射

在这里插入图片描述

cache行号=主存块号 mod cache总行数

每个内存块唯一映射到cache中的某一行,按行号找到cache行,将行中的标记和地址中的标记对比,相同且有效位为1时cache命中;否则直接替换,不用替换算法

全相联映射

在这里插入图片描述

主存中的每一块都可以装入cache中的任何位置CPU访存时需要与所有cache行的标记进行比较;cache冲突概率低,空间利用率高,命中率高;但标记比较速度慢,实现成本高,通常需要采用相联存储器

将主存地址和cache每一行的标记进行比较,比较成功且有效位为1时命中

组相联映射

在这里插入图片描述

每个主存块可以装入固定组中的任意一行;组间直接映射,组内全相联映射;每组中有r个cache行,称为r路组相联

在这里插入图片描述

地址cache+数据cache

3.5.4 chche中主存块的替换算法

随机算法RAND:没按局部性原理

先进先出算法FIFO:没按局部性原理

近期最少使用算法LRU:有局部性
每个cache行需设置一个计数器(LRU替换位),位数与cache组的大小有关
命中时,该行计数器值清0,比其低的+1,其余不变;
未命中有空行时,新装入的置0,其余+1;
未命中无空行时,最大的换出,新装入置0,其余+1

最不经常使用算法LFU:将一段时间内访问次数最少的换出,每行设置一个计数器,命中时+1;每次换出最小的

频繁的换入换出称为抖动

3.5.5 cache写回的一致性问题

写时命中cache:
写回法:只写cache,换出时再写回内存,需要有脏位
全写法:写cache的同时写回内存

写时没命中cache:
写分配法:写内存,然后再调入cache
非写分配法:只写到内存

全写法+非写分配法
写回法+写分配法
多级cache:
cache之间:全写法+非写分配法
cache与主存:写回法+写分配法

! CPU与主存有直接通路,cache缺失时可以直接从主存传数据到CPU

3.6 虚拟存储器

主存和辅存共同构成虚拟存储器,由硬件和操作系统管理,对应用程序员是透明的;拥有主存的速度和辅存的容量

3.6.1 基本概念

虚拟地址、逻辑地址:用户编程涉及,比实地址大得多

程序空间:虚拟地址对应的空间

物理地址、实地址:实际主存单元的地址

主地址空间:实地址对应的存储空间

使用虚拟地址访问时,需要先判断地址是否在主存中,存在可直接转换成物理地址访问;若不存在,则在外存需要调入内存才能访问

虚拟存储器采用全相联和回写法

3.6.2 页式

页式虚拟存储器以页为基本单位,虚拟空间和主存都被划分成大小相同的页

页表一般保存在内存中

1.页表

在这里插入图片描述

引用位配合替换策略使用

2.地址转换

在这里插入图片描述

每个进程都有一个页表基址寄存器,存放该进程的页表首地址

3.快表TLB

快表类似与cache,用SRAM实现,是页表的副本,页表存储在内存中,称为慢表,地址转换时先查TLB再查页表

快表每一项由:TLB标记字段+页表表项内容

全相联:TLB标记对应虚页号

组相联:TLB标记对应虚页号高部分,虚页号的低部分作为组索引

4.具有TLB和cache的多级存储系统

在这里插入图片描述

在这里插入图片描述

1不用访存

2.3一次访存

4两次访存

5需要访问磁盘

3.6.3 段式

段是按程序的逻辑结构(功能)进行划分,长度不定

虚拟地址=段号+段内地址

在这里插入图片描述

3.6.4 段页式

先按逻辑结构分段,每段再分页;主存空间也分页,调入调出以页为基本单位

虚拟地址=段号+段内页号+页内地址

地址转换需要两次查表,开销比较大

每个程序一个段表,每个段一个页表

4 指令系统

4.1 指令系统

1.指令集体系结构

机器指令:指计算机执行某种操作的的命令

指令系统、指令集:一台计算机中的所有指令,是指令体系结构ISA中最核心的部分

指令集体系结构ISA:

1.指令格式,指令寻址方式,操作类型
2.操作数的类型、寻址方式和存放形式
3.指令可访问的寄存器个数、位数及编号,存储空间的大小
4.指令执行过程的控制方式

2.指令的基本格式

操作码字段+地址码字段

指令字长和机器字长没有必然的联系,可以为单字长指令,半字长指令,双子长指令

因为主存按字节编址,所以指令字长通常为字节的整数倍

按操作数分:
1.零地址指令:OP
不需要操作数的指令:空操作指令,停机指令,关中断指令
有运算仅在堆栈计算机中,两个操作数隐含在栈顶和次栈顶,运算结果也放回栈顶

2.一地址指令:OP+A1
加1、减1、求反、求补、移位:OP(A1)->A1,操作完存回原地址
隐含一个操作数在ACC中,结果也放回ACC:(ACC)op(A1)->ACC
需要三次访存:取指令+取操作数+存

3.二地址指令:OP+A1+A2
(A1)OP(A2)->A1
四次访存:取指令+取A1+取A2+存

4.三地址指令:OP+A1+A2+A3(结果)
(A1)OP(A2)->A3
四次访存

5.四地址指令:OP+A1+A2+A3(结果)+A(下址)
(A1)OP(A2)->A3
四次访存

3.定长操作码指令格式

n位操作码最多可表示2^n条指令

4.扩展操作码指令格式

可变长操作码

在这里插入图片描述

不允许短码是长码的前缀

5.指令的操作类型

1.数据传送:
MOV:寄存器之间的传送
LOAD:从内存单元读取数据到CPU寄存器
STORE:从CPU寄存器写数据到内存单元
PUSH:进栈
POP:出栈

2.算术运算和逻辑运算
ADD,SUB,MUL,DIV:加减乘除
INC,DEC:加1,减1
AND,OR,NOT,XOR:与或,取反,异或

3.移位操作
算术移位、逻辑移位、循环移位

4.转移操作
JMP:无条件转移
BRANCH:条件转移
条件转移(JZ):结果为0;(JO):结果溢出;(JC):结果有进位
CALL:调用
RETURN:返回
Trap:陷阱

5.输入输出

程序控制类指令用于改变程序执行的顺序,并具有测试、分析、判断和循环执行的能力

4.2 指令的寻址方式

寻址方式指寻找指令或操作数有效地址的方式

指令寻址:寻找下一条指令的地址

数据寻址:寻找本条指令的数据地址

1.指令寻址

顺序寻址:通过程序计数器PC+1(一条指令的长度)

跳跃寻址:通过转移类指令实现,本条指令给出下一条指令地址的计算方式

2.数据寻址

操作码+寻址特征+形式地址

形式地址:A

真实地址/有效地址:EA

常见的寻址方式:
1.隐含寻址:例如累加器ACC作为第二操作数地址
有利于缩短指令字长,缺点是需要增加存储操作或隐含地址的硬件

2.立即数寻址:形式地址A就是操作数本身,一般采用补码表示,取操作数不用访存
限制了寻址范围

3.直接寻址:EA=A
直接指向操作数

4.间接寻址:EA=(A) 主存-主存
主存第一位为1,表示取出不是操作数地址,间接寻址
主存第一位为0,表示取出的是操作数地址

5.寄存器寻址:EA=R
寄存器存放操作数,支持向量、矩阵运算

6.寄存器间接寻址:EA=(R) 寄存器--主存

7.相对寻址:EA=(PC)+A
A为PC的偏移量,用补码表示
指令和地址之间总是相差一个固定的偏移量,相对寻址广泛应用于转移指令

8.基址寻址:EA=(BR)+A
基址寄存器的内容加上偏移量,基址寄存器可以是专用的寄存器,也可以是通用寄存器
面向操作系统,基址寄存器用户不可见,可扩大寻址范围,有利于多道程序设计

9.变址寻址:EA=(IX)+A
变址寄存器可以是专用,也可以是通用寄存器
面向用户,变址寄存器的值可由用户设置,可扩大寻址范围,用于处理数组问题

10.堆栈寻址
堆栈是存储器中一块存储区(后进先出),堆栈指针(SP)存放在一个寄存器
硬堆栈:寄存器堆栈,成本高,不适合做大容量堆栈
软堆栈:主存

4.7.9.13.15.17.20.21

4.3 程序的机器级代码表示

x86有32个通用寄存器

EAX累加器、EBX基地址寄存器、ECX计数寄存器、EDX数据寄存器

ESI、EDI变址寄存器、EBP堆栈基指针、ESP堆栈顶指针

1 汇编指令格式

主要有AT&T格式和Intel格式

在这里插入图片描述

word表示16位

在这里插入图片描述

在这里插入图片描述

常用指令:以Intel为例
<reg>:表示寄存器
<mem>:表示内存
<con>:表示常量
数据传送指令:
1.mov指令:
mov <reg>,<reg>
mov <reg>,<mem>
mov <mem>,<reg>
mov <reg>,<con>
mov <mem>,<con>

mov eax,ebx				#将ebx值复制到eax	
mov byte ptr [var],5 	#将5保存到var值指示的内存地址的一字节中


2.push指令:将操作数压入内存的栈,常用于函数调用。ESP是栈顶,压栈前先将ESP值减4(栈增长方向与内存地址增长方向相反),然后将操作数压入ESP指示的地址。
push <reg32>
push <mem>
push <con32>

push eax				#将eax值压栈
push [var]				#将var值指示的内存地址的4字节值压栈


3.pop指令:与push指令相反,pop指令执行的是出栈工作,出栈前先将ESP指示的地址中的内容出栈,然后将ESP值加4。
pop edi					#弹出栈顶元素送到edi
pop [ebx]				#弹出栈顶元素送到ebx值指示的内存地址的4字节中

在这里插入图片描述

在这里插入图片描述

算术运算与逻辑运算指令:
1.add/sub指令:add指令将两个操作数相加,相加的结果保存到第一个操作数中。sub指令用于两个操作数相减,相减的结果保存到第一个操作数中。
add <reg>,<reg> / sub <reg>,<reg>
add <reg>,<mem> / sub <reg>,<mem>
add <mem>,<reg> / sub <mem>,<reg>
add <reg>,<con> / sub <reg>,<con>
add <mem>,<con> / sub <mem>,<con>

sub eax,10				#eax ← eax-10
add byte ptr [var],10	#10与var值指示的内存地址的一字节值相加,并将结果保存在原位置

2.inc/dec指令:inc、dec指令分别表示将操作数自加1、自减1。
inc <reg> / dec <reg>
inc <mem> / dec <mem>

dec eax					#eax值自减1
inc dword ptr [var]		#var值指示的内存地址的4字节值自加1


3.imul指令。带符号整数乘法指令
两个操作数,将两个操作数相乘,将结果保存在第一个操作数中;三个操作数,将第二个和第三个操作数相乘,将结果保存在第一个操作数中
第一个操作数必须为寄存器
imul <reg32>,<reg32>
imul <reg32>,<mem>
imul <reg32>,<reg32>,<con>
imul <reg32>,<mem>,<con>

imul eax,[var]			#eax ← eax * [var]
imul esi,edi,25			#esi ← edi * 25


4.div指令:带符号整数除法指令,它只有一个操作数,即除数,而被除数则为edx:eax中的内容(64位整数),操作结果有两部分:商和余数,商送到eax,余数则送到edx。
idiv <reg32>
idiv <mem>

idiv ebx
idiv dword ptr [var]


5.and/or/xor指令。and、or、xor指令分别是逻辑与、或、异或操作指令,用于操作数的位操作,操作结果放在第一个操作数中。
and <reg>,<reg> / or <reg>,<reg> / xor <reg>,<reg>
and <reg>,<mem> / or <reg>,<mem> / xor <reg>,<mem>
and <mem>,<reg> / or <mem>,<reg> / xor <mem>,<reg>
and <reg>,<con> / or <reg>,<con> / xor <reg>,<con>
and <mem>,<con> / or <mem>,<con> / xor <mem>,<con>

and eax,0fh				#将eax中的前28位全部置为0,最后4位保持不变
xor edx,edx				#置edx中的内容为0


6.not指令。位翻转指令,将操作数中的每一位翻转
not <reg>
not <mem>

not byte ptr [var]		#将var值指示的内存地址的一字节的所有位翻转


7.neg指令。取负指令。
neg <reg>
neg <mem>

neg eax					#eax ← -eax


8.shl/shr 指令。逻辑移位指令,shl为逻辑左移,shr 为逻辑右移,第一个操作数表示被操
作数,第二个操作数指示移位的位数。
shl <reg>,<con8> / shr <reg>,<con8>
shl <mem>,<con8> / shr <mem>,<con8>
shl <reg>,<cl> / shr <reg>,<cl>
shl <mem>,<cl> / shr <mem>,<cl>

shl eax,1				#将eax值左移1位
shr ebx,cl				#将ebx值右移位(n为c1中的值)
流程控制指令:
 x86处理器维持着一个指示当前执行指令的指令指针(IP),当一条指令执行后,此指针自动指向下一条指令。IP寄存器不能直接操作,但可以用控制流指令更新。
mov esi,[ebp+8]
Begin: 
xor ecx,ecx
mov eax,[esi]

1.jmp指令:控制IP转移到label所指示的地址
jmp <label>

jmp begin					#转跳到begin标记的指令执行


2.jcondition指令。条件转移指令,依据CPU状态字中的一系列条件状态转移。CPU状态字中包括指示最后一个算术运算结果是否为0,运算结果是否为负数等。根据条件码ZF和SF来实现转跳。
je <label>					#equal,若a==b则跳转,ZF==1 ?
jne <label>					#not equal,若a!=b则跳转,ZF==0 ?
jg <label>					#greater than,若a>b则跳转,ZF==0 && SF==OF ?
jge <label>					#greater than or equal to,若a>=b则跳转,SF==OF ?
jl <label>					#less than,若a<b则跳转,SF!=OF ?
jle <label>					#less than or equal to,若a<=b则跳转,SF!=OF||ZF==1

cmp eax, ebx				#比较寄存器eax和ebx里的值
jg NEXT						#若 eax> ebx,则跳转到 NEXT


3.cmp/test指令。cmp指令用于比较两个操作数的值(同sub),test指令对两个操作数进行逐位与运算,这两类指令都不保存操作结果,仅根据运算结果设置CPU状态字中的条件码。
cmp <reg>,<reg> / test <reg>,<reg>
cmp <reg>,<mem> / test <reg>,<mem>
cmp <mem>,<reg> / test <mem>,<reg>
cmp <reg>,<con> / test <reg>,<con>

cmp dword ptr [var],10		#将var指示的主存地址的4字节内容,与10比较
jne loop					#如果相等则继续顺序执行;否则跳转到10p处执行
test eax,eax				#测试eax是否为零
jz xxxx						#为零则置标志ZF为1,转跳到xxxx处执行


4.call/ret指令。分别用于实现子程序(过程、函数等)的调用及返回。
call <label>
ret
call指令首先将当前执行指令地址入栈,然后无条件转移到由标签指示的指令。与其他简单的跳转指令不同,call指令保存调用之前的地址信息(当call指令结束后,返回调用之前的地址)。
ret指令实现子程序的返回机制,ret指令弹出栈中保存的指令地址,然后无条件转移到保存的指令地址执行。cal和ret是程序(函数)调用中最关键的两条指令。
条件和循环语句:
1.if-else:
if(a>b){
    c=a;
}
else{
    c=b;
}

mov eax,7				#假设变量a=7,存入eax
mov ebx,6				#假设变量b=6,存入ebx
cmp eax,ebx				#比较变量a和b
jg NEXT					#若a>b,转移到NEXT:
move ecx,ebx			#假设用ecx存储变量c,令c=b ——> else 部分的逻辑 
jmp END					#无条件转移到END:
NEXT:
mov ecx,eax				#假设用ecx存储变量c,令c=a ——> if 部分的逻辑 
END:


2.for while
int result = 0;
for(int i=1;i<=100;i++){
    result+=i;
}//求1+2+3+...+100

int i = 1;
int result = 0;
while(i<=100){
    result +=i;
    i++;
}//求1+2+3+...+100

mov eax,0		#用 eax保存 result,初值为0
mov edx,1		#用 edx保存 i,初始值为1
cmp edx,100		#比较 i和100
jg L2			#若i>100,转跳到 L2 执行
L1:				#循环主体
add eax,edx		#实现 result +=i
inc edx			#inc 自增指令,实现 i++
cmp edx,100		#比较i和100
jle L1			#若 i<=100,转跳到 L1 执行
L2:				#跳出循环主体


3.loop
mov ecx 500			#用ecx作为循环计数器
Looptop:			#循环的开始
...
做某些处理
...
loop Looptop		#ecx--,若ecx!=0,跳转到Looptop


dec ecx
cmp ecx,0
jne Looptop

2 函数调用

调用过程(调用者P调用Q):

1)P将入口参数放到Q能访问到的地方

2)P将返回地址存到特定的地方,然后将控制转移到Q

3)Q保存P的现场到通用寄存器,并为自己的非静态局部变量分配空间

4)执行过程Q

5)Q恢复P现场,将返回结果放到P能访问到的地方,并释放局部变量所占空间

6)Q取出返回地址,将控制转移到P

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3 习题

1.2.3.4.5.6.7.8.9.10.11.12

4.4 CISC和RISC

复杂指令系统计算机CISC:X86

主要用于笔记本、台式机

特点:

1.指令系统庞大,指令数目一般200条以上

2.指令长度不固定,指令格式多,寻址方式多

3.访存指令不受限制

4.使用频度差距很大

5.各种指令执行时间相差很多,大多数需要多个时钟周期才能完成

6.大多数用微程序控制

7.难以优化编译生成高效的目标代码程序

80-20规律:典型程序中,80%的语句只用到20%的指令

精简指令集系统计算机RISC

尽量使用寄存器-寄存器的操作,指令格式力求一致

1.选取使用频率高的一些简单指令,复杂指令由简单指令组合实现

2.指令长度固定,指令格式种类少,寻址方式比较少

3.只有load和store指令会访存

4.CPU中寄存器的数量比较多

5.采用指令流水线技术,大部分在一个周期内完成

6.以硬布线控制为主,不用或少用微程序控制

7.重视编译优化工作,减少程序执行时间

双操作数指令两个操作数不能都是内存,mov无法从内存复制到内存,可以从内存复制到寄存器,再从寄存器复制到内存

imul有符号乘法结果必须存到寄存器中

5 中央处理器

5.1 CPU的功能和基本结构

CPU由运算器和控制器组成;

指令控制:取指令、分析指令、执行指令,程序的顺序控制

操作控制:产生完成一条指令所需的操作信号

时间控制:

数据加工:

中断处理:

运算器:

算术逻辑单元ALU、

暂存寄存器:暂存主存读来的数据,该数据不能放通用寄存器里,对应用程序员是透明的、

累加寄存器ACC:通用寄存器、

通用寄存器组GPRs:通用寄存器长度与机器字长相等,可以存放地址和数据、

程序状态字寄存器PSW、

移位寄存器、

计数器CT:控制乘除运算的操作步数

控制器:

程序计数器PC:无论是顺序执行的指令还是转移指令,指令都是从PC中读出的

指令寄存器IR:保存当前正在执行的指令

指令译码器:

MAR:

MDR:

时序系统:由统一时钟分频得到

微操作信号发生器:

在这里插入图片描述

用户可见寄存器、可编程:通用寄存器组、PSW、PC

用户不可见、不可编程:MAR、MDR、指令寄存器、暂存寄存器

8 12 14 15 18

5.2 指令执行过程

取址周期、间址周期(取操作数地址)、执行周期(取操作数)、中断周期

1.指令周期

指令周期:执行一条指令的时间,不同指令指令周期可能不同

机器周期:节拍或T周期,CPU操作的基本单位,若干机器周期构成一个指令周期,机器周期通常由存储周期决定

时钟周期:一个机器周期包含若干时钟周期

在这里插入图片描述

2.指令周期的数据流

取址周期

根据PC的内容从主存中取出指令放到IR,PC+1

在这里插入图片描述

间址周期

取操作数有效地址

在这里插入图片描述

执行周期

执行周期的任务是取操作数,并根据IR的操作码字段通过ALU计算结果;不同指令的执行周期操作不同

中断周期

在这里插入图片描述

3.指令的执行方案

单指令周期:所有指令执行时间相同,指令之间串行执行,时钟周期取决于最长的指令执行时间

多指令周期:不同指令采用不同的执行步骤,各指令机器周期数不同,各机器周期长度可变,指令之间仍是串行

流水线方案:指令之间并行执行,每个时钟周期启动一条指令

5.3 数据通路的基本功能和结构

cpu内部结构可视为数据通路和控制部件两大部分组成

数据通路:数据在指令执行过程中所经过的路径,包括路径上的部件,称为数据通路

数据通路主要分为组合逻辑元件和时序逻辑元件

组合逻辑元件(操作元件):任何时刻的输出仅由当前输入决定,不含存储信号的记忆单元,不受时钟信号控制;如加法器、ALU、译码器、多路选择器、三态门等

时序逻辑元件(状态元件):任何时刻的输出除了与输入,还与以前的输入有关,时序电路必然包含存储信号的记忆单元,如通用寄存器、PC、状态、移位、暂存、锁存寄存器

数据通路基本结构:

CPU内部单总线结构:将所有寄存器的输入和输出端连接到一条公共通路上,结构比较简单,但数据传输存在较多的冲突现象,性能较低

CPU内部多总线:有两条或多条总线

专用数据通路:

数据传送:

通用寄存器之间

从主存读取数据

将数据写入主存

执行算术或逻辑运算

修改PC的值

5.4 控制器的功能和工作原理

1 控制器的结构和功能

计算机五大功能部件之间的连接:

在这里插入图片描述

控制器主要功能:

从主存中读出一条指令,并指出下一条指令在主存中的位置

对指令进行译码或测试,产生相应的控制信号

指挥并控制CPU,主存,输入输出设备之间的数据流向

2 硬布线控制器

在这里插入图片描述

硬布线控制器称组合逻辑控制器,原理是根据指令的要求、当前的时序以及内外部的状态,按时间顺序发送一系列微操作控制信号

译码器译码产生的操作码决定了不同指令周期执行的不同操作

时序系统产生机器周期信号和节拍信号,为了使控制单元按照一定的先后顺序、一定的节拍发出各个控制信号,控制单元必须首时钟控制

来自执行单元的反馈标志,如BAN指令,控制单元要根据上条指令的结果是否为负来产生不同的控制信号

硬布线控制器速度较快,电路复杂,高速计算机核心部件往往采用硬布线实现

3 微程序控制器

微程序控制器采用存储逻辑实现,将微操作信号代码化,每条机器指令转化成一段微程序并存入一个专门的存储器(控制存储器),微操作控制信号由微指令产生

基本概念

每条机器指令可编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令

微命令和微操作:
控制部件向执行部件发送各种控制命令称为微命令,是构成控制序列的最小单元。
执行部件收到微命令之后的操作称为微操作,微命令和微操作是一一对应的
微命令有相容性和互斥性之分

微指令和微周期:
微指令是若干微命令的集合,微指令=操作控制字段(微操作码,产生下一步所需的各种操作控制信号)+顺序控制字段(微地址码,控制产生下一条微指令地址)
微周期是指从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期

主存储器和控制存储器:
主存储器位于CPU外部,用RAM实现
控制存储器CM用于存放微程序,在CPU内部,用ROM实现,存放微指令的CM单元地址称为微地址

程序和微程序:
程序是指令的集合
微程序是微指令的集合

地址寄存器MAR
微指令地址寄存器uPC或CMAR
指令寄存器IR
微指令寄存器uIR和CMDR
微程序的组成和工作过程

在这里插入图片描述

组成:

起始和转移地址形成部件(微地址形成部件):用于产生初始和后继微地址,以保证微指令的连续执行

微指令地址寄存器uPC:接收微地址形成部件送来的微地址,为读取微指令做准备

控制寄存器:微程序控制器的核心部件,用于存放各指令对应的微程序

微指令寄存器:位数等于指令字长

微程序控制器的工作过程:
1.执行取微指令的公共操作:机器开始运行时,自动将取址微程序的入口地址送到uPC,并从CM中读出相应的微指令送入uIR。取址微程序的入口地址一般为CM的0号单元,完成后,从主存中读取的机器指令已经存入指令寄存器中。
2.由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序入口地址,并送入uPC
3.从CM中逐条读取对应微指令并执行
4.执行完对应一条机器指令的一个微程序后,又回到取址微程序的入口地址,继续完成下一条指令

微程序和机器指令:
通常一条机器指令对应一个微程序,由于任何指令的取指令操作都是相同的,因此可以将取指令的微命令统一编成一个微程序,只负责将指令从主存单元取出并送至指令寄存器;此外,也可以编写对应间址周期和中断周期的微程序
微指令的编码方式

如何对微指令的控制字段进行编码,以形成控制信号;目的是在保证速度的情况下,尽量缩短微指令字长

在这里插入图片描述

1.直接编码(直接控制)方式
微指令的操作控制字段中,每一位都代表一个微命令,设计时只要将表示该微命令的位设置为1或0即可,每个微命令对应并控制数据通路中一个微操作
简单,直观,执行速度快,操作并行好;缺点是太长

2.字段直接编码
将微命令的操作控制字段分为若干小字段,把互斥的微命令放在同一字段中,相容的放在不同字段中,每个字段独立编码,每个小段还需要留出一个状态,表示该字段不发出任何命令
可以缩短指令字长,但要通过译码电路再发出微命令

3.字段间接编码
一个字段某些微命令需要由另一个字段某些微命令来解释,不是靠字段直接编码得出,称为隐式编码
微指令的地址形成方式

后继地址形成:

1.由微指令的下地址字段给出,在微指令格式中设置一个后继地址字段,称为断定方式
2.根据机器指令的操作码形成,操作完成后输出的就是后继地址
3.增量计数器法,uPC+1 -> uPC,适用于后继地址是连续的情况
4.根据各标志决定下一条微指令分支转移的地址
5.由硬件直接产生
微指令格式

在这里插入图片描述

水平型微指令:

直接编码、字段直接编码和字段间接编码都属于水平型微指令。一条水平型微指令定义并执行多个并行操作的微命令

优点是微程序短,并行能力强,执行速度快;缺点是微指令长

垂直型微指令:

采用类似机器指令的方式,在微指令字中设置微操作码字段;一条垂直型微指令通常只能定义一种微操作

优点是微指令短、简单、规整,便于编写程序;缺点是微程序长,执行速度慢,效率低

比较水平微指令垂直微指令
并行能力
执行时间
微指令字长短指令字较长;微程序短微指令字较短;微程序长
编程难易程度简单
对比微程序控制器硬布线控制器
工作原理微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生
执行速度
规整性较规整烦琐、不规整
应用场合CISC CPURISC CPU
易扩充性易扩充修改困难

5.5 异常和中断机制

1 异常和中断的基本概念

异常:由CPU内部产生的意外事件,也称内中断;是CPU执行一条指令时,由CPU内部检测到、与正在执行指令相关的同步事件

中断:来自CPU外部设备向CPU发出的中断请求称为外中断,是一种典型的由外部设备触发的、与当前正在执行指令无关的异步事件

2 异常和中断的分类

异常:

异常由CPU内部产生,分为硬故障中断和程序性异常
硬故障中断由硬连线出现异常引起,如存储器校验错、总线错误
程序性异常称软件中断,是因执行指令而引起,如整除0、溢出、断点、单步跟踪、缺页等

故障Fault:
在引起故障的指令启动后,执行结束前检测到的异常;如指令译码时出现“非法操作码”,取数据时缺页,除数为0等;处理完可能回到原点也可能终止

自陷Trap:
预先安排的一种异常事件,如断点调试,单步跟踪,系统调用;处理完成后回到原本位置

终止Abort:
指令执行过程中发生了计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误;只能终止程序

故障和自陷异常属于软件中断(程序性异常);终止和外中断属于硬件异常

中断:

中断是指来自CPU外部、与CPU执行指令无关的事件引起的中断,包括IO设备发出的IO中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按Esc键、定时器计数时间到)等。

外部I/O设备通过特定的中断请求信号线向CPU提出中断请求,CPU每执行完一条指令就检查中断请求信号线,如果检测到中断请求,则进入中断响应周期。

可屏蔽中断:指通过可屏蔽中断请求线INTR向CPU发出的中断请求。CPU可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或不屏蔽它,被屏蔽的中断请求将不被送到CPU。


不可屏蔽中断: 指通过专门的不可屏蔽中断请求线NMI向CPU发出的中断请求,通常是非常紧急的硬件故障,如电源掉电等。这类中断请求信号不可被屏蔽,以让CPU快速处理这类紧急事件。

3 相应过程

1.关中断
在保存断点和程序状态期间,不能被新的中断打断;设置中断允许(IF)触发器,1表示开中断

2.保存断点和程序状态
为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中。通常保存在栈中,这是为了支持异常或中断的嵌套。
异常和中断处理后可能还要回到被中断的程序继续执行,被中断时的程序状态字寄存器PSWR的内容也需要保存在栈或特定寄存器中,在异常和中断返回时恢复到PSWR中。

3.识别并转到相应处理程序
异常和中断源的识别有软件识别和硬件识别两种方式
软件识别方式是指CPU设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理,然后转到内核中相应的处理程序。
硬件识别方式又称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,因而可以根据类型号快速找到对应的处理程序

5.6 指令流水线

同一时刻有多条指令在CPU的不同部件中并发执行

1 基本概念

时间上并行:将一个任务分为几个子阶段,每个阶段在不同功能部件上并行执行,以便同一时刻有多个任务进行,这就是指令流水线

空间上并行:在一个处理机内部设置多个执行相同任务的部件,让他们并行工作,这样的处理处理机称为超标量处理机

一条指令流水线的5个阶段:
取址IF:从指令寄存器或cache中读取指令
译码/读寄存器ID:操作控制器对指令进行译码,同时从寄存器堆中取操作数
执行/计算EX:执行运算操作或计算地址
访存MEM:对存储器进行读写操作
写回WB:将指令执行结果写回寄存器堆

流水线对指令集的要求:
1.指令长度尽量一致,有利于简化取指令和译码操作
2.指令格式尽量规整,尽量保证源寄存器位置相同,有利于在指令未知时就可读取寄存器
3.采用Load/Store,其他指令不能访问存储器,可以把Load/Store的地址计算和运算放在一个周期内
4.指令和数据在存储器中按边界对齐,使取数据尽量在一个周期内完成

2 流水线的基本实现

每个阶段执行时间可能不一样,按最长一个统一

每个流水段后面都要增加一个流水段寄存器,用于锁存本段处理完的所有数据,保证能在下一个时钟周期给下一个流水段使用

在这里插入图片描述

在这里插入图片描述

  • IF段包括程序计数器(PC)、指令存储器、下条指令地址的计算逻辑;
  • ID段包括操作控制器、取操作数逻辑、立即数符号扩展模块;
  • EX段主要包括算术逻辑单元(ALU)、分支地址计算模块;
  • MEM段主要包括数据存储器读写模块;
  • WB段主要包括寄存器写入控制模块。

在这里插入图片描述

3 流水线的冒险与处理

在指令流水线中,会遇到一些情况使流水线无法正确执行后序指令而引起流水线的阻塞或停顿,这种现象称为流水线冒险

在这里插入图片描述

结构冒险(资源冲突)

多条指令竞争同一资源引起的冲突,也称结构相关
解决方法:
前一指令访存时,后面的指令暂停一个时钟周期
设置多个独立部件,不同阶段可以使用不同部件

数据冒险(数据冲突)

后面的指令会用到前面指令的计算结果
有读后写RAW
解决方法:
把后续指令暂停一个或几个时钟周期,可分为软件插入空操作nop指令和硬件阻塞stall方法
数据旁路技术(转发机制):将执行结果出来后送入ALU输入端
通过调整指令数据

控制冒险(控制冲突)

当流水线遇到转移指令和其他改变PC值的指令,必需等待分支处理结果而造成断流时,会引起控制相关
解决方法:
对转移指令进行分支预测,尽早生成目标地址,分为简单预测和动态预测
预取转移成功和不成功两个控制流方向上的目标指令

!!cache确实的处理也会引起流水线的阻塞

4 流水线的性能指标

在这里插入图片描述

流水线的吞吐率:TP=n/Tk n为任务数,Tk为处理完n个任务所用的总时间
设k为流水段段数,t为时钟周期:TP=n / (k+n-1)t

流水线加速比:不使用流水线与使用流水线所用的时间之比
S=nkt / (k+n-1)t = nk/(k+n-1)

效率:流水线设备的利用率

5 高级流水线技术

两种增加指令集并行的策略:一是多发射技术,通过采用多个内部功能部件,使流水线功能段能同时处理多条指令;另一种是超流水线技术,通过增加流水线级数

在这里插入图片描述

超标量流水线

也称动态多发射技术,每个时钟周期内可发射多条独立指令,以并行操作将多条指令编译并执行
需要配置多个功能部件
简单超标量CPU是按顺序发射指令

超长指令字技术

也称静态发射技术,有编译器挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令,需要多个处理部件

超流水线技术

在流水线一个时钟周期再划分多个功能段,通过提高流水线主频的方式来提升流水线性能
但是流水线级数越多,用于流水寄存器的开销就越大,因而流水线级数是有限制的,并不是越多越好
超流水线CPU在流水线充满后,每个时钟周期还是执行一条指令,CPI=1,但其主频更高
多发射流水线CPU每个时钟周期可以处理多条指令,CPI<1,相对而言,多发射流水线成本更高,控制更复杂

5.7 多处理器的基本概念

1 SISD.SIMD.MIMD

单指令流单数据流SISD:只有一个处理器和一个存储器

单指令流多数据流SIMD:数据级并行技术,在for循环中处理数据最有效

不存在多指令流单数据流MISD

多指令流多数据流MIMD:线程级或线程级以上并行

向量处理器:SIMD的一种变体,将从存储器中收集的一组数据按顺序放到一组向量寄存器中,然后以流水化的方式对它们依次操作,最后将结果写回寄存器

2 硬件多线程

频繁的线程切换会影响CPU的性能,因此诞生了硬件多线程,为每个线程提供单独的通用寄存器组、程序计数器等

细粒度多线程:多个线程轮流交叉执行指令,指令不相关,可以乱序执行

粗粒度多线程:连续执行同一线程,直到阻塞时才切换

同时多线程SMT:前两种的结合,可以在同一个周期中,发射多个不同线程中的多条指令

在这里插入图片描述

3 多核处理器

多核处理器指将多个处理单元集成到单个CPU中,每个单元称为一个核,也称处理器,其中cache可以共享,也可以单独拥有

4 共享内存处理器

具有共享的单一物理地址空间的多处理器称为共享内存多处理器SMP

所有处理器都能访问到内存的任何位置,他们仍可以在自己的虚拟地址空间中单独运行程序

统一存储访问UMA多处理器:每个处理器访问存储单元的访问时间大致相同

非统一存储访问NUMA多处理器:某些访存比其他快

6 总线

6.1 总线概述

1 基本概念

总线是一组能为多个部件分时和共享公共信息的传送线路

分时:指同一时刻只允许一个部件向总线发送信息,若有多个部件,只能分时发送

共享:指总线上可以挂接多个部件,各部件之间互相交换信息都可以通过这组线路分时共享,多个部件可以同时从总线接收信息

总线设备:
主设备:从总线获得控制权的设备
从设备:被主设备访问的设备,只能相应主设备的各种总线指令
总线特征:机械特性(尺寸、形状)、电气特性(传输方向、有效电平范围)、时间特性(信号、时序关系)

2 分类

按功能:
片内总线:CPU内部各寄存器和ALU之间
系统总线:计算机系统各功能部件之间(CPU、主存、io),可分为数据总线、地址总线、控制总线
	数据总线双向传输,总线的位数反应一次能传送的位数
	地址总线单向传输,位数反应最大寻址空间
	控制总线用来传输各种命令、反馈和定时信号
IO总线:USB,PCI
通信总线:外部总线,计算机之间

按时间控制分类:
同步总线:统一时钟控制
异步总线:

按传输方式:
串行传输:适合长距离传输
并行传输:

3 系统总线的结构

单总线结构:单总线结构将CPU、主存、I/O设备(通过I/O接口)都挂在一组总线上,允许I/O设备之间、I/O设备与主存之间直接交换信息;结构简单,成本低,易于接入新的设备。带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作。

双总线结构:将低速I/O设备从单总线上分离出来,实现了存储器总线和I/O总线分离。需要增加通道等硬件设备。

三总线结构:提高了I/O设备的性能,使其更快地响应命令,提高系统吞吐量。系统工作效率较低。

在这里插入图片描述

通道:通道是具有特殊功能的处理器,能对I/O设备进行统一管理,通道程序放在主存中。

支持突发(猝发)传送,即送出一个地址,收到多个地址连续的数据

局部总线:连接计算机硬件系统的某一个子系统或部分部件的总线,这样可将一些高速外设,如图形卡,硬盘控制器等状系统总线上卸下而通过局部总线直接挂接

4 常见总线标准

总线标准全称工作频率数据位数最大速度特点
ISA工业标准体系结构8MHz8/168MB/s最早出现在微型计算机 系统总线
EISA扩展的 ISA8MHz3232MB/s为配合 32 位 CPU 系统总线 兼容ISA
VESA视频电子标准协会33MHz32132MB/s多媒体PC 局部总线
AGP加速图形接口X1:266MB/s X8:2.1GB/s连接主存和图形存储器 局部总线
PCI外部设备互连33MHz32/64133MB/s高度集成的外围部件、扩充插板 和处理器/存储器系统互连 局部总线 显卡、声卡、网卡 即插即用 与处理器时钟频率无关 的高速外围总线
PCI-E扩展的PCI10GB/s以上最新总线接口标准 串行
USB通用串行总线1280MB/s即插即用、热插拔 设备总线
RS-232EIA推荐的总线20kb/s串行二进制交换的 数据终端设备(DTE)和 数据通信设备(DCE)之间 串行通信总线
IDE(ATA)集成设备电路100MB/sIDE接口磁盘驱动器接口类型 硬盘光驱接口
SATA串行高级技术附件600MB/s串行硬盘接口
PCMCIA个人计算机存储卡国际协会90MB/s泛应用于笔记本电脑 即插即用 便携设备接口
SCSI小型计算机系统接口640MB/s计算机和智能设备之间 (硬盘、软驱)系统级接口 智能通用接口

5 性能指标

总线的传输周期(总线周期):一次总线操作所需的时间(包括申请阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期构成。

总线时钟周期:即机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制。

总线工作频率:总线上各种操作的频率,为总线周期的倒数。实际上指一秒内传送几次数据。

总线的时钟频率:即机器的时钟频率,为时钟周期的倒数。实际上指一秒内有多少个时钟周期。

总线宽度:又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位总线。

总线带宽:可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)表示。

总线复用:总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线传输更多的信息,从而节省了空间和成本。

信号线数:地址总线、数据总线和控制总线3种总线数的总和称为信号线数。

6.2 总线事务和定时

1 总线事务

请求阶段:
仲裁阶段:总线仲裁机构决定将下一个传输周期的总线使用权授予某个申请者。
寻址阶段:主设备通过总线给出要访问的从设备地址及有关命令,启动从模块。
传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送。
释放阶段:

非突发传输:每个传送周期内先传送地址,再传送数据,主从设备之间通常每次只能传送一个字长的数据

突发(猝发)传输:能连续传送成组数据,先发送连续单元首地址,然后每个时钟周期传送一个字长的信息,知道全部数据传送完毕再释放连接

2 总线定时

总线双方交换数据时需要时间上配合关系的控制,有同步、异步、半同步、分离式四种

同步定时方式:
采用一个统一的时钟信号来协调发送方和接收方的传送定时关系
优点:传送速度快,具有较高的传输速率;总线控制逻辑简单。
缺点:主从设备属于强制性同步:不能及时进行数据通信的有效性检验,可靠性较差。
异步定时方式:
没有统一的时钟信号相互制约,依靠双方的握手信号来实现定时控制
优点:总线周期长度可变,适合两个工作速度相差较大的部件
缺点:速度慢,比同步控制方式复杂
1.不互锁:速度最快可靠性最差
2.半互锁:
3.全互锁:最可靠速度最慢

在这里插入图片描述

异步串行通信方式:每个字符都要用开始位和停止位作为字符开始和结束的标志。当通信电路上没有信息传输时处于逻辑1状态,发送方发送数据时,先发送一个0信号作为开始位。

半同步定时方式:
保留同步定时的特点,又像异步定时方式那样允许不同速度的设备工作。增加一条wait相应信号线,等到检查wait信号有效再去数据线上取数据
优点:控制方式比异步控制简单,同步工作可靠性高
缺点:时钟频率不能要求太高,速度不快
分离式定时方式:
将总线事务分为请求和相应两个子过程,A先发地址和控制信息,发完释放总线;B再发数据,发完释放总线
优点:不存在空闲等待时间
缺点:控制复杂,开销大

7 输入输出系统

1 IO系统基本概念

输入输出系统
外部设备:包括输入输出设备及通过输入输出接口才能访问的外存储设备
接口:在各个外设和主机之间传送数据时进行各种协调工作的逻辑部件
输入设备:键盘、鼠标
输出设备:显示器、打印机
外存设备:硬磁盘、光盘
IO控制方式
程序查询方式:由CPU不断查询IO设备是否做好准备,从而控制IO设备与主机交换信息
程序中断方式:只在IO设备准备就绪并向CPU发出中断请求时才予以相应
DMA方式:主存和IO设备之间有一条直接数据通路,交换信息时无需调用中断服务程序 
通道方式:在系统中设有通道控制部件,每个通道都挂接若干外设,主机在执行IO命令时,只需启动有关通道,通道将执行通道程序,完成IO操作
外部设备
输入设备:键盘、鼠标

输出设备:
显示器:容量=分辨率*灰度级位数;带宽=分辨率*灰度级位数*帧数
打印机

外部存储器:
磁表面存储器:磁盘、磁带
固态硬盘SSD:
光盘存储器:光学原理

2 IO接口

IO接口也称IO控制器,是主机与外存的交接界面

功能

进行地址译码和设备选择
实现主机与外设的通信联络控制
实现数据缓冲
信号格式转换
传送控制指令和状态信息

基本结构

在这里插入图片描述

数据线:读写数据、状态字、控制字、中断类型号

地址线:指明I/O端口

控制线:读/写I/O端口的信号、中断请求信号

IO指令是特权指令

类型

传输方式:串行接口、并行接口

主机访问控制方式:程序查询接口、中断接口、DMA接口

功能选择灵活性:可编程接口、不可编程接口

编址

IO端口是指IO接口电路中可被CPU直接访问的寄存器,有数据端口、状态端口、控制端口

统一编制:又称存储器映射方式,是指把I/O端口当作存储器的单元进行地址分配,这种方式CPU不需要设置专门的I/O指令,用统一的访存指令就可以访问I/O端口。

靠不同的地址码区分内存和IO设备

优点:不需要专门的输入/输出指令,可使CPU访问I/O的操作更灵活、更方便,还可使端口有较大的编址空间。

缺点:端口占用存储器地址,使内存容量变小,而且利用存储器编址的I/O设备进行数据输入/输出操作,执行速度较慢

独立编址:又称I/O映射方式,I/O端口的地址空间与主存地址空间是两个独立的地址空间,因而无法从地址码的形式上区分,需要设置专门的I/O指令来访问I/O端口。

靠不同的指令区分内存和IO设备

优点:输入输出指令与存储器指令有明显区别,程序编制清晰,便于理解。
缺点:输入输出指令少,一般只能对端口进行传送操作,尤其需要CPU提供存储器读/写、I/O设备读写两组控制信号,增加了控制的复杂性。

3 IO方式

输入输出系统实现主机与IO设备之间的数据传送,可以采用不同的控制方式;常用有程序查询、程序中断和DMA

程序查询方式

信息交换的控制直接由CPU执行程序实现。接口中设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口),主机进行IO时,根据设备状态决定下一步操作

在这里插入图片描述

1.CPU执行初始化程序,并预置传送参数
2.向IO接口发出命令字,启动IO设备
3.从外设接口读取状态信息
4.CPU持续查询设备状态,知道外设准备就绪;可分为独占查询(一直查询,CPU与外设串行工作)和定时查询(周期性查询)
5.传送一次数据
6.修改地址和计数器参数
7.判断是否结束,未结束返回3

程序中断方式

计算机执行程序过程中,出现某些紧急情况或特殊请求,CPU暂时中止现行程序,在处理完这些异常后,又回到源程序断点处继续执行

程序中断的特点:
1.实现CPU与IO并行工作
2.处理硬件故障和软件错误
3.实现人机交互,用户干预机器需要中断系统
4.实现多道程序、分时操作,多道程序的切换需要中断系统
5.实现处理需要借助中断系统来实现快速响应
6.实现应用程序和操作系统(管态程序)的切换,称为软中断
7.多处理器系统中各处理器之间的信息交流和任务切换

程序中断思想:

CPU在程序中安排好在某个时机启动某台外设,然后CPU继续执行当前的程序,不需要像查询方式那样一直等待外设准备就绪。一旦外设完成数据传送的准备工作,就主动向CPU发出中断请求,请求CPU为自己服务。在可以响应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU返回原来的程序
在这里插入图片描述

程序中断的工作流程:
1.中断请求
每个中断源设置中断请求触发器,状态为1时表示有中断请求
可屏蔽中断:通过INTR线发出的是可屏蔽中断,优先级最低,在关中断模式下不会被响应。
不可屏蔽中断:通过NMI线发出的是不可屏蔽中断,用于处理紧急和重要的事件,如时钟中断、电源掉电等,其优先级最高,其次是内部异常,即使在关中断模式下也会被响。

2.中断响应判优
中断优先级包括响应优先级和处理优先级
相应优先级:有硬件线路和程序查询顺序决定,不可动态改变
处理优先级:可利用中断屏蔽技术动态调整,以实现多重中断
不可屏蔽中断>内部异常>可屏蔽中断
硬件故障>软件中断
DMA请求>IO设备的中断请求
高速设备>低速设备
输入设备>输出设备
实时设备>普通设备

3.CPU相应中断的条件
中断源有请求
CPU允许中断和开中断
一条指令执行完毕

4.中断响应过程
由硬件完成,称为中断隐指令
关中断
保存断点:PC和PSW
引出中断服务程序

5.中断向量
每个中断源有唯一的类型号,每个中断类型号对应一个中断服务程序,每个中断服务程序都有一个入口地址,即中断向量。
所有中断向量集中的存储器称为中断向量表
中断向量法:由硬件产生向量地址,再由向量地址找到入口地址。

6.中断处理过程
由硬件完成:
关中断
保存断点
中断服务程序寻址
由中断服务程序完成:
保存现场和屏蔽字:现场和断点,这两类信息都不能被中断服务程序破坏。现场信息因为用指令可直接访问,所以通常在中断服务程序中通过指令把它们保存到栈中,即由软件实现;而断点信息由CPU在中断响应时自动保存到栈或指定的寄存器中,即由硬件实现。
开中断
执行中断服务程序
关中断
恢复现场和屏蔽字
开中断、中断返回

在这里插入图片描述

多重中断

在中断服务程序中提前设置开中断指令。

优先级别高的中断源有权中断优先级别低的中断源。

中断屏蔽技术:每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。

在这里插入图片描述

在这里插入图片描述

DMA方式

DMA方式在外设和内存之间开辟一条直接数据通路,称为直接存储器存储方式

特点:
1.使主存和CPU固定联系脱钩,主存即可以被CPU访问,也可以被外设访问
2.在数据块传送时,主存地址确定、计数都由硬件电路完成
3.主存中要开辟专用的缓冲区
4.DMA传送速度快,CPU与外设并行工作,提高系统效率
5.开始传送前进行预处理,结束后通过中断方式进行后处理

DMA控制器:接收外设发出的DMA请求,向CPU发起总线请求,等CPU响应后接管总线控制权,进入DMA操作周期;确定并自动修改地址及计数器;规定数据传送方向,发出读写控制信号,执行数据传送操作

在这里插入图片描述

主存地址计数器:简称AR,存放要交换数据的主存地址
传送长度计数器:简称WC,用来记录传送数据的长度,计数溢出时,数据即传送完毕,自动发中断请求信号。
数据缓冲寄存器:暂存每次传送的数据。
DMA请求触发器:每当I/O设备准备好数据后给出一个控制信号,使DMA请求触发器置位。
控制/状态逻辑:由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步。
中断机构:数据传送完毕后触发中断机构,提出中断请求。
DMA传送方式:
1.停止CPU访存
需要数据传送时,停止CPU访存,总线控制权交给DMA控制器
2.周期挪用
I/O设备需要访存时,挪用一个或几个存取周期
3.DMA与CPU交替访存
将CPU周期分为DMA访存和CPU访存两个部分

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DMA传送过程:

在这里插入图片描述

预处理:CPU完成寄存器初值设置等准备工作,初始化DMA控制器中的有关寄存器、设置传送方向、启动该设备等,CPU继续执行原来的程序,直到I/O设备准备好发送的数据(输入情况)或接收的数据(输出情况)时,I/O设备向DMA控制器发送DMA请求,再由DMA控制器向CPU发送总线请求(有时将这两个过程统称为DMA请求),用以传输数据。

数据传输:DMA的数据传输可以以单字节(或字)为基本单位,也可以以数据块为基本单位

后处理:CPU执行中断服务程序做DMA结束处理,包括校验送入主存的数据是否正确、测试传送过程中是否出错(错误则转诊断程序)及决定是否继续使用DMA传送其他数据等。
DMA和中断方式的对比:
1.中断方式是程序的切换,需要保护和恢复现场:而DMA方式不中断现行程序,无需保护现场,除了预处理和后处理,其他时候不占用任何CPU资源。
2.对中断请求的响应只能发生在每条指令执行结束时(执行周期后):而对DMA请求的响应可以发生在任意一个机器周期结束时(取指、间址、执行周期后均可)。
3.中断传送过程需要CPU的干预;而DMA传送过程不需要CPU的干预,因此数据传输率非常高,适合于高速外设的成组数据传送。
4.DMA请求的优先级高于中断请求。
5.中断方式具有处理异常事件的能力,而DMA方式仅局限于大批数据的传送。
6.从数据传送来看,中断方式靠程序传送,DMA方式靠硬件传送。

!!!

组合逻辑电路:电路输出状态只取决同一时刻输入状态,与原电路状态无关

时序逻辑电路:电路输出状态除了同一时刻输入状态,还与原电路状态有关

地址寄存器在不在运算器中

机器运算发生溢出的根本原因是寄存器字长有限

左移溢出是看符号位和最高位是否一致,不一致就会溢出

ALU的减法规则是+一个负数,输入端取反,sub为置为1

浮点数基数越大,精度越低

补码的规格化表示是符号位后一位与符号位不同

浮点数运算舍入只发生在对阶和右规

主存由RAM和ROM组成

分段对低级程序员和编译器来说不是透明的

缺页中断属于内部异常

页表只能由操作系统和硬件管理,对用户程序来说是透明的

采用不同寻址方式的目的是为了缩短指令字长,扩大寻址空间,提高编程灵活性;但增加了译码的复杂度

无论是顺序执行的指令还是转移指令,指令都是从PC中读出的

间址周期是去操作数的有效地址

机器周期通常由存储周期决定

指令字长和机器字长没有关系

非访存指令:
CLA 清ACC
COM 取反
SHR 算术右移
CSL 循环左移
STP 停机指令

转移指令:
JMP X 无条件转移
BAN X 负则转(条件转移)

一条微指令存放在一个控制存储单元中

硬布线控制器时序系统比微程序复杂

微处理器跟微程序控制器没有关系

CPU控制:指令寄存器、操作控制器、程序计数器

cache确实的处理也会引起流水线的阻塞

用户程序不能指定指令访问哪个流水段寄存器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值