c - Linux 中的软中断处理时序与硬中断处理时序

标签 c linux scheduled-tasks interrupt irq

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

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

一个值得关注的问题是,我发现软中断实际上只是必须等待调度程序调用的事件;而硬件中断会导致正在运行的事件立即中断。这对我来说意味着,通过将我的代码转换为使用软中断将导致原始代码中不存在的调度延迟。

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

最佳答案

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

关于c - Linux 中的软中断处理时序与硬中断处理时序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821295/

相关文章:

c - 函数地址与其他变量地址几乎相同

C - 按值传递和按引用传递不一致

c - 用C代码管理Linux网络接口(interface)

linux - 终端中的 ps -aux 到底在做什么?

mysql - 为 mySQL 数据库实现定期匹配系统的正确方法是什么?

windows - 如何通过命令行更改现有文件夹的图标? ( Windows 10)

ruby-on-rails - 使用 Ruby on Rails 安排发送电子邮件任务的最佳方法是什么?

c - 旋转5圈问题

c - 在有限制的情况下玩一会儿 - C 编程

linux - `echo prefix = ~/.node >> ~/.npmrc` 是什么意思?