软考复习(一)

计算机组成原理

数据表示

进制转换

R进制转十进制:位权展开相加
十进制转R进制:整数部分除以R取余数(倒着写),直到商为0,小数部分乘R取整数(正着写),直到没小数。
二进制、八进制、十六进制转换:一个十六进制相当于四个二进制,一个八进制相当于三个二进制,反过来也一样,记住8421码。

数据表示

真值:实际要表示的数

机器数:真值在计算机中的表示,是二进制表示的,符号用0和1表示,小数点省略

机器数分为有符号数和无符号数,无符号数主要是C语言中unsigned,没有符号位;有符号数最高位表示符号位,0表示正,1表示负。

定点数:定点数表示小数点位置固定,要么在最高数值位之前表示纯小数,要么在最低数值位之后边表述纯整数;记得最高位是符号位。

原码:第一位是符号位,数值位是8421码。0有两种表示形式(00000000,10000000)

反码:正数的反码就是原码。负数的反码是,把这个数的原码,除符号位之外,按位取反,就得到了这个数的反码。0也有两种表示形式(00000000,11111111)

补码:是为了使加减法统一,比如在时钟上,可以从9点顺时针转3个格转到12,也可以逆时针转9个格转到12。9就是-3在模为12的补码。正数的补码就是原码,负数的补码是在原码的基础上,符号位不变,数值位取反,末尾加1,0只有一种形式00000000

移码:用作浮点数运算的阶码,无论正数负数,都是将该原码的补码的符号位取反得到移码。

表示范围:原码和反码表示范围一致。补码和移码表示范围一样。补(移)码比原(反)码在数轴左端多表示一个数。

原码范围计算方法:先分清符号位和数值位,数值位全是1的时候是绝对值最大值,用等比数列求出来绝对值,再加正负号。补码表示范围就是原码范围左端多一个数。

因为补码0只有一种表示,原码是两种,所以补码比原码多表示一个数(定点整数是-1,定点小数是 -pow(2,n-1))

浮点数

类似于科学计数法,浮点数表示为:N = pow(2,E) * F,其中E叫阶码,F叫尾数,阶码是带符号的纯整数,尾数是带符号的纯小数。

浮点数表示格式:阶码符号位,阶码,尾数符号位,尾数

浮点数表示不唯一,为什么呢?比如一个32位浮点数,我可以前20位表示阶码,那么后12位表示尾数,那么阶码有19位数值位,尾数有11位数值位;我也可以前10位表示阶码,后22位表示尾数,那么阶码有9位数值位,尾数有21位数值位。因此浮点数数值范围由阶码决定,表示数值精度由尾数决定。

浮点数规格化:如果尾数用补码表示,那么符号位和最高数值位必须相异;如果尾数用原码表示,那么最高数值位必须是1,。也就是说尾数的绝对值要在0.5到1的闭区间上。

IEEE754规则是浮点数规格化的一种形式。上面说的浮点数规格化是浮点数规格化原理。

数据运算

溢出的判定:正数加负数一定不会溢出;如果有溢出,那么肯定是同为正(负)数相加太大了超过表示范围溢出;如果采用双符号位,双符号位相异表示溢出了;如果采用单符号位,符号位和最高数值位都有进位或者都无进位表示没溢出。即两个位置异或等于1,则溢出了。

校验码

码距:就单个编码A:00来说,码距是1,因为只要改变一位就变成了另一个编码。在两个编码中,从A码到B码转换要改变的位数叫做码距,如A:00,要转换到B:11,码距为2,一般来说码距越大,越利于检错和纠错。

奇偶校验码

在编码中增加一位校验位来使编码中的1的个数为奇数叫奇校验,否则叫偶校验。码距为2;奇偶校验码只能检测出奇数bit出错,因为只有奇数bit出错编码中1的个数的奇偶性发生改变,从而检测出错误,但是不能纠错。

CRC校验码

计算机网络中经常用这个校验码,也是只能检错,不能纠错。基本原理是将原始报文除以特征多项式,得到的余数作为CRC校验码放到原始报文之后,作为发送数据发送给接收方,接收方收到之后看这个数据能否被那个特征多项式整除,能表明没错误。

特征多项式转二进制:将多项式按照x的次数降序排列,必须连着,如果没有这个次数,就写0乘以那个次数,之后取系数,就是特征多项式对应的二进制数。

