V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jimaobian
V2EX  ›  问与答

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

  •  
  •   jimaobian · 2012-10-03 21:31:47 +08:00 · 4226 次点击
    这是一个创建于 4429 天前的主题,其中的信息可能已经有所发展或是发生改变。
    CPU既然是集成电路,由于外部干扰、内部热量等等,肯定会在某种情况下产生逻辑错误。虽说出错的概率及其微小,但是CPU的运算速度摆在那里,这么大的样本也难免会出错。

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

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

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

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

    另外,存储芯片控制逻辑也都是时钟边缘触发,并带校验,不会胡乱执行指令。
    jimaobian
        3
    jimaobian  
    OP
       2012-10-06 12:30:18 +08:00
    原来如此,自己对CPU的了解还真得非常有限,感谢两位的回复~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:45 · PVG 20:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.