Linux中的软中断处理时序

时间:2012-10-10 14:05:19

标签: c linux scheduled-tasks interrupt irq

我正在将某些软件从使用物理硬件设备转换为整体软件模拟,现在我正在查看中断处理部分。

当此代码驱动物理硬件时,它通过request_irq()请求IRQ,现在我不再拥有物理设备,我将更改代码以使用“softirq”方法。

一个关注点,我看到softirqs实际上只是必须等到调度程序调用它的事件;而使用硬件中断会导致运行活动立即中断。这意味着通过将我的代码转换为使用softirqs将导致原始代码中不存在的调度延迟。

我的理解是否正确?
无论如何我可以注册我的softirq立即中断就像HW irq一样?
如果没有,那么无论如何都要选择一个免费的HW irq号并继续使用request_irq()并“欺骗”它以为我正在运行一个硬件设备?

2 个答案:

答案 0 :(得分:2)

您可以在用户模式代码或内核模式代码中(通过额外的系统调用或驱动程序)导致异常,并在内核中使用专用的异常处理程序将此异常转换为模拟中断。通常会立即处理异常,至少由CPU处理,类似于外部硬件中断。我不太了解Linux内部,告诉你究竟如何实现这一目标,但它必须是可行的。我确定,它可以在x86上运行。

答案 1 :(得分:0)

我对实时计算领域并不完全有信心,但这听起来像是一个很好的用例。实时计算可确保您的代码在保证的时间范围内执行。有一个Linux Real-Time Kernel可用,但遗憾的是缺乏资金。如果你仍然需要保证执行softirq,你应该调查它。我知道这是一个很好的问题,但也许对其他人也有用。