例子:原始报文11001010101,特征多项式二进制11011,先在原始报文后面补充4(多项式次数,也就是对应二进制位数减一)个0,然后除以11011,一直商1,不是做减法,而是做异或,最后得到一个4(多项式次数,也就是对应二进制位数减一)位的余数。这个余数就是CRC校验码,把这个余数放到原始报文(11001010101)后边就是要发送的数据,也就是把这个CRC校验码替换一开始补的0。

汉明码

汉明码的构成:将所有位都编号,从最低位开始编号,从1开始编,校验位位于2的0,1,2,3… 次方的位置上,即位于编号1,2,4,8…的位置上,其他的位置上才是真正的数据位。如果信息数据位1011,那么编号为1 2 4的位置上是校验位,其他位是数据位;第3 5 6 7是数据位,从高位开始存放1011。

n是已知数据位个数,k是为止的校验码位数,有n+k<=pow(2,k)-1,具体校验码怎么求可以自行学习(主要是多次异或操作),软考好像没考过。

汉明码既可以检错,也可以纠错。

计算机硬件

硬件基本系统

五大部分:运算器,控制器,存储器,输入设备,输出设备

CPU:运算器 + 控制器

存储器分为内部存储器(内存,容量小,速度快,存放临时数据)和外部存储器(硬盘光盘等,容量大,速度慢,长期保存数据)

鼠标键盘等输入设备都是通过中断的原理实现控制,点击后出发中断,首先进入中断处理程序。

CPU由运算器,控制器,寄存器组合内部总线组成。实现程序控制,操作控制,时间控制,数据处理等。

运算器ALU(算数逻辑单元,用来运算的),AC(累加寄存器,运算结果或源操作数的存放区),DR(数据缓冲寄存器,暂时存放内存的指令或数据)和PSW(状态条件寄存器,保存命令运行结果比如溢出标志等),运算器主要是计算用的。

控制器IR(指令寄存器,暂存CPU执行指令),PC(程序计数器,存放即将指令执行地址),AR(地址寄存器,保存当前CPU锁访问的内存地址),ID(指令译码器,分析指令的东西),控制器主要做控制作用。

CPU根据指令周期的不同阶段来区分二进制的指令和数据,因为在指令周期的不同阶段,指令会命令CPU分别去取指令或数据

计算机指令执行过程

可以分为取指令,分析指令,执行指令三个步骤,首先将PC的内容取出来,这个内容是要执行指令的地址,把这个地址信息送入地址总线,CPU根据这个地址访问内存,把指令内容取出来放到IR中,然后由ID进行分析,最后执行。

寻址方式

立即寻址:指令地址码字段指出的不是地址,而是这个数本身
直接寻址:指令地址码字段指出的就是指令在内存中的地址
间接寻址:指令地址码字段指出的数,是指令地址的地址。比如对20H间接寻址,先从内存中找到20H这个位置,这里边的内容(假设是30H)是指令的地址,内存中30H里边存放的才是指令。
寄存器寻址:指令地址码字段是寄存器编号,也可以直接寻址和间接寻址。

计算机体系结构

按照处理机数量进行分类:单处理机系统(一个处理单元和其它设备集成)、并行处理系统(两个以上的处理机互联)、分布式处理系统(物理上远距离且松耦合的多计算机系统)

Flynn分类法:

在这里插入图片描述

指令流由控制部分处理,每一个控制部分处理一条指令流,多指令流就有多个控制部分;数据流由处理器来处理,每一个处理器处理一条数据流,多数据流就有多个处理器;主存模块用来存储的,有一个是多,那么主存模块就是多个。

指令系统CISC和RISC

在这里插入图片描述
总之:CISC复杂,RISC简单,但是简单要付出的代价就是增加了硬件。

流水线技术

类似于时分复用技术,比如计算机执行指令分三个步骤,取指令,分析指令,执行指令,假设每个步骤都要3秒钟,我要有5条指令要执行,如果不适用流水线就是这么执行的:取第一条指令,分析第一条指令,执行第一条指令,去第二条指令,分析第二条指令,执行第二条指令…。总共时间是5 * 3 * 3 = 45.

如果度为1的采用流水线,取第一条指令,分析第一条指令同时取第二条指令,执行第一条指令同时分析第二条指令同时取第三条指令…大大提高效率。

