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