计算机组成原理复习笔记

本文最后更新于:2 年前

个人理解部分用斜体标出 勿轻易全信

基础

字长定义

存储字长:一个存储单元位数,一般指主存。

机器字长:计算机能直接处理的二进制数据的位数,为CPU内部寄存器的位数。

数据字长,指令字长:存储一个数据/指令的字长,早期计算机一般上述字长都相等,一个存储单元恰能存储一个数据或指令,现代计算机可以不相等,数据和指令字长常常是可变的,可以多次取数组成一个数据或指令。

地址长度一般小于数据字长/指令字长,CPU中,PC、MAR为地址长度,MDR、IR等等都是数据长度,IR存储当前执行指令,包含操作码+地址。

总线

分类

数据总线:双向传输,位数称为总线宽度,与存储字长,机器字长有关。CPU中的MDR与其相连。

地址总线:由CPU指出欲访问的存储地址/设备地址,是单向传输的,CPU中的MAR与其相连,其位数等于MAR位数

控制总线:由CPU发出命令,也可由其他设备对CPU发出请求,故单个控制总线是单向的,但控制总线总体上是双向的。

判优

链式查询:

离得越近越先获得总线控制权,实现简单,但对故障敏感,低优先级的设备很难获得控制权。

计时器定时查询:

即用一个计数器依次枚举每一个设备,加了一道设备地址线,当设备地址线的内容和设备地址相符时,它获得控制权。各个设备的优先级相等,也可以通过程序设定计数器初始值。它控制复杂,设备地址线需要$log_2n$ 根,但对故障敏感度降低。

独立请求方式:

每个设备有独立的请求线和同意线,优先级完全由程序设定,控制灵活但复杂,且需要 $2n$ 根额外的线。

通信

同步通信:

以时钟的上升和下降沿为信号进行操作,必须在规定的时钟周期内完成规定的操作。

异步通信:
  • 不互锁:发出信号后,等待一段时间就关闭信号,也要求对方在这段时间里必须收到。
  • 半互锁:主模块发出请求信号,等待回答再关闭信号。从模块发出回答信号,等待一段时间后关闭回答信号。不必等待请求关闭。
  • 全互锁:主模块既要等待回答,从模块也要等待请求关闭。
异步串行通信:

https://blog.csdn.net/weixin_39653320/article/details/111105213

传输的数据包括起始位,数据,[校验位]和终止位,起始位为低电平,终止位为高电平,数据由低位到高位传送。

