Advertisement

linux 处理中断信号

阅读量:

为何需要实施中断线程化?
在Linux系统中,中断的优先级处于最高层级。无论何时发生中断事件,内核都会立即响应并执行对应的处理程序。只有在所有待处理的中断和软中断完成之后,才会继续执行常规任务。这种机制可能导致实时任务无法获得及时响应。通过引入中断线程化,中断将被转化为内核线程,并分配不同的实时优先级,使得实时任务能够拥有比中断线程更高的优先级。这样一来,具有最高优先级的实时任务可以得到优先处理,即便系统处于高负载状态,也能确保其实时性。然而,并非所有的中断都适合线程化处理,例如时钟中断主要用于维护系统时间与定时器等关键功能。定时器可视为操作系统的心跳机制,若将其线程化后可能被挂起,这将带来严重后果,因此不应进行线程化。

实现中断线程化的具体方式是:针对每个IRQ,在内核初始化过程中(该函数定义于源码树中的init/main.c文件),调用init_hardirqs(该函数位于源码树中的kernel/irq/manage.c文件)为每一个IRQ创建一个内核线程。其中IRQ号为0的中断被赋予实时优先级49,IRQ号为1的则被赋予48,并以此类推直到25为止。因此,在所有IRQ线程中最低的实时优先级为25。原来的do_IRQ函数被拆分为两个部分:架构相关的部分保留在类似arch/*/kernel/irq.c这样的文件中,并仍命名为do_IRQ;而架构无关的部分则放置于

全部评论 (0)

还没有任何评论哟~