简介
本文章涵盖计算机技术与软件专业技术资格(水平)考试(软考)-软件设计师所需知识点。
持续更新中。。。。。。。。。。。。。。。
涉及内容
CPU相关、总线、输入输出、存储系统、进制及转换、数据的表示、校验码、计算机体系结构、总线、流水线、进程管理(前趋图)、数据结构(树、森林、链表、列表、图)、算法、面向对象、UML图、OSI七层模型、常用协议、设计模式、数据库设计、软件工程、项目管理、系统测试、知识产权等。
本文为考试而生,内容覆盖广。如有问题或不全的地方,欢迎指出,本人看到会及时修改及补充相关内容
CPU
CPU(Central Processing Unit):中央处理器,是计算机的核心部件之一,负责执行计算机程序中的指令以及进行数据处理和运算。
CPU被安装在计算机主板上,它是控制和执行计算机操作的主要组件。
CPU根据指令集执行计算机程序中的各种操作
CPU的运算速度和性能直接影响计算机的运行速度和效率
CPU的组成及功能
CPU主要由控制单元、算术逻辑单元和寄存器组成。
控制单元(控制器)
负责解释和执行指令,控制各个部件的操作,调度和管理计算机的运行。
- 指令寄存器(IR):
存储当前正在执行的指令
- 程序计数器(PC):
正在执行的指令的内存地址
- 地址寄存器:
用于存储内存地址的寄存器,以实现对内存数据的读取和写入操作
- 指令译码器:
将指令从机器码转换为对应的操作控制信号
识别指令类型:分析指令的操作码,确定指令的类型,如算术逻辑操作、数据传输、分支跳转等。
解析寻址模式:解析指令中的寻址模式,确定指令的操作数在内存中的位置。
生成控制信号:根据指令的类型和寻址模式生成相应的控制信号,包括读取操作数、写入操作数、执行操作等。
错误检测和处理:检测指令中的错误,如非法操作码、非法寻址模式等,并采取相应的措施,如中断程序执行、报错等。
算术逻辑单元(运算器)
负责进行各种算术和逻辑运算,如加减乘除、比较和逻辑判断等。
- 算术逻辑单元:
执行所有的算术和逻辑运算
- 累加器寄存器:
存储和操作算术和逻辑运算的结果
- 数据缓冲寄存器:
暂时存储数据的寄存器
- 状态条件寄存器:
保存和记录特定的状态信息和条件
寄存器
用于暂时存储和操作数据的高速存储器,用于临时存储指令和数据。
CPU的各个参数
主频
频是机器内部主时钟的频率,主频越高,完成指令的一个执行步骤所用的时间就越短,速度越快。比如跳绳,跳的越快(即频率越高),那么完成一次所用的时间就越短。
- 单位:Hz
时钟周期
与主频对应,CPU时钟周期是一个时间单位,即一个周期的时长
- 单位:s(秒)(ms,μs等)
- 计算:CPU时钟周期=1/主频
CPI
全称为:Clock cycle Per Instructions:即一条指令所需要的时钟周期数。
需要注意的是这个是需要的时钟周期数,不是时钟周期。
- 计算:CPI = 程序所需时钟周期数 / 程序所含指令数
把周期数平分为n份,n为指令数,即求得每条指令所需要时钟周期数,这里计算的是平均值,一般情况下均计算平均值
- 单位:周期数/每条指令(根据算式得的,一般没要求,这里为了帮助理解)
IPS
IPS(Instructions Per Second):每秒执行多少条指令;
- 计算:IPS = 主频 ÷ CPI
MIPS
英文全称:Million Instructions Per Second:即每秒执行多少百万条指令。
- 计算:MIPS = 主频 ÷ (CPIx106)
CPI与MIPS例题
某计算机系统的CPU主频为2.8GHZ
。某应用程序包括3类指令,各类指令的CPI(执行每条指令所需要的时钟周期数) 及指令比例如下表所示。执行该应用程序时的平均CPI为 ( ?1 );运算速度用MIPS表示,约为 ( ?2 )。
指令A | 指令B | 指令C | |
---|---|---|---|
比例 | 35% | 35% | 35% |
CPI | 4 | 2 | 6 |
?1
平均CPI为?
4*35%+2*45%+6*20%=3.5
?2
MIPS(每秒执行的百万条指令数)?
- 每秒执行指令数为
2.8G/3.5=0.8G=800M
。(1M=106,1G=109)
总线
总线的作用
共享
总线的共享在计算机系统中是指多个设备共同使用同一条总线传输数据和控制信号的过程。共享总线可以提供高效的数据传输和资源共享,但也会引发一些问题。
在计算机系统中,总线通常被分为数据总线、地址总线和控制总线。不同设备通过这些总线进行数据传输和通信。总线的共享可以在同一时间内让多个设备同时使用总线,实现数据交换和通信。
总线共享的优点:
提高系统的效率和性能:多个设备共享同一条总线可以减少总线的使用冲突,提高系统的数据传输效率。
节约系统成本:共享总线可以减少总线的数量和复杂性,节约系统设计和制造的成本。
方便资源共享:不同设备可以通过总线进行数据传输和通信,方便实现资源共享和协作。
总线共享的缺点:
性能瓶颈:多个设备共享同一条总线可能会导致总线的带宽不够用,造成数据传输的性能瓶颈。
冲突和竞争:多个设备同时请求使用总线可能会引发冲突和竞争,需要设计合适的总线控制机制来解决。
设备间的时序问题:多个设备共享总线时,需要协调设备之间的时序关系,确保数据传输的正确性和稳定性。
计算机系统常常采用多总线结构、总线仲裁协议和高速总线等技术来提高总线的共享效率和性能。
分时
同一时刻仅允许一个部件向总线发送信息,但允许多个部件同时从总线上接收相同的信息。
串行总线
串行总线是一种数据传输方式,它通过在单根线上逐位地传输数据来实现通信。与并行总线相对,串行总线只使用一个传输通道来传输数据,这使得串行总线在传输数据时更加简单和高效。
串行总线的优点之一是它可以传输长距离的数据,因为只需要一根线来传输数据,降低了成本。另外,串行总线还可以更好地利用带宽,因为数据是逐位传输的,可以更好地解决并行总线中可能出现的数据冲突问题。
与并行总线相比,串行总线的传输速度较慢。由于数据是逐位传输的,传输速度限制在总线的时钟频率上,因此传输速度相对较低。此外,由于数据逐位传输,对于大量数据的传输会引入更多的延迟。
串行总线是当前计算机系统中广泛使用的一种总线类型,例如USB、Ethernet等。它们通过串行的方式传输数据,以满足不同设备之间的数据传输需求。
并行总线
并行总线是一种计算机通信和数据传输的架构。它由多个并行的电子信道组成,每个信道可以同时传输多个比特的数据。并行总线可以在多个设备之间进行并行数据传输,提高数据传输速度和效率。
并行总线通常由多个数据线、地址线和控制线组成。数据线用于传输数据,地址线用于指定数据的存储位置,控制线用于控制数据传输的各个步骤。在并行总线中,数据被分割成多个比特,同时通过不同的信道进行传输,从而实现并行传输。
并行总线可以应用于各种计算机系统中,包括个人计算机、服务器、嵌入式系统等。它可以提供高速的数据传输能力,适用于需要大量数据传输的应用场景,如多媒体处理、科学计算等。
尽管并行总线可以提供高速的数据传输能力,但它也存在一些限制。首先,由于需要同时传输多个比特的数据,所以需要更多的电子信道和硬件支持,增加了系统的成本和复杂性。其次,并行总线的传输距离限制较小,传输的数据位数越多,受到干扰的可能性就越大。
随着计算机技术的发展,串行总线逐渐替代并行总线成为主流。串行总线通过将数据逐个比特地传输,减少了信道数量和硬件支持,提供了更高的传输速度和更远的传输距离。
单 工、半双工、双工
单工通信:单工通信是一种通信方式,只允许信息在一个方向传输。发送方只发送信息,而接收方只接收信息,没有反馈机制。这种方式的通信效率较低,常见于广播电视、广播广告等。
半双工通信:半双工通信是一种通信方式,允许信息在两个方向上传输,但只能在不同的时间段进行传输。发送方和接收方交替进行信息的发送和接收,不能同时进行。这种方式的通信效率较高,常见于对讲机、聊天软件等。
双工通信:双工通信是一种通信方式,允许信息在两个方向上同时传输。发送方和接收方可以同时发送和接收信息,不受时间限制。这种方式的通信效率最高,常见于电话、互联网等。
线的类型
数据总线(双向)
数据总线是计算机中传输数据的一组线路。它可以将数据从计算机的内部组件(如处理器、内存)传输到外部设备(如打印机、显示器)或其他计算机。数据总线通常由多条并行线路组成,每条线路可以传输一个二进制位(0或1)。数据总线的宽度决定了它可以一次传输的位数,也称为数据总线的位宽。数据总线不仅可以传输数据,还可以传输控制信号和地址信息,以控制数据的传输和访问。
地址总线(单向)
地址总线是一种用于传输地址信息的电子通路,它将处理器或其他设备产生的地址信号传送给存储器或其他外部设备。地址总线决定了处理器能够寻址的内存或外设的范围。通常,地址总线的宽度决定了系统的最大寻址能力。如果一个系统的地址总线宽度为n位,那么该系统可以寻址的内存或外设数量为2的n次方。例如,一个16位地址总线的系统可以寻址2的16次方,即64KB的内存或外设。
地址总线是计算机系统中重要的组成部分,它与数据总线和控制总线共同构成了系统的总线系统。通过地址总线,处理器能够指定要访问的内存地址或外设地址,从而实现数据的读取或写入。地址总线的宽度也会影响系统的性能,较宽的地址总线可以提供更大的寻址范围和更高的数据传输速度。
地址总线是单向传输的,仅用于将地址信息从处理器传输到存储器或外设。数据的传输则通过数据总线完成。控制总线则用于传输控制信号,如读写控制信号、时钟信号等。
控制总线
控制总线是计算机内部使用的一种数据传输通路。它负责传输各种控制信号,如时钟信号、地址信号、数据信号等,以控制各个硬件组件的操作。控制总线将计算机的控制器与其他硬件组件连接起来,实现了指令的执行和数据的传输。通过控制总线,计算机可以实现各种功能,如读写内存、执行指令、进行输入输出等。控制总线的设计直接影响了计算机的运行速度和功能扩展能力。
总线宽度
总线宽度是指总线的线数,即数据信号的并行传输能力,也体现总线占用的物理空间和成本;
总线的带宽是指总线的最大数据传输率,即每秒传输的数据总量。
总线宽度与时钟频率共同决定了总线的带宽。
例:总线宽度32bit
,时钟频率为200MHz
,若总线上每5
个时钟周期发送一个32bit
的字,则该总线的带宽为:160 MB/s = 200MHz / 5 * (32bit / 8)
系统总线
又称内总线或板级总线,在微机系统中用来连接各功能部件而构成一个完整的微机系统。
系统总线包含有三种不同功能的总线,即数据总线DB (Data Bus)、地址总线AB (Address Bus)、控制总线CB (Control Bus)。
ISA (Industrial Standard Architecture)
- AT总线
- 1984年由IBM公司为推出PC/AT机而建立的系统总线标准。
- 是对XT总线的扩展,以适应8/16位数据总线要求。
EISA总线
- 1988年由Compaq等9家公司联合推出的总线标准。
- 在ISA总线的基础上使用双层插座,在原来ISA总线的98条信号线上又增加了98条信号线,也就是在两条ISA信号线之间添加一条EISA信号线。
- 在实用中,EISA总线完全兼容ISA总线信号。
PCI (Peripheral Component Interconnect)
- 由Intel公司推出的一种局部总线。
- 它定义了32位数据总线,且可扩展为64位。
- PCI总线主板插槽的体积比原ISA总线插槽还小,支持突发读写操作,最大传输速率可达132MB/S,可同时支持多组外围设备。
- PCI局部总线不能兼容现有的ISA、EISA、MCA (Micro Channel Architecture)总线,但它不受制于处理器,是基于奔腾等新一代微处理器而发展的总线。
SCSI (Small Computer System Interface)
- 是一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。
存储系统
存储系统主要包括以下几种类型:
- 主存储器(主存):
- 又称:内存,是计算机中用于存储程序指令和数据的临时存储器。
- 由动态随机存取存储器(
DRAM
)芯片组成,具有较快的读写速度。 - 计算机进行数据处理的关键组件。
- 辅助存储器(外存):
- 二级存储器,用于长期存储数据和程序。
- 常见的辅助存储器包括硬盘驱动器、光盘和闪存驱动器等
- 辅助存储器的容量通常比主存储器大得多,但访问速度较慢。
- 高速缓存(Cache):
- 位于主存储器和处理器之间的存储器层次结构中的一级缓存。
- 高速缓存用于存储最近使用的数据和指令,以提高处理器的数据访问速度。
- 高速缓存通常由静态随机存取存储器(
SRAM
)构成,具有较快的读写速度。
- 虚拟存储器:
- 一种将辅助存储器扩展到主存储器的技术。
- 虚拟存储器使用页面置换算法将主存储器中的数据和指令分成固定大小的页面,当某个页面不再被频繁使用时,可以将其置换到辅助存储器中,以释放主存储器空间。
- 存储器控制器:
- 连接计算机系统的存储器和处理器的关键组件。
- 存储器控制器负责管理数据在各个存储层次之间的传输和调度。
分类
- 存储器位置:内存、外存
- 层次
- 可被CPU直接读写:高速缓存、主存、内存
- 不可被CPU直接读写:辅助存储器(硬盘、光盘、U盘等)
- 按存储介质
- 半导体:主存、Cache
- 磁表面存储器: 磁盘,磁带
- 光存储器
- 按信息的可更改性进行分类
- 读写存储器:可读可写(如内存,硬盘等)
- 只读存储器:只能读,不能写(如电影使用的光碟)
- 按信息的可保存性进行分类
- 易失性存储器:断电后数据消失(主存,Cache)
- 非易失性存储器:断电依然保存(磁盘、光盘)
- 破坏性读出:读出数据后要进行重写(如DRAM芯片)
- 非破坏性读出:读出数据后原数据没被破坏(如SRAM芯片、磁盘、光盘)
- 存取方式
- 按内容存取:相联存储器(Cache)
- 按地址存取
- 随机存取存储器(内存)
- 顺序存取存储器(磁带)
- 直接存取存储器(磁盘)
- 工作方式
- 随机存取存储器(RAM):内存
- DRAM:动态随机存取纯存储器
- SRAM:静态随机存取纯存储器
- 制度存储器(ROM):BIOS
高速缓存(cache)
概念:
- 一种高速存储器,用于暂时存储来自
主存(RAM)
的数据,以提高CPU
访问数据的速度。 - 缓存采用了快速的
SRAM(静态随机访问存储器)
技术,与主存
相比,它具有更低的访问延迟和更高的带宽
。 - 遵循
局部性原理
,通过将最经常访问的数据和指令
存储在靠近CPU
的高速存储器
中,减少对主存
的读取次数
,从而提高系统性能。局部性原理
- 时间局限性:被引用过一次的存储器位置在未来会被多次引用,主要体现是主要是循环
- 空间局限性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用,主要体现是顺序执行的过程
- 工作集理论:工作集是进程运行是被频繁访问的页面集合
- 存在多级缓存:缓存的层次结构主要是为了平衡容量和速度两个因素
- 其中L1缓存是最接近CPU的一级缓存,通常包括数据缓存和指令缓存。
- L2缓存位于L1缓存之外,其容量较大,但速度稍慢。
- 更多缓存:如L3缓存和L4缓存。
- 缓存采用了缓存行的概念,即一次从主存中读取的数据块大小。
- 常见的缓存行大小为64字节或128字节。
- 当CPU请求某个地址的数据时,缓存会先查看是否在缓存行中
- 是:
命中(Cache Hit)
,直接返回缓存中的数据; - 否:
不命中(Cache Miss)
,缓存需要从主存
中加载相应的数据块
,并将其存储到相应的缓存行中,然后再返回数据给CPU
。
- 是:
- 采用
缓存替换算法
来决定在缓存满时应该替换哪些数据。- 最近最少使用(LRU)
- 最不经常使用(LFU)
- 随机替换等。
如果以 h
代表对Cache
的访问命中率,t1
表示Cache
的周期时间,t2
表示主存储器周期时间,以读操作为例。使用用“Cache + 主存储器”的系统的平均周期为t3
则:
t3 = h * t1 + (1 - h) * t2
其中,(1 - h)
又称为失效率(未命中率)。
地址映像
地址映像是将贮存与Cache的存储空间划分若干大小相同的页(块)
描述 | 冲突率 | 电路复杂度 | |
---|---|---|---|
直接相联映像 | 主存的块与 Cache块的对应关系是固定的 | 高 | 简单 |
全相联映像 | 主存与 Cache均分成大小相同的块,允许主存的任一块可以调入 Cache存储器的任何一个块的空间中 | 低 | 复杂 |
组相联映像 | 将 Cache中的块再分成组,组采用直接映像方式而块采用全相联映像方式。即主存任何区的0组只能存到 Cache的o组中1组只能存到 Cache的1组中,依此类推组内的块则采用全相联映像方式,即一组内的块可以任意存放。即主存一组中的任一块可以存入cache相应组的任一块中 | 中 | 折中 |
注:主存与Cache的地址映射由硬件直接完成
缓存替换算法
算法 | 描述 | 优点 | 缺点 |
---|---|---|---|
FIFO | 淘汰最早被缓存的页面 | 实现简单 | 对长时间驻留在缓存中的数据不友好,可能导致高缓存命中率的数据被淘汰 |
LRU | 淘汰最久未使用的页面 | 适用于热点数据,能够保留经常访问的数据 | 实现较复杂,需要维护访问时间的记录 |
LFU | 淘汰访问频次最低的页面 | 适用于长时间内不变的数据,能够保留经常被访问的数据 | 对频繁变化的数据不友好,可能导致访问频次高的数据被淘汰 |
LRU-K | 基于最近一段时间内的访问情况进行淘汰 | 能够平衡最近访问和长期访问的数据 | 实现较复杂,需要维护最近访问的记录 |
LRU-2 | 维护两个队列,淘汰最久未使用的页面 | 简化了LRU的实现,提高了淘汰效率 | 不适用于有循环访问模式的数据 |
随机算法 | 随机选择一个页面进行淘汰 | 实现简单 | 对所有数据公平,不会有特定数据被频繁淘汰的问题 |
读写过程
- 写直达:同时写Cache与内存
- 写 回:只写Cache,淘汰页面时,写回内存
- 标记法:只写入内存,并将标志位清零,若用到此数据,只需要再次调取
主存
编址
例题:
内存地址从AC000H到C7FFFH,共有 ( ?1 ) K个地址单元,如果该内存地址按字编址,由28片存储器芯片构成,已知构成内存的芯片每片有16K个存储单元,则该芯片每个存储单元存储 ( ?2 )位。
-
?1 :
112
- 计算公式:高位地址 - 低位地址 + 1 = 地址单元(字)
1.C7FFFH - AC000H + 1 = 1C000H(字)
2.1C000H - 1024 = 112(K)
-
?2:
4
1.(112 * 16k) / (28 * 16K) = 4
磁盘管理
-
机械磁盘存取时间指的是计算机读取或写入数据到机械硬盘所需的时间。
-
机械磁盘由盘片和机械臂组成,当计算机需要读取或写入数据时,机械臂会移动到盘片上特定的位置,并且盘片需要旋转到特定的扇区。
在磁盘调度中,通常先进行移臂调度再进行旋转调度
-
因此,机械磁盘存取时间主要由以下几个因素决定:
- 寻道时间(Seek Time):即机械臂从当前位置移动到所需磁道的时间。机械臂的移动速度决定了寻道时间的长短。
- 延迟时间(Latency Time):即盘片旋转到所需扇区的时间。盘片的转速越高,延迟时间越短。
- 数据传输时间(Transfer Time):即数据从磁盘读取或写入的时间。传输时间取决于数据的大小和磁盘的传输速度。
-
存取时间 = 寻道时间 + 延迟时间 + 数据传输时间
机械磁盘相对于固态硬盘来说,存取时间较长。固态硬盘不需要机械臂移动和盘片旋转,因此存取时间更短,速度更快。
例题2:
假设某磁盘的每个磁道划分为11个物理块,每块存放1个逻辑记录。逻辑记录R0、R1、…、R2、R3存放在同一磁道上,记录的存放顺序如下表所示:
物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
逻辑记录 | R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
-
如果磁盘的旋转周期为33ms,磁头当前处在R0开始出。若系统使用单缓冲区顺序处理这些记录,每个记录的处理时间为3ms,则处理这11个记录的最长时间为?
注意:
已知磁盘旋转周期为33ms
,共11个数据,则读取每个数据的时间为33 / 11 = 3ms
- 从
0ms
开始,第一次读取 R0 放入单个缓存区中 3ms
:磁头继续转动的同时数据开始处理:第二次读取 R1 后 缓存区中还存在 R0 ,无法存入 R1,需要等待 R0 处理完成,并且磁头不会等待
,磁头会继续旋转
定位到 R2 。6ms
:R0 处理完成后,此时磁头数据在 R2,要求位顺序处理,此时需要等待磁头重新转动到 R1 后才可继续处理36ms
:此时磁头重新定位到 R1- 处理 R0并等待磁头转动到 R1 的时间为
36ms
(读取时间3ms
+ 等待磁头时间33ms
)处理数据与磁头转动同时进行,此处忽略处理时间
- R0 - R9总处理时间为
36ms * 10
- R10 处理时间为 读取数据
3 ms
,处理时间3 ms
- R10 之后没有数据需要进行处理,所以此处不计算磁头等待时间,只计算数据处理时间
- 总处理时间为:
366 ms
=36ms * 10
+6ms
- 从
-
若对信息存储进行优化分布后,处理11个记录的最少时间为?
- 优化后的数据排列如图所示
- 由于不需要等待磁头,每次读取数据处理完成后,磁头定位的数据正好为所需要处理的数据
- 所以每次处理时间为
6ms
(数据读取时间3ms
+处理时间3ms
) - 总处理时间为:
66ms
- 优化后的数据排列如图所示
输入输出系统设计
直接程序控制
概念:
- 直接程序控制是一种输入输出技术,它通过编程方式控制计算机系统的输入输出设备。
- 在直接程序控制中,输入输出设备的操作是由计算机系统的程序直接控制的。这意味着程序可以直接发送命令给输入输出设备,以完成特定的操作,如读取数据、写入数据、打印文档等。
- 直接程序控制使用特定的指令和编程接口来与输入输出设备进行通信。这些指令和接口允许程序读取和写入设备的寄存器、缓冲区和状态信息,以便进行设备的控制和数据传输。
工作方式:两种(无条件传送/ 程序查询方式)
- 无条件传送
- 程序执行时,无需进行条件判断,直接跳转到指定的程序段进行执行
- 使用无条件跳转指令(如JMP指令)来实现。
- 程序查询方式
- 根据特定的条件判断结果来选择跳转到不同的程序段进行执行
- 查询方式通常使用条件跳转指令(如JZ、JNZ等)来实现。
- 条件跳转指令会根据特定的条件判断结果改变程序执行的流程
- 如果判断结果为真,则跳转到指定的程序段执行
- 如果判断结果为假,则继续顺序执行下一条指令
缺点:
- 降低了CPU 的效率
- 对外部的突发事件无法做出实时响应
程序中断方式
概念:
程序中断是指在执行程序的过程中,当需要进行输入输出操作时,会发生中断,将控制权转移到相应的I/O处理程序上,等待I/O操作完成后再将控制权还给原程序。
特点:
- 当系统中有多个中断请求时,中断系统按优先级进行排队。
- 中断嵌套:若在处理低级中断过程中又有高级中断申请中断,则
高级中断可以打断低级中断处理
,转去处理高级中断,等处理完高级中断后再返回去处理原来的低级中断。 - 实现中断嵌套用
后进先出
的栈
来保护断点和现场最有效。
工作方式:
- 程序执行到需要进行输入输出操作的指令时,比如读取用户输入、写入文件等。CPU发出一个中断请求信号,将控制权转移到中断处理程序。
- 中断处理程序会保存当前程序的状态,将CPU的控制权转移到I/O处理程序。
- I/O处理程序会执行相应的输入输出操作,比如从设备中读取数据、向设备中写入数据。
- 当I/O操作完成后,中断处理程序会将数据传递给原程序或将数据写入内存中的指定位置。
- 中断处理程序将控制权还给原程序,原程序继续执行。
优点:使CPU在进行输入输出操作时不会浪费太多时间,而是可以继续执行其他程序
缺点:中断处理程序需要占用一定的CPU资源,可能会导致一定的性能损失。
DMA
概念:DMA(Direct Memory Access,直接内存访问)
- 一种计算机输入输出(I/O)技术,用于实现高速数据传输。
- 允许外部设备(如硬盘、网卡等)直接访问计算机的主内存,而不需要经过CPU的介入,从而提高数据传输的速度和效率。
工作方式:
-
在CPU和外部设备之间设置一个特殊的DMA控制器,负责管理数据的传输和存储。
注意:这里是 DMA控制器 并不是 数据通路
-
当
外部设备
需要读取或写入大量数据时,它会发送一个DMA请求给DMA控制器
,请求将数据传输到或从主内存
中。注意:这里才是:建立了一个主存到外设的通道
-
DMA控制器会占用CPU的总线,直接和内存进行数据传输,而不需要CPU的介入。
-
一旦数据传输完成,DMA控制器会发送一个中断信号给CPU,通知数据传输的完成。
优点:
- 使用DMA的好处是它可以减少CPU的负担,提高系统的性能。
- 由于数据传输是直接在内存和外设之间进行的,不需要CPU的介入,所以CPU可以在数据传输的同时继续执行其他任务。
- 对于需要大量数据传输的应用程序特别有用,如高清视频播放、大规模数据处理等。
输入/输出处理机(IPO)
-
输入/输出处理机(IPO)是计算机系统中的一个重要组成部分,用于处理与外部设备之间的数据输入和输出。
-
IPO的主要功能是管理计算机系统与外部设备之间的数据传输。它负责接收外部设备发送的数据,并将其传递给中央处理单元(CPU)进行处理。同时,IPO也负责将CPU处理好的数据发送给外部设备进行输出。
-
IPO可以与各种外部设备进行数据交互,例如键盘、鼠标、显示器、打印机等。它通过与这些设备的接口进行连接,并通过这些接口来控制设备的操作。
-
除了数据传输功能外,IPO还具备数据缓冲和中断处理的能力。它可以将接收到的数据存储在缓冲区中,以便等待CPU处理。当外部设备发送中断请求时,IPO能够响应并及时处理中断事件。
计算机体系结构
Flynn分类法
- Flynn分类法是计算机体系结构的分类方法之一,
- 基于指令流中的指令数目和操作数的数目对计算机体系结构进行分类。
- 根据指令流中的指令数目可以将计算机体系结构分为:
- 单指令流单数据流(SISD)
- 指令流中只包含一条指令,每个时钟周期只能处理一个操作数。
- 这是传统的冯·诺依曼计算机体系结构,顺序执行指令,如一般的个人电脑。
- 单指令流多数据流(SIMD)
- 指令流中包含多个相同的指令,每个时钟周期可以同时处理多个数据。
- 这种体系结构适用于数据并行计算,如图形处理器(GPU)。
- 多指令流单数据流(MISD)
- 指令流中包含多条指令,每个时钟周期处理一个操作数,但是每条指令在不同的数据上操作。
- 这种体系结构并不常见,主要用于特定领域的应用,如冗余计算和错误检测。
- 多指令流多数据流(MIMD)
- 指令流中包含多条指令,每个时钟周期可以同时处理多个数据。
- 这种体系结构适用于任务并行计算,如分布式系统。
- 单指令流单数据流(SISD)
CISC与RISC
指令系统类型 | 类型 | 寻址方式 | 实现方式 | 其他 | 代表 |
---|---|---|---|---|---|
CISC(复杂) | 数量多,使用频率差别大,可变长格式 | 支持多种 | 微程序控制奇数(微码) | 研发周期长 | X86 |
RISC(精简) | 数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有 load/store 操作内存 | 支持方式少 | 增加了通用寄存器;硬布线逻辑控制为主,适合采用流水线 | 优化编译,有效支持高级语言 | RISC-V ARM |
比较维度:指令数量、指令使用频率、寻址方式、寄存器、流水线支持、高级语言支持
CISC: 复杂、指令数量多、频率差别大、多寻址、桌面计算机和服务器
RISC: 精简、指令数量少、操作寄存器、单周期、少寻址、多通用寄存器、流水线、嵌入式系统和移动设备
现代的处理器设计已经混合了 CISC 和 RISC 的特点,将两种体系结构的优点结合起来,以提供更好的性能和效率。
这种混合体系结构通常称为:复合体系结构 (CISC-RISC Hybrid)。
流水线技术
流水线是指在程序执行时多条指令重叠进行操作
的一种准并行处理实现技术。
——> 取指 ——> 分析 ——> 执行 ——>
各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度
流水线计算
1条指令执行时间+(指令条数-1)*流水线周期
理论公式:(t1+t2+...+tk)+(n-1)* △t
实践公式:k * t + (n-1) * t
流水线建立时间:第一条指令的执行时间
流水线周期:执行时间最长的一段
K:流水线 段数
例:若指令流水线吧一条指令分为取指、分析、执行三部分,且三部分的时间分别是取指2ns、分析2ns、执行1ns
流水线周期是 2ns
100条执行全部执行完毕 理论公式需要 203 ns,实践公式需要204 ns
流水线吞吐率计算
流水线的吞吐率是指在单位时间内流水线完成的任务数量或输出的结果数量。
计算流水线吞吐率的最基本的公式如下:
流水线最大吞吐率:
流水线的加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
计算基本公式:
流水线的效率
流水线的效率是指流水线的设备利用率。
在时空图上,流水线的效率定义为n个任务占用的时空区与k个流水段总的时空区之比
计算公式:
冯诺依曼结构和哈弗结构
冯诺依曼结构(Von Neumann Architecture)
又名:存储程序计算机
冯诺依曼结构的特点是将计算机的指令存储器和数据存储器合并在一起,共享同样的存储空间。它包括五个组成部分:运算器、控制器、存储器、输入设备和输出设备。
运算器(ALU)负责进行数学和逻辑运算
控制器(Control Unit)负责指挥和协调各个部件的工作
存储器(Memory)用于存储程序和数据;
输入设备(Input Device)用于将数据输入计算机;
输出设备(Output Device)用于将计算结果输出。
(1)一般用于PC处理器,如AMD、英特尔的酷睿i3,i5,i7处理器
(2)指令与数据存储器合并在一起
(3)指令与数据都通过相同的数据总线传输。
哈佛结构(Harvard Architecture)
哈佛结构的特点是将指令存储器和数据存储器分离,分别使用不同的存储空间。
这样可以同时进行指令的取指和数据的存取,提高了数据传输和运算的效率。哈佛结构常用于嵌入式系统和一些特定的应用领域。
(1)一般用于嵌入式系统处理器(DSP)数字信号处理(DSP,Digital SignalProcessing)
(2) 指令与数据分开存储,可以并行读取,有较高数据的吞吐率
(3) 四条总线:指令和数据的数据总线与地址总线
进制
进制的含义
常见的进制系统包括
二进制(基数为2)
、八进制(基数为8)
、十进制(基数为10
、十六进制(基数为16)
进制 | 数码 | 基数 | 位权 |
---|---|---|---|
十进制(D) | 0,1,2,3,4,5,6,7,8,9 | 10 | 10k |
二进制(R) | 0,1 | 2 | 2k |
十六进制(H) | 0-9,A,B,C,D,E,F | 16 | 16k |
进制转换
进制转换是将一个数字从一种进制表示转换为另一种进制表示的过程。在数学和计算机科学中,我们经常使用不同的进制系统来表示整数和小数。
要进行进制转换,我们需要了解每种进制系统的表示方法和计算规则。例如,十进制系统是我们日常生活中最常用的进制系统,使用0-9这10个数字。二进制系统则只使用0和1两个数字。
进制转换的方法主要有两种:逐位转换和除法取余法。
- 逐位转换:将数字的每一位分别转换为目标进制的表示,然后组合起来。
- 除法取余法则:不断地将数字除以目标进制的基数,并将余数作为结果的一部分,最后倒序排列余数。
二进制 转 十进制 (按权展开法)
- 将二进制数的每一位数值用 Rk 形式表示,即幂的底数是 R,指数为 K
- 底数:为自身的基数
2
- 指数:为自身每个数字的下标,也就是二进制每一个数字,从右到左,从0开始
二进制数字 1 0 1 下标/指数 2 1 0
- 底数:为自身的基数
- 例:
- 二进制:
10101
- 过程:
1 0 1 0 1 1 * 24 0*23 1*22 0*21 1*20 - 对应关系如上,最后所得结果为:
10100
= 1 * 24 + 1 * 22 + 1 * 20 =16+4+1
=21
- 二进制:
二进制 转 十六进制 (取四合一法)
- 每四位取成一位,从右往左(不足四位时补零)
100101
=0010 0101
- 将每个四位二进制转为
10进制
,再将十进制转为十六进制(10=A,11=B,12=C,13=D,14=E,15=F)
- 按顺序进行排列,小数点的位置不变
- 例:
- 二进制:
100101
- 过程:
111110
=0011 1110
0010 0101
=3 14
3 14
=3 E
- 对应关系如上,最后所得结果为:
111110
=3E
- 二进制:
十进制 转 二进制(短除法)
-
将十进制数按二进制的基数(
2
)进行取余计算,所得商
为下次的除数
,所得余数
为二进制数
-
十进制:
94
除数 余数 2/94 0 2/47 1 2/23 1 2/11 1 2/5 1 2/2 0 1 1 0 -
结果:
94
=1011110
十进制 转 十六进制(短除法)
-
将十进制数按十六进制的基数(
16
)进行取余计算,所得商
为下次的除数
,所得余数
为十六进制数
-
十进制:
93
除数 余数 16/94 5 16/14 14(D) 0 结果:
93
=5D
十六进制 转 二进制
- 将十六进制的每一位数字分隔
- 将每一位数字转换为4位二进制
- 接着将四位的二进制数字按顺序进行排列
- 十六进制:
5D
- 过程:
5 D
=5 13
5 13
=0101 1101
- 结果:
5D
=0101 1101
十六进制 转 十进制(按权展开法)
- 将十六进制数的每一位数值用 Rk 形式表示,即幂的底数是 R,指数为 K
- 底数:为自身的基数
16
- 指数:为自身每个数字的下标,也就是二进制每一个数字,从右到左,从0开始
|十六进制数字|A|0|5|D|
|–|–|–|
|下标/指数|2|1|0|
- 底数:为自身的基数
- 例:
- 十六进制:
A05D
- 过程:
A 0 5 D A * 163 0 * 162 5 * 161 D*160 10 * 163 0 * 162 5 * 161 13*160 - 对应关系如上,最后所得结果为:
A05D
= 10 * 163 + 5 * 161 + 13*160 =40960+80+13
=41053
- 十六进制:
数据的表示
原码、反码、补码、移码
计算机中用来表示带符号整数的四种编码方式为:原码、反码、补码、移码
- 原码(Sign-Magnitude)
- 最高位表示符号,0表示正数,1表示负数
- 其余位表示数值
- 反码(Ones’Complement)
- 正数的反码与原码相同
- 负数的反码是对原码的每一位取反(符号位除外)
- 补码(Two’s Complement)
- 正数的补码与原码相同
- 负数的补码是对原码的反码加1。
- 移码(Excess-K)
- 移码是对其补码的符号位取反。
数值1 | 解释 | 数值-1 | 解释 | 1-1 | |
---|---|---|---|---|---|
原码 | 0000 0001 | 1000 0001 | 1000 0010 | ||
反码 | 0000 0001 | < 与原码相同 | 1111 1110 | < 对原码取反(除符号位) | 1111 1111 |
补码 | 0000 0001 | < 与原码/反码相同 | 1111 1111 | < 在反码的基础上加1 | 0000 0000 |
移码 | 1000 0001 | < 符号位取反 | 0111 1111 | < 符号位取反 |
浮点数
码制 | 定点整数 | 定点小数 | 数码个数 |
---|---|---|---|
原码 | -(2n-1 -1) ~ +(2n-1 -1) | -(1-2-(n-1) ) ~ +(1-2(n-1) ) | 2n-1 |
反码 | -(2n-1 -1) ~ +(2n-1 -1) | -(1-2-(n-1) ) ~ +(1-2(n-1) ) | 2n-1 |
补码 | -2n-1 ~ (2n-1 -1) | -1~(1-2-(n-1)) | 2n |
移码 | -2n-1 ~ (2n-1 -1) | -1~(1-2-(n-1)) | 2n |
- 浮点数表示: N = M * Re
- M 为尾数
- e 为指数
- R 为基数
- 运算过程:対阶 ——> 尾数计算 ——> 结果格式化
- 特点
- 一般尾数用 补码,阶码用移码
- 阶码决定数的表示范围,位数越多范围越大
- 尾数决定数的有效精度,位数越多精度越大
- 对阶时,小数向大数看齐
- 对阶是通过较小数的尾数右移实现的
逻辑运算
逻辑变量之间的运算称为逻辑运算。二进制数 1 和 0 在逻辑上可代表 “真” 与 “假”
优先次序:
! (非) ——> && (与) ——> || (或)
逻辑运算符中的 “&&” 和 “||” 低于关系运算符, “!” 高于算数运算符
符号 | 译 | 解释 |
---|---|---|
&&、*、·、n、AND | 与 | 连接的两个逻辑值全1时才取1 |
丨丨、+、U、V、OR | 或 | 连接的两个逻辑值全0时才取0 |
!、~、NOT | 非 | 将原逻辑值取反 |
⊙、XNOR | 同或 | 连接的两个逻辑值相同才取1,不同则取0 |
⊕、XOR | 异或 | 连接的两个逻辑值不相同才取1,相同则取0 |
真值表
A | B | !A | A+B | A*B | A⊙B | A⊕B |
---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 | 1 | 0 | 1 |
运算符运算优先级
!
> 算数运算符
> 关系运算符
> &&
> ||
> 赋值运算符
短路原则
在逻辑表达式的求解中,并不是所有逻辑运算符都要被执行。
- 例1:
a && b && c
:只有a
为真时,才需要判断b
的值,只有a
和b
都为真时,才需要判断c
的值 - 例2:
a || b || c
:只要a
为真,就不必判断的b
和c
的值,只有a
为假,才判断b
,a
和b
都为假才判断c
模2运算
简介:模2运算是一个对二进制数进行运算的操作,它的原理是将两个二进制数按位进行异或运算。
具体来说,对于两个二进制数a和b
,模2运算可以表示为a ⊕ b
,其中⊕
表示异或操作。
特点:
- 一种二进制算法,CRC校验技术中的核心部分。本质是异或运算,且不考虑进位和借位。
- 每一位的结果只有两种可能:0和1。
- 如果两个二进制数的对应位相同,那么结果为0;
- 如果对应位不同,结果为1。
- 常用于校验和计算、差错检测和纠错编码等领域。
- 例如:对于两个二进制数
1010
和1101
,进行模2运算的结果为0111
。
加法
- 对于两个二进制数的对应位进行相加
- 两位数字相同,结果为
0
- 两位数字不同,结果为
1
0+0=0 0+1=1 1+0=1 1+1=0
例如:0101 + 0011 = 0110,列竖式计算:
0 1 0 1
+ 0 0 1 1
—————————————
0 1 1 0
减法
- 对于两个二进制数的对应位进行减法运算
- 两位数字相同,结果为
0
- 两位数字不同,结果为
1
0-0=0 0-1=1 1-0=1 1-1=0
例如:0110-0011=0101,列竖式计算:
0 1 1 0
- 0 0 1 1
—————————————
0 1 0 1
乘法
- 对于两个二进制数的对应位进行相乘,模2乘法就是判断两个数的乘积是奇数还是偶数。
- 有一个数为
0
,乘积为0
- 两个数都为
1
,乘积为1
0×0=0 0×1=0 1×0=0 1×1=1
- 多位二进制模2乘法类似于普通意义上的多位二进制乘法
- 不同之处在于后者累加中间结果(或称部分积)时采用带进位的加法
- 模2乘法对中间结果的处理方式采用的是模2加法
- 例如1011 × 101=100111,列竖式计算:
1 0 1 1
× 1 0 1
———————————————————
1 0 1 1
0 0 0 0
+ 1 0 1 1
———————————————————
1 0 0 1 1 1
————————————————
除法
- 模2除法是模2乘法的逆运算。
- 当最后余数的位数小于除数位数时,除法停止
- 当
被除数的位数
小于除数位数
时,则商数为0
,被除数
就是余数
。 - 只要
被除数
或部分余数
的位数
与除数
一样多,且最高位
为1
,不管其他位是什么数,皆可商1
- 步骤:
- 对齐:将除数对齐到被除数的最高位。
- 异或操作:对齐的位进行异或操作。
- 如果被除数的最高位是
0
,则不进行操作,直接将除数向右移动一位,商为0
。 - 如果被除数的最高位是
1
,则将除数与被除数的对应位进行异或,商为1
。
- 如果被除数的最高位是
- 移位:完成一次异或操作后,将除数向右移动,直到除数的最高位与被除数中的下一个
1
对齐。 - 重复:重复进行异或和移位操作,直到除数移动到被除数的末端。
- 余数:最终被除数变为的形式(通常是除数长度或更短)即为余数。
校验码
码距: 任何一种编码由许多码字构成,任意两个码字质检最少变化的二进制位就称为数据校验码的码距
奇偶校验码
特点:可检1位(奇数位)
的错误,不可纠错
- 有奇数个位发生误码,则奇偶性发生变化,可以检查出误码,但不能纠错。
- 有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(也称漏检)。
编码方式: 由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码
奇校验 :在传输的数据中,如果数据中的1的个数为奇数,则奇校验位设置为0,否则设置为1
偶校验: 在传输的数据中,如果数据中的1的个数为偶数,则偶校验位设置为0,否则设置为1
校验方式:
- 发送方在传输数据的同时计算数据中1的个数
- 根据奇偶校验的方式设置校验位,并与数据一起传输。
- 接收方在接收数据后,再次计算数据中1的个数
- 如果与校验位不匹配,则说明数据传输过程中发生了错误
例题:1001101
的奇校验码与偶校验码?
- 答:
1001101
1的个数为4
位
- 奇校验码:
10011011
- 个数为偶数,校验码应为
1
- 个数为偶数,校验码应为
- 偶校验码:
10011010
- 个数为偶数,校验码应为
0
- 个数为偶数,校验码应为
CRC循环冗余校验码
特点:可检多错,不可纠错
编码方式: 在k位信息码之后拼接r位校验码。
- 将待发送消息转为多项式,并化简
- 构造除数:多项式的各项系数构成的二进制串
- 构造被除数:待发送信息后面添加生成
多项式最高次数
个0 - 进行
模2除法
得到余数 - 余数处理:余数的位数应与生成多项式最高次数相同,也就是与添加0的个数相同,如果不够,则在余数签补足0凑足位数
- 将待发送信息与最终得到的余数拼接,得到最终的校验数据
例题1:对原始数据1101011011
进行编码形成校验码
- 答:
- 转为多项式:1 * 24 +0 * 23 + 0 * 22 + 1 * 21 + 1 * 20
- 化简为:24 + 21 + 20
- (除数)提取系数并依次排列:
10011
- (被除数)将原始数据后加
4
个0(上述多项式最高幂次为4
):1101011011–0000
(原始数据–填充位) - 经过以下计算(模2除法)得出余数作为校验码:
1110
- 将原始数据与校验码合并,得出最终校验码:
1101011011–1110
(原始数据-校验码)
校验方式:
- 构造被除数:接收到的信息就是被除数
- 构造除数:多项式的各项系数构成的二进制串
- 进行
模2除法
运算得出余数 - 检查余数:
如果为0,传输过程无误码。
如果不为0,传输过程产生误码。
例题2:接收到的信息为101101001
,生成的多项式为 G(x)= x3 +x2+1 ,判断传输是否有误码。
- 答:
- 构造被除数:
101101001
- 构造除数: x3 +x2+1 = 1101
- 进行
模2除法
运算得出余数
- 检查余数 :
11
4.1. 如果为0,传输过程无误码。
4.2. 如果不为0,传输过程产生误码。
- 构造被除数:
海明校验码
特点:可检错,可纠错
编码方式:将数据位按照一定规则分组,然后在每个组中添加校验位
公式:设数据位是n
位,校验位是k
位,则 2k >= n + k + 1
-
根据公式确定校验位数量
-
编号:
从最低位开始编号,从1开始递增
-
确定校验位的具体位置:校验位处于2的n次幂的位置上,即:
1、2、4、8、16、32...
7 6 5 4 3 2 1 位数 n4 n3 n2 n1 信息位 k2 k1 k0 校验位 -
填充数据位:
其余位填充真正的数据位(信息位)
从右到左依次填入(以1011
为例)7 6 5 4 3 2 1 位数 1 0 1 1 信息位 k2 k1 k0 校验位 -
计算校验位:
5.1. 将信息位所在的编号拆分成校验位所在的编号,目的是看第几位数是由哪些校验位校验的7 = 4 + 2 + 1,即第7位信息位是由第4位校验位(k2)和第2位校验位(k1)和第1位校验位(k0)共同校验的
6 = 4 + 2,即第6位信息位是由第4位校验位(k2)和第2位校验位(k1)共同校验的
5 = 4 + 1,即第5位信息位是由第4位校验位(k2)和第1位校验位(k0)共同校验的
3 = 2 + 1,即第3位信息位是由第2位校验位(k1)和第1位校验位(k0)共同校验的5.2. 分别求第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)的值。
将校验位对应的所有数据位的值,进行异或/同或运算(同或为奇校验,异或为偶校验)
第4位校验位校验第7、6、5三位数据位
偶:r2 = 1⊕0⊕1 = 1⊕1 = 0
奇:r2 = 1⊙0⊙1 = 0⊙1 = 1
第2位校验位校验第7、6、3两位数据位
偶:r1 = 1⊕0⊕1 = 1⊕1 = 0
奇:r1 = 1⊙0⊙1 = 0⊙1 = 1
第1位校验位校验第7、5、3两位数据位
偶:r0 = 1 ⊕ 1 ⊕ 1 = 0⊕1 = 1
奇:r0 = 1⊙1⊙1 = 1⊙1 = 07 6 5 4 3 2 1 位数 1 0 1 1 信息位 0 0 1 偶校验位 1 1 0 奇校验位 -
最终得出 海明校验码:偶:
1010101
,奇:1011110
校验与纠错方式:
-
接收方收到海明码之后,将每一位校验位与其校验的位数分别进行计算
(同或为奇校验,异或为偶校验)
偶校验:运算得到的结果应该全为
0
奇校验:运算得到的结果应该全为1
-
假设为
偶校验
,接收到的数据为1011101
(第四位出错,上文计算的海明校验码为:1010101
),说明接收方接收到的校验位是101
而不是正确的001
-
原始表格:
7 6 5 4 3 2 1 位数 n4 n3 n2 n1 信息位 k2 k1 k0 校验位 -
接受到的数据转为表格(含错误的校验位):
7 6 5 4 3 2 1 位数 1 0 1 1 信息位 1 0 1 校验位 -
此时运算结果为下述,这里所得结果不全为
0
,表明传输有误k2 ⊕ I4 ⊕ I3 ⊕ I2 = 1 ⊕ 1 ⊕ 0 ⊕ 1 = 1
k1 ⊕ I4 ⊕ I3 ⊕ I1 = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0
k0 ⊕ I4 ⊕ I2 ⊕ I1 = 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0 -
查错:
k2 k1 k0
排列为二进制100,这里指出的就是错误的位数,表示第100
,转化为十进制是4
,即第4位
出错 -
纠错:纠错方法就是将该位逆转,将
第4位校验码
变为0
即可
对比
校验码位数 | 校验码位置 | 检错 | 纠错 | |
---|---|---|---|---|
奇偶校验 | 1 | 一般拼接在头部 | 可检奇数位错 | 不可纠错 |
CRC循环冗余校验 | 生成多项式最高次幂决定 | 拼接在信息位尾部 | 可检多位错 | 不可纠错 |
海明校验 | 2r >= m + r + 1 | 插入在信息位中间 | 可检多位错 | 可纠错 |