是否可能使用ASM/C/C++程序禁用所有中断以完全控制处理器?
如果是 -> 如何实现?
如果不是 -> "原子"操作系统调用如何工作(例如进入临界区)?
感谢您的帮助!
是否可能使用ASM/C/C++程序禁用所有中断以完全控制处理器?
如果是 -> 如何实现?
如果不是 -> "原子"操作系统调用如何工作(例如进入临界区)?
感谢您的帮助!
在x86和大多数现代处理器上,您可以使用原子指令。这些指令保证在另一个线程/处理器访问该内存之前不会完成执行。
在Win32下,您可以使用Interlocked*函数在支持的平台上进行抽象处理。
在MIPS上,很多指令后面都可以添加.I来保证互锁。
x86架构在FLAGS寄存器中有一个中断标志(IF)。当该标志被设置为0时,硬件中断将被禁用,否则将被启用。命令cli将此标志设置为0,而sti将其设置为1。将值加载到FLAGS寄存器中的指令(例如popf和iret)也可能修改此标志。
祝好运!