中断处理程序可以被抢占吗?

问题描述:

我知道linux嵌套中断,其中一个中断可以“抢占”另一个中断,但是与其他任务有关。中断处理程序可以被抢占吗?

我只是想了解linux如何处理中断。它们是否可以被其他用户任务/内核任务抢占。

简单的回答:一个中断只能被更高优先级的中断中断。

因此,一个中断可以被内核或用户任务中断如果中断的优先级低于内核调度程序中断优先级或用户任务中断优先级。

请注意,“用户任务”的意思是用户定义的中断

+4

很晚,但在vanila linux内核中没有中断优先级的概念。 – Saurabh 2012-06-03 18:57:00

阅读Why kernel code/thread executing in interrupt context cannot sleep?可链接到罗伯特·爱article,我这样说的:

一些中断处理程序(在 Linux作为快速中断处理程序已知的)运行 与上禁用本地 处理器的所有中断。这样做到 确保中断处理程序运行 不中断,尽可能快地 。更甚的是,所有中断 处理程序在其所有 处理器上都禁用其当前 中断行的情况下运行。这确保了同一个 中断线的两个 中断处理程序不会同时运行 。它还会阻止驱动程序编写者的设备 必须处理递归中断,这会使编程复杂化。

因此,AFIK中的所有IRQ在中断处理程序中被禁用,因此它不能被中断!?

+0

默认情况下,所有irq都未禁用,只有在所有处理器上禁用相同的irq。但在request_irq中有标记,可以在服务中断时禁用本地处理器上的所有其他中断。 – JagsVG 2016-01-06 07:15:13