IRQL

Windows 將原本 PIC 15 根(APIC 的話則為 256 根)的 IRQ 轉為 IRQL,驅動程式事實上就與 IRQL 打交道。在 x86 系統上,IRQL 值介於 0-31 之間。IRQL field 定義在 DDK 中的 ntddk.h 裡,一個叫定義為 KPCR 的 structure 中。這個 structure 也定義了 hardware 的 IDT(Interrupt Description Table)。

一般來說,CPU 會服務中斷,但當這時有一個新中斷進來,且 IRQL 比目前高,CPU 會將目前 thread 的狀況存下來,接著服務新中斷。如果進來的中斷,IRQL 小於或等於目前中斷,則此中斷會被 postpone。

由於 PIC 是個很慢的裝置,Windows 使用了 lazy IRQL 這個觀念。當有一個中斷進來時,只在 HAL 中記錄這個狀態,如果下一個中斷 level 比目前低,HAL 才會設定 PIC 的為目前的中斷,然後 postpone 下一個中斷。



留言

熱門文章