计算机组成原理复习笔记
博主此篇文档仅用于考试大纲整理复习,总结所有需要留意的考试点。
笔记总结顺序参照王道计组课程顺序,同时会参考b站up主“翼云图灵”,以便更高效复习。
一、计算机系统概述
1.计算机发展历程(略 仅提一下后面会见到的名词解释)
机器字长:计算机一次整数运算所能处理的二进制位数。
2.计算机硬件的基本组成
早期冯诺依曼机以运算器为中心,首次提出“存储程序”的思想即将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束;现代程序以存储器为中心,CPU=运算器+控制器。
3.各个硬件的工作原理
(1)主存储器
主存储器中由存储体、MAR(存储地址寄存器Memory Address Register)、MDR(存储数据寄存器Memory Data Register)组成。
存储体:数据在存储体内是按照地址存储的,每个地址对应一个存储单元。
MAR:MAR位数反映存储单元的个数,例如MAR=4,那么存储单元的个数就有个。
MDR:MDR位数=存储字长,例如MDR=16位,那么说明一个存储单元可以存放16bit,也是说明计算机一次整数运算处理的二进制位数是16位。
注意点:
1个字节(byte) = 8 bit , 1 B = 1 个字节,1 b = 1个bit;
存储单元:每个存储单元存放一串二进制代码;
存储字(word):存储单元中二进制代码的组合;
存储字长:存储单元中二进制代码的位数;
存储元:存储二进制代码的电子元件,每个存储元可存1bit;
(2)运算器
(3)控制器
知道了硬件的工作原理,需要了解计算机的工作过程,怎么从高级语言变成了机器可以识别的机器语言,可以去看王道的课程"1.2.2计算机各个硬件的工作原理",可视化讲解很详细,我就不在这里写了。
4.计算机软件(略)
指令集体系结构(ISA):软件和硬件之间的界面。涉及计算机系统的ISA,就是要定义一台计算机可以支持那些指令,以及每条指令的作用是什么、每条指令的用法是什么。
5.计算机系统的工作原理
6.计算机性能指标
这部分内容非常的重要,第一章考点就是这里,前面的内容只是让你有一个计算机系统的整体认识。这部分我会从各个硬件的评价指标过渡到整体计算机性能指标评价。
(1)存储器性能指标
在前面内容提到了存储器结构有MAR、MDR,MAR的位数反映了存储单元的个数,MDR位数决定了每个存储单元的大小。
总容量 = 存储单元个数 * 存储字长 bit = 存储单元个数 * 存储字长/8 Byte
例题:MAR有32位,MDR为8位,总容量 = * 8 bit = 4GB
k = M =
G =
T =
(2)CPU性能指标
CPU主频(时钟频率):CPU内数字脉冲信号振荡的频率。单位:赫兹Hz;
CPU时钟周期:是主频的倒数,单位:微秒、纳秒;
CPI(Clock cycle Per Instruction):执行一条指令所需的时钟周期数;(不同的指令,CPI不同。甚至相同的指令,CPI也会有变化);
执行一条指令的耗时(这里的耗时代表着多少秒,不是多少时钟周期数)= CPI * CPU时钟周期;
例题:某CPU主频为1000Hz,某程序包含100条指令,平均来看指令的CPI=3,该程序在该CPU上执行需要多久?
秒
CPU执行时间(整个程序的耗时)= CPU时钟周期数/主频 = (指令条数*CPI)/主频;
IPS(Instructions Per Second):每秒执行多少条指令。IPS = 主频/平均CPI
提问:
1.主频高的CPU一定比主频低的CPU快吗?
答:执行一条指令所需要的耗时 = CPI * 时钟周期数 = CPI / 主频;耗时还会取决于CPI的大小,A的主频为2GHz,平均CPI为10,B的主频为1GHz,平均CPI为1,A耗时比B多。
2.若A、B两个CPU的平均CPI相同,那么A一定更快吗?
答:也不一定,还要看指令系统,如果A不支持乘法指令,只能用多次加法实现乘法,而B支持乘法指令。
3.基准程序执行得越快说明机器性能越好吗?
答:基准程序中的语句存在频度差异,运行结果也不能完全说明问题。
二、数据的表示和运算
1.进位计数制
(1)r进制数:基数=r,每个数码位可能出现r种字符,逢r进1;
(2)r进制转十进制:r 进制的数值 = 各数码位与位权的乘积之和;
(3)二进制转八进制:每3个二进制对应一个八进制位;
(4)二进制转十六进制:每4个二进制对应一个十六进制位;
(5)十进制转r进制:
整数部分:除基取余法,先取得的“余”是整数的低位;
小数部分:乘基取整法,先取得的“整”是小数的高位;
(6)真值和机器数
真值:实际的带正负号的数值(人类习惯的样子);
机器数:把正负号数字化的数(存到机器里的样子);
2.定点数的表示
定点数的表示分为无符号数和有符号数,通常无符号数只需要表示成符合题目对应进制位数的数即可,但有符号数需要考虑符号位和四种编码形式(原码、反码、补码、移码)
无符号数没有符号位,相当于数的绝对值,n位的无符号数表示范围为0~
有符号数
原码:符号位用0/1表示,尾数表示该数的绝对值;
反码:将原码除了符号位全部取反;
补码:在反码基础上,末尾+1;
移码:在补码的基础上符号位取反,移码只能用于表示整数
提示:正数的补码就是移码本身,0的补码只有一个0000 0000;
将负数补码转回原码方法和原码转补码相同:尾数取反,末尾+1;
技巧:由x补 快速求 -x补 的方法:符号位、数值位全部取反,末尾+1;
3.C语言中的强制类型转换
(1)同类型间无符号转换为有符号:不改变数据内容,只改变解释方式。例如下面的程序所示,x 是短整型,占用2个字节16位,所以x为1110 1111 0001 1111,转换过来的y为1110 1111 0001 1111真值61215,只需要把y当成无符号数来转真值即可。
short x = -4321; //short占用2个字节
unsigned short y =(unsigned short) x;
(2)长整型变短整型:高位截断,保留低位。如下所示,从int类型转换为short类型,需要把原来的32位的高位(前16位)截断,留下低位,a:0x000286a1转换为c:0x86a1,真值为-31071。b:0xffff7751转换为d:0x7751,真值为30545。
int a = 165537 , b =-34991; //int 占用4个字节32位
short c = (short)a; //short 占用2个字节16位
short d = (short)b;
(3) 短整型变长整数:符号扩展(正数就0扩展,负数就1扩展)。如下所示,x为1110 1111 0001 1111(0xef1f),因为x为负数符号位为1,所以用1扩展后的数m为1111 1111 1111 1111 1110 1111 0001 1111(0xffffef1f)真值为-4321。
short x = -4321;
int m = x;
unsigned short n =(unsigned short) x;
unsigned int p = n;
4.数字电路补充内容
(1)逻辑门电路
这里仅搬运一个博主文章,大家可以细致去看(但对我们计组而言仅需要了解下面的图逻辑门电路画法,会认就可以了)数字电路基础——逻辑门-CSDN博客
基本逻辑运算的优先级:非 > 与 > 或(与、或可以类比乘法、加法; 如果有括号,括号的优先级更高)
(2)多路选择器&三态门
多路选择器:相当于电路的守门员,有多个输入、一个输出、一个控制信号,仅允许其中一个数据通过MUX。其中需要记住如果有k个输入,那么控制信号的位数m的个数如下图公式!
三态门:也是电路的守门员,根据信号决定是否让输入通过。三态门的控制信号只需要1bit,op=1表示允许数据通过;op = 0表示不允许数据通过。
5.加法器
在执行加法时,我们需要把被加数的本位、加数的本位
、来自低位的进位
、本位和
进行操作,
=
,当这个式子有奇数个1时,最后就是1。
需要记忆带标志位的加法器各个 标志位对应的判断标志。
OF溢出标志:带符号数加减运算是否溢出标志;只需要看最高位的进位异或
次高位的进位
的值,OF=1溢出,OF=0未溢出。
SF符号标志:带符号数加减运算的正负性;只需要看最高位的符号位,1负数,0正数。
ZF零标志:仅当运算结果所有bit全为0,即ZF = ,ZF才为1,此时表示运算结果为0。
CF进位/借位标志:无符号数加减法是否溢出。CF = 判断最高位和最低位的异或结果即可。
6.算术逻辑单元ALU
ALU是一种组合逻辑电路,实现了加减乘除与或非等功能,所以它是运算器的核心,由于加减乘除都基于加法实现,所以加法是ALU的核心。
ALU需要记住一个最重要的点:如果ALU支持k种功能,则控制信号位数。ALU的运算数AB还有输出运算结果F的位数要和计算机的机器字长相同。
7.移位运算
在十进制123.45中,当我们右移一位会变成1234.5,整个数字相当于×10。在二进制中右移一位相当于×2 ,左移相当于÷2。
算法移位:(1)原码:符号位不参与移位,左移、右移都补0;
(2)反码:符号位不参与移位,左移、右移都补0;
(3)负数补码:右移(同反码):高位补1,低位舍弃;左移(同原码):低位 补0,高位舍弃。
逻辑移位: 左移右移补0,移出的位舍弃。
8.定点数的加减运算
计组中我们一般用补码进行加减运算,步骤如下:
(1)将两个数AB的原码、补码写出来;
(2)如果是【A+B】补,那就是A补+B补;如果是【A-B】补,那就是A补+(-B)补;
(3)接下来,我们的问题转为了怎么求(-B)补,就是B补连同符号位一起取反加一;
(4)计算得到的补码数转回原码,再转成十进制真值;
怎么进行溢出判断呢?
采用一位符号位,根据数据位进位情况判断溢出。
符号位的进位CS 最高数值位的进位C1
上溢 0 1
下溢 1 0
即:异或逻辑,当CS和C1相异就溢出,相同不溢出。
9.无符号数的减法
A-B,A不变,将减数B全部按位取反加1,变成A+B(处理后的),得到的结果就是结果。当最高位产生的进位为0时,发生溢出。
10.定点数乘法运算
无符号整数的乘法过程:
带符号整数的乘法过程:
溢出判断:
11.定点数除法运算
无符号整数除法计算方法:看视频讲解过程理解运算过程
12.浮点数
浮点数有规范表示,不论是单精度还是浮点数,都是默认小数点前面的数是1,1.xxxx *2 的几次方来表示那个数。其中单精度浮点数规范表示如下图,阶码偏置为127(),阶码就是用原数2的几次方加上127。具体转换过程看下面的图...
双精度浮点数规范表示:
三、 存储系统
1.存储器基本概念
需要记住存储器的层次结构图(金字塔),从塔尖往下依次是寄存器、cache、主存、辅存、外存,并且越上面的造价越高、速度越快、容量越小。其中高速缓存cache、主存/内存可以直接被Cpu读写。
存储器性能指标:
(1)存储容量 = 存储字数 * 字长(MDR反映存储字长,MAR反映存储字数);
(2)单位成本 :每位bit价格 = 总成本 / 总容量;
(3)存储速度:数据传输率 = 数据的宽度/存储周期;
存取周期包括存取时间和恢复时间。
2.主存储器的基本组成
如上图所示是一个存储器芯片的组成基本原理,当我们提供n位地址后,对应了有个存储单元,所以总容量就是存储单元个数×存储字长,之前的内容中见到的都是图中第三行的表示方法,以后会见到诸如“8k×8位存储芯片”的表示,第一个8k代表存储单元个数为8k =
,第二个8代表一个存储单元有8位,对应左图就是那么一行有8个MOS管组成一个电路。
需要记忆不同单位代表了2的几次方。
3.SRAM和DRAM
DRAM(栅极电容)常用来制造主存、SRAM(双稳态触发器)常用来制造Cache。和字面意思一样,双稳态触发器相对于栅极电容更稳定集成度低功耗大些。
需要记忆SRAM和DRAM的对比性能,如下图所示:
DRAM的刷新:
下面这张图展示了存储器的简单模型有根选通线以及把存储器排列为了
×
的矩阵(行地址、列地址),减少了选通线的数量,原来是
现在变成了
。通常DRAM刷新周期为2ms一次(以行为单位,一次刷新一行),可以在译码阶段刷新。