这两天整理了下电脑,发现自己之前考软件设计师啊,系统架构师啊之类用到的一些资料,现在决定把它稍微整理下,放到网上了。其实也都是来自网络的。也就转载下吧相当于。
先从计算机系统知识开始了。
——————————————————————————浑割线———————————-
1.1**计算机系统结构**
计算机的发展历史:
1946年,世界上第一台电子计算机ENIAC出现,之后经历了5个发展阶段:
电子管——>晶体管——>集成电路——>大规模集成电路——>超大规模集成电路。
冯式结构计算机的组成部分:存储器、运算器、控制器、输入设备和输出设备。
强化的概念:
**计算机的工作过程:一般是由用户使用各种编程语言把所需要完成的任务以程序的形式提交给计算机,然后翻译成计算机能直接执行的机器语言程序,在计算机上运行。计算机系统从里到外可以由下面的表示:
物理机器——操作系统机器——汇编语言机器——高级语言机器
计算机系统结构(computer architecture):指机器语言级机器(物理机器)的系统结构,它主要研究软件、硬件功能分配,确定软件、硬件界面(机器级界面),即从机器语言程序员或编译程序设计者的角度所看到的机器物理系统的抽象。
计算机组成(computer organization):是指计算机系统的逻辑实现,包括机器内部数据流和控制流的组成以及逻辑设计等,其目标是合理的把各种部件、设备组成计算机,以实现特定的系统结构,同时满足所希望达到的性能价格比。
计算机实现(computer implementation)是指计算机组成的物理实现。
这几个概念之间的关系可以用下面的图加以说明:
计算机系统结构——1:n——计算机组成——1:n——计算机物理实现
计算机系统的分类:Flynn分类、冯氏分类、Handler分类和Kuck分类;
Flynn分类:根据不同指令流—数据流组织方式把计算机系统分成4类。(重点理解)
指令流:机器指令的执行序列;
数据流:由指令流调用的数据序列,包括输入数据和中间结果;
多倍性:在系统性能的瓶颈部件上同时处于同样执行阶段的指令和数据的最大可能个数;
I. 单指令流单数据流SISD——如单处理机
II. 单指令流多数据流SIMD——如相联处理机
III. 多指令流单数据流MISD——如流水线计算机
IV. 多指令流多数据流MIMD——如多处理机
冯氏分类:以最大并行度Pm把计算机系统结构分为4类,其中字宽W表示在一个字中同时处理的二进制位数,位宽B表示在一个位片中能同时处理的字数。
I. 字串位串WSBS(serial)(parallel)
II. 字并位串WPBS
III. 字串位并WSBP
IV. 字并位并WPBP
Handler**分类**:根据并行度和流水线处理的程度将计算机系统结构分成3个层次
I. 程序控制部件PCU的个数K
II. 算术逻辑部件ALU或处理部件PE的个数D
III. 每个算术逻辑部件包含基本逻辑线路ELC的套数W
Kuck**分类**:与Flynn分类法类似,根据指令流、执行流和多倍性来分类。
I. 单指令流单执行流SISE——典型的单处理机
II. 单指令流多执行流SIME——带多操作部件的处理机
III. 多指令流单执行流MISE——带指令级多道程序的单处理机
IV. 多指令流多执行流MIME——多处理机
计算机不同级别程序员所见的计算机部分,透明性的概念:
透明性:一种实际存在的事物或属性,从某个角度看似乎不存在的现象。
低层机器级的概念结构和功能特性对于高级语言的程序员来说是透明的。
1.2 计算机中的编码:
(1)二进制、十进制和十六进制等常用数制及其相互转换:
由于计算机的存储器和寄存器是两态部件,所以各种信息在计算机中是以二进制的方式存储和计算的。数制是由基数和基数个不同的数码组成的。
BCD码:十进制的二进制表示,
0:0000 1:0001 2:0010 3:0011 4:0100 5:0101
6:0110 7:0111 8:1000 9:1001
十进制的202可以表示成BCD码为0010 0000 0010;
十六进制 <-> 二进制->:十六进制表示法是用16位二进制数字组成的,每4位二进制数字表示一位十六进制数,十六进制的数字表示从0-9,A,B,C,D,E,F共十六个字符.十六进制与二进制相互转换就是一位十六进制字符与四位二进制数字的相互转换过程.
十进制 <-> 二进制->:十进制向二进制转换分两步进行:首先把该数的整数部分和小数部分转换为二进制数;然后再把这两部分合并起来即可.十进制的整数部分向二进制转换是通过对十进制不断的除2取余数得到,十进制小数部分通过乘2取整的方法获得,直到小数部分为0,所得到的整数部分就形成了二进制编码;同样的,二进制向十进制转换如下所示:
十进制数N=(RnRn-1…R1RR-1…R-m)
= Rn 2n+Rn-12n-1+…+R12+R+R-12-1…R-m*2-m
八进制 <-> 二进制:->二进制向八进制转换的方法是从小数点开始分别向左右每3位二进制数编成一组,若不够3位 ,则小数点左侧的最高位和右侧的最低位用0补充,每一组用对应的八进制的数码表示即可;八进制向二进制转换的方法是从小数点开始,把每一位八进制的数码转换成对应的3位二进制即可.其小数点左侧的最高位或右侧的最低位的0可以省去.
⑵ 计算机中的二进制数运算方法: **
1. 定点数运算:要判断是否溢出?()
加法:[X+Y]=([X]补+[Y]补) MOD 2
减法:[X-Y]=([X]补+[-Y]补)MOD 2
乘法:采用原码比较方便,使用原码一位乘法来求两个定点数的乘积。运算规则为:
n 乘积的符号位等于乘数和被乘数的符号位进异或;
n 乘积的值等于两数绝对值之积,即乘数和被乘数的绝对值进行移位相加;
除法:采用原码比较方便。运算规则为:
商的符号位同定点数原码乘法的处理方法,由两数的符号位进行异或
两数的绝对值部分进行相除。
2. 浮点运算
1) 加减法:
a) 对阶
b) 尾数进行加、减运算
c) 规格化
d) 舍入
e) 溢出判断
2) 乘除法:
浮点相乘,其积的阶码为两数阶码相加,积的尾数为两尾数相乘。
浮点数相除,其商的阶码为两数阶码之差,商的尾数为两尾数相除。
其结果都需要进行规格化处理,同时还需要进行溢出判断。
⑶ 逻辑代数的基本运算和逻辑表达式的化简: **
**逻辑表达式就是以逻辑运算符把若干逻辑变量连接在一起表示某种关系的表达式。一个逻辑函数往往有多种不同的表达式。可以利用其本逻辑运算规律和一些常用的逻辑恒等式对逻辑表达式进行合并项、吸收项、配项、消去项等操作来化简。
基本的逻辑运算有“与”、“或”、“非”、“异或”。
常用的逻辑运算公式:
交换律:A+B=B+A A*B=B*A
结合律:A+(B+C)=(A+B)+C
分配律:A*(B+C)=A*B+A*C A+(B*C)=(A+B)*(A+C)
反演律:A+B= A * B
重叠律:A+A=A A*A=A
互补律:A+ A =1 A* A =0
对合律: A =A
0-1律:0+A=A A*A=0
⑷ 定点数与浮点数的机内表示 :
定点数的表示方法:
定点整数:(符号位)(最高数据位)。。。(最低数据位)
定点小数:(符号位)小数点(最高数据位)。。。(最低数据位)
浮点数表示方法:
浮点数编码:符号位-阶码-尾数,阶码由移码表示,尾数由补码或原码表示;
规格化处理:以纯小数表示尾数,分为原码和补码;
⑸ 原码、补码、反码、移码 ;
** 数值数据的机器内表示形式称为机器码,机器码所代表的数值为该机器码的真值。
原码表示:[X]=X或2n-1-X;+0和-0的表示不同;(定点整数)
[X]=X或1-X; (定点小数)
+0=00000000 -0=10000000 (2的n次方-1个编码)
补码表示:[X]=X或2n+X; (定点整数)
[X]=X或2+X; (定点小数)
0的编码唯一;00000000 (2的n次方个编码)
-1=10000000 (小数) -1=11111111(整数)
反码表示:[X]=X或(2n-1)+X; (定点整数)
[X]=X或(2-2-n+1)+X (定点小数)
+0=00000000 -0=11111111 (2的n次方-1个编码)
移码表示:[X]=X或2的(n-1)次方+X;0表示方法唯一10000000 (定点整数)
[X]=1+X; (定点小数)
0的编码唯一:10000000 (2的n次方个编码)
⑹ ASCII码及汉字编码等常用的编码 : **
**ASCII码采用7bit编码, 共有128种编码;表示128个不同的字符;计算机里存储和传送单位通常使用Byte,所以7位的ASCII码也用一个字节来表示,最高一位没有用,通常也添0,也可以把它作为校验位或用来扩展字符集。
EBCDIC码采用8bit编码,共有256个编码,表示256个不同字符;
汉字编码:
数字编码:每个汉字分配一个数字码,用以代表汉字;
拼音码:用每个汉字的汉语拼音符号作为汉字的输入编码;
字形码:以汉字的形状特点编码,例如五笔字型编码
汉字存储:以内码形式存放,以连续两个字节表示,两个字节的最高位均为1,汉字的内码是在计算机内处理汉字信息时采用的机内代码,把汉字的输入编码称为外码。
汉字输出:汉字的点阵字型码,点阵的密度决定了汉字的美观程度,汉字需要大量的存储空间,例如16*16点阵,每个汉字要占用16*16=32Byte
(7) 数据校验码:计算机在存储和传送数据过程中,为了保证数据的准确性,一般都要进行数据校验和纠错。通常使用校验码的方法来检测数据是否出错。其基本思想是把数据可能出现的编码区分为合法编码和错误编码。
使用校验码来查错,涉及到一个重要概念——码距。它是指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。码距为1的编码是不能发现错误的。
常用的校验码有3种。
▲奇偶校验码:不能发现偶数位错误
该编码通过增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验)从而使码距变为2,来检测数据代码中奇数出错的编码。因为其利用的是编码中1的个数的奇偶性作为依据,所以不能发现偶数位错误。
校验位的添加方法有三种:
n 水平奇偶校验码:对每个数据的编码添加校验位
n 垂直奇偶校验码:对一组数据的相同位添加一个校验位;
n 水平垂直奇偶校验码:先对一组数据垂直校验,所得结果再添加一位水平校验位;
▲海明校验码:2^k – 1 >= n+k
也是利用奇偶性来检错和纠错,通过在数据之间插入k个校验位,扩大数据编码的码距,从而有能力检测出n位错,并能纠正1位或n位错。
▲循环校验码(CRC)校验码:采用模2运算,可检测所有等于、小于校验位长度的突发错,利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+rk,又称为(n,k)码,生成的多项式与被校验的数据无关。
编码效率=(log2(码字数))/总位数
举一个例子:关于二进制的编码的考试题目
根据“冗余校验”的思想,码距可用来判断使校验码制冗余的程度,并估价其查错、纠错能力。“8421”码的码距为A ,因而它B 。若一组海明(Hamming)码有效信息位k=4,校验位r=3,则其码距为C ,用它能够发现D位错,并可纠正E位错。
A**、C、D、E:** ①0 ②1 ③2 ④3 ⑤4 ⑥7
B**:** ①能发现1位错 ②能纠正1位错 ③能发现并纠正1位错 ④不能查错、纠错
**本题主要考查数据校验方法的相关知识。
在这部分知识点中有个很重要的概念——码距。码距是指一个编码系统中任意两个合法编
这里有个定理,即若一种校验码合法码字集的码矩为2d+1,则它能够发现2d位错,并能纠正d位错
A: 2 B: 4 C: 4 D: 3 E: 2