目录
摘要
这里对应系分教程的第6章:系统配置与性能评价。主要核心内容有:Flynn分类法、CISC与RISC、存储系统(Cache和磁盘)、流水线(执行时间、吞吐率、加速比)、校验码。
一、计算机组成与分类
1.1 计算机的硬件组成
主要有6个部分组成:控制器、运算器、主存储器、辅助存储器(外存储器)、输入设备、输出设备。现在控制器和运算器一般会被集成在CPU里。
1.2 计算机的软件分类
主要分为应用软件和系统软件两大类。
系统软件:系统软件用于实现计算机的管理、调度、监视和服务等功能。主要分为有五类:操作系统、语言处理程序(编译程序、汇编程序、解释程序等)、服务性程序、数据库管理系统、计算机网络软件。
应用软件:应用软件是用户为解决某种问题而编制的一些程序或是第三方公司为各自业务开发和使用的各种软件,比如财务管理软件、项目管理软件、聊天工具等。
1.3 固件
除了软件和硬件,其实还有固件,它指永久保存了信息的器件,是具有软件功能的硬件,固件的性能指标介于硬件和软件之间。
1.4 计算机系统结构的分类
这里主要有Flynn分类法(弗林分类法)、冯氏分类法、Handler分类法、Kuck分类法。
1.3.1 Flynn分类法
它根据指令流-数据流对计算机系统进行分类,主要有单指令流单数据流(SISD)、单指令多数据流(SIMD)、多指令单数据流(MISD)、多指令多数据流(MIMD),具体如下:
1.3.2 其他分类法
冯氏分类法:根据计算机系统在单位时间能处理的最大二进制位数来对计算机进行分类。
Handler分类法:根据计算机指令执行的并行度和流水线来对计算机进行分类。
Kuck分类法:与FLynn分类法类似,但又不一样,它用指令流和执行流以及多倍性来区分计算机系统,强调的是执行流。
二、多级存储器体系
计算机采用多级存储,尽可能提高存取速率,并保持降低成本。存取方式有4种,分别适用不同的存储器。存储器体系有寄存器、Cache(高速缓存)、主存储器(内存)、辅助存储器(外存)。一般寄存器不规划在存储体系里,若只有三层的话,那去掉寄存器。
2.1 存取方式
顺序存取:存数据以记录的方式存储,访问数据按线性顺序进行。采用此方式的有:磁带存储器。
直接存取:用一个共享的读写装置对所有数据进行访问,每个数据块都有唯一地址标识,读写装置可以直接移动到目的数据块进行读写。存取时间会随着距离和移动方式变化而变化。采用此方式的有:磁盘存储器。
随机存取:存储器的每个寻址单元都有唯一的地址和读写装置,系统可以在相同时间内对任意一个存储单元进行访问。采用此方式的有:主存储器(内存条)。
相联存取:一种特殊的随机存取,每个单元都有独立的读写装置,但选择某一单元进行读写是取决于其内容而不是地址。读写时间和随机存取一样是个常数。采用此方式的有:Cache。
2.2 Cache
高速缓存,它用来提升CPU数据的输入输出效率。一般有1、2、3级缓存。
2.2.1 访问周期
使用Cache+主存的方式进行读取的周期为:t=Cache周期×Cache命中率+内存周期×(1-Cache命中率)。 其中 1-Cache命中率 也称为失效率(未命中率)。
2.2.2 局部性原理
时间局部性:程序中的某条指令一旦执行,不久后该指令可能再次执行。典型情况是程序中大量存在循环操作。
空间局部性:一旦程序访问了某个存储单元,不久之后,附近的㽾单元也将被访问,即程序在一段时间内访问的地址集中在一个范围内,典型情况是程序顺序执行。
工作集理论:工作集是进程运行时频繁被访问的页面集合。
以上理论是分级存储的理论基础。
2.2.3 页面淘汰
淘汰算法有:随机淘汰法、先进先出淘汰法(FIFO)、近期最少使用淘汰(LRU)。其中平均命中率最高的是LRU。
2.2.4 写操作
写操作需要Cache与主存数据保持一致,主要有以下几种方法:
1、写直达:当要写Cache时,数据同时写回内存。
2、写回:只写Cache,当数据淘汰时写回内存。
3、标记法:只写内存,并将标志位设置为0。Cache读取到标志为0的数据则需要从内存中读取最新数据,更新Cache的数据并将标志位设置为1。
2.2.5 映射机制
CPU发出发出访址请求后,存储器地址先被发送到Cache中寻找,若命中则直接对Cache进行访问,这个过程叫做映射。这种主存单元与Cache的地址转化由硬件直接完成。映射方式有三种:直接映射、全相联映射、组相联映射。
直接映射:硬件电路简单,冲突高。直接相联中内存需要分区,每个区的页数和Cache的页数是一样的。具体如下:
全相联映射:电路难于设计实现,适用于小容量Cache,冲突率低。
组相联影射:直接相联与全相联的折中。
2.3 主存储器
一般简称主存或内存。根据工艺和技术不同,主要分为以下几种:
(1) RAM:随机存取存储器(Random Access Memory),RAM存储器既可以写入也可以读出,但断电信息无法保存。
(2) ROM:只读存储器(Read Only Memory),信息固化在存储器中,只可读出,不可改写。微机控制程序还有以前的BIOS常用ROM保存。
(3) PROM:可编程只读存储器(Programmable ROM),只能一次写入操作,但出厂后可用特殊电子设备进行写入。近些年的BIOS也用过PROM保存。后续还有:EPROM(可擦除编程ROM,紫外光擦除,可写入多次) 、EEPROM(电擦除编程ROM,电擦除,可写入多次)。
(4) Flash Memory:闪速存储器,简称闪存,可用电信号删除,可以删除某块单元而不能进行字节级别的删除,可以写入多次,集成度高于EEPOM。
2.4 辅助存储器
一般有硬盘、硬盘阵列、光盘、磁带。这里主要讲磁盘和磁盘阵列。
2.4.1 磁盘
磁头:每张磁片的正反两面各有一个磁头,磁头负责读写磁面数据。因此,用第磁头就可以表示数据在哪个磁面。而且,一个硬盘可能会有多张磁片。
柱面:所有磁片中半径相同的磁道构成的“柱面”。因为磁头不能分开运动。所以硬盘写数据会尽可能写在同一柱面上。对于单个磁面来讲,柱面=磁道。
扇区:将磁道划分为若干个小的区段,就是扇区。
存取时间=寻道时间+等待时间(平均定位时间+转动延迟)
2.4.2 磁盘阵列
一共有8个RAID级别,分别是RAID0到RAID7。当然,还有派生的RAID,比如RAID0和RAID1组合派生出了RAID10。级别分别如下:
RAID0:无冗余,所有容量可以用来存储数据,但故障率高。
RAID1:有冗余,每个工作盘都有个镜像拷贝盘。但空间利用率只有50%。
RAID2:采用海明码纠错技术,根据海明码公式2^k-1>=n+k(N为数据长度,K为校验长度),空间利用率为先要根据硬盘数N计算出K,空间利用率为n/(n+k)。比如有4个硬盘当数据盘,比如n=4时,k≥3,因此n等于4时,空间利用率最多为4/(4+3)=4/7。
RAID3:有冗余,采用奇偶码校验,有一个专门的盘存来存储这些校验信息,其它的都是数据盘,空间利用率为(n-1)/n。 由于校验盘的读写次数远大于其它数据盘,因此校验盘很容易坏,因此有了RAID5,校验信息分散再各个工作盘。
RAID4:有冗余,和RAID3类似,也采用奇偶码校验,有一个专门的盘存来存储这些校验信息,其它的都是数据盘,空间利用率为(n-1)/n。与RAID3不同的是RAID3是按位访问磁盘,而RAID4是按块访问磁盘。
RAID5:有冗余,每个工作盘的数据都有校验信息,这些校验信息会分散存在工作盘上。 校验信息总大小为1块盘。即空间利用率为(n-1)/n。
RAID6:有冗余,有两种校验,所以允许两块盘损坏,空间利用率是(n-2)/n。
RAID7:对于以前的RAID有明显区别,它可以理解为一个独立的存储计算机,有自己文件操作系统和管理工具,完全可以独立运行,不占主机CPU资源,所有IO都是异步的。目前RAID7只规定了自动恢复等指标,对于用什么算法支持恢复,多少个数据盘容量来存储校验信息没有统一标准,后续由各厂家自己实现,因此空间利用率不确定。
综上空间利用率:RAID0为100%;RAID2为n/(n+k),其中其中n为数据盘,n+k为总磁盘数,k是海明码公式通过n计算得出;RAID3~5为:(n-1)/n,其中n为总磁盘数;RAID6为(n-2)/n,其中n为总磁盘数;RAID7不确定,由各厂家决定。
RAID10:RAID0+1,主盘负责读写,镜像盘负责备份和读。相对于RAID1多了镜像盘读,相对于RAID0多了镜像盘备份和读。
三、输入输出系统
3.1 总线
总线是一组互联和传输信息(地址、数据、指令)的信号线,它好比连接计算机各个部件的桥梁。同一时刻,一条总线仅允许一个设备发送,多个设备接收。
总线的分类:按总线位置分为内部总线和外部总线。按功能可分为地址总线、数据总线、控制总线。
内部总线:在CPU内部,寄存器、算术逻辑部件、控制部件之间传输数据的总线称为内部总线。
外部总线:CPU与内存RAM、ROM以及输入输出系统的接口之间通信的通路称为外部总线。
地址总线:传输地址的总线。比如传输RAM的地址。
数据总线:传输数据的总线。比如在CPU与RAM之间来回传输数据。
控制总线:传输控制信号的总线。比如将微处理单元控制信息传输到周边设备。
3.2 输入输出方式
在计算机中,I/O系统有5种不同工作方式,分别是:程序控制方式、程序中断方式、DMA(直接内存存取)工作方式、通道方式、输入/输出处理机(I/O处理机)。
程序控制方式(程序查询):程序调用CPU对设备进行I/O,硬件开销小,但需要等待I/O设备就绪,I/O能力不高,CPU循环查询等待设备就绪也严重影响CPU利用率。这种方式耗费CPU时长最多。
程序中断方式:IO系统与外设交换数据时,CPU无需查询IO状态,等IO完成则发送中断信号通知CPU,CPU会中断当前程序,保留现场,进而转到IO中断程序与IO系统进行数据交换,完成IO处理后,CPU又返回原程序执行。
DMA方式:外设与主存直连,有DMA负责传输数据,CPU只需发送开始结束指令给DMA即可。
通道方式:通道也是一种高级IO控制器,是DMA的进一步发展,CPU只需管理比如启动停止通道控制器,后续CPU就无需管理IO了。IO控制器会高速的执行IO,将多台设备与主存进行数据传输。
I/O处理机:相对于通道方式更完善,相当于一个通用处理机,有丰富的指令系统和完善的中断系统。专门用于大型高效的外围设备的I/O。I/O处理机可以有独立的运算和指令部件,也可以多个I/O处理机公用同一个运算和指令控制部件。
四、指令系统(CISC和RISC)
指令是指示计算机执行某些操作的命令。无论多么复杂强大的软件,底层都是由若干条机器指令组成。指令的设计考虑因素很多,比如:指令的长度、地址码结构、操作码结构等,与计算机的系统结构,数据表示方法等密切相关。
指令系统一般分为:复杂指令集计算机(Complex Instruction Set Computer,CISC)和精简指令系统(Reduced Instruction Set Computer,RISC),两者对比如下:
五、流水线技术
流水线把任务分解成若干顺序的子任务,这些子任务分别由不同的执行机构完成,这些执行机构可以并行执行。
不采用流水线与采用流水线的执行图对比如下:
每个任务需要进行取指、分析、执行三个小任务,总共执行三次任务,采用流水线可以节省很多时间(9t-5t=4t)。
执行时间:若一个任务分为若干子任务,各需花费 t1,、t2...tn的时间,其中t2最大。若需要运行任务m次,采用流水线花费的时间则为 (t1+t2+...+tn)+(m-1)*t2。可以看出,流水线执行时间为第一次总任务运行时间+(运行次数-1)*子任务最长运行时间,流水线周期主要看最慢的那个指令(子任务)的运行时间。
例如:一个指令分为取值、分析、执行三个部分,分别花费2ns、2ns、1ns,需要运行100条指令,则花费时间为:(2+2+1)+(100-1)*2=203ns。
吞吐率:单位时间内流水线完成的任务数量或输出的结果数量。(这个单位时间一般指1秒)
例如:上面用203ns完成了100条指令(任务),则吞吐率为 100/203ns=100/203*10^9 =0.493*10^9=4.93*10^8/s。
加速比:完成同一批任务,不采用流水线和采用流水线花费时间的比值。
例如:上面若不采用流水线,需要的时间为(2+2+1)*100=500ns,加速比:500/203=2.46。
六、多处理机系统
多处理机指有两个以上的处理器,共享I/O子系统,在操作系统控制下,通过共享主存和网络来进行通信,协同处理一个个复杂问题。
6.1 多处理器与并行处理机的区别
并行处理机:是基于SIMD(单指令多数据流)结构,它只有一个控制器,但有多个处理单元,可以同时处理不同的数据。因此,并行处理机特别适用于矩阵(数组、向量)计算,也被称为矩阵处理机。
多处理机:基于MIMD(多指令多数据流)结构,有多个处理器,每个处理器有自己的控制器和运算器,因此可以同时处理指令和数据。
6.2 互联网络
互联网络是用来连接计算机系统的各处理部件、存储模块、各种外设,在软件控制下,使各部件相互通信的硬件网络结构。
为了确定各部件的输入输出间的对应关系,假设互联网络中的n个输入与n个输出端分别用 0、1...n-1表示。则互联方式(互联函数)有如下几种:
1、恒等置换:相同编号的输入输出端一一对应相连。
剩下的置换表达式复杂,直接截图:
例如:编号为0到16的处理机,每个处理机用4个二进制编码表示,当这些处理机采用单级网络互联,11号处理机二进制为1011。
若互联函数为Cube3(k=3的方体置换)时,与11号连接的处理编号则为3,因为3的二进制码为0011,后三位即第0位、第1位、第2位都是011,只有3的第3位是0,与1011的第3位1不同。
若互联函数为shuffle(均匀洗牌置换)时,则与11号连接的是7,因为1011循环左移1位是0111,转化成十进制就是7。
七、校验码
码字:传输信息中基本信息,比如一段汉字信息,要用4bit才能表示一个汉字,则码字为一个4bit的信息,即一个汉字表示一个码字。
码距:整个编码系统中任意两个码字的最小距离。可以理解为传输基本信息所需的最小位数,比如上面4bit表示一个汉字,则码距为4,需要改变4bit才能将信息改成自己想要的信息。
7.1 循环校验码CRC
模2除法:在除法运算过程中不进位的除法。准确来将是进行异或的除法。它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是0需要补多位进行异或时,商才为0。
比如:10111对110进行除法运算。
普通除法:第一次除法由于被除数前三位小于除数,需要商后退1位,然后与除数乘积后,被除数减去乘积得到下一次的被除数,然后再次相除...,商是否为0主要看余数减除数是否够减。
模2除法:10111取前3位101和除数110异或运算,由于被除数第一位是1,不需要多补位进行计算,所以商为1,余数为 101^110=011,去除0得11,补下一位1,得到111,位数是3,够除数位数,不需要再补位,因此商也为1,111^110得001,去除前面的两个0,得1,再异或运算需要补两位,所以第一个补位商为0,再补位由于没数了,所以当前值11就是余数。
除数位数是3,则被除数取前3位,由于被除数首位是1,所以商为1,被除数和除数进行异或运算,得到的3位新余数111首位是1,所以商也为1,新余数和除数异或后三位余数是011,因此商为0,最后得到的商为110,余数为011。
CRC校验码:信息码n位和校验码k位构成。校验码是经过信息源码进行模2除法得出,k位校验位拼接在n位数据位后面。
比如:原始报文为11001010101,生成的多项式为X^4+X^3+X+1,求CRC码。
除数:首先根据多项式转化为二进制,X^4+X^3+X+1等价于2^4+2^3+2^1+2^0,对应的二进制为11011。这个二进制就是除数。
被除数:除数为11011,长度为5,则原始报文后面加上5-1=4个0,即被除数为:110010101010000
校验码:110010101010000 模2除以 11011 得余数:0011,0011就是校验码
最后CRC码为 原文+校验码,即11001010101+0011 得到CRC码为:110010101010011。
注意上面余数补位,当余数前面有多个连续的0都是要去除的,然后从被除数补位数达到除数长度再异或。余数补一位还不够长度,则商为0,当补到余数长度=除数长度,则商为1。最后的余数一直没数可补,长度小于除数长度才停止做除法。可以看到最后余数为 0011,要再进行异或则余数去掉前面两个0,需要后面补3位数才能和除数做异或,显然后面无数可补,所以余数就是0011(长度是除数长度-1)。
7.2 海明校验码
海明码是一种多重(复式)奇偶检错系统,用于检错和纠错。
计算步骤:加入原始信息为n位,则需要k位校验码,它们满足关系2^k-1>=n+k,最后求解的校验码是放到2幂次位上,比如:1,2,4,8...等。这个不等式是校验位存放位数2^k-1(首位不能是校验位)要大于等于海明码位数n+k得来的。
比如:原始信息1011,求海明码。
n为1011的位数4,则带入不等式2^k-1>=4+k得出k>=3,即校验码最小位数为3。分别在1,2,4位上。即海明码为:101H1HH,这里用H代表海明校验码。
校验位主要由信息为计算得出,具体如下:
可以看到有4个信息位和3个校验位。其中信息位的位置分别用二进制多项式表示为:
7=2^2+2^1+2^0,6=2^2+2^1,5=2^2+2^0,3=2^1+2^0。
由于7、6、5都有2^2,所以r2(2^2次方位数上的校验位)由第7位(I4)、第6位(I3)、第5位(I2)上的信息数决定(异或运算)。具体公式为r2=I4^I3^l2=1^0^1=1^1=0。
同理得r1由第7、6、3上的信息数决定,即r1=1^0^1=0。
同理得r0由第7、5、3上的信息数决定,即r0=1^1^1=1。
所以最后得海明码为:1011101。
0111,转化成十进制就是7。
八、编码和浮点数
8.1 原码、反码、补码、移码
原码:二进制的正常表示,最高位表示符号(0为正,1为负)。比如1用八位二进制原码表示:00000001。
反码:原码二进制按位取反就是反码,比如 00000001 的反码是:11111110。
补码:补码是原码的反码的负值+1,比如 00000001 的补码是:01111110+1=01111111。
移码:移码是原码补码的首位取反,比如 00000001 的移码是:11111111。
注意:原码无法直接在计算机中表示,因为原码比如原码负值与原码相加理论上为0,实际不是,比如 00000001+10000001 = 10000010=-2,即1+(-1)=-2!,这显然是错误的。补码的意思是把减法运算转化成正数和负数的加法运算,移码的意义是让正数比负数大。原码和反码有正负0,而补码和移码没有。
8.2 浮点数
浮点数表示:N=尾数*基数^指数,一般尾数大于1小于10,比如1024用浮点数表示则为1.024*10^3。
在计算机里,基数永远是2。指数也叫做阶数,浮点数计算时,需要对阶(基数和指数相同),然后尾数进行计算,最后格式化结果(尾数大于1小于10)。
尾数的小数点位数影响精度,阶数(指数)的大小影响浮点数范围。