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)主频的倒数=时钟周期
外频: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
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,表示非规格化浮点数
(对应下面表中的第二行)
看例子:
NO.3 介绍西文字符的编码,中文编码,由于不考,就不看了。
NO.4 十进制数的编码
其实BCD码是用四位二进制数来表示一位十进制数的方法!
为了防止出错,要提高计算机硬件本身的可靠性,减少传送中各环节的差错外。可以使数据经过某种形式的编码后,具有发现自身错误的特征,甚至给出错误所在的准确位置。具有发现错误,或者同时指出错误所在位置特征的数据编码称为数据校验码。
码距与检错或纠错能力的关系
码距:在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。举例如下: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异或所校验的分组
(思考一下正是多重奇偶校验)
一个完整的校验过程:
循环冗余校验码
思想:
基于模2运算建立编码规律的校验码,可以通过模2运算来建立有效信息位和校验位之间的约定关系。这种约定关系为:假设n是有效数据信息位位数,r是校验位位数。则n位有效信息位与r位校验位所拼接的数(k=n+r位长),能被一约定的数除尽。
介绍模2除运算:
要懂得模2除的基本方法
实现以及检错方式:
有效信息k位+r个校验位 N=k+r≤2r-1
直接上例题吧:
传输信息展开为二进制形式为:
1000 1111 0011 1100 1010 1011 1001 0110
根据奇校验公式各个校验位为:
0 1 0 1
接收到的信息
1000 0111 0011 1100 1010 1011 1001 0110
校验位为:
0 1 0 1
根据接收到的信息数据计算出4位奇校验位为
1 1 0 1
将计算出的4位校验位和接收到的4位校验位异或
得到1、0、0、0,说明数据信息的第一个字节发生了变化,出现错误
1. 自己总结的大部分都是来自华中科技大学mooc
2. 总结内容出现错误在所难免,写了大概9个多小时!
3. 学校的计组老师反正是什么都没有教会我,教学水平与态度不敢恭维。