C中的软件中断?

时间:2013-12-22 12:38:34

标签: c linux windows interrupt isr

理论上我已经理解了软件中断和硬件中断的概念,但是任何人都可以给我一个软件中断的例子并解释它?请帮助我。

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

1 个答案:

答案 0 :(得分:1)

操作系统Interrupts

handledkernel。应用程序看不到它们(因为内核处理所有中断,因此将它们隐藏在应用程序中)。在Linux,应用processes,请参阅signals。请参阅signal(7)并阅读Advanced Linux Programming

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

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

如果您使用特定于Linux的event loop poll(2)(例如约signalfd(2)等...)可能会非常方便。

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