禁用硬件和软件中断

6 x86 assembly atomic interrupt critical-section

是否可以使用ASM/C/C++程序禁用所有中断以完全控制处理器?

如果是 - >怎么样?

如果不是 - >"原子"操作系统调用如何工作(例如进入临界区)?

谢谢你的帮助!

Lud*_*erl 5

在x86程序集中,命令是

  • sti 设置中断使能位
  • cli 清除中断使能位

这些命令设置并清除IF标志.当IF标志置1时,CPU将处理硬件中断,当它清零时,CPU将忽略硬件中断.它不会影响不可屏蔽中断的处理,也不会影响软件中断或异常.这些指令也不能在非特权模式下工作(通常一切都高于环0,取决于IOPL).

  • 你倒退了.STI启用中断.CLI禁用. (4认同)

Goz*_*Goz 3

在 x86 和大多数其他现代处理器上,您可以获得原子指令。在另一个线程/处理器可以访问该内存之前保证不会完成执行。

在 Win32 下,您拥有 Interlocked* 函数,可以在受支持的平台上从您那里抽象出这些功能。

在 MIPS 上,很多指令可以有一个 .I 添加到指令末尾以保证互锁。

  • 在 x86 上,您可以在某些指令前加上“lock”前缀,使它们成为原子的。 (2认同)