计算机组成原理
文章目录
第一章 计算机系统概述
跳转链接
https://www.bilibili.com/video/BV1BE411D7ii?share_source=copy_web
1.0 你好,我是计算机
低电平/高电平
低电平对应0,高电平对应1;
传递数据方式
通过电信号传递数据
通过电路传递多个二进制数位,一个数位称为1bit
1.1 什么是计算机系统?
计算机系统 = 硬件 + 软件
软件
- 系统软件:用来管理整个计算机系统
- 应用软件:按任务需要编制成的各种程序
硬件——硬件的更新迭代
- 冯诺依曼用 电子管 作为逻辑元件
- 贝尔实验室发明 晶体管 代替电子管
- 集成电路
- 超大规模集成电路
仙童半导体公司–>inter && AMD
软件发展
- 机器语言0101010
- 汇编语言
- C++
- Java/python
计算机发展趋势
- 更微型、多用途
- 更巨星、超高速
1.2计算机硬件的基本组成
1.2.1冯诺依曼结构
存储程序的概念:将指令以二进制代码的形式先输入计算机的主存储器
计算机的五大部件及其功能作用:
输入设备–>运算器–>存储器–>控制器–>输出设备
输入设备:将信息转换成机器能识别的形式二进制
运算器(中心):进行算术运算和逻辑运算
存储器:存放数据和程序
指令和数据用二进制表示,指令由操作码和地址码组成
控制器:指挥程序运行
输出设备:将结构转换成人们熟悉的形式
软件和硬件在逻辑上是等效的
1.2.2现代计算机结构
以存储器为中心
这里有两个图
CPU == 主存储器 + 运算器 + 控制器
1.2.3CPU的内部细节
主存储器相关术语
- 存储体:数据按照地址存储,每一个地址对应一个存储单元
- 存储单元:用于存放一串二进制代码
- 存储字:存储单元中二进制代码的组合
- 存储字长:存储单元中二进制代码的位数
- 存储元:存储二进制的电子元件,每个存储元可存储1bit
- MAR(存储地址寄存器):位数反应存储单元的个数
- MDR(存储数据寄存器):MDR位数==存储字长
- 例:
- MAR = 4位–>共有2^4个存储单元
- MDR = 16位 -->每个存储单元可存放16bit
- 注意:1字节(byte)=8bit 1B = 1个字节
1.2.4运算器的基本组成
运算器
ACC【accumulate】:累加器,用于存放操作数或运算结果
MQ【multiple- quotient register】: 乘商寄存器,乘除运算时,,存放操作数或运算结果
X 【arithmetic and logic unit】 : 通用寄存器,存放操作数
ALU: 算数逻辑单元,通过内部复杂的电路实现算术运算、逻辑运算
控制器
CU【control unit】:控制单元,分析指令,给出控制信号
IR【instruction register】:指令寄存器,存放当前指令
PC【program counter】:程序计数器,存放下一条指令地址,自动加1
★工作过程
- pc指向第0 条主存地址,将指令发送给MAR
- MAR接收到指令去存储体中找到对应的地址存放的内容,发往MDR
- MDR得到的指令被取走,放在了IR
- IR将其操作码送到CU分析
- CU将地址码指明的内存单元里的数据取出来,并且放在ACC里
- 就把地址码放在主存的MAR当中,MAR变换
- MAR从存储体找出改地址对应的数据,并且放到MDR
- MDR又被传送到ACC累加器中
符号表示
(PC)–>MAR
M(MAR)–>MDR
(MDR)–>IR
取指令结束PC+1–>PC
OP(IR)–>CU
分析结束
AD(IR)–>MAR
M(MAR)–>MDR
(MDR)–>ACC
执行指令结束
1.3计算机系统的层次结构
1.3.1五层结构
下层是上层的基础
1.3.2三个级别
高级语言、汇编语言、机器语言
汇编程序和解释成语的区别
- 汇编:将汇编语言翻译成机器语言
- 解释:高级语言翻译成机器语言
1.4存储器的性能指标
1.4.1存储器的容量
MAR位数反应存储单元最多支持多少个
4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|
16 | 32 | 64 | 128 | 256 |
MDR反应每个存储单元的大小
2^10=K
2^20=M
2^30=G
2^40=T
1.4.2性能指标–CPU
CPU主频
CPU内数字脉冲信号震荡的频率
时钟周期
每个脉冲信号的使劲按称为一个CPU的时钟周期,单位微妙/纳秒
CPU主频=1/CPU时钟周期
CPI
执行一条指令所需的时钟周期
CPU执行时间
CPU时钟周期 / 主频=(指令条数*CPI)/ 主频
Q1:主频高的CPU一定比主频低的CPU快吗?
A: 这里要考虑到主频和CPI,所以不一定
Q2:若上两个CPU的平均CPI相同,那么A一定更快吗
A: 不一定,还要看指令系统,如A不支持乘法指令,就只能用多次加法指令来实现乘法
Q3:基准程序执行的越快,机器性能越好吗?
A: 也不是,基准程序语句存在频度差异
IPS
(Instructions Per Second)每秒执行多少条指令
ips=主频/平均cpi
FLOPS
(Floating-point Operations Per Second)每秒执行多少次浮点运算
1.4.3系统整体的性能指标
数据通路带宽
数据总线一次所能并行传送信息的位数
吞吐量
系统在单位时间内处理请求的数量
响应时间
从用户向计算机发送一个请求,到系统对该请求作出响应并获得它所需要的结果的等待时间
包括:
CPU时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、I/O操作、操作系统开销等时间)
1.4.4动态测试
基准程序:用来测量计算机处理数的的一种实用程序,以便于被测量的计算机性能可以于同程序的其他计算机性能进行比较
第二章 数据的表示和运算
2.1进制转换
2.1.1 进位计数制
权重表示
真值和机器数
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式,正负号需要被“数字化”
2.1.2 BCD码
用二进制编码的十进制
8421码
四个权值不变,从高位到低位是8421
映射关系:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
加法运算
在加法运算的8421码中,1010~1111没有定义你如果落在这个区间里面,就+6,这时向高位进了一位,此时低4位保留下来的就是个位的,高四位表示十位
余3码
无权码
计算规则:8421码的基础上加(0011)_2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 |
2421码
权值不固定,从高位到低位分别是2421
0-4第一位都是0;5-9第一位都是1
2.1.3字符与字符串
ASCII编码128个
32-126是可印刷字符,其余为控制通信字符
大写字母A–65 小写a–97
GB2312
分为94个区94个位置
放置信息交换时与控制/通信字符冲突,再加上20H
32-125冲突,+上80H-->汉字内码
多字节数据(汉字)
采取大小端存储模式
大端模式:将数据的最高有效字节存放在低地址单元中
小端模式:将数据的最高有效字节存放在高地址单元中
2.1.4奇偶校验
码字
有若干代码组成的一个字,将两个码字逐位进行对比,具有不同位的个数称为两个码字间的距离
信息 | A | B | C | D |
---|---|---|---|---|
编码 | 00 | 01 | 10 | 11 |
A~B之间的距离是1,因为有一个二进制位不同
码距
一种编码方案肯工会有若干个合法码字,各合法码字间的最小距离称为”码距“
校验原理
当d = 1时,无检错能力;当d=2时,具有检错能力; 当d>=3时,若设计合理,可能具有检错、纠错能力
奇校验码
整个校验码中1的个数为奇数
_1001101,1的个数是偶数,爱最高位添加一个1
偶校验码
整个校验码中1的个数为偶数
_1001101,偶数个1最高位添0
奇偶校验局限性
当在传输中有偶数个bit位发生了跳变,是检测不出来的
硬件实现
进行异或运算(模2加):仅当二者不同时为1
00得0 01得1 10得1 11得0
偶校验异或后为1则错误
2.1.5海明码
设计思路
将信息位分组进行偶校验->多个校验位–>多个校验位标注出错位置
n | 1 | 2~4 | 5~11 | 12~26 |
---|---|---|---|---|
k | 2 | 3 | 4 | 5 |
求解步骤:
确定校验位数量–> 确定校验位的分布–>求校验位的值–>检查纠错
H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|
D4 | D3 | D2 | P3 | D1 | P2 | P1 |
1 | 0 | 1 | 0 |
校验位Pi 放在海明位号为2^i-1的位置上
也就是1 2 4 8 16 ,信息为按顺序放到其余位置
-
确定海明码的位数
-
确定校验码的分布
-
求校验位的值
- 将信息位转化成二进制竖着写
- 从后往前。位数为1的归为P1区域
- 依次进行
- n个分组进行偶校验
- 得出来的值就是校验位的值
-
纠错
-
没有错
三个校验位与其对应的信息位进行偶校验,得到的结构是000
-
错了
异或后得出得结果从高到低,就得到了出错位置
-
-
补充
海明码的检错纠错能力:
- 纠错能力——1位
- 检错能力——2位
全校验位
S1S2S3=000 ,且全体偶校验成功–>无错误
S1S2S3!=000, 且全体偶校验失败–>1位错误,纠正即可
S1S2S3!=000,且全体偶校验成功–>2位错误,需重传
2.1.6循环冗余校验码
思想
数据发送、接受方约定一个除数,k个信息为+r个校验位作为被除数,添加校验位后,需保证出发的余数为0
其中涉及到模2除和模2减
解题步骤
-
确定K、R以及生成多项式对应的二进制码
K是信息码,R是生成多项式最高次幂,他俩加起来就是校验码的位数
G(X)= X^3 + X ^2 + 1==》
1 * X^3 + 1 * X ^2 + 0 * X^1 + 1 * X ^0
得到对应二进制码1101
-
移位
信息码左移R位,低位补零
-
相除
用生成多项式进行模2除法,产生余数,就是CRC校验码
-
检错和纠错
发送方:C9C8C7C6C5C4C3C2C1C
接收方用约定好的1101进行迷模2除,余数为零,代表没有出错
余数为010代表C2出错
这里注意,余数和出错位置之间没有关系
对于确定的生成多项式,出错位于余数是相对应的
K个信息位,R个校验位,是生成多项式的最高位,若生成多项式选择得当,且2^R >=K+R+1,则CRC码可纠正一位,实际中一般只用于检错
特点
- 可检测出所有奇数个错误
- 双比特错误
- 小于等于校验位长度的连续错误
第一个余数后加0循环
2.2各种码
2.2.1定点数
小数点的位置固定
无符号数
整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。通常只有无符号整数,没有无符号小数。
表示范围
8位二进制数,28种不同状态,0~255=28-1
n位无符号数表示的范围是:0~2^n -1
有符号数
第一位是符号位,后面是数值围位
表示范围
真值0有两种形式:+0 和 -0
移码
补码的基础上将符号位取反,只能表示整数
小技巧
已知X的补码求-X的补码
符号为、数值位全部取反,末位+1
2.2.2补码的加减运算
可以将减法操作转变为等价的加法,ALU中无需集成减法器。执行减法操作时,符号位一起参与运算
模 - |a| = a 的补数
x- a = x - |a|=x + a 的补码
任何运算在(mod2^8)后只保留最低8位
2.2.3定点数的运算
移位运算
通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法
右移
高位补零,低位舍弃。若舍弃的位=0,相当于/2;若舍弃的位!=0,则会丢失精度。
左移
低位补零,高位丢弃。若舍弃的位=0,相当于X2 ;若舍弃的位!=0,则会出现严重误差
原码的算术移位
——符号为保持不变,仅对数值位及逆行移位
反码的算术移位
正数的反码和原码相同,则高位补零、低位补零
负数的反码数值位与原码相反,则高位补1 ,低位补1
补码的算术移位
正数的反码和原码相同,则高位补零、低位补零
负数补码=反码末尾+1,导致反码最右边几个连续的都因为进位而变为0,直到进位碰到第一个0为止。
B的补码求出-B的补码,这里B是负数从右边起,1–>0,直到出现第一个0,变了以后就不变了
B = -11000
他的原码就是1001 1000反码11100111补码就是11101000
找到右边的第一个1 左边全部取反得到00011000就是-B的补码
补码左移添0,右移添1
逻辑移位
逻辑右移:高位补零,低位舍弃
逻辑左移:低位补零,高位舍弃
可以看作是对无符号数的算术移位
循环移位
移位后,移出来的那位去补空出来的
2.2.4加减运算的溢出判断
加法运算
减法运算
减数符号取反,转变为加法
补码的加减运算
补码变原码:从右边起,找到第一个1 ,他左边的所有数值位全部取反,就直接得到原码
他和他右边的数值和原码保持一致,左边的部分和反码保持一致。
溢出判断
正数加正数出现上溢
负数加负数出现下溢
一位符号为判断
进位情况判断
双符号位判断
把位权小于4的保留,大于4 的舍去
双符号位实际存储时只存储一个符号位,运算时会临时赋值一位
符号扩展
8–>16,补0补1
定点整数补码是右边的1 的左边不变,而定点小数是右边的1 的左边也是不变
补码保留一致性,左原右反