IRQLInterrupt Request Level的縮寫,即中斷請求級別。是Windows作業系統使用的處理器中斷級別。

簡介

編輯

Windows作業系統運行的處理器架構中,硬體產生信號發給可程式中斷控制器英語Programmable Interrupt Controller. 中斷控制器發送中斷請求英語Interrupt request (PC architecture) (IRQ)及相應的優先級給CPU,CPU設置一個掩碼(mask)屏蔽低優先級的其他中斷請求到掛起狀態(pending state),直到CPU釋放控制給中斷控制器。如果到來的中斷有更高優先級,那麼當前中斷被掛起,CPU處理高優先級的中斷。[1]

Windows把硬體中斷與軟體中斷都映射到內部的中斷表內。這就是中斷請求級別IRQL。多核處理器的每個內核有自己單獨的IRQL。異步過程調用、用戶態執行緒、內核模式操作都可以被中斷,因此它們的IRQL低於執行緒調度器(或稱分派器)。[2]

級別

編輯

DDK幫助文檔中有IRQL的級別:

IRQL 描述
軟體IRQL 0 PASSIVE_LEVEL 最低級別, 沒有被屏蔽的中斷。執行緒執行用戶模式,可以訪問分頁內存。
LOW_LEVEL
0 intermediate level 運行在臨界區內的執行緒。調用KeGetCurrentIrql返回PASSIVE_LEVEL。調用KeAreApcsDisabled來檢查是否在臨界區內。在本層或更高層的驅動程序不能suspended。
1 APC_LEVEL 異步調用層。當有異步過程調用APC發生時,處理器提升到APC級別,因而就屏蔽了其它APC。可以訪問分頁內存。用KeAcquireFastMutex與KeReleaseFastMutex函數調用可以進入/退出本層。
2 DISPATCH_LEVEL 分發派遣層。DPC和更低的中斷被屏蔽,不能訪問分頁內存,因為缺頁中斷也是在這個層。執行緒調度器也在此層,調度時只考慮優先級,因此APC_LEVEL上的執行緒被阻塞後,可以調度執行PASSIVE_LEVEL執行緒。
硬體IRQL 3-26 DIRQL (Device IRQL) 設備IRQL 幾乎所有的中斷被屏蔽
27 PROFILE_LEVEL 使用PRILFILE的定時器
28 CLOCK1_LEVEL 未在X86使用
CLOCK2_LEVEL 內部定時器2
SYNCH_LEVEL 同步層
29 IPL_LEVEL 中斷內部處理層
30 POWER_LEVEL 電源故障層
31 HIGH_LEVEL 最高中斷層

內核函數KeGetCurrentIRQL取得處理器當前的IRQL。

參見

編輯

參考文獻

編輯
  1. ^ Russinovich, Mark, Inside NT's Interrupt Handling, Windows IT Pro (Penton Media), October 31, 1997 [2016-08-19], (原始內容存檔於2016-09-13) 
  2. ^ Scheduling, Thread Context, and IRQL, Microsoft: 6–7, April 26, 2016 [2016-08-19], (原始內容存檔於2016-10-22)