理论上我已经理解了软件中断和硬件中断的概念,但是任何人都可以给我一个软件中断的例子并解释它?请帮助我。
Windows或Linux操作系统的C程序示例
答案 0 :(得分:1)
handled为kernel。应用程序看不到它们(因为内核处理所有中断,因此将它们隐藏在应用程序中)。在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)。