我正在将一些软件从使用物理硬件设备转换为完整的软件模拟,现在我正在研究中断处理部分。
当这段代码驱动物理硬件时,它通过 request_irq()
请求 IRQ,现在我不再拥有物理设备,我将更改代码以使用“软中断”方法。
一个值得关注的问题是,我发现软中断实际上只是必须等待调度程序调用的事件;而硬件中断会导致正在运行的事件立即中断。这对我来说意味着,通过将我的代码转换为使用软中断将导致原始代码中不存在的调度延迟。
我的理解正确吗?
我是否可以像硬件中断一样注册我的软中断以立即中断?
如果没有,是否可以选择一个免费的硬件中断号并继续使用request_irq()
并“欺骗”它认为我正在运行硬件设备?
最佳答案
您可以在用户模式代码或内核模式代码中引发异常(通过额外的系统调用或驱动程序),并在内核中使用专用的异常处理程序将此异常转换为模拟中断。与外部硬件中断类似,异常通常至少由 CPU 立即处理。我对 Linux 内部结构的了解还不够,无法准确地告诉您如何实现这一点,但它一定是可行的。我确信它可以在 x86 上运行。
关于c - Linux 中的软中断处理时序与硬中断处理时序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821295/