禁用硬件和软件中断

时间:2009-10-06 18:35:40

标签: assembly x86 atomic interrupt critical-section

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

如果是 - >如何?

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

在x86程序集中,命令是

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

这些命令设置并清除IF Flag。当IF标志置位时,CPU将处理硬件中断,当它清零时,CPU将忽略硬件中断。它不会影响不可屏蔽中断的处理,也不会影响软件中断或异常。这些指令也不适用于非特权模式(通常高于环0的所有内容,具体取决于IOPL)。

答案 1 :(得分:3)

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

在Win32下,您可以使用Interlocked *函数在支持的平台上从中抽象出来。

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

答案 2 :(得分:0)

x86在FLAGS寄存器中有一个中断标志(IF)。当此标志设置为0时,将禁用硬件中断,否则将启用它们。命令cli将此标志设置为0,并将sti设置为1.将值加载到FLAGS寄存器(例如popf和iret)的指令也可以修改此标志。

祝你好运!