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域,大多数为零。

在用户模式下总是被动级别的。

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