一次监控多个地址的 Mwait 指令?

分享于2022年07月17日 c cpu-architecture monitor wait x86 问答
【问题标题】:一次监控多个地址的 Mwait 指令?(Monitor/Mwait instructions for multiple addresses at once?)
【发布时间】:2022-07-08 03:18:29
【问题描述】:

我已经验证了Monitor/Mwait指令在监控单个地址时的用法。但我想知道它是否可以同时监控多个地址。以及可以同时监控多少个地址?

例如,我尝试使用以下代码监视变量 a 和变量 b,我发现处理器可以在 a 或 b 变化时唤醒。是否有关于如何使用 Monitor/Mwait 监控多个地址的官方说明。

monitor(&a, 0, 0);
monitor(&b, 0, 0);
mwait(0, 0);

  • 我会说这是不可能的。

【解决方案1】:

一次只能监控一个地址。执行 MONITOR 指令会替换之前监控的地址。

不过,它不会监控单个字节地址;这是一个范围。可以使用 CPUID 发现范围的大小。 它通常是 64 字节(单个高速缓存行)。这就解释了为什么您观察到它同时在 a 和 b 上触发。