现在的位置: 首页 > 综合 > 正文

关于纠错机制的一点总结

2019年06月14日 ⁄ 综合 ⁄ 共 1343字 ⁄ 字号 评论关闭
由于各种各样的硬件原因(自然环境,硬件算坏,生产问题等)和软件原因(对象溢出,非特权用户越权更改数据等),计算机中保存的数据有时候可能出错,这时候就需要一个合理有效的纠错机制以防范这些情况的发生。

现在我所接触到的纠错机制有3种:1海明码校验,2奇偶校验,3CRC(循环冗余校验)。
海明码校验
先根据要校验的位数计算出所需要使用的海明码的长度。计算公式如下:
2^k - 1 > =m + k
其中k是校验码的位数,m是校验的位数。
海明码校验中校验码的各位的确定是由相关联的位进行异或操作得到的。步骤如下:
1先将K位的海明码插入m位的数据中。插入的位置是2的整数次处。
如: 对8位的数据进行海明码校验,所用的校验位数为4,插入的位置为 1, 2, 4, 8
2将原来数据中的数在新生成的字中的位置用16进制的数表示出来。
如 8位数据中,第一位数据在生成字中的位置为第3位,表示为0011
3该数的16位进制的地址上哪一位上有1,说明它与相对的位置的校验码也相关联
如0011,说明8位数据中的第一位与校验码中的第1位和第二位相关联。
4根据得到的关系,将相应数位上的数据取异或操作得到校验码。
这样的操作将原有的数据长度扩大了,但是同时也使得原有数据的可靠性增加了。
海明码的使用:
读出内存中存取的字,将校验位剥离出来,对数据重新生成一个校验码。将原来的校验码和生成的校验码取异或操作,这样得到的数表示取出来的字的相应位置存在错误,如果得到的结果为0,那么就表示没有错误。
注释:
海明码校验(或者称汉明码校验)是奇偶校验的一种,故它可以被分为奇校验和偶校验2种。上述的方法就是属于对数据进行海明码中的偶校验。我们考虑上述的方法的实现,只有当某一校验位关联的数据位上的数存在偶数个1时,该校验位才可能为0,否则为1。这样的话,相当于校验位加上其相关联的数据位上的数存在偶数个1。由此我们可以得出海明码种奇校验的生成方法,就是将海明码中偶校验的各位再异或一个1,至于怎么检查哪一位出错和偶校验一样。
奇偶校验
我们在对数据进行海明码校验的前提就是数据至多只有1位出现错误,但是当数据出现2位错误的时候,海明码校验就失效了。这个时候我们可能在对数据进行海明码校验之后再进行一下奇偶校验,在对数据操作结束后,我们可能根据奇偶校验确定获得的数据是否存在错误。
奇偶校验的执行步骤
在数据前面补充一位,以作为就校验位。如果是做奇校验,那么在校验位上补充0/1以保证所得到的新字中的1的个数为奇数,如果是偶校验,就是保证1的个数为偶数。
奇偶校验只能确定是否存在错误,不能表明错误的发生位置。(一般的存储技术将海明码校验和奇偶校验结合起来,这样校验方式被称为SEC-DED(single
error correcting double error
decting单纠正双检验纠错),这种方式被大多的存储机制采用)
CRC
循环冗余校验是一种比较简便的校验方式。主要步骤就是通过生成多项式得到一个k位的二进制数,在数据后面补充k-1个0,然后用得到的新数据去除以k位的二进制数,最后得到的k-1位余数就是这个数据的校验码,将校验码,生成多项式和数据一起保存,然后取出时将校验码补到接受的数据后面,并除以生成多项式生成的k位数据,如果能除得尽,那么不存在错误,否则存在错误。

抱歉!评论已关闭.