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位内容可以被生成多项式除尽, 则没有检测到错误
 - 否则, 发生错误
 
 





















