内容分类 | 详情 |
---|---|
软考所有资料 | 汇总入口 |
软考大纲 | 软件设计师考试大纲 |
考点导图 | 知识点思维导图持续更新 |
笔记 | 计算机组成结构章节 操作系统章节 |
真题解析 | … |
对视频中出现每一道真题做笔记并记录解析过程,背真题,复习笔记。最后在2023年上半年通过考试,在这里向这位b站大佬致敬。
我的笔记整理到这里: 笔记
计算机硬件组成
1.计算机的硬件基本系统有五大部分组成:运算器、控制器、存储器、输入设备(如鼠标键盘)、输出设备(如显示器)
2.存储器分为内部存储器(即内存,容量小,速度快,临时存放数据)和外部存储器(即硬盘、光盘等,容量大,速度慢,长期保存数据)
3.输入设备和输出设备合并称为外部设备,即外设
4.主机:CPU+主存储器
中央处理单元CPU(考点)
1.中央处理单元组成:由运算器、控制器、寄存器组和内部总线组成。
寄存器比内存的速度快好几个档次。
2.中央处理单元功能:实现程序控制、操作控制、时间控制、数据处理功能。
3.运算器组成:由算术逻辑单元ALU(实现对数据的算术和逻辑运算)、累加寄存器AC(运算结果或源操作数的存放区)、数据缓冲寄存器DR(暂时存放内存的指令或数据)、和状态条件寄存器PSW(保存指令运行结果的条件码内容,如溢出标志等)组成。
4.运算器功能:执行所有的算术运算,如加减乘除等;执行所有的逻辑运算并进行逻辑测试,如与、或、非、比较等。
5.控制器组成(CPU组成中最重要的):由指令寄存器IR(暂存CPU执行指令)、程序计数器PC(存放指令执行地址)、地址寄存器AR(保存当前CPU所访问的内存地址)、指令译码器ID(分析指令操作码)等组成。
6.控制器功能:控制整个CPU的工作,最为重要,包括程序控制、时序控制等。
数据的进制转化
1.进制的表示:二进制、十六进制、一般在题目中会给出中文说明,如果没给出,注意二进制符号为0b,一般表示为0b0011,十六进制符号为0x或H,可表示为0x18F或18FH。
十六进制:0-9数字和A,B,C,D,E,F字母表示
2.R进制整数转十进制:位权展开法,用R进制数的每一位乘以R的n次方,n是变量,从R进制数的整数最低位开始,依次为0,1,2,3…累加。
例如:有6进制数5043,此时R=6,用6进制数的每一位乘以6的n次方,n是变量,从6进制数的整数最低位开始(5043从低位到高位排列:3405),n依次为0,1,2,3那么最终:
5043
=
3
∗
6
0
+
4
∗
6
1
+
0
∗
6
2
+
5
∗
6
3
=
1107
5043=3*6^0+4*6^1+0*6^2+5*6^3=1107
5043=3∗60+4∗61+0∗62+5∗63=1107
3.十进制转R进制:十进制数(除以R倒取余数),用十进制整数除以R,记录每次所得余数,若商不为0,则继续除以R,直至商为0,而后将所有余数从下至上记录,排列成从左至右顺序,即为转化后的R进制数。
例如:有十进制数200,转化为6进制,此时R=6,将200/6得商为33,余数为2,因为商不等于0,因此再将商33/6,得商为5,余数为3,再将5/6得商为0,余数为5,此时商为0,将所有余数从下到上记录,得到532。
4.m进制转n进制:先将m进制转化为十进制数,再将十进制数转化为n进制数,中间需要通过十进制中转,但下面两种进制间可以直接转化:
5.二进制转八进制(可以直接转化2^3=8):每三位二进制数转化为一位八进制数,二进制数位的个数不是三的倍数,则在前面补0(原则是数值不变),如二进制数01101有五位,前面补一个0就有六位,为001101,每三位转化为一位八进制数,001=1,101=5,也即01101=15
6.二进制转十六进制(可直接转化2^4=16):每四位二进制数转化为一位十六进制数,二进制数位的个数不是4的倍数,则在前面补0,如二进制数101101有六位,前面补两个0就有八位,为00101101,每四位转换为一位十六进制数,0012=2,1101=13=D,也即101101=2D。
数的表示
1.机器数:各种数值,在计算机中的表示形式,其特点是使用二进制计数制,数的符号用0和1表示,小数点则隐含,不占位数。
2.机器数有无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为0,负数的符号位为1。
3.定点表示法分为纯小数和纯整数两种,其中小数点不占存储位,而是按照以下约定:
纯小数:约定小数点的位置在机器数的最高数值位之前。
0.1101
纯整数:约定小数点的位置在机器数的最低数值位之后。
110.0
4.真值:机器数对应的实际数值。
数的编码方式
1.带符号数有下列编码方式:
1.1 原码:一个数的正常二进制表示,最高位表示符号,数值0的原码有两种形式:+0(00000000)和-0(10000000)。
1.2 反码:正数的反码即原码;负数的反码是在原码的基础上,除符号位外,其他各位按位取反。数值0的反码也有两种形式:+0(00000000),-0(11111111)。
1.3 补码:正数的补码即原码,负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后末位+1,若有进位则产生进位。因此数值0的补码只有一种形式+0=-0=00000000。
-0的原码:10000000
除符号位外其他各位按位取反:11111111
末位+1:00000000
1.4 用作浮点运算的阶码,无论正数负数,都是将改原码的补码的首位(符号位)取反得到移码。
2.机器字长为n时各种码制表示的带符号数的取值范围(差别在于0的表示,原码和反码分+0和-0,补码只有一个0,因此可以多表示一个)
纯整数的原码
原码的范围是 – (2^n–1) ≤ x ≤ 2^n–1(n是整数位数)
这是如何得到的呢?
以机器字长为8为例,符号位占1位,那么剩下有7位的数值位
最大值是:1111111
转为十进制:
2
0
+
2
1
+
2
2
+
2
3
+
2
4
+
2
5
+
2
6
=
1
+
2
+
4
+
8
+
16
+
32
+
64
=
127
=
2
7
−
1
2^0+2^1+2^2+2^3+2^4+2^5+2^6=1+2+4+8+16+32+64=127=2^7-1
20+21+22+23+24+25+26=1+2+4+8+16+32+64=127=27−1
最小值是-(2^7-1)
所以机器字长为8的带符号数的定点整数的范围是:
补码为什么是上面的范围?
以机器字长为8为例
最小值是-127,其原码是11111111
除符号位外其他各位按位取反:10000000
末位+1:10000001
所以-127的补码是:10000001
此时补码10000001还可以-1=>10000000
因此:-127-1=-128,其补码表示为10000000,即为最小的补码。
例题:
若机器字长为8,请给出45和-45的原码,反码,补码和移码
45的原码:00101101
反码:00101101
补码:00101101
移码:10101101(补码的符号位取反)
浮点数的表示(考点)
1.浮点数:表示方法为N=F2^E(尾数乘以2的阶码次方),其中E称为阶码,F称为尾数;类似于十进制的科学计数法,如:
85.125
=
0.85125
∗
1
0
2
85.125=0.85125*10^2
85.125=0.85125∗102
二进制如:
101.011
=
0.101011
∗
2
3
101.011=0.101011*2^3
101.011=0.101011∗23
2.在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数0负数1),其表示格式如下:
− 85.125 = 1.085125 ∗ 1 0 3 -85.125=1.085125*10^3 −85.125=1.085125∗103
其中1.85125中小数点前面的1表示负数
3.很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定。
4.尾数的表示采用规格化方法,也即带符号尾数的补码必须为1.0xxxx(负数)或者0.1xxxx(正数),其中x可为0或者1。
5.浮点数的运算(分为三步):
5.1 对阶(使两个数的阶码相同,小阶向大阶看齐,较小阶码增加几位,尾数就右移几位)
例如:
85*10^3
5.2 尾数计算(相加,若是减法,则加负数)
5.3 结果规格化(即尾数表示规格化, 带符号尾数转换为1.0xxxx或0.1xxxx)
真题:
浮点数在机器中的表示形式如下所示,若阶码的长度为e,尾数的长度为m,则以下关于浮点表示的叙述中,正确的是(①④)
阶符 阶码 数符 尾数
①e的值影响浮点数的范围,e越大,所表示的浮点数值范围越大
②e的值影响浮点数的精度,e越大,所表示的浮点数值精度越高
③m的值影响浮点数的范围,m越大,所表示的浮点数值范围越大
④e的值影响浮点数的精度,m越大,所表示的浮点数值精度越高
算术运算和逻辑运算
1.数与数之间的算术运算包括加,减,乘,除等基本算术运算,对于二进制数,还应该掌握基本的逻辑运算
2.逻辑与&:0和1相与,只要有一个为0结果就为0,两个都为1才为1。
3.逻辑或|:0和1相或,只要有一个为1结果就为1,两个都为0才为0。
4.异或:同0非1,即参加运算的二进制数同为0或者同为1结果为0,一个为0另一个为1结果为1。
5.逻辑非!:0的非是1,1的非是0。
6.逻辑左移<<:二进制数整体左移n位,高位若溢出则舍去,低位补0。
7.逻辑右移>>:二进制数整体右移n位,低位溢出则舍去,高位补0。
校验码
1.码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,码距越大,越利于纠错和检错。
2.奇偶校验码:在编码中增加1位校验码来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2。
例如:
奇校验:编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。
3.偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错。
01101->奇校验发送编码->011010->接收到检验1是否是奇数个,如果是则正确。
循环冗余校验码CRC
1.CRC(Cyclic Redundancy Check, CRC)只能检错,不能纠错,其原理是找出一个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方,其编码格式为:
例题:
原始报文为
11001010101
,其生成多项式为:
x
4
+
x
3
+
x
+
1
。对其进行
C
R
C
编码后的结果为?
原始报文为11001010101,其生成多项式为:x^4+x^3+x+1。对其进行CRC编码后的结果为?
原始报文为11001010101,其生成多项式为:x4+x3+x+1。对其进行CRC编码后的结果为?
解题步骤:
- 将多项式化为二进制
多项式拆解成的x的幂指数,拆解格式:x^n,如果可以拆解就把第n位置成1,如果不能拆解就把n设置为0。
x^4 + x^3 + x + 1:从右往左,从低幂往高幂
1=>x^0=>1
x不能转化为x^2=>0
x^3=>1
x^4=>1
最后多项式x^4 + x^3 + x + 1转为二进制数是:11011 - 在原始报文后面追加n个0,n=多项式的二进制位数-1。
11001010101=>110010101010000 - 模2运算
解答:首先根据多项式得出除数11011,在原始多项式后面加上多项式最高指数个数个0,即为4个0,和除数进行模2除法,一直上1,最后得出四位的余数为0011,最终编码为110010101010011,然后发送出去。
接收方将收到的数据110010101010011与多项式的11011进行模2运算,若余数为0,说明校验正确,数据传输正确。
真题:
循环冗余校验码是数据通讯领域中最常用的一种差错校验码,该校验方法中,使用多项式除法(模2除法)运算后的余数为校验码字段。若数据信息为n位,则将其左移k位后,被长度为k+1位的生成多项式相除,所得的k位余数即构成k个校验位,构成n+k为编码。诺数据信息为1100,生成多项式为x^3 + x + 1(即1011),则CRC编码是(1100010)。
x^3 + x + 1转为二进制
x^3 + 0 + x + 1=>1011
当余数的位数小于除数的位数时,就不需要再除了。
校验数要保留一个0凑够3位
海明校验码
1.海明码:本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位,通过扩大码距实现检错和纠错。
2.设数据位是n位,校验位是k位,则n和k必须满足以下关系:2^k - 1 >= n + k。
例题:
求信息1011的海明码
- 校验位的位数和具体的数据位的位数之间的关系:所有位都编号,从最低位编号,从1开始递增,校验位处于2的n(n=0 1 2…)次方中,即处于第1,2,4,8,16,32…位上,其余位才能填充真正的数据位,若信息数据为1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从低位开始存放1011。
- 每一位校验码的计算公式:需要确定每一位校验码到底校验哪些信息位,将信息位(即编号)拆分成二进制表示,如7=4+2+1,由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)共同校验,同理,第6位数据位6=4+2,第5位数据位5=4+1,第3位数据位3=2+1,前面知道,这些2的n次方都是校验位,可知,第4位校验位校验第7 6 5 三位数据位,因此,第4位校验位r2等于这三位数据位的值进行异或,第2位和第1位校验位计算原理同上,计算出三个校验位后,可知最终要发送的海明校验码为1010101。
计算校验位:
7 = 4 + 2 + 1
6 = 4 + 2
5 = 4 + 1
3 = 2 + 1
r2=位数7 6 5上信息位的值进行异或 = 1⊕0⊕1 = 0
r1=位数7 6 3上信息位的值进行异或 = 1⊕0⊕1 = 0
r1=位数7 5 3上信息位的值进行异或 = 1⊕1⊕1 = 1
最终的海明码是信息位+校验位=1010101
- 检错和纠错原理
接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:
如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确,假设是偶校验,且接收到的数据为1011101(第四位出错),此时运算结果为:
r2r1r0=>二进制:100=>十进制4也就是说第4位出错了。
计算机体系结构分类
多指令流->多个控制部分
多数据流->多处理器
主存模块既可以存储指令流又可以存储数据流,控制器或者处理器是多个,那么主存模块就是多个。
计算机指令
1.计算机指令的组成:一条指令由操作码和操作数两部分组成,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。
2.在计算机中,操作要求和操作数地址都由二进制数码表示,分别称操作码和地址码,整条指令以二进制编码的形式存放在存储器中。
3.计算机指令执行过程:取指令-分析指令-执行指令三个步骤,首先将程序计数器PC中的指令地址取出,送入地址总线,CPU依据指令地址去内存中取出指令内容存入指令寄存器IR;而后由指令译码器进行分析,分析指令操作码;最后执行指令,取出指令执行所需的源操作数。
指令寻址方式
指令寻址方式:
1.顺序寻址方式:当执行一段程序时,是一条指令接着一条指令地顺序执行。
2.跳跃寻址方式:指下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出。程跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须响应改变,以便及时跟踪新的指令地址。
指令操作数的寻址方式:
1.立即寻址方式:指令的地址码字段指出的不是地址,而是操作数本身。
2.直接寻址方式:在指令的地址字段中直接指出操作数在主存中的地址。
3.间接寻址方式:指令地址码字段所指向的存储单元中存储的是操作数的地址。
4.寄存器寻址方式:指令中的地址码是寄存器的编号。
指令系统(考点)
1.CISC是复杂指令系统,兼容性强,指令繁多,长度可变,由微程序实现
2.RISC是精简指令系统,指令少,使用频率接近,主要依靠硬件实现(通用寄存器、硬布线逻辑控制)。
3.具体区别如下:
指令流水线(考点)
1.指令流水线原理:将指令分为不同段,每段由不同的部分去处理,因此可以产生叠加的效果,所有的部件去处理指令的不同段,如下图所示:
流水线相关计算
1.流水线周期:指令分成不同执行段,其中执行时间最长的段为流水线周期。
2.流水线执行时间:1条指令总执行时间+(总指令条数-1)*流水线周期。
3.流水线吞吐率:总指令条数/流水线执行时间
4.流水线加速比:不使用流水线总执行时间/使用流水线总执行时间
5.超标量流水线技术:
计算出指令条数,然后再带入上面的相应的计算公式。
真题:(B)
总指令条数:100
流水线周期:2ns
1条指令总执行时间:6ns
流水线执行时间=6ns+(100-1)*2ns=6+198=204ns
吞吐率:100/204ns
1ns=10^(-9)s
1s=10^9ns
1s=10^3ms
答案是B
真题:
流水线总执行时间:
kt + (n-1) * t = kt + nt - t = (k+n-1)t
假设指令条数是n
不使用流水线总执行时间:6+7+8+9+6=36=>36n
使用流水线总执行时间:36 + (n-1)9=36+9n-9=27+9n
36n/(27+9n)
求最大加速比v:该公式当n趋向于无穷大是,v才最大,这时27可以忽略不计
所以v最大是4
存储系统(考点)
1.计算机存储系统的层次结构:如图
2.计算机采用分级存储体系的主要目的是为了解决存储容量、成本、和速度之间的矛盾问题。
两级存储:cache=主存、主存-辅存(虚拟存储体系)
局部性原理
时间局部性和空间局部性
高速缓存Cache
左边是cache对应右边的主存
因为主存要比cache大很多,所以主存先根据cache的大小分成很多区,每个区的大小等于cache的大小,然后再在每个区中和cache对应分成很多块,cache的块就可以对应主存中多个区中的块。cache的块不对应主存中区中的其他块,造成了cache的资源浪费。
右图是全相连映像,组组相连映像没有用图例表示。
Cache与主存映射
真题(B)
块冲突:cache的块被占用,不容易和主存建立映射
直接映射:cache块中第0块占用,主存中的其他区的第0块就不能和cache第0块建立映射,因此直接映射冲突最高。
Cache命中率
真题解析:
指令的平均读取时间:取指令时间+取数时间
取指令时间:缓存时间+主存时间
10 * 98% + 100 * 2%
取数时间:缓存时间+主存时间
10 * 95% + 100 * 5%
约有1/5指令需要额外存/取一个操作数:并不是每一条指令都需要存取一个操作数,这里的取数时间需要乘以这个1/5的概率,也就是说取数占20%。
主存编址
在计算机行业中
大K:1024B 1024字节
小k:代表1000
大B:字节
小b:bit位
1B=8bit
内存容量 = 内存单元的个数*每个单元的容量
内存单元的个数=BFFFFH-80000H + 1 = 40000H
0 9 A B C D E F
0 9 10 11 12 13 14 15
为什么要 + 1
比如:2 3 4 有3个数字 3 = 4-2+1
按字节编址->每个内存单元占1B
所以内存容量是:40000HB
40000H十六进制转十进制:
总线结构
内部总线
系统总线-地址总线
外部总线
串行:单条,适合长距离
并行:多条,适合短距离
半双工:同一时刻只能在一个方向上传输信息
全双工:同一时刻也能在两个方向上传输信息
正确答案:C
系统可靠性分析
公式(考点)
串联系统的可靠性=R1R2…*Rn
并联系统的可靠性=1-并联系统的不可靠性
这里并不能直接计算出并联系统的可靠性,需要先计算出并联系统的不可靠性。
并联系统的可靠性:
先计算出每个设备的不可靠度1-R1,1-R2,1-R3
总的不可靠性=(1-R1)(1-R2)…*(1-Rn)
并联系统的可靠性=1-总的不可靠性
上图的可靠性分为三个部分,计算每一个部分的可靠性
每个设备的可靠性是R
第一部:R
第二部分:因为第二部分是并联,所以先计算出不可靠性
不可靠性=(1-R)^3,所以可靠性是1 - (1-R)^3
第三部分:也是并联, 可靠性是1 - (1-R)^2
因此混合系统的可靠性是:R*(1 - (1 - R)^3 )*(1 - (1 - R)^2 )
例题:
第一部分:
X=R1R2
所以:1-((1-X)(1-R3))
第二部分:R4
(1-((1-X)(1-R3)))R4
最后:(1-((1- R1R2)(1-R3)))*R4
正确答案B