Windows NT 设备驱动程序开发基础(3)

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 kingzeus 的 blog

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过程,完成中 
处理断过程未尽的任务。 
  
-- 

本文关键:设备驱动程序
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top