⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 全面接触usb技术.txt

📁 驱动开发过程中要注意的一些要点以及一些基本资料
💻 TXT
📖 第 1 页 / 共 5 页
字号:


新手上路



回答得分 : 0
贴子数量 : 7
注册日期 : 2002/5/14
在线情况 : 离线
   发表于: 2002/5/26 - 11:43 
引自: http://www.china-pub.com/computers/eMook/1219/info.htm

WDM内核驱动程序模型分析  

  WDM驱动程序是Windows 2000操作系统重要的组成部分,它的正常工作需要有Windows 2000其它内核组件的支持,同时大部分的内核组件也必须同WDM驱动程序交互来完成它们的功能,为能够完整而清晰的说明WDM驱动程序的工作情况,本文首先说明Windows 2000操作系统的内核工作机理,同时将给出WDM驱动程序和内核其它组件的协同工作机制,最后分析WDM驱动程序的结构和工作流程。 

1 Windows 2000内核组件工作模式 

1.1 Windows 2000的设计思想 
  在现代操作系统中,应用程序和操作系统本身是分开的--操作系统代码运行在核心态并有权访问系统数据和硬件;应用程序运行在用户态,能够使用的接口和访问系统数据的权限都受到限制。当用户程序调用系统服务时,处理器捕获该调用,然后把调用的线程切换到核心态。当系统服务完成后,操作系统将线程描述表切换回用户态,允许调用者继续运行。 
系统核心态部分的设计是丰富多样的。较典型的有以下几种: 
A) 传统的单片式操作系统。系统被设计为一个单一的、庞大的软件系统,在内部组件之间有许多关联。这种软件系统依赖于许多系统组件。这种相互关联意味着要扩展系统,就需要对全部代码库进行大量修改。同时在单片式操作系统中大量的操作系统代码运行于同一内存空间,这就意味着任何操作系统组件都可能损坏正在被其它组件使用数据。 
B) 分片式的操作系统。将操作系统发分为不同层次中的模块。每个模块提供一组功能函数其它模块调用。在某一层次上的代码只能调用较低层次上的代码。在一些了系统中,DEC公司的OpenVMS包括老的Multics操作系统,硬件甚至强制分层(使用多重、分级处理模式)。分层操作系统结构的优点是,由于每层代码只能访问较低层的接口(和数据结构),因此限制了使用无限权利的代码数量,这种结构也允许在最底层开始调试操作系统,然后一层一层的往上调试,直到整个操作系统工作正常。层次化结构也使增强操作系统更容易,因为修改或替代单独的一层,不影响系统的其它部分。 
C) 客户服务器微内核模型。其思想是把操作系统分成若干个服务器进程,每个服务器进程完成一种服务,如内存管理服务、进程创建服务和处理器调度服务。每个"服务器"运行在用户态,等待客户提出服务请求。"客户",可以是另一个操作系统的组件,也可以是应用程序,它通过发送一个消息给服务器来请求服务。运行在核心态的操作系统的微内核把该消息传递给服务器,该服务器执行操作,内核用另一种消息把结果返回用户。 
Windows2000融合了分层操作系统和客户服务器微内核操作系统的特点。对性能影响很大的操作系统组件在核心态下运行。在核心态下,组件可以和硬件交互,也可以在组件之间交互,并且不会引起描述表切换和模式转变,例如,内存管理器、高速缓存管理器、对象及安全性管理器网络协议、文件系统(包括网络服务器和重定向程序)、所有线程和进程管理都运行的核心态。 
当然,所有这些组件都应该受到保护,以避免给其它的应用程序侵扰,应用程序不能直接访问操作系统特性部分的代码和数据(尽管他们可以快速调用其它的内核服务)。这种保护使得Windows2000成为既坚固又稳定的应用程序服务器的原因之一。而且从核心操作系统服务的角度,如虚拟内存管理、文件操作、复合文件及打印共享来看,Windows2000作为工作站平台仍是迅速和敏捷的。 
由于WDM驱动程序的标准应用平台是Windows 2000,是内核的重要组件之一并和其它内核组件有相当多的关联,为本文讨论的完整性,首先讨论Windows 2000的系统结构。

1.2 Windows 2000的系统结构 

  Windows 2000是由内核模式和用户模式两类代码构成的。 
  用户态代码模式主要包括各个环境子系统:POSIX,OS/2,Win32。在这三个子系统中Win32比较特殊,它是Windows 2000的必须组件。实际上,其它两个子系统只是在需要时才被配置启动,而Win32必须始终处于运行状态。
