是否可以使用ASM / C / C ++程序禁用所有中断以完全控制处理器?
如果是 - >如何?
如果不是 - > “原子”操作系统调用如何工作(例如进入临界区)?
感谢您的帮助!
答案 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)的指令也可以修改此标志。
祝你好运!