✍🏻记录学习过程中的输出,坚持每天学习一点点~
❤️希望能给大家提供帮助~欢迎点赞👍🏻+收藏⭐+评论✍🏻+指点🙏
1.4 校验码
奇偶校验
● 奇偶校验码的编码方法是:
由若干位有效信息的头部或者尾部,再加上一个二进制位(校验位)组成校验码。
★ 奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
★ 偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
◎ 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码,但不能纠错。
◎ 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(也称漏检)。
例如:1011如果在尾部加一个二进制数,使用奇校验则是10110,保证1的个数为奇数;使用偶校验则是10111,保证1的个数为偶数。
奇偶校验的尾数一定是不同的。
练习题
给出编码1001101的奇校验码和偶校验码( A )。
A 10011011, 10011010
B 10011011, 10011011
C 10011010, 10011010
D 10011010, 10011010
模2除法
模2除法是二进制下的除法,其特点是不考虑进位和借位,即每一位的除法结果不影响其他位。在循环冗余校验码的计算中,模2除法被应用以进行数据的校验。
模2除法实际上与模10的长除法类似,但它的减法采取“异或”的方式,即同数相减为0,异数相减为1。这种运算方式在CRC校验技术中是核心部分,用于确保数据传输的准确性。
多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制除法,根 据余数减除数够减与否确定
商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义 的。实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。 模2除法它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无
借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110,结果得到商为110,
余数为1。
模 2 除法计算过程:
1.被除数首位是几商就上几;
2.异或运算;
3.异或后首位一定是0,舍弃掉这个0首位;
4.补末位(落数),再上商。
例1:1011 0010 000 模二除 1100 1
例2:1111000除以1101:
循环冗余校验
循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。
CRC为校验和的一种,是两个字节数据流采用二进制除法(没有进位,使用XOR来代替减法)相除所得到的余数。其中被除数是需要计算校验和的信息数据流的二进制表示;除数是一个长度为的预定义(短)的二进制数,通常用多项式的系数来表示。在做除法之前,要在信息数据之后先加上个0.
① 收发双方约定好一个生成多项式G(x);
② 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码)将其添加到待传输数据的
后面一起传输:
③ 接收方通过生成多项式来计算收到的数据是否产生了误码;
● 算法要求生成多项式必须包含最低次项
下面的表格略去了“初始值”、“反射值”以及“最终异或值”。
对于一些复杂的校验和来说这些十六进制数值是很重要的,如CRC-32以及CRC-64。通常小于CRC-16的CRC不需要使用这些值。
通常可以通过改变这些值来得到各自不同的校验和,但是校验和算法机制并没有变化。
CRC标准化问题
由于CRC-12有三种常用的形式,所以CRC-12的定义会有歧义
在应用的CRC-8的两种形式都有数学上的缺陷。
据称CRC-16与CRC-32至少有10种形式,但没有一种在数学上是最优的。
同样大小的CCITT CRC与ITU CRC不同,这个机构在不同时期定义了不同的校验和。
练习题
发送数据:
例:待发送的信息为101001,生成多项式为G(x)=x³ + x² + 1 (1101),计算编码后的信息。
1.构造被除数
待发送信息后面添加生成多项式最高次数个0
2.构造除数
生成多项式各项系数构成的比特串
3.做模二除法运算
4.检查余数
余数的位数应与生成多项式最高次数相同,
如果位数不够,则在余数前补0来凑足位数。
接收数据:
例:接收到的信息为101101001,生成多项式为G(x)=x³ + x² + 1 (1101),判断传输是否有误码。
101101001 ÷ 1101 ,商,余1
1.构造被除数
接收到的信息就是被除数
2.构造除数
生成多项式各项系数构成的比特串
3.做模二除法运算
4.检查余数
余数为0,传输过程无误码;
余数不为0,传输过程产生误码。
在( D )校验方法中,采用模2运算来构造校验位。(2019上半年试题)
A.水平奇偶
B.垂直奇偶
C.海明码
D.循环冗余
海明校验
海明校验(Hamming Code)是一种在计算机科学和通信领域广泛使用的错误检测编码方法,由理查德·卫斯里·海明(Richard Wesley Hamming)于1950年提出。它的目的是通过增加额外的校验位来检测并在某些情况下纠正数据传输或存储过程中的单比特错误。海明校验的基本思想是将数据划分为多个长度较短的数据块,并为这些数据块计算出若干个校验位,然后将数据块和校验位一起发送或存储。这样,接收端或读取端就可以通过这些校验位来检测或纠正错误。
原理
1.确定校验位数量:首先,需要确定可以检测并纠正错误的校验位数量。如果想要检测并纠正单比特错误,校验位的数量至少为3(这是因为要定位错误发生在哪个位置,至少需要log2(data位数 + 1)位校验位,加上一位用于检测奇偶,通常选择比这个最小值稍大的2的幂次减去数据位数的结果)。
2.分配校验位位置:海明码中数据和校验位的位置遵循一定的规则,通常校验位的位置是2的幂(1, 2, 4, 8,…)。例如,对于7位数据,可能选择4位校验位,它们将放置在第1、2、4、8位上,总共11位编码(7位数据+4位校验)。
3.计算校验位值:每个校验位的值是由它所覆盖的数据位决定的,具体来说,第i位校验位是其覆盖的所有位(包括数据位和已计算出的校验位,且这些位的编号包含第i位的二进制表示)的异或(XOR)结果。例如,第1位校验位是所有位编号中包含1的位进行异或。
4.错误检测与纠正:接收方收到海明码后,重新计算所有校验位。如果所有校验位的计算结果都为0,则认为没有错误。如果有任何一个校验位计算结果不为0,可以通过校验位确定错误发生的位置,并进行纠正。因为每个数据位都被多个校验位覆盖,通过比较哪些校验位的计算结果不匹配,可以唯一确定错误位。
设数据位是n位,校验位是k位,则n和k必须满足以下关系:
2k - 1>= n + k
海明码的编码规则如下:
设 k个校验位为Pk,Pk-1…P1,n个数据位为Dn,Dn-1,…,D1,对应的海明码为Hn+k,Hn+k-1,…,H1
(1)校验码Pi要放在2i-1的位置。
(2)海明码中的任何一位都是由若干个校验位来校验的。
(3)被校验的海明位的下标等于所有参与校验该位的校验位的下标之和,而校验位由自身校验。
练习题
待传送的信息为1010,若采用海明校验,则奇校验规则下的海明码是( A )。
A 0110010
B 0110011
C 1110010
D 1110011
1.5.1 存储的层次结构
存储器的层次结构主要分为四个层次,从CPU寄存器到辅存(辅助存储器),分别是:
1.CPU寄存器:位于CPU内部,是访问速度最快但容量最小的存储器,用于存储临时数据和寄存器之间的传递。
2.高速缓存(Cache):位于CPU和主存之间,访问速度较快,容量较小,用于存储最近访问的数据和指令。
3.主存(内存):位于高速缓存和辅存之间,访问速度较慢,容量较大,用于存储程序和数据。
4.辅存:位于计算机外部,访问速度最慢,容量最大,用于长期存储程序和数据。
这个层次结构的核心在于每一层都作为其下一层的缓存,即更快更小的存储设备作为更大更慢的存储设备的缓存。每一层都缓存来自较低一层的数据对象,以提高数据访问速度和效率。
练习题
在程序的执行过程中,Cache与主存的地址映射是由( C )完成的。((2017下半年试题)
A.操作系统
B.程序员调度(外存,主存,cpu寄存器汇编实现)
C.硬件自动
D.用户软件(任何一级都不能单纯用软件实现)
1.5.2 高速缓存(cache)
【冯诺依曼结构】
Cache位于CPU与主存之间,地址映射也是硬件完成的
● Cache对程序员来说是透明的,程序员无法操作
● 设置多级高速缓存Cache以提高命中率(访问主存的效率),先访问一级cache,然后二、三、四,都访问不到才去访问主存。
● 使用Cache改善系统性能的依据是程序的局部性原理
◎ 时间局部性:
被引用过一次的存储器位置在未来会被多次引用,主要体现是主要是循环。(for/while等)
◎ 空间局部性:
如果一个存储器的位置被引用,那么将来他附近的位置也会被引用,主要体现是顺序执行的过程。
int[] arr = {1,2,3,4,5}
int sum = 0;
for(int i = 0;i < arr.length; i++){
sum += arr[i]
}
System.out.println(""+ sum);
for:时间局部性
arr:空间局部性
练习题
在CPU内外常设置多级高速缓存Cache其主要目的是( B )。(2019下半年试题)
A.扩大主存的存储容量
B.提高CPU访问主存数据或指令的效率
C.扩大存储系统的容量
D.提高CPU访问外存储器的速度 (外存和cpu之间还隔着 cache和主存,不搭边)
1.5.3 Cache的地址映射方法
直接相联映像
描述:主存的块与Cache块的对应关系是固定的
优点:硬件电路设计、地址变换比较简单
缺点:冲突率较高,灵活性差
全相联映像
描述:主存与Cache均分成大小相同的块,允许主存的任一块可以调入Cache存储器的任何一个块的控件中
优点:冲突率较低、主存的块调入Cache的位置不受限制,十分灵活
缺点:电路难于设计和实现,造价高,只适用于小容量的cache;无法从主存块号中直接获得Cache的块号,地址变换比较复杂,速度比较慢
组相联映像
描述:将Cache中的块再分成组,组采用直接相联映像方式,而块采用全相联映像方式。即主存任何区的0组智能存到Cache的0组中,1组智能存到Cache的1组中,以此类推,组内的块则采用全相联方式,即一组内的块可以任意存放。即主存一组中的任一块可以存入Cache相应组的任一块中。
优缺点:直接相连映像和全相连映像方式的折中
练习题
Cache的地址映像方式中,发生块冲突次数最小的是( A )。(2015年上半年)
A.全相联映像
B.组相联映像
C.直接映像
D.无法确定