导图社区 计算机组成原理
408计算机组成总结,计算机系统的组成:硬件系统和软件系统,硬件是指有形的物理设备,是计算机系统中实际物理装置的总称。软件是指在硬件上运行的程序和相关的数据及文档。
编辑于2023-10-09 20:11:51计算机组成原理
计算机系统概述
计算机系统的组成
硬件系统和软件系统,硬件是指有形的物理设备,是计算机系统中实际物理装置的总称。软件是指在硬件上运行的程序和相关的数据及文档
计算机硬件
冯诺依曼机基本思想
采用存储程序的概念,即将事先编制好的程序和原始数据送入主存后才能执行,一旦程序开始被启动执行,无需操作人员干扰,计算机会自动逐条指向指令,直至程序执行结束
计算机硬件由运算器、控制器、存储其、输入设备和输出设备组成
指令和数据以同等地位存储在主存储器中
指令和数据均用二进制代码表示,指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的存储地址
计算机功能部件
输入设备
输出设备
存储器
分为主存和辅存,CPU能够直接访问的存储器是主存
主存的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式
主存包括MDR、MAR、存储体和时序控制逻辑,不过MDR和MAR通常集成在外存上
存储体由许多存储单元组成,每个存储单元包括多个存储元,一个存储元可以存储一个0或1.所有一个存储单元能够存储一系列二进制代码,这串代码称为一个存储字,代码长度称为存储字长。存储字长一般是一个字节(8bit)或字节的整数倍
MDR与存储字长相等,MAR与存储单元数量存在对应关系
控制器
由程序计数器PC、指令寄存器IR和控制单元CU组成
PC保存下一条要执行的指令的地址,具有自动加一的功能
IR保存目前正在执行的指令,OP(IR)送CU,AD(IR)送MAR
运算器
用于算数运算和逻辑运算,算数运算包括加减乘除;逻辑运算包括与或非等
核心是算术逻辑单元ALU,还包括若干通用寄存器,用于保存操作数和中间结果,比如累加器ACC、乘商寄存器MQ、操作数寄存器X、变址寄存器IX和基址寄存器BR,前三个是必备的
还有一个程序状态寄存器PSW,又叫标志位寄存器,用于保存ALU运算得到的一系列标志信息或处理机的状态信息
中央处理器CPU
一般将控制器与运算器集成到一个芯片,称为中央处理器。CPU和主存储器构成主机,而主机外的其他设备,包括外存、输入设备和输出设备称为外设
计算机软件
系统软件和应用软件
系統软件是计算机出厂自带的软件
应用软件是用户根据自己需要安装的软件
三个级别的语言
高级语言:用户编程语言(可以编译,也可以直接翻译)
汇编语言:用英文单词代替二进制的指令代码
机器语言:机器可读
软件和硬件的逻辑功能等价性
即对于用户来说,一个功能即可以通过硬件直接实现,也可以通过软件扩充实现,没有差别
计算机系统的存储结构
五层
计算机的性能指标
主要性能指标
字长:机器字长、指令字长和存储字长
数据通路带宽:数据总线一次并行传送信息的位数
主存容量
运算速度
吞吐量和响应时间
吞吐量:系统在单位时间内处理请求的数量
响应时间:指从用户向计算机发送一个请求开始,到系统对此请求做出响应并获得所需结果的等待时间
主频和CPU时钟周期
主频是计算机内部的主时钟脉冲节拍(类似与我们按照时间做事情一样,计算机也需要一个时间指示),单位为Hz
CPU时钟周期即主频的倒数,即一个节拍的时间
CPI
即每条指令指向所需CPU时钟周期(节拍数),一般取平均值
CPU执行时间
是指运行一个程序所需时间,CPU执行时间=CPU时钟周期数/主频
MIPS
即每秒指向的百万条指令
还有MFLOPS等
基准程序
用于测试计算机性能的一组程序
数据的表示与运算(运算器和控制器)
数制与编码
进位计数制及其相互转换
进位计数制
按照每位的权值,将一个非十进制转换为十进制
相互转换
二进制转八进制和十六进制
转八进制:以小数点为界,整数部分从右往左三位一组,不够就在前面加0;小数部分从左往右三位一组,不够在后面加0。然后再讲划分的三位转为八进制即可
转十六进制:以小数点为界,整数部分从右往左四位一组,不够就在前面加0;小数部分从左往右四位一组,不够在后面加0。然后再讲划分的四位转为十六进制即可
任意进制转十进制
只需要进行将每位树乘以对应的权值再累加即可
十进制转任意进制
基数乘除法
整数部分:除基取余法
小数部分:乘基取整法
真值和机器数
定点数的编码表示(定点数:小数点固定)
定点小数和顶点整数的表示在于小数点位置不同
原码、补码、反码和移码
原码
机器数最高位表示符号,其余各位表示数的绝对值。0表示正,1表示负
字长为n+1,原码小数表示范围:-(1-2^(-n)),1-2^(-n)
字长为n+1,原码整数:1-2^n,2^n-1
0的表示不唯一,加减运算更复杂
反码
正数反码是本身,负数反码按位取反
补码
正数补码是本身,负数补码是其反码再加1
负数的原码与补码之间的快速转换:从右往左找到第一个1,将这个1左边所有数值为按位取反(不包括这个1),符号位不动
字长为n+1,补码小数表示范围:-1,1-2^(-n),多了一个最小数
字长为n+1,补码整数表示范围:-2^n,2^n-1,多了一个最小整数
移码
只能表示浮点数的阶码,只能表示整数。移码就是在真值的基础上加一个常数(偏置值),通常是2^n。
整数的表示
无符号整数:用于进行地址计算或者表示指针
带符号整数:反码表示
运算方法和运算电路
基本运算部件
一位全加器
全加器是最基本的加法单元,有加数Ai、Bi和低位传来的进位Ci-1三个输入,有本位和Si和向高位的进位Ci两个输出
串行进位加法器
将多个加法器直接串联起来
在串行进位加法器中,低位产生进位的时间影响高位运算的时间。因此串行进位加法器的最长运算时间主要由进位信号的传递时间决定,位数越多延迟越大,加法器本身计算所需时间可以忽略,所以提高进位产生速度和提高传递速度是关键
并行进位加法器
每位上的操作数除了在本位进行计算之外,还需要传递给高位的加法器
速度快,但是随着位数的增加,高位加法器的构造会越来越复杂。因此位数较多时不能直接采用并行进位加法器
实际做法是将并行进位加法器分成多组,组内并行进位加法,组间串行进位加法
带标志加法器
方便有符号整数的加减运算,除了进行带符号整数的加减,还要能产生相关的标志信息:OF(溢出位),SF(符号位),ZF(零标志),CF(进位/借位位)
算术逻辑单位ALU
功能较强的组合逻辑电路,进行多种算术运算和逻辑运算。核心是带标志加法器
定点数的移位运算
定点数的加法运算
定点数的乘除运算
定点数的乘法运算
原码一位乘法
原码一位乘法的特点是符号位好数值位分开求,乘积符号位用两乘数符号做“异或”运算,乘积数值部分则是两个数绝对值相乘之积
数值部分的计算:从乘数Y最低位开始,若为1,则部分积加X的绝对值,若为0,则加0;然后右移一位(避免让下次加的数左移),直到Y的数值部分都被扫描过。
补码一位乘法(Booth算法)
部分积和被乘数均采用两位符号位,乘数采用一位符号位;乘数在最低位另设一位低位,初始为0;
判断乘数的最低两位情况,对于00和11,部分积不变;01时部分积+[X]补;10时部分积+[-X]补;之后做一次右移;
重复步骤2,直到乘数右移至只剩两位原有的数(应为一个符号位和一个最高数值位),共重复n次;
进行最后一次判断(共做n+1次),处理部分积但不做移位,将得到的部分积与乘数储存的低位部分拼接,得到最终结果。
定点数的除法
原码除法:常用不恢复余数法,不用恢复余数法
原码不恢复余数法又叫加减交替法。特点是商符和商值是分开计算的,减法操作用补码实现。
用原码加减交替法:求| X | / | Y |的解题步骤:
先将余数减去除数得新余数Ri
若Ri>0,商“1”,做2Ri-y* 运算
若Ri<0,商“0”, 做2Ri+y*运算(2(Ri+y*)-y*=2Ri+y*)
再将上述过程重复n(除数位数)次,共上n位商。若小数点后有4位,则商5次
最后所得的商和余数即为| X | / | Y | 的商及余数
补码除法(加减交替法)
若X,Y同号,做X-Y得余数R,商0为商的符号位,再做2R+Y得Ri
若X,Y异号,做X+Y得余数R,商1为商的符号位,再做2R-Y得Ri
若余数Ri与Y同号,商1,后做2Ri-Y
若余数Ri与Y异号,商0,后做2Ri+Y
重复第3、4步n-1次
第n次上商后,不再移位及+Y,-Y操作
商末尾恒加1
C语言中的整数类型和强制类型转换
强制类型转换不改变数据的位值,即存储的二进制代码不变,只改变对二进制代码的解释方式
当大字长变量向小字长变量强制类型转换时,系统会把多余的高位部分直接截断,低位直接赋值
当小字长变量向大字长变量强制类型转换时,不仅要使位值相等,还要对高位部分进行扩展。如果原数字是无符号整数,则进行零填充,扩充后的高位部分用0填充。否则进行符号填充,扩充后的高位用原数字符号位进行填充
数据的存储与排列
数据的“大端方式”和“小端方式”
通常用最低有效字节LSB和最高有效字节MSB来分别表示数据的低位和高位
大端方式,从高字节到低字节;小端方式,从低字节到高字节
数据按“边界对齐”方式存储
“边界对齐”即数据无论是字节、半字,都可以一次访存得出,不能被分散存储,只需要一个地址,便于寻址,不满足存储需要的空间空闲。缺点:浪费空间
不按“边界对齐”即数据可以分散存储在不同的字节里面,节约存储空间,但是寻址比较麻烦
浮点数的表示与运算
浮点数的表示格式
浮点数的规格化
左规
右规
IEEE754标准
规定了两种浮点数格式:Float和Double,符号、阶码和尾数分别占1、8、23和1、11、52,基数隐含为2,且尾数采用隐藏位机制的原码,阶码采用移码
短浮点数阶码取值为1~254(0不用于表示阶码,有特殊用途),长浮点数阶码取值为1~2046(0不用于表示阶码,有特殊用途)
全0阶码和全0尾数,表示0
全1阶码和全0尾数表示无穷
全0阶码,非全0尾数表示非规格化浮点数
全1阶码,尾数不全为0表示非数值
浮点数的加减运算
对阶:小阶对大阶
尾数求和:按照定点数加减运算计算,如果发生溢出,多保留两位
规格化:将尾数求和的结果进行规格化,保留低位移出的两位
舍入:按照多保留的两位的情况进行取舍
0舍1入法
恒置1法
截断法
判断溢出
指数上溢出,即超过127或1023,向上级报告异常
指数下溢,即小于-126和-1022,当做机器0
浮点类型转换
即将数据一种格式换成另一种表达格式
char→int→long→double以及float→double都没有精度损失
其他数据之间的转换要考虑尾数精度够不够,会不会损失精度
float和double转int,会截断小数点后的数据
存储系统
存储器的分类
作用(层次)分:主存储器、辅助存储器和高速缓冲存储器
存储介质:磁表面存储器、磁芯存储器、半导体存储器和光存储器
存取方式:随机存取存储器、只读存储器、顺序存取存储器和直接存取存储器
信息的可保存性:非易失性存储器和易失性存储器
信息读取方式:破坏性读出和非破坏性读出
层次化存储器的基本结构
CPU
寄存器
Cache
主存
磁盘
磁带和光盘
半导体随机存取存储器
SRAM
静态随机存取存储器,由双稳态触发器构成,非破坏性读出,不需要刷新,集成度低,需要一直充电,能耗大,价格高,一般用于高速缓冲存储器
DRAM
动态随机存取存储器,由栅级电容构成,破坏性读出,需要刷新,集成度高,任意集成,价格低,一般用于主存
由于DRAM电容上的电荷只能维持1~2ms,所以为了防止数据丢失,需要按时给存储器进行刷新,即重新写入数据
集中刷新:在一个刷新周期内,利用一个固定时间将存储器所有存储单元进行刷新,在刷新期间不能进行存储器读写操作,称这段时间为“死时间”,又称为访存死区
分散刷新:将对每行的刷新分散在到各个工作周期内,即每次对一行进行读写后都需要对这一行所有数据进行刷新,避免了死区,但是降低了整机的工作效率
异步刷新:将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,然后利用逻辑电路每隔t就产生一次一行的刷新请求,解决了死区问题,提高了访问整机的工作效率
注意:①刷新对CPU是透明的;②DRAM的刷新单位是行,由芯片内部自行生成行地址;③刷新操作不需要选片,即同时对所有存储芯片进行刷新
存储芯片的内部构造
存储体(存储矩阵)
地址译码器
I/O控制电路
片选信号
读/写控制信号
Flash存储器(U盘和SD卡)
即可长期保存信息又可以在线快速擦除和重写
主存储器(DRAM+ROM)
基本构成
存储体
MDR和MAR
地址寄存器和地址译码器
读写控制电路
控制总线、地址总线和数据总线
一般采用地址线复用技术,行地址和列地址分两次输入,减少一般的地址引脚数
多模块存储器
多模块存储器是一种空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率。常用的有单体多字存储器和多体低位交叉存储器
单体多字存储器
只有一个存储器,每个存储单元存储m个字,总线带宽也为m个字,一次并行读出m个字,地址必须顺序排列并且处于同一单元
多体并行存储器
多体并行存储器由多个存储模块构成,每个模块都有相同的存储容量和存取速度,每个模块都有自己的读写控制电路、地址寄存器和数据寄存器,他们即可以并行工作,也可以交叉工作
高位交叉存储器(先指明体号,然后在这个存储体内读取)
高位表示体号,低位表示体内地址。简单扩容
低位交叉存储器(先指明体内地址,然后再不同的存储体内读取数据)
低位表示体号,高位表示体内地址。可以采用流水线的方式连续读取数据,提高数据读取的速度
m>=T/r(m为模块数,T为存取周期,r为总线传输周期)
主存储器与CPU的连接
连接原理
主存储器通过地址总线、数据总线和数据总线与CPU连接
数据总线的位数与工作频率的乘积正比与数据传输率
地址总线的位数决定了可寻址空间的大小
控制总线指出了本次总线周期的类型(读或写)和本次输入或输出操作完成的时刻
片选线决定了要访问的存储体
单个存储芯片的容量不可能很大,所有需要通过存储芯片扩展技术将多个芯片集成在一个内存条上,然后由多个内存条以及主板上的ROM芯片组成主存空间
主存容量的扩展
位扩展法(芯片并联)
扩展存储器存储字长,使得其等于数据线位数
将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出
仅采用位扩展时,片选线要连接所有芯片,即同时有效或无效
字扩展法(芯片串联)
扩展存储器存储单元个数,存储单元本事的位数不变
将存储芯片的地址线、数据线、读写控制线相应并联,而片选端低电平(CS上面加一杠)用来区分芯片的地址范围
一般高位中的几位作为片选信号,其他为作为地址信号
字位同时扩展
实际的存储器采用字位同时扩展。既增加了字长,有增加了存储器容量
存储芯片的地址分配的片选
片选法:即直接用一位特点的二进制位来表示一个存储芯片
译码片选法:即采用一组编码表示存储芯片,比如000表示选一号芯片,001选二号芯片,以此类推(常用方法)
存储器与CPU的连接
合理选择芯片:ROM存放系统程序、汉字库和各类常数,RAM则为用户编程而设置
地址线的连接:CPU地址线往往多余存储芯片地址线数,多余的地址线用于字扩展,即用于当做片选信号线
数据线的连接:相等时直接连接,不相等时进行存储芯片位扩展
读/写命令线的连接:有的读写命令线是一根,通常高电平为读,低电平为写。有的是两根,具体情况具体分析
片选线的连接
两根读写控制信号以及片选信号都是低电平有效,最后取反
外部存储器
磁盘存储器
磁盘设备的组成
磁盘存储器的组成:磁盘驱动器(磁头组件和盘片组件),磁盘控制器(借口,比如IDE,SATA)和盘片
存储区域:一块硬盘含有若干记录面,每个记录面划分若干磁道,而每条磁道分为若干扇区,扇区(也称块)是磁盘读写的最小单位,即磁盘按块存取
磁头数
柱面数(每个盘面的磁道数)
扇区数
磁记录原理
磁头和磁性记录介质相对运动时,通过电磁转换完成读写操作
编码方案:按照某种规律,把一串二进制信息转换成存储介质磁层中的一个磁化翻转状态的序列
磁盘性能指标
记录密度:盘片单位面积所记录的二进制信息量,通常用道密度、位密度和面密度,道密度是指半径方向单位长度的磁道数,位密度是磁道单位长度所记录的二进制信息量,面密度是道密度*位密度
磁盘容量:非格式化容量和格式化容量,非格式化是磁记录面所能利用的磁化单元总数,通过道密度和位密度计算;格式化容量值对磁盘进行了盘区划分,并且将一些区域作为替补区域,待磁盘扇区受损时利用
平均存取时间:平均寻道时间+平均旋转延迟时间+数据传输时间
数据传输率:磁盘存储器单位时间向主机发送的数据字节数,等于转速*磁道容量
磁盘地址(一个计算机有多个磁盘,首先明确访问哪个磁盘)
磁盘寻址使用三个信息:驱动器号(一个驱动器连接一个磁盘),柱面号(磁道号),磁头号(盘面号),扇区号。一般最上面和最下面的盘面不使用。
磁盘阵列
RAID(独立冗余磁盘阵列)是指多个独立的物理盘组成一个独立的逻辑盘,数据在多个物理磁盘上分割交叉存储、并行访问,具有很好的存储性能、可靠性和安全性。无论哪种分级RAID,都可以随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏,提升了系统的可靠性
RAID0:无冗余无校验的磁盘阵列,多个连续的数据块交替的存放在不同物理磁盘的扇区中,几个磁盘交叉并行读写,存取速度加快,但是没有容错能力
RAID1:镜像磁盘阵列,对两个磁盘同时读写,互为备份,若一个磁盘出现故障,可以从另一个磁盘读出数据。容量减小一半,但是提高了可靠性
RAID2:采用纠错的海明码的磁盘阵列,数据包括数据位和海明码,计算机网络
固态硬盘
固态硬盘(SSD)是一种基于闪存技术的存储器。一个SSD有一个或多个闪存芯片和一个闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层相当于磁盘控制器。
一个闪存由多个块组成,每块又由多个页组成,数据以页为单位进行读写,但是以块为单位进行擦除。只有这一页数据的块整个被擦除后才能写这一页
SSD随机写很慢有两个原因:①块擦除速度很慢,比访问页高一个数量级;②当要进行修改某个页时,需要把整个块的数据迁移到另一个擦除过的块上才能进行修改
磨损均衡策略
动态磨损均衡
系统自动选择一块当前擦除次数较少的块进行擦除,然后写入
静态磨损均衡
系统将擦除次数多的老块用于存储一些以读为主的数据
高速缓冲存储器
程序访问的局部性原理
时间局部性
现在访问的数据在不久的将来很有可能再次被访问
空间局部性
与现在访问的数据在存储空间上相邻的数据在不久的将来很有可能被访问
Cache的基本工作原理
Cache和主存都被划分成相等的块,Cache块又称Cache行,块的长度称为块长或Cache行长
CPU与Cache的数据交换以字节为单位,而Cache与主存以块为单位交换数据
Cache命中与命中率:CPU欲访问的信息已在Cache中
Cache-主存平均访问时间:即Cache命中的访问时间乘以命中率+Cache未命中的访问时间乘以未命中率(具体表达式得看CPU访存机制)
Cache和主存的映射方式(包括如何查找Cache块)
Cache行中的信息是主存中某个块的副本,地址映射是指把主存地址空间映射到Cache地址空间,即把主存中的信息按照某种规则装入Cache
主要思想:给Cache中每一个块加一个标记,用以说明它是主存中哪一个块的副本。该标记的内容相当于主存中块的编号。同时为了说明Cache块是否有效,还需要增设一个标志未
直接映射(不需要替换算法)
主存中一个块只能装入Cache中的唯一位置。若已有内容,则产生块冲突,原来的块无条件得被替换出去。冲突概率最高,空间利用率最低
映射关系:Cache行号=主存块号 mod Cache总行数
CPU发出的主存地址信息:标记项+Cache行号+块内地址
Cache结构:标记+块内数据
全相联映射
主存中每一个块可以被装入任意一个位置,Cache每行的标记用于指名该块来自哪个主存块。冲突概率低,空间利用率高,但是标记比较费时,需要采用价格昂贵的按内容寻址(就是比较关键字)的相联存储器进行地址映射
CPU发出的主存地址:标记项+块内地址
组相联映射
将Cache分成Q个大小相等的组,每个主存块只能被装入固定的组,但是在组内可以装入任意的Cache块内。假设每组有r个Cache行,则称为r路组相联
映射关系:Cache组号=主存块号 mod Cache总组数
CPU发出的主存地址信息:标记项+Cache组号+块内地址
注意:标记项=有效位+脏位+替换控制位+标记位
Cache中主存块的替换算法
在采用全相联和组相联映射时,可能会出现Cache装满的情况,这时候就要选择替换掉哪一个Cache块
随机算法
随机选择替换的Cache行,没有考虑局部性原理
先进先出算法
最先被装入Cache的块优先被替换,没有考虑局部性原理
近期最少使用算法(LRU)
依据程序的局部性原理,选择最近长时间未被使用的Cache行进行替换,平均命中率比FIFO高,是堆栈类算法
为每个Cache行设置一个计数器,用计数值来记录主存块的使用情况(记录多久未被访问)①Cache命中时,该行置计数器0,比其低的计数器加1,其余不变,防止某些数值过大;②未命中且还有空闲行时,新装入的行计数器置0,其余全加1;③未命中且无空闲行时,根据计数器的值,选择最大的行进行替换,并把计数器置0,其余全加1
当集中访问的存储区大于Cache空间时,命中率会变得很低,刚刚被换出的行又被再次被访问,产生“抖动”
最不经常使用算法
将一段时间内访问次数最少的存储行换出。每行设置一个计数器,新建行从0开始计数,每访问一次,被访问的行计数器加1,需要替换时选择计数器置最小的行进行换出。当出现多行数字都最小时可以按照行号次序或FIFO原则选择替换行
没有很好的遵循局部性原理
Cache写策略(解决Cache和主存数据的同步问题)
写命中
全写法(写直通法):主存和cache同时进行修改
回写法(写回法):先写cache,当修改行要被替换时再写回主存
写未命中
写分配法(为主存块分配cache空间):加载主存中的块到cache中,然后对cache块进行写,使用回写法
非写分配法:不加载主存块到cache,直接向主存块写,使用全写法(全写法才写主存)
虚拟存储器(在操作系统的里面总结,更详细)
虚拟存储器的基本概念
虚拟存储器将主存和辅存的地址空间同一编址,形成一个庞大的存储空间。在这个空间内,用户可以自由编程,而无需考虑实际的主存容量和程序在主存中的实际存放位置
用户编程允许涉及的地址称为虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间或程序空间。实际主存单元地址称为实地址或物理地址,实地址对应的是主存地址空间或者实地址空间
CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元是否以装入了内存。若已经在内存中,则通过地址转换,CPU可以直接访问主存指示的实际单元。若不在主存中,则把包含这个字的一个页或者一个段调入主存供CPU访问。若主存已满,则需要采用替换算法置换主存中的页。并且采用回写法,提高效率
在虚拟存储器中,CPU未命中主存而访问辅助的代价很大,所以提高命中率是关键,因此虚拟存储器采用全相联映射方式,每个虚页或虚段可以被装入任意的主存空闲页
指令系统
基本概念
指令(机器指令):计算机执行某种操作的命令
指令系统(指令集):一台计算机所有指令的集合
指令集体系结构:包括指令格式,数据类型和格式,操作数的存放方式,程序可访问的寄存器个数、位数和编号,存储空间的大小和编址方式,寻址方式,指令执行过程的控制方式
指令格式
指令=操作码+地址码,操作码是指明操作类型,地址码指明被操作的一个或多个信息(数据或指令)的存储地址
指令长度是指令包括的二进制位数,取决于操作码长度、操作数地址码长度和个数
指令长度和机器字长没有固定关系,看操作数个数
分定长指令字结构和变长指令字结构
主存一般按字节编址,指令字长多为字节整数陪
指令按照地址码个数分类
零地址指令
只有操作码,没有显式地址;这种指令有两种可能
①不需要操作数的地址,入空操作指令、停机指令、关中断指令
②零地址的运算类指令只用于堆栈计算机。通常参与运算的两个操作数隐含的从栈顶和次栈顶弹出
一地址指令
通常有两种形态:
①只有目的操作数的单操作数地址,如自增、自减等
②隐含约定目的地址的双操作数指令,如另一个操作数可能来自ACC,计算完成后存回ACC
二地址指令
OP |A1|A2
含义:(A1)OP(A2)→A2
三地址指令
OP |A1|A2|A3
含义:(A1)OP(A2)→A3
四地址指令
OP |A1|A2|A3|A4
含义:(A1)OP(A2)→A3,(PC)→A4,A4存放下一条指令的地址
扩展操作码指令格式
原则
不允许任何一个操作码是另一个操作码的前缀
各指令操作码不允许重复
对使用频率较高的指令分配较短的操作码,对使用频率较低的指令分配较长的操作码,从而减少整体移码和分析的时间
看一下书上的例图
指令的操作类型
数据传送:寄存器之间的数据传送MOV,从内存单元读取数据到CPU寄存器(LOAD),从CPU寄存器写数据到内存单元(STORE)
算术和逻辑运算:ADD,SUB,MUL,DIV,INC,DEC,AND,OR,NOT,XOR(异或)
移位运算:算术移位,逻辑移和循环移位
转移指令:无条件转移指令(JMP),条件转移(BRANCH),调用(CALL),返回(RET)、陷阱(TRAP)等
输入输出操作
寻址方式
寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址
指令寻址
顺序寻址:(PC)+1→PC
跳跃寻址:通过转移类指令实现。所谓跳跃是指下条指令的地址不由PC给出,而是由本条指令给出下条指令的地址
数据寻址:是指如何在指令中表示一个操作数的地址,如何用这种表示得到操作数或计算操作数的地址
数据寻址方式较多,为区别各种方式,通常在指令字段中设一个字段,用来指明属于哪一种寻址方式:操作码+寻址特征+形式地址
隐含寻址:不明显的给出操作数的地址,而在指令中隐含操作数的地址,如单地址指令中的另一个操作数来着ACC,不显示的指明
立即(立即数)寻址:这种指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数,用补码表示
直接寻址:即指令的地址码中的地址即是操作数的实际的地址,即EA=A
间接寻址:即指令的地址码中的地址并不是操作数的地址,而是操作数地址的地址,即EA=(A)。间接寻址可以是一次间接寻址,也可以是多次间接寻址
寄存器直接寻址:指令的地址码给的是寄存器的编号,即EA=Ri
寄存器间接寻址:指令的地址码给的是寄存器编号的地址,即EA=(Ri)
相对寻址
相对寻址是把PC的内容加上指令格式中的形式地址而形成操作数的有效地址,即EA=A+(PC),其中A是相对于当前PC值的偏移量,用补码表示
注意:这里的PC已经在原来的基础上加1了
便于程序浮动,广泛应用与转移类指令
基址寻址(指令内容作为偏移量)
基址寻址是指将CPU中的基址寄存器加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中基址寄存器可以选用专用的寄存器,也可以选用通用寄存器
基址寄存器面向操作系统,其内容只能由操作系统或管理程序员设置,对普通程序员和用户是透明的。在采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,单其内容仍然由操作系统决定
扩大寻址范围,有利于多道程序的设计,并用于编制浮动程序
变址寻址(寄存器内容作为偏移量)
变址寻址是指有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容之和,即EA=(IX)+A
变址寄存器面向用户,其内容可以由用户改变(作为偏移量),形式地址不变(作为基地址)
在处理数组问题,可以将A设定为数组首地址,不断改变变址寄存器IX中的内容,便可以很容易形成数组中任意一个数据的地址,特别适合编制循环程序
堆栈地址
堆栈是存储器(或专用寄存器组)中一块特定的、按后进先出(LIFO)原则管理的存储区,该存储区的读/写单元的地址由一个特殊的寄存器给出,该寄存器称堆栈指针。堆栈可分为硬堆栈和堆栈
寄存器堆栈称为硬堆栈,从主存中划分一块区域做堆栈称为软堆栈(常用)
数据的对齐和大/小端
CISC和RISC
CISC:复杂指令集计算机
系统庞大复杂
指令格式多,寻址方式多
可以访存的指令不受限制
各种指令使用频率差不多
各种指令执行时间相差很大
采用微程序控制,有些指令非常复杂,以至于不能用硬布线实现
难以优化编译
RISC:精简指令集计算机
选取使用频率最高的简单指令,复杂指令由简单指令组合
指令长度固定,指令格式种类简单,寻址方式种类少
只有LOAD和STORE指令访存,其他指令的操作都在寄存器之间进行
寄存器数量非常多
RISC采用指令流水线方式,效率高
以硬布线控制为主
可以优化编译
程序的机器级语言表示
X86汇编语言
x86有8个32位的通用寄存器
AX EAX 累加器
BX EBX 基地址寄存器
CX ECX 计数寄存器
DX EDX 数据寄存器
ESI 变址寄存器(来源)
EDI 变址寄存器(目的)
EBP 堆栈基指针(有专用用途)
ESP 堆栈顶指针(有专用用途)
加E的是32bit,不加E的是16bit,同时这16bit的寄存器还可以分成两个8bit的左右寄存器
汇编指令格式
主要有两种:AT&T格式和Intel格式
在AT&T中第一个为源操作数,第二个为目的操作数,方向从左到右,合乎自然;而Intel中第一个为目的操作数,第二个为源操作数,方向从右到左
在AT&T中,寄存器需要加前缀%,立即数需要加前缀$;在Intel格式中,寄存器和立即数都不需要加前缀
在内存寻址中,AT&T所有(),Intel使用[]
在处理复杂寻址方式时,例如AT&T格式的内存操作数“disp(base,index,scale)”分别表示偏移量,基址寄存器,变址寄存器和比例因子,如8(%edx,%eax,2)表示操作数M[R[edx]+2*[eax]+8],而Intel格式表示操作数为[edx+eax*2+8]
指定数据长度,AT&T用的是b,w,l,Intel用byte ptr,word ptr,dword ptr
常用指令(在X86中,任何一个指令中的操作数不能都来自主存)
汇编指令通常可以分为数据传送指令、逻辑运算指令和控制流指令
Intel格式表示寄存器、内存和常数的格式为:
<reg>:任意寄存器,<reg8>:8位寄存器,<reg16>:16位寄存器,<reg32>:3位寄存器
<mem>:主存地址
<con>:某位常数,<con8>:8位常数,<con16>:16位常数,<con32>:32位常数
部分重要的数据传送指令
mov 操作数1,操作数2:将第二个操作数复制到第一个操作数,不能从内存复制到内存
add/sub 操作数1,操作数2:两操作数相加/相减的结果保存到第一个操作数中,操作数1-操作数2
inc/dec
imul:带符号整数乘法①两操作数,相乘结果放到第一个操作数的寄存器;②三操作数,第二个和第三个相乘的结果放到第一个操作数的寄存器
idiv指令:带符号整数除法,他只有一个操作数,即除数,而被除数则为edx:eax,操作结果的商放到eax,余数放到edx
部分逻辑运算指令
shl/shr:逻辑左移和逻辑右移
控制流指令
jmp指令:无条件转移
jcondition指令:条件转移,和cmp(比较)连用
je:相等时跳转
jne:不相等时跳转
jz:等于0跳转
jg:更大的时候跳转
jge:更大或者相等的时候跳转
jl:更小的时候跳转
jle:更小或者相等的时候跳转
cmp/test:cmp用于比较两个操作数的值,test用于两个操作数逐位相与
call/ret:分别用于实现子程序的调用和返回
过程调用的机器级表示
call/ret指令主要用于过程调用,他们都属于一种无条件转移指令
call指令的作用
①将IP(就是PC值)旧值压栈保存;
②设置IP新值,无条件转移至被调用函数的第一条指令
ret指令的作用
从函数栈顶顶部找到IP旧址,并且将其出栈并恢复IP寄存器
栈帧
用一个栈来保存函数调用过程中的现场和各种参数,每个过程都有自己的栈区,称为栈帧,因此,一个栈由若干栈帧组成。帧指针寄存器EBP指示栈帧的起始位置(栈底),栈指针寄存器ESP指示栈顶,栈由高地址向低地址增长,因此当前栈帧的范围在栈指针EBP和ESP指向的区域之间
栈帧顶部保存本函数定义的参数或变量,同时越先被定义的变量越先被恢复,所以越靠近栈顶;栈帧底部保存提供给被调用函数的参数,同时也满足越先定义的参数越靠近栈顶
函数调用的过程(P是主函数,Q是被调用的函数)
调用者保存寄存器:EAX,ECX,EDX,由P保存和恢复。被调用者保存寄存器:EBX,ESI,EDI,Q需要将其值保存到栈中才能使用,并且在返回P之前恢复他们的值
P将入口参数(实参)放在Q能访问到的地方
P将返回地址存到特定的地方,然后将控制权交给Q(通过call实现)
Q保存P到现场(通用寄存器中的内容),即压栈,并且为自己的非静态局部变量分配空间
执行过程Q
Q恢复P的现场,然后返回结果放到P能访问的地方,并且释放局部变量所占空间
Q取出返回地址,将控制权转交给P(通过ret实现)
结合c语言理解汇编语言
结合汇编语言分析机器语言指令的格式、寻址方式
选择语句的机器级表示
循环语句的机器级表示
看书上的例子理解就好
中央处理器
CPU的功能和基本结构
CPU的功能
中央处理器CPU由匀速运算器和控制器组成。其中控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和指向指令;运算器的功能是对数据进行加工。
指令控制:完成取指令,分析指令和执行指令,即程序的顺序控制
操作控制:一条指令的功能往往由多种操作信号的组合来实现。CPU管理并且产生这些操作信号,并且送往相应的指向部件
时间控制:对各种操作加以时间上的约束
数据加工
中断控制:对运行过程中出现的各种异常情况和特殊请求进行处理
CPU基本结构
运算器:算术逻辑单元ALU,累加寄存器ACC,通用寄存器组(AX,DX,CX,BX,SP),程序状态寄存器PSW,移位器,计数器(控制加减乘除的操作步数)
控制器:程序计数器PC,指令寄存器IR,指令译码器,存储器地址寄存器,存储器数据寄存器,时序系统,微操作信号发生器(根据IR的内容、PSW的内容和时序信号,产生控制整个计算机系统所需的各种操作信号)
CPU内部的寄存器分为用户可见和用户不可见两类,用户可见包括通用寄存器组,程序状态寄存器和程序计数器。用户不可见包括存储器地址寄存器、存储器数据寄存器和指令寄存器
指令执行过程
指令周期的概念:CPU从主存中取出并且执行一条指令的时间称为指令周期,为了应对各种突发事件,一般还需要加上最后的一个中断周期。所以指令周期整体上包括取指、间值、执行和中断四个周期,四个阶段均可能访问主存,但是目的不同,分别是取指令,取有效地址,取操作数和保存程序断点
为了区别指令周期的不同阶段,在CPU内设置了4个标志触发器FE,IND,EX和INT,对应取指、间址、执行和中断
指令周期的数据流
数据流是根据指令要求依次访问寄存器或主存的数据序列
取指周期的数据流
PC→MAR→地址总线→主存
CU发出读命令→控制总线→主存(读写控制电路)
主存→数据总线→MDR→IR
CU发出控制信号→PC内容加1
间址周期的数据流
Ad(IR)(或MDR)→MAR→地址总线→主存
CU发出读命令→控制总线→主存
主存→数据总线→MDR(存放的有效地址字段)(注意:如果是多次间址,则需要再通过数据总线送到MAR)
执行周期的数据流
不同指令的执行周期不一样,因此没有固定的数据流向
中断周期的执行流(结合操作系统)
中断程序的任务是处理中断请求。假设程序断点存入堆栈,并用SP指示栈顶指针,而且进栈操作数先修改指针,后存入数据。
CU控制将SP减1,SP→MAR→地址总线→主存
CU发出写命令→控制总线→主存
PC→MDR→数据总线→主存(程序断点存入主存)
CU(中断服务程序的入口地址)→PC
指令执行方案(安排指令的执行时间)
单指令周期:对使用指令采用相同的执行时间来完成,称为单指令周期
多指令周期:对于不同类型的指令选用不同的执行步骤,称为多指令周期方案。指令间串行执行,对于不同的指令分配不同的时钟周期,硬件设计简单
流水线方案:指令之间可以并行执行。每个时钟周期内启动一条指令,让指令同时运行,一个时钟周期内指向多条指令的不同执行步骤
数据通路的功能和基本结构
数据在功能部件之间的传送路径称为数据通路,包括数据通路上流经的部件。数据通路描述信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器,这些都需要加以控制
数据通路的基本结构
CPU内部单总线方式
所有寄存器的输入与输出都连接到一条公共线路,结构简单,冲突概率大,性能较低
CPU内部多总线方式
所有寄存器的输入与输出都连接到多条公共线路
专用数据通路方式
根据指令执行过程中数据和地址的流向安排连接线路,可以安排之间线路,也可以复用与其他部件的线路
寄存器之间的数据传送
(PC)→Bus→MAR,PCout和MARin有效
主存和CPU之间的数据传送(以取指令为例)
(PC)→MAR,PCout和MARin有效
1→R,CU发送读命令
M(MAR)→MDR,MDRin有效
(MDR)→IR,MDRout和IRin有效
执行算数或者逻辑运算(以间址为例)
(MDR)→MAR,MDRout和MARin有效
1→R,CU发出读命令
M(MAR)→MDR,MDRin有效
(MDR)→Y,MDRout和Yin有效
(ACC)+(Y)→Z(Z的作用是暂存运算结果,带结果信号稳定后发送给ACC),ACCout和ALUin有效,CU向ALU发送加命令
(Z)→ACC,Zout和ACCin有效
注意:总线上只能有一个信号在传输,因为这些硬件都只会执行简单命令,不能分解信号),ALU和暂存器Y之间的数据传送不影响内部总线的数据传送
控制器的功能和工作原理
微指令编码方式(或者微指令控制方式)
直接编码方式:
直接编码无须译码,微指令的微命令字段中每位都表示一个微命令。设计指令时,通过设置该为为1或0表示选用或不选用该微命令
字段直接编码方式
将微指令的微命令字段分成若干小字段,把互斥微命令组合在同一个字段中,把相容性微命令组合在不同的字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义独立定义,与其他字段无关
微命令字段分段原则
互斥微命令组合在同一个字段,相容性微命令组合在不同的字段
每个小段包含的信息不能太多,否则增加译码线路的复杂性和译码时间
每个小段留出一个状态,表示该位不发出任何微命令,比如三位的小段,用000表示不发出微命令
字段间接编码方式
一个字段的某些微命令需要另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出读微命令,所以称为字段间接编码
硬布线控制器和微程序控制器的特点(其他的看看书就好)
硬布线控制器的特点:硬布线控制器的优点是由于控制器的速度取决于电路延迟,所以速度快;缺点是由于将控制部件视为专门产生固定时序控制信号的电路逻辑,所以把用最少元件和取得最高速度视为设计目标,一旦设计完成,就不可能通过其他额外修改增加新功能(电路已经固定了,不可能再改变),烦琐,不规整,适用于RISC
微程序控制器的特点:微程序控制器的优点是同组合逻辑控制器相比,微程序控制器具有规整性、灵活性、可维护性;缺点是由于微程序控制器采用了存储程序原理,所以每条指令都要从控制存储器里面取一次,影响速度,适用于CISC
指令流水线
指令流水线的基本概念
指令流水的定义
一条指令的执行过程可以分解成若干阶段,每个阶段由相应的功能部件完成。如果将各阶段视为相应的流水段,则指令的执行过程就构成了流水线
理想情况下,每个时钟周期都有一个指令进入流水线,每个时钟周期都有一条指令完成,每条指令的时钟周期数都是1(其实不是)
流水线设计原则
指令流水段个数以最复杂指令所用的功能段个数为准
流水段长度以最复杂的操作所花时间为准
流水线虽然不能提高单条指令的执行时间,但是可以提升整体程序的执行时间
指令长度应尽量一致,有利于简化取指令和指令译码操作
指令格式应尽量一致,尽量保证源寄存器位置相同,有利于在指令未知时就可以取寄存器操作数,否则译码后才能确定各寄存器编号的位置
只有Load/Store指令才能访问主存
数据和指令在存储器中“对齐存放”,有利于减少访存次数
流水线的表示方法
时空图(看看例图)
流水线的实现(看书就好)
流水线的冒险(冲突)和处理
结构冒险
由于多条指令在同一时刻争夺同一资源而形成的冲突,也称为资源冲突,即由硬件资源竞争造成的冲突,有两种方法:
前一个指令访存时,使后一条指令(以及后续指令)暂停一个时钟周期
单独设置指令存储器和数据存储器,使取数和取指令操作各自在不同的存储器中进行
数据冒险
在一个程序中,下一条指令会用到当前指令计算的结果,此时两条指令产生数据冲突
写后读相关(RAW,英文表示错误类型):表示当前指令将该数据写入寄存器后,下一条指令才能从中读取数据
读后写相关(WAR):表示当前指令读取寄存器数据后,下一条指令才能往该寄存器写内容
写后写相关(WAW):表示当前指令写入寄存器后,另一个指令才能写,否则导致最终结果出错
控制冒险
指令通常是顺序执行的,但是遇到改变指令执行顺序的情况,比如执行转移、调用或返回等指令,会改变PC值,会造成断流,从而引起控制冒险
对转移类指令进行分支预测,尽早生成转移目标地址。包括简单(静态)分支预测和动态分支预测。静态预测总是预测条件不满足,即继续执行分支指令的后续指令。动态预测则根据程序执行的历史情况,进行动态预测调整,有较高的预测准确性
预取转移成功和不成功两个控制流方向上的目标指令
加快和提前形成条件码
提高转移方向的猜准率
流水线的性能指标
流水线的吞吐率
单位时间内流水线所完成的任务数量,或输出结果的数量,TP=n/Tk
流水线的加速比
完成同一批任务,不用流水线和用流水线所用时间之比,S=T0/Tk
流水线的效率
流水线设备利用率,E=时空区有效面积/总面积
高级流水线技术
超标量流水线技术
又叫动态多发射技术,每个时钟周期内可并发多条独立指令,以并行操作方式将两条或多条指令编译并执行,为此需要配置多个功能部件
为了提高性能,多数超标量CPU都结合动态流水线调度技术,通过动态分支预测等手段,指令不按顺序执行,这种执行方式称为乱序执行
超长指令字计算
超长指令字技术又称静态多发射技术,由编译程序挖掘指令间潜在的并行性,将多条能并行的指令组合成一条具有多个操作码字段的超长指令字,为此需要采用多个处理部件
超流水线技术
通过提高流水线主频来提升流水线性能,即将流水线功能段进一步划分,时时钟周期更短,指令吞吐率就越高。或者说将功能部件的功能区进一步划分,但是功能部件实际上未改变
多处理器基本概念
SISD、SIMD、MIMD
SISD单指令单数据流结构
只有一个处理器和一个存储器,一段时间只能执行一条指令,按指令流规定的顺序串行执行指令流的若干条指令
会采用流水线方式,和多模块交叉存储器
SIMD单指令流多数据流结构
是指一个指令同时对多个数据流进行处理,是数据级并行技术。这种结构计算机通常由一个指令控制部件,多个处理部件组成。每个处理单元虽然执行的都是同一条指令,但是每个单元都有自己的地址寄存器,这样每个数据都有自己的数据地址
SIMD处理数组时最有效。SIMD处理case或switch时效率最慢
MIMD多指令多数据流结构
MIMD是指同时执行多条指令分别处理不同的数据,MIMD分为多计算机系统和多处理器系统
多计算机系统由多台具有相同功能且独立的计算机构成,通过网络进行消息传递
多处理器系统是共享存储多处理系统
线程级或线程级以上的并行计算技术
硬件多线程的基本概念
在传统计算机中,线程的切换包含一系列开销,频繁切换会极大影响系统的性能,为了减少线程切换过程中的开销,便诞生了硬件多线程。即提供多个线程同时运行的所需的通用寄存器组,单独的程序计数器等,线程的切换只需要激活选中的寄存器即可,忽略数据交换的时间,大大减少了线程切换的开销
细粒度多线程
多个线程之间轮流交叉执行指令,多个进程之间的指令是不相关的,可以乱序并行执行,多处理器能够在多个时钟周期切换线程
粗粒度多线程
仅在一个线程出现较大开销的阻塞时,才切换线程,如Cache缺失。在这种情况下,当发生流水线阻塞时,必须清除被阻塞的流水线,新线程的指令开始执行时重载流水线,因此开销更大
同时多线程
SMT是上述两种多线程计技术的变体。在同一个时钟周期内,发射多个不同线程中的多条指令执行。
多核处理器的基本概念
多核处理器是将多个处理单元集成到单个CPU中,每个处理单元称为一个核,每个核即可以有自己的Cache,也可以共享Cache。所有核一般都是对称的,而且共享主存,这样的多处理器属于共享存储的多核处理器
共享内存多处理器的基本概念
具有共享的单一物理地址空间的多处理器
各个处理器之间通过共享变量实现通信
分类
统一存储访问多处理器(UMA):每个处理器对使用存储单元的访问时间大致相同
非统一存储访问多处理器(NUMA):每个处理器被单独分配了一部分存储单元,访问自己分配的存储单元速度快,访问其他存储单元速度慢
总线
总线的基本概念
总线的定义
总线是一组能为多个部件分时共享的公共信息传送路线。分时和共享是总线的两个特点。分时是指同一时刻只允许有一个部件向总线发生信息,若系统中有多个部件,则他们只能分时的向总线发送信息。共享是指总线上可以挂接多个部件,各部件之间相互交换的信息都可以通过这组线路分时共享,多个部件可以同时从总线上接收信息
总线特性
机械特性:尺寸,形状
电气特性:传输方向和有效的电平范围
功能特性:每根传输线的功能
时间特性:信号和时序的关系
总线分类
片内总线
系统总线
I/O总线
通信总线
总线的结构及性能指标
总线结构
单总线结构
只有一组总线,将CPU,I/O设备以及主存都挂在这组总线上
双总线结构(引入通道,一种处理器)
两组总线:一条主存总线,用于在主存,CPU,通道之间传送数据。一条I/O总线,用于在多个外部设备和通道之间交换设备
三总线结构
三组总线:一条主存总线,用于在主存和CPU之间交换数据;一条I/O总线,用于CPU和各类外部设备通信;一条DMA总线,用于DMA接口(连接高速外设)和主存交换数据
性能指标
总线传输周期,指一次总线操作所需时间,包括申请阶段、寻址阶段,传输阶段和结束阶段
总线时钟周期,即机器时钟周期
总线工作频率,总线各种操作的频率,为总线周期的倒数
总线时钟频率:即机器的时钟频率,机器周期倒数
总线宽度:又称总线位宽,它是总线同时传送的信息位数,通常用总线根数衡量
总线带宽:总线最大数据传输率,即单位时间总线最多能传输的数据位数,通常用每秒传送信息的字节数衡量
总线复用:一根总线在不同时间传输不同类型的信息
信号线数:地址线+数据线+控制线
总线事务和定时
总线事务
从请求总线到完成总线使用的操作序列称为总线事务,它是一个总线周期中发生的一系列活动。典型的总线事务包括请求操作,仲裁操作,地址传输,数据传输和总线释放
请求阶段:主设备(CPU或者DMA)发出总线传输请求,并且获得总线控制权
仲裁阶段:总线仲裁结构决定将将下一个周期的总线使用权授予某个使用者
突发(猝发)传送方式
能够进行连续成组数据的传送,其寻址阶段发送的是连续传送单元的首地址,在传输阶段能够传送多个连续单元的数据,每个时钟周期可以传送一个字长的信息,但是不释放总线,直到一组数据传送完成,再释放总线
同步定时方式
采用一个统一的时钟信号来协调数据发送方和接受方的之间的数据传送关系。比如发送发利用系统时钟信号前沿发送数据,接收方利用系统时钟后沿接收数据。在一个时钟周期内可以完成一次数据传送。
主从设备之间强制同步,无法进行有效性校验,可靠性差
异步定时方式
没有统一时钟,双方采用“握手”信号来实现定时控制。主设备提出交换信息的请求,从设备向主设备发出“回答”信号(和计算机网络里面的主机通信有点类似)
根据请求和回答信号的撤销是否互锁,异步定时方式可分为:
不互锁
主设备不等待从设备的回答信号就撤销请求信号,从设备发出回答信号后一段时间后就撤销回答信号
半互锁
主设备等待从设备的回答信号后才能撤销请求信号,从设备发出回答信号后一段时间后就撤销回答信号
全互锁
主设备等待从设备的回答信号后才能撤销请求信号,从设备发出回答信号必须获知主设备收到回答信号后再撤销信号
输入/输出系统
I/O接口(I/O控制器)
IO接口是主机和外部设备之间的交接界面,通过接口可以实现主机和外设之间的信息交换
IO接口的功能
进行地址译码和设备选择
实现主机和外设之间的通信联络控制
实现数据缓冲
信号格式的转换
传送控制命令和状态信息
IO接口的基本结构
数据缓冲寄存器(连接数据线)
状态/控制寄存器(连接数据线):状态信息和控制信息可以共用一个寄存器,是因为同一时刻要么是CPU在发送相关指令到寄存器,要么是外设执行相关操作返回控制信息
地址译码和I/O控制逻辑(连接控制线和地址线)
外设界面控制逻辑
接口类型
串行接口和并行接口
程序查询接口、中断接口和DMA接口
可编程接口和不可编程接口
IO端口及其编址
IO端口指的是IO接口中存在的寄存器
统一编址:又称为存储器映射方式,是指把IO端口当做存储器的单元进行地址分配,这种方式CPU不需要设置专门的IO指令,用统一的访存指令就可以访问IO端口
独立编址:又称为IO映射方式,占用独立的地址空间,需要设置专门的IO指令来访问端口
I/O方式
程序查询方式
信息交换的控制完全由CPU执行程序实现,程序查询接口中设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)。主机进行IO操作时,先发出询问信号,读取设备状态并且根据设备状态决定下一步操作究竟是进行数据传送还是等待
有CPU踏步现象,即CPU花费大量时间用于查询状态和等待
程序中断方式
程序中断的思想:CPU在程序中安排好某个时机启动某台外设,然后CPU继续执行当前程序,不需要向程序查询那样不断查询和等待。一旦外设准备就绪,就向CPU发送中断请求,请求CPU为自己服务。咋中断响应条件下,CPU会暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序完成一次主机和外设之间的数据传送,传送完成后,CPU返回原来的程序
工作流程
中断请求
中断源发送中断请求,中断请求分为可屏蔽中断(INTR线发送)和不可屏蔽中断(NMI)
中断响应判优
是指CPU响应中断请求的先后顺序。通过硬件排队器实现。
不可屏蔽中断(如掉电或时钟中断)>内部异常(程序执行指令发生异常)>可屏蔽中断
硬件故障>软件故障
高速设备>低速设备,输入设备>输出设备,实时设备>普通设备
中断判优分为中断响应判优和中断处理判优,前者由硬件排队器实现,不易改造,后者可通过中断屏蔽技术进行调整
CPU响应中断的条件
CPU响应中断的过程
关中断
保存断点
引出中断服务程序
中断向量
即中断服务程序的入口地址
中断识别分为向量中断和非向量中断,非向量中断即软件查询法
每个中断都有一个类型号,每个中断类型号都对应一个中断服务程序,每个中断服务程序都有一个入口地址,即中断向量
而中断向量的地址由硬件排队器生成,两级地址比较灵活
中断处理过程
中断隐指令(其实是硬件)执行:
关中断
保存断点,即PC值
引出中断服务程序
中断服务程序执行:
保存现场(即各种寄存器中的值)和屏蔽字(指明此次中断服务程序中那些中断请求应该被屏蔽
开中断(运行多重中断)
执行中断服务程序
关中断
恢复现场和屏蔽字
开中断,中断返回
多重中断和中断屏蔽技术
CPU在执行中断服务程序中,出现了优先级更高的中断请求或者异常情况需要转去执行新的中断服务程序
中断处理优先级是指多重中断的实际处理次序,可以利用中断屏蔽技术动态调整
现代计算机一般使用中断屏蔽技术,每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有中断触发器组合在一起就形成了屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字
DMA方式
DMA方式是一种完全由硬件进行成组信息传送的控制方式,在数据准备阶段,CPU与外设并行工作。DMA方式在外设与内存之间开辟一条“直接数据通路”,信息传送不再经过CPU,降低了CPU在传送数据时的开销,因此称为直接存储器存取方式。这种方式适合磁盘、显卡、声卡、网卡等高速设备之间大批量的数据传送,硬件开销比较大。在DMA方式中,中断的作用仅限于故障和正常传输结束时的处理
特点
它使主存和CPU的固定联系脱钩,主存即可以被CPU访问,也可以被外设访问
在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路实现
主存要开辟专用缓冲区,及时供给和接收外设的数据
DMA传送速度快,CPU与外设并行工作,提高了系统效率
DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行处理
组成
主存地址寄存器
传送长度计数器:记录传送数据的长度
数据缓冲寄存器:暂存要每次要传送的数据
DMA请求触发器:标志是否准备好传送数据
“控制/状态”逻辑
中断机构
DMA传送方式(如何与CPU协调对主存的访问)
停止CPU访存
当DMA发送数据时,暂停CPU访存
周期挪用(或周期窃取)
当CPU与IO设备访存冲突时,优先让IO设备访问主存,因为IO设备的数据容易丢失,并且运行IO设备占用多个存取周期进行数据传送
DMA和CPU交替访存
适用于CPU工作周期比主存存取周期长。让CPU和IO设备分时共享主存
DMA传送过程
预处理
CPU完成一些准备工作。然后返回执行原来的程序,直到IO设备准备好数据,向DMA控制器发送DMA请求,DMA向CPU发送总线请求,有时统称DMA请求
数据传送
完全由DMA(硬件)实现
后处理
DMA控制器向CPU发生中断请求,进行数据校验和决定是否继续进行其他数据传送
DMA方式和中断方式的区别
中断方式是程序切换,需要保护和恢复现场,而DMA方式不中断现行程序,无需保护和恢复现场,处理预处理和后处理,其他时候均不占用CPU资源
对中断请求的响应只能发生在指令的中断周期内(除了内部异常),而对DMA请求的响应可以发生在任意一个机器周期(时钟周期)结束时(取指、间址、执行都可以)
中断传输过程需要CPU干预,DMA传输过程不需要CPU不需要CPU干预
DMA请求优先级高于中断请求
中断方式具有处理异常事件的能力,DMA仅限于大批数据传送
中断方式靠程序运行,DMA方式靠硬件实现
计算机组成原理
计算机系统概述
计算机系统的组成
硬件系统和软件系统,硬件是指有形的物理设备,是计算机系统中实际物理装置的总称。软件是指在硬件上运行的程序和相关的数据及文档
计算机硬件
冯诺依曼机基本思想
采用存储程序的概念,即将事先编制好的程序和原始数据送入主存后才能执行,一旦程序开始被启动执行,无需操作人员干扰,计算机会自动逐条指向指令,直至程序执行结束
计算机硬件由运算器、控制器、存储其、输入设备和输出设备组成
指令和数据以同等地位存储在主存储器中
指令和数据均用二进制代码表示,指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的存储地址
计算机功能部件
输入设备
输出设备
存储器
分为主存和辅存,CPU能够直接访问的存储器是主存
主存的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式
主存包括MDR、MAR、存储体和时序控制逻辑,不过MDR和MAR通常集成在外存上
存储体由许多存储单元组成,每个存储单元包括多个存储元,一个存储元可以存储一个0或1.所有一个存储单元能够存储一系列二进制代码,这串代码称为一个存储字,代码长度称为存储字长。存储字长一般是一个字节(8bit)或字节的整数倍
MDR与存储字长相等,MAR与存储单元数量存在对应关系
控制器
由程序计数器PC、指令寄存器IR和控制单元CU组成
PC保存下一条要执行的指令的地址,具有自动加一的功能
IR保存目前正在执行的指令,OP(IR)送CU,AD(IR)送MAR
运算器
用于算数运算和逻辑运算,算数运算包括加减乘除;逻辑运算包括与或非等
核心是算术逻辑单元ALU,还包括若干通用寄存器,用于保存操作数和中间结果,比如累加器ACC、乘商寄存器MQ、操作数寄存器X、变址寄存器IX和基址寄存器BR,前三个是必备的
还有一个程序状态寄存器PSW,又叫标志位寄存器,用于保存ALU运算得到的一系列标志信息或处理机的状态信息
中央处理器CPU
一般将控制器与运算器集成到一个芯片,称为中央处理器。CPU和主存储器构成主机,而主机外的其他设备,包括外存、输入设备和输出设备称为外设
计算机软件
系统软件和应用软件
系統软件是计算机出厂自带的软件
应用软件是用户根据自己需要安装的软件
三个级别的语言
高级语言:用户编程语言(可以编译,也可以直接翻译)
汇编语言:用英文单词代替二进制的指令代码
机器语言:机器可读
软件和硬件的逻辑功能等价性
即对于用户来说,一个功能即可以通过硬件直接实现,也可以通过软件扩充实现,没有差别
计算机系统的存储结构
五层
计算机的性能指标
主要性能指标
字长:机器字长、指令字长和存储字长
数据通路带宽:数据总线一次并行传送信息的位数
主存容量
运算速度
吞吐量和响应时间
吞吐量:系统在单位时间内处理请求的数量
响应时间:指从用户向计算机发送一个请求开始,到系统对此请求做出响应并获得所需结果的等待时间
主频和CPU时钟周期
主频是计算机内部的主时钟脉冲节拍(类似与我们按照时间做事情一样,计算机也需要一个时间指示),单位为Hz
CPU时钟周期即主频的倒数,即一个节拍的时间
CPI
即每条指令指向所需CPU时钟周期(节拍数),一般取平均值
CPU执行时间
是指运行一个程序所需时间,CPU执行时间=CPU时钟周期数/主频
MIPS
即每秒指向的百万条指令
还有MFLOPS等
基准程序
用于测试计算机性能的一组程序
数据的表示与运算(运算器和控制器)
数制与编码
进位计数制及其相互转换
进位计数制
按照每位的权值,将一个非十进制转换为十进制
相互转换
二进制转八进制和十六进制
转八进制:以小数点为界,整数部分从右往左三位一组,不够就在前面加0;小数部分从左往右三位一组,不够在后面加0。然后再讲划分的三位转为八进制即可
转十六进制:以小数点为界,整数部分从右往左四位一组,不够就在前面加0;小数部分从左往右四位一组,不够在后面加0。然后再讲划分的四位转为十六进制即可
任意进制转十进制
只需要进行将每位树乘以对应的权值再累加即可
十进制转任意进制
基数乘除法
整数部分:除基取余法
小数部分:乘基取整法
真值和机器数
定点数的编码表示(定点数:小数点固定)
定点小数和顶点整数的表示在于小数点位置不同
原码、补码、反码和移码
原码
机器数最高位表示符号,其余各位表示数的绝对值。0表示正,1表示负
字长为n+1,原码小数表示范围:-(1-2^(-n)),1-2^(-n)
字长为n+1,原码整数:1-2^n,2^n-1
0的表示不唯一,加减运算更复杂
反码
正数反码是本身,负数反码按位取反
补码
正数补码是本身,负数补码是其反码再加1
负数的原码与补码之间的快速转换:从右往左找到第一个1,将这个1左边所有数值为按位取反(不包括这个1),符号位不动
字长为n+1,补码小数表示范围:-1,1-2^(-n),多了一个最小数
字长为n+1,补码整数表示范围:-2^n,2^n-1,多了一个最小整数
移码
只能表示浮点数的阶码,只能表示整数。移码就是在真值的基础上加一个常数(偏置值),通常是2^n。
整数的表示
无符号整数:用于进行地址计算或者表示指针
带符号整数:反码表示
运算方法和运算电路
基本运算部件
一位全加器
全加器是最基本的加法单元,有加数Ai、Bi和低位传来的进位Ci-1三个输入,有本位和Si和向高位的进位Ci两个输出
串行进位加法器
将多个加法器直接串联起来
在串行进位加法器中,低位产生进位的时间影响高位运算的时间。因此串行进位加法器的最长运算时间主要由进位信号的传递时间决定,位数越多延迟越大,加法器本身计算所需时间可以忽略,所以提高进位产生速度和提高传递速度是关键
并行进位加法器
每位上的操作数除了在本位进行计算之外,还需要传递给高位的加法器
速度快,但是随着位数的增加,高位加法器的构造会越来越复杂。因此位数较多时不能直接采用并行进位加法器
实际做法是将并行进位加法器分成多组,组内并行进位加法,组间串行进位加法
带标志加法器
方便有符号整数的加减运算,除了进行带符号整数的加减,还要能产生相关的标志信息:OF(溢出位),SF(符号位),ZF(零标志),CF(进位/借位位)
算术逻辑单位ALU
功能较强的组合逻辑电路,进行多种算术运算和逻辑运算。核心是带标志加法器
定点数的移位运算
定点数的加法运算
定点数的乘除运算
定点数的乘法运算
原码一位乘法
原码一位乘法的特点是符号位好数值位分开求,乘积符号位用两乘数符号做“异或”运算,乘积数值部分则是两个数绝对值相乘之积
数值部分的计算:从乘数Y最低位开始,若为1,则部分积加X的绝对值,若为0,则加0;然后右移一位(避免让下次加的数左移),直到Y的数值部分都被扫描过。
补码一位乘法(Booth算法)
部分积和被乘数均采用两位符号位,乘数采用一位符号位;乘数在最低位另设一位低位,初始为0;
判断乘数的最低两位情况,对于00和11,部分积不变;01时部分积+[X]补;10时部分积+[-X]补;之后做一次右移;
重复步骤2,直到乘数右移至只剩两位原有的数(应为一个符号位和一个最高数值位),共重复n次;
进行最后一次判断(共做n+1次),处理部分积但不做移位,将得到的部分积与乘数储存的低位部分拼接,得到最终结果。
定点数的除法
原码除法:常用不恢复余数法,不用恢复余数法
原码不恢复余数法又叫加减交替法。特点是商符和商值是分开计算的,减法操作用补码实现。
用原码加减交替法:求| X | / | Y |的解题步骤:
先将余数减去除数得新余数Ri
若Ri>0,商“1”,做2Ri-y* 运算
若Ri<0,商“0”, 做2Ri+y*运算(2(Ri+y*)-y*=2Ri+y*)
再将上述过程重复n(除数位数)次,共上n位商。若小数点后有4位,则商5次
最后所得的商和余数即为| X | / | Y | 的商及余数
补码除法(加减交替法)
若X,Y同号,做X-Y得余数R,商0为商的符号位,再做2R+Y得Ri
若X,Y异号,做X+Y得余数R,商1为商的符号位,再做2R-Y得Ri
若余数Ri与Y同号,商1,后做2Ri-Y
若余数Ri与Y异号,商0,后做2Ri+Y
重复第3、4步n-1次
第n次上商后,不再移位及+Y,-Y操作
商末尾恒加1
C语言中的整数类型和强制类型转换
强制类型转换不改变数据的位值,即存储的二进制代码不变,只改变对二进制代码的解释方式
当大字长变量向小字长变量强制类型转换时,系统会把多余的高位部分直接截断,低位直接赋值
当小字长变量向大字长变量强制类型转换时,不仅要使位值相等,还要对高位部分进行扩展。如果原数字是无符号整数,则进行零填充,扩充后的高位部分用0填充。否则进行符号填充,扩充后的高位用原数字符号位进行填充
数据的存储与排列
数据的“大端方式”和“小端方式”
通常用最低有效字节LSB和最高有效字节MSB来分别表示数据的低位和高位
大端方式,从高字节到低字节;小端方式,从低字节到高字节
数据按“边界对齐”方式存储
“边界对齐”即数据无论是字节、半字,都可以一次访存得出,不能被分散存储,只需要一个地址,便于寻址,不满足存储需要的空间空闲。缺点:浪费空间
不按“边界对齐”即数据可以分散存储在不同的字节里面,节约存储空间,但是寻址比较麻烦
浮点数的表示与运算
浮点数的表示格式
浮点数的规格化
左规
右规
IEEE754标准
规定了两种浮点数格式:Float和Double,符号、阶码和尾数分别占1、8、23和1、11、52,基数隐含为2,且尾数采用隐藏位机制的原码,阶码采用移码
短浮点数阶码取值为1~254(0不用于表示阶码,有特殊用途),长浮点数阶码取值为1~2046(0不用于表示阶码,有特殊用途)
全0阶码和全0尾数,表示0
全1阶码和全0尾数表示无穷
全0阶码,非全0尾数表示非规格化浮点数
全1阶码,尾数不全为0表示非数值
浮点数的加减运算
对阶:小阶对大阶
尾数求和:按照定点数加减运算计算,如果发生溢出,多保留两位
规格化:将尾数求和的结果进行规格化,保留低位移出的两位
舍入:按照多保留的两位的情况进行取舍
0舍1入法
恒置1法
截断法
判断溢出
指数上溢出,即超过127或1023,向上级报告异常
指数下溢,即小于-126和-1022,当做机器0
浮点类型转换
即将数据一种格式换成另一种表达格式
char→int→long→double以及float→double都没有精度损失
其他数据之间的转换要考虑尾数精度够不够,会不会损失精度
float和double转int,会截断小数点后的数据
存储系统
存储器的分类
作用(层次)分:主存储器、辅助存储器和高速缓冲存储器
存储介质:磁表面存储器、磁芯存储器、半导体存储器和光存储器
存取方式:随机存取存储器、只读存储器、顺序存取存储器和直接存取存储器
信息的可保存性:非易失性存储器和易失性存储器
信息读取方式:破坏性读出和非破坏性读出
层次化存储器的基本结构
CPU
寄存器
Cache
主存
磁盘
磁带和光盘
半导体随机存取存储器
SRAM
静态随机存取存储器,由双稳态触发器构成,非破坏性读出,不需要刷新,集成度低,需要一直充电,能耗大,价格高,一般用于高速缓冲存储器
DRAM
动态随机存取存储器,由栅级电容构成,破坏性读出,需要刷新,集成度高,任意集成,价格低,一般用于主存
由于DRAM电容上的电荷只能维持1~2ms,所以为了防止数据丢失,需要按时给存储器进行刷新,即重新写入数据
集中刷新:在一个刷新周期内,利用一个固定时间将存储器所有存储单元进行刷新,在刷新期间不能进行存储器读写操作,称这段时间为“死时间”,又称为访存死区
分散刷新:将对每行的刷新分散在到各个工作周期内,即每次对一行进行读写后都需要对这一行所有数据进行刷新,避免了死区,但是降低了整机的工作效率
异步刷新:将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,然后利用逻辑电路每隔t就产生一次一行的刷新请求,解决了死区问题,提高了访问整机的工作效率
注意:①刷新对CPU是透明的;②DRAM的刷新单位是行,由芯片内部自行生成行地址;③刷新操作不需要选片,即同时对所有存储芯片进行刷新
存储芯片的内部构造
存储体(存储矩阵)
地址译码器
I/O控制电路
片选信号
读/写控制信号
Flash存储器(U盘和SD卡)
即可长期保存信息又可以在线快速擦除和重写
主存储器(DRAM+ROM)
基本构成
存储体
MDR和MAR
地址寄存器和地址译码器
读写控制电路
控制总线、地址总线和数据总线
一般采用地址线复用技术,行地址和列地址分两次输入,减少一般的地址引脚数
多模块存储器
多模块存储器是一种空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率。常用的有单体多字存储器和多体低位交叉存储器
单体多字存储器
只有一个存储器,每个存储单元存储m个字,总线带宽也为m个字,一次并行读出m个字,地址必须顺序排列并且处于同一单元
多体并行存储器
多体并行存储器由多个存储模块构成,每个模块都有相同的存储容量和存取速度,每个模块都有自己的读写控制电路、地址寄存器和数据寄存器,他们即可以并行工作,也可以交叉工作
高位交叉存储器(先指明体号,然后在这个存储体内读取)
高位表示体号,低位表示体内地址。简单扩容
低位交叉存储器(先指明体内地址,然后再不同的存储体内读取数据)
低位表示体号,高位表示体内地址。可以采用流水线的方式连续读取数据,提高数据读取的速度
m>=T/r(m为模块数,T为存取周期,r为总线传输周期)
主存储器与CPU的连接
连接原理
主存储器通过地址总线、数据总线和数据总线与CPU连接
数据总线的位数与工作频率的乘积正比与数据传输率
地址总线的位数决定了可寻址空间的大小
控制总线指出了本次总线周期的类型(读或写)和本次输入或输出操作完成的时刻
片选线决定了要访问的存储体
单个存储芯片的容量不可能很大,所有需要通过存储芯片扩展技术将多个芯片集成在一个内存条上,然后由多个内存条以及主板上的ROM芯片组成主存空间
主存容量的扩展
位扩展法(芯片并联)
扩展存储器存储字长,使得其等于数据线位数
将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出
仅采用位扩展时,片选线要连接所有芯片,即同时有效或无效
字扩展法(芯片串联)
扩展存储器存储单元个数,存储单元本事的位数不变
将存储芯片的地址线、数据线、读写控制线相应并联,而片选端低电平(CS上面加一杠)用来区分芯片的地址范围
一般高位中的几位作为片选信号,其他为作为地址信号
字位同时扩展
实际的存储器采用字位同时扩展。既增加了字长,有增加了存储器容量
存储芯片的地址分配的片选
片选法:即直接用一位特点的二进制位来表示一个存储芯片
译码片选法:即采用一组编码表示存储芯片,比如000表示选一号芯片,001选二号芯片,以此类推(常用方法)
存储器与CPU的连接
合理选择芯片:ROM存放系统程序、汉字库和各类常数,RAM则为用户编程而设置
地址线的连接:CPU地址线往往多余存储芯片地址线数,多余的地址线用于字扩展,即用于当做片选信号线
数据线的连接:相等时直接连接,不相等时进行存储芯片位扩展
读/写命令线的连接:有的读写命令线是一根,通常高电平为读,低电平为写。有的是两根,具体情况具体分析
片选线的连接
两根读写控制信号以及片选信号都是低电平有效,最后取反
外部存储器
磁盘存储器
磁盘设备的组成
磁盘存储器的组成:磁盘驱动器(磁头组件和盘片组件),磁盘控制器(借口,比如IDE,SATA)和盘片
存储区域:一块硬盘含有若干记录面,每个记录面划分若干磁道,而每条磁道分为若干扇区,扇区(也称块)是磁盘读写的最小单位,即磁盘按块存取
磁头数
柱面数(每个盘面的磁道数)
扇区数
磁记录原理
磁头和磁性记录介质相对运动时,通过电磁转换完成读写操作
编码方案:按照某种规律,把一串二进制信息转换成存储介质磁层中的一个磁化翻转状态的序列
磁盘性能指标
记录密度:盘片单位面积所记录的二进制信息量,通常用道密度、位密度和面密度,道密度是指半径方向单位长度的磁道数,位密度是磁道单位长度所记录的二进制信息量,面密度是道密度*位密度
磁盘容量:非格式化容量和格式化容量,非格式化是磁记录面所能利用的磁化单元总数,通过道密度和位密度计算;格式化容量值对磁盘进行了盘区划分,并且将一些区域作为替补区域,待磁盘扇区受损时利用
平均存取时间:平均寻道时间+平均旋转延迟时间+数据传输时间
数据传输率:磁盘存储器单位时间向主机发送的数据字节数,等于转速*磁道容量
磁盘地址(一个计算机有多个磁盘,首先明确访问哪个磁盘)
磁盘寻址使用三个信息:驱动器号(一个驱动器连接一个磁盘),柱面号(磁道号),磁头号(盘面号),扇区号。一般最上面和最下面的盘面不使用。
磁盘阵列
RAID(独立冗余磁盘阵列)是指多个独立的物理盘组成一个独立的逻辑盘,数据在多个物理磁盘上分割交叉存储、并行访问,具有很好的存储性能、可靠性和安全性。无论哪种分级RAID,都可以随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏,提升了系统的可靠性
RAID0:无冗余无校验的磁盘阵列,多个连续的数据块交替的存放在不同物理磁盘的扇区中,几个磁盘交叉并行读写,存取速度加快,但是没有容错能力
RAID1:镜像磁盘阵列,对两个磁盘同时读写,互为备份,若一个磁盘出现故障,可以从另一个磁盘读出数据。容量减小一半,但是提高了可靠性
RAID2:采用纠错的海明码的磁盘阵列,数据包括数据位和海明码,计算机网络
固态硬盘
固态硬盘(SSD)是一种基于闪存技术的存储器。一个SSD有一个或多个闪存芯片和一个闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层相当于磁盘控制器。
一个闪存由多个块组成,每块又由多个页组成,数据以页为单位进行读写,但是以块为单位进行擦除。只有这一页数据的块整个被擦除后才能写这一页
SSD随机写很慢有两个原因:①块擦除速度很慢,比访问页高一个数量级;②当要进行修改某个页时,需要把整个块的数据迁移到另一个擦除过的块上才能进行修改
磨损均衡策略
动态磨损均衡
系统自动选择一块当前擦除次数较少的块进行擦除,然后写入
静态磨损均衡
系统将擦除次数多的老块用于存储一些以读为主的数据
高速缓冲存储器
程序访问的局部性原理
时间局部性
现在访问的数据在不久的将来很有可能再次被访问
空间局部性
与现在访问的数据在存储空间上相邻的数据在不久的将来很有可能被访问
Cache的基本工作原理
Cache和主存都被划分成相等的块,Cache块又称Cache行,块的长度称为块长或Cache行长
CPU与Cache的数据交换以字节为单位,而Cache与主存以块为单位交换数据
Cache命中与命中率:CPU欲访问的信息已在Cache中
Cache-主存平均访问时间:即Cache命中的访问时间乘以命中率+Cache未命中的访问时间乘以未命中率(具体表达式得看CPU访存机制)
Cache和主存的映射方式(包括如何查找Cache块)
Cache行中的信息是主存中某个块的副本,地址映射是指把主存地址空间映射到Cache地址空间,即把主存中的信息按照某种规则装入Cache
主要思想:给Cache中每一个块加一个标记,用以说明它是主存中哪一个块的副本。该标记的内容相当于主存中块的编号。同时为了说明Cache块是否有效,还需要增设一个标志未
直接映射(不需要替换算法)
主存中一个块只能装入Cache中的唯一位置。若已有内容,则产生块冲突,原来的块无条件得被替换出去。冲突概率最高,空间利用率最低
映射关系:Cache行号=主存块号 mod Cache总行数
CPU发出的主存地址信息:标记项+Cache行号+块内地址
Cache结构:标记+块内数据
全相联映射
主存中每一个块可以被装入任意一个位置,Cache每行的标记用于指名该块来自哪个主存块。冲突概率低,空间利用率高,但是标记比较费时,需要采用价格昂贵的按内容寻址(就是比较关键字)的相联存储器进行地址映射
CPU发出的主存地址:标记项+块内地址
组相联映射
将Cache分成Q个大小相等的组,每个主存块只能被装入固定的组,但是在组内可以装入任意的Cache块内。假设每组有r个Cache行,则称为r路组相联
映射关系:Cache组号=主存块号 mod Cache总组数
CPU发出的主存地址信息:标记项+Cache组号+块内地址
注意:标记项=有效位+脏位+替换控制位+标记位
Cache中主存块的替换算法
在采用全相联和组相联映射时,可能会出现Cache装满的情况,这时候就要选择替换掉哪一个Cache块
随机算法
随机选择替换的Cache行,没有考虑局部性原理
先进先出算法
最先被装入Cache的块优先被替换,没有考虑局部性原理
近期最少使用算法(LRU)
依据程序的局部性原理,选择最近长时间未被使用的Cache行进行替换,平均命中率比FIFO高,是堆栈类算法
为每个Cache行设置一个计数器,用计数值来记录主存块的使用情况(记录多久未被访问)①Cache命中时,该行置计数器0,比其低的计数器加1,其余不变,防止某些数值过大;②未命中且还有空闲行时,新装入的行计数器置0,其余全加1;③未命中且无空闲行时,根据计数器的值,选择最大的行进行替换,并把计数器置0,其余全加1
当集中访问的存储区大于Cache空间时,命中率会变得很低,刚刚被换出的行又被再次被访问,产生“抖动”
最不经常使用算法
将一段时间内访问次数最少的存储行换出。每行设置一个计数器,新建行从0开始计数,每访问一次,被访问的行计数器加1,需要替换时选择计数器置最小的行进行换出。当出现多行数字都最小时可以按照行号次序或FIFO原则选择替换行
没有很好的遵循局部性原理
Cache写策略(解决Cache和主存数据的同步问题)
写命中
全写法(写直通法):主存和cache同时进行修改
回写法(写回法):先写cache,当修改行要被替换时再写回主存
写未命中
写分配法(为主存块分配cache空间):加载主存中的块到cache中,然后对cache块进行写,使用回写法
非写分配法:不加载主存块到cache,直接向主存块写,使用全写法(全写法才写主存)
虚拟存储器(在操作系统的里面总结,更详细)
虚拟存储器的基本概念
虚拟存储器将主存和辅存的地址空间同一编址,形成一个庞大的存储空间。在这个空间内,用户可以自由编程,而无需考虑实际的主存容量和程序在主存中的实际存放位置
用户编程允许涉及的地址称为虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间或程序空间。实际主存单元地址称为实地址或物理地址,实地址对应的是主存地址空间或者实地址空间
CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元是否以装入了内存。若已经在内存中,则通过地址转换,CPU可以直接访问主存指示的实际单元。若不在主存中,则把包含这个字的一个页或者一个段调入主存供CPU访问。若主存已满,则需要采用替换算法置换主存中的页。并且采用回写法,提高效率
在虚拟存储器中,CPU未命中主存而访问辅助的代价很大,所以提高命中率是关键,因此虚拟存储器采用全相联映射方式,每个虚页或虚段可以被装入任意的主存空闲页
指令系统
基本概念
指令(机器指令):计算机执行某种操作的命令
指令系统(指令集):一台计算机所有指令的集合
指令集体系结构:包括指令格式,数据类型和格式,操作数的存放方式,程序可访问的寄存器个数、位数和编号,存储空间的大小和编址方式,寻址方式,指令执行过程的控制方式
指令格式
指令=操作码+地址码,操作码是指明操作类型,地址码指明被操作的一个或多个信息(数据或指令)的存储地址
指令长度是指令包括的二进制位数,取决于操作码长度、操作数地址码长度和个数
指令长度和机器字长没有固定关系,看操作数个数
分定长指令字结构和变长指令字结构
主存一般按字节编址,指令字长多为字节整数陪
指令按照地址码个数分类
零地址指令
只有操作码,没有显式地址;这种指令有两种可能
①不需要操作数的地址,入空操作指令、停机指令、关中断指令
②零地址的运算类指令只用于堆栈计算机。通常参与运算的两个操作数隐含的从栈顶和次栈顶弹出
一地址指令
通常有两种形态:
①只有目的操作数的单操作数地址,如自增、自减等
②隐含约定目的地址的双操作数指令,如另一个操作数可能来自ACC,计算完成后存回ACC
二地址指令
OP |A1|A2
含义:(A1)OP(A2)→A2
三地址指令
OP |A1|A2|A3
含义:(A1)OP(A2)→A3
四地址指令
OP |A1|A2|A3|A4
含义:(A1)OP(A2)→A3,(PC)→A4,A4存放下一条指令的地址
扩展操作码指令格式
原则
不允许任何一个操作码是另一个操作码的前缀
各指令操作码不允许重复
对使用频率较高的指令分配较短的操作码,对使用频率较低的指令分配较长的操作码,从而减少整体移码和分析的时间
看一下书上的例图
指令的操作类型
数据传送:寄存器之间的数据传送MOV,从内存单元读取数据到CPU寄存器(LOAD),从CPU寄存器写数据到内存单元(STORE)
算术和逻辑运算:ADD,SUB,MUL,DIV,INC,DEC,AND,OR,NOT,XOR(异或)
移位运算:算术移位,逻辑移和循环移位
转移指令:无条件转移指令(JMP),条件转移(BRANCH),调用(CALL),返回(RET)、陷阱(TRAP)等
输入输出操作
寻址方式
寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址
指令寻址
顺序寻址:(PC)+1→PC
跳跃寻址:通过转移类指令实现。所谓跳跃是指下条指令的地址不由PC给出,而是由本条指令给出下条指令的地址
数据寻址:是指如何在指令中表示一个操作数的地址,如何用这种表示得到操作数或计算操作数的地址
数据寻址方式较多,为区别各种方式,通常在指令字段中设一个字段,用来指明属于哪一种寻址方式:操作码+寻址特征+形式地址
隐含寻址:不明显的给出操作数的地址,而在指令中隐含操作数的地址,如单地址指令中的另一个操作数来着ACC,不显示的指明
立即(立即数)寻址:这种指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数,用补码表示
直接寻址:即指令的地址码中的地址即是操作数的实际的地址,即EA=A
间接寻址:即指令的地址码中的地址并不是操作数的地址,而是操作数地址的地址,即EA=(A)。间接寻址可以是一次间接寻址,也可以是多次间接寻址
寄存器直接寻址:指令的地址码给的是寄存器的编号,即EA=Ri
寄存器间接寻址:指令的地址码给的是寄存器编号的地址,即EA=(Ri)
相对寻址
相对寻址是把PC的内容加上指令格式中的形式地址而形成操作数的有效地址,即EA=A+(PC),其中A是相对于当前PC值的偏移量,用补码表示
注意:这里的PC已经在原来的基础上加1了
便于程序浮动,广泛应用与转移类指令
基址寻址(指令内容作为偏移量)
基址寻址是指将CPU中的基址寄存器加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中基址寄存器可以选用专用的寄存器,也可以选用通用寄存器
基址寄存器面向操作系统,其内容只能由操作系统或管理程序员设置,对普通程序员和用户是透明的。在采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,单其内容仍然由操作系统决定
扩大寻址范围,有利于多道程序的设计,并用于编制浮动程序
变址寻址(寄存器内容作为偏移量)
变址寻址是指有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容之和,即EA=(IX)+A
变址寄存器面向用户,其内容可以由用户改变(作为偏移量),形式地址不变(作为基地址)
在处理数组问题,可以将A设定为数组首地址,不断改变变址寄存器IX中的内容,便可以很容易形成数组中任意一个数据的地址,特别适合编制循环程序
堆栈地址
堆栈是存储器(或专用寄存器组)中一块特定的、按后进先出(LIFO)原则管理的存储区,该存储区的读/写单元的地址由一个特殊的寄存器给出,该寄存器称堆栈指针。堆栈可分为硬堆栈和堆栈
寄存器堆栈称为硬堆栈,从主存中划分一块区域做堆栈称为软堆栈(常用)
数据的对齐和大/小端
CISC和RISC
CISC:复杂指令集计算机
系统庞大复杂
指令格式多,寻址方式多
可以访存的指令不受限制
各种指令使用频率差不多
各种指令执行时间相差很大
采用微程序控制,有些指令非常复杂,以至于不能用硬布线实现
难以优化编译
RISC:精简指令集计算机
选取使用频率最高的简单指令,复杂指令由简单指令组合
指令长度固定,指令格式种类简单,寻址方式种类少
只有LOAD和STORE指令访存,其他指令的操作都在寄存器之间进行
寄存器数量非常多
RISC采用指令流水线方式,效率高
以硬布线控制为主
可以优化编译
程序的机器级语言表示
X86汇编语言
x86有8个32位的通用寄存器
AX EAX 累加器
BX EBX 基地址寄存器
CX ECX 计数寄存器
DX EDX 数据寄存器
ESI 变址寄存器(来源)
EDI 变址寄存器(目的)
EBP 堆栈基指针(有专用用途)
ESP 堆栈顶指针(有专用用途)
加E的是32bit,不加E的是16bit,同时这16bit的寄存器还可以分成两个8bit的左右寄存器
汇编指令格式
主要有两种:AT&T格式和Intel格式
在AT&T中第一个为源操作数,第二个为目的操作数,方向从左到右,合乎自然;而Intel中第一个为目的操作数,第二个为源操作数,方向从右到左
在AT&T中,寄存器需要加前缀%,立即数需要加前缀$;在Intel格式中,寄存器和立即数都不需要加前缀
在内存寻址中,AT&T所有(),Intel使用[]
在处理复杂寻址方式时,例如AT&T格式的内存操作数“disp(base,index,scale)”分别表示偏移量,基址寄存器,变址寄存器和比例因子,如8(%edx,%eax,2)表示操作数M[R[edx]+2*[eax]+8],而Intel格式表示操作数为[edx+eax*2+8]
指定数据长度,AT&T用的是b,w,l,Intel用byte ptr,word ptr,dword ptr
常用指令(在X86中,任何一个指令中的操作数不能都来自主存)
汇编指令通常可以分为数据传送指令、逻辑运算指令和控制流指令
Intel格式表示寄存器、内存和常数的格式为:
<reg>:任意寄存器,<reg8>:8位寄存器,<reg16>:16位寄存器,<reg32>:3位寄存器
<mem>:主存地址
<con>:某位常数,<con8>:8位常数,<con16>:16位常数,<con32>:32位常数
部分重要的数据传送指令
mov 操作数1,操作数2:将第二个操作数复制到第一个操作数,不能从内存复制到内存
add/sub 操作数1,操作数2:两操作数相加/相减的结果保存到第一个操作数中,操作数1-操作数2
inc/dec
imul:带符号整数乘法①两操作数,相乘结果放到第一个操作数的寄存器;②三操作数,第二个和第三个相乘的结果放到第一个操作数的寄存器
idiv指令:带符号整数除法,他只有一个操作数,即除数,而被除数则为edx:eax,操作结果的商放到eax,余数放到edx
部分逻辑运算指令
shl/shr:逻辑左移和逻辑右移
控制流指令
jmp指令:无条件转移
jcondition指令:条件转移,和cmp(比较)连用
je:相等时跳转
jne:不相等时跳转
jz:等于0跳转
jg:更大的时候跳转
jge:更大或者相等的时候跳转
jl:更小的时候跳转
jle:更小或者相等的时候跳转
cmp/test:cmp用于比较两个操作数的值,test用于两个操作数逐位相与
call/ret:分别用于实现子程序的调用和返回
过程调用的机器级表示
call/ret指令主要用于过程调用,他们都属于一种无条件转移指令
call指令的作用
①将IP(就是PC值)旧值压栈保存;
②设置IP新值,无条件转移至被调用函数的第一条指令
ret指令的作用
从函数栈顶顶部找到IP旧址,并且将其出栈并恢复IP寄存器
栈帧
用一个栈来保存函数调用过程中的现场和各种参数,每个过程都有自己的栈区,称为栈帧,因此,一个栈由若干栈帧组成。帧指针寄存器EBP指示栈帧的起始位置(栈底),栈指针寄存器ESP指示栈顶,栈由高地址向低地址增长,因此当前栈帧的范围在栈指针EBP和ESP指向的区域之间
栈帧顶部保存本函数定义的参数或变量,同时越先被定义的变量越先被恢复,所以越靠近栈顶;栈帧底部保存提供给被调用函数的参数,同时也满足越先定义的参数越靠近栈顶
函数调用的过程(P是主函数,Q是被调用的函数)
调用者保存寄存器:EAX,ECX,EDX,由P保存和恢复。被调用者保存寄存器:EBX,ESI,EDI,Q需要将其值保存到栈中才能使用,并且在返回P之前恢复他们的值
P将入口参数(实参)放在Q能访问到的地方
P将返回地址存到特定的地方,然后将控制权交给Q(通过call实现)
Q保存P到现场(通用寄存器中的内容),即压栈,并且为自己的非静态局部变量分配空间
执行过程Q
Q恢复P的现场,然后返回结果放到P能访问的地方,并且释放局部变量所占空间
Q取出返回地址,将控制权转交给P(通过ret实现)
结合c语言理解汇编语言
结合汇编语言分析机器语言指令的格式、寻址方式
选择语句的机器级表示
循环语句的机器级表示
看书上的例子理解就好
中央处理器
CPU的功能和基本结构
CPU的功能
中央处理器CPU由匀速运算器和控制器组成。其中控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和指向指令;运算器的功能是对数据进行加工。
指令控制:完成取指令,分析指令和执行指令,即程序的顺序控制
操作控制:一条指令的功能往往由多种操作信号的组合来实现。CPU管理并且产生这些操作信号,并且送往相应的指向部件
时间控制:对各种操作加以时间上的约束
数据加工
中断控制:对运行过程中出现的各种异常情况和特殊请求进行处理
CPU基本结构
运算器:算术逻辑单元ALU,累加寄存器ACC,通用寄存器组(AX,DX,CX,BX,SP),程序状态寄存器PSW,移位器,计数器(控制加减乘除的操作步数)
控制器:程序计数器PC,指令寄存器IR,指令译码器,存储器地址寄存器,存储器数据寄存器,时序系统,微操作信号发生器(根据IR的内容、PSW的内容和时序信号,产生控制整个计算机系统所需的各种操作信号)
CPU内部的寄存器分为用户可见和用户不可见两类,用户可见包括通用寄存器组,程序状态寄存器和程序计数器。用户不可见包括存储器地址寄存器、存储器数据寄存器和指令寄存器
指令执行过程
指令周期的概念:CPU从主存中取出并且执行一条指令的时间称为指令周期,为了应对各种突发事件,一般还需要加上最后的一个中断周期。所以指令周期整体上包括取指、间值、执行和中断四个周期,四个阶段均可能访问主存,但是目的不同,分别是取指令,取有效地址,取操作数和保存程序断点
为了区别指令周期的不同阶段,在CPU内设置了4个标志触发器FE,IND,EX和INT,对应取指、间址、执行和中断
指令周期的数据流
数据流是根据指令要求依次访问寄存器或主存的数据序列
取指周期的数据流
PC→MAR→地址总线→主存
CU发出读命令→控制总线→主存(读写控制电路)
主存→数据总线→MDR→IR
CU发出控制信号→PC内容加1
间址周期的数据流
Ad(IR)(或MDR)→MAR→地址总线→主存
CU发出读命令→控制总线→主存
主存→数据总线→MDR(存放的有效地址字段)(注意:如果是多次间址,则需要再通过数据总线送到MAR)
执行周期的数据流
不同指令的执行周期不一样,因此没有固定的数据流向
中断周期的执行流(结合操作系统)
中断程序的任务是处理中断请求。假设程序断点存入堆栈,并用SP指示栈顶指针,而且进栈操作数先修改指针,后存入数据。
CU控制将SP减1,SP→MAR→地址总线→主存
CU发出写命令→控制总线→主存
PC→MDR→数据总线→主存(程序断点存入主存)
CU(中断服务程序的入口地址)→PC
指令执行方案(安排指令的执行时间)
单指令周期:对使用指令采用相同的执行时间来完成,称为单指令周期
多指令周期:对于不同类型的指令选用不同的执行步骤,称为多指令周期方案。指令间串行执行,对于不同的指令分配不同的时钟周期,硬件设计简单
流水线方案:指令之间可以并行执行。每个时钟周期内启动一条指令,让指令同时运行,一个时钟周期内指向多条指令的不同执行步骤
数据通路的功能和基本结构
数据在功能部件之间的传送路径称为数据通路,包括数据通路上流经的部件。数据通路描述信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器,这些都需要加以控制
数据通路的基本结构
CPU内部单总线方式
所有寄存器的输入与输出都连接到一条公共线路,结构简单,冲突概率大,性能较低
CPU内部多总线方式
所有寄存器的输入与输出都连接到多条公共线路
专用数据通路方式
根据指令执行过程中数据和地址的流向安排连接线路,可以安排之间线路,也可以复用与其他部件的线路
寄存器之间的数据传送
(PC)→Bus→MAR,PCout和MARin有效
主存和CPU之间的数据传送(以取指令为例)
(PC)→MAR,PCout和MARin有效
1→R,CU发送读命令
M(MAR)→MDR,MDRin有效
(MDR)→IR,MDRout和IRin有效
执行算数或者逻辑运算(以间址为例)
(MDR)→MAR,MDRout和MARin有效
1→R,CU发出读命令
M(MAR)→MDR,MDRin有效
(MDR)→Y,MDRout和Yin有效
(ACC)+(Y)→Z(Z的作用是暂存运算结果,带结果信号稳定后发送给ACC),ACCout和ALUin有效,CU向ALU发送加命令
(Z)→ACC,Zout和ACCin有效
注意:总线上只能有一个信号在传输,因为这些硬件都只会执行简单命令,不能分解信号),ALU和暂存器Y之间的数据传送不影响内部总线的数据传送
控制器的功能和工作原理
微指令编码方式(或者微指令控制方式)
直接编码方式:
直接编码无须译码,微指令的微命令字段中每位都表示一个微命令。设计指令时,通过设置该为为1或0表示选用或不选用该微命令
字段直接编码方式
将微指令的微命令字段分成若干小字段,把互斥微命令组合在同一个字段中,把相容性微命令组合在不同的字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义独立定义,与其他字段无关
微命令字段分段原则
互斥微命令组合在同一个字段,相容性微命令组合在不同的字段
每个小段包含的信息不能太多,否则增加译码线路的复杂性和译码时间
每个小段留出一个状态,表示该位不发出任何微命令,比如三位的小段,用000表示不发出微命令
字段间接编码方式
一个字段的某些微命令需要另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出读微命令,所以称为字段间接编码
硬布线控制器和微程序控制器的特点(其他的看看书就好)
硬布线控制器的特点:硬布线控制器的优点是由于控制器的速度取决于电路延迟,所以速度快;缺点是由于将控制部件视为专门产生固定时序控制信号的电路逻辑,所以把用最少元件和取得最高速度视为设计目标,一旦设计完成,就不可能通过其他额外修改增加新功能(电路已经固定了,不可能再改变),烦琐,不规整,适用于RISC
微程序控制器的特点:微程序控制器的优点是同组合逻辑控制器相比,微程序控制器具有规整性、灵活性、可维护性;缺点是由于微程序控制器采用了存储程序原理,所以每条指令都要从控制存储器里面取一次,影响速度,适用于CISC
指令流水线
指令流水线的基本概念
指令流水的定义
一条指令的执行过程可以分解成若干阶段,每个阶段由相应的功能部件完成。如果将各阶段视为相应的流水段,则指令的执行过程就构成了流水线
理想情况下,每个时钟周期都有一个指令进入流水线,每个时钟周期都有一条指令完成,每条指令的时钟周期数都是1(其实不是)
流水线设计原则
指令流水段个数以最复杂指令所用的功能段个数为准
流水段长度以最复杂的操作所花时间为准
流水线虽然不能提高单条指令的执行时间,但是可以提升整体程序的执行时间
指令长度应尽量一致,有利于简化取指令和指令译码操作
指令格式应尽量一致,尽量保证源寄存器位置相同,有利于在指令未知时就可以取寄存器操作数,否则译码后才能确定各寄存器编号的位置
只有Load/Store指令才能访问主存
数据和指令在存储器中“对齐存放”,有利于减少访存次数
流水线的表示方法
时空图(看看例图)
流水线的实现(看书就好)
流水线的冒险(冲突)和处理
结构冒险
由于多条指令在同一时刻争夺同一资源而形成的冲突,也称为资源冲突,即由硬件资源竞争造成的冲突,有两种方法:
前一个指令访存时,使后一条指令(以及后续指令)暂停一个时钟周期
单独设置指令存储器和数据存储器,使取数和取指令操作各自在不同的存储器中进行
数据冒险
在一个程序中,下一条指令会用到当前指令计算的结果,此时两条指令产生数据冲突
写后读相关(RAW,英文表示错误类型):表示当前指令将该数据写入寄存器后,下一条指令才能从中读取数据
读后写相关(WAR):表示当前指令读取寄存器数据后,下一条指令才能往该寄存器写内容
写后写相关(WAW):表示当前指令写入寄存器后,另一个指令才能写,否则导致最终结果出错
控制冒险
指令通常是顺序执行的,但是遇到改变指令执行顺序的情况,比如执行转移、调用或返回等指令,会改变PC值,会造成断流,从而引起控制冒险
对转移类指令进行分支预测,尽早生成转移目标地址。包括简单(静态)分支预测和动态分支预测。静态预测总是预测条件不满足,即继续执行分支指令的后续指令。动态预测则根据程序执行的历史情况,进行动态预测调整,有较高的预测准确性
预取转移成功和不成功两个控制流方向上的目标指令
加快和提前形成条件码
提高转移方向的猜准率
流水线的性能指标
流水线的吞吐率
单位时间内流水线所完成的任务数量,或输出结果的数量,TP=n/Tk
流水线的加速比
完成同一批任务,不用流水线和用流水线所用时间之比,S=T0/Tk
流水线的效率
流水线设备利用率,E=时空区有效面积/总面积
高级流水线技术
超标量流水线技术
又叫动态多发射技术,每个时钟周期内可并发多条独立指令,以并行操作方式将两条或多条指令编译并执行,为此需要配置多个功能部件
为了提高性能,多数超标量CPU都结合动态流水线调度技术,通过动态分支预测等手段,指令不按顺序执行,这种执行方式称为乱序执行
超长指令字计算
超长指令字技术又称静态多发射技术,由编译程序挖掘指令间潜在的并行性,将多条能并行的指令组合成一条具有多个操作码字段的超长指令字,为此需要采用多个处理部件
超流水线技术
通过提高流水线主频来提升流水线性能,即将流水线功能段进一步划分,时时钟周期更短,指令吞吐率就越高。或者说将功能部件的功能区进一步划分,但是功能部件实际上未改变
多处理器基本概念
SISD、SIMD、MIMD
SISD单指令单数据流结构
只有一个处理器和一个存储器,一段时间只能执行一条指令,按指令流规定的顺序串行执行指令流的若干条指令
会采用流水线方式,和多模块交叉存储器
SIMD单指令流多数据流结构
是指一个指令同时对多个数据流进行处理,是数据级并行技术。这种结构计算机通常由一个指令控制部件,多个处理部件组成。每个处理单元虽然执行的都是同一条指令,但是每个单元都有自己的地址寄存器,这样每个数据都有自己的数据地址
SIMD处理数组时最有效。SIMD处理case或switch时效率最慢
MIMD多指令多数据流结构
MIMD是指同时执行多条指令分别处理不同的数据,MIMD分为多计算机系统和多处理器系统
多计算机系统由多台具有相同功能且独立的计算机构成,通过网络进行消息传递
多处理器系统是共享存储多处理系统
线程级或线程级以上的并行计算技术
硬件多线程的基本概念
在传统计算机中,线程的切换包含一系列开销,频繁切换会极大影响系统的性能,为了减少线程切换过程中的开销,便诞生了硬件多线程。即提供多个线程同时运行的所需的通用寄存器组,单独的程序计数器等,线程的切换只需要激活选中的寄存器即可,忽略数据交换的时间,大大减少了线程切换的开销
细粒度多线程
多个线程之间轮流交叉执行指令,多个进程之间的指令是不相关的,可以乱序并行执行,多处理器能够在多个时钟周期切换线程
粗粒度多线程
仅在一个线程出现较大开销的阻塞时,才切换线程,如Cache缺失。在这种情况下,当发生流水线阻塞时,必须清除被阻塞的流水线,新线程的指令开始执行时重载流水线,因此开销更大
同时多线程
SMT是上述两种多线程计技术的变体。在同一个时钟周期内,发射多个不同线程中的多条指令执行。
多核处理器的基本概念
多核处理器是将多个处理单元集成到单个CPU中,每个处理单元称为一个核,每个核即可以有自己的Cache,也可以共享Cache。所有核一般都是对称的,而且共享主存,这样的多处理器属于共享存储的多核处理器
共享内存多处理器的基本概念
具有共享的单一物理地址空间的多处理器
各个处理器之间通过共享变量实现通信
分类
统一存储访问多处理器(UMA):每个处理器对使用存储单元的访问时间大致相同
非统一存储访问多处理器(NUMA):每个处理器被单独分配了一部分存储单元,访问自己分配的存储单元速度快,访问其他存储单元速度慢
总线
总线的基本概念
总线的定义
总线是一组能为多个部件分时共享的公共信息传送路线。分时和共享是总线的两个特点。分时是指同一时刻只允许有一个部件向总线发生信息,若系统中有多个部件,则他们只能分时的向总线发送信息。共享是指总线上可以挂接多个部件,各部件之间相互交换的信息都可以通过这组线路分时共享,多个部件可以同时从总线上接收信息
总线特性
机械特性:尺寸,形状
电气特性:传输方向和有效的电平范围
功能特性:每根传输线的功能
时间特性:信号和时序的关系
总线分类
片内总线
系统总线
I/O总线
通信总线
总线的结构及性能指标
总线结构
单总线结构
只有一组总线,将CPU,I/O设备以及主存都挂在这组总线上
双总线结构(引入通道,一种处理器)
两组总线:一条主存总线,用于在主存,CPU,通道之间传送数据。一条I/O总线,用于在多个外部设备和通道之间交换设备
三总线结构
三组总线:一条主存总线,用于在主存和CPU之间交换数据;一条I/O总线,用于CPU和各类外部设备通信;一条DMA总线,用于DMA接口(连接高速外设)和主存交换数据
性能指标
总线传输周期,指一次总线操作所需时间,包括申请阶段、寻址阶段,传输阶段和结束阶段
总线时钟周期,即机器时钟周期
总线工作频率,总线各种操作的频率,为总线周期的倒数
总线时钟频率:即机器的时钟频率,机器周期倒数
总线宽度:又称总线位宽,它是总线同时传送的信息位数,通常用总线根数衡量
总线带宽:总线最大数据传输率,即单位时间总线最多能传输的数据位数,通常用每秒传送信息的字节数衡量
总线复用:一根总线在不同时间传输不同类型的信息
信号线数:地址线+数据线+控制线
总线事务和定时
总线事务
从请求总线到完成总线使用的操作序列称为总线事务,它是一个总线周期中发生的一系列活动。典型的总线事务包括请求操作,仲裁操作,地址传输,数据传输和总线释放
请求阶段:主设备(CPU或者DMA)发出总线传输请求,并且获得总线控制权
仲裁阶段:总线仲裁结构决定将将下一个周期的总线使用权授予某个使用者
突发(猝发)传送方式
能够进行连续成组数据的传送,其寻址阶段发送的是连续传送单元的首地址,在传输阶段能够传送多个连续单元的数据,每个时钟周期可以传送一个字长的信息,但是不释放总线,直到一组数据传送完成,再释放总线
同步定时方式
采用一个统一的时钟信号来协调数据发送方和接受方的之间的数据传送关系。比如发送发利用系统时钟信号前沿发送数据,接收方利用系统时钟后沿接收数据。在一个时钟周期内可以完成一次数据传送。
主从设备之间强制同步,无法进行有效性校验,可靠性差
异步定时方式
没有统一时钟,双方采用“握手”信号来实现定时控制。主设备提出交换信息的请求,从设备向主设备发出“回答”信号(和计算机网络里面的主机通信有点类似)
根据请求和回答信号的撤销是否互锁,异步定时方式可分为:
不互锁
主设备不等待从设备的回答信号就撤销请求信号,从设备发出回答信号后一段时间后就撤销回答信号
半互锁
主设备等待从设备的回答信号后才能撤销请求信号,从设备发出回答信号后一段时间后就撤销回答信号
全互锁
主设备等待从设备的回答信号后才能撤销请求信号,从设备发出回答信号必须获知主设备收到回答信号后再撤销信号
输入/输出系统
I/O接口(I/O控制器)
IO接口是主机和外部设备之间的交接界面,通过接口可以实现主机和外设之间的信息交换
IO接口的功能
进行地址译码和设备选择
实现主机和外设之间的通信联络控制
实现数据缓冲
信号格式的转换
传送控制命令和状态信息
IO接口的基本结构
数据缓冲寄存器(连接数据线)
状态/控制寄存器(连接数据线):状态信息和控制信息可以共用一个寄存器,是因为同一时刻要么是CPU在发送相关指令到寄存器,要么是外设执行相关操作返回控制信息
地址译码和I/O控制逻辑(连接控制线和地址线)
外设界面控制逻辑
接口类型
串行接口和并行接口
程序查询接口、中断接口和DMA接口
可编程接口和不可编程接口
IO端口及其编址
IO端口指的是IO接口中存在的寄存器
统一编址:又称为存储器映射方式,是指把IO端口当做存储器的单元进行地址分配,这种方式CPU不需要设置专门的IO指令,用统一的访存指令就可以访问IO端口
独立编址:又称为IO映射方式,占用独立的地址空间,需要设置专门的IO指令来访问端口
I/O方式
程序查询方式
信息交换的控制完全由CPU执行程序实现,程序查询接口中设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)。主机进行IO操作时,先发出询问信号,读取设备状态并且根据设备状态决定下一步操作究竟是进行数据传送还是等待
有CPU踏步现象,即CPU花费大量时间用于查询状态和等待
程序中断方式
程序中断的思想:CPU在程序中安排好某个时机启动某台外设,然后CPU继续执行当前程序,不需要向程序查询那样不断查询和等待。一旦外设准备就绪,就向CPU发送中断请求,请求CPU为自己服务。咋中断响应条件下,CPU会暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序完成一次主机和外设之间的数据传送,传送完成后,CPU返回原来的程序
工作流程
中断请求
中断源发送中断请求,中断请求分为可屏蔽中断(INTR线发送)和不可屏蔽中断(NMI)
中断响应判优
是指CPU响应中断请求的先后顺序。通过硬件排队器实现。
不可屏蔽中断(如掉电或时钟中断)>内部异常(程序执行指令发生异常)>可屏蔽中断
硬件故障>软件故障
高速设备>低速设备,输入设备>输出设备,实时设备>普通设备
中断判优分为中断响应判优和中断处理判优,前者由硬件排队器实现,不易改造,后者可通过中断屏蔽技术进行调整
CPU响应中断的条件
CPU响应中断的过程
关中断
保存断点
引出中断服务程序
中断向量
即中断服务程序的入口地址
中断识别分为向量中断和非向量中断,非向量中断即软件查询法
每个中断都有一个类型号,每个中断类型号都对应一个中断服务程序,每个中断服务程序都有一个入口地址,即中断向量
而中断向量的地址由硬件排队器生成,两级地址比较灵活
中断处理过程
中断隐指令(其实是硬件)执行:
关中断
保存断点,即PC值
引出中断服务程序
中断服务程序执行:
保存现场(即各种寄存器中的值)和屏蔽字(指明此次中断服务程序中那些中断请求应该被屏蔽
开中断(运行多重中断)
执行中断服务程序
关中断
恢复现场和屏蔽字
开中断,中断返回
多重中断和中断屏蔽技术
CPU在执行中断服务程序中,出现了优先级更高的中断请求或者异常情况需要转去执行新的中断服务程序
中断处理优先级是指多重中断的实际处理次序,可以利用中断屏蔽技术动态调整
现代计算机一般使用中断屏蔽技术,每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有中断触发器组合在一起就形成了屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字
DMA方式
DMA方式是一种完全由硬件进行成组信息传送的控制方式,在数据准备阶段,CPU与外设并行工作。DMA方式在外设与内存之间开辟一条“直接数据通路”,信息传送不再经过CPU,降低了CPU在传送数据时的开销,因此称为直接存储器存取方式。这种方式适合磁盘、显卡、声卡、网卡等高速设备之间大批量的数据传送,硬件开销比较大。在DMA方式中,中断的作用仅限于故障和正常传输结束时的处理
特点
它使主存和CPU的固定联系脱钩,主存即可以被CPU访问,也可以被外设访问
在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路实现
主存要开辟专用缓冲区,及时供给和接收外设的数据
DMA传送速度快,CPU与外设并行工作,提高了系统效率
DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行处理
组成
主存地址寄存器
传送长度计数器:记录传送数据的长度
数据缓冲寄存器:暂存要每次要传送的数据
DMA请求触发器:标志是否准备好传送数据
“控制/状态”逻辑
中断机构
DMA传送方式(如何与CPU协调对主存的访问)
停止CPU访存
当DMA发送数据时,暂停CPU访存
周期挪用(或周期窃取)
当CPU与IO设备访存冲突时,优先让IO设备访问主存,因为IO设备的数据容易丢失,并且运行IO设备占用多个存取周期进行数据传送
DMA和CPU交替访存
适用于CPU工作周期比主存存取周期长。让CPU和IO设备分时共享主存
DMA传送过程
预处理
CPU完成一些准备工作。然后返回执行原来的程序,直到IO设备准备好数据,向DMA控制器发送DMA请求,DMA向CPU发送总线请求,有时统称DMA请求
数据传送
完全由DMA(硬件)实现
后处理
DMA控制器向CPU发生中断请求,进行数据校验和决定是否继续进行其他数据传送
DMA方式和中断方式的区别
中断方式是程序切换,需要保护和恢复现场,而DMA方式不中断现行程序,无需保护和恢复现场,处理预处理和后处理,其他时候均不占用CPU资源
对中断请求的响应只能发生在指令的中断周期内(除了内部异常),而对DMA请求的响应可以发生在任意一个机器周期(时钟周期)结束时(取指、间址、执行都可以)
中断传输过程需要CPU干预,DMA传输过程不需要CPU不需要CPU干预
DMA请求优先级高于中断请求
中断方式具有处理异常事件的能力,DMA仅限于大批数据传送
中断方式靠程序运行,DMA方式靠硬件实现