精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>驱动开发>>Windows NT 设备驱动程序开发基础(3)(转

主题:Windows NT 设备驱动程序开发基础(3)(转
发信人: black()
整理人: wenbobo(2002-12-06 23:11:22), 站内信件

发信人: netplayer (ERASER), 信区: Programming       
标  题:  Windows NT 设备驱动程序开发基础(3)
发信站: BBS 水木清华站 (Sat Oct 30 14:56:43 1999)

1.3 实现细节

  1.3.1 内核代码运行级别

  Windows NT为它的内核模式的代码分配了不同的级别。在同一个CPU上,级别低的过程
可以被任何级别更大的过程中断。级别由低到高排列如下:

  级别名称       运行于该级别的过程

  PASSIVE_LEVEL  DriverEntry, Unload, ShutDown, DispatchXxx。

  APC_LEVEL      在某些特殊情况下,大存储量设备的驱动程序运行于该级别。

  DISPATCH_LEVEL StartIo, AdapterControl, ControllerControl, IoTimer,Dpc。

  DIRQLs         各种中断处理程序。

  表二                
 1.3.2  几个对象

  i)     I/O请求包(IRP)

      I/O管理器每收到一个来自用户的请求就创建一个该结构,并将其作为参数传给驱
动程序的DispatchXxx、StartIo过程。该结构中存放有请求的类型,用户缓冲区的首地
址,用户请求数据的长度等信息。驱动程序处理完这个请求后,也在该结构中添入处理
结果的有关信息,调用IoCompleteRequest将其返回给I/O管理器,用户程序的请求随即
返回。

  ii)     DPC

  当驱动程序中要用到Dpc过程时,需要创建该对象。具体作用请见1.3.3。

  iii) 驱动程序对象(DriverObject)

      该对象在驱动程序被启动时由I/O管理器创建,保存有该程序处理各种请求的过程
入口、该程序所驱动的全部设备对象的链表等。

  iv) 设备对象(DeviceObject)

      每发现一个可以驱动的设备,驱动程序调用IoCreateDevice创建一个该对象。该
对象有一个指针DeviceExtension指向一块由驱动程序定义的结构,其中保存有关此设备
的如端口号,中断向量等全部信息。

  v) 中断对象(Interrupt)

  该对象在驱动程序调用IoConnectInterrupt时创建,存有中断及处理的过程的信息。
当一个中断发生时,I/O管理器用它寻找对应的处理过程。


  1.3.3  推迟过程调用(Deferred Procedure Call)

  由于中断处理过程运行于较高的DIRQL级,它们能屏蔽许多级别小于或等于它们的过程
的执行,如果它们占用CPU时间过长,很容易使系统性能下降。因此中断处理过程应将一
些不是很紧急的任务放在被称为Dpc的过程中,在完成数据传输等紧急任务后将一个DPC
对象放在系统DPC队列的末尾,然后退出,尽量早地让出CPU。系统将在完成所有DIRQL级
的任务后处理DPC队列,在DISPATCH_LEVEL执行每一个DPC 对象指定的Dpc过程,完成中
处理断过程未尽的任务。                                     

--
m4m※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.176.132]m

--
-------------------------------------------------------------------------------
孤客一身千里外,未知归日是何年
Email : [email protected]

※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.103.173.20]

[关闭][返回]