当未签名的写入跨越页边界并触发故障时会发生什么?

时间:2017-10-14 10:21:21

标签: assembly x86 operating-system

假设将32位值写入跨越2页的内存位置。为了论证,我们假设在第一页中有2个字节,在第二页中有2个字节。第一页是可写的,但第二页是未映射的。执行整个指令将触发页面错误,这很好。

我的问题是:在将值的前2个字节写入内存之前或之后,是否会触发页面错误?换句话说,故障后​​代码运行(例如,故障处理程序)是否能够观察到部分写入?

让我们假设一个X86环境,因为我怀疑这种行为可能是架构,甚至可能是模型特定的。

1 个答案:

答案 0 :(得分:-3)

来自英特尔架构手册第3A卷:

  

访问可缓存的内存,这些内存分为缓存行和   英特尔酷睿2不保证页面边界是原子的   Duo,Intel®Atom™,Intel Core Duo,Pentium M,Pentium 4,Intel Xeon,   P6系列,奔腾和Intel486处理器。

IMO非原子意味着您所描述的场景可能会发生。写入前2个字节后可以产生中断。