【问题标题】:Do microprocessors disable interrupts while compare and swap instructions are executed?微处理器在执行比较和交换指令时会禁用中断吗?
【发布时间】:2020-02-01 19:07:14
【问题描述】:

compare and swap instruction 正在执行时,1.4 GHz Intel Core i5(64 位)CPU 是否会禁用中断?

换句话说,如果我有std::atomic<int> atom_int;,这是否意味着在atom_int++; 期间,信号(SIGINTSIGSTPSIGKILL)无法传递给进程?

我了解它的 CPU 特定问题,并希望得到任何特定 CPU 的答案。

【问题讨论】:

  • 我认为在 intel 上它是作为一条指令实现的,所以不能被中断?
  • 这是无法回答的,因为对于所有 CPU 的架构没有标准。另外,这不是 C++ 规范的一部分,所以我不确定为什么 C++ 会被标记为这个问题。
  • 您是否尝试查看为您的目标系统生成的程序集?如果您没有特定的目标,请告诉我们您所指的系统范围。
  • 但是,我希望您描述的行为。否则 atomic 属性没有意义。
  • 这是一个关于英特尔 CPU 的特定于 CPU 的问题和一个关于在 std::atomic 类型的操作期间接收信号的 C++ 语言问题的奇怪组合。你问一个问题,然后说“换句话说”,然后问一个完全不同的问题。 CPU 如何在单条指令期间处理中断与接收可能由中断传递或不传递的信号以及可能或可能不使用单条指令实现的代码有什么关系?

标签: c++ embedded cpu atomic microprocessors


【解决方案1】:

以下两件事不一定相同:

  1. C++ 级别的原子操作 (std::atomic)
  2. 保证是原子的汇编程序 CPU 指令

例如,现代英特尔处理器保证对 64 位对齐地址的 64 位读/写是原子的。它还保证了带有 LOCK 前缀的指令被原子地执行。

另一方面,在 C++ 中,std::atomic 保证对对象的操作以原子方式执行。如果可能的话,一个好的编译器会为此使用单个原子 CPU 指令。但是,对于较大的对象,这种原子性不能通过单个原子 CPU 指令来实现。因此,原子性只能通过使用更复杂的同步方法来保证,例如locks。这种复杂的同步方法需要多条 CPU 指令,因此总是可以中断。

你可以通过调用std::atomic::is_lock_free()来判断std:atomic是否使用锁。

【讨论】:

    【解决方案2】:

    Intel CPU(有效地)在所有指令执行时禁用中断——中断只能在指令之间传递。现在指令的执行可能会在时间上重叠(混淆了between的含义),但是中断机制的工作方式是,中断之前的每条指令都会完成,而中断之后的每条指令都会被取消(所以没有效果)。

    请注意,仅仅因为不能在指令中间传递中断,如果指令包含多个内存访问(例如 inc mem有效地执行读取-修改-写入),因为连接到总线的其他 CPU 或其他设备可能会修改其间的位置。这就是 lock 前缀的用途——它保证在指令运行时该内存位置不会发生任何其他事情。

    【讨论】:

    • 我没有意识到它是一条指令!现在说得通了
    • 我认为这个答案具有误导性。尽管 OP 有点不清楚他是指 CPU 指令还是 std::atomic 操作,但有一次,他特意询问了 std::atomic 操作是否可以中断。正如我在回答中所展示的,如果编译器无法将 std::atomic 操作实现为单个 CPU 指令(例如,如果对象太大),这是可能的。
    • 虽然它可能是也可能不是 OP 所要求的,但我很小心地明确指出,我说的是英特尔 CPU 上的指令,而不是任何抽象的 C++ 对象。
    • @ChrisDodd 有一些指令可以在执行过程中被打断并从中断处继续。其中包括长时间运行的指令,例如 REP MOVSBVPGATHERQD
    • @DavidSchwartz:虽然从技术上讲是正确的,但当中断发生在它们内部时,这些指令仍然表现得好像“介于”之间,当中断继续时,它们需要“重新启动”(重新获取和重新解码)。然而,特别是,它们不能与锁定前缀组合以成为原子。
    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多