深入浅出计算机组成原理
徐文浩
bothub创始人
立即订阅
13019 人已学习
课程目录
已完结 62 讲
0/4登录后,你可以任选4讲全文学习。
入门篇 (5讲)
开篇词 | 为什么你需要学习计算机组成原理?
免费
01 | 冯·诺依曼体系结构:计算机组成的金字塔
02 | 给你一张知识地图,计算机组成原理应该这么学
03 | 通过你的CPU主频,我们来谈谈“性能”究竟是什么?
04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
原理篇:指令和运算 (12讲)
05 | 计算机指令:让我们试试用纸带编程
06 | 指令跳转:原来if...else就是goto
07 | 函数调用:为什么会发生stack overflow?
08 | ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
09 | 程序装载:“640K内存”真的不够用么?
10 | 动态链接:程序内部的“共享单车”
11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
12 | 理解电路:从电报机到门电路,我们如何做到“千里传信”?
13 | 加法器:如何像搭乐高一样搭电路(上)?
14 | 乘法器:如何像搭乐高一样搭电路(下)?
15 | 浮点数和定点数(上):怎么用有限的Bit表示尽可能多的信息?
16 | 浮点数和定点数(下):深入理解浮点数到底有什么用?
原理篇:处理器 (18讲)
17 | 建立数据通路(上):指令+运算=CPU
18 | 建立数据通路(中):指令+运算=CPU
19 | 建立数据通路(下):指令+运算=CPU
20 | 面向流水线的指令设计(上):一心多用的现代CPU
21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?
22 | 冒险和预测(一):hazard是“危”也是“机”
23 | 冒险和预测(二):流水线里的接力赛
24 | 冒险和预测(三):CPU里的“线程池”
25 | 冒险和预测(四):今天下雨了,明天还会下雨么?
26 | Superscalar和VLIW:如何让CPU的吞吐率超过1?
27 | SIMD:如何加速矩阵乘法?
28 | 异常和中断:程序出错了怎么办?
29 | CISC和RISC:为什么手机芯片都是ARM?
30 | GPU(上):为什么玩游戏需要使用GPU?
31 | GPU(下):为什么深度学习需要使用GPU?
32 | FPGA和ASIC:计算机体系结构的黄金时代
33 | 解读TPU:设计和拆解一块ASIC芯片
34 | 理解虚拟机:你在云上拿到的计算机是什么样的?
原理篇:存储与I/O系统 (17讲)
35 | 存储器层次结构全景:数据存储的大金字塔长什么样?
36 | 局部性原理:数据库性能跟不上,加个缓存就好了?
37 | 高速缓存(上):“4毫秒”究竟值多少钱?
38 | 高速缓存(下):你确定你的数据更新了么?
39 | MESI协议:如何让多核CPU的高速缓存保持一致?
40 | 理解内存(上):虚拟内存和内存保护是什么?
41 | 理解内存(下):解析TLB和内存保护
42 | 总线:计算机内部的高速公路
43 | 输入输出设备:我们并不是只能用灯泡显示“0”和“1”
44 | 理解IO_WAIT:I/O性能到底是怎么回事儿?
45 | 机械硬盘:Google早期用过的“黑科技”
46 | SSD硬盘(上):如何完成性能优化的KPI?
47 | SSD硬盘(下):如何完成性能优化的KPI?
48 | DMA:为什么Kafka这么快?
49 | 数据完整性(上):硬件坏了怎么办?
50 | 数据完整性(下):如何还原犯罪现场?
51 | 分布式计算:如果所有人的大脑都联网会怎样?
应用篇 (5讲)
52 | 设计大型DMP系统(上):MongoDB并不是什么灵丹妙药
53 | 设计大型DMP系统(下):SSD拯救了所有的DBA
54 | 理解Disruptor(上):带你体会CPU高速缓存的风驰电掣
55 | 理解Disruptor(下):不需要换挡和踩刹车的CPU,有多快?
结束语 | 知也无涯,愿你也享受发现的乐趣
免费
答疑与加餐 (5讲)
特别加餐 | 我在2019年F8大会的两日见闻录
FAQ第一期 | 学与不学,知识就在那里,不如就先学好了
用户故事 | 赵文海:怕什么真理无穷,进一寸有一寸的欢喜
FAQ第二期 | 世界上第一个编程语言是怎么来的?
特别加餐 | 我的一天怎么过?
深入浅出计算机组成原理
登录|注册

50 | 数据完整性(下):如何还原犯罪现场?

徐文浩 2019-08-26
讲完校验码之后,你现在应该知道,无论是奇偶校验码,还是 CRC 这样的循环校验码,都只能告诉我们一个事情,就是你的数据出错了。所以,校验码也被称为检错码(Error Detecting Code)。
不管是校验码,还是检错码,在硬件出错的时候,只能告诉你“我错了”。但是,下一个问题,“错哪儿了”,它是回答不了的。这就导致,我们的处理方式只有一种,那就是当成“哪儿都错了”。如果是下载一个文件,发现校验码不匹配,我们只能重新去下载;如果是程序计算后放到内存里面的数据,我们只能再重新算一遍。
这样的效率实在是太低了,所以我们需要有一个办法,不仅告诉我们“我错了”,还能告诉我们“错哪儿了”。于是,计算机科学家们就发明了纠错码。纠错码需要更多的冗余信息,通过这些冗余信息,我们不仅可以知道哪里的数据错了,还能直接把数据给改对。这个是不是听起来很神奇?接下来就让我们一起来看一看。

海明码:我们需要多少信息冗余?

