校验码
码距就是两个码字C1与C2之间不同的比特数。 就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00要转换为B:11,码距为2。一般来说,码距越大,越利于纠错和检错。
在编码中增加1位校验位来使编码中1的个数为奇数(奇校验) 或者 偶数(偶校验),从而使码距变为2。奇校验可以检测编码中奇数个数据位出错,即当合法编码中的奇数位发生了错误时,即编码中的1变成0或者0变成1,则该编码中1的个数的奇偶性就发生了变化,从而检查出错误。但无法纠错。
CRC(cyclic redundancy check)只能检错,不能纠错,其原理是找出一个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方。
以CRC-4校验为例
编码:
校验:
计算机硬件和指令
计算机的硬件基本系统由五大部分组成:运算器、控制器、存储器、输入设备(如鼠标键盘)、输出设备(如显示器)。
运算器和控制器合并称为中央处理单元,即CPU(central processing unit)。
存储器分为内部存储器(即内存,容量小,速度快,临时存放数据) 和 外部存储器(即硬盘、光盘等,容量大,速度慢,长期保存数据)。
输入设备和输出设备合并称为外设。
鼠标键盘等输入设备都是通过中断的原理来实现控制,点击后触发中断,首先进入中断处理程序。
主机:CPU(运算器、控制器),存储器。
CPU:由运算器、控制器、寄存器组和内部总线组成。实现程序控制、操作控制、时间控制、数据处理功能。
运算器:由算术逻辑单元ALU(Arithmetic and Logic Unit)(实现对数据的算术和逻辑运算)、累加寄存器AC(Accumulator)(运算结果或源操作数的存放区)、数据缓冲寄存器DR(Data Register)(暂时存放内存的指令或数据)和状态条件寄存器PSW(Program Status Word)(保存指令运行结果的条件码内容,如溢出标志等)组成。执行所有的算术运算,如加减乘除等;执行所有的逻辑运算并进行逻辑测试,如与、或、非、比较等。
控制器:由指令寄存器IR(Instruction Register)(暂存CPU执行指令)、程序计数器PC(Program Counter)(存放指令执行地址)、地址寄存器AR(Address Register)(保存当前CPU所访问的内存地址)、指令译码器ID(Instruction Decoder)(分析指令操作码)等组成。控制整个CPU的工作,最为重要。
CPU依据指令周期的不同阶段来区分二进制的指令和数据,因为在指令周期的不同阶段,指令会命令CPU分别去取指令或者数据。
计算机指令的组成:一条指令由操作码和操作数两部分组成,操作码决定要完成的操作,操作数指参加运算的数据及其所在的地址单元。
在计算机中,操作要求和操作数地址都由二进制表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器种。
计算机指令的执行过程:取指令、分析指令、执行指令。
指令寻址方式:顺序寻址、跳跃寻址。
指令操作数的寻址方式:隐含寻址、立即寻址、直接寻址、间接寻址、寄存器寻址方式和寄存机间接寻址方式、相对寻址方式、基址寻址方式、变址寻址方式、块寻址方式。
指令系统
复杂指令系统计算机(Complex Instruction Set Computer, CISC)
- 指令数量众多
- 指令使用频率相差悬殊
- 支持多种寻址方式
- 变长的指令
- 指令可以对主存单元中的数据进行直接处理
- 以微程序控制为主
精简指令系统计算机(Reduced Instruction Set Computer, RISC)
- 指令数量少
- 指令的寻址方式少
- 指令的长度固定
- 以硬布线逻辑控制为主
- 单周期指令执行,采用流水线技术
- 优化的编译器
- CPU中的通用寄存器数量多
指令的流水处理
流水线概念:程序执行时,多条指令重叠进行操作的一种准并行处理技术,可以提高各部件的利用率。
流水线原理:将指令分成不同段,每段由不同的部分去处理,因此可以产生叠加的效果,所有的部件去处理指令的不同段。
RISC中的流水线技术:超流水线(在每个机器周期内能完成一个甚至两个浮点操作,以时间换空间)、超标量(内装多条流水线同时执行多个处理,以空间换时间)、超长指令字VLIW(同时执行多条指令,发挥软件作用)。
流水线周期:指令分成不同执行段,其中执行时间最长的段为流水线周期。
流水线执行时间:一条指令总执行时间 +(总指令条数 - 1)* 流水线周期。
单缓冲区和双缓冲区:能够同时执行的阶段就是流水线的独立执行阶段;只能独立执行的阶段应该合并为流水线中的一个独立执行阶段。
流水线吞吐率:单位时间内执行的指令条数。公式:指令条数 / 流水线执行时间。
流水线的加速比计算:使用流水线后的速率提升度,即比不使用流水线快了多少倍,越高表明流水线效率越高。公式:不使用流水线执行时间 / 使用流水线执行时间。
存储系统
存储结构层次:
计算机采用分级存储体系的主要目的:为了解决存储容量、成本和速度之间的矛盾问题。
两级存储映像为:Cache主存、主存-辅存(虚拟存储体系)。
存储器分类:
- 按照存储位置分:内存,外存
- 按照存储器构成材料:磁存储器(磁带)、半导体存储器、光存储器(光盘)
- 按照存储器工作方式:可读可写存储器(Random-Access Memory,RAM)、只读存储器(Read-only memory,ROM)(ROM只能读,PROM(programmable read-only memory)可写入一次,EPROM(erasable programmable read-only memory)和EEPOM(Electrically-Erasable Programmable Read-Only Memory)既可以读也可以写,只是修改方式不同)
- 按照存储器访问方式:按地址访问、按内容访问(相联存储器)
- 按照寻址方式:随机存储器(访问任意存储单元所用时间相同)、顺序存储器(只能按照顺序访问,例如磁带)、直接存储器(二者结合,如磁盘,对于磁道的寻址是随机的,在一个磁道内则是顺序的)
局部性原理:在CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内(例如循环操作,循环体被反复执行)。
时间局部性原理:如果一个数据项正在被访问,那么在近期它很可能会被再次访问,即在相邻的时间里会访问同一个数据项。
空间局部性原理:在最近的将来会用到的数据的地址和现在正在访问的数据地址很可能是相邻的,即相邻的空间地址会被连续访问。
高速缓存Cache:用来存储当前活跃的程序和数据,直接与CPU交互,位于CPU与主存之间,容量小,速度为内存的5-10倍,由半导体材料构成,其内容是主存内存的副本拷贝,对于程序来说是透明的。
Cache由控制部分和存储器构成,存储器存储数据,控制部分判断CPU要访问的数据是否在Cache中,在则命中,不在则依据一定的算法从主存中替换。
地址映射方法:在CPU工作时,想要访问的是主存单元的地址,但是会从Cache存储中读/写数据。这就需要将主存地址转换成Cache存储地址,这种地址的转换称为地址映射,由硬件自动完成映射。
地址映射方法分为如下三种:
- 直接映象:将Cache存储器等分成块,主存也等分成块并编号。主存中的块Cache存储器中的块对应关系是固定的,即二者块号相同才能命中。地址变换简单但不灵活,容易造成资源浪费。
- 全相联映像:同样都等分成块并编号。主存中任意一块都与Cache中任意一块对应。因此可以随意调入Cache任意位置,但地址变换复杂,速度较慢。因为主存可以随意调入Cache任意块,只有当Cache满了才会发生块冲突,是最不容易发生块冲突的映像方式。
- 组组相联映像:前面直接映像、全相联映像两种方式的结合,将Cache存储器先分块再分组,主存也同样先分块再分组,组间采用直接映像,即主存中组号与Cache中组号相同的组才能命中,但是组内全相联映像,也即组号相同的两个组内的所有块可以任意调换。
命中率及平均时间:Cache存储器的大小一般为K或者M单位,很小,但是最快,仅次于CPU中的寄存器,而寄存器一般不算作存储器,CPU与内存之间的数据交互,内存会先将数据拷贝到Cache里,这样,根据局部性原理,若Cache中的数据被循环执行,则不用每次都去内存中读取数据,会加快CPU工作效率。因此,Cache有一个命中率的概念,即当CPU所访问的数据在Cache中时,命中,直接从Cache中读取数据,设读取一次Cache时间为1ns,若CPU访问的数据不在Cache中,则需要从内存中读取,设读取一次内存的时间为1000ns,若在CPU多次读取数据过程中,有90%命中Cache,则CPU读取一次的平均时间为( 90% * 1 + 10% * 1000 )ns,很容易理解。
虚拟存储器技术是将很大的数据分成许多较小的块,全部存储在外存中。运行时,将用到的数据调入主存中,马上要用到的数据置于缓存中,这样,一边运行一边进行所需数据块的调入/调出。对于应用程序来说,就好像有一个比实际主存空间大得多的虚拟主存空间,基本层级为:主存—缓存—外存。与CPU—高速缓存Cache—主存的原理类似。但虚拟存储器中程序无需考虑地址映像关系,由系统自动完成,因此对于程序来说是透明的。其管理方式分为页式、段式、段页式。
磁盘结构和参数:磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。
公式为:存取时间 = 寻道时间 + 等待时间(平均定位时间 + 转动延迟)。
注意:寻道时间是指磁头移动到磁道所需的时间;等待时间为等待读写的扇区转到磁头下方所用的时间。
磁盘调度算法:磁盘数据的读取时间分为寻道时间 + 旋转时间,也即先找到对应的磁道,而后再旋转到对应的扇区才能读取数据,其中寻道时间耗时最长,需要重点调度。
- 先来先服务(FCFS,First Come First Served):根据进程请求访问磁盘的先后顺序进行调度。
- 最短寻道时间优先(SSTF,Shortest Seek Time First):请求访问的磁道与当前磁道最近的进程优先调度,使得每次的寻道时间最短。会产生“饥饿”现象,即远处进程可能永远无法访问。
- 扫描算法SCAN:又称“电梯算法”,磁头在磁盘上双向移动,其会选择离磁头当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都是从里向外或者从外向里一直移动完才掉头,与电梯类似。
- 单向扫描调度算法(CSCAN,Circular Scan):与SCAN不同的是,其只做单向移动,即只能从里向外或者从外向里。
输入与输出
计算机系统中存在多种内存与接口地址的编址方法,常见的是下面两种:内存与接口地址独立编址和内存与接口地址统一编址。
程序控制(查询)方式:CPU主动查询外设是否完成数据传输,效率极低。
程序中断方式:外设完成数据传输后,向CPU发送中断,等待CPU处理数据,效率相对较高。中断响应时间指的是从发出中断请求到开始进入中断处理程序;中断处理时间指的是从中断处理开始到中断处理结束。中断向量提供中断服务程序的入口地址。多级中断嵌套,使用堆栈来保护断点和现场。
直接主存存取方式(DMA,Direct Memory Access):CPU只需完成必要的初始化等操作,数据传输的整个过程都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高。在一个总线周期结束后,CPU会响应DMA请求开始读取数据;CPU响应程序中断方式请求是在一条指令执行结束时;区分指令执行结束和总线周期结束。
总线
总线从广义上讲,任何连接两个以上电子元器件的导线都可以称为总线,通常分为以下三类:内部总线、系统总线、外部总线。
内部总线:内部芯片级别的总线,芯片与处理器之间通信的总线。
系统总线:板级的总线,用于计算机内各部分之间的连接,具体分为数据总线(并行数据传输位数)、地址总线(系统可管理的内存空间的大小)、控制总线(传送控制命令)。代表的有ISA总线、EISA总线、PCl总线。
外部总线:设备一级的总线,微机和外部设备的总线。代表的有RS232(串行总线)、SCSI(并行总线)、USB(通用串行总线,即插即用,支持热插拔)。
并行总线适合近距离高速数据传输,串行总线适合长距离数据传输,专用总线在设计上可以与连接设备实现最佳匹配。
总线计算:
总线的时钟周期 = 时钟频率的倒数
总线的宽度(传输速率)= 单位时间内传输的数据总量 / 单位时间大小。