计算机系统基础知识-千里之行始于足下

130 阅读12分钟

前言

最近复习准备软考,计算机系统基础知识大学学过基本都还给老师了,记录复习一下。

1.1计算机系统基础知识

1.1.1计算机系统硬件基本组成

  • 输入设备、输出设备:分别用于输入原始数据和输出运算结果
  • 运算器、控制器:组成CPU的核心部分
  • 储存器:计算机系统的记忆设备

1.1.2CPU

1.功能

  • 程序控制:CPU执行指令控制程序执行顺序
  • 操作控制:指令产生操作信号,控制若干部件进行操作
  • 时间控制:CPU对各种操作限时间
  • 数据处理:CPU对数据进行算术、逻辑运算,得到加工处理的结果
  • 异常处理:对系统的中断做响应

2.组成

0be2ba6a31aa3a9360b39828c83455f.png

(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
二进制数八进制数十进制数十六进制数二进制数八进制数十进制数十六进制数
000000010001088
000111110011199
001022210101210A
001133310111311B
010044411001412C
010155511011513D
011066611101614E
011177711111715F
(2)进制转换
  • R进制转十进制,按权展开

(a) 2进制转10进制:(10011.01)2_2=(1x24^4+0x23^3+0x22^2+1x21^1+1x20^0+0x21^{-1}+1x22^{-2}10_{10}=(19.75)10_{10}

(b)8进制转10进制:(321.6)8_8=(3x82^2+2x81^1+1x80^0+6x81^-1)10_{10}=(209.75)10_{10}

(c)16进制转10进制:(12A.E)16_{16}=(1x162^2+2x161^1+10x160^0+14x161^{-1})10_{10}=(298.875)10_{10}

  • 十进制转R进制,整数和小数部分分开转换

(a)整数部分转换:除基取余,上右下左,余数依次从低位到高位排列,直到商为0

(111)10_{10}=(157)8_{8}=(1111011)2_{2}

(b)小数部分转换:乘基取整,上左下右,整数部分依次从高位到低位,直到小数部分为0或得到希望的数为止

(0.125)10_{10}=(0.1)8_{8}=(0.001)2_{2}

  • 二、八、十六进制相互转换

(a)八进制转二进制:把每一个八进制的数字改为3位等值二进制数。

(0)8_{8}=(000)2_{2},(7)8_{8}=(111)2_{2}

(b)十六进制转二进制:把每一个十六进制的数字改为4位等值二进制数

(0)16_{16}=(0000)2_{2},(F)16_{16}=(1111)2_{2}

(c)二进制转八进制:整数部分从低位开始每3位用一个8进制数替换,不足三位高位补0;小数部分从高位开始每3位用一个8进制数替换,不足三位低位补0。

(10110100.001)2_{2}=(264.1)8_{8}

(d)二进制转十六进制:整数部分从低位开始每4位用一个16进制数替换,不足四位高位补0;小数部分从高位开始每4位用一个16进制数替换,不足四位低位补0。 (1001001011.001)2_{2}=(24B.2)16_{16}

2.原码、反码、补码和移码

(1)原码表示法:[x]_原机器字长为n。第一位是符号位,0表示正号,1表示负号。
假设n=80的原码有两种00000000或者10000000
若X是纯整数[x]_原 =X0 \leq X\leq2n1^{n-1}-1[+1]_原=00000001
若X是纯整数[x]_原=2n1^{n-1}+ \lvertx\rvert-(2n1^{n-1}-1)-\leq X\leq0[-1]_原=10000001
若X是纯小数[x]_原 =X0 \leq X<<1[+0.75]_原=0.1100000
若X是纯小数[x]_原=20^0+ \lvertx\rvert-1<< X\leq0[-0.75]_原=1.1100000
  • 原码的加减规则复杂,需要判定符号,一般用定点原码小数表示浮点数尾数部分。
(2)反码表示法:[x]_反机器字长为n。第一位是符号位,0表示正号,1表示负号。正数反码原码相同,负数是其绝对值按位取反。
假设n=80的反码有两种00000000或者11111111
若X是纯整数[x]_反 =X0 \leq X\leq2n1^{n-1}-1[+1]_反=00000001
若X是纯整数[x]_反=2n1^n-1+x-(2n1^{n-1}-1)-\leq X\leq0[-1]_反=11111110
若X是纯小数[x]_反 =X0 \leq X<<1[+0.75]_反=0.1100000
若X是纯小数[x]_反=2-2(n1)^{-(n-1)}+x-1<< X\leq0[-0.75]_反=1.0011111
(3)补码表示法:[x]_补机器字长为n。第一位是符号位,0表示正号,1表示负号。正数补码和原码相同,负数补码等于反码末位加1。
假设n=80的补码00000000
若X是纯整数[x]_补 =X0 \leq X\leq2n1^{n-1}-1最大值:01111111[+1]_补=00000001
若X是纯整数[x]_补=2n^n+ x-2n1^{n-1} \leq X\leq0最小值:11111111[-1]_补=11111111
若X是纯小数[x]_补 =X0 \leq X<<1[+0.75]_补=0.1100000
若X是纯小数[x]_补=2+ x-1\leq X<<0[-0.75]_补=1.0100000
  • 补码可以使用加法来实现减法运算
(4)移码表示法:[x]_移机器字长为n。在数X上增加一个偏移量,常用于表示浮点数的阶码。偏移量为2n1^{n-1}
假设n=80的移码10000000
若X是纯整数[x]_移 =2n1^{n-1}+x-2n1^{n-1} \leq X<<2n1^{n-1}[+1]_移=10000001
若X是纯小数[x]_移 =1+X-1 \leq X<<1[+0.75]_移=1.1100000

3.定点数与浮点数

(1)定点数:小数点位置固定不变的数
  • 定点整数:纯整数,小数点在最低有效位数值之后
  • 定点小数:纯小数,小数点在最高有效数值之前
机器字长为n
码制定点整数定点小数
原码-(2n1^{n-1}-1)~ +(2n1^{n-1}-1)-(1-2(n1)^{-(n-1)})~+(1-2(n1)^{-(n-1)})
反码-(2n1^{n-1}-1)~ +(2n1^{n-1}-1)-(1-2(n1)^{-(n-1)})~+(1-2(n1)^{-(n-1)})
补码-2n1^{n-1}~ +(2n1^{n-1}-1)-1~+(1-2(n1)^{-(n-1)})
移码-2n1^{n-1}~ +(2n1^{n-1}-1)-1~+(1-2(n1)^{-(n-1)})
(2)浮点数:任意一个浮点数可用两个定点数表示,可以表示更大范围的数。浮点数的阶码用移码表示,尾数用原码表示。
  • R进制的数可以表示为X=(-1)S^S ×\times M×\timesRE^E,阶码常用移码表示。

  • S取值是0或1,M是X的尾数;E是X的阶或指数;R是基数 浮点数表示格式如下:

阶符阶码数符尾数
  • 将十进制数65798转化为32位浮点数时(65798)2_2=(1 0000 0001 0000 0110)2_2=(0.1000 0000 1000 0011 0)×\times 217^{17} 符号S=0,E=(128+17)10_{10}=(145)10_{10}=(1001 0001)2_2
01001 0001000 0000 1000 0011 0000 0000

(a)正数最大值:0.11....111x21....11^{1....11}=(1-224^{-24})x2127^{127} (b)正数最小值:0.10....000x20...00^{0...00}=( 12\frac{1}{2})x2127^{127} (c)负数最小值:-0.10....000x20...00^{0...00}=-( 12\frac{1}{2})x2127^{127} (d)负数最大值:-0.11....111x21....11^{1....11}=-(1-224^{-24})x2127^{127}

  • 浮点数的规格化:一个数的浮点数表示不是唯一的,会随小数点的位置改变,阶码也随之改变。浮点数表示的范围由阶码决定,精度由尾数决定。为了更多的表示有效数字,采用规格化浮点数

    左规:出现如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,则他们之间满足2k^k-1>=n+k
  • k个校验位是Pk_k...,P1_1,n个数据位是Dn1_{n-1}...,D0_{0},海明码依次是Hn+k_{n+k}...,H1_{1}
  • Pi_{i}=H2i1_{2^{i-1}},数据位由低到高占据剩下位置
  • 假设n=8,信息码为01101001,则
H12_{12}H11_{11}H10_{10}H9_{9}H8_{8}H7_{7}H6_{6}H5_{5}H4_{4}H3_{3}H2_{2}H1_{1}
D7_7D6_{6}D5_{5}D4_{4}P4_{4}D3_{3}D2_{2}D1_{1}P3_{3}D0_{0}P2_{2}P1_{1}
海明码海明码下标校验位
H1_{1}1P1_{1}
H2_{2}2P2_{2}
H3_{3}(D0_{0},0011)3=1+2P1_{1},P2_{2}
H4_{4}4P3_{3}
H5_{5}(D1_{1},0101)5=1+4P1_{1},P3_{3}
H6_{6}(D2_{2},0110)6=2+4P2_{2},P3_{3}
H7_{7}(D3_{3},0111)7=1+2+4P1_{1},P2_{2},P3_{3}
H8_{8}8P4_{4}
H9_{9}(D4_{4},1001)9=1+8P1_{1},P4_{4}
H10_{10}(D5_{5},1010)10=2+8P2_{2},P4_{4}
H11_{11}(D6_{6},1011)11=1+2+8P1_{1},P2_{2},P4_{4}
H12_{12}(D7_{7},1100)12=4+8P3_{3},P4_{4}

(2)检测错误:由上可知(\bigoplus表示异或)

  • P1_{1}=D0_{0} \bigoplus D1_{1} \bigoplus D3_{3} \bigoplus D4_{4} \bigoplus D6_{6}=1 \bigoplus 0 \bigoplus1 \bigoplus0 \bigoplus1=1
  • P2_{2}=D0_{0} \bigoplus D2_{2} \bigoplus D3_{3} \bigoplus D5_{5} \bigoplus D6_{6}=1 \bigoplus0 \bigoplus1 \bigoplus1 \bigoplus1=0
  • P3_{3}=D1_{1} \bigoplus D2_{2} \bigoplus D3_{3} \bigoplus D7_{7} =0 \bigoplus0 \bigoplus1 \bigoplus0=1
  • P4_{4}=D4_{4} \bigoplus D5_{5} \bigoplus D6_{6} \bigoplus D7_{7}=0 \bigoplus1 \bigoplus1 \bigoplus0 =0
  • 故海明码为,011001001101
  • S1_{1}=P1_{1} \bigoplusD0_{0} \bigoplus D1_{1} \bigoplus D3_{3} \bigoplus D4_{4} \bigoplus D6_{6}
  • S2_{2}=P2_{2} \bigoplusD0_{0} \bigoplus D2_{2} \bigoplus D3_{3} \bigoplus D5_{5} \bigoplus D6_{6}
  • S3_{3}= P3_{3} \bigoplusD1_{1} \bigoplus D2_{2} \bigoplus D3_{3} \bigoplus D7_{7}
  • S4_{4}= P4_{4} \bigoplusD4_{4} \bigoplus D5_{5} \bigoplus D6_{6} \bigoplus D7_{7}
  • 故S1_{1}S2_{2}S3_{3}S4_{4}=0000,偶校验时S1_{1}S2_{2}S3_{3}S4_{4}为全0时表示数据无错误,不全为0时,其十进制中就是发生错误的位置。如S1_{1}S2_{2}S3_{3}S4_{4}=0101,则H5_{5}(D1_{1})出错,纠错把错位取反即可。

参考资料: 《软件设计师教程》(第四版)褚华