我从理论上理解了软件中断和硬件中断的概念,但是任何人都可以给我一个软件中断的例子并解释一下吗?请这对我有很大的帮助。
适用于 windows 或 Linux 操作系统的 C 程序示例
中断由操作系统内核处理。应用程序看不到它们(因为内核处理所有中断,因此对应用程序隐藏它们)。在Linux 上,应用程序进程看到信号。请参阅signal(7)并阅读Advanced Linux Programming。
请注意,C11标准(关于 C 编程语言)不知道中断。
请理解信号不是中断(Linux 应用程序不会直接看到任何中断,除非通过proc(5)测量它们,请参阅文件/proc/interrupts
)。并且信号处理程序有严格的限制:只能从信号处理程序(直接或间接)调用异步信号安全函数。通常,volatile sig_atomic_t
在您的信号处理程序中设置一个标志是明智的,您的应用程序应该在其他地方对其进行测试。
如果你有一个事件循环(例如poll(2)等),使用 Linux 特定的signalfd(2)可能会非常方便。
因此,在编写 Linux 应用程序(也可能是 Windows 应用程序)时,您并不关心中断(但您可能会处理一些信号)。顺便说一句,Linux 内核通常每秒会看到数百(或数千)个中断,并唤醒一些驱动程序和/或为其中的大多数重新安排一些任务。给定的 Linux 应用程序进程通常每秒处理的信号少于一个(但 YMMV)。