IRQL
外觀
IRQL是Interrupt Request Level的縮寫,即中斷請求級別。是Windows操作系統使用的處理器中斷級別。
簡介
[編輯]Windows操作系統運行的處理器架構中,硬件產生信號發給可編程中斷控制器. 中斷控制器發送中斷請求 (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 | 最高中斷層 |
API
[編輯]內核函數KeGetCurrentIRQL取得處理器當前的IRQL。
參見
[編輯]參考文獻
[編輯]- ^ Russinovich, Mark, Inside NT's Interrupt Handling, Windows IT Pro (Penton Media), October 31, 1997 [2016-08-19], (原始內容存檔於2016-09-13)
- ^ Scheduling, Thread Context, and IRQL, Microsoft: 6–7, April 26, 2016 [2016-08-19], (原始內容存檔於2016-10-22)