2011-05-09 77 views
3

我知道linux嵌套中斷,其中一箇中斷可以「搶佔」另一箇中斷,但是與其他任務有關。中斷處理程序可以被搶佔嗎?

我只是想了解linux如何處理中斷。它們是否可以被其他用戶任務/內核任務搶佔。

回答

2

簡單的回答:一箇中斷只能被更高優先級的中斷中斷。

因此,一箇中斷可以被內核或用戶任務中斷如果中斷的優先級低於內核調度程序中斷優先級或用戶任務中斷優先級。

請注意,「用戶任務」的意思是用戶定義的中斷

+4

很晚,但在vanila linux內核中沒有中斷優先級的概念。 – Saurabh 2012-06-03 18:57:00

7

閱讀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

相關問題