28号考计算机组成课,mooc学习笔记。
计算机系统概述
计算机组成课程介绍
核心专业基础课课,在课程体系中起着承上启下的作用。课程需要汇编语言、数字逻辑相关知识。
需要我们构造观+系统观+工程关的而学习视角和学习方法 。
冯诺依曼结构原理与结构分析
概述
①解决问题的程序输入(如C语言 编译成汇编语言,指令的机器码会存在指令存储器里)计算机的主存后才能让CPU访问
②按照指令地址访问存储器并取出指令,指令机器码经过CPU解析,生成控制信号等
冯诺依曼计算机组成
运算器
控制器
存储器
输入输出设备
鼠标键盘、网卡、扫描仪等
显示器、声卡、网卡、打印机等
软件系统
软件:可运行的思想和内容的数字化
思想:算法、规律、方法-----程序表达
内容:图像、图形、数据、声音、文字等被处理的对象
软件的表现形式:程序和数据
数据:以二进制表示的信息
软件的核心:算法
软件的分类:系统软件+支持软件+应用软件
硬件与软件系统之间的相互关系:
相互依存:硬件是软件运行的基础,软件的正常运行是硬件发挥作用的重要途径。计算机系统必须配备完善的软件系统才能正常运行,且应充分发挥其硬件的功能
逻辑等效性:某些功能可以由硬件实现,可由软件实现
协同发展:软件随硬件技术的迅速发展而发展,软件的不断发展又促进硬件的更新
计算机的层次结构:由上至下依次为应用程序,高级语言,汇编语言,操作系统,指令集架构层,伪代码层(MIPS中的RWrite=1,Branch=0…),硬件逻辑层
透明性概念:本来存在的事物或属性,从某个角度去看,却好像不存在。如硬件的的特性对C语言程序设计者而言就具有透明性。
系统观概念:当硬件结构发生变化时要想到可能对软件产生的影响;不同类型的软件对硬件有不同的要求
(并且编程是和CPU相关的,每当有新的CPU出来的时候,开发者可以去查询,充分发挥CPU功能)
软硬件的分界线:即软硬件的接口,是指令操作硬件的接口,因此指令格式以及指令的设计与硬件关联!
计算机性能评价
本节需要学习几个指标与公式
非时间指标
1)机器字长:
机器一次能处理的二进制位数。由加法器、寄存器位数决定,一般与内部寄存器的位数相等(字长),字长越长,表示数据的范围就越大了
2)CPU和主存之间的总线宽度:
数据总线一次能并行传送的最大信息位数。一般指的是运算器与存储器之间的数据总线位数
3)主存容量与存储带宽:
主存容量:是指一台计算机所包含的存储单元总数
存储带宽:单位时间内与主存
交换的二进制信息量。常用单位为B/s(Bps 字节每秒)
KB/s(KBps 1024字节每秒) MB/s(MBps 1024×1024字节每秒)
[数据位宽和数据传输速率影响它]
时间指标
1)主频的倒数=时钟周期
Hz:若干周期每秒,评价CPU性能
1GHz=1000MHz
1MHz=1000KHz
1KHz=1000Hz
外频:CPU与主板之间同步的时钟频率
倍频:CPU主频与外频之间的倍数
2)CPI:
执行一条指令平均需要的时钟周期数(即T周期的个数)
[指令CPI分为单条指令CPI、一段程序中所有指令的CPI、指令系统CPI等]
CPI=程序中所有指令的时钟周期数之和/程序中指令总数=Σ(程序中各类指令的CPI×程序中该类指令的比例)
例子:
3)IPC: 看上面图的下面部分,IPC是每个时钟周期要执行多少条指令
4)MIPS:
每秒钟CPU能执行的指令总条数(单位:百万条/秒)
MIPS=指令条数/(执行时间×106)
=指令条数/(所有指令CPU时钟周期数之和/f)×106
=f/(CPI×106)
例子:
5)CPU时间: 执行一段程序所需要的时间:(CPU时间+I/O时间+存储访问时间+各类排队时延等)
CPU时间 = 程序中所有指令的时钟周期数之和×T
= 程序中所有指令的时钟周期数之和/f
使用CPI [想下CPI的定义] 计算CPU时间:
CPU时间 = 总指令数×CPI×T
使用MIPS [想下MIPS的定义 ]计算CPU时间:CPU时间 = 指令条数/(MIPS×106)
例子:
思考:计算机性能指标是确定的嘛?算法、编程语言
编译程序、指令集体系结构都会影响CPI MIPS CPU时间
比如算法会影响程序数量和指令类型
计算机系统概述习题
理解一下基准测试程序
(1) 对于P1:M2机器速度快,因为时间短,比M1快一倍
对于P2:M1机器速度快,比M2快一倍
(2)在M1上执行P1的速度:用MIPS标准来算就是200M/(10s×106)=20MIPS
执行P2的速度:300K/(0.003s×106)=100MIPS
在M2上执行P1的速度:…
在M2上执行P2的速度:…
进而可以比较执行速度。
(3)假设M1和M2的时钟频率为800MHz和1.2GHz.
在M1上执行P1的平均时钟周期CPI为:
10×800M/(200×106)
在M2上执行P2的平均时钟周期CPI为:…
(4)用户大量使用程序P1,并且只关心系统的响应时间而不是吞吐率,根据性价比,选择M1还是M2?
考虑执行时间:性价比=1/(执行时间×价格)
R越大性价比越高。
因此在大量使用P1程序时,M2性价比更高!
(5)如果另一个用户也需要进行选择,用户使使用程序P1和P2一样多,主要关心的也是系统的响应时间,也根据性价比,选择M1还是M2?
P1和P2同等考虑,答案给出两种计算方式:
①使用算术平均公式:(10+0.003)/2 × 5000 > (5+0.006)/2 × 8000
所以选择M2
②使用几何平均公式:sqrt(10×0.003) × 5000<sqrt(5×0.006) ×8000
所以选择M1
S1和S2各有多少条指令:
S1有10条指令 S2有8条指令
CPI:
S1的CPI=(1×5+2×2+3×2+4×1)/10 = 1.9
S2的CPI=…
所含时钟周期数、时间:
S1所含时钟周期数=10×1.9
S1执行时间=10×1.9/500MHz
S2所含周期数=…
S2执行时间=…
————————————————————————————————————
数据表示方法
摘要:计算机内部流动的信息可分两大类:
①数据信息是计算机加工处理的对象
②控制信息控制数据信息加工处理的过程。
本章讨论数据信息的表示方法、运算方法及实现方法。
数据信息的表示方法
为什么研究机器内的数据表示?
方便计算机硬件直接使用.包括支持的数据类型;表示的数据范围,精度;是否利于软件移植
1)真值:符号用+ -表示的数据方法
2)机器码:数据符号化表示数据,用0 1表示符号
3)
三种常见的机器码:
NO.1 首先介绍定点数:小数点位置固定的数据。
定点整数:小数点在最低位数的后面
N=DnDn-1…D1D0.
定点小数:小数点在最高位(为0)的后面,即为纯小数
N=D0.D-1D-2…D-n
①原码表示法:
X原 = X if(0≤X<2n)
= 2n-X if(-2n<X≤0)
原码的特点:表示简单,运算复杂,符号位不参加运算,因此我们还要设置加法器减法器。
0表示不唯一,有两个编码分别为00…0和10…0
n位的表示范围:-2n-1+1~2n-1-1
②反码表示法:
X反 = X if(0≤X<2n)
=2n+1+X-1 if(-2n<X≤0)
反码的特点:表示相对原码复杂,运算相对简单
符号为参加运算,但符号位的进位应加到最低位想一想为什么呢??
0表示不唯一,有两个编码分别为00…0和11…1
n位表示范围:-2n-1+1~2n-1-1
③补码表示法
X补 = X if(0≤X<2n)
=2n+1+X if(-2n<X≤0)[mod 2n+1]
补码的特点:表示相对原码复杂,运算简单
只需要设置加法器
0的表示唯一,为00…0
补码n位表示范围:-2n-1~2n-1-1
实际应用中使用双,符号位补码,使用00表示正数的符号,11表示负数的符号,为什么这么表示呢?在运算和溢出判断中方便
理解:补码中模的概念是符号进位所在位的权值
例如我们说8是-4对模12的补码<=>-4的模12的补码等于8
<1>一个负数的补码等于模减去该负数的绝对值
<2>对于某一个确定的模,某数减去小于模的某数X,总可以用该数加上某数X的补码来代替
(统一了减法和加法)
例如10-4 = 10+(12-4)=10+8 = 6(mod 12)
例如9828-1928=9828+(104-1928)=17900=7900(mod 104)
而在计算机中,就是使用了这种思想。
④移码表示法:
浮点数的阶码,IEEE754中解码用移码表示
X移 =2n +X -2n<X ≤2n
X是真值,2n理解为是一个固定的偏移值。
例如,X=+10101时:X移=[010101]移=25+X=100000+010101=110101
可以看出,移码中符号位表示的规律与原码
反码、补码相反。
实际上:一个数的移码数值位与补码相同,符号位与补码相反。
NO.2 介绍浮点数,先说定点数可以认为不用表示点了,充分利用字长表示更多的有效位。定点数的数据范围受字长的限制。
浮点数:把数据的范围和精度分别表示的一种数据表示方法,可以表示一些超大的数或者超小的数
①一般格式:EsE1E2…EmMsM1M2…Mk
Es位阶码位数,数据的范围,小数点在数据中的位置
Ms为尾数的位数,决定数的精度
表示:X = 2e×m
看例子:
将X=2-01×(-0.1110)表示成机器码的形式
8位表示,阶码占3位,位数占5位
假设阶码和位数均采用补码
那么在机器中表示就是111 10010
但是!这样子表示是有不足的,默认前面三位表示阶码,后面五位表示位数,但是其他系统是不一定这样的 想想也是,这样子肯定是有不足的
①因此我们使用统一格式:IEEE 754格式
单精度:1位符号位s 8位偏移指数(阶码)e 23位有效尾数m
双精度:1位符号位 11位偏移指数(阶码)s 52位有效位数m
说明:
<1>此时可以将浮点数的阶码值变成非负整数,便于浮点数的比较和排序。
<2>在IEE754中,其尾数形式默认是1.×××××,其中部分保存的是×××××(1被隐藏了),保留了更多的有效位。
<3>拿单精度为例,8位偏移指数(阶码)其实就是移码-1,(移码是数值位与补码相同,符号位与补码相反)。双精度也一样
为什么阶码用移码来表示呢?我觉得是为了表达更大的数
表示:
单精度:X = (-1)s×2e-127×1.m
双精度:X = (-1)s×2e-1023×1.m
<4>全0阶码即e=0,m非0即m≠0,表示非规格化浮点数
看例子:
- 对下列数据进行规格化编码,机内格式如下所示:
数符(1位)阶码5位(1位阶符)尾数10位(1位阶符)
其中,阶码5位(1位阶符),采用移码;尾数11位(1位数符),采用补码
(这种题要审题 他不是使用IEE754进行规格化的 按题目的要求进行规格化)
(1) +10101.011B = 0.10101 011 00 × 2101
阶码:5移码=0101移码=10101
尾数:0.1010101100补码=0.1010101100
因此二进制代码形式:0 10101 1010101100
(2)-0.125D=-0.001B=-1×2-3
阶码:-3移码=-0011移码=01101
尾数:0.1补码=0.1000000000
二进制代码形式:1 01101 1000000000
为什么是1000000000 - 采用IEE754单精度浮点数格式表示对下列数据:
(1)
+10101.011B=1.0101011 × 2100
=(-1)0×1.0101011×24+01111111
=0 10000011 01010110000000000000000
=41AB0000H
(2)
-0.125D=-0.001B=-1.000000×2-010
=(-1)1×1.00000×2-3+01111111
=(-1)1×1.00000×201111101
=1 01111101 00000000000000000000000
=BE800000H
记住:进行转换的时候是进行二进制编码的 - 第二道题是讲二进制或者十进制数转换成用IEE754格式进行表示的,那么将IEE754对应的浮点数转换成对应的十进制数的方法是什么呢?答:首先将阶码-127得到e,分离出s,m,然后代入IEE754公式X = (-1)s×2e-127×1.m即可。
NO.3 介绍西文字符的编码,中文编码,由于不考,就不看了。
NO.4 十进制数的编码
其实BCD码是用四位二进制数来表示一位十进制数的方法!
数据信息的表示方法习题
-
再看这道题的时候,脑子应该要记着在各种编码中的一些易错点,还要理解题中所讲。
答:题目说这两个数都是用IEE754格式进行表示的
首先R1=0000 0000 0000 0000 0001 0000 1000 1011B
R2=1000 0000 1000 0000 0001 0000 1000 1011B
(1)在无符号加法指令中:
R1 R2对于该指令都是无符号表示的,所以其真值都是看他本身,直接R1+R2=80802116H就可以了
(2)在带符号整数乘法指令中:
题目中给了带符号整数的是用补码表示,R1 R2都是整数的补码,所以看二进制表示形式,R1是正数,R2是负数。
所以说R1真值是他本身=0000108BH,R2的真值是=-7F7FEF75H(是通过补码转原码得到的!)
R1×R2=对应真值相乘
(3)在单精度浮点数减法指令中:那么R1 R2就是操作数得IEE754形式表示,也就是找到它们各自的符号位,阶码位,尾数位,然后再进行减法
首先化简R1:
符号位为 0,阶码为00000000,尾数部分为000000000010000100011B,因此它是非规格化浮点数(阶码全0,非0尾数,指数为-126,尾数没有隐藏的1)。所以我们用16进制(当然按理来说得用23位二进制数表示)表示尾数为:+0.002116H
R1的真值为(-1)0×0.002116H×2-126
化简R2:
符号位为1,阶码为00000001,尾数部分为00000000001000010001011,因此它是规格化浮点数(指数为1-127=-126,尾数有隐藏的1),R2的真值为(-1)1×-1002116H×2-126 -
第一问和上面有一道题差不多,要时刻记得我们是使用题目要求的二进制表示形式来表示一个十进制数,所以说对于十进制数一定要先化成二进制数!
(1) +1.75D=1.11B=0.011100×22=(-1)0×0.011100×41
=(-1)0×0.011100×41+32=(-1)0×0.011100×410001
+19D=10011B=…和上面化简思路差不多
-1/8=-0.001=- 0.1×4-1=…和上面化简思路差不多
(2)
① 规格化浮点数的表示范围:
最大正数
+0.111111B×411111=(0.333)4×415
最小正数:
+0.01000B×400000=(0.100)4×4-16
最大负数:
-0.010000B×400000=(-0.100)4×4-16
最小负数:
-1000000B×411111=(-1.000000)×415
① 12位定点补码整数表示范围:
最大正数:+011111111111=011111111111=2047
最小正数:+000000000001=000000000001= + 1
最大负数:-000000000001补=111111111111=-1
最小负数:=-10000000000补=1000000000000=-2048
① 12位定点补码小数表示范围:
最大正数:+0.11111111111=0.11111111111=2047/2048
最小正数:+0.00000000001=000000000001= 1/2048
最大负数:-0.00000000000补=1.11111111111
最小负数:-1.00000000000补=1.00000000000
浮点数表示范围大,精度低;好定点数范围小,精度 -
(1)+1.75=1.11B=1.11B×20
阶码为:0+127=01111111B
数符为:0
尾数为:1.11000000000000000000000
(2)+258=10000010B=1.0000001B×2sup>8
阶码为:8+127=135
数符为:0
尾数为:00000010000000000000000
数据校验码
为了防止出错,要提高计算机硬件本身的可靠性,减少传送中各环节的差错外。可以使数据经过某种形式的编码后,具有发现自身错误的特征,甚至给出错误所在的准确位置。具有发现错误,或者同时指出错误所在位置特征的数据编码称为数据校验码。
码距与检错或纠错能力的关系
码距:在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。举例如下:10101和00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3。
简单奇偶校验
思想:
奇偶校验码是一种结构最简单的线性分组码,在被传送的n位信息上, 加上一个二进制位作为校验位,使配置后的n+1位二进制代码中1的个数为奇数或偶数。也比如奇数校验,就是说在传送的位数中,少一个1或多一个1成了偶数个1,那么奇校验电路发生差错。但是只能检测出一位出错,并且没法判断出错的位置
根据公式:
码距=2
实现方式:
有效信息k位+一个校验位(加上一个校验位使得整个编码1的个数为奇数或偶数)
校验检测:
读出编码送入校验电路,看读出的代码是否有错,如果有错,则"奇校验出错"=0,否则,“奇校验出错”=1
交叉奇偶校验
思想:
计算机在进行大量字节(数据块)传送时,不仅每一个字节有一个奇偶校验位做横向校验,而且全部字节的同一位也设置一个奇偶校验位做纵向校验,这种横向、纵向同时校验的方法称为交叉校验。
就是这样子:
交叉校验可以发现两位同时出错的情况,假设第2字节的A6、A4(蓝色字体的)两位均出错,横向校验位无法检出错误,但第A6、A4位所在列的纵向校验位会显示出错,这与前述的简单奇偶校验相比要保险多了。
(通过理解,这种方法可以纠正一位错误 出错不同行不同列两位错误 一行两位 但是四个顶点同时出错没办法检测——这个需要你画图,自己理解一下)
海明校验码
思想:
海明码实际上是一种多重奇偶校验,、在有效信息位中加入几个校验位形成海明码,使码距比较均匀地拉大,并把海明码的每一个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据。
实现方式:
有效信息k位+r个校验位 N=k+r≤2r-1
设k+r位海明码从左到右依次为1,2,3…k+r位,r位校验码即为Pi(i=1,2,3…,r),分别微语k+r位海明编码的第2i-1(i=1,2,3,…,r)其余依次放置被校验的数据位。
校验检测:
①根据给出的规则,b1数据位被P1 P2校验;b2数据位被P1 P3校验;b3数据位被P2 P3校验;b4数据位被P1 P2 P3校验;b5数据位被P1 P4校验;b6…;b7…
②按照偶校验计算出P1~P4四个校验位的值
③设置4个指错字,指错字怎么来的呢?例如:G4=P4异或所校验的分组
(思考一下正是多重奇偶校验)
一个完整的校验过程:
-
假设还是上面的7,4海明校验。
不难发现,海明编码一个位发生变化会引起至少两个校验位发生变化
思想:
指错字为0,不一定没错。这么想,比如上面的P1 b1 P2都出错了,他对应G1 G2公式的偶特性并没有发生变化,因此校验不出来。
一位错和两位错不能由指错字区别。这么想,如果b1,b2同时出错和仅b3同时出错时指错字相同
循环冗余校验码
思想:
基于模2运算建立编码规律的校验码,可以通过模2运算来建立有效信息位和校验位之间的约定关系。这种约定关系为:假设n是有效数据信息位位数,r是校验位位数。则n位有效信息位与r位校验位所拼接的数(k=n+r位长),能被一约定的数除尽。
介绍模2除运算:
要懂得模2除的基本方法
实现以及检错方式:
有效信息k位+r个校验位 N=k+r≤2r-1
直接上例题吧:
- 设四位有效信息位是1100,选用生成多项式G(x)=1011,试求有效信息位1100的CRC编码。
①将有效信息位1100表示为多项式:
M(x)=X3+X2=1100
②M(x)左移r=3位,得M(x)×X3
M(x)×X3=X6+X5=1100000
③M(x)×X3与r位余数R(x) 作“模2加”,即可求得它的CRC编码
M(x)×X3+R(x)=1100000+010=1100010
k=4 r=3
④出错校验:
说明:海明校验对于生成多项式的要求很高,任何一位出错,应使余数不为零;不同位发生错误,都应使余数不同;用余数补零作“模2除”,应使余数循环。最高位和最低为必须为1…所以生成多项式不容易求,思考生成多项式到底是怎么求的呢??
End:
1. 自己总结的大部分都是来自华中科技大学mooc
2. 总结内容出现错误在所难免,写了大概9个多小时!
3. 学校的计组老师反正是什么都没有教会我,教学水平与态度不敢恭维。