假设将32位值写入跨越2页的内存位置。为了论证,我们假设在第一页中有2个字节,在第二页中有2个字节。第一页是可写的,但第二页是未映射的。执行整个指令将触发页面错误,这很好。
我的问题是:在将值的前2个字节写入内存之前或之后,是否会触发页面错误?换句话说,故障后代码运行(例如,故障处理程序)是否能够观察到部分写入?
让我们假设一个X86环境,因为我怀疑这种行为可能是架构,甚至可能是模型特定的。
答案 0 :(得分:-3)
来自英特尔架构手册第3A卷:
访问可缓存的内存,这些内存分为缓存行和 英特尔酷睿2不保证页面边界是原子的 Duo,Intel®Atom™,Intel Core Duo,Pentium M,Pentium 4,Intel Xeon, P6系列,奔腾和Intel486处理器。
IMO非原子意味着您所描述的场景可能会发生。写入前2个字节后可以产生中断。