2

我正在将一些软件从使用物理硬件设备转换为完整的软件模拟,现在我正在研究中断处理部分。

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

一个令人担忧的问题是,我看到软中断实际上只是必须等到调度程序调用它的事件。而硬件中断会导致正在运行的活动立即中断。这对我来说意味着,通过将我的代码转换为使用 softirqs 将导致原始代码中不存在的调度延迟。

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

4

2 回答 2

2

您可以在用户模式代码或内核模式代码(通过额外的系统调用或驱动程序)中引发异常,并在内核中有一个专用的异常处理程序来将此异常转换为模拟中断。异常通常会立即处理,至少由 CPU 处理,类似于外部硬件中断。我对 Linux 内部的了解还不够,无法确切地告诉您如何实现这一点,但它必须是可行的。我敢肯定,它可以在 x86 上运行。

于 2012-10-10T14:24:06.510 回答
0

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

于 2015-01-12T17:05:18.147 回答