Linux kernel Linux(或其他*nix):将中断附加到用户空间
我试图确保在特定硬件中断发生后,一个唯一的用户进程尽快执行 我知道这样做的一种机制是编写一个小型内核模块,在读取处理程序中休眠时导出设备。该模块还注册了一个irq处理程序,该处理程序除了唤醒进程外什么也不做。然后从用户的角度,读取该设备块,直到相关中断发生 (1) 在一个具有主线内核的现代CPU上,您能可靠地预期内核看到中断和用户进程重新获得控制之间的亚毫秒延迟吗 (2) 主线内核上是否有任何较低的延迟机制?将应用于内核,并通过Linux kernel Linux(或其他*nix):将中断附加到用户空间,linux-kernel,linux-device-driver,freebsd,openbsd,Linux Kernel,Linux Device Driver,Freebsd,Openbsd,我试图确保在特定硬件中断发生后,一个唯一的用户进程尽快执行 我知道这样做的一种机制是编写一个小型内核模块,在读取处理程序中休眠时导出设备。该模块还注册了一个irq处理程序,该处理程序除了唤醒进程外什么也不做。然后从用户的角度,读取该设备块,直到相关中断发生 (1) 在一个具有主线内核的现代CPU上,您能可靠地预期内核看到中断和用户进程重新获得控制之间的亚毫秒延迟吗 (2) 主线内核上是否有任何较低的延迟机制?将应用于内核,并通过make menuconfig配置完全可抢占性来编译它 这将允许线程
make menuconfig
配置完全可抢占性来编译它
这将允许线程中断(即,中断处理程序作为内核线程执行)。然后,您可以将最大优先级(即RT prio>50)分配给您的特定中断处理程序(使用
ps aux
检查其PID)和您的特定进程,并将较低的优先级分配给任何其他进程。您的方法似乎还可以。我不确定亚毫秒的延迟,但它可能是可以用“轻”内核实现的(你可以在你的机器上测试)。但可靠性是实时系统的特性。非RT操作系统不提供任何关于响应时间的保证。对于亚毫秒可能很难实现,但在任何情况下,您都需要RT补丁对不起,编辑以澄清我试图了解如何在非实时内核上尽可能降低延迟。还有其他的技巧吗?或者这是最好的方法吗?谢谢!我听说过PREEMPT\u RT。如果可以保证这个设备只有一个irq处理程序,PREEMPT\u RT补丁的其他功能是否有帮助?是的,如果应用PREEMPT\u RT并在内核配置中选择完全可抢占,那么在运行时,每个irq都有一个线程。