干货分享就在微信公众号:我将在南极找寻你 话说已经好久没更新了
计算机硬件发展历程: 电子管时代-->晶体管时代-->中小规模集成电路时代-->超大规模集成电路时代-->智能计算机-->生物计算机和量子计算机。 计算机的分类: 专用计算机、通用计算机。 摩尔定律: 当价格不变时,集成电路上可容纳的元器件的数目,约每隔18~24个月便会增加一倍,性能也将提升一倍。揭示了信息技术进步的速度。 其他:操作系统直接影响计算机系统性能。
计算机系统=硬件+软件=(中央处理器、存储器和外部设备等)+(计算机的运行程序和相应的文档)
2.1 计算机硬件的基本组成
(1)存储器:分为主存储器(内存储器)和辅助存储器(外存储器)。主存储器存放重程序和数据,辅助存储器中的信息必须调入主存后才能被CPU访问。 (2)运算器:主要功能时进行算术运算和逻辑运算,核心是算数逻辑单元(ALU)。运算器包含若干通用寄存器。 (3)控制器:计算机的指挥中心。由
程序计数器(PC)
、指令寄存器(IR)
和控制单元(CU)
组成。 (4)输入设备。 (5)输出设备。
2.2 计算机软件的分类
(1)系统软件; (2)应用软件。
2.3 计算机编程语言分类
机器语言、汇编语言、高级语言。
2.4 编译程序与解释程序的区别
编译程序生成目标代码,而解释程序不生成;编译程序产生目标代码的执行速度比解释程序的执行速度快。
2.5 计算机的工作过程
不断地从存储器中逐条取出指令,然后送至控制器,经分析后由CPU发出各种操作命令,指挥各部件完成各种操作,直至程序中全部指令执行结束。
2.6 计算机系统的层次结构
(1)第1级。微程序机器级。微指令由硬件直接执行。 (2)第2级。传统机器级(机器语言)。用微程序解释指令系统。 (3)第3级。操作系统级。用机器语言解释作业控制语句; (4)第4级。汇编语言机器级。用汇编程序翻译成汇编语言程序; (5)第5级。高级语言机器级。用编译程序翻译成汇编程序或直接翻译成机器语言。
(1)吞吐量:单位时间内的数据处理量,主要取决于主存的存取周期; (2)响应时间:从提交作业到该作业得到CPU响应所经理的时间。响应时间越短,吞吐量越大。 (3)主频:机器内部主时钟的频率,衡量机器速度; (4)CPU周期:又称机器周期,指的是从内存读取一条指令字的最短时间。一个指令周期由若干个CPU周期构成; (5)CPU时钟周期:主频的倒数,是CPU中最小的时间单位。 (6)CPI、MIPS、FLOPS; (7)CPU执行时间:CPU对某特定程序的执行时间。
存储器=主存储器+高速缓冲存储器(Cache)+辅助存储器
(1)按照存储介质可分为: 1)
半导体存储器
:包括随机存储器和只读存储器两类(RAM和ROM); 2)磁表面存储器
:包括磁盘、磁带,使用顺序存取方式; 3)光盘存储器
:也叫光存储器,一般指光盘; 4)磁心存储器
:由各种磁心制成,目前已被半导体存储器取代。 (2)按存取方式可分为: 1)随机存取存储器(RAM)
:可存可取,存取时间和存取位置没有关系。 优点:读写方便,使用灵活; 缺点:断电信息丢失。 分为静态RAM(SRAM,常用作高速缓冲存储器)和动态RAM(DRAM常用作主存) 2)只读存储器(ROM)
:只可取,一般把一些固定的、不变的程序存放在这里,其内容断电后仍可保留。 3)串行访问存储器
:在对存储单元进行读写操作时,需要按照物理位置的先后顺序依次访问,主要包括顺序存取存储器(磁带)和直接存取存储器(磁盘,半串行,因为要先寻道)。 (3)按照在计算机中的作用可分为: 1)主存储器; 2)辅助存储器; 3)缓冲存储器。
(1)存储容量=存储字数(表示存储器的地址空间大小即存储器的存储单元数目)*字长(存储字长,表示一次存取操作的数据量); (2)单位成本:每位价格=总成本/总容量; (3)存储速度:数据传输率=数据的宽度/存储周期( 存储周期又称读写周期或访问周期,指连续两次独立地访问存储器操作之间所需的最小时间间隔)。
存储周期又称读写周期或访问周期,指连续两次独立地访问存储器操作之间所需的最小时间间隔,而存取时间是指启动一次存储器操作到完成该操作所经历的时间,一般小于存储周期。
缓存-主存层次主要解决CPU和主存速度不匹配的问题。主存和缓存之间的数据交换是由硬件自动完成的,对程序员是透明的; 主存-辅存层次主要解决层次系统的容量问题。主存和辅存之间的数据交换是由硬件和操作系统共同完成的。
5.1 半导体存储芯片的基本结构
半导体存储芯片主要由存储矩阵、译码驱动电路和读/写电路组成。 地址线是单向的,数据线是双向的,其余的属于控制线,包括读/写控制线(用来进行读/写操作)和片选线(用来选择存储芯片)。
5.2 半导体存储芯片的译码驱动方式
译码驱动:将地址线送来的地址信号转换成对应存储单元的选择信号。 (1)线选法(单译码):矩阵有N行,则需要地址线$log_2N$根;矩阵每行有m位(也就是m列),则需要m根数据线; (2)*重合法(双译码):同时需要行和列的地址线。32($2^5$)行里选中1行需要5根地址线,32($2^5$)列选中一列也需要5根地址线,一共需要10根地址线。
5.3 静态RAM(SRAM)存储器
存储器的工作:保持存储信息、读数据和写数据
5.4 动态RAM(DRAM)存储器
存储器的工作:保持存储信息、读数据和写数据 DRAM存储器的刷新:采用电容式存储,按行刷新(因为存储体是矩阵形式),由硬件支持,不由CPU指挥,占一个读/写周期。 3种刷新方式: 1)集中刷新:把刷新操作集中到一段时间内进行; 2)分散刷新:将刷新操作分散进行,周期性的进行; 3)异步刷新:是一个折中方案,有计划的刷新,时间分配十分合理。 刷新的实质:读出后再按原样写入。
5.5 只读存储器(ROM)
可分为: 掩膜型只读存储器(MROM)、可编程只读存储器(PROM)、可擦除可编程存储器(EPROM)、电可擦除可编程存储器(EEPROM)、快擦除读写存储器(Flash Memory,又叫闪存,集合了ROM和RAM的长处)。
5.6 对比ROM和RAM
存取方式一样,都是随机存取。不同的是,ROM只读,RAM可读可写。
5.7 存储器容量扩充
概念:将若干个存储芯片连接在一起组成足够容量的存储器。
补充求芯片数量的公式:若要求将容量为
a*b(a为字线,连接地址线)
的芯片组成容量为c*d
的芯片,则协议的芯片数量n=(c*d)/a*b(整个存储器的容量除以单个芯片的容量)
3类扩充方法:
1)位扩充(增加
a*b中的b
): 增加存储字长,横向扩展,比如要将1K*4
位的芯片组成1K*8
位的存储器,过程如下:需要(1K*8)/(1K*4)=2
片芯片,需要10根地址线($2^{10}=1K$),需要8根数据线(1K*8
中的8代表位数);2)字扩充(增加
a*b中的a
): 增加存储单元的个数,纵向扩展,比如要将1K*8
位的芯片组成2K*8
位的存储器,过程如下:需要(2K*8)/(1K*8)=2
片芯片,需要11根地址线($2^{11}=2K$),需要8根数据线(2K*8
中的8代表位数);3)字位扩充(增加
a*b中的a和b
): 增加存储单元的个数和存储字长,纵向扩展,比如要将1K*4
位的芯片组成4K*8
位的存储器,过程如下:需要(4K*8)/(1K*4)=8
片芯片,需要11根地址线($2^{12}=4K$),需要8根数据线(2K*8
中的8代表位数);
具有两组相互独立的地址线、数据线和读/写控制线。 可以并行工作,是一种高速工作的存储器; 有可能在同一时间两个端口同时操作存储器的同一个存储单元,因此设置了
BUSY
标志。
不同于寻找更高速的元件和采用存储器层次结构,这种方法是通过调整主存的结构来提高访存速度,主要有两类:单体多字存储器、多体并行存储器
7.1 单体多字存储器
使用前提:指令和数据在主存内必须连续存放; 原理:把存储器的
存储字
字长增加n倍,以存放n个指令字或数据字,于是单体多字存储器的最大带宽比单体单字存储器的最大带宽提高n倍。正常情况下不可能达到最大带宽,因为程序使用指令字和数据字存在随机性。; 缺点:必须凑齐n个数据字之后才能作为一个存储字一次写入存储器,因此需要首先把属于一个存储字的n个数据字读入到数据寄存器中,等数据寄存器达到了一个存储字的长度,再将其写入存储器。
7.2 多体并行存储器
所谓多体并行存储器,就是采用多个模块组成的存储器,每个模块有着相同的容量和存取速度,各个模块都有独立的地址寄存器、数据寄存器、地址译码器和读/写电路,每个模块都可以看做一个独立的存储器。 主要分为两种:高位交叉编址的多体并行存储器、低位交叉编址的多体并行存储器
7.2.1 高位交叉编址的多体并行存储器(竖着走,按列扫描)
高位地址表示体号,低位地址定位体内地址。由于每个模块内的体内地址顺序是连续的,因此又称
顺序存储
。这样,可以在同一时间使得不同的请求源同时访问不同的体,进而实现个体的并行工作。 特点:相邻两个字在同一个存储体中,高位的变动才会产生交叉访问的效果。 优点:非常有利于存储器的扩充,只需将存储单元的编号往后加即可。 缺点:由于各个模块一个接一个的串行工作,因此存储器的带宽受到了限制。
7.2.2 低位交叉编址的多体并行存储器(横着走,按行扫描)
由于程序是存放在相邻的体中,因此又称
交叉存储
。低位为体号,高位定位体内地址。 特点:连续地址分布在相邻的不同模块内,而同一个模块内的地址都是不连续的。
8.1 主存和Cache的编址
主存由一个个的字块组成,主存的地址分为两部分:高m位表示主存的块地址,低b位表示其块内的字或字节。同理,Cache的地址也应分为两部分:高c位表示Cache的块号,低b位表示其块内的字或字节数。 命中率:CPU要访问的的信息在Cache中的比例; 平均访问时间:假设命中率为$h$,$t_c$为命中时访问Cache的时间,$t_m$为未命中时的主存访问时间,则Cache-主存系统的平均访问时间$t_a$为$t_a=ht_c+(1-h)t_m$; Cache-主存系统效率:$e=t_c/t_a$ 。
Cache的命中率只与Cache的容量
、Cache的字块长度
有关。
主存与Cache之间传送数据的基本单位是块,而主存与CPU之间传送数据的基本单位是字(一个块包含多个字)。
8.2 Cache的基本结构
地址映射变换机构(将CPU送来的主存地址转换成Cache地址); 替换机构。
8.3 指令和数据是放在同一个Cache中吗?
一级Cache的指令和数据一般分开存放,而二级Cache的指令和数据放在一起,因此有
L1 data Cache
和L1 code Cache
。
8.4 一些其他知识点
在CPU和主存之间增加Cache并不能增加计算机总存储量; 程序员无需知道高速缓存的访问过程。
(1)直接映射:每个缓存块可以和若干个主存块对应,每个主存块只能和一个缓存块对应。 优点:实现简单。 缺点:不够灵活(容易造成空闲Cache块的浪费)、冲突概率高(抖动)。 应用场合:适合大容量Cache。 (2)全相联映射:主存中每一个字块可以映射到Cache中的任何一块。 优点:Cache的命中率提高了、减小了块的冲突率(空位随便坐)进而提高了Cache的利用率。 缺点:tag的位数增加了,访问Cache时主存字块标记需要和Cache的全部“标记”进行比较,才能判断所访问主存地址是否已在Cache内。 应用场合:适用于小容量的Cache。 (3)组相联映射:按号分组,组内随意放(把Cache分成Q组,每组有R块),这样,组间是直接映射,组内是全相联映射,虽没有直接相连的速度快,但电路实现简单(只需进行组间本比较,而无需
对Cache的每一块进行比较[全相联是这样子的,它需要]
),命中率高。
先进先出,近期最少使用(理想,预测性,难以实现),最不经常使用,随机法。
(1)写回法: 当CPU写Cache命中时,只修改Cache的内容,而不立即写入主存,只有当此行被换出时才写回主存。这样减少了访存次数。Cache的每一行都设置一个修改位(脏位),当某行被换出时,根据此行的修改位来决定将该行内容写回主存还是简单丢弃。
若未命中,则使用写分配法
:加载主存中的块到Cache中,然后在Cache中更新,最后同步到主存。
(2)全写法: 当写Cache命中时,Cache与主存同时发生写修改。
若未命中,则使用非写分配法
:只写入主存而不调入Cache。
(3)写一次法: 以上两种方法的折中,写命中与写未命中的处理方法与写回法基本一致,仅仅是第一次写命中时要同时写入主存。
详见操作系统。
构成机器语言的一条条语句就是一条条机器指令,全部机器指令的集合就是机器的指令系统。 一条指令包括
操作码
和地址码
两部分: 操作码:分为定长操作码
和不定长操作码
。告诉要做什么操作(比如,加减乘除); 地址码:又称操作数字段
,其任务是:指出操作数的地址、运算结果需存放的地址、下一条指令的地址。
(1)零地址指令:只给出操作码字段OP,适用于:1)不需要操作数的指令,比如停机指令、关中断指令等;2)堆栈计算机中的零地址运算类指令。 (2)一地址指令:地址码字段只有一个,适用于:1)单目运算,如求反,减一等;2)隐含约定目的地址的双操作数指令。假设指令字长32位,地址码字段24位,则寻址范围是$2^{24}=16M$ (3)二地址指令:有两个地址码字段,一个是源操作数地址,另一个是目的操作数地址,适用于各类加减乘除运算。假设指令字长32位,操作码8位,两个地址码字段各12位,则寻址范围是$2^{12}=4K$。 (4)三地址指令:有三个地址码字段。假设指令字长32位,操作码8位,三个地址码字段各8位,则寻址范围是$2^8=256$ (5)四地址指令:有四个地址码字段。若指令字长32位,操作码8位,4个地址码各6位,则直接寻址范围是$2^6==64$。
指令字长取决于操作码的长度、操作数地址的长度、操作数地址的个数。 每一条指令指令都必须告诉CPU该指令如何做,因此必须指定操作码。
指令字长是指一条指令所占用存储空间的大小。指令字长一般为字节的整数倍。 单字长指令:指令长度=机器字长; 半字长指令:指令长度=0.5机器字长; 双字长指令:指令长度=2机器字长。
如果计算机中的某一个字表示的是一个数据,则此字称为
数据字
; 如果计算机中的某一个字表示的是一条指令,则此字就称为指令字
。
定长操作码:在指令字的最高位部分分配固定的若干位表示操作码。对于具有n位操作码字段的指令系统,最多能够表示$2^n$条指令。 不定长操作码:操作码的长度随地址码个数的减少而增加,不同的地址数的指令可以具有不同长度的操作码。这样子可以在满足需要的前提下有效的缩指令字长。需要注意的是:不允许较短的操作码是较长的操作码的前缀;各条指令的操作码一定不可以重复。
定义:是指指令或操作数有效地址的寻找方式,主要分为
数据寻址
和指令寻址
。 寻址的原因:因为指令的地址码字段往往并不是操作数的真实地址,而是形式地址。
6.1 指令寻址和数据寻址的比较
确定指令存放位置的过程称为
指令寻址方式
,确定操作数存放位置的过程称为数据寻址方式
,两者复杂度不一样。 指令寻址是指找到下一条将要执行的指令的地址,有两种方式:顺序执行(用指令计数器(PC)+1来得到下一条在指令的地址)和跳转执行(通过转移指令的寻址方式,计算出目标地址,送到PC中即可。目标转移地址的形成方式主要有3种:立即寻址(直接地址)、相对寻址(相对地址)、间接寻址(间接地址))。 数据寻址是指找到当前正在执行指令的数据地址。为了区分各种数据寻址方式,通常在指令字中设置一个字段,用来致命使用何种寻址方式,这样,数据指令字的结构变为{操作码,寻址特征,形式地址(A)}。
6.2常见的数据寻址方式
(1)立即寻址:立即给出操作数,不需要给出地址去其他地方找操作数。只需要在取指令时访问存储器,而在执行阶段不需要。但A的位数限制了立即寻址的范围。常用于对某寄存器或内存单元赋初值。
(2)直接寻址:通过指令中的地址码字段找到真实地址(取货码取快递),执行阶段需要访问一次存储器去取操作数。直接给出了操作数的有效地址,寻找操作数简单,但是寻址范围较小(操作数的有效地址仅由A决定,而A的位数一般都比较小,因此寻址范围比较小)。
(3)隐含寻址:指令字不明显的给出操作数的地址,其操作数地址隐含在操作码或者某个寄存器中。有利于缩短指令字长,但是需要增加存储操作数或隐含地址的硬件。
(4)间接寻址:解决了直接寻址的寻址范围小的问题。直接寻址直接给出了操作数的有效地址,而间接寻址给出的是
操作数有效地址的地址
。间接寻址又可以分为一次间接寻址
和多次间接寻址
。便于子程序返回和查表,但N次间接寻址需要在指令阶段还需要访问存储器N+1
次(前N次找操作数的有效地址,最后一次找操作数)。
(5)寄存器寻址:和直接寻址类似,在直接寻址的指令字中,地址码字段给出的是主存地址,而在寄存器寻址的指令字中,地址码字段直接给出的是寄存器编号$R_i$,则操作数的有效地址为$EA=R_i$。
(6)寄存器间接寻址:和寄存器寻址不同之处在于,$R_i$中存放的不是操作数,而是操作数所在主存单元的地址号,有效地址$EA=(R_i)$。便于编制循环程序,但需要访问一次存储器去取操作数。
(7)基址寻址:设置一个基址寄存器(BR),则其操作数的有效地址等于指令字中的形式地址A与基址寄存器中的内容(基地址)相加,即:$EA=A+(BR)$。扩大了操作数的寻址范围(因为基址寄存器的位数可以大于形式地址Ade位数),便于解决多道程序问题。注意:基址寄存器的内容由操作系统确定,但用户有权知道使用了哪个寄存器作为基址寄存器。
(8)变址寻址:不同于基址寻址,在变址寻址中,变址寄存器中的内容由用户设定,在程序执行过程中其值可变,而指令字中的形式地址A是不可变的。也扩大了操作数的寻址范围,非常适合处理数组和循环问题。
(9)相对寻址:基于程序局部性原理,相对寻址的有效地址是将程序计数器(PC)的内容与指令字中的形式地址A相加而成,即:$EA=(PC)+A$。用于转移类指令,便与编制浮动程序。
7.1 CISC的主要特点
(1) 指令系统复杂庞大; (2)指令长度不固定,指令格式种类多,寻址方式种类多; (3)可以访存的指令不受限制(RISC只有取数/存数指令访问存储器); (4)由于80%的程序只是用20%的指令,因此CISC各指令的使用频率差距太大; (5)各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成; (6)控制器大多数采用微程序控制; (7)难以用优化编译生成高效的目标代码程序。
7.2 80-20定律
典型程序中80%的语句都是使用计算机中20%的指令,而这20%的指令都属于简单指令。
于是RISC
出现了!
7.3 RISC的主要特点
(1)把复杂指令的功能用使用频率较高的简单指令实现; (2)指令长度固定,指令格式种类少,寻址方式种类少; (3)只有取数/存数指令访问存储器,其余的指令操作在寄存器中完成; (4)CPU中有多个通用寄存器(比CISC的多); (5)一定采用流水线技术,大部分指令在一个时钟周期内完成; (6)控制器采用组合逻辑控制,不用微程序控制; (7)采用优化的编译程序。
7.4 对比RISC和CISC
RISC更能提高计算机的运算速度,更便于设计,可降低成本,提高可靠性,更有效支持高级语言程序。而CISC有专用指令来完成特定的更能,因此处理特殊任务比较高效。
CPU=运算器+控制器。 运算器的功能是对数据进行加工; 控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令、执行指令、控制主机与I/O设备交换信息以及总线的管理,处理中断的能力。
(1)控制器能自动形成指令的地址,并能发出取指令的命令,将对应此地址的指令取到控制器中,称为
指令控制
; (2)取到指令之后,应该产生完成每条指令所需要的控制命令,称为操作控制
; (3)控制命令产生后,需要对各种控制命令加以时间上的控制,称为时间控制
; (4)在执行的过程中,可能需要进行算术运算和逻辑运算,称为数据加工
; (5)最后当然还有处理中断的能力,称为中断处理
。
控制单元(CU):指令控制、操作控制、 时间控制; 算数逻辑单元(ALU):数据加工; 中断系统:中断处理; 寄存器。
可分为运算器中的寄存器
和控制器中的寄存器
4.1 运算器中的寄存器
(1)暂存寄存器:暂存从主存读来的数据,对程序员透明(用户不可见); (2)累加寄存器(ACC):是一个通用寄存器,用户可见,暂时存放ALU运算的结果信息,至少要有一个; (3)通用寄存器组:存放操作数和各种地址信息,用户可见; (4)状态条件寄存器(PSW):保存由算数指令和逻辑指令运行或测试的结果建立的各种条件码内容,用户可见。
4.2 控制器中的寄存器
(1)程序计数器(PC):确定下一条指令的地址,具有寄存信息和计数两种功能; (2)指令寄存器(IR):保存当前正在执行的指令,指令划分为操作码和地址码字段,由二进制数字组成; (3)存储器数据寄存器(MDR):暂时存放由主存读出的一条指令或一个数据字,可作为CPU、内存和外部设备之间信息传送的中转站,并且补偿三者速度上的差别,此外在单累加结构的运算器中,存储器数据寄存器还可兼作操作数寄存器; (4)存储器地址寄存器(MAR):保存当前CPU所访问的内存单元的地址。
定义:CPU每取出并执行一条指令所需的全部时间,即CPU完成一条指令的时间,称为指令周期。
一个指令周期=若干个机器周期 一个机器周期=若干个时钟周期
一个完整的指令周期包括: 取指周期(取指令)+间址周期(取地址)+执行周期(存取操作数或结果)+中断周期(存程序断点)
【方案1】单指令周期:对所有的指令都选用相同的执行时间来完成,指令之间串行执行,效率低; 【方案2】多指令周期:对不同类型的指令选用不同的执行步骤来完成,指令之间仍串行执行,但可以选用不同个数的时钟周期来完成不同指令的执行过程; 【方案3】流水线方案:指令之间可以并行执行,力争在每个时钟脉冲周期完成一条指令的执行过程(理想情况下)。通过在每一个时钟周期启动一条指令,尽量让多条指令同时运行。
信息流是根据指令要求访问的数据序列,在指令执行的不同阶段,要求访问的数据序列是不同的,而且对于不同的指令,它们的数据流往往也是不同的
数据在功能部件之间传送的路径称为
数据通路
,它的功能是实现CPU内部的运算器和寄存器,以及寄存器之间的数据交换。
8.1 数据通路的基本结构的两种方式
【方式1】CPU内部总线方式:将所有寄存器的输入端和输出端都连接到一条或多条公共的通路上。包括
单总线结构
(连接各部件的总线只有一条)和双总线结构和多总线结构
(CPU中有两条或多条总线,此时数据的传递可以同时进行)。这种结构比较简单,但是数据传输存在较多的冲突现象,性能较低。 【方式2】专用数据通路方式:根据指令执行过程中的数据和地址的流动安排连接线路。避免了使用共享的执行,性能较高,但硬件量较大。
8.2常见数据通路的数据传送
(1)寄存器之间的数据传送(by CPU内部总线); (2)主存与CPU之间的数据传送(by CPU内部总线); (3)执行算数或逻辑运算(算数逻辑单元ALU没有内部存储功能,因此执行算数逻辑运算时,要求ALU的两个输入端同时有效)。
(1)从主存中取出一条指令,并指出下一条指令在主存中的位置; (2)对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作; (3)指挥并控制CPU、主存、输入和输出设备之间的数据流动方向。
同步控制方式:整个系统的所有控制信号均来自一个统一的时钟信号
(1)采用完全统一节拍的机器周期(定长方式); (2)采用不同节拍的机器周期(不定长方式); (3)采用中央控制和局部控制相结合的方法。
异步控制方式:通过应答方式进行联络,不存在基准时标信号,一般用于主机与I/O设备之间的传送控制,使告诉的主机与慢速的I/O设备可以按照各自的需要设置时序系统。
联合控制方式:折中方案,这种方式对各种不同的指令的微操作大部分采用同步控制方式,小部分采用异步控制方式。
11.1 两种设计方式的对比
组合逻辑控制(硬布线逻辑控制):控制器处理速度块,但电路庞杂导致难以扩展,制造周期长,不灵活,可维护性差。
微程序控制:仿照程序设计的方法编制每个机器指令对应的微程序,每个微程序由若干条微指令构成,各微指令包含若干条微命令。扩展单元设计简单,指令添加容易(灵活),可维护性好,但速度较慢。
11.2 微程序设计
11.2.1 微程序设计的概念
将一条机器指令编写成一个微程序,每一个微程序包含若干条微指令,每一条微指令对应一个或几个微操作命令。然后把这些微程序存到一个控制存储器中,用寻找用户程序的方法来寻找每个微程序中的微指令。所以逐条执行每一条微指令,也就相应地完成了一条机器指令的全部操作。每一条机器指令都与一个以操作性质命名的微程序对应。
11.2.2 微程序控制的相关概念
微命令与微操作
一条机器指令可以分解成一个微操作序列(不可再分)。微命令是由控制部件向执行部件发出的各种控制命令,是构成控制序列的最小单位。微命令和微操作一一对应,微命令是微操作的控制信号,微操作是微命令的执行过程。
微指令与微周期
微指令是若干微命令的集合,包含操作控制字段和顺序控制字段。微周期指从控制存储器中读取一条微指令并执行相应的微操作所需的时间。
主存储器和控制存储器
主存储器用于存放程序和数据,在CPU外部,用RAM实现;控制存储器(CM)用于存放微操作,在CPU内部,用ROM实现。
程序与微程序
程序是指令的有序集合,用于完成特定的功能;微程序是微指令的有序集合,一条指令的功能由一段微程序来实现。
11.2.3 微程序控制单元的基本组成
控制存储器:这是微程序控制单元的核心部件,用来存放全部微程序,包含控制地址寄存器(CMAR,存放欲读出的微指令地址)和控制数据寄存器(CMDR,存放从控存中读出的微指令); 顺序逻辑:用来控制微指令序列。
11.2.4 微指令的基本格式
操作控制字段:发出各种控制信号; 顺序控制字段:可指出下地址,以控制微指令序列的执行。
11.2.5 微指令的编码方式
(1)直接编码(直接控制)方式:在微指令的微命令字段中每一位都代表一个微命令,不需要译码,因此简单、直观,执行速度快,操作并行性好。但微指令字长过长,造成控制存储器容量极大。
(2)字段直接编码方式:将微指令的微命令字段分成若干小字段,把互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中。缩短了微指令字长,但是要通过译码电路后再发出微命令,比较慢。
注:微指令周期
是指读出微指令的时间+执行该条微指令的时间。
(3)字段间接编码方式:一个字段的某些微命令需由另一个字段中的某些微命令来解释,而不是靠字段直接译码发出微命令。可以进一步缩短微指令字长,但削弱了微指令的并行能力。
(4)混合编码方式
11.2.5 微指令格式
水平型微指令:一次能定义并执行多个并行操作。
优点:微程序短,执行速度快;
缺点:微指令长,编写微程序较麻烦。
垂直型微指令:类似机器指令操作码的方式,由微操作码字段规定微指令的功能。
优点:微指令短,简单、规整,便于编写微程序;
缺点:微程序长,执行速度慢,工作效率低。
混合型微指令
12.1 指令流水线的优缺点
优点:缩短了程序的执行时间各功能部件的利用率明显提高;
缺点:需付出较大的硬件开销,控制过程相比顺序执行也更为复杂。
12.2 影响流水线的因素
(1)资源相关:多条指令进入流水线后在同一机器时钟周期使用了同一个功能部件所发生的冲突。
(2)数据相关:后一条指令必须等待前一条指令执行完毕才能执行。
(3)控制相关:当执行转移指令时,依据转移条件的产生结果,可能顺序执行下一条指令,也可能转移到新的目标地址取指令,从而使流水线断流。
定义:总线是一组能为多个部件分时共享的公共信息传送线路(物理线路)。
特点:分时+共享。
特性:机械特性(尺寸、形状)+电气特性(传输方向和有效的电平范围)+功能特性(每根传输线的功能)+时间特性(哪根线在什么时候有效)。
总线的传输周期:指CPU通过总线对存储器或I/O端口进行一次访问所需的时间。
总线宽度:举例,高速公路有16条车道,则宽度就是16。
按照数据传送方式,可分为
并行传输总线
和串行传输总线
.按照总线的使用范围,可分为
计算机总线
和测控总线
.按照连接部件的不同,可分为
片内总线
,系统总线
和通信总线
.
注:片内总线就是芯片内部的总线,系统总线是连接五大不见之间的信息传输线,包括数据总线、地址总线和控制总线。
一组控制线、一组数据线和一组地址线。
总线宽度:通常是指数据总线的根数。
总线带宽:单位时间内总线上传输数据的位数。
总线复用:地址总线和数据总线共用一组线。
信号线数:地址总线、数据总线和控制总线3种总线数的总和。
(1)单总线结构:将CPU、主存和I/O设备都连接在一组总线上,允许它们之间直接交换信息。结构简单,容易扩充外部设备,但不允许两个以上的部件同时向总线传输信息。特点:主存和I/O设备统一编址,CPU可以像访问内存一样访问外部设备。
(2)双总线结构:将速度较低的I/O 设备从总线中分离出来,形成主存总线与I/O 总线分开的结构。
(3)三总线结构:在I/O高速设备与主存之间增加了一条DMA总线。
6.6.1 集中仲裁方式
(1)链式查询方式:总线上的所有部件公用一根总线请求线,当由部件请求使用总线时,均需经此线发送请求信息到总线控制器,若总线不忙,则允许请求,否则等待。
优先级判别方式:离总线控制器越近的部件,其优先级越高。
优点:结构简答,易扩充;
缺点:对设备电路的故障敏感,对低优先级的部件不公平。
(2)计数器查询方式:采用一个计数器控制总线的使用权。
优先级判别方式:当总线控制器接收到总线请求信号判断总线不忙时,计数器开始计数,计数值通过一组地址线发向各个部件。当地址线上的计数值与请求使用总线设备的地址一致时,该设备获得总线控制权。同时,终止计数器的计数及查询工作。
优点:各设备优先级顺序可以改变,而且对电路故障不敏感;
缺点:增加了控制线数,控制较为复杂。
(3)独立请求方式:每一个设备均有一对总线请求信号和总线同意信号。
优先级判别方式:在总线控制器中排队,等待批准。
优点:响应时间很快(以增加控制线为代价),对优先级顺序的控制相当灵活;
缺点:总线控制更复杂。
6.6.2 分布仲裁方式
不需要中央仲裁器,每个主模块都有自己的仲裁号和仲裁器,多个仲裁器竞争使用总线。
完成一次总线操作的时间称为总线周期。
包括申请分配阶段+寻址阶段+传送数据阶段+结束阶段。
8.1 同步定时方式
系统采用一个统一的时钟信号来协调发送和接受双方的传送定时关系。时钟信号通常由中央处理器的总线控制器发出,然后送到总线上的所有部件。
优点:传送给速度快,具有较高的传输速率,总线控制逻辑简单。
缺点:主从设备之间属于强制性同步,不能及时进行数据通信的有效性检验,可靠性较差。
适用范围:总线长度较短,总线所接部件的存取时间应该比较接近。
8.2 异步定时方式
允许各模块的速度不一致,没有公共的时钟标准,不要求所有部件严格地统一操作时间,而是采用应答方式(需要在主从模块之间增加两条应答线)。有不互锁、半互锁和全互锁3种方式。
优点:总线周期长度可以改变,能保证两个工作速度相差较大的部件或设备之间可靠地进行信息交换,自动适应时间的配合;
缺点:比同步控制方式稍微复杂一些,速度比同步定时方式慢。