Windows Internals (系统机制p85 p96) 2009618

今天看的是陷阱机制。。心得:

1. 中断是一个异步事件。。而异常是同步事件。

2. 硬件和软件都可以产生中断和异常。特殊的是软件产生中断 主要是APC和DPC机制。。以及线程调度分配机制。

3. 当产生一个中断时:系统会在当前执行的线程的内核栈中建立一个 陷阱帧。其中包含了当前恢复当前线程继续执行的所有的信息。如果是在用户态进行。会切换到内核态。这样就可以恢复执行。就像什么都没有发生过一样。 参看陷阱帧的命令: dt  nt!ktrap_frame.

4. 当一个设备中断产生时,内核的陷阱处理器会把中断请求发送给相应驱动程序的中断服务例程(ISR)。如果中断是系统服务调用。 那么陷阱处理器会转到执行体中相应的函数。

5. 硬件是如何向处理器通知中断的?

CPU取得中断号。然后把这个中断号作为索引在IDT中找到对应的ISR。然后执行。windows的硬件体系支持256个中断号。但是最终的个数是由中断控制器来决定的。

6. 可编程中断控制器 (APIC)可以在多处理器上工作。

7. windows的中断优先级(IRQL)

1) 在X86系统上 IRQL 从0-31 ,数字越大,优先级越高。 高IRQL的中断可以打断低IRQL的中断。

2)每个处理器在PRCB区域都有IRQL值,标识当前处理器的中断优先级。

3)在内核中可以使用 KeRaiseIrql 和KeLowerIrql来提高或减低优先级。

4) 延迟IRQL 还没明白

5)当处理器运行在用户模式的时,处理器的Irql总是最低的级别.这样可以接受任何中断。

6)IRQL与中断号的映射 (也就是解决哪些设备工作在哪个IRQL上。)

首先是总线型驱动程序(PCI USB)确定将该总线的设备报告给PNP(即插即用管理器),PNP确定为每个设备分配哪个中断。然后调用Hal中的 KeGetSystemInfoVector。该函数将中断映射到对应的IRQL。

IRQL图示:

 

原文地址:https://www.cnblogs.com/herso/p/1506221.html