FineUI 官方论坛

标题: Windows 内核曾经尝试应对伽马射线导致的比特翻转 [打印本页]

作者: sanshi    时间: 2018-11-22 10:13
标题: Windows 内核曾经尝试应对伽马射线导致的比特翻转
Windows 内核曾经尝试应对伽马射线导致的比特翻转

微软资深程序员、《Old New Thing》作者 Raymond Chen 在其博客上谈论了一段往事,Windows 内核曾在短时间内加入 INVD 指令去尝试处理宇宙射线引发的比特翻转。

From: https://news.cnblogs.com/n/612914/

--------------------------------------------------------

这则新闻看起来短小精悍,不过其中的比特翻转倒是引起了我的兴趣。从字面意思看,好像就是 0 变成 1,或者 1 变成 0。如果真是这么,不就算是硬件攻击么。

下面这段描述,很通俗的解释了比特翻转,比较有意思:
--------------------------------------------------------
一般的计算机Memory介质中,每个存储单元(晶体管+电容器)存放1bit数据,这个比特位要么是0,要么是1——存储单元中充满电子表示1,清空表示0。内存就是由上亿这样的存储单元构成的,数据也因此得以存储。

不过电容器会泄露,一个电容器充满电子后,只需要几毫秒就会泄露殆尽。这就要求CPU(内存控制器)对电容进行充电,让“1”这个值能够保持住。整个过程是由内存控制器先读取电容器中的值,然后再把数据写回去。这种刷新操作,每秒会执行几千次。

这几年的内存容量正在大幅度上涨,所以存储比特位的电容器也就越来越小,排列越来越近。要防止相邻的电容之间相互干扰,难度也就变得更大。如果能够快速、反复访问一排电容,相邻行的电容更容易产生干扰错误和所谓的“比特位翻转”,也就是0变成1。

其实正常的数据读写一般是不会发生比特位翻转的,可是如果对某些行进行反复读写,问题就有可能产生。2014年卡内基梅陇大学的研究人员层发表过一篇论文,题为《无访问情况下的内存比特位翻转——DRAM干扰行错误的试验研究》,其本质是通过机器码指令CLFUSH或Cache Line Flush,强制进行这种比特位的读取和更新。据说利用这种方式,可引起大量比特位翻转。

From:https://www.freebuf.com/column/133871.html

[attach]11672[/attach]





欢迎光临 FineUI 官方论坛 (https://www.fineui.com/bbs/) Powered by Discuz! X3.4