流水线周期:指令分成不同执行段,其中执行时间最长的段的时间就是流水线周期

流水线执行时间:1条指令总执行时间 + (总指令条数 - 1) * 流水线周期

如果题目提到度的概念时,计算的时候要将指令条数=指令条数 / 度,在运算

吞吐率:单位时间执行几条指令,最大吞吐率就是当指令条数无穷大时的吞吐率

加速比:不使用流水线执行时间除以使用流水线执行时间

存储系统

分级存储体系目的:解决存储容量,成本和速度之间的矛盾

两级映象:Cache和主存,主存和外存(虚拟存储体系)

存储器的分类:
按照所处的位置:内存,外存
按照材料:磁存储器,半导体存储器,光存储器
按照工作方式:可读可写存储器(RAM),只读存储器(ROM只能读,PROM可写入一次,EPROM和EEPROM可以读也可以写,只是修改方式不同)
按照访问方式:按地址访问,按内存访问(相联存储器)
按寻址方式:随机存储器(访问任意存储单元所用时间相同),顺序存储器(只能按顺序访问比如磁带),直接存储器(两者的结合,如磁盘,磁道的寻址是随机的,在一个磁道内是顺序的)

局部性原理

时间局部性:如果一个数据项正在被访问,近期很可能被再次访问。

空间局部性:在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相近的。

工作集:进程运行时被频繁访问的页面集合。

Cache

Cache用来存储当前最活跃的程序和数据,直接和CPU交互,位于CPU和主存之间,容量小,速度比内存快,内容是部分主存内容(容量小,只存储访问最多的那部分),对于程序员来说是透明的(透明的意思是看不到,就跟空气一样,压根不知道这个东西的存在);Cache由控制部分和存储器组成,存储器存储数据,控制部分判断CPU要访问的数据是否在Cache中,如果在,我们叫命中了,如果不在,需要根据一定的算法从主存中把数据弄过来。

Cache和内存地址映射方法

CPU工作的时候,是把内存地址送地址总线,而应该先从Cache读写,这需要将主存地址转换为Cache地址,这个过程叫地址映像,是硬件自动完成的,分为下面三种方法。

直接映像:将Cache存储器等分成块,主存也等分成一样大小的块并编号。两者块号相同的时候才能命中;这是个多对一的映射关系,但是一个主存块只能拷贝到cache一个特定行位置上去。cache的行号i和主存的块号j有下面函数关系:i = j % m,其中m是cache总行数。特点是变换简单但是不灵活,容易造成资源浪费。

全相联映像:主存的一个块直接拷贝到cache中任意一行上,特点是命中率高,cache利用率高,最不容易发生块冲突,但是线路复杂成本高,速度低。

组相连映像:前面两种的结合,将Cache先分块再分组,主存一样。组之间采用直接映射,组内采用全相连映像。

cache置换算法

随机算法:随机替换

先进先出(First in first out):按照调入cache的先后决定淘汰的顺序,即在需要更新时,将最先进入cache的块作为被替换的块。这种方法要求为每一块做记录,记下他们进入cache的先后顺序。这种方法容易实现,而且系统开销小,缺点是可能会把一些经常使用的程序块替换掉。

最近很少使用(Least Recently Used,LRU):把CPU近期最少使用的块作为被替换的块。这种替换方法需要随时记录cache中各块的使用情况,以便确定哪个快是近期最少使用的块,实现复杂,系统开销较大,通常需要设定一个年龄计数器的硬件或软件计数器。

最不经常使用(Least Frequently Used,LFU),LFU复杂度及其计数器规模都比LRU大,LRU只关注最近访问情况,LFU会统计累计访问次数作为淘汰依据。

cache命中率和平均时间

当CPU所访问的数据在cache中时,则命中,直接从cache中读取数据,设读取一次cache的时间为1ns,若CPU访问的数据不在cache中,则需要从内存中读取,设读取一次内存的时间为1000ns,若在CPU多次读取数据过程中,有90%命中cache,则CPU读取一次数据的平均时间为(90% * 1 + 10% * 1000)ns

磁盘

在这里插入图片描述在这里插入图片描述磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应数据,因此会产生寻道时间和等待时间:

存取时间 = 寻道时间 + 等待时间(平均定位时间+ 转动延迟)

