计算机系统知识
计算机系统知识
计算机系统的组成
计算机硬件组成
计算机系统由硬件系统和软件系统组成。硬件由运算器、控制器、存储器、输入设备、输出设备5部分组成;软件由系统软件、应用软件组成。
- **cpu的组成:**运算器,控制器,寄存器(64位)和内部总线等部件组成
CPU的基本功能:
a) 程序控制。CPU通过执行指令来控制程序的执行顺序,这是CPU的重要功能。
b) 操作控制。一条指令功能的实现需要若干操作信号配合来完成,cpu产生每条指令的操作信号并将操作信号送往对应的部件,控制相应的部件按指令的功能要求进行操作。
c) 时间控制。CPU对各种操作进行时间上的控制,即指令执行过程中操作信号的出现时间、持续时间及出现的时间顺序都需要进行严格控制。
以上三个都是控制器,下面是运算器
d) 数据处理——CPU的根本任务,算数运算逻辑运算
此外,cpu还需要对系统内部和外部的中断(异常)做出响应,进行相应的处理
中央处理单元
运算器:对数据进行处理的部件,主要完成算术和逻辑运算;
运算器包含:
算数逻辑单元ALU(Arithmetic and logic unit):数据的算数运算和逻辑运算
累加寄存器AC(Accumulator):为ALU提供一个工作区,用来暂存数据(运算结果或源操作数的存放区)
以上两个常考
数据缓冲寄存器DR(Data Register):写内存时,暂存指令或数据
状态条件寄存器PSW(Program Status Word):存状态标志与控制标志(条形码内如,如溢出标志等)
控制器:从主存中取出指令,并指出下一条指令在主存中的位置,取出的指令经指令寄存器送往指令译码器,经过对指令的分析发出相应的控制和定时信息;
控制器的组成部分为:
程序计数器(pc)Program Counter:存储下一条要执行指令的地址(指针)
指令寄存器(ir)Instruction Register:存储即将执行的指令(操作码和地址码)
以上两个常考
指令译码器(id)Instruction Decoder:对操作进行分析解释
地址寄存器(ar)Address Register:保存当前cpu所访问的内存地址
- 计算机硬件的典型结构
- 单总线结构
- 双总线结构(以cpu为中心、以存储器为中心)
- 采用通道的大型系统结构。
计算机周期
各种计算机周期
时钟频率:xx Ghz
总线周期:cpu完成一次内存访问(读写)或IO接口操作所需要的时间;一个总线周期通常由n个时钟周期组成
时钟(振荡)周期:时钟频率(xx Ghz)的倒数,是计算机中最基本、最小的时间单位。如2.4Ghz的时钟周期为1/2.4
机器(cpu)周期:指完成一个基本操作(如取指、读存储器),以读取一个指令的最短时间来规定cpu周期。其包含多个时钟周期
指令周期:包含 取值-》分析-》执行 的时间,其可能包含0-多条总线周期
存储周期:主存储器两次启动操作之间需要的最小时间间隔,即存储器周期时间
其中:时钟周期 < 机器(cpu)周期 ~= 总线周期 < 指令周期
计算机数据表示
存储单位
数据的最小存储单位是bit(比特/位),一个b为一个二进制位(做存储空间的题时一定要转换成二进制先),一个字节(B)为8个二进制位
k、m、g是数量单位,每个单位相差1024倍
b,B是存储单位
即1B=8bit,1kB=8kb
运算方式:不要硬算,化简为2 的幂指数来计算
做题步骤:①先将十六进制的多少位(字节)算出来
②将该十六进制数用2^n n次方的十进制形式表示出来
③根据题目再进行相应的乘法除法运算
R进制
二进制0b;十六0x或H
基本概念
- 数制:r进制
- 基数:就是每一位的数码可以有多少个数字来表示。其实就是所谓的进制,十进制,基数为十,数码可以取的值有10个,分别是0~9。
- 数码:该r进制可以使用的符号
- 数位:个位十位百位
- 位权:个位数上的1 的权值为 10^0,十位数上的1 的权值为 10^1 ,百位数上的1 的权值为 10^2 。
-
二进制转八/十六进制:分3/4个一组
相反同理
-
r进制转十进制:位权展开法,从0,1,2,3…累加
-
十进制转r进制:取余后从下往上取值
算数逻辑运算
-
加减乘除
二进制的除法运算,属于模二运算,模二运算的特点是:没有进位。
模二加法:0+0=0 0+1=1 1+0=1 1+1=0
模二减法:0-0=0 0-1=1 1-0=1 1-1=0
模二乘法:0x0=0 0x1=0 1x0=0 1x1=1
-
二进制的与运算(逻辑乘),用**^**,and,-表示
-
或运算(逻辑加),用v,+,or表示
-
异或用一个用O包围的+,**xor,^**表示
上述的是位运算符,异则是1,编程里,^表示的是异或运算,&才是并
逻辑运算符
- 与:^
- 或:v
- 非: ¬ \neg ¬
位运算符
- 与:&
- 或:|
- 异或:^
数据在计算机中的表示方法(机器码和码制)
各种数据在计算机中表示的形式称为机器数,0开头表示正号,1开头表示负号,小数点隐含表示且不占位置。机器数对应的实际数据称为真值。机器数分为无符号数(unsigned)和有符号数(正和负数)。无符号数表示正数。
-
原码:真值,0开头正,1开头负,默认是8位,没有添0
-
反码:负数就取反(开头1不动),正数相同
-
补码:正数相同,负数为反码+1
即负数的补码=原码取反+1;负数的原码同样=补码+1
补码是为了消除+0和-0
常用于加减法
-
移码:=补码,但是开头符号位取反
常用于浮点数的阶码
机器码 | 能够表示的不同的有符号整数(定点小数)个数 |
---|---|
原码 | 2^n - 1 = 2^(n-1) + 2^(n-1) + 1 |
反码 | 2^n - 1 |
补码 | 2^n |
移码 | 2^n |
因为补码负数时+了1,所以原码和反码比补码和移码少一位,补码比他们多一位
例:用8位二进制表示
- 原码:-127-127共有254+相同的两个0=255个数 = 2^n - 1
- 反码:-127-127共有254+相同的两个0=255个数 = 2^n - 1
- 补码:-128-127共有255+两个0=256个数 = 2^n
定点数和浮点数
-
定点整数:符号真值.(小数点在最右)
-
顶点小数:符号.真值(小数点在真值前面)
-
浮点数:N=M*R^e
N是数符,M是尾数,e是指数(阶码),R是基数(阶码的底)
浮点数计算方法:
- 对阶:使次方相同(规则:小变大,增加几位,末尾就移除几位)
- 尾数计算相加减
- 结果格式化(负数变成1.0xxxx或正数变成0.1xxxx)
浮点数所能表示的数值范围是由阶码确定的,所表示的数值精度由尾数决定
校验码(不考)
- 码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,码距越大,越利于纠错和检错。
- 奇偶校验码:在编码中增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2(一个是校验码另一个是本身的错误)。例如:
- 奇校验:编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个(+0),则有误(+1)。
- 偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错。
crc冗余校验码
-
CRC的全称是循环冗余校验(Cyclic Redundancy Check)。**CRC只能检错,不能纠错。使用CRC编码,需要先约定一个生成多项式G(x)。**生成多项式的最高位和最低位必须是1。假设原始信息有m位,则对应多项式M(x)。生成校验码思想就是在原始信息位后追加若干校验位,使得追加的信息能被G(x)整除。接收方接收到带校验位的信息,然后用G(x)整除。余数为0,则没有错误;反之则发生错误。
例:假设原始信息串为10110,CRC的生成多项式为G(x)=x^4+x+1,求CRC校验码。
(1)在原始信息位后面添0,假设生成多项式的阶为r,则在原始信息位后添加r个0,本题中,G(x)阶为4,则在原始信息串后加4个0,得到的新串为101100000,作为被除数。
(2)由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0。本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到除数10011。
(3)生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不借位的除法运算)。**除法过程(好像是异或运算)**如下图所示。
得到余数1111(余数的位数要和阶数要和r相同)。
注意:余数不足r,则余数左边用若干个0补齐。如求得余数为11,r=4,则补两个0得到0011。
该余数也就是crc的校验位
(4)生成最终发送信息串,将余数(校验位)添加到原始信息后(变成校验码)。上例中,原始信息为10110,添加余数1111后,结果为101101111。发送方将此数据发送给接收方。
(5)接收方进行校验。接收方的CRC校验过程与生成过程类似,接收方接收了带校验和的帧后,用多项式G(x)来除。余数为0,则表示信息无错;否则要求发送方进行重传。
注意:收发信息双方需使用相同的生成多项式。
海明校验码
-
海明码:本质也是利用奇偶性来检错和纠错的检验方法,构成方法实在数据位之间的确定位置上插入k个校验位,通过扩大码距实现检错和纠错。
设数据位是s位,校验位是j位,则s和j必须满足以下关系:2^j-1>=s+j
比如一个有10位数海明码,那么它的校验位最大的位数为8
又比如一个有10位的数据,则至少需要添加4位的校验位才能成为海明校验码
例:求信息1011的海明码
-
1.校验位的位数和具体的数据位的位数之间的关系
所有位都编号,从最低位编号(最右边开始),从1开始递增,校验位处于2的n(n=012.....)次方中,即处于第1,2,4,8,16,32,.....位上,其余位才能填充真正的数据位,若信息数据为1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从高位开始存放1011,得出信息位和校验位分布如下:
因此可以得知所有的校验码都比信息位中位数最大的位数要小
-
2.计算校验码
将所有信息位的编号都拆分成二的n次表示后,校验位的值=校验的信息位的异或运算,如下图所示:
上图中,7=4+2+1,表示7由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(ro) 共同校验,同理,第6位数据位6=4+2,第5位数据位5=4+1,第3位数据位3=2+1,
前面知道,这些2的n次方都是校验位,可知,第4位校验位校验第765三位数据 位,因此,第4位校验位r2等于这三位数据位的值异或,第2位和第1位校验位计 算原理同上.
计算出三个校验位后,可知最终要发送的海明校验码为1010101(校验位穿插在中间,和信息位组成校验码。不像crc校验位在末尾)
-
3.检错和纠错原理
接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:
如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确,假设是偶校验,且接收到的数据为1011101(第四位出错),此时,运算的结果为:
这里不全为0,表明传输过程有误(用了偶检验),并且按照r2r1r0排列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错方法就是将该位逆转。