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 下一個中斷。
一般來說,CPU 會服務中斷,但當這時有一個新中斷進來,且 IRQL 比目前高,CPU 會將目前 thread 的狀況存下來,接著服務新中斷。如果進來的中斷,IRQL 小於或等於目前中斷,則此中斷會被 postpone。
由於 PIC 是個很慢的裝置,Windows 使用了 lazy IRQL 這個觀念。當有一個中斷進來時,只在 HAL 中記錄這個狀態,如果下一個中斷 level 比目前低,HAL 才會設定 PIC 的為目前的中斷,然後 postpone 下一個中斷。
留言
張貼留言