Spring aware接口的作用是什么
255
2022-10-08
可怕!CPU竟成了黑客的帮凶!(黑客太可怕了)
前情回顾还记得我吗,我是阿Q,就是那个CPU一号车间的阿Q啊。如果你忘记了我,记得看看这里回忆一下哦:完了!CPU一味求快出事儿了!
自从我们车间用上了乱序执行和分支预测后,生产效率那是大大提升,领导不仅在全厂的员工大会表扬了我们,还把这两项技术向全厂推广,在我们8个CPU核心车间都铺开了,性能甩开竞争对手CPU几条街。
事情还得从不久前的一个晚上说起。
神秘代码这天晚上,我们一号车间遇到了这样一段代码:
uint8_t array1[160] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; uint8_t array2[256 * 512]; uint8_t temp = 0; void bad_guy(int x) { if (x < 16) { temp &= array2[array1[x] * 512]; } }
不到一会儿功夫,我们就执行了这个bad_guy()函数很多次,这不,又来了。
负责取指令的小A向内存那家伙打了一通电话,让内存把参数x的内容传输过来,我们知道,以内存那蜗牛的速度,估计得让我们好等。
这时,负责指令译码的小胖忍不住说了:“你们看,我们这都执行这个函数好多次了,每次的参数x都是小于16的,这一次估计也差不多,要不咱们启动分支预测功能,先把小于16分支里的指令先提前做一些?大家看怎么样”
于是,就在等待的间隙,我们又给内存那家伙打了电话,让他把array1[x]的内容也传过来。
等了一会儿,数据总算传了过来:
x: 2 array1[x]: 3
拿到结果之后,我们开始一边执行x<16的比较指令,一边继续打电话给内存索要array2[3]的内容。
比较指令执行的结果不出所料,果然是true,接下来就要走入我们预测的分支,而我们提前已经将需要的数据准备到缓存中,省去了不少时间。
遭遇滑铁卢天有不测风云,不久,事情发生了变化。
“呀!比较结果是false,这一次的x比16大了”,我执行完结果后发现和我们预期的有了出入。
小A闻讯而来,“额,咱们提前执行了不该执行的指令不会有问题吧?”
我想了想也对,大不了我们提前做的准备工作白费了,没有多想就继续去执行>16的分支指令了。
随后,同样的事情也时有发生,渐渐的我们就习惯了。
灾难降临夜越来越深,我们都有点犯困了,突然,领导来了一通电话,让我们放下手里的工作火速去他办公室。
我们几个不敢耽误,赶紧出发。
“阿Q啊,你知不知道你们新发明的乱序执行和分支预测技术闯了大祸了?”
我们几个一听傻眼了,“领导,这是从何说起啊?”
领导从椅子上站了起来,指着旁边的陌生人说到:“给你们介绍一下,这是操作系统那边过来的安全员,让他告诉你们从何说起吧!”
这位安全员向大家点了点头,指着被捆绑那人说道:“大家好,我们抓到这个线程在读取系统内核空间的数据,经过我们的初审,他交代了是通过你们CPU的乱序执行和分支预测功能实现的这一目的。”
真相大白安全员显然看出了我们的疑惑,指着被捆绑的那个线程说道:“你把之前交代的再说一遍”
“几位大爷,你们之前是不是遇到了分支预测失败的情况?”,那人抬头看着我们。
“有啊,跟这有什么关系?失败了很正常嘛,既然是预测那就不能100%打包票能预测正确啊”,我回答道。
听他这么一说,我的心一下悬了起来,“纳尼,你干的?”
“是的,就是我,我先故意给你连续多次小于16的参数,误导你们,误以为后面的参数还是小于16的,然后突然来一个特意构造的大于16的参数,你们果然上钩了,预测失败,提前执行了一些本不该执行的指令。”
“那又如何呢?我们只是把后面需要的数据提前准备到了缓存中,并没有进一步做什么啊”,我还是不太明白。
“这就够了!”
“好好好,我这就交代。你们把数据提前准备到了缓存中,我后面去访问这部分数据的时候,发现比访问其他内存快了很多”
“那可不,我们的缓存技术可不是吹牛的!哎等等,怎么又扯到缓存上去了?”,老K继续问道。
我们几个一边听着一边想着,琢磨了好一会儿总算弄清楚了这家伙的套路,老K气得火冒三丈,差点就想动手修理那人。
“好你个家伙,倒是挺聪明的,可惜都不用在正途上!好好的加速优化机制竟然成为了你们的帮凶”,我心中也有一团火气。
亡羊补牢事情的真相总算弄清楚了,我们几个此刻已经汗流浃背。
以前的时候,线程执行在用户态和内核态时用的是同一本地址翻译手册,也就是人们说的页表,通过这本手册,我们CPU就能通过虚拟地址找到真实的内存页面。
现在好了,让线程运行在用户态和内核态时使用不同的手册,用户态线程的手册中,内核地址空间部分是一片空白,来一招釜底抽薪!
本以为我们可以回去了,没想到领导却给我们出了难题,“这祸是你们闯下的,人家操作系统那边虽然做了保护,你们是不是也该拿出点办法来呢,要不然以后我们CPU还怎么抬得起头来?”
你有什么好办法吗,帮帮我们吧!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~