作者: JIURL
邮箱: thejiurl@gmail.com
主页: http://jiurl.blogsome.com/
http://jiurl.yeah.net/
$ 前言
这篇文章应该写于 2005年4月13日,是写给自己备忘的研究文档,本来是根本没有打算放出来的。
$ DPC
deferred procedure call (DPC) 延迟过程调用
dpc 主要是为了减少处于高 IRQL 的硬件中断处理的时间。
由于低 IRQL 的硬件中断不能中断 高 IRQL 的硬件中断处理。
而可能有些硬件的中断处理代码量比较大,花的时间比较多,会造成其他硬件中断的响应会等的时间比较长。
很有可能就是因为 时钟中断处理,非常非常频繁,代码量也比较多,可能会比较大的影响到其他硬件中断的响应,至于硬件中断响应比较慢可能会对不同的硬件造成什么结果,有待研究。
$ DPC 队列
整个系统只有一个 DPC 队列,至少对单cpu的系统是如此,对于多cpu系统有可能是一个cpu一个,有待验证。
这个队列是个 LIST_ENTRY 链表。
链表头在 pcr 的 +800 struct _LIST_ENTRY DpcListHead。
链的深度在 pcr 的 +808 uint32 DpcQueueDepth。
所有的 dpc 都链在这个链上。
链上的每项是个 KDPC 结构。
struc