空闲时始终为高电平,当接受到一个低电平时,代表数据开始传输了,此时初始化并启动接收方的时钟,做到与数据传输同步,随后每隔一个周期读取一位数据。(异步串行在数据内的位上是同步的,多个数据间是异步的

通信时数据长度是不固定的,故双方必须就传输的数据格式达成协议。

一个字符传输完成后,终止位让线路回到高电平,随后若有空闲位,同样需要是高电平。接到低电平时即为下一个传输的字符。

同步串行通信:

严格在系统时钟的前沿开始发送,接收方在系统时钟的后沿判别。

同步通信也需要一个起始标记,但因为数据之间也是同步时钟的,故对一个数据块只需要一个起始标记(异步通信每个字符都需要起始标记),传输速率很高。

简单概括:异步通信对时序要求不严格,允许速度差异较大的设备和谐工作,每接收一个字符都需要靠起始位来对准时钟,而同步通信可以传输一大段数据(数据块)后再根据起始位调整,对时序要求更严格。

半同步通信:

让同步通信也能接收速度较慢的模块。

模块如果在规定的时间里未能完成任务(如发送数据),则发送一个等待信号,对方的同步也将延迟一个周期。

其他

带宽:bps、Bps,每秒传输的数据位数

波特率:每秒传输的数据位数。

比特率:每秒传输的有效数据位数。

存储器

按字/字节寻址

按字/字节寻址的区别就是最小编址单位,按字寻址时,无需保留对字节的编址,也无法寻址到具体字节

存储器的效验

汉明码中有配奇或配偶之分,配奇即新加入的位C要使得组内共有奇数个1。

提高访存速度的措施

单体多字系统:在一个存取周期里读出多个连续的字,当指令或数据不连续时无效。

多体并行系统:有多个存储体,每个存储体都拥有独立的MAR和MDR,可以同时存取。

  • 高位交叉编址,连续的数据地址仅在低位上不同,存放在同一个存储体内(不去考虑边缘等情况),请求不同存储体内数据的源可以同时存取,但单一请求没法加速,取出 $n$ 个字需要 $nT$ 的时间($T$ 为存取周期)。

  • 低位交叉编址,连续的数据会交叉循环地存放在各个存储体中,这样不利于存储器的扩充,但请求一段连续数据时,可以让各个存储体同时取数,大大提高了效率。各个存储体取数时需要错开一个总线传输周期,详见书上的图,连续取出 $n$ 个字需要 $T+(n-1)t$ 的时间($t$ 为总线传输周期)。

Cache

原理和哈希一样,略过不谈,看符号:

主存块数 $2^m$,cache块数 $2^c$,一块内的可编址单位数(字或字节)$2^b$,标记字块补全cache中没有的主存块信息,即剩下的 $t=m-c$

主存地址:$tcb$,其中 $m=t+c$

如果分组,一组中有 $2^r$ 块,那么共有 $2^q=2^c/2^r$ 组,$q=c-r$

主存块号的后 $q$ 位决定其组号,其余都是标记位, $t=m-q$

主存地址:$tqb$,其中 $m=t+q$,它相对于不分组的就是将 $c$ 中的 $r$ 位挪到了 $t$ 上。

辅存

道距:$P$,道密度:$D_t=\frac{1}{P}$,注意道距是两个道之间半径的差,而内径外径通常指直径。

位密度:单位长度磁道记录的信息总量,各个磁道的信息总量相同但半径不同,所以位密度是不均匀的,一般以最内道为磁盘的位密度。$D_b=\frac{f_t}{\pi d_{min}}$,$f_t$ 即为每一道的信息量。

平均等待时间:磁道旋转到指定位置需要的平均时间,$t_{wa}=\frac{旋转一圈时间}{2}$,

平均寻址时间:平均找道时间和平均等待时间之和。

数据传输率:指单个磁道每秒传输的信息量(单位同bps、Bps),而非整个磁盘的传输量。

记录面:一般 $n$ 块磁盘,有 $2n$ 个记录面,若上下两面不记就有 $2n-2$ 个

柱面:指不同记录面上,相同半径的磁道组成的圆柱。多少个磁道就有多少个柱面。

输入输出系统

IO接口

接口:两种硬件之间的连接电路,或是两种软件之间的逻辑边界。

IO接口主要功能:选址功能,传送命令功能,传输数据功能,反映IO设备状态功能

基本组成:数据线,设备选择线,命令线,状态线

IO设备编址

给设备编址就是为其分配编号(设备码,地址码)的过程。

编址后可以由设备码直接指出设备号(具体设备名),随后通过接口电路选择设备。

编址方式有两种:

  • 统一编址:指定哪些地址代表设备地址,哪些代表主存地址,这种方式减少了主存的可用空间。
  • 不统一编址:需要使用专门的指令,仅在这些指令下地址码被看做设备地址。

信息传送控制

程序查询方式:

CPU不断查询设备是否做好准备,要求设备内置一个表示就绪状态的标记。效率低下。

程序中断方式:

CPU执行”启动设备“命令后,不管他,继续执行程序。

设备接到启动命令,便自行准备,准备就绪后($D=1$),发出中断请求($INTR=1$)。

CPU在每条指令执行结束后(此时状态稳定),检查所有的设备有无中断请求,如果有,就像调用函数一样跳转到对应设备的中断服务程序。

各个设备的请求还需要经过排队器(一个组合逻辑电路)或排队软件以确定是哪个设备最终获得中断权,随后产生中断相应信号($INTA$)将排队器的输出送到编码器转化为中断向量,可以理解为对设备的编码。可以在这个中断向量所示地址内存放一个无条件转移到中断服务程序入口的指令。这样CPU只需要将中断向量送入PC即可。

中断服务程序首先会进行现场保护,将CPU内各个寄存器的状态都保留下来。注意对程序断点的保存(PC)不由中断服务程序完成,因为到服务程序时PC值已经被改变了,断点会在CPU的中断周期中,中断向量->PC 前自动入栈(由隐指令,或者说硬件完成),随后进行设备服务,恢复现场,返回断点。

CPU还有一个允许中断($EINT$)标志,在中断周期,程序断点保存后,这个标志置为0(关中断),暂不允许其他中断的发生。若CPU不允许中断嵌套,这个标志将在中断返回后置为1,否则它将在中断服务程序现场保存完毕后就置为1,只要不导致现场混乱即可嵌套中断服务程序。

中断屏蔽:也可用于处理中断优先级,每个中断源都有一个屏蔽标志($MASK$),仅当此标志为0时,$INTR$ 才能等于1。当一个设备被允许中断,他会根据自身的屏蔽字,将一些其他设备的屏蔽标志设为1。

屏蔽字存放在屏蔽寄存器中,改变屏蔽字即可改变优先级,例如 $A$ 的屏蔽字中不包含 $B$,而 $B$ 的屏蔽字包含 $A$,那么 $B$ 请求中断时,哪怕 $A$ 正在执行也会被打断,但反之不行。

总结一下中断发生的条件/顺序:

  1. $(D=1)+(MASK=0)->INTR=1->进入排队器$
  2. $(排队器选中)+(EINT=1)->INTA信号,进入中断响应$
  3. $INTA$ 将排队器输出送到编码器 $-> 中断向量$

书上P199图5.43不错

DMA方式:

Direct Memory Access 直接存储器访存,效率最高

在存储器和高速IO设备之间架设了一条直接通路,无需通过CPU。其中使用DMA接口(通道)作为一个小CPU,完成一些基本的读写功能。

DMA和CPU同时访问主存时,DMA优先,CPU需将总线控制权让出,因为高速IO设备的信息很容易流失。

具体的三种方法见书P203的图。

指令系统

默认按字寻址?

如变址寻址,基址寻址这样的寻址方式,如果有专用的寄存器,则可以隐含其地址;如果没有专用的,则需指定一个基/变址寄存器,那么指令中也需要加入寄存器地址。

本章不只研究传统计算机,存在地址长度大于存储字长的情况(可以用双字长指令)。

同一格式的指令如果只有一种寻址方式,就不需要寻址特征位了。

CPU的结构和功能

数据流

取值周期:注意PC+1是在取值周期的最后一步,它是一个信号,由CU发出直接令PC+1,不需要经ALU什么的

间址周期:注意IR,它存放当前的指令,在取值周期要将MDR送入IR,间址周期中,检查IR是否包含间址特征,如果包含则将MDR中的地址码部分传入MAR…因为IR一般不可随意读取(详见书P381的图,没有IR到总线的门)。获得实际地址后,还要将MDR传入IR一次来更新IR为当前执行的命令。(此处数据流书

写入主存时,似乎都是先发出写命令,再将要写的数据送入MDR?

运算

都可以选择使用两位符号位,高位符号位不移动进行算术移位,左移时低符号位复制高符号位

原码一位乘:

https://blog.csdn.net/qq_43355372/article/details/100139844

对于机器而言,每次都将部分积和乘数同时左移,部分积的低位正好可以放到乘数寄存器的高位上,乘数每次都取最后一位即可。

另设一个寄存器 $C$ 来计数,整体过程是:部分积从0开始,+ 右移 重复到所有乘数被移出。

最终部分积和乘数两个寄存器共同作为结果,两数符号位异或作为最后符号位。

注意点:运算过程中可能溢出到符号位上,但不影响,此处都进行逻辑移位,高位(符号位)补0。

补码乘法:

当乘数是正数时,直接按照原码一位乘方式计算(因为被乘数只涉及加减运算,在补码下无论正负都正确)

当乘数是负数时,可以将其补码拆分,如 1.0101 = 1.0000 + 0.0101,随后用正数部分相乘,结果再加上被乘数乘以 -1 的结果

注意点:通常采取双符号位,最高位为真实符号,进行算术移位,最高位保持不变,第二符号位跟着移动,补位按照补码方式补。

Booth算法:

无需对符号位分类讨论的补码乘法。

具体过程见书

注意点:乘数的符号位也参与运算,被乘数同样采用双符号位,总体过程是 $+\to$ ,重复到所有乘数被移出,但最后的符号位不用移出($+$ 比 $\to$ 多一次)

恢复余数法:

总体过程:- 上商 [恢复] 左移,重复到商够了后恢复好为止(商要和被除数位数一样)

加减交替法:

总体过程:-/+ 上商 左移 ,重复到商够为止

补码除法:

先根据 $x$ 与 $y$ 是否同号,加或者减 $y$

再:上商 左移 +/- 重复直到最后一次左移,给末尾商恒置1

上商时根据余数和 $y$ 的符号,相同上1不同上0,随后的 +/- 也根据此,若上了1则减 $y$,反之加 $y$


计算机组成原理复习笔记
http://www.lxtyin.ac.cn/2022/06/07/2022-06-07-计组复习/
作者
lx_tyin
发布于
2022年6月7日
许可协议