计算机系统概述
发展历程
第一代:电子管时代
第二代:晶体管时代
第三代:中小规模集成电路时代
第四代:超大规模集成电路时代
摩尔定律:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。
把汇编语言源程序转变为机器语言程序的过程是汇编。
微型计算机的发展以微处理器技术为标志。
计算机硬件的基本组成
冯诺依曼体系
冯诺依曼体系的特点如下:
- 计算机硬件系统由运算器、处理器、控制器、输入设备和输出设备5大部件组成。
- 指令和数据以同等地位存储在存储器中,并可按地址访问。CPU可以根据指令周期的不同阶段来区分是指令还是数据,通常,再取指令阶段取出的是指令,在执行阶段取出的是数据。
- 指令和数据均用二进制代码表示。
- 指令由操作码和地址码组成,操作码用来表示操作的性质,地址吗表示操作数在存储器中的位置。
- 指令在存储器中按顺序存放。通常,指令是顺序执行的,在特定条件下可以根据运算结果或根据设定的条件改变执行顺序。
- 早期的冯诺依曼以运算器为中心,输入/输出设备通过运算器与存储器传送数据。
- 基本工作方式是控制流驱动方式。
现代计算机的组织结构
由于计算机需要处理信息量的增加,现代计算机已经发展为以存储器为中心,使I/O操作尽可能地绕过CPU,直接在I/O设备和存储器之间完成,以提高系统的整体运行效率。
计算机的功能部件
输入设备
输出设备
存储器
CPU能够直接访问的是主存储器(主存、内存储器),不能直接访问的是辅助存储器(辅存、外存储器)。
地址译码器是主存储器的一部分。
地址寄存器(MAR),存放访存地址,经过地址译码后找到所选的存储单元。位数为地址码长度,2^{位数}=存储单元个数。
数据寄存器(MDR),是主存和其他部件的中介机构,用于暂存要从存储器中读或写的信息,时序控制逻辑中用于产生存储操作所需的各种时序信号。位数与存储字长相等,一般为字节的二次幂的整数倍。
MAR和MDR虽然是存储器的一部分,但在现代CPU中却是存在于CPU中的。
运算器
用于对数据进行加工处理,完成算术运算和逻辑运算。
运算器的核心是算术逻辑单元(ALU)。
运算器包含若干通用寄存器,例如累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR)等,其中前3个寄存器是必须的。
控制器
控制器是计算机的指挥中心,指挥各部件自动协调地进行工作。
控制器由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成。
PC用于存放当前与执行指令的地址。
IR用于存放当前的指令,内容来自主存的MDR。指令集存器对用户是完全透明(不可见)的。
程序计数器、状态寄存器、通用寄存器对汇编程序员可见。
CPU
现代计算机一般将运算器和控制器集成到同一个芯片上,合称中央处理器(CPU)。
地址寄存器位于CPU内,但为集成到运算器与控制器中。
寄存器位于CPU内部。存取速度:寄存器 > Cache > 内存
软件
软件功能可以由硬件取代。
系统软件和应用软件
系统软件是保证计算机系统高效、正确运行的基础软件,有操作系统、数据库管理系统、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务型程序等。
应用软件是为用户解决某个应用领域的问题而编制的程序,有科学计算程序、工程设计程序、数据统计与处理程序等。
数据库系统(DBS)由数据库(DB)、数据库管理员(DBA)、数据库管理系统(DBMS)组成,不是软件。
语言
机器语言
硬件能够直接执行的只有机器语言。
汇编语言
高级语言
工作流程
- 把程序和数据装入主存储器
- 从程序的起始地址运行程序
- 用程序首地址从存储器中去除第一条指令,经过取码、译码、执行等步骤,完成这条指令,并计算下一条指令地址。
- 用新得到的指令地址继续读出第二条指令并执行,状况程序结束为止。
计算机系统层次结构
- 微程序机器层
- 传统机器语言层
- 操作系统层
- 汇编语言层
- 高级语言层
性能指标
机器字长
进行一次整数运算所能处理的二进制数据的位数。
数据通路带宽
数据总线一次所能并行传送信息的位数。
主存容量
主存储器所能存储信息的最大容量。
运算速度
吞吐量
系统在单位时间内处理的信息数量。
响应时间
CPU时间周期
CPU中的最小时间单位,不是计算机操作中的最小时间单位,CPU周期由多个时钟周期组成。
主频
CPU时间周期的倒数。
CPI
执行一条指令所需的时间周期数。
CPU执行时间
运行一个程序所花费的时间。
MIPS、MFLOPS、GFLOPS、TFLOPS
每秒百万次*操作数。
几个专业术语
系列机
兼容
通常,软件或硬件在同一系列的不同型号计算机间通用。
软件可移植性
固件
数据的表示和运算
进制转换
除基取余法
乘基取整法
BCD码
BCD码是用二进制表示的十进制数,有8421码、余3码、2421码
余3码是在8421码的基础上+3
ASCII码
范围是0-127
‘0’为48
‘A’为65
‘a’为97
校验码
任意两个编码之间最少变化的二进制数,称为数据校验码的码距。对于码距不小于2的数据校验码,开始具有检错的能力。码距越大,检错、纠错的能力越强,而且检错能力总是大于等于纠错能力的。
奇偶校验码
缺点:不能检测出偶数位错误,不能确定出错的位置。
奇校验码:使整个校验码中1的个数为奇数(含校验位)。
偶校验码:使整个校验码中1的个数为偶数(含校验位)。
海明码
- 确定海明码的位数。n+k+1\leq2^k,n为有效信息的位数,k为校验位的位数,若要检2位错,则需要增加一个校验位,即k+1位
- 校验位在2^{i-1}上,即1、2、4、8……将校验位插入到数据位中,构成海明码
- 数据位由位号之和为数据位位号的校验位校验。
- 校验位的值为它校验的所有数据位的值求异或。
- 第i个校验位与它校验的所有数据位的值求异或,为1则表示第i个数据位出错
海明码纠错d位,需要码距为2d+1位的编码方案;检错d为,则只需码距为d+1
循环冗余校验码
- 信息码后面补0,个数为生成多项式位数-1
- 信息码与生成多项式做模2除法,产生余数,余数的位数为生成多项式位数-1
- 余数即为校验位,添加到信息为后面。
- CRC码与生成多项式做模2除法,若余数为0,则码字无错,余数中为1的位是出错位。
定点数的表示
原码
最高位表示符号。
0有正负两种。
反码
正数反码与原码相同。
负数符号位不变,其他位取反。
0有正负两种。
补码
正数补码与原码相同。
负数符号位不变,其他位取反,末位+1。(这里末位+1不会导致溢出,因为不可能出现所有位为1的情况)
0只有一种。
负数由补码求原码,可以先将符号位不变,其他位取反,然后末位+1(这种方式比先末位-1再取反要好,因为可能除符号位外全是0)
移码
移码=真值+偏置值,通常偏置值取2^n,在这种情况下,补码符号位取反,得到移码。
0的移码是100000…
移码保持了原有的大小顺序
在IEEE754标准中,偏置值是2^n-1
存储
在C语言中,变量以补码的形式存储。
大端方式:先存储高位(靠前的是高位,这是正常思维方式)。
小端方式:先存储低位。
边界对齐:起始地址能被自身长度整除
定点数的运算
移位
算术移位
符号位不移动。
如果不记得负数的移位规则,可以先转换为原码再移位。
正数:左移右移均添0
负数:原码左右移均添0;补码负数右移添1,左移添0
逻辑移位
符号位也要移动。
正数负数左移右移均添0
循环移位
左移将最高位移到最低位。
补码的加减
符号位运算时产生的进位要丢掉,结果的符号位由运算给出。
溢出的判别
用两个符号位时,正数符号位为00,负数符号位为11
用两个符号位时,运算结果相同则无溢出,不同则有溢出。
左边的符号位初始值为0
10为负溢出,01为正溢出
强制转换
相同字节数的强制转换,对应的每一位都保持不变。
向低字节转换,将高位字节部分截断,地位直接赋值。
向高字节转换,高位部分会扩展为原数字的符号位。
浮点数的表示
N=r^E\cdot M
r是基数,通常为2
E是阶码
M是尾数
解码全零表示无穷小(无限接近0),阶码全1表示正负无穷大
IEEE 754标准
阶码用移码表示,偏置值为127或1023,尾数用原码表示,尾数采用隐藏位省略小数点钱的1。
短浮点数:数符1位,阶码8位,尾数23位
长浮点数:数符1位,阶码11位,尾数52位
因为数符在前,所以尾数不用考虑正负。
浮点数的运算
对阶
将阶码小的尾数右移,阶码+1,直到两个数的阶码相等为止。
不能将阶码大的尾数左移。
规格化
当尾数的最高位与符号位不同时,即为规格化形式。
左规:尾数的最高位与符号位相同,需要将尾数左移,阶码-1。
右规:当尾数求和结果溢出时,需要将尾数右移(相当于除2),阶码+1。
强制转换
精度从小到大的转换没有损失。
浮点数向整数转换,会有精度损失和溢出。
溢出
运算结果超出尾数的表示范围不一定溢出,只有规格化右规后阶码超出所能表示的范围时才会发生溢出。
浮点数运算下溢,可以当作机器零来处理,不需要中断来处理;浮点数上溢,必须中断来做相应的处理。
算数逻辑单元(ALU)
运算器的功能由控制器决定,运算器处理的数据通来自存储器,处理结果通常送回存储器。
和表达式:A_i\oplus B_i\oplus C_{i-1}
进位表达式:C_i=A_iB_i+(A_i\oplus B_i)C_{i-1}
进位产生函数:G_i=A_iB_i
进位传递函数P_i=(A_i\oplus B_i)
并行加法器的最长运行时间主要由进位信号的传递时间决定。
并行加法器分为串行进位和并行进位。
并行进位不依赖低位进位输出C_{i-1},但随着加法器位数的增加,C_i的逻辑表达式会变得很复杂。
并行进位方式通常采用 组内并行组间串行方式进位方式 或 组内并行组间串行进位方式。
74181是4位并行加法器,74182是先行进位芯片。
无符号数乘除
三种电路的共同点
ALU只需要支持加减法
都需要若干支持移位运算的寄存器
计数器用于记录还剩几轮处理,每次减1
控制逻辑的功能:
- 对ALU的加减控制信号
- 对寄存器的左移右移控制信号
- 对寄存器的写使能控制信号
无符号整数乘法
此电路跟手动计算类似
Y最后一位是1时,P + X
Y最后一位是0时,P + 0
然后右移(无符号数逻辑右移和算术右移都一样)
C用来存放加法产生的进位
两个n位数相乘,临时用2n位存放结果,最后舍弃前n位,只要前n位存在1,就说明溢出
有符号整数乘法
不需要存放加法的进位
Y右边有一个辅助位
辅助位 – Y的最低位 = 1时,P+[X]补
辅助位 – Y的最低位 = 0时,P+0
辅助位 – Y的最低位 = -1时,P+[-x]
然后算数右移
两个n位数相乘,临时用2n位存放结果,最后舍弃前n位,前n位都是0或者都是1,说明没有溢出,否则溢出,跟双符号位加减法类似
定点数除法
可以计算定点小数,也可以计算定点整数
暂存2n位,如果是计算整数,前n位补0,如果是计算小数,后n位补0
每次进行左移
存储系统
存储器
主存又称内存,辅存又称外存。
存储器的存取时间是完成一次操作的时间,存取周期是两次操作的时间间隔,通常存取周期大于存取时间,因为在读写操作之后,总要由一段时间恢复内部状态。
CD-ROM是只读型光盘存储器,其访问方式是顺序的而不是随机的。
磁盘属于直接存取存储器,其速度介于随机存取存储器和顺序存取存储器之间。
Cache主存系统的效率e=访问Cache的时间/平均访存时间。(可以先算出命中率)
Cache是主存中部分信息的副本,不能算入存储器的总容量。
存储器的层次结构
Cache-主存层:解决主存和CPU之间速度匹配的问题。由硬件完成,对所有程序员透明。
主存-辅存层:解决容量问题。由硬件和操作系统完成,对应用程序员透明。
寄存器 Cache 主存 辅存
从左到右价格、速度降低,容量变大
半导体存储器
引脚:片选线、地址线、数据线、读写控制线、行列通选线(仅DRAM)
SRAM
特点:速度快,集成度低,功耗大
DRAM
采用地址复用技术,地址线是原来的1/2,额外需要行列选通线。
DRAM上的电荷一般只能维持1~2ms,即使不掉电信息也会丢失,所以需要刷新,刷新时间间隔通常取2ms
按行刷新。
刷新方式有以下三种:
集中刷新:存取速度高,但在死时间不能访问存储器。
分散刷新:加长了存取周期,但没有死时间。
异步刷新:可以避免使CPU连续等待时间过长的时间,减少刷新次数,提高整机工作效率。
ROM
SRAM和DRAM都是易失性存储器,ROM具有非易失性,可靠性高。
EPROM可编程次数优先,且写入时间过长,所以不能作为随机存储器。
U盘是闪速存储器(FLASH),可擦除重写,速度快。
固态硬盘也是ROM,读写速度快,功耗低,价格高。
主存容量的扩展
位扩展法(连接更多的数据总线)
字扩展法(连接更多的地址总线)
字位同时扩展法(线选法、译码片选法)
我总结的表达式:
2^A\cdot D=容量
2^A:地址数
A:地址寄存器位数
D:编址位数,数据寄存器位数
双端口RAM和多模块存储器
双端口RAM
左右端口地址码相同时,会发生读/写冲突,解决方法是用BUSY信号。
多模块寄存器
单体多字寄存器
增大了存储器的带宽,提高了单体存储器的工作速度。
指令和数据必须连续存放。灵活性不如多体单字。
多体并行存储器
高位交叉:体号在前,相当于扩充容量,对速度几乎没有提高。
低位交叉:体内地址在前,存储器交叉模块数应大于等于T/r,以保证上次的存取操作已完成。连续存取m个字所需的时间为t_1=T+(m-1)r
当相邻的(4)次访问出现在同一个体内,就会发生访问冲突。
高速缓冲寄存器(Cache)
程序访问的局部性原理
时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息。
空间局部性:在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的。
Cache的工作流程
Cache和主存的映射
直接映射
主存储块只能装入Cache中的唯一位置,简单但不灵活,冲突概率高,空间利用率低。
地址结构为:主存字块标记-Cache字块地址(行)-字块内地址
主存字块标记数=主存容量/Cache容量
字块内地址数=Cache每块容量/编址
全相联映射
可以把主存数据块装入Cache中的任何位置,空间利用率高,命中率高,但成本高。
地址结构为:主存字块标记-字块内地址
组相联映射
是前两种方法的折中做法,组间直接映射,组内全相联映射。
2路组相联映射表示每组两个数据块。
地址结构为:主存字块标记-组地址-字块内地址
Cache主存块替换算法
随机算法
先进先出算法
近期最少使用算法:依据程序访问的局部性原理:在程序的执行过程中,程序对主存的访问是不均匀的。
最不经常使用算法
Cache写策略
非写分配法通常与全写法合用,写分配法通常与写回法合用
命中
全写法:命中时,把数据同时写入Cache和主存
写回法:命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。
不命中
写分配法:加载主存中的块到Cache中,然后更新这个Cache块。
非写分配法:只写入主存,不进行调块。
Cache总容量的计算
Cache的总容量为:行数*(1有效位+标记位Tag+每行存储的数据)
虚拟存储器
虚拟存储器具有主存的速度和辅存的容量
页式虚拟存储器
虚拟空间和主存空间都被划分成同样大小的页。
最后一页的零头无法利用而造成浪费。
虚地址结构:虚页号-页内地址
页框号与页内地址拼接为物理地址。
段式虚拟存储器
按程序的逻辑结构划分,各个段的长度因程序而异。段表中要给出各段的起始地址与段的长度。
段的长度可变导致分配空间不便,容易在段间留下碎片,造成浪费。
虚地址结构:段号-页内地址
段页式虚拟存储器
先按逻辑分段,每段再划分为固定大小大的页。每个程序对应一个段表,每段对应一个页表。
在段页式虚拟存储器中,既要查找段表又要查找页表。
快表(TLB)
快表是用相联存储器实现的,相联存储器根据内容访问,不需要地址,访问时将内容进行比较,如果相等,则将此单元中余下的信息读出。
利用程序执行的局部性原理,在一段时间内总是经常访问某些页,把这些页放在快表中,则可以明显提高效率。
快表是慢表(Page)的一个很小的副本。
Cache命中说明所需页面已调入主存,Page必然命中,但TLB不一定命中。
Cache不命中不能说明所需页面没有调入主存。
固态硬盘
原理
闪存Flash Memory
组成
内存翻译层
存储介质(多个存储芯片,每个芯片有多个块,每个块有多个页)
读写
以页为单位读写
以块为单位擦除,擦干净的块,每页可以写一次,读无数次
支持随机访问
读取比写入快,如果要写的页有数据,则不能写入,要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新页
与机械硬盘相比
性能好、安静、能耗低
造价高、每个块写的次数有限
磨损均衡技术
有限写入擦除次数少的新闪存块
指令系统
指令格式
指令的基本格式
零地址指令:运算时,两个操作数隐含地中栈顶和次栈顶弹出。
一地址指令:可以隐含地约定一个操作数由ACC提供。
二地址指令
三地址指令
四地址指令
定长操作码指令格式
地址码会占据固定操作码以外的全部空间。
扩展操作码
段操作码至少要留一个作为扩展操作码。
数据寻址方式
隐含寻址:ACC作为第二操作数地址
立即寻址:A本身就是操作数。执行时间最短,但A的位数限制了立即数的范围。
直接寻址:A是操作数的真实地址
间接寻址:A是操作数的地址的地址
寄存器寻址:A指定一个寄存器,寄存器中存放操作数。相当于把直接寻址中的主存换成寄存器。
寄存器间接寻址:A指定一个寄存器,寄存器中存放操作数的地址。相当于把间接寻址中的第一个主存换成寄存器。
相对寻址:程序计数器PC的内容加上形式地址A,广泛应用于转移指令,也应用于多道程序(便于程序浮动)。
基址寻址:基地址不变,形式地址可变。应用于多道程序。
变址寻址:变址寄存器内容可变,形式地址不变,作为基地址。应用于数组循环。
堆栈寻址:用寄存器的是硬堆栈,用主存的是软堆栈。
CISC和RISC
CISC可以通过一定方式实现流水线,RISC必须实现指令流水线。
CISC通用寄存器较少,RISC通用寄存器较多。
CISC采用微程序控制,RISC采用组合逻辑控制。
CISC指令长度不固定,RISC指令长度固定。
RISC采用硬布线,CISC采用微程序。
中央处理器
CPU的功能
指令控制
操作控制
时间控制
数据加工
中断处理
CPU的基本结构
运算器
算术逻辑单元ALU
暂存寄存器:从主存读到的数据,不能直接放到通用寄存器中,要用到暂存寄存器
累加寄存器
通用寄存器:存放操作数和地址
程序状态字寄存器:进位等标志
移位器
计数器
不透明的:累加寄存器、通用寄存器、程序状态字寄存器
其他组件都是透明的。
控制器
程序计数器PC:下一条指令的地址
指令计数器IR:当前指令
指令译码器:仅对操作码字段进行译码
存储器地址寄存器MAR:要访问主存单元的地址
存储器数据寄存器MDR:向主存写入或从主存中读出的信息
时序系统
微操作信号发生器
CPU中没有地址译码器
PC也是寄存器
不透明的:程序寄存器
其他组件都是透明的。
数据总线位数与处理器位数相同
通用寄存器位数与机器字长相等
指令的执行过程
一个指令包含若干机器周期
一个机器周期包含若干时钟周期(又称节拍、T周期、CPU周期,是CPU操作的最基本单位)
每个指令周期内机器周期数可以不相等
每个机器周期内的时钟周期数可以不相等
指令周期分为:取指周期、(间址周期)、执行周期、(中断周期)
机器周期通常由存取周期来确定,因为存取周期耗时最长。
不同长度的指令,取指操作不同。指令字长为存储字长的几倍,就要访存几次。
指令流水线的每个流水段为时钟周期。
指令总是根据程序计数器读出,转移指令也是将指令地址存放到程序计数器中
指令字长是机器字长的整数倍。
取指周期
根据PC中的内容从主存中取指令字(包含操作码和地址码)。
取指令的同时,PC+1。
取指操作是控制器自动进行的,不需要得到命令
间址周期
取操作数的有效地址
执行周期
没有统一的数据流向
中断指令
保存断点,形成中断服务入口地址
数据通路
数据通路分为三种:
CPU内部单总线方式
CPU内部三总线方式
专用数据通路方式(没有总线)
专用数据通路总线方式性能好,冲突少,成本高,实现难度高
ALU只能只能有一个输入端可与总线相连,另一输入端需通过暂存器与总线相连
控制器的功能和工作原理
控制器的结构和功能
CU的输入:
(指令译码器产生)指令寄存器中的操作码
时钟
标志(条件专业)
外来信号
CU的输出:
CPU内部控制信号
到控制总线的控制信号
硬布线
地址总线既可以访问主存,又可以访问IO设备
微程序
不需要考虑逻辑门,不需要考虑电路设计。
微命令:执行微操作的控制信号
微操作:微命令的执行过程
微操作不可分割
一个机器指令(例如加法),可以分解为若干个微命令,有些微命令是相容的,可以同时执行,有些微命令是互斥的,不能同时执行。把可以同时完成的微命令,对应一个微指令,互斥的微命令也对应一个微指令。
多条微指令可以构成一个微程序,一条机器指令对应一个微程序。
取指操作可以编成一个微程序
微程序的组成
控制存储器CM:存放各指令对应的微程序,用ROM,因为具有不易失性。微程序控制器是CPU的一部分。
微地址寄存器CMAR:存放微地址形成部件送来的微地址(不是主存里的地址),为CM中读取微指令做准备。
微指令寄存器CMDR:存放从CM取出的微指令,位数与微指令字长相等,与IR类似
微地址形成部件:产生初始微地址和后续微地址
顺序逻辑单元:控制形成下一条微指令
地址译码器
执行过程
首先由一条机器指令,然帮把操作码部分送到微地址形成部件形成微地址,有了初始微地址后,送到顺序逻辑单元,然后判断是顺序执行还是跳转,然后送到微CMAR。然后进行地址译码,形成控制单元后,送到CM,取出微指令送到CMDR,然帮把CMDR中的下地址送到顺序逻辑单元。
若指令系统中具有n种机器指令,则控制存储器种的微程序数至少是n+1,1是公共的取指操作,如果有间址操作或中断操作,还要额外+1
微指令格式
水平型微指令
一条指令可以执行多个操作
优点:微程序短,执行速度块。
缺点:指令较长,编写麻烦。
垂直型微指令
一个微操作字段规定一个微指令,与机器指令操作码功能类似。
优先:微指令简单,编写方便
缺点:微程序长,执行速度慢
混合型微指令
在垂直型的基础上,增加一些不太复杂的并行操作
编码方式
直接编码方式
在微指令的操作控制字段中,每一位代表一个微操作命令。
快
字段直接编码方式
将微指令的控制字段分成若干段,每段经译码后发出控制信号。
互斥性微命令分在同一段内,相容性微命令分在不同段内。
每一个段中要留出全0表示不操作。
优点:可以缩短微指令字长
缺点:要通过译码电路后在发出微命令,因此比直接编码方式慢。
字段间接编码方式
优点:可进一步缩短微指令字长
缺点:削弱了微指令的并行控制能力
通常作为字段直接编码方式的一种辅助手段
微指令的形成方式
(前两种最常用)
- 断定方式:由微指令的下地址指出后继微指令地址
- 根据机器指令的操作码形成
- 增量计数法(CMAR)+1→CMAR,适用于后继指令的地追查连续的情况
- 分支转移
- 测试网络
- 硬件直接产生
设计步骤
取指周期要补充
Ad(CMDR)→CMDR
OP(IR)→CMAR
执行周期要补充
Ad(CMDR)→CMAR
硬布线与微程序的比较
微程序简单、慢、易扩展、较规整、应用于CISC(指令多)
硬布线的特点与之相反。
微程序控制器的工作原理:微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可。
硬布线控制器的工作原理:微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生。
流水线
分类
按可以完成的功能,流水线可以分为单功能流水线和多功能流水线。
静态流水线各段只能按同一种功能的连接方式工作,动态流水线相反。
线性流水线没有反馈回路,非线性流水线有。
影响因素(导致流水线阻塞的因素)
结构相关:争夺统一资源
数据相关:read after write
控制相关(控制冒险):遇到转义指令和其他改变PC值的指令,解决方案是提高猜准率和 预取两种情况的目标指令。
性能指标
吞吐率:单位时间内流水线所完成的任务数量,TP=\frac{n}{T_k}
加速比:不使用流水线与使用流水线所用的时间之比,S=\frac{T_0}{T_k}=\frac{kn}{k+n-1}
效率:占用面积与总面积之比,E=\frac{T_0}{kT_k}
超标量流水线
每个周期内可并发多条独立指令。
每个功能段时间不变,以空间换取时间。
多处理器
单指令流单数据流(SISD)
就是单处理器系统
单指令流多数据流(SIMD)
一个CU,多个ALU
只能并发不能并行,每条指令可以同时处理多个具有相同特征的数据,例如用于for循环
数据级并行
多指令流单数据流(MISD)
多条指令并行执行,处理同一个数据,现实中不存在
多指令流多数据流(MIMD)
特征:各指令序列并行执行,是线程级或进程级并行
多处理机系统
多个处理器可以共享主存和最低级的Cache
L1、L2 Cache每个处理器独占,L3 Cache多个处理器共享
LOAD/STORE可以直接访问对方的存储器
多计算机系统
不共享存储器,只能通过消息队列传送数据
向量处理器
用于向量计算
属于SIMD
总线
概述
总线分类
片内总线:连接芯片
系统总线:连接功能部件
通信总线:连接不同计算机系统
系统总线结构
单总线结构
有系统总线(包含地址总线、数据总线、控制总线)
优先:简单成本低
缺点:带宽低负载中不支持并发
地址总线不能回传
双总线结构
有主存总线、I/O总线,并且还需要通道
优点:实现了存储器总线和I/O总线的分离
缺点:需要增加通道等硬件设备
三总线结构
有主存总线、I/O总线和DMA总线
优点:提高了I/O设备的性能
缺点:系统工作效率较低
性能指标
总线的传输周期
总线的时钟周期
总线的工作频率
总线的时钟频率
总线宽度
总线带宽
总线带宽=总线工作频率*总线宽度
(注意单位是B/s还是bit/s)
总线仲裁
集中仲裁方式
“总线忙”信号都是由获得总线控制权的设备建立。
链式查询方式
离总线近的部件优先级高。
控制总线数是3
计数器定时查询方式
由PC控制使用权。
控制总线数是\lceil\log_2n\rceil+2
独立请求方式
每个设备均有一对总线请求线和总线允许线。
控制总线数是2n+1
分布仲裁方式
略
总线操作和定时
总线传输的四个阶段
- 申请分配阶段
- 寻址阶段
- 传输阶段
- 结束阶段
同步定时方式
适用于总线长度较短及总线所接部件的存取时间比较接近的系统。设备诉状是不同也可以使用这种方式,但不能发挥高速设备的告诉性能。
优点:速度快,简单
缺点:不能及时进行数据通信的有效性校验,可靠性较差。
异步定时方式
不互锁方式
主设备不管从设备时候接收到信号。
半互锁方式
主设备要确认从设备已接收到信号。
全互锁方式
主设备要确认从设备已接收到信号,从设备要确认主设备已撤销信号。
总线标准
要记住的总线标准:ISA、EISA、PCI、PCI-Express、USB
I/O系统
I/O接口
I/O接口是主机和外设之间的交接界面
I/O指令实现的数据传送发生在通用寄存器和I/O端口之间
程序查询方式
CPU一旦启动I/O,必须停止现行程序的运行,并不断检测设备状态,直到设备已做好准备,CPU才能执行I/O指令进行数据传送
多道程序环境下,采用I/O方式并不意味着此进程会一直占用CPU,其他进程也会轮流上CPU运行
中断方式
内中断和外中断,可以根据是否与当前执行的指令相关来区分
中断方式不适用于快速外部设备,因为因为CPU可能来不及取走数据缓冲寄存器中的数据
CPU和外部设备并行工作,外部设备I/O完成后,会向CPU发出中断请求,CPU再对中断请求进行处理,同时外部设备可以进行下一阶段的I/O工作
每个指令周期的末尾,CPU会检查是否有中断信号需要处理,如果有,CPU就会执行中断隐指令,然后执行中断服务程序;中断服务程序执行完后,再让程序的执行流回到以前的程序,继续往后执行。
中断隐指令
中断隐指令的过程为:关中断、保存断点(PC)、引出中断服务程序的入口地址(PC)
中断隐指令的执行必须一气呵成,中间不能被其他中断打断,所以要关中断
中断向量由硬件产生,中断向量是中断程序的入口地址
中断向量地址是中断程序入口地址的地址
中断服务程序
保护PSW的工作也可以在中断隐指令中完成,但保存通用寄存器一定在中断程序中
单重中断,中断服务程序的过程:保护现场(通用寄存器和PSW)、执行中断服务程序、恢复现场、开中断、中断返回
如果支持多重中断,还要在保护现场时保存屏蔽字;恢复现场时恢复屏蔽字;执行中断服务程序前后开中断和关中断,允许在执行中断服务程序时出现其他的中断
多重中断用中断屏蔽技术来确定中断的优先级
DMA方式
DMA方式在外存和内存之间开辟一条“直接数据通路”,信息传送时,DMA控制器从CPU完全接管对总线的控制,信息不经过CPU;CPU仅在预处理阶段将总线使用权交给DMA控制器,以及DMA传输完成中断时处理
DMA每次可以传输一整块数据(程序查询和中断方式是一个字)
DMA每准备一个字的数据,访存一次(一块数据包含很多字,一次DMA传输访存多次)
DMA控制器访存可能跟CPU访存冲突,应该DMA有限,但DMA需要的时钟周期数比较少,所以DMA对主存访问采用周期挪用方式
周期挪用:当DMA控制器和CPU都需要访存时,DMA挪用一个或几个存取周期
中断方式和DMA方式,都不需要等待CPU处理,数据传输和CPU处理时并行的
发表评论