内核模式分为以下层次: 
A) 硬件抽象层(HAL) HAL是一薄层软件,它是硬件与操作系统其它部分的接口,是物理硬件资源的一种抽象。我们可以称之为"抽象硬件模型"。HAL通过动态链接库(DLL,Dynamic Link Library)实现,管理的项目包括: 
片外高速缓存 
定时器 
I/O总线 
设备寄存器 
中断控制器 
DMA控制器 
各种系统组件使用HAL函数与CPU外的硬件打交道,这样就把平台特定的细节对系统的其余部分隐藏起来,可移植性极佳。特别地,HAL例程的使用使得内核和设备驱动程序在有相同CPU体系结构的平台上二进制代码兼容。 
B) 内核(Kernel) 内核是整个操作系统的神经中枢,同执行体的其它部分不同,内核的大小从不会溢出内存。尽管执行一个中断服务例程可以中断内核,但内核的执行操作永远不会被其它正在运行的线程抢先。内核始终运行于核心态,其代码短小精悍,可移植性优异。内核主要由C语言编写,对那些需要尽可能快速执行的代码或非常依赖于处理器性能的任务保留用汇编语言编写。它提供管理以下功能的机制: 
中断和异常处理 
线程调度和同步 
多处理机同步 
定时控制 
内核对象 
内核的目标之一是提供一个严格定义的,可预测的操作系统基本要素和机制的低级操作。内核通过执行操作系统机制和避免制定策略而使其自身和执行体的其它部分分开。其主要通过提供两类对象来为其它部分服务: 
调度者对象 负责同步性能并改变或影响线程调度。 
控制对象 这些对象以某种方式控制操作系统的行为。 
例如:设备驱动程序将使用的系统线程属于调度者对象,推迟过程调用、中断对象属于控制对象。 
C) 执行体(Executive) 是完全独立的,只通过很好定义的接口来通讯。 

用户模式包括以下几个部分:
1)系统服务接口 
提供用户模式到内核模式的受控路径。在Win2000中,系统服务调度者使用一种基于CPU硬件异常机制的技术给用户模式代码提供对Executive服务的访问权。 
2)对象管理器 
执行体通过一个基于对象的接口给用户模式进程提供服务。文件、进程、线程、内存段等事物都是对象。对象管理器执行管理执行体对象的所有工作,包括创建和删除对象、维护全局对象名字空间,以及记录对指定对象有多少等待的引用。 
3)配置管理器 
从驱动程序开发者的角度看,配置管理器的主要工作是,使用登记(Registry)数据库,维持安装在机器上的所有硬件和软件资源。 
驱动程序使用Registry作以下工作: 
w 把自己标识为可信任的系统组件 
w 查找和分配外围硬件 
w 建立错误记录日志文件 
w 启用驱动程序性能测量 
4)进程管理器 
进程是Windows2000中资源记录和安全性检查的单位。每个进程都有自己的虚拟地址空间和安全性标识。一个进程中包含一个或多个线程(Thread)。进程管理器处理进程和线程的创建、管理和销毁,它还为同步线程的活动提供一组标准的服务。 
5)安全引用监视器 
该组件强制系统的安全性策略。安全性引用监视器提供一组原语,其它组件可以调用它们来验证对对象的访问,检查用户特权和生成审查消息。驱动程序一般不与它打交道,I/O管理器在调用驱动程序中的任何例程之前处理这类工作。 
6)虚拟内存管理器 
在Windows2000下,每个进程有一个4GB的虚拟地址空间。这个空间的0~2GB是进程的私有代码和数据、堆栈和堆空间。它还含有进程使用的任何文件映射(File Mapping)对象和DLL。2~4GB只包含内核模式代码。虚拟内存管理器的任务之一是,使用按需分页的虚拟内存管理技术来维护地址空间映像。从驱动程序开发者的观点来看,它负责维护系统的堆空间。在DMA操作中,它还为驱动程序构造和操作缓冲区。 
7)局部过程调用(LPC) 
局部过程调用是一个消息传递机制,用于在同一台机器上的进程之间通信。LPC主要由受保护的子系统及其客户程序使用,设备驱动程序对LPC机制没有访问权。 
8)I/O管理器 
执行器组件把I/O请求从用户模式和内核模式线程转换成对各种驱动程序例程的合适顺序的调用。通过使用很好定义的接口,I/O管理器能够以相同的方式与所有驱动程序通信。 
9)PnP管理器 
PnP管理器由两部分组成:核心态PnP管理器和用户态PnP管理器。核心态PnP管理器同操作系统组件和内核驱动程序进行交互来动态的维护、配置、管理设备。用户态PnP管理器和用户安装组件进行交互,来配置和安装设备。用户态PnP管理器同时也和应用程序交互,例如:为一个应用注册一个设备变化通知消息用来在设备状态发生变化时通知应用程序。 
10)Power管理器 
Power管理器负责管理系统的电源使用。它负责维护一个系统范围内的电源策略,并负责Power IRP在系统中传递路径。Power管理器通过以下几点来考虑系统应处于什么状态--浅度睡眠,深度睡眠,关闭,还是正常运作 : 
w 系统当前活动状况 
w 系统电池状态 
w 应用程序的电源请求 
w 用户动作,例如:按下电源启动按钮 
w 控制面板的设置 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -