计算机系统知识
关键词:计算机的组成、基本工作原理、体系结构、存储系统、计算机安全、可靠性与系统性能评测。
重点:
(1)计算机的组成:计算机的发展以及硬件、软件组成。
(2)计算机基本工作原理:数制,汉字编码和CPU结构工作流程
(3)计算机体系结构:体系结构的发展和分类、存储系统、指令系统、输入输出技术、流水线、总线、并行处理。
(4)计算机系统的可靠性、性能评估
1计算机系统组成与基本工作原理
1.1 计算机系统组成
计算机系统分为硬件和软件系统。计算机硬件是计算机系统中的物质基础,是摸得见看得着的。计算机软件是程序、数据、相关文档的集合,包括系统软件和应用软件。计算机系统的组成如下:
1.2计算机硬件系统
计算机硬件5大组成部分:运算器、控制器、存储器、输入设备和输出设备。
计算机硬件的电线结构包括:单总线结构、双总线结构和采用通道的大型系统结构。
单总线结构:使用一组系统总线将计算机的各个部件连接起来,各部件通过总线交换信息。
一般用在小型或者微型计算机。
优点:易于扩充新I/O设备,I/O设备的寄存器和主存储器可以统一编址使CPU访问I/O更 加灵活。
缺点:限制了信息传送的吞吐率。
双总线结构:常见的就是在内存和CPU之间设置一组专有的高速存储总线。分为以CPU为中心的双总线和以存储器为中心的双总线。
以存储器为中心的双总线结构:
主存储器通过存储总线和CPU交换信息,同时可以通过系统总线与I/O设备交换信息。
优点:信息传输效率高。
缺点:增加硬件成本。
以cpu为中心的双总线结构:
优点:控制线路简单,对I/O的总线的要求低。
缺点:CPU效率低。
采用通道的大型系统结构:一台主机可以连接多个通道,一个通道可以连接一台或多台I/O设备,具有较大的扩展性。由通道控制I/O设备,减少了CPU的压力,提高了系统效率。
1.3 基本工作原理
(1)数制转换
10进制转换成其他的都是除以要转换成的那个数,也就是说转换成二进制的就除以2,转换成八进制的就除以8,转换成十六进制的就除以16,然后倒取余数。
不同的进位制数转化为十进制数:按权展开相加
十进制是权是10;二进制是权是2;十六进制是权是16;八进制是权是8;
例:110011(二进制数)=1*2^5+1*2^4+0*2^3+0*2^2+1*2^1+1*2^0=32+16+2+1=51
1507(八进制数)=1*8^3 + 5*8^2 + 0*8^1 + 7*8^0 = 839
2AF5(十六进制数)=2*16^3 + A*16^2+ F*16^1 + 5*16^0 = 10997
二进制换算八进制
将二进制数从右到左,三位一组,不够补0
例:二进制数10110111011换八进制数:
010 110 111 011
结果为:2673
二进制转换十六进制
二进制数转换为十六进制数的方法也类似,从右到左,四位一组,不够补0
如上题:
0101 1011 1011
结果为:5BB
(2)机器数与码制
各种数据在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0、1表示,小数点则隐含表示而不占位置。机器数对应的实际数值称为真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。对于带符号数,机器数的最高位一晴地正负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若约定小数点的位置 在机器数的最高数值位之前,则是纯小数位。
为了便于运算,带符号的机器右数可采用原码,反码和补码等不同的编码方法,机器数的这些编码方法称为码制。
1. 原码表示法
数值X的原码记为[X]原,最高位是符号位,0表示正号,1表示负号,其余位表示数值的绝对值。
2.反码表示法
数值X的原码记为[X]反,最高位是符号位,0表示正号,1表示负号,正数的反码和原码相同,负数的反码则是其绝对值按位求反。
3.补码表示法
数值X的原码记为[X]补,最高位是符号位,0表示正号,1表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。
4.移码表示法
.移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,在偏移2的(n-1)次方的情况下,只要将将码的符号位取反便可获得相应的移码表示。
(3)汉字编码
区位码
为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家准: GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。
所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。
在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字 。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。
· 需要注意的是:区位码通常都是用十进制表示的,例如“诚”字的区位码为1947,也就说它位于19区第47个字符。
国标码
国家标准代码,简称国标码,是中华人民共和国的中文常用汉字编码集。国家标准强制标准冠以“GB”。现时中华人民共和国官方强制使用GB 18030标准,但较旧的计算机仍然使用GB 2312。国标码 =区位码(16进制化--区码和位码分别进行16进制转化)+2020H。
机内码
计算机只识别由0、1组成的代码,ASCII码是英文信息处理的标准编码,汉字信息处理也必须有一个统一的标准编码。 汉字交换码(国标码)主要用于汉字信息交换,我国国家标准局于1981年5月颁布了《信息交换用汉字编码字符集——基本集》,代号为GB2312-80,共对6763个汉字和682个图形字符进行了编码。
其编码原则为:汉字用两个字节表示,原则上,两个字节可以表示 256×256=65536种不同的符号,作为汉字编码表示的基础是可行的。但考虑到汉字编码与其它国际通用编码,如ASCII西文字符编码的关系,我国国家标准局采用了加以修正的两字节汉字编码方案,只用了两个字节的低7位。这个方案可以容纳128×128=16384种不同的汉字,但为了与标准ASCII码兼容,每个字节中都不能再用32个控制功能码和码值为32的空格以及127的操作码。所以每个字节只能有94个编码。这样,双七位实际能够表示的字数是:94×94=8836个。
机内码 = 国标码 + 8080H
机内码 = 区位码(16进制化--区码和位码分别进行16进制转化) + a0a0H
相互转换
内码转换为区位码
区位码: 区码=内码高字节-0xa0
位码=内码低字节-0xa0
例如:“国”内码为:0xb9,0xfa
16进制表示的区位码:0x19,0x5a
其区位码(默认为10进制):2590
区位码转换为内码
内码: 内码高字节=区码+0xa0
内码低字节=位码+0xa0
例如:“海”区位码为:2603
16进制表示的区位码:0x1a,0x03
其内码(默认为16进制):0xba,0xa3
字模
汉字在显示的时候,是以点阵的形式显示出来的,常见到的有16*16点阵、24*24点阵、32*32点阵。比如说“啊”的16*16点阵字模如下,共256Bits,占用32 Bytes:
0x00,0x00,0xf7,0x7e,0x95,0x04,0x95,0x04,0x96,0x74,0x96,0x54,0x95,0x54,0x95,0x54,0x95,0x54,0xf5,0x54,0x97,0x74,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x14,0x04,0x08
字模显示的时候,以两个字节表示一行像素点,16行就构成了一个完整的字模。屏幕在显示的时候,1显示为亮色,0显示为背景色,这样就能把字体显示出来。
字库
字库,就是所有汉字字模的集合。显然,在编排这些字模的时候需要一定的顺序(规则),而这个规则就是“机内码”。根据机内码的汉字布局,将对应的汉字字模进行整合,形成字库文件。在使用的时候,应用程序根据汉字的机内码,从字库中找到对应的存储位置,取出字模,进行显示。机内码就是汉字在字库中的索引。
在区位码中,01-09区为682个特殊字符,16~87区为汉字区,有效汉字6768个。在制作字库的时候把特殊字符删除,只使用有效汉字区。也就是说我们从第16区的第1位开始进行字模收集,当第16区收集结束,紧接着收集第17区,直到第87区编排结束。总共收集6768个汉字,占用空间216576 Bytes。
(4)CPU
CPU从逻辑上可以划分成3个模块,分别是控制器、运算器和内部寄存器,这三部分由CPU内部总线连接起来。如下所示:
控制器:控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)等,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
运算器:是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。
内部寄存器:包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。而通用寄存器用途广泛并可由程序员规定其用途,通用寄存器的数目因微处理器而异。这个是我们以后要介绍这个重点,这里先提一下。
我们将上图细化一下,可以得出CPU的工作原理概括如下:
总的来说,CPU从内存中一条一条地取出指令和相应的数据,按指令操作码的规定,对数据进行运算处理,直到程序执行完毕为止。
上图中我没有画总线,只是用逻辑方式对其进行呈现。原因早期Intel的微处理器,诸如8085,8086/8088CPU,普遍采用了地址总线和数据总线复用技术,即将部分(或全部)地址总线与数据总线共用CPU的一些引脚。例如8086外部地址总线有20根,数据总线复用了地址总线的前16根引脚。复用的数据总线和地址总线虽然可以少CPU的引脚数,但却引入了控制逻辑及操作序列上的复杂性。所以,自80286开始,Intel的CPU才采用分开的地址总线和数据总线。
不管是复用还是分开,对我们理解CPU的运行原理没啥影响,上图没画总线的目的就是怕有些人太过于追求细节,一头扎下去,浮不起来,不能从宏观上藐视敌人。
OK,总结一下,CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工。周而复始,一直这样执行下去,天荒地老,海枯枝烂,直到停电。
如果你对这段话还是觉得比较晕乎,那么就看我们老师是怎么讲的:
1、取指令:CPU的控制器从内存读取一条指令并放入指令寄存器。指令的格式一般是这个样子滴:
操作码就是汇编语言里的mov,add,jmp等符号码;操作数地址说明该指令需要的操作数所在的地方,是在内存里还是在CPU的内部寄存器里。
2、指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
3、 执行指令,分两个阶段“取操作数”和“进行运算”。
4、 修改指令计数器,决定下一条指令的地址。