第一章——计算机系统概述
一、数字计算机的主要组成结构
在电子计算机里,相当于算盘功能的部件,我们称之为运算器;相当于纸那样具有“记忆’功能的部件,我们称之为存储器;相当于笔那样把原始解题信息送到计算机或把运算结果显示出来的设备,我们称之为输入设备或输出设备;而相当于人的大脑,能够自动控制整个计算过程的,称之为控制器。图 1.2 所示为数字计算机的主要组成结构,其中双线 及箭头表示数据代码传送通路。
二、指令的形式
每条指令应当明确告诉控制器,从存储器的哪个单元取数,并进行何种操作。这样可知指令的内容由两部分组成,即操作的性质和操作数的地址。前者称为操作码,后者称为地址码。因而上述指令的形式如下:
指令数码化以后,就可以和数据一样放入存储器。存储器的任何位置 既可以存放数据也可以存放指令,不过一般是将指令和数据分开存放。将解题的程序(指令序列)存放到存储器中称为存储程序,而控制器依据存储的程序来控制全机协调地完成 计算任务叫做程序控制。存储程序并按地址顺序执行,这就是 冯·诺依曼型计算机 的设计思想,也是机器自动化工作的关键。由于指令和数据放在同一个存储器,称为冯·诺依曼结构;如果指令和数据分别放在两个存储器,称为哈佛结构。显然后者结构的计算机速度更快。
三、控制器的基本任务
计算机进行计算时,指令必须是按一定的顺序一条接一条地进行。控制器的基本任务,就是按照计算程序所排的指令序列,先从存储器取出一条指令放到控制器中,对该指令的操作码由译码器进行分析判别,然后根据指令性质,执行这条指令,进行相应的操作。接着从存储器取出第二条指令,再执行这第二条指令。以此类推。通常把取指令的一段时间叫做 取指周期 ,而把执行指令的一段时间叫做 执行周期 。每取出一条指令,控制器中的 指令计数器就加1 ,从而为取下一条指令做好准备,这也就是指令在存储器中顺序存放的原因。
在计算机系统中,运算器和控制器通常被组合在一个集成电路芯片中,合称为中央处 理器(中央处理机),简称处理器,英文缩写为 CPU。
四、指令流和数据流
通常把组成一个字的二进制位数叫做字长。一般来讲,取指周期中从内存读出的信息流是指令流,它流向控制器;而在执行周期中从内存读出的信息流是数据流,它由内存流向运算器。如果某字代表要处理的数据,则称为数据字;如果某字为一条指令,则称为指令字。控制器可以区分开哪些是指令字,哪些是数据字。
五、适配器与输入/输出设备
计算机的输入/输出设备通常称为外围设备 。这些外围设备有高速的也有低速的,有机电结构的,也有全电子式的。由于种类繁多且速度各异,因而它们不是直接与高速工作的主机相连接,而是通过 适配器部件 与主机相联系。适配器的作用相当于一个转换器。它可以保证外围设备用计算机系统特性所要求的形式发送或接收信息。
七、计算机的系统软件
计算机的系统软件包括:
1.各种服务性程序(如调试、诊断程序)。
2.语言类程序(如汇编程序、编译程序、解释程序等)。
3.数据库管理系统
4.操作系统软件
八、C 语言的转换层次图
九、计算机系统的层次结构图
第二章——运算方法和运算器
一、 数据格式
在计算机中,小数点及其位置都是隐含规定的,有两种隐含方式:定点格式和浮点个数。
二、定点数的表示方法
所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。
定点小数:小数点隐含固定在数据最高位左边、符号位右边。整数位用于表示符号位。定点小数用于表示纯小数。
定点整数:小数点位置隐含在固定在最低位之后,最高位用于表示符号位。定点整数用于表示纯整数。
三、浮点数的表示方式
浮点数:小数的位置由阶码规定,因此是浮动的。浮点数用于表示实数。计算机中通常把浮点数分成阶码和尾数两部分来表示。浮点数 = 尾数 * 基数^阶码。
例如:在计算机中表示二进制数11100.101(小数点向前移动了5位,5的二进制等于101)
浮点数的存储格式:
例如,假设16位虚拟机中,阶码占5位,尾数占9位,数符、阶符各占1位。实数28.625的浮点数可表示为N = 11100.101(二进制数) = (0.11100101)x2^101 则该数在16位虚拟机中的浮点数表示为:
四、原码、反码、补码的计算
1.A = -3/16, B = 9/32, 求A+B
2. A = -87, B = 53, 求A-B
五、变形补码
负数将补码除符号位外取反+1,再在前面添加双符号位。00表示正数,11表示负数。正数直接加双符号位。
六、BCD码
用四位二进制数表示一位数
第三章——存储系统
一、多级存储系统的组成
随着半导体技术的发展,CPU 和内存储器的 工作速度都在提高,但 CPU 速度提高得更快,而 更高速度的内存储器价格非常高。为此,人们在 常规内存储器与 CPU 之间增加了速度更高但容 量更小的半导体高速缓冲存储器,即 cache,用 于存放常规内存中正在使用的一些信息块的副 本。常规的内存被称为主存。这样,内存储器就 分为 cache 和主存两部分,由此构成了三级存储 系统。
对性能要求更高的系统还可以将 cache 分 成一级(L1)cache 和二级(L2)cache,甚至更多级。
二、存储器容量的扩充
1. 若主存储器的总容量为2M×128位,由256K×16位的DRAM芯片构成,请画出存储器扩展示意图,并在图中标明各种信号线的名称和数量。
三、cache 存储器
如图 3.28 所示,cache 是介于 CPU 和主存 M2 之间的小容量存储器,但存取速度比主存快,容量远小于主存。cache 能高速地向 CPU 提供指令和数据,从而加快了程序的执行速度。
在一个程序执行期间,设 Nc 表示 cache 完成存取的总次数,Nm 表示主存完成存取的总次数,h 定义为命中率,则有:
若 tc 表示命中时的 cache 访问时间,tm表示未命中时的主存访问时间,1–h 表示未命中 率(缺失率),则 cache/主存系统的平均访问时间 ta 为:
我们追求的目标是,以较小的硬件代价使 cache/主存系统的平均访问时间 ta 越接近 tc 越好。e 表示访问效率,则有:
CPU执行一段程序时,cache完成存取的次数为2420次,主存完成存取的次数为80次。已知cache存储周期为40ns,主存存储周期为240ns,请计算cache的命中率、cache/主存系统的平均访问时间和效率。
四、主存与 cache 的地址映射
1. 全相联映射方式
将主存中一个块的地址(块号)与块的内容(字)一起存于 cache 的行中,其中块地址存于 cache 行的标记(tag)部分中。这种带全部块地址一起保存的方法,可使主存的一个块直接复制到 cache 中的任意一行上,冲突概率小,非常灵活。
主存中任意一块都能存放到 cache 中任意一行。如果主存有256块 = 2^8,全相联映射的标记(tag)位数需要8位。若主存块数 = 2^s,则标记位数 = s位。
2.直接映射方式
直接映射方式也是一种多对一的映射关系,但一个主存块只能拷贝到 cache 的一个特定 行位置上去,冲突概率大。cache 的行号 i 和主存的块号 j 有如下函数关系:
i = j mod m
cache 中一行能存放主存中特定的块。如果主存有256块 = 2^8,cache 行数有8行 = 2^3,直接映射的标记(tag)位数需要8 - 3 = 5位。若主存块数 = 2^s,cache 行数 = 2^r,那么标记位数 = s - r。
3.组相联映射方式
组相联映射方式综合了全相联映射方式和直接映射方式,被普遍采用。这种方式将 cache 分成 u 组,每组 v 行。主存块存放到哪个组是固定的,取决于主存块在主存区中是第几块。至于存到该组哪一行是灵活的,即有如下函数关系:
m = u * v
组号 q = j mod u
把 cache 中的几行分为一组,主存中特定的几行存放到 cache 中特定的一组。若主存有256块 = 2^8,cache 组数u = 2^2,cache 的行数 8 = 4(组) * 2(一组两行),标记位数 = 8 - 2 = 6。若主存块数 = 2^s,cache 组数u = 2^d,cache 行数m = u * v,标记位数 = s - d。
五、cache 的替换策略
cache 工作原理要求它尽量保存最新数据。当一个新的主存块需要拷贝到 cache,而允许存放此块的行位置都被其他主存块占满时,就要产生替换。
1.最不经常使用(LFU)算法
LFU 算法认为应将一段时间内被访问次数最少的那行数据换出。为此,每行设置一个计数器。新行调入后从 0 开始计数,每访问一次(命中一次),被访行的计数器增 1。当需要替换时,对这些特定行的计数值进行比较,将计数值最小的行换出,同时将这些特定行的计数器都清零。
替换一段时间内命中次数最少的数据,也就是一段时间内最不经常使用的数据。为每行都设置一个计数器,每命中一次,命中行的计数器加1,需要替换时,对特定行的计数器的计数值进行比较,把计数值小的换出,并且新行调入后从0开始计数,这样就有一个缺点:替换的新行容易被再次替换。
2.近期最少使用(LRU)算法
LRU 算法将近期内长久未被访问过的行换出。为此,每行也设置一个计数器,但它们是 cache 每命中一次,命中行计数器清零,其他各行计数器增 1。当需要替换时,比较各特定行的计数值,将计数值最大的行换出。这种算法保护了刚复制到 cache 中的新数据行,符合 cache 工作原理,因而使 cache 有较高的命中率。
3.随机替换
随机替换策略实际上是不要什么算法,从特定的行位置中随机地选取一行换出即可。 这种策略在硬件上容易实现,且速度也比前两种策略快。缺点是随意换出的数据很可能马 上又要使用,从而降低命中率和 cache 工作效率。
六、cache 的写操作策略
由于 cache 的内容只是主存部分内容的副本,它应当与主存内容保持一致。而 CPU 对 cache 的写入更改了 cache 的内容。如何与主存内容保持一致,可选用如下三种写操作策略。
1.写回法(write back, copy back)
当 CPU 写 cache 命中时,只修改 cache 的内容,而不立即写入主存;只有当此行被换出时才写回主存。
2.全写法(write through)
当写 cache 命中时,cache 与主存同时发生写修改,因而较好地维护了 cache 与主存的内容的一致性。
3.写一次法(write once)
第一次命中使用全写法,之后使用写回法。
第四章——指令系统
一、指令格式
二、操作码
设计计算机时,对指令系统的每一条指令都要规定一个操作码。一般来说,一个包含 n 位的操作码最多能够表示 2n 条指令。
三、地址吗
根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式,这是早期计算机指令的基本格式。在三地址指令格式的基础上,后来又发展成二地址格式、 一地址格式和零地址格式。各种不同操作数的指令格式如下所示:
(1)零地址指令的指令字中只有操作码,而没有地址码。例如,停机指令就不需要地址 码,因为停机操作不需要操作数。
(2)一地址指令只有一个地址码,它指定一个操作数,另一个操作数地址是隐含的。
(3)二地址指令常称为双操作数指令,它有两个地址码字段 A1 和 A2,分别指明参与操 作的两个数在内存中或运算器中通用寄存器的地址,其中地址 A1兼作存放操作结果的地址。
二地址指令格式中,从操作数的物理位置来说,又可归结为三种类型:
①访问内存的指令格式,我们称这类指令为存储器存储器(SS)型指令。即参与操作的数都放在内存里。从内存某单元中取操作数, 操作结果存放至内存另一单元中,因此机器执行这种指令需要多次访问内存。
②访问寄存器的指令格式,我们称这类指令为寄存器寄存器(RR)型指令。从寄存器中取操作数,把 操作结果放到另一寄存器。
③访问寄存器和内存的指令格式,我们称这类指令为寄存器-存储器(RS)型指令,执行此类指令时,既要访问内存单元,又要访问寄存器
(4)三地址指令字中有三个操作数地址 A1,A2 和 A3,A1 为被操作数地址,也称源操作数地址;A2 为操作数地址,也称终点操作数地址; A3 为存放操作结果的地址。
四、指令字长
一个指令字中包含二进制代码的位数,称为指令字长度。而机器字长是指计算机能直接处理的二进制数据的位数。
指令字长度等于机器字长度的指令,称为单字长指令;指令字长度等于半个机器字长度的指令,称为半字长指令;指令字长度等于两个机器字长度的指令,称为双字长指令。
五、操作数基本寻址方式
在指令执行过程中,操作数的来源一般有三个:①由指令中的地址码部分直接给出操作数,虽然简便快捷,但是操作数是固定不变的;②将操作数存放在 CPU 内的通用数据寄存器中,这样可以很快获取操作数,但是可以存储的操作数的数量有限;③更一般化的方式是将操作数存放在内存的数据区中。对于内存寻址,既可以在指令中直接给出操作数的实际访存地址(称为有效地址),也可以在指令的地址字段给出所谓的形式地址,在指令执行时,将形式地址依据某种方式变换为有效地址再取操作数。 形成操作数的有效地址的方法,称为操作数的寻址方式。
例如,一种单地址指令的结构如下所示,其中用 X、I、A 各字段组成该指令的操作数地址。
形式地址 A,也称偏移量,它是指令字结构中给定的地址量。寻址方式特征位,此处由间址位和变址位组成。如果这条指令无间址和变址的要求,那么形式地址就是操作数的有效地址。如果指令中指明要变址或间址变换,那么形式地址就不是操作数的有效地址, 而要经过指定方式的变换,才能形成有效地址。因此,寻址过程就是把操作数的形式地址, 变换为操作数的有效地址的过程。(也就是说,如果一条指令没有间址和变址,那么形式地址A存放的就是操作数;如果一条指令有间址和变址,那么形式地址A存放的是需要经过一系列变换才能得到操作数的地址)。
1. 隐含寻址
这种类型的指令,不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。例 如,以运算器中累加寄存器 AC 中的数据为隐含的被操作数,指令字的地址码字段所指明的数为操作数,操作结果又放回累加寄存器 AC 中,而累加寄存器中原来的数即被覆盖掉了。
2. 立即寻址
指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。
3. 直接寻址
在指令格式的地址字段中直接指出操作 数在内存的地址。如果用 D 表示操作数,那么直接寻址的表达式为 D=(A)。
4.间接寻址
指令地址字段中的形式地址 A 不是操作数 D 的真正地址,而是操作数地址的指示器。也将是通过形式地址A得到一个地址,这个地址才存放的是操作数D。
若寻址特征位 I=0,表示直接寻址,这时有效地址 EA=A;若 I=1,则表示间接寻址, 这时有效地址 EA=(A)。
5.寄存器寻址
当操作数不在内存中,而是放在 CPU 的通用寄存器中时,可采用寄存器寻址方式。此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。
6.寄存器间接寻址
寄存器间接寻址与寄存器寻址的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。
7.偏移寻址
一种强有力的寻址方式是直接寻址和寄存器间接寻址方式的结合,它有几种形式,我 们称它为偏移寻址。有效地址计算公式为
常用的三种偏移寻址是相对寻址、基址寻址、变址寻址。
相对寻址:隐含引用的专用寄存器是程序计数器(PC),即 EA=A+(PC),它是当前 PC 的内容加上指令地址字段中 A 的值。
基址寻址:被引用的专用寄存器含有一个存储器地址,地址字段含有一个相对于该地址的偏移量(通常是无符号整数)。
变址寻址:地址域引用一个主存地址,被引用的专用寄存器含有对那个地址的正偏移量。
六、RISC指令系统(精简指令系统)
RISC 的目标绝不是简单的缩减指令系统,而是使处理器的结构更简单,更合理,具有 更高的性能和执行效率,并降低处理器的开发成本。基于三要素的 RISC 机器的特征如下。
(1)使用等长指令。
(2)寻址方式少且简单,绝不出现存储器间接寻址方式。
(3)只有取数指令、存数指令访问存储器。指令中最多出现 RS 型指令,绝不出现 SS 型指令。
七、第4章练习题
答案:F
(1) 寄存器
(2) 寄存器间接
(3) 立即
(4) 直接
(5) 间接
(6) 相对、基址、变址;偏移
(1)直接
(2)相对
(3)变址
(4)基址
(5)间接
(6)间接基址
(7)立即
第五章——中央处理器
一、CPU的基本组成
运算器和控制器是组成 CPU 的两大核心部件。随着 VLSI 技术的发展,CPU 芯片外部 的一些逻辑功能部件,如浮点运算器、cache、总线仲裁器等往往集成到 CPU 芯片内部。
控制器:由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成, 它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。
运算器:由算术逻辑运算单元(ALU)、通用寄存器、数据缓冲寄存器(DR)和程序状态 字寄存器(状态条件寄存器,PSWR)组成,它是数据加工处理部件。
二、CPU中的主要寄存器
(1)数据缓冲寄存器(DR):数据缓冲寄存器用来暂时存放 ALU 的运算结果。
(2)指令寄存器(IR) :指令寄存器用来保存当前正在执行的一条指令。
(3)程序计数器(PC):用于确定下一条指令的地址。
(4)数据地址寄存器(AR):数据地址寄存器用来保存当前 CPU 所访问的数据存储器(简称数存)单元的地址。
(5)通用寄存器:当算术逻 辑单元(ALU)执行算术或逻辑运算时,为 ALU 提供一个工作区。
(6)程序状态字寄存器(PSWR):程序状态字寄存器又称为状态条件寄存器,保存由算术运算指令和逻辑运算指令运算或测试结果建立的各种条件代码。
三、指令周期和CPU周期
指令周期:CPU从内存取出一条指令并执行该条指令需要的时间。
CPU周期:从内存读取一条指令所需要的最短时间。
四、微命令和微操作、微指令和微程序
控制部件与执行部件的一种联系,就是通过控制线。控制部件通过控制线向执行部件发出各种控制命令,通常把这种控制命令称为微命令,而执行部件接受微命令后所进行的操作,称为微操作。
微指令格式中的顺序控制部分用来决定产生下一条微指令的地址。下面我们将会知道, 一条机器指令的功能是用许多条微指令组成的序列来实现的,这个微指令序列通常称为微程序。
五、第5章例题
(1)IR;指令寄存器
(2)AR;数据地址寄存器
(3)PC;程序计数器
(4)DR;数据缓冲寄存器
(5)PSW;程序状态寄存器
答案:BC。L1 LAD R6,B;M(B)-R6,M(B)是存储器单元。以分号为界,前面是指令,后面是对指令的解释说明。指令I1先将存储单元M(B)的值写入R6,然后指令I2将乘积写入R6,所以发生“写后写”(WAW)相关。另外,指令I2还读取了R6的值,所以同时发生“写后读”(RAW)相关。
第六章——总线系统
一、总线的基本概念
总线是构成计算机系统的互联机构,是多个系统功能部件之间进行数据传送的公共通 路。借助于总线连接,计算机在各系统功能部件之间实现地址、数据和控制信息的交换, 并在争用资源的基础上进行工作。 一个单处理器系统中的总线,大致分为三类:
(1)CPU 内部连接各寄存器及运算部件之间的总线,称为内部总线。
(2)CPU 同计算机系统的其他高速功能部件,如存储器、通道等互相连接的总线,称为系统总线。
(3)中、低速 I/O 设备之间互相连接的总线,称为 I/O 总线。
二、总线仲裁
主方(主设备)可以启动一个总线周期,而从方(从设备)只能响应主方的请求。每次总线操作,只能有一个主方占用总线控制权,但同一时间里可以有一个或多个从方。主方:申请使用总线的设备;从方:配合主方申请的设备。
第七章——外围设备
一、外围设备定义
外围设备这个术语涉及相当广泛的计算机部件。事实上,除了 CPU 和主存外,计算机系统的每一部分都可作为一个外围设备来看待。
持续更新
参考书目
白中英,戴志涛等. 计算机组成原理(第六版). 科学出版社, 2019
定点数与浮点数_哔哩哔哩_bilibili
数的表示及加减法运算_哔哩哔哩_bilibili
进制转换:BCD码_哔哩哔哩_bilibili
【浅析】CPU中的指令周期、CPU周期和时钟周期 - 知乎 (zhihu.com)