禁用硬件和软件中断
是否可以使用 ASM/C/C++ 程序禁用所有中断以完全控制处理器?
如果是的话->如何?
如果没有-> “原子”操作系统调用如何工作(例如进入关键部分)?
感谢您的帮助!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否可以使用 ASM/C/C++ 程序禁用所有中断以完全控制处理器?
如果是的话->如何?
如果没有-> “原子”操作系统调用如何工作(例如进入关键部分)?
感谢您的帮助!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
在 x86 汇编中,命令为
sti
设置中断启用位cli
清除中断启用位这些命令设置和清除 IF 标志。当IF标志被置位时,CPU将处理硬件中断,当该标志被清零时,CPU将忽略硬件中断。但它不影响不可屏蔽中断的处理,也不影响软件中断或异常。这些指令在非特权模式下也不起作用(通常高于环 0 的所有内容,具体取决于 IOPL ) 尽管。
In x86 assembly the the commands are
sti
set interrupt enable bitcli
clear interrupt enable bitThese commands set and clear the IF Flag. When the IF flag is set, the CPU will handle hardware interrupts, and when it is clear the CPU will ignore hardware interrupts. It does not affect the handling of non-maskable interrupts though, nor does it affect software interrupts or exceptions. These instructions also don't work in unprivileged mode (usually everything higher than ring 0, depending on IOPL) though.
在 x86 和大多数其他现代处理器上,您可以获得原子指令。在另一个线程/处理器可以访问该内存之前保证不会完成执行。
在 Win32 下,您拥有 Interlocked* 函数,可以在受支持的平台上从您那里抽象出这些功能。
在 MIPS 上,很多指令可以有一个 .I 添加到指令末尾以保证互锁。
on x86 and most other modern processors you can get atomic instructions. Ones that are GURANTEED not to be finished executing before another thread/processor can access that memory.
Under Win32 you have the Interlocked* functions that abstract that from you on supported platforms.
On a MIPS a lot of instruction can have a .I added to the end of the instruction to guarantee interlocking.
x86 在 FLAGS 寄存器中有一个中断标志 (IF)。当该标志设置为 0 时,硬件中断被禁用,否则它们被启用。命令 cli 将此标志设置为 0,sti 将其设置为 1。将值加载到 FLAGS 寄存器的指令(例如 popf 和 iret)也可能会修改此标志。
祝你好运!
The x86 has an interrupt flag (IF) in the FLAGS register. When this flag is set to 0, hardware interrupts are disabled, otherwise they are enabled. The command cli sets this flag to 0, and sti sets it to 1. Instructions that load values into the FLAGS register (such as popf and iret) may also modify this flag.
good luck!