Microsoft windows internals 學習筆記(2)

x86中斷控制器:

絕大多數x86系統依賴於i8295A可編程中斷控制器(PIC)或者i82489高級可編程中斷控制器(APIC)的一個變種。

x64中斷控制器:

x64體系結構依賴於改進的高級可編程中斷控制器(SAPIC),與APIC重要的區別是:APIC系統上的I/O APIC利用一條私有的APIC總線將中斷提交給本地Apic,而SAPIC中這些中斷通過I/O,和系統總線進行快速的提交,另一個區別是:APIC中,中斷轉送和負載均衡是由APIC總線處理的,SAPIC沒有總線,所以被編入到固件中。

 

用!apic查看IAPIC的配置情況:

lkd> !apic
Apic @ fffe0000 ID:1 (80050010) LogDesc:02000000 DestFmt:ffffffff TPR 41
TimeCnt: 0bebe910clk SpurVec:1f FaultVec:e3 error:0
Ipi Cmd: 000008e1 Vec:E1 FixedDel Lg:01000000      edg high            
Timer..: 000300fd Vec:FD FixedDel    Dest=Self      edg high       masked
Linti0.: 0001001f Vec:1F FixedDel    Dest=Self      edg high       masked
Linti1.: 000004ff Vec:FF NMI         Dest=Self      edg high            
TMR: 63, 73, 83, B1, B4
IRR:
ISR:

!ioapic顯示I/O APIC(連接至設備的中斷控制器部件)

IRQl(中斷請求級別):

雖然中斷控制器實現了一層中斷優先級,但windows使用自己的中斷優先方案,稱爲IRQL(interrupt repuest level)

在一個稱爲處理控制區(PCR ,process control region)的數據結構以及他的擴展結構PRCB(processor control block ,處理控制塊)中有一個稱爲IRQL的域。包含了系統每個處理器的狀態信息。

lkd> !pcr
KPCR for Processor 0 at ffdff000:
    Major 1 Minor 1
NtTib.ExceptionList: ffffffff
     NtTib.StackBase: 805514f0
    NtTib.StackLimit: 8054e700
NtTib.SubSystemTib: 00000000
       NtTib.Version: 00000000
   NtTib.UserPointer: 00000000
       NtTib.SelfTib: 00000000

             SelfPcr: ffdff000
                Prcb: ffdff120
                Irql: 00000000
                 IRR: 00000000
                 IDR: ffffffff
       InterruptMode: 00000000
                 IDT: 8003f400
                 GDT: 8003f000
                 TSS: 80042000

       CurrentThread: 8055be40
          NextThread: 00000000
          IdleThread: 8055be40

           DpcQueue:
這是pcr的結構。

不使用延遲IRQL的系統上,windows並沒有維護IRQL域,大多數爲零。

在用戶模式下總是被動級別的。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章