锁定在英特尔架构中的语义

问题描述

锁定指令的作用将序列化多处理器系统上的所有操作?

从以下描述来看,似乎P6和更新的cpu承诺了此规则:

相对于所有其他内存,锁定操作是原子的 操作和所有外部可见事件。仅取指令 页表访问可以传递锁定的指令。已锁定 指令可用于同步由一个指令写入的数据 处理器并由另一个处理器读取。

对于P6系列处理器, 锁定的操作序列化所有未完成的加载和存储操作 (也就是说,等待它们完成)。这条规则也适用于 奔腾4和英特尔至强处理器,只有一个例外。加载 引用弱排序的内存类型(例如WC)的操作 内存类型)可能无法序列化。

但另一部分是P6上的LOCK和更新的处理器Cache-Locking 不会锁定总线,那么它如何保证序列化所有操作?

8.1.4 LOCK操作对内部处理器缓存的影响对于Intel486和Pentium处理器,始终声明LOCK#信号 在LOCK操作期间,即使在内存区域 锁定被缓存在处理器中。 对于P6及更高版本 处理器系列,如果在LOCK期间锁定了内存区域 操作被缓存在正在执行LOCK的处理器中 用作写回存储器,完全包含在缓存中 在线路上,处理器可能不会在总线上声明LOCK#信号。 相反,它将在内部修改内存位置并允许 它的缓存一致性机制可确保操作得以执行 原子出。该操作称为“缓存锁定”。缓存 一致性机制自动阻止两个或更多处理器 通过同时修改已缓存相同内存区域的内存 该区域中的数据。

在这里,在“内存顺序”部分,以下句子表示“锁定指令具有总顺序”:

在多处理器系统中,以下订购原则适用: •单个处理器使用与单处理器系统相同的排序原则。 •所有处理器以相同的顺序观察单个处理器的写入。 •对于来自其他处理器的写入,不对来自单个处理器的写入进行排序。 •内存顺序服从因果关系(内存顺序尊重传递的可见性)。 •除执行存储的处理器外,处理器会以一致的顺序查看任何两个存储 •锁定的指令具有全部指令。

我的困惑是,在P6和现代cpu上,LOCKed指令将序列化所有加载/存储操作吗?

换句话说,锁定指令的总顺序为?

三个处理器P1,P2,P3,P4和内存位置A,B的示例:

P1执行:锁定存储区以更改A,

P2执行:锁定存储区以更改B,

如果锁定商店无法保留总订单,则会发生以下情况:

在P3上,它可以观察到A变化-> B变化

在P4上,它可以观察到B发生了变化-> A发生了变化

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)