8

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

如果是 - >如何?

如果不是->“原子”操作系统调用如何工作(例如进入关键部分)?

谢谢你的帮助!

4

3 回答 3

10

在 x86 汇编中,命令是

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

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

于 2009-10-17T08:21:26.077 回答
3

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

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

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

于 2009-10-06T18:39:35.543 回答
2

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

祝你好运!

于 2013-03-05T13:45:39.990 回答