查看: 7333|回复: 7

「单比特错误」真的会造成整个程序乃至计算机系统的崩溃么?现代计算机有哪些检错、纠错机制?

[复制链接]
论坛徽章:
0
发表于 2013-1-3 19:55 | 显示全部楼层 |阅读模式
在刘宇昆的科幻小说《单比特错误》里说,由于外太空来的的一个高能粒子使车载导航系统的微机系统出现了一个比特的电平错误,以至于使整个导航系统崩溃,造成严重车祸——这在现代计算机系统中真的可能发生么(总觉得不科学)?现代计算机系统有哪些检错、纠错机制?
论坛徽章:
0
发表于 2013-1-3 20:10 | 显示全部楼层
所谓「单比特错误」或曰「比特反转」(bit flipping) 其实不算罕见,但导致系统崩溃的毕竟是极少数。因为日常用的大部分数据是诸如视频、音乐、图片这样的媒体文件,可执行文件的比例相对小得多;就算发生比特反转,按照概率也更容易发生在总量大的媒体文件上。

在数据的存储和传输过程中由于各种各样的原因都有可能导致比特反转,所以要通过一些技术手段降低这种风险。比如在网络传输过程中常用 CRC [1] 校验的办法来发现错误。在单个计算机内部,出现比特错误的主要部件是内存和磁盘。因此多数服务器上使用的是带 ECC [2] 纠错机制的内存条 [3]【价钱比普通内存条贵不少】。磁盘在存储数据时也需要附带存储一些冗余信息用于纠错。此外在文件系统层面也可以通过一些手段修正错误,比如 ZFS [4] 采用了哈希树的方式来避免磁盘自身的纠错机制无法发现的漏网之鱼。

另外,如果你下载过一些 Linux 发行镜像,会发现通常会附带一个 MD5 或者 SHA1 的哈希码,主要是用于验证文件是否被恶意篡改过,但也可以用来检验下载和存储过程中是否因为硬件问题导致了比特反转。

最后,据我所知在航空航天这样的对可靠性要求非常高的场合中会使用特殊的硬件来避免高强度宇宙射线导致的比特反转,并且核心系统都是有好几套完全相同的副本同时运行输出结果进行比较后才能采用的,因此发生灾难性错误导致飞机、飞船坠毁的概率几乎可以忽略不计。


[1]: http://en.wikipedia.org/wiki/Cyclic_redundancy_check
[2]: http://en.wikipedia.org/wiki/Error-correcting_code
[3]: http://en.wikipedia.org/wiki/ECC_memory
[4]: http://en.wikipedia.org/wiki/ZFS
[5]: http://en.wikipedia.org/wiki/Hash_tree


使用道具 举报

回复
论坛徽章:
0
发表于 2013-1-3 21:07 | 显示全部楼层
实际工况下,系统不被看成符号,而是信号与噪音的混合。


使用道具 举报

回复
论坛徽章:
0
发表于 2013-1-3 22:05 | 显示全部楼层
首先,题主所说的宇宙射线导致比特位反转的情况,属于比较常见的问题。但是从本质上来说,他和其他的硬件flaw造成的结果是一样的,也即比特位反转了。所以可以用一致的方式来进行检错和纠错,主要手段是冗余。

编码上的冗余Rio已经提了不少,我再介绍一种硬件上的冗余——TMR,即Triple Modular Redundancy,三重模件冗余。他由三个相同功能的组件与一个表决器组成。总体思想就是,同一个工作由三个不同的执行单元同时做,如果有一个发生错误了(比如短路,或者比特位反转),没关系,因为另外两个正常的执行单元会给出同样的正确答案,表决器可以就此选出正确答案。

三个相同功能的组件,可以是同构的,也可以是异构的。例如波音747上的1颗逻辑CPU实际上是由9颗物理CPU组成的。首先1颗摩托罗拉CPU,1颗AMD的CPU以及1颗INTEL的CPU,3颗CPU组成一个TMR单元,同样的单元会再冗余三遍,以求把系统发生错误的可能性降低到最低。


使用道具 举报

回复
论坛徽章:
0
发表于 2013-1-3 22:59 | 显示全部楼层
事实上,在一切信号处理电路中,包括CPU、内存、以太网、硬盘、键盘、鼠标、触摸板,,,,每分每秒都出现大量的单比特错误,根本不需要外太空的什么粒子来掺和。但如你所见,他们运行的好好的。


使用道具 举报

回复
论坛徽章:
0
发表于 2013-1-3 23:55 | 显示全部楼层
见过因单比特出错而导致进程挂掉,且磁盘上的程序映像被改写的实例。万般无奈之下用mv命令把那个inode移到别处就好了。


使用道具 举报

回复
论坛徽章:
0
发表于 2013-1-9 14:39 | 显示全部楼层
如果没有误码校验或检纠错机制,单比特翻转是完全有可能造成程序崩溃的。
举个例子:在存在变长编码的系统中,码流中的单比特错误在译码端可能导致连续的码字译码错误,导致错误大规模扩散,这种现象被称为误码扩散。

检纠错机制主要有两大方面——
1.系统级或硬件级的抗误码,即硬件冗余;
2.抗误码编解码机制,即编码冗余;

1. 常见的系统级或者硬件级的抗误码机制,如 所说的,一般被称为“三模冗余(Triple Modular Redundancy-TMR)”——核心计算模块由三个完全相同的模块共同完成,三个模块共用一个输入源,各自的输出经过逐比特“表决”后,得到的比特流的误码率会大大降低;只有超过两个模块的输入比特流在同一比特位置均发生比特翻转时,表决码流才会出错;三模冗余可以将线性的误码概率降低至平方级的误码概率。

2. 纠错编码(Error Correcting Code-ECC),纠错编码的算法过于庞杂,但是核心思想大多是通过引入“编码冗余”,增加编码后码字之间的汉明距离(Hamming Distance表征某个编码的抗误码性能),从而达到更强的抗误码性能;
此外,需要补充的一点是:只检错不纠错的检错编码算法,依然具有抗误码能力。因为检错往往即可将误码扩散限制在系统允许的范围内,从而避免程序崩溃。


使用道具 举报

回复
论坛徽章:
0
发表于 2013-1-12 09:46 | 显示全部楼层
这不就是EVA里面的MAGI么?三个独立的系统做出投票表决。


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表