最知名的纠错码就是海明码。海明码(Hamming Code)是以他的发明人 Richard Hamming(理查德·海明)的名字命名的。这个编码方式早在上世纪四十年代就被发明出来了。而直到今天,我们上一讲所说到的 ECC 内存,也还在使用海明码来纠错。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入浅出计算机组成原理》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(20)

  • CarreyWang
    难以理解的地方
    1. 这个时候,你去想一想,如果 d1 这一位的数据出错了,会发生...
    2.如果从二进制的角度看,它们是这 11 个数当中,唯四的,在 ...

    这两块就看不懂了
    2019-10-17
    2
  • coldpark
    在4-3海明码这个例子中,如果d2和d3奇偶不同,p1和p2本身就会不一样啊,为什么能推断出是d1错了呢?
    2019-10-04
    1
    1
  • LDxy
    大学通信原理的课程内容,已经忘得差不多了

    作者回复: LDxy同学你好,

    没错,这个很多是放在通信原理或者信息论里的,正好可以复习一下。

    2019-08-26
    1
  • RX
    简单吗😂我觉得看起来好费劲~
    2019-12-09
  • 陈志恒
    这门课中多次涉及到编码问题:二进制字符集编码、数据完整性等内容
    2019-11-28
  • gibson1112
    海明码和海明距离的关系。海明距离是不是来寻找哪个数据产生了错误?然后再用海明码来纠错?
    2019-10-27
  • 江湖中人
    海明码的编码机制,应该是可以保证经过编码后的任意两个数据(含校验位),其海明距离都是大于2的,即任意两个半径为1的球都不会有重叠部分,从而可以纠正1位数据。

    未经编码的任意两组不同数据,其最小海明距离为1,所以发生错误了无法发现,更别说纠正了。

    是不是也有可以纠正2位数据的海明码呢?
    2019-10-13
  • airfly
    有个地方不懂,如何保证两条数据的海明威距离至少为3
    2019-10-04
    1
  • 活的潇洒
    不管多慢、都要坚持打卡、坚持写博文
    day50天 笔记:https://www.cnblogs.com/luoahong/p/11442996.html
    2019-09-15
  • 暴风雪
    我看第二遍就明白了

    作者回复: 👍

    2019-09-15
  • Solomon
    这章有点难

    作者回复: 能说说具体难在哪里么?的确反馈这一讲不容易理解的同学比较多

    2019-09-09
  • Tristen陈涛
    不太理解海明距离的作用,如果两个接收到的数据,它们只要至多有一个错误位,不是一样都能自行纠正过来,与海明距离何干啊? 麻烦请解释一下哈

    作者回复: 不是啊,比如一个有效的数据二进制是 101,另一个是 110,海明距离是2。那么我们收到 111,这是一个无效数据,我们怎么知道,应该纠正成101还是110呢?

    2019-09-09
    1
  • 暴风雪
    仅仅通过这篇文章理解海明码,会很难明白,需要借助其他的学习资料

    作者回复: 这一篇有不少同学说不太容易明白,如果可以的话,可以具体留言讲一下主要难以理解的是哪一部分么?

    2019-09-02
  • 炎发灼眼
    老师,看完这章,有两个问题想不通,望解释
    第一,任何两个我们要传输的数据,海明距离起码要为3,这个在实际操作中怎么能控制呢
    第二,如果两个数据海明距离是2,就会有一个出错的数据,距离两个正确的数据距离都是1,无法判断到底要纠错到哪一个正确的数据,但是海明码不是可以唯一确定出错位吗,有了出错位,不是就可以知道需要纠错到哪一个正确的数据了吗

    作者回复: 炎发灼眼同学,

    你好,第一点是在编码过程中就控制完了的,通过7-4海明码编码的数据,任何两条数据之间的海明距离至少是3

    第二点没错,如果我们编码没有考虑校验位会出错,就会遇到这个问题,导致无法纠错。

    2019-08-27
  • -W.LI-
    校验位记录的是什么啊?一个校验位只有0和1。可是那个校验位上有值的数字大于这个数啊?

    作者回复: -W.LI-同学

    你好,这个是奇偶校验,奇数个1就是1,偶数个1就是0

    2019-08-26
  • Geek_54edc1
    2位错误有三种情况:2个校验位错,2个数据位错,1个校验位和1个数据位错。其中,只要有校验位错了,那么肯定就是有数据错误了,这样就可以检出错误了,那么2个数据位错误能够检出错误吗?通过校验位与数据位的对应关系(看上面的图),只要有任意2个数据位错了,那么总有1个校验位是错的(因为任意1个数据位都不可能对应所有的校验位,即图中数据位的列不是全为x),因此,任意2个数据位的错误也可以检出。综上,可以检出2位出错。。。
    2019-08-26
  • 许童童
    这一节感觉有点难,像推理一样,还得再看几遍。
    2019-08-26
    1
  • leslie
    应当是根据运算的结果知道哪里错了吧?奇偶校验不是有个最终的值么,是不是这个有一个判断标准,从而让我们不需要知道具体的,可以通过某个判断值去反推哪个错了。
         网络IP不是也有也有类似的二进制计算么:是不是相对原理有点类似啊?之前老师有堂课不是讲了影片的纠错么:这个是不是也有相关性;几门课程同时学习中,如果知识打岔了;请老师多包涵。

    作者回复: leslie同学,

    你好,网络里面的确也有海明码,也是为了解决传输中数据可能出现单比特错误的问题。

    2019-08-26
  • 有铭
    海明距离,这好像和google那个计算论文相似度的东西是一样的
    2019-08-26
  • 栾~龟虽寿!
    剩下的 p2,我们用 3、6、10、11 来计算校验码,也就是在二进制表示下,从右往左数的第二位比特是 1 的情况下,用 p2。少了7
    2019-08-26
    1
收起评论
20
返回
顶部