注意:寻道时间指的是磁头移动到磁道所需要的时间,等待时间是等待读写的扇区转到磁头下方所用的时间。

磁盘调度算法

磁盘读取数据时间是寻道时间加等待时间,其中寻道时间耗时最长,需要重点调度。有如下调度算法:

FCFS:根据进程请求访问磁盘的先后顺序进行调度。

SSTF:请求访问的磁道与当前磁道最近的进程优先调度,使得每次的寻道时间最短。会产生饥饿现象,即远处进程可能永远无法访问

SCAN:磁头在磁盘上双向移动,会选择离磁头所在磁道最近的请求访问磁道,并且磁头移动方向一致,磁头永远都是从里向外或者从外向里一致移动完才掉头。(一个方向到头在回来)

CSCAN:与SCAN不同的是,CSCAN只做单向移动,即只能从里向外或者从外向里。(只沿着一个方向,磁道号是单调的)
在这里插入图片描述

磁盘冗余阵列技术

RAID即磁道冗余阵列技术
RAID0没有提供冗余和错误修复技术
RAID1在承兑的独立磁盘上产生互为备份的数据,可提高读取性能
RAID2将数据条块化的分布于不同的硬盘上,并使用汉明码校验
RAID3使用奇偶校验码,并用单块磁盘存储奇偶校验信息
RAID5在所有磁盘上交叉的存储数据及奇偶校验信息,读写指针同时操作
RAID0+1(是两个RAID0,若一个磁盘损坏,当前RAID0无法工作,即有一半的磁盘无法工作)
RAID1+0(是两个RAID1,不允许同一组中的两个磁盘同时损坏),和RAID1类似,磁盘利用率都是0.5

总线

数据总线:CPU和RAM之间来回传送数据,表示系统并行传输数据的位数

地址总线:指定在RAM之中存储数据的地址,表示系统可管理内存空间大小

控制总线:将控制器的信号传送到周边设备,有ISA,EISA,PCI

外部总线:设备级别的总线,微机和外设的总线,有RS232(串行总线),SCSI(并行总线),USB(通用串行总线,即插即用,支持热插拔)

并行总线适合近距离高速传输,串行传输适合远距离传输,速率低。

系统可靠性分析

平均无故障时间MTTF = 1 / 失效率

平均故障修复时间MTTR = 1 / 修复率

平均故障间隔时间MTBF = MTTF + MTTR

系统可用性 = MTTF / MTBF

设每个设备的可靠性为R1,R2,R3…,对于串联系统可靠性为R1R2R3,对于并联系统可靠性为1-(1-R1)(1-R2)(1-R3)…

系统配置和性能评价

性能指标

可靠性或可用性:计算机系统能正常工作的时间,其指标可以是能够持续工作的时间长度(如平均无故障时间),也可以是在一段时间内,能正常工作所占比例

处理能力和效率指标:吞吐率,响应时间,资源利用率

计算机硬件性能指标

主频和时钟周期:互为倒数,如主频为1GHz,表示1秒钟有1G个时钟周期,每个时钟周期为1ns

指令周期:取出并执行一条指令的时间

总线周期:完成一次总线操作所需时间,如访问存储器或IO端口所用时间

MIPS:一秒钟能处理几百万条指令,主要用于衡量标量机性能。

性能评价方法

时钟频率法:根据时钟频率衡量

指令执行速度法:用加法指令的运算速度来衡量计算机速度,单位是MIPS

等效指令速度法:也称为吉普森混合阀或者混合比例计算法,通过各类指令在程序中所在比例进行计算得到的,特点是考虑各类指令比例不同

综合理论测试法CTP:用MTOPS(每秒百万次理论计算)表示,估算方法是首先算出处理部件每个计算单元的有效计算率,再按照不同字长加以调整,得出该计算单元的性能,所以组成该处理部件的计算单元的理论性能之和就是CTP

基准测试法:把应用程序应用最多,最频繁的核心程序作为评估计算机性能的标准程序,成为基准测试程序,考虑到了CPU性能,IO,OS,编译程序等,现在用的多。

加速比的计算(阿姆达尔解决方案)

加速比 = 不使用改进的时间 / 使用改进方法之后的时间

原有系统有的部分是不能被改进的,加速主要提高能被改进那部分时间

猜你喜欢

转载自blog.csdn.net/tsfx051435adsl/article/details/88674755
今日推荐