如果CPU出现硬件错误,会发生什么?

2012-10-03 21:31:47 +08:00
 jimaobian
CPU既然是集成电路,由于外部干扰、内部热量等等,肯定会在某种情况下产生逻辑错误。虽说出错的概率及其微小,但是CPU的运算速度摆在那里,这么大的样本也难免会出错。

于是,我想知道,CPU本身有没有冗余结构确保运算的正确性,操作系统有没有方法对这些逻辑错误进行规避,或是直接导致机器死机。还有,如果一个读取的指令由于错误变成了写入外部设备的指令,会不会影响到硬盘中数据的安全性?

这个问题纠结了很久了,也有可能是想得太多了,望专业人士能给一个解释,谢谢~~
4067 次点击
所在节点    问与答
3 条回复
ShadowStar
2012-10-03 23:18:41 +08:00
我还真遇到过,做嵌入式的开发,判断一个地址的值是否等于特定的值失败,但是打印处理确实是那个值。
想你说的读取、写入的错误没那么容易发生,对于外部设备的读写不是简单的几个指令就完成的。
一般出错就是跑飞了,有kernel的话就panic,没有kernel的话就core trap。
HowardMei
2012-10-04 12:14:46 +08:00
绝大多数嵌入式系统出现‘跑飞’,都不是芯片内部问题,而是电路板设计问题,晶振、电源、接地、接触、寄生、走线串扰之类,也有的是软件问题,时序没考虑清楚。

CPU内部关键模块当然有冗余设计,各子模块内部校验、纠错、测试接口也一样都不会少,更不用说极其昂贵的QA流程了,什么DC/AC探针测试,什么零下40度到零上120度让芯片跑各种Corner Condition Cases,还有专门的封装测试厂,哪环节不是一分钟多少美金地烧钱,不可能像软件那样放着Bug以打补丁为生。服务器CPU冗余模块很多,低端MCU较少见模块级冗余,但是门级电路冗余还是会做的。

指令很上层,读在CPU内部变成写不可能,在最简单的MCU里所涉及的寻址、时序、运算电路单元也会有一大片,00010与00001在多级流水中涉及的门电路南辕北辙,内部出错不可能。对外输出时,接口/总线可能会出错,比如Output Buffer电平被钳制,这时芯片整个异常是应该的,不然你怎么发现某个蠢家伙焊错?

另外,存储芯片控制逻辑也都是时钟边缘触发,并带校验,不会胡乱执行指令。
jimaobian
2012-10-06 12:30:18 +08:00
原来如此,自己对CPU的了解还真得非常有限,感谢两位的回复~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/49188

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX