前言
最近复习准备软考,计算机系统基础知识大学学过基本都还给老师了,记录复习一下。
1.1计算机系统基础知识
1.1.1计算机系统硬件基本组成
- 输入设备、输出设备:分别用于输入原始数据和输出运算结果
- 运算器、控制器:组成CPU的核心部分
- 储存器:计算机系统的记忆设备
1.1.2CPU
1.功能
- 程序控制:CPU执行指令控制程序执行顺序
- 操作控制:指令产生操作信号,控制若干部件进行操作
- 时间控制:CPU对各种操作限时间
- 数据处理:CPU对数据进行算术、逻辑运算,得到加工处理的结果
- 异常处理:对系统的中断做响应
2.组成
(1)运算器:接受控制器的命令并执行,完成所有算术、逻辑运算并进行逻辑测试
- 算术逻辑单元(ALU):数据处理,算术、逻辑运算
- 累加寄存器(AC):通用寄存器,在ALU运算时为其提供一个工作区暂存。运算结果是放在累加器中,故运算器中至少要有一个累加器。
- 数据缓存寄存器(DR):暂存读写的内储存的一条指令或者数据字,并将不同时段读写的内容隔开。是CPU、内存、外设之间的中转站,是三者之间操作速度上的缓存。在单累加器的运算器中,可以作为操作数寄存器。
- 状态条件寄存器(PSW):保存算术、逻辑运算、逻辑测试产生的状态码内容,状态标志和控制标志。
(2)控制器:控制CPU工作,保证程序正常执行以及处理异常。
控制器包括指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑。指令控制逻辑包括取指令、指令译码、按指令操作码执行、形成下一条指令地址。时序控制逻辑为每一条指令按时间顺序提供信号。总线控制逻辑是为多个功能部件服务的信息通路的控制电路。中断控制逻辑用于控制各种中断请求,并按照优先级排序,交给CPU处理。
- 指令寄存器(IR):CPU(执行指令)--->DR(获取内储存器中读写的指令)--->IR(送入IR暂存)--->ID(指令译码器翻译指令,并产生微指令)--->微指令控制各部件工作。IR取指令
- 程序计数器(PC):存放程序的第一条指令地址和指令计数。执行指令时CPU会自动修改PC的地址到下一条即将开始的指令地址。
- 地址寄存器(AR):保存当前CPU访问的内存单元的地址。防止因内存和CPU存在的操作速度差异导致的数据获取不全。
- 指令译码器(ID):对操作码进行分析,识别操作,发出控制信号,控制各部件工作。
(3)寄存器组:专用寄存器和通用寄存器。
- 专用寄存器:用途固定,运算器和控制器中的寄存器是专用寄存器(累加器不是)
- 通用寄存器:用途广泛,数目因处理器不同而有所差异
3.多核CPU
(1)内核(核心):CPU最重要的部分
CPU所有计算、接收、储存命令、数据处理都由内核执行 每一种内核都有固定的逻辑结构
(2)多核:满足用户同时进行多任务处理,单芯片上集成两个及以上的内核,主要厂商AMD、Intel
- AMD:两个内核做在一个晶元上,通过直接架构连接起来,每个内核可以独立运行不同指令流程,集成度更高(双核)
- Intel:两个独立的物理处理器做在一个晶元上,每个处理器有独立的缓存和控制器(双芯)
1.1.3数据表示
使用二进制机器数表示,分无符号数和带符号数。无符号数为正数,机器数中没有符号位。无符号数,约定小数点位置在机器数最低位之后是纯整数,小数点位置在最高位之前是纯小数。带符号数最高位表示正负符号位,其余表示数值。带符号的机器数可以采用原码、反码等编码方式
1.进位计数
(1)常用进位技术制
- 二进制,基本符号0、1
- 八进制,基本符号0~7
- 十进制,基本符号0~9
- 十六进制,基本符号0~9,A、B、C、D、E、F
二进制数 | 八进制数 | 十进制数 | 十六进制数 | 二进制数 | 八进制数 | 十进制数 | 十六进制数 |
---|---|---|---|---|---|---|---|
0000 | 0 | 0 | 0 | 1000 | 10 | 8 | 8 |
0001 | 1 | 1 | 1 | 1001 | 11 | 9 | 9 |
0010 | 2 | 2 | 2 | 1010 | 12 | 10 | A |
0011 | 3 | 3 | 3 | 1011 | 13 | 11 | B |
0100 | 4 | 4 | 4 | 1100 | 14 | 12 | C |
0101 | 5 | 5 | 5 | 1101 | 15 | 13 | D |
0110 | 6 | 6 | 6 | 1110 | 16 | 14 | E |
0111 | 7 | 7 | 7 | 1111 | 17 | 15 | F |
(2)进制转换
- R进制转十进制,按权展开
(a) 2进制转10进制:(10011.01)=(1x2+0x2+0x2+1x2+1x2+0x2+1x2)=(19.75)
(b)8进制转10进制:(321.6)=(3x8+2x8+1x8+6x8)=(209.75)
(c)16进制转10进制:(12A.E)=(1x16+2x16+10x16+14x16)=(298.875)
- 十进制转R进制,整数和小数部分分开转换
(a)整数部分转换:除基取余,上右下左,余数依次从低位到高位排列,直到商为0
(111)=(157)=(1111011)
(b)小数部分转换:乘基取整,上左下右,整数部分依次从高位到低位,直到小数部分为0或得到希望的数为止
(0.125)=(0.1)=(0.001)
- 二、八、十六进制相互转换
(a)八进制转二进制:把每一个八进制的数字改为3位等值二进制数。
(0)=(000),(7)=(111)
(b)十六进制转二进制:把每一个十六进制的数字改为4位等值二进制数
(0)=(0000),(F)=(1111)
(c)二进制转八进制:整数部分从低位开始每3位用一个8进制数替换,不足三位高位补0;小数部分从高位开始每3位用一个8进制数替换,不足三位低位补0。
(10110100.001)=(264.1)
(d)二进制转十六进制:整数部分从低位开始每4位用一个16进制数替换,不足四位高位补0;小数部分从高位开始每4位用一个16进制数替换,不足四位低位补0。 (1001001011.001)=(24B.2)
2.原码、反码、补码和移码
(1)原码表示法:[x]机器字长为n。第一位是符号位,0表示正号,1表示负号。
假设n=8 | 0的原码有两种00000000或者10000000 | |||
---|---|---|---|---|
若X是纯整数 | [x] =X | 0 X2-1 | [+1]=00000001 | |
若X是纯整数 | [x]=2+ x | -(2-1)- X0 | [-1]=10000001 | |
若X是纯小数 | [x] =X | 0 X1 | [+0.75]=0.1100000 | |
若X是纯小数 | [x]=2+ x | -1 X0 | [-0.75]=1.1100000 |
- 原码的加减规则复杂,需要判定符号,一般用定点原码小数表示浮点数尾数部分。
(2)反码表示法:[x]机器字长为n。第一位是符号位,0表示正号,1表示负号。正数反码原码相同,负数是其绝对值按位取反。
假设n=8 | 0的反码有两种00000000或者11111111 | |||
---|---|---|---|---|
若X是纯整数 | [x] =X | 0 X2-1 | [+1]=00000001 | |
若X是纯整数 | [x]=2+x | -(2-1)- X0 | [-1]=11111110 | |
若X是纯小数 | [x] =X | 0 X1 | [+0.75]=0.1100000 | |
若X是纯小数 | [x]=2-2+x | -1 X0 | [-0.75]=1.0011111 |
(3)补码表示法:[x]机器字长为n。第一位是符号位,0表示正号,1表示负号。正数补码和原码相同,负数补码等于反码末位加1。
假设n=8 | 0的补码00000000 | |||
---|---|---|---|---|
若X是纯整数 | [x] =X | 0 X2-1 | 最大值:01111111 | [+1]=00000001 |
若X是纯整数 | [x]=2+ x | -2 X0 | 最小值:11111111 | [-1]=11111111 |
若X是纯小数 | [x] =X | 0 X1 | [+0.75]=0.1100000 | |
若X是纯小数 | [x]=2+ x | -1 X0 | [-0.75]=1.0100000 |
- 补码可以使用加法来实现减法运算
(4)移码表示法:[x]机器字长为n。在数X上增加一个偏移量,常用于表示浮点数的阶码。偏移量为2。
假设n=8 | 0的移码10000000 | |||
---|---|---|---|---|
若X是纯整数 | [x] =2+x | -2 X2 | [+1]=10000001 | |
若X是纯小数 | [x] =1+X | -1 X1 | [+0.75]=1.1100000 |
3.定点数与浮点数
(1)定点数:小数点位置固定不变的数
- 定点整数:纯整数,小数点在最低有效位数值之后
- 定点小数:纯小数,小数点在最高有效数值之前
机器字长为n | ||
---|---|---|
码制 | 定点整数 | 定点小数 |
原码 | -(2-1)~ +(2-1) | -(1-2)~+(1-2) |
反码 | -(2-1)~ +(2-1) | -(1-2)~+(1-2) |
补码 | -2~ +(2-1) | -1~+(1-2) |
移码 | -2~ +(2-1) | -1~+(1-2) |
(2)浮点数:任意一个浮点数可用两个定点数表示,可以表示更大范围的数。浮点数的阶码用移码表示,尾数用原码表示。
-
R进制的数可以表示为X=(-1) MR,阶码常用移码表示。
-
S取值是0或1,M是X的尾数;E是X的阶或指数;R是基数 浮点数表示格式如下:
阶符 | 阶码 | 数符 | 尾数 |
---|
- 将十进制数65798转化为32位浮点数时(65798)=(1 0000 0001 0000 0110)=(0.1000 0000 1000 0011 0) 2 符号S=0,E=(128+17)=(145)=(1001 0001)
0 | 1001 0001 | 000 0000 1000 0011 0000 0000 |
---|
(a)正数最大值:0.11....111x2=(1-2)x2 (b)正数最小值:0.10....000x2=( )x2 (c)负数最小值:-0.10....000x2=-( )x2 (d)负数最大值:-0.11....111x2=-(1-2)x2
-
浮点数的规格化:一个数的浮点数表示不是唯一的,会随小数点的位置改变,阶码也随之改变。浮点数表示的范围由阶码决定,精度由尾数决定。为了更多的表示有效数字,采用规格化浮点数
左规:出现如0.00...bbbb需左规,每左移一位,阶码减1 右规:有效位进到小数点之前需要右规,每右移一位,阶码加1
-
IEEE 754 浮点数标准
1.32位单精度格式
1位 | 8位 | 23位 |
---|---|---|
符号 | 阶码 | 尾数 |
2.64位双精度格式
1位 | 11位 | 52位 |
---|---|---|
符号 | 阶码 | 尾数 |
规格化尾数第一位总为1,且位置在小数点前,因而尾数中省去第一位的1,作为隐藏位。
尾数为23位实际表示为24位有效数字,尾数为52位实际表示为53位有效数字。偏置常数分别是127和1023。
IEEE 754扩大了尾数的表示范围,浮点数的精度表示更高
-
IEEE 754将被编码的值分成了3种情况
- 规格化的值:阶码不全为0或不全为1
- 非规格化的值:全0阶码非0尾数
- 特殊值:全1阶码全0尾数表示正无穷或负无穷,全1阶码非0位数表示NaN(非数)
1.1.4校验码
- 作用:用于检验是否出错以及纠错
- 码距:一个系统编码中任意两个合法编码之间至少有多少个二进制位不同。
(1)海明码
利用奇偶性,在数据位之间特定的位置上插入k个校验位,通过扩大码距实现纠错和查错。
- 数据位为n,校验位是k,则他们之间满足2-1>=n+k
- k个校验位是P...,P,n个数据位是D...,D,海明码依次是H...,H
- P=H,数据位由低到高占据剩下位置
- 假设n=8,信息码为01101001,则
H | H | H | H | H | H | H | H | H | H | H | H |
---|---|---|---|---|---|---|---|---|---|---|---|
D | D | D | D | P | D | D | D | P | D | P | P |
海明码 | 海明码下标 | 校验位 |
---|---|---|
H | 1 | P |
H | 2 | P |
H(D,0011) | 3=1+2 | P,P |
H | 4 | P |
H(D,0101) | 5=1+4 | P,P |
H(D,0110) | 6=2+4 | P,P |
H(D,0111) | 7=1+2+4 | P,P,P |
H | 8 | P |
H(D,1001) | 9=1+8 | P,P |
H(D,1010) | 10=2+8 | P,P |
H(D,1011) | 11=1+2+8 | P,P,P |
H(D,1100) | 12=4+8 | P,P |
(2)检测错误:由上可知(表示异或)
- P=D D D D D=1 0 1 0 1=1
- P=D D D D D=1 0 1 1 1=0
- P=D D D D =0 0 1 0=1
- P=D D D D=0 1 1 0 =0
- 故海明码为,011001001101
- S=P D D D D D
- S=P D D D D D
- S= P D D D D
- S= P D D D D
- 故SSSS=0000,偶校验时SSSS为全0时表示数据无错误,不全为0时,其十进制中就是发生错误的位置。如SSSS=0101,则H(D)出错,纠错把错位取反即可。
参考资料: 《软件设计师教程》(第四版)褚华