10.Error Correction
差错
-
数据在计算机内部进行计算、存取和传送过程中, 由于元器件故障或噪音干扰等原因, 会出现差错
-
以存储为例
- 硬故障: 永久性的物理故障, 以至于受影响的存储单元不能可靠地存储数据, 成为固定的"1"或"0"故障, 或者在0和1之间不稳定地跳变
- 由于恶劣的环境, 制造缺陷和旧损引起
- 软故障: 随机非破坏性事件, 它改变了某个或某些存储单元的内容, 但没有损坏机器
- 由电源问题或α粒子引起
- 硬故障: 永久性的物理故障, 以至于受影响的存储单元不能可靠地存储数据, 成为固定的"1"或"0"故障, 或者在0和1之间不稳定地跳变
-
解决方案
-
从计算机硬件可靠性入手, 在电路, 电源, 布线等方面采取必要的措施, 提高计算机的抗干扰能力
-
采取数据检错和校正措施, 自动发现并纠正错误
-
纠错
-
基本思想
- 存储额外的信息以进行检错和校正
-
处理过程
奇偶校验码
-
基本思想
- 增加1位校验码来表示数据中1的数量是奇数还是偶数
- 奇校验: 使传输的数据(数据位+校验位)中有奇数个1
- 偶校验: 使传输的数据(数据位+校验位)中有偶数个1
- 增加1位校验码来表示数据中1的数量是奇数还是偶数
-
处理过程
-
优点
- 代价低(只需要1位额外数据, 计算简单)
-
缺点
- 不能发现出错位数为偶数的情形
- 发现错误后不能校正
-
适用于对较短长度(如1字节)的数据进行检错
海明码
-
基本思想
- 将数据分成几组, 对每一组都使用奇偶校验码进行检错
-
处理过程
-
校验码长度
- 假设最多1位发生错误
- 可能的差错
- 数据中有1位出现错误: M
- 校验码中有1位出现错误: K
- 没有出现错误: 1
- 校验码的长度
- 2K ≥ M + K + 1
- 根据M求出最小的K
-
故障字的作用
- 每种取值都反映一种情形 (数据出错/校验码出错/未出错)
- 规则
- 全都是0: 没有检测到错误
- 有且仅有1位是1: 错误发生在校验码中的某一位, 不需要纠正
- 有多位为1: 错误发生在数据中的某一位, 将**D’**中对应数据位取反即可纠正
-
数据位划分
-
位安排
-
将位设置在与其故障字值相同的位置
-
示例
码距和纠错位数
补充: SEC-DED
循环冗余校验
-
奇偶校验问题
- 额外成本很大
- 要求将数据分成字节
-
循环冗余校验(Cyclic Redundancy Check, CRC)
- 适用于以流格式存储和传输大量数据
- 用数学函数生成数据和校验码之间的关系
-
基本思想
- 假设数据有M位, 左移数据K位(右侧补0), 并用K+1位生成多项式除它(模2运算)
- 采用K位余数作为校验码
- 把校验码放在数据(不含补的0)后面, 一同存储或传输
-
校错
- 如果M+K位内容可以被生成多项式除尽, 则没有检测到错误
- 否则, 发生错误