This topic created in 4987 days ago, the information mentioned may be changed or developed.
CPU既然是集成电路,由于外部干扰、内部热量等等,肯定会在某种情况下产生逻辑错误。虽说出错的概率及其微小,但是CPU的运算速度摆在那里,这么大的样本也难免会出错。
于是,我想知道,CPU本身有没有冗余结构确保运算的正确性,操作系统有没有方法对这些逻辑错误进行规避,或是直接导致机器死机。还有,如果一个读取的指令由于错误变成了写入外部设备的指令,会不会影响到硬盘中数据的安全性?
这个问题纠结了很久了,也有可能是想得太多了,望专业人士能给一个解释,谢谢~~
3 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
ShadowStar Oct 3, 2012 1
我还真遇到过,做嵌入式的开发,判断一个地址的值是否等于特定的值失败,但是打印处理确实是那个值。 想你说的读取、写入的错误没那么容易发生,对于外部设备的读写不是简单的几个指令就完成的。 一般出错就是跑飞了,有kernel的话就panic,没有kernel的话就core trap。
|
 |
|
2
HowardMei Oct 4, 2012 2
绝大多数嵌入式系统出现‘跑飞’,都不是芯片内部问题,而是电路板设计问题,晶振、电源、接地、接触、寄生、走线串扰之类,也有的是软件问题,时序没考虑清楚。
CPU内部关键模块当然有冗余设计,各子模块内部校验、纠错、测试接口也一样都不会少,更不用说极其昂贵的QA流程了,什么DC/AC探针测试,什么零下40度到零上120度让芯片跑各种Corner Condition Cases,还有专门的封装测试厂,哪环节不是一分钟多少美金地烧钱,不可能像软件那样放着Bug以打补丁为生。服务器CPU冗余模块很多,低端MCU较少见模块级冗余,但是门级电路冗余还是会做的。
指令很上层,读在CPU内部变成写不可能,在最简单的MCU里所涉及的寻址、时序、运算电路单元也会有一大片,00010与00001在多级流水中涉及的门电路南辕北辙,内部出错不可能。对外输出时,接口/总线可能会出错,比如Output Buffer电平被钳制,这时芯片整个异常是应该的,不然你怎么发现某个蠢家伙焊错?
另外,存储芯片控制逻辑也都是时钟边缘触发,并带校验,不会胡乱执行指令。
|
 |
|
3
jimaobian Oct 6, 2012
原来如此,自己对CPU的了解还真得非常有限,感谢两位的回复~~
|