读书频道 > 系统 > windows > Windows内核原理与实现
6.5.1 设备驱动程序分类
2013-05-20 08:17:04     我来说两句 
收藏    我要投稿   

本文所属图书 > Windows内核原理与实现

本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本...  立即去当当网订购

在Windows I/O系统中,设备驱动程序不仅为操作系统提供了支持各种I/O 设备的能力,也是Windows 内核本身扩展的基础。Windows 可以动态地加载或卸载设备驱动程序,通过这些驱动程序来调整或扩展内核的功能。Windows I/O系统规定了设备驱动程序应遵循的接口,这组接口是通用的,可适用于所有的内核模式驱动程序。设备驱动程序依据其用途不同,可以分为以下三类:

?  即插即用驱动程序,也称为WDM 驱动程序。它们通常是为了驱动硬件设备而由硬件厂商提供,与Windows 的I/O 管理器、即插即用管理器和电源管理器一起工作。Windows 自身携带了大量即插即用驱动程序,用于支持各种常见的存储设备、视频适配器、网络适配器以及输入设备等。

?  内核扩展驱动程序,也称为非即插即用驱动程序。它们扩展内核的功能,或者提供了访问内核模式代码和数据的一种途径。它们并没有集成到即插即用管理器和电源管理器的管理框架中。早期的 Windows NT驱动程序(在引入即插即用管理机制以前)都属于这一类型,现在仍然有大量的内核扩展驱动程序。本书前几章展示的工具都通过这种类型的驱动程序来获得内核中的信息。

?  文件系统驱动程序。它们接收针对文件的 I/O 请求,再进一步将这些请求转变成真正对于存储设备或网络设备的I/O 请求,从而满足客户的原始请求。在6.2.1节我们曾经看到过,文件系统类型的驱动程序被放在对象管理器的\FileSystem 目录下,其他的驱动程序放在\Driver 目录下。表6.2中列出的驱动程序都是文件系统驱动程序。

Windows 驱动程序模型(WDM)在I/O 模型中增加了对即插即用、电源管理和Windows 管理规范(WMI)的支持。而且,遵从WDM 的驱动程序在Windows 平台(包括Windows 98/Windows 2000 以后的所有版本)上至少是源代码兼容的,甚至也可能是二进制兼容的。WDM驱动程序又进一步可以划分成以下三类:

?  总线驱动程序。顾名思义,总线驱动程序管理一个总线设备,它负责检测总线上附载的所有设备,并通知即插即用管理器关于这些设备的情况。总线驱动程序也负责总线的电源管理。

?  功能驱动程序。功能驱动程序管理具体的设备,在一个设备的设备栈中,功能驱动程序创建的设备对象(即FDO)相当于操作系统控制该设备的逻辑接口。功能驱动程序是实际管理该设备的功能模块。

?  过滤驱动程序。在设备栈中,过滤驱动程序位于功能驱动程序之上或之下,它的用途是:监视一个设备的 I/O 请求以及这些请求的处理情况,或者,增加或改变一个设备或另一个驱动程序的行为。例如,病毒扫描工具常常利用过滤驱动程序来监视被读写的文件数据。

在WDM中,总线是指可供其他设备附载的设备,其中既有像 PCI 和SCSI这样的物理总线设备,也有像HAL这样的虚拟总线设备。总线驱动程序负责检测总线上的设备,并且协助即插即用管理器列举这些设备,而且它也控制该总线的物理配置。相反地,功能驱动程序要简单得多,通常只是控制一个设备的硬件而已。

在即插即用管理器列举得到的设备树中,每个设备节点都包含一个设备栈,设备栈中的各个设备对象分别由对应的驱动程序创建和实现。图6.12 显示了不同类型 WDM驱动程序在设备栈中的角色,以及它们之间的关系。

每个设备对象都是由对应的驱动程序创建的,设备的PDO 是由总线驱动程序创建的,而FDO 是由功能驱动程序创建的。在PDO 和FDO 之间,紧挨着 PDO ,可以有零个或多个总线过滤设备对象,它们由相应的总线过滤驱动程序创建。在总线过滤设备对象和FDO 之间,可以有零个或多个下层过滤设备对象。而在FDO 之上,则可以有零个或多个上层过滤设备对象。这些下层或上层过滤设备对象分别由相应的下层或上层过滤驱动程序创建。WDM规定了这样的设备栈结构,既合理地让参与其中的每个驱动程序实现它所负责的那部分功能,也提供了足够的扩展性,允许过滤驱动程序在不同层次上监视或修正一个设备的工作方式。后面 6.5.4 节将介绍过滤驱动程序的加载以及过滤设备对象的创建顺序。

对于一个具体的设备而言,FDO 代表了它对于操作系统的逻辑接口。功能驱动程序往往会创建一个代表相应 PDO 的设备接口(通过 I/O 管理器函数 IoRegisterDeviceInterface),因而应用程序或内核其他部分可以通过此设备接口与该设备打交道。对于一些复杂而又通用的设备,例如磁盘设备和网络适配器等,功能驱动程序又被进一步分成多个独立的驱动程序,由它们联合起来管理该 FDO 的I/O 请求。从这一层意义上,WDM驱动程序对硬件的支持可以进一步划分为类驱动程序(class driver )和端口驱动程序(port driver),以及小端口驱动程序(miniport driver )。类驱动程序实现了某一种类型的设备的I/O 处理。对于已经标准化的设备类型,比如磁盘、网络适配器等,提供一个类驱动程序可以为不同厂商生产的设备实现通用的服务。端口驱动程序实现了与某一类型 I/O 端口相关的 I/O 处理,它们并不遵从驱动程序的接口要求,而只是一些内核模式的辅助例程。小端口驱动程序则实现了驱动某一特定设备而需要的I/O 服务。类驱动程序和小端口驱动程序的分工可以看成是针对一个或一类设备的“通用”和“特殊”的功能部分。类驱动程序实现的是“通用”或“公共”的 I/O 服务,而小端口驱动程序实现的是针对某一特定设备的“特殊”功能部分。在7.3.1 节介绍存储栈结构时,我们将会看到这两种驱动程序的例子,这里不再进一步介绍。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:6.5 设备驱动程序
下一篇:6.5.2 例子驱动程序toaster
相关文章
图文推荐
3.4.4 进程生命期管
3.4.2 Windows应用商
3.4.1 Windows应用商
3.4 进程生命期管理
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站