从前有一个国王,在一个进程上运行多年一直没有孩子。他每天向操作系统请求,希望给他一个孩子。
有一天,王后做着循环时,惊讶地发现自己做了一个错误的分支预测,清理掉错误的命令,她来到了一处未曾访问的内存,听见操作系统对她说,“你的愿望就要实现了,很快你就会有一个女孩。”
在约一百个时钟周期后,王后就fork下了一个非常漂亮的女孩,国王高兴极了,决定举行一场盛大的宴会庆祝。他遍请亲朋好友,还邀请了七位仙子。宴会上气氛很热烈,结束时,出席宴会的七位仙子纷纷为孩子送上祝福:
第一位将她的许多算法优化到了对数级,
第二位为她增加了异常处理,
第三位为她的循环做了2×2展开,
第四位为每个条件判断加上了__builtin_expect宏,
第五位为她替换了AVX指令集,
第六位为她链接了health.dll;
当第六位仙子释放完祝福的时候,一位未被邀请的坏仙子出现了,她说:“我要公主十五岁时,因函数参数溢出而进程崩溃,这就是我的祝福!”
这时,还未施加祝福的第七位仙子走上前来,她虽然不能取消那个凶恶的咒语,但能把它加以缓和,她说,我祝愿公主当时执行的函数是sleep;
国王为了使心爱的女儿免遭不幸,下令所有程序不允许#include <unistd.h>。然而在公主十五岁那年,一位老婆子用链接器让sleep符号找到了定义,并传入了参数 -1。
sleep函数的参数是一个无符号整数,于是发生溢出,诅咒成真,公主自此一睡不醒。
年复一年的过去,直至有一天,来自另一个核的王子被调度过来,他发现了公主的pid,经过仔细分析,用ida把sleep函数都替换成了nop,于是,程序更改,诅咒解除,公主醒来了。
自此,王子就一直待在这个核上,与公主一起分享时间片,并发地生活在一起,过上了幸福的日子。