Windows 7驱开发系列(二)--用户模式与内核模式

    在第二篇就要介绍一下WINDOWS 平台的驱动中最为重要的两个概念内核模式与用户模式,咱们首先来看这张图:

   咱们先来说说这几层,首先最底层当然是硬件,上面是硬件的抽象层,与硬件抽象层直接对话的是操作系统的内核,文件系统和其它的内核模式下的DRIVER可以通过调用内核封装好的API(EXPORTED DRIVER SUPPORT ROUTINES)来与系统内核通信。

   再往上就是USER MODE运行的空间了,这幅图上面画的已经很清楚了,用户模式的DRIVER与WIN32API是调用的关系,也就是从某种意义上说用户模式的DRIVER其实就是一个应用程序。但是真正的用户驱动程序不与用户模式的DRIVER直接对话也是通过WIN32API来进行通信的。

   我们总结一下内核模式与用户模式的最大不同就是一个是基于WIN32API的,一个是基于系统内核调用的,他们所调用的函数接口不同,工人方式不同,所用数据结构也不一样。但是有一点是一样的,用户的应用程序不与驱动直接对话,而是统一调用WIN32API.

   那么内核模式与用户模式先天的不同就使他们在装载时间上不一样,很明显内核驱动会装载更早,运行效率也不一样,内核模式的驱动一般效率更高。

    那么如何来确定你的驱动的模式呢。这里我们先说一个特列,打印机的驱动,一般来说打印机的驱动程序会有两部分,一部分是用户与打印机的接口这部分一般是是内核模式的而渲梁部分则是调用WIN32API来进行的所以渲染部分大多运行在用户模式。

   而内核模式由他的特点我们可以知道他一般来说用来实现这样几种类型的驱动程序

一 主要以文件系统驱动为的高层硬件程

    NTFS

    File allocation table (FAT)

   CD-ROM file system (CDFS)

大部分U盘或者可移动的CD,CDW都是属于这个范围的。

二 还有就是中间层硬件中的比如IO口或者其它总线操作外设的驱动,例如需要通过IO总线控制外设的功能型驱动。

三就是底层的硬件,比如直接控制设备的驱动,注意这一层的驱动就不会再依赖于更底层的驱动了。在这一层的驱动大多是内核驱动。

总之有几大原则一般来说直接操作IO的,需要处理中断的,使用DMA,或者是有严格的时钟要求的都是内核模式的驱动。其余的驱动是用户模式的驱动。还有一个点要强调的是USB的问题,按照上面的原则USB口(包括HOST)是内核驱动,但是USB设备是用户模式的驱动(不需要操作IO,不需要处理中断,也没有使用DMA)。

posted @ 2010-10-03 19:48  javawebsoa  Views(428)  Comments(0Edit  收藏  举报