计算机组成原理学习笔记:奇偶校验码
概述
- 数据在计算机内部进行计算,存储还有传送的过程当中,由于计算机元器件有可能会发生故障
- 或者有可能会因为某些环境噪音干扰,导致我们在计算机内部存储传输的这些二进制数据会发生错误
- 所以我们就必须考虑到数据的校验这样的东西,怎么做才能知道才能发现这种错误的发生
- 另外当检测到错误发生之后,应该怎么来改正这个错误呢?
- 奇偶校验是一种可以发现数据错误的一种编码机制
校验原理
- 两台计算机之间进行数据的传输,那它们有可能会传出这样的信息:ABCD,假设对应编码如下
信息 | A | B | C | D |
---|---|---|---|---|
编码 | 00 | 01 | 10 | 11 |
- 由于只有4种信息,我们只需要两个bit的信息,就可以和上述四个信息进行一个一一的映射, 假设他们想要传输的是B这个信息也就是二进制的01
- 但是现在由于某种神秘的环境因素的干扰,导致了这两个二进制位在传输的过程当中发生了跳变,也就是发生了所谓的位错误,0可能会变成1; 1可能会变为0
- 假设是第2个二进制位发生了错误,接收端的计算机最后收到的数据就变成了00,所以本来他们想传送的是B这个信息
- 但是由于环境因素的干扰,接收端计算机接收到的实际是A,由于00这个信息也是合法的,接收端计算机,并不能判断出它接受到的这个数据是不是发生了错误
信息 | A | B | C | D |
---|---|---|---|---|
编码 | 100 | 001 | 010 | 111 |
- 把这个编码方案进行一个优化,我们增加一个冗余的校验位,这时候就有3位了,由于2的3次方等于8,也就是说3个二进制位,本来可以映射为8种状态
- 但是现在我们只取了其中的4个状态作为合法的状态,剩下的4个是冗余的非法状态, 采用这种编码方案来传输数据,就可以让我们发现某一些二进制位的错误
- 要发送B这个信息,B所对应的二进制编码是001,在传输的过程中,假设是最后一位发生了错误,接收端计算机就会接收到000这个信息
- 000这个信息,是一个非法的状态,所以此时接收端计算机就可以判断000,一定是发生了错误的,就可以让它重新再传输
基本概念
- 码字:由若干位代码组成的一个字叫码字
- 第1种编码方案,2个bit位,有可能出现4种状态,而这4种状态都是合法的码字
- 第2种,三个bit有8种状态,这8种状态当中只有其中的4个是合法的码字,剩下4个是非法的码字
- 两个码字间的距离:把两个码字进行逐位的对比,他们之间有几个位不一样,我们就称为这两个码字之间的距离为多少
- 1 ) 比如上述第一种编码方案中的A和C
- A: 00
- C: 10
- 可见,第一个二进制位是不一样的,由此它们的码字间距离是1
- 2 ) 比如上述第二种编码方案中的A和C
- A: 100
- C: 010
- 可见,前两个二进制位是不一样的,由此它们的码字间距离是2
- 码距:一种编码方案可能会有若干个合法的码字,这些合法码字之间的最小距离
- 像第1种2bit的编码,所有的合法码字之间的最小距离是1,也就是说码距为1
- 当码距为1就意味着当信息在传输的过程中,如果有一个比特位发生了跳变,有可能使得从一个合法的码字跳变到另一个合法的码字,由于跳变的码字也是合法的
- 所以接收方就无法检测出数据在传输的过程当中有没有发生错误
- 像第2种方案所有合法的码字之间,它们之间的最小距离是2, 也就是说任意两个合法码字之间至少都会有两个二进制比特位是不一样的
- 意味着在数据传输的过程当中,如果只有一个比特位发生了跳变,一个bit的错误一定会使得我们的码字进入一个非法的状态
- 在这种情况下我们就可以检测出数据的错误,因此可以看到一种编码方案的检测能力如何和码距是息息相关的
- 对于码距唯一的编码方案,一定是没有检测能力的,而当马距等于2的时候,开始出现了检错的能力
- 而如果能设计码距大于3的编码方案,在设计合理的情况下,除了检错之外,甚至还有可能会有纠错的能力,比如: 海明码
奇偶校验码
- 原理:如果有n个有效的信息位,那么我们会在这些信息位的首部或者尾部加入一位的奇偶校验位
- 如果采用奇校验的策略,我们需要保证我们添加的这个校验位,还有所有的信息位里面,1的个数必须是奇数个,那偶校验的策略也是类似的
- 奇校验码:整个校验码(有效信息位和校验位)中的"1"的个数为奇数
- 偶校验码:整个校验码(有效信息位和校验位)中的"1"的个数为偶数
- 备注:奇偶校验码只具有检错能力
- 例题:给出两个编码:1001101 和 1010111的奇校验码和偶校验码, 设最高位为校验位,余7位是信息位,求对应的奇偶校验码为
- 1001101的奇校验码:
- 目前已经有4个1了,因此我们需要在高位再补上一个1让其变成奇数个1,即:11001101
- 1010111偶校验码:
- 目前已经有5个1了,因此我们需要在高位再补上一个1让其变成偶数个1,即:11010111
- 检测错误: 以偶校验码为例
- 如果11010111在发送过程中发生了一个bit的信息跳变,比如最后的1变成了0,当接收的时候,并不符合偶校验码的规定,确定出了问题并要求重新传送
- 如果11010111在发送过程中发生了两个bit的信息跳变,比如最后的两个1变成了0,当接收的时候,发现有4个1,这时符合偶校验码的规定,接收方会以为自己收到合法的数据, 这时候是检测不出来错误的
- 由上可知,这是奇偶校验码检测错误的局限性
- 1001101的奇校验码:
奇偶校验的硬件实现
- 以偶校验的硬件实现为例, 确定一串信息位的校验位是多少位, 可以通过硬件的异或(模2加)运算来确定
- 关于异或运算的规则是相同为0,相异为1, 如下例:
- 0⊕0=00 \oplus 0 = 00⊕0=0
- 0⊕1=10 \oplus 1 = 10⊕1=1
- 1⊕0=11 \oplus 0 = 11⊕0=1
- 1⊕1=01 \oplus 1 = 01⊕1=0
1 ) 获取偶校验码示例
- 对于编码1001101求其偶校验位, 我们可以基于异或来实现, 将其所有的比特位进行异或运算
- 1⊕0⊕0⊕1⊕1⊕0⊕1=01 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 = 01⊕0⊕0⊕1⊕1⊕0⊕1=0
- 所有比特位进行异或运算得到的结果是0
- 这个0就是最高位补全的偶校验位上的数字
- 把完整的数字拼接,得到偶校验码:01001101
- 对于编码1010111求其偶校验位, 我们可以基于异或来实现, 将其所有的比特位进行异或运算
- 1⊕0⊕1⊕0⊕1⊕1⊕1=11 \oplus 0 \oplus 1 \oplus 0 \oplus 1 \oplus 1 \oplus 1 = 11⊕0⊕1⊕0⊕1⊕1⊕1=1
- 所有比特位进行异或运算得到的结果是1
- 这个1就是最高位补全的偶校验位上的数字
- 把完整的数字拼接,得到偶校验码:11010111
2 ) 进行校验
- 同样需要进行异或运算,对所有的二进制位,包括校验位进行异或, 若结果为1,则说明出错
- 对于偶校验码: 01001101
- 0⊕1⊕0⊕0⊕1⊕1⊕0⊕1=00 \oplus 1 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 = 00⊕1⊕0⊕0⊕1⊕1⊕0⊕1=0
- 对于偶校验码: 11010111
- 1⊕1⊕0⊕1⊕0⊕1⊕1⊕1=01 \oplus 1 \oplus 0 \oplus 1 \oplus 0 \oplus 1 \oplus 1 \oplus 1 = 01⊕1⊕0⊕1⊕0⊕1⊕1⊕1=0
- 基于如上可知:
- 目前都是通过校验的
- 如果某一位跳变会得到结果为1,则发生错误
- 如果其中两位发生了跳变,则校验结果为0,此时无法正确检测出来错误
- 对于偶校验码来说,如果有偶数个比特发生了错误,那么我们是无法检测出错误的
总结
- 奇偶校验
- 校验原理
- 码字间的距离:两个码字之间有几个位不同
- 码距:一个编码方案中,合法码字间的最小距离
- 若码距=2,有检错能力;若码距 >= 3, 可能还会有纠错能力
- 奇偶校验
- 在信息位的首部或尾部添加一个奇偶校验位
- 奇校验:整个校验码(信息位和校验位)中"1"的个数为奇数
- 偶校验:整个校验码(信息位和校验位)中"1"的个数为偶数
- 奇偶校验码的码距d=2, 仅能检测出奇数位错误,无纠错能力
- 异或运算(模二加)
- 两个比特进行异或运算,仅当二者不同时计算结果为1
- 校验原理
计算机组成原理学习笔记:奇偶校验码相关推荐
- 计算机组成原理学习笔记(上)
计算机系统概论 计算机发展历程 原始计算工具 中国人的智慧之光 机械式计算机 西方人的智慧 机电式计算机 电子计算机 1,最古老的计算工具:算筹 2,冈特计算尺 3,达芬奇机械式计算机 4,1642年 ...
- 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线
文章目录 课程笔记导览 附录:英语解释 第三章 总线 3.1 总线的基本概念 使用总线的原因: 总线的定义 总线上信息的传送 总线结构举例 单总线结构 面向CPU的双总线结构 以存储器为中心的双总线结 ...
- 计算机组成原理学习笔记一
计算机组成原理学习笔记一 计算机发展历程 一.计算机硬件发展 (1)计算机的四代变化 (2)计算机元件更新换代 二.计算机软件发展 三.计算机的分类 计算机系统层次结构 一.计算机系统的组成 二.计算 ...
- 计算机组成原理学习笔记第1章 1.3——实验一 计算机性能测试
计算机组成原理学习笔记第1章 1.3--实验一 计算机性能测试 本篇笔记整理:Code_流苏(CSDN) 目录 计算机组成原理学习笔记第1章 1.3--实验一 计算机性能测试 0️⃣思维导图(自制) ...
- 计算机组成原理学习笔记第5章指令系统 5.6——MIPS指令详解
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) First (在文末点击使用,返回文章首部) 目录 0.思维导图 1.R型指令 ...
- 计算机组成原理学习笔记第6章中央处理器CPU 6.2——数据通路DataPath
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) First (在文末点击使用,返回文章首部) 目录 0.思维导图 1.数据通路 ...
- 计算机组成原理学习笔记第5章指令系统 5.3——操作数寻址方式
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) First (在文末点击使用,返回文章首部) 目录 0.思维导图 1.立即数寻 ...
- 计算机组成原理学习笔记第4章 4.2——主存中的数据组织
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) 目录 0.思维导图 1.存储字长 2.数据存储与边界的关系 ①按边界对齐的数据存储 ②未按边界对齐的数据存储 ③边界 ...
- 计算机组成原理学习笔记第4章 4.9——Cache地址映射与变换方法
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) 目录 0. 思维导图 1. 主存与Cache地址映射概述 2. 全相联映射的工作原理 3. 直接映射的工作原理 4. ...
- 计算机组成原理学习笔记第4章 4.10——替换算法
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) Frist (在文末点击使用,返回文章首部) 目录 0. 思维导图 1. 需要 ...
最新文章
- r语言平均值显著性检验_8小时整理!t检验原理!R语言实现!一文彻底搞定t检验(上)...
- 【Python】字典哈希表按键(key)值(value)顺序和逆序输出
- springboot+redis实现分布式session共享
- Keepalived实现双机热备
- ubuntu16.04安装jekyll 3.3.1
- python 调用mysql存储过程返回结果集
- 自定义控件的构建(10)
- 拓端tecdat|R语言动态图可视化:如何、创建具有精美动画的图
- 在JFrame窗口上绘制文字,用PrintJob打印出来
- 1-10所有5个数的组合_121期大乐透:关注10+5、重点号6个
- 最新php在线扒站程序源码分享
- 《计算机网络实验》网络参数配置与常用网络命令使用,超级详细教程
- 安装拼音加加时出现问题
- 最美人间四月天,我用五个关键词带你回顾
- opencv4.5.2嵌入式移植
- 3、核对单《数据收集工具与技术》
- 【mongoDB】一一一一安装报错1058解决方案
- Vue实现图片预览(放大缩小拖拽)纯手写
- OSI七层的基础概念
- 电话聊天狂人(25 分)