锁定指令对多处理器系统中所有操作的序列化效果如何?
从下面的描述来看,似乎P6和最近的cpu承诺了这个规则:
操作和所有外部可见事件。仅指令获取
页表访问可以传递锁定的指令。锁定
由另一个处理器读取。
对于P6系列处理器,
锁定操作序列化所有未完成的加载和存储操作
(也就是说,等待它们完成)。这条规则同样适用于
奔腾4和英特尔至强处理器,只有一个例外。加载
但是另一部分,P6上的锁和最近的处理器,缓存锁
不会锁定总线,所以它如何保证序列化所有操作?
8.1.4对Intel486和Pentium处理器的内部处理器缓存的锁操作的影响,锁信号总是被断言的
在锁定操作期间,即使内存区域
锁定缓存在处理器中。
处理器系列,如果在锁定期间要锁定的内存区域
操作缓存在执行锁定的处理器中
作为写回存储器的操作,并且完全包含在高速缓存中
行,处理器可能不会在总线上断言锁定信号。
相反,它将在内部修改内存位置并允许
它的缓存一致性机制,以确保操作的进行
以原子方式输出。此操作称为缓存锁定。缓存
一致性机制自动防止两个或多个处理器
同时修改
在这里的内存顺序部分,下面的句子说锁定指令有一个总的顺序:
在多处理器系统中,以下排序原则适用:
单个处理器使用与单处理器系统相同的排序原则。
单个处理器的写操作被所有处理器以相同的顺序观察。
从一个处理器到另一个处理器的写操作不是从一个处理器到另一个处理器的。
除执行存储的处理器外,任何两个存储的顺序都是一致的
换句话说,锁定指令有一个总的顺序?
三个处理器P1、P2、P3、P4和存储器位置a、B的示例:
P2执行:锁定存储以更改B,
无法保存订单,如果发生以下情况:
在P3上,它可以观察到A已更改-->B已更改
在P4上,它可以观察到B已更改-->A已更改