8.1.1 原子操作

Intel486处理器(以及更新的处理器)保证了以下基本的内存操作将始终以原子方式进行:

•读取或写入一个字节

•读取或写入在16位边界上对齐的单字

•读取或写入在32位边界上对齐的双字

奔腾处理器(以及更新的处理器)确保以下附加的内存操作始终以原子方式执行:

•读取或写入在64位边界上对齐的四字

•16位访问适合32位数据总线的未缓存内存位置

P6系列处理器(以及更新的处理器)确保以下附加内存操作始终以原子方式执行:

•对缓存内存进行未对齐的16,32和64位访问,适合缓存行访问跨缓存行和页边界划分的可缓存内存不保证为英特尔®酷睿™2双核处理器的原子性,英特尔® Atom™,Intel Core Duo,Pentium M,Pentium 4,Intel Xeon,P6系列,Pentium和Intel486处理器。

英特尔酷睿2双核处理器,英特尔凌动处理器,英特尔酷睿双核处理器,奔腾M处理器,奔腾4,英特尔至强处理器和P6系列处理器提供总线控制信号,允许外部存储器子系统将分割访问原子化;然而,不对齐的数据访问将严重影响处理器的性能,应该避免。(需测试,备注理解:这类处理器可以将未对齐地址访问实现原子化,但是未对齐访问方式本质没变,需要执行两次总线周期,所以需避免)

访问大于四字的数据的x87指令或SSE指令可以使用多个存储器访问来实现。如果这样的指令存储到存储器,则一些访问可以完成(写入存储器),而另一个访问可以导致操作对于架构原因(例如由于标记为“不存在”的页表项)。在这种情况下,即使整个指令导致错误,完成的访问的效果对于软件也是可见的。如果TLB失效延迟(见第4.10.4.4节),即使所有访问都在同一页面,也可能发生此类页面错误。



猜你喜欢

转载自965942380.iteye.com/blog/2405577