- 大概占上午考试的6分。
1.1 数据的表示
- 简单的涉及到数制的转换(主要是十、二、八、十六进制),在后面的存储体系中计算用多少块存储芯片组成多大的存储空间、在网络部分计算 IP 地址,子网掩码等问题中都有涉及(为后面的内容作铺垫)。直接考察到的有原反补移码和浮点运算。
- 数制的转换
- R(任意)进制转十进制
使用按权展开法:将R进制数的每一位数值用 Rk 形式表示,即幂的底数是R,指数为k,当该位数值位于小数点左边,k 是该位和小数点之间的数码的个数;当该位数值位于小数点右边,k 是负值并且其绝对值是该位和小数点之间的数码的个数加1(小数点左边第一个数码的k值为0,往左边的每一个数码的k值加1;小数点右边的第一个数码的k值为-1,往右边的每一个数码的k值减1)。
例如:
二进制:10100.01 = 1 × \times × 24 + 1 × \times × 22 + 1 × \times × 2-1
七进制:604.01 = 6 × \times × 72 + 4 × \times × 70 + 1 × \times × 7-2
注:如果该位数码为0就不管,0乘任何数都为0。 - 十进制转 R 进制
整数部分短除法:除 R 取余倒排(除到商为0),小数部分乘 R 取整顺排(直到积中的小数部分为零,或者达到所要求的精度为止)。
例如十进制93.26转八进制135.205…(R为8):
- 二进制转八、十六进制
二转八进制:二进制数码从右向左每三位(8 = 23)一组,最左边不够的补0,每一组三位二进制数码转成十进制数码(000 ~ 111即0 ~ 7)直接依次连成八进制数码(不用相加或作其它操作)。
二转十六进制:二进制数码从右向左每四位(16 = 24)一组,最左边不够补0,每一组四位二进制数码转成十进制数码(0000 ~ 1111即0 ~ 9,而10 ~ 15用A ~ F分别表示)直接连成十六进制数码。
例如:
二进制10001110转八进制为216:010 001 110 <=> 2 1 6
二进制10001110转十六进制为8E:1000 1110 <=> 8 E
注:八和十六进制之间没有直接转换的,一般需要通过二进制或十进制来间接转换。
- R(任意)进制转十进制
- 原码反码补码移码
- 假如规定机器字长为8位,则用8个二进制位存储一个数。若为 n 即采用 n 个二进制位表示数据,带符号数最高位即第一位表示正负(0正1负)。
- 定点数:小数点位置固定不变的数,小数点的位置一般有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)、定点小数(纯小数,小数点在最高有效数值位之前)。
- 正数的反、补码和原码一致,只有移码和负数一样,负数的则都不同,下面是负数的原、反、补、移码的表示方法。
- 原码:数 X 转成二进制数码不够八位的在前面补0直到第一位即最高位符号位(带符号数),就是它的原码,记为 [X]原。
- 反码:数 X 的原码除了符号位,其余位的数码取反(如果是0就变为1,如果是1变为0) 就是它的反码,记为 [X]反。
- 补码:数 X 的反码加1(二进制加1)就是它的补码,记为 [X]补。
- 移码:数 X 的补码的首位符号位取反就是它的移码,记为 [X]移。
例如+1和-1的这几种编码表示:+1 -1 1-1 1-1等于0 原码 0000 0001 1000 0001 1000 0010 -2 反码 0000 0001 1111 1110 1111 1111 -0 补码 0000 0001 1111 1111 0000 0000 +0 移码 1000 0001 0111 1111 1000 0000 +0 - 数值表示范围
定点整数 若 n 为8 原码 – (2n-1 – 1) ~ 2n-1 – 1 – 127 ~ 127 反码 – (2n-1 – 1) ~ 2n-1 – 1 – 127 ~ 127 补码 – 2n-1 ~ (2n-1 – 1) – 128 ~ 127 移码 – 2n-1 ~ (2n-1 – 1) – 128 ~ 127 注:当机器字长为 n 时,定点数的补码和移码可表示 2n 个数,而其原码和反码只能表示 2n - 1 个数(0的表示占用了两个编码,+0和-0),因此,定点数所能表示的数值范围较小,在运算中很容易因结果超出范围而溢出。
- 浮点数运算
-
浮点数:浮点数是小数点位置不固定的数,能表示更大范围的数。浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度由尾数表示。
-
浮点数表示:N = M × \times × Re。M 称为尾数,e 称为阶码(指数),R 为基数。
-
浮点数运算的基本流程:对阶–>尾数计算–>结果格式化。例如1000+119:
假设基数为10(科学计数法),1000浮点数表示为1.0 × \times × 103 ,119浮点数表示为 1.19 × \times × 102 。对阶时要低阶往高阶化(不然结果出来后又要化),此处就把1.19 × \times × 102 化为0.119 × \times × 103 ;阶数化相等之后尾数直接相加,得到1.119 × \times × 103;结果格式化即尾数小数点左边不能为0,也不能是两位数,只能是1 ~ 9。
-
1.2 计算机结构
- 考察较多的是CPU中的一些寄存器是如何划分的问题,知道常见的寄存器的特性,用途等。
- 主机
主机是计算机的核心部分,整个计算机的组成就是主机加外设。主机主要由 CPU 和内存(即主存储器)两部分组成,CPU 中较重要的是运算器和控制器。 - 运算器
运算器主要包含算术逻辑单元 ALU、累加寄存器 AC(通用寄存器,不只是加减)、数据缓冲寄存器 DR(对内存储器读写时用来暂存数据)、状态条件寄存器 PSW(存储运算过程中相关的标志位,状态信息)。 - 控制器
控制器主要包含程序计数器 PC(下一条指令的首地址)、指令寄存器 IR、指令译码器、时序部件。
1.3 Flynn分类法
- 提出时间较长的一种对计算机(计算机体系结构)分类的方法,它将计算机分成四大类(大多是理论层面),但实际用到却没有这么多。
- 分类依据:两个指标指令流和数据流。不同的流又分为单和多个,就组合成了四种不同的组合体系结构。
- 分类如下:
结构类型 代表举例 说明 SISD 单处理系统。较老式的PC机(386、486、586奔腾等),后面的双核及以上都不属于单处理器系统 现在一般不应用于PC、服务器等领域,但在单片机系统中还是多见的。 SIMD 阵列处理机。 适合于处理数组类型的运算(例如二维数组)。 MISD 理论模型。 两个维度排列组合出来的。 MIMD 现在最常见的。 多个处理器或者多个处理机即计算机连起来共同完成一些任务(集群的形式)
1.4 CISC与RISC
- 计算机的指令集,要区分它们的特点。
- CISC 是以前计算机还没有大规模通用化的情况下提出来的,计算机从硬件到指令系统都是定制的(厂商根据用户定制,专用的奢侈品)。
- 后来计算机通用时为了更加方便简单提出了 RISC (适应能力强,简化到一些最基本的操作,复杂的操作用基本的操作来替代),为了提高效率引入了大量的寄存器,绝大部分操作是针对寄存器来操作的,因为寄存器的速度极快效率极高,更加适合于流水线,数量上远比 CISC多 是现在的主流。
注:Load/Store是读取/存入。
1.5 流水线技术
-
考察一些计算方面的问题。
-
流水线的基本概念
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各部件同时处理是针对不同指令而言,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。流水线技术节省时间,而且还应用于其它各大领域,尤其是工业生产。
-
流水线计算的基本公式和方法理念
流水线计算问题第一个要解决的就是流水线执行时长的问题。
流水线周期是指执行时间最长的一段。
流水线计算公式: 1条指令(第一条)执行时间 + (指令条数 – 1 ) × \times ×流水线周期- 理论公式:( t1 + t2 + … + tk )+(n – 1) × \times ×∆t
- 实践公式:( k + n – 1 )
×
\times
×∆t(一条指令执行分几个段,k 就是多少)
流水线周期的计算和执行多条指令用到流水线时执行总时长的计算,如下例题:
例题: 若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是2ns、2ns和1ns。那么,流水线周期是多少?100条指令全部执行完毕需要的时间是多少?
解:
流水线周期为 2ns 。
理论公式计算:(2+2+1) + (100 – 1) × \times × 2 = 203;
实践公式计算:(3 + 100 – 1) × \times × 2 = 204。注意: 考试时首先用理论公式,如果没有正确答案就用实践公式。
-
流水线吞吐率计算
流水线的吞吐率(Though Put rate,TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量。
计算流水线吞吐率的最基本的公式如下:
上面例题中的 TP = 100/203;流水线最大吞吐率:(理想状态下)
-
流水线的加速比
定义: 完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
计算流水线加速比的基本公式如下:
上面例题中的 S = 500/203;(不使用流水线执行时间为: (2+2+1) × \times × 100 )流水线的效率: 是指流水线的设备利用率。在时空图上,定义为 n 个任务占用的时空区与 k 个流水段总的时空区之比。
计算流水线效率的公式为:
如上连续处理4个数据的时空图中,T0 = ( ∆t + ∆t + ∆t + 3∆t ) × \times × 4;Tk = 15∆t;k = 4。(图中每一个方格相当于一个 ∆t )流水线的效率的重要意义是如何设计流水线让整个流水线的效率很高,流水线的每个工作段时长相等时往往效率最高。
1.6 存储系统
-
需要了解和掌握一些概念和计算的问题。首先是存储的整体结构,其次是 Cache 的相关知识,还有内存相关的知识。
-
层次化存储结构
需要了解基本的层次是如何划分的,哪些存储器的性能较好,哪些存储器的容量较大,为什么要以这种层次化的形式组织存储体。层次化结构图示如下:
寄存器: 在整个层次化的结构中速度最快、效率最高的是寄存器,它存在于 CPU 中,CPU 中有运算器和控制器,在它们中有各自相应的寄存器。寄存器的特点: 容量极小,但速度非常快,所以它属于存储结构的最高层。引入它是为了提高速度的同时没有增加多少成本,按内容存储又叫相联存储器,它的速度和效率远高于普通的按地址存储的的存储器。Cache: 即高速缓冲存储器。里面存储的是主存中一些较活跃的信息(副本)。
如上图中各存储器的速度是从下到上是越来越快,容量却是越来越小。基于性价比的考虑,往往是速度快的存储器容量反而小,容量大的反而速度慢(寄存器的成本较大),所以就有了这种多级层次的存储系统。
-
Cache
它工作于 CPU 和主存之间,是为了提高访问的速度提出来的性价比方案。在整个存储体系中除了寄存器之外 Cache 是最快的(寄存器容量极小又集成在 CPU 中,所以有时不把它看作最顶级的存储器,考试时问到速度最快的存储器,有寄存器的选寄存器,没有时就选 Cache )。相关概念:
Cache 的功能:提高 CPU 数据输入输出的速率,突破冯诺·依曼瓶颈,即 CPU 与存储系统间数据传送带宽限制。在计算机的存储体系中,Cache 是访问速度最快的层次。
使用 Cache 改善系统性能的依据是程序的局部性原理。
计算使用 “ Cache + 主存储器 ” 这种梯度式层次型的存储体系的存取的平均周期时间公式: 如果以 h 代表对 Cache 的访问命中率,t1 表示 Cache 的周期时间,t2 表示主存储器周期时间,以读操作为例,使用 “Cache + 主存储器” 的系统的平均周期为 t3 ,则:
t3 = h × \times × t1 + ( 1 – h ) × \times × t2
其中,( 1 – h ) 又称为失效率(未命中率)。局部性原理: 主要是计算机在处理相关的数据和程序时一般都会有在某一个时段集中的访问某些指令或者集中的读取某些空间的数据的特性(多级存储系统中解决速度和容量的矛盾的性价比方案)。
局部性基本分类:
时间局部性:如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。它是空间局部性访问地址一样时的一种特殊情况。空间局部性:如果某个位置的信息被访问,那和它相邻的位置上的信息也很可能被访问到。大多数情况下,代码都是顺序执行的,数据也是顺序访问的。
工作集理论:工作集是进程运行时被频繁访问的页面集合。 -
主存
这部分重要内容是主存的分类和编址,编址考察频率较高。主存分类
主存可以分为随机存取存储器(RAM)和只读存储器(ROM)两种,不同存储器有着不同的职能。内存就是随机存取存储器,它的特点就是一旦断电后里面的数据都会被清除掉不会保存下来,而只读存储器掉电之后不会丢失信息。主存的编址
主存的编址实际就是把芯片组成相应的存储器.
如图中的第一个芯片中,8 * 4 位中的8是表示有8个地址空间,4表示每一个地址空间存储了4个 bit 位的信息。根据不同的方式将简单容量小的多个芯片可以组合成需要的相应大小的存储器,例如后面的两个存储器。考察的例题: 内存地址从AC000H到C7FFFH,共 112 K 个地址单元,如果该内存地址按字(16bit)编址,由28片存储器芯片构成。已知构成此内存的芯片每片有16K个存储单元,则该芯片每个存储单元存储 4 位。
解: 一般就是大的地址减去小的地址加1,为了计算方便,首先大的地址加1,再减去小的地址。C7FFFH + 1 = C8000H(H是16进制数的后缀,表示该数是十六进制)
十六进制的减法:
K 是1024 即 210 ,把最后的1C000H化成十进制数之后在除以1024,结果为 112 K 个地址单元。该内存地址按字(16bit)编址,就是112 K × \times × 16 的存储器,由28片存储器芯片构成,每片芯片有 16 K 个存储单元,所以有12 K × \times × 16 = 28 × \times × 16 K × \times × 该芯片每个存储单元存储位数,解得该芯片每个存储单元存储位数为4。
-
磁盘结构与参数
主要内容是磁盘的结构和与其相关的计算。现在这部分的知识点考察的慢慢缩减了。两个重要问题就是磁盘基本运作的大概原理,还有在读取一次数据中磁盘要做哪些动作及消耗哪些时间。现在的普通的机械硬盘就是磁盘。磁盘结构
用一个环形的盘片涂上特殊的材质来保存数据,盘面就是用来保存数据的,读取数据要有专业的设备即磁头。多叠的磁盘里面有多张盘,每张盘上又有不同的磁道,每个磁道上又分不同的扇区,如图所示:
读取信息时要把磁头定位到目标磁道上,这所需要的时间就是寻道时间;然后磁头旋转到目标扇区上,这所需要的时间就是等待时间,也叫旋转延迟时间,它是平均计算的,最好的情况就是不需要转动,当前位置就是要读取信息的位置,最坏的情况就是要转一圈才能定位到目标扇区,所以平均情况下旋转延迟时间是磁盘转一圈的时间。存取时间 = 寻道时间 + 等待时间(平均定位时间 + 转动延迟) 注意:寻道时间是指磁头移动到磁道所需时间;等待时间为等待读写的扇区转到磁头下方的所用的时间。
难度较大的经典试题:
题中磁盘存放数据示意图:
题中的物理块就相当于一个扇区。单缓冲区顺序处理就是上一个记录处理完之后才能处理下一个记录,而且是R0的下一个处理的记录一定只是R1。
解:
最长时间:R0 到 R9 的每条记录从定位读取到处理的时间都是(33 + 3),R10 的读取处理时间为( 3+3 )。(33 + 3) × \times × 10 + 6 = 366(ms)
最少时间:上图中的第二个示意图就是最理想的存放情况,这样正好可以在读完 R0 并处理完之后正好磁头不用转一圈也转到 R1 开始,进行 R1 的操作。每一个记录的读取处理的时间为 ( 3+3 )。
(3 + 3) × \times × 11 = 66(ms)
1.7 总线系统
-
主要了解总线基础的概念和分类。
-
总线
计算机总线根据它所处的位置不同,一般分为三种类型,内部总线、系统总线、外部总线。这三种总线所代表的范围:
内部总线:一般是指微机内部各个外围的芯片与处理器之间的总线,是芯片级别的。系统总线:一般是微机中各个插线板与系统板之间的总线,是插线板级别的。例如平常的PCI、VGA的接口。
外部总线:一般是微机与外部设备之间的总线。
系统总线:
具体分为数据总线、地址总线、控制总线。数据总线:是用来传输数据的。例如计算机所说的是32/64位的,就代表了一个计算机的字就是32/64个bit位,即总线的宽度为32/64个bit位,那么一次或一个周期能够传输的数据量就为32/64个bit位。
地址总线:是用来传送地址信息的。假设地址总线是32位的,它代表的地址空间为 232 即 4G ,假如我们使用的是32位的操作系统,它能够管理的内存只有 4G 。
控制总线:发送相应控制信号的。
1.8 可靠性
-
串联、并联以及串并混合的可靠性的计算。
-
系统可靠性分析——串联系统和并联系统
主要问题是串、并联交织在一起的模型,要能计算出它相应的可靠度。 -
串联模型:
特点: R1 到 Rn n个子系统串联成一个大的系统,当所有的子系统都正常运行,整个系统才能正常运行;只要有一个环节出问题了,那整个系统都不能正常运行。可靠度计算: 如图中 R。
失效率计算: 如图中 λ,是近似简化公式(当子系统较多,每个失效率极低时可以用)。每个子系统的失效率一般是(1 – 其可靠度),例如:λ1 = (1 – R1)。整个系统的失效率一般是计算出 R 直接用 1 减去就行。 -
并联模型:
特点: 是多个子系统并联在一起,有一个子系统能正常运行时,整个系统就能运行;当所有子系统都失效时整个系统才失效。可靠度计算: 如图中 R。
失效率计算: 如图中的 μ ,一般不建议用此公式计算,就算出 R 直接用 1 减去就是。 -
系统可靠性分析——模冗余系统余混合系统
-
模冗余系统
在软硬件中都有应用,在面向一些高可靠性的系统要求时,会考虑如何提高系统可靠性,可以用冗余的方式进行。
如何冗余: R1 到 Rm 都是各个独立的模块都作同样的计算,然后系统采纳哪个结果通过表决器表决(少数服从多数)。此时少数的与系统结果不符的一般就是算错了或者出故障了,但是他不会影响到整个系统输出正确结果,通过这种表决的方式实际是把一些错误屏蔽了。可靠度计算如图中公式 R ,现在一般不会考到。
-
混合系统
把串联和并联混合在一起,并计算它的可靠度。
从整体上看,它是串联的,而每一个串联的部分都又是并联的。我们先分别计算每个都并在一起的部分的可靠度,再相乘起来,例如上图中的计算。在这种混合系统中的可靠度要先分出先计算哪部分,再计算哪部分。
1.9 校验码
-
主要了解校验码的作用,常见的几种校验码(CIRC、海明校验码等)各自的特点、运算以及编码解码的过程。
-
相关的基本概念
检错和纠错: 检查出错误,纠正检查出的错误。一般是通过加冗余信息来实现的,而在编码过程中一般是增大码距的方式来达到我们想要的效果。
码距: 一个编码系统的码距是整个编码系统中任意(所有)两个码字(比如A和B)的最小距离(就是从一个合法码字变到另个合法码字要改变的位数)。
例题:
若用1位长度的二进制编码(这样是无法检错的)。若 A = 1,B = 0,这样A,B之间的最小码距为1。若用2位长度的二进制编码(所以增大码距)。若以 A = 11,B = 00为例,A,B之间的最小码距为2。如果发送的是 11,接收方接收到的是10, 共同约定编码中的只有 11 和 00,没有 10 ,这就是检错。
若用3位长度的二进制编码。若用 111,000 作为合法编码,A,B之间的最小码距为3。如果发送的是 111,接收到的是 110 ,编码系统中只有 111 和 000 ,检查出错误。纠正时,我们对照接收到的码字和系统编码中的哪个更,相似,就更改为哪个。在这就是 110 比起 000 更接近 111,纠错时就该为 111。
码距与检错、纠错之间的关系:
在一个码组里为了检测 e 个误码,要求最小码距 d 应该满足:d >= e + 1。
在一个码组里为了纠正 t 个误码,要求最小码距应该满足:d >= 2t + 1。 -
差错控制—— CRC 与海明校验码
必须要掌握的是它们 的基本原理和操作流程。校验码——循环校验码CRC
在考试中认为可以作为一种检错但不能纠错的编码。基本原理和思路: 在信息编码时在它的尾部加一些校验信息,让编码后的数据能与循环校验码的生成多项式相除余数为0。校验时除生成多项式余数不为0,就说明传输过程中出错。其中的除法是模2除。
模2除: 是指在做除法运算的过程中不计其进位的除法。例如 10111 对 110 (假设参与计算的是二进制数据)进行模2除为:
实例: 原始报文为 “11001010101”,其生成多项式为:“x4 + x3 + x + 1”。对其进行CRC 编码后的结果为?
解:
生成多项式:11011(X 的多少次方就指示了对应的二进制位上是1,否则为0。生成多项式的长度假设记为 r = 5)
进行编码时要在原始数据后面加 k 个0(k = r – 1),而这也是最后余数的位数。用补完后的数据与生成多项式进行模2除,除出来之后的得到的 k 位余数替换在原始数据后面补 0 的位置。上题中对原始报文的CRC编码后的结果为 11001010101 0011。
最后用这个结果与生成多项式作模2除之后若余数为0,则结果正确。
-
校验码——海明校验码
考试时是个难点且频率较高,要了解海明码编码的规则,如何编码,计算多少位的信息位需要多少校验位。海明校验码既能检错又能纠错。校验位和信息位: 位于整个信息编码后的信息中的 2n 位,其余的为信息位。(信息位只有一位,最终的编码有3个位的长度)例如:
例题: 求信息 1011 的海明码。
解:
(1)2r >= x+r+1,确定校验码为3位:23 >= 4+3+1。分别放在 20 = 1、21 = 2、22 = 4 位。(r 校验位的个数,x 信息位的个数)(2)列出校验位公式。
- 把信息位的位数依次写成二进制相加的形式:(例如7的二进制数为 111 )
7 = 22 + 21 + 20 (这说明7这个信息位的值会影响到 r2 、r1 、r0 这三个校验位,其它的一样),6 = 22 + 21 ,5 = 22 + 20 ,3 = 21 + 20; - 求校验码的公式 :
r2 = I4 ⊕ I3 ⊕ I2 ;(7、6、5 中的二进制相加的式子中都有 22 ,所以这三个位置上的信息值异或就是 r2 检验位上的值,其它的一样)
r1 = I4 ⊕ I3 ⊕ I1 ;
r0 = I4 ⊕ I2 ⊕ I1 ;
(3)根据上面的求校验码的公式得到 r2 = 0, r1 = 0, r0 = 1。
(4)将数据加入到表格中,如表所示:
最终 1011 的海明校验码: 101 0 1 0 1纠错: 若收到的信息为:101 1 1 0 1,则:
r2 = I4 ⊕ I3 ⊕ I2 = 1 ⊕ 1 ⊕ 0 ⊕ 1 = 1
r1 = I4 ⊕ I3 ⊕ I1 = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0
r0 = I4 ⊕ I2 ⊕ I1 = 1 ⊕ 1 ⊕ 1 ⊕ 1 = 1
收到信息的校验位为 101,正确得出的校验位为 001,将它们按位异或得到 100 ,100 对应的二进制数为 4,就表示出错的位置在第4个。 - 把信息位的位数依次写成二进制相加的形式:(例如7的二进制数为 111 )