C?中的软件中断



我从理论上理解了软件中断和硬件中断的概念,但有人能给我一个软件中断的例子并解释它吗??请帮我一个忙。

windows或Linux操作系统的C程序示例

中断由操作系统内核处理。应用程序看不到它们(因为内核处理所有中断,所以对应用程序隐藏它们)。在Linux上,应用程序进程可以看到信号。请参阅信号(7)并阅读Advanced Linux Programming。

请注意,C11标准(在C编程语言上)不知道中断。

请理解,信号不是中断(Linux应用程序不会直接看到任何中断,除非通过proc(5)测量它们,请参阅文件/proc/interrupts)。信号处理程序有很强的限制:只有异步信号安全函数才能从信号处理程序中(直接或间接)调用。通常,在信号处理程序中设置volatile sig_atomic_t标志是明智的,应用程序应该在其他地方进行测试。

如果您有一个事件循环(例如,围绕poll(2)等),使用Linux特定的信号fd(2)可能会非常方便。

因此,在编写Linux应用程序(可能还有Windows应用程序)时,您不关心中断(但可能会处理一些信号)。顺便说一句,Linux内核通常每秒会看到数百(或数千)次中断,并唤醒一些驱动程序和/或为其中的大多数重新安排一些任务。给定的Linux应用程序进程通常每秒处理的信号远少于一个(但YMMV)。

最新更新