Windows2000下即插即用的实现

时间:2020-12-26 04:11:50

本文是我的同学杨钊(西安电子科技大学软件学院)写的操作系统课程的论文,据他介绍,目前在网上几乎没有介绍即插即用的原理方面的资料。他这个论文是参考MS的一个文档写的,希望对读者有用。

PnP(Plug and Play,即插即用)是指用户不必干预计算机的各个外围设备对系统资源的分配,而将这一繁杂的工作交给系统,由系统自身去解决底层硬件资源。对用户而言,只要将外围设备“插上”就能使用,不需要具备任何专业计算机知识。 PnP最早是由Microsoft联合Intel以及其它许多硬件制造商一道,共同开发出来的,最早推出时主要用于EISA和MCA总线。但是由于各种原因,上述两种总线技术都没有获得人们的普遍认可。直到1995年,Windows 95操作系统和各种流行配件才开始对即插即用技术提供支持,即插即用技术才得以进入主流市场。最初它也被戏称为Plug and Pray (即插即祈祷)这说明它最初的工作情况并不令人满意,但经过多年的完善,今天的用户几乎认为即插即用是理所当然的事情了。 近期,UPnP规格说明书已经被ISO技术委员会通过,这意味着著名的plug-and-play结构将成为国际标准。       以Windows2000为例详细的介绍PnP技术的实现原理及其他细节。

    首先,应当看以下在没有PnP支持时,安装一个新的硬件需要做些什么。

   Windows2000下即插即用的实现

大体上,当一个硬件能被系统使用时,首先应当提供给系统一系列接口来供系统决定如何使用设备,就需要决定如下资源的分配为题,包括IRQ(中断请求 Interupt ReQuest:当电脑内的周边硬件需要处理器去执行某些工作时,该硬件就会发出一个硬件信号,通知处理器工作,即IRQ)I/O端口地址:主要指小型机周边各种接口,诸如RS232端口(串行端口)、并口,USB口、光纤通道接口等。DMA(直接内存读写)和内存空间等的分配问题。这些资源,对于同一台计算机来说,都应当是唯一的,不然就会发生各种冲突。     而对于支持PnP的系统架构具体是这样的: Windows2000下即插即用的实现  从上图可以很清楚的看出,PnP技术的应用并不是无条件的,单靠操作系统也并不能真的实现即插即用。为了实现一般硬件的即插即用,需要即插即用的标准BIOS,操作系统,设备以及设备驱动才能够实现,任何一部分都关系着整个体系结构。所以,新的windows2000系统和设备提供商,共同提供了一些于过去不同的特性以满足即插即用技术的需要。 (一)           最下层为硬件抽象层,在硬件抽象层下,对于普通的硬件体系结构来说,就是各种接口,即驱动程序和资源等。必须实现分配好才行。对于很多不支持即插即用的系统来说,需要配置设备的配置文件,需要了解系统当前的资源分配,从而决定新增添的硬件所使用的资源。这样一个硬件才能够正常的工作。而对于新的PnP体系结构,采用了新的技术来保证所有的资源调度可以在无人干涉的情况下完成。对于Windows98之前的系统,通常是基于高级电源管理(APM)或者即插即用BIOS,其效果并不理想。而对于Windows2000,Windows 98/Me及以后的系统对即插即用的支持就比较成熟,都采用了ACPI(Advanced Configuration and Power Interface)规范作为即插即用方案的实现基础。ACPI规范定义了一套新的接口和电源管理特性,其中定义的方法与实际的操作系统和CPU无关。它定义了一套寄存器级别的接口来实现PnP和电源管理功能并为硬件的特性定义了一套描述性接口。a)    对于驱动程序来说,由于PnP被集成进Windows2000的代码中,这使得支持即插即用的驱动程序和之前有些不同:b)    总线驱动不在属于硬件抽象层(HAL),这样它才能动态的和已有的系统配合起来。c)    设备的安装和配置采用了新的方法。d)    当设备发生改变时,变化将被写入注册表。同样需要读取的时候也是从注册表读取,这样做可以保证兼容性。 可以发现,在系统构成中,软件控制所占的比例正在增加,更多的设备将采用新的控制方法和技术来保证它在安装后不是面对冷冰冰完全没有任何“思想”的硬件部分。 (二)           硬件层之上为驱动部分,其中关键部分是WDM接口部分。对硬件的识别,可以说是很大程度上依靠这一部分完成。WDM, 即Microsoft Win32® Driver Model ,能够为操作系统支持一些新的功能和控制功能。WDM接口是PnP实现中一个重要的组成部分,它I/O系统提供给驱动的一个体系结构,它具有以下这些特性。1.   WDM将驱动分为几种类型a)    总线驱动,控制总线控制器,适配器,桥或拥有子设备的任何其他设备。总线驱动需要由微软提供的驱动,在一个系统上,每种总线都有一个总线驱动。b)    功能驱动是主要的设备驱动并为其设备提供可操作的接口。此驱动是必须的。在这种驱动中一般有两个部分,一是由微软(通常是微软)给出一种驱动类来提供此类所有设备所需要的功能,和一个通常由设备销售商编写的迷你驱动,来提供设备的特定功能。即插即用管理器为每个数据读取一个功能驱动。c)    过滤器驱动。它将对总线,设备或驱动的类的I/O请求进行拣选。过滤器驱动是可选的,同时它可以有任何数量个,在功能驱动之上(或之下)而在总线驱动之上。通常,过滤驱动程序由系统OEM或独立硬件销售商提供。 大多数情况下,底层过滤器驱动会修改设备硬件的行为。比如说,一个底层的典型鼠标设备过滤器驱动可以提供加速功能,从而产生非线性的鼠标移动数据。而高层的过滤驱动通常为设备提供附加的特性。比如,键盘的高层设备过滤驱动可以强制进行附加安全检查。2.     WMD驱动层的构成对一个给定的设备,有两个或更多驱动层:一个下层I/O总线的驱动和一个设备的功能驱动。也可能会为总线或设备提供一个或更多过滤驱动。3.     WDM的设备对象一个驱动会为它控制的每个设备创建一个设备对象;设备对象对于驱动来说就代表着设备本身。从PnP角度来讲,有三种设备目标:物理设备对象,功能性设备对象,以及过滤器设备对象。 有了这些特性,就能够使windows系统即使在面对一个陌生的设备时,只要它的设备驱动符合WDM的标准,就可快速的被识别出设备的基本功能和作用,再由额外的驱动程式提供设备特定的功能。这有些像类的派生。 (三)           存在一个对资源调度分配起关键作用的组件,即插即用管理器。即插即用管理器分为两部分,核心态下和拥护态下。核心态下的即插即用管理器主要维护核心控制指挥总线驱动来实现枚举和配置设备并指挥设备驱动添加一个设备,启动一个设备等等。比如说,即插即用管理器可以发出请求来决定设备是否能够被安全的暂停或移除并给设备驱动机会来同步突出的I/O请求。它和用户态下的即插即用管理器副本协同工作来实现设备的暂停或移除。用户态下的即插即用管理器则不同,它主要管理硬件事件和设备的枚举。Windows2000用户态下控制和配置即插即用环境的API事实上是基于Windows95的配置管理器API的32位扩展版本。它提供一些API以供用来管理自定义硬件时间和创建新的硬件事件。它维护一个设备树,在设备管理器中可见,其中包含着系统中激活的设备和这些设备的信息。即插即用管理器在设备添加或移除或资源重新分配时更新设备树。设备树是继承形式的,总线上的设备就表现为总线适配器或控制器的孩子,注册表是核心的静态硬件信息存储库。即插即用系统组件和驱动在注册表中构造,维护和访问新的或已有的子树。下面的图片展示了一个假设的ACPI系统的即插即用设备树。Windows2000下即插即用的实现  图中局域网适配器和USB主控制器被插入一个PCI总线。一个USB集线器插入了USB主控制器的一个接口。从即插即用的角度来讲,PCI总线控制器,USB主控制器和USB集线器都是总线设备,因为他们每一个又提供了端口,而LAN适配器就不是。注意到图中的FDO和PDO,即之前提到的Functional Device Object功能设备对象以及Physical Device Object 物理设备对象。 (一)           最上层的系统,提供了更新的特征自动并动态的识别安装的硬件。包括了初始系统安装,在系统启动时识别即插即用硬件发生的变化,并且响应实时硬件事件,比如插入或拔除设备。硬件资源的分配或重新分配。即插即用设备需要的资源不再像以往那样自行分配,而是在被系统枚举的时候被识别,由Plug and Play Manager统一管理,和分配,如I/O端口,IRQ,DMA通道以及内存分配等。同时即插即用管理器也会在需要的时候重新分配资源。加载合适的驱动。由即插即用管理器来自动选择加载合适的驱动。一套PnP的驱动接口。接口包括基本I/O路由,PnP I/O需求包(IRP),驱动入口点和注册表信息。交互的电源管理。PnP和电源管理的一个关键特性就是动态的事件处理。使用基于WDM的函数的PnP和电源管理都能够响应动态事件。注册设备通知事件。PnP允许用户态下注册或获得特定PnP事件。 对于具备了这样特性的操作系统来说,硬件的安装和识别更像是软件的安装。尤其是动态事件的注册。使得在对于处于上层的操作系统来说,已经没有很明确的界限。   一、      结束语总体来说,即插即用技术虽然看上去比较复杂,但是其中核心的思想是将更多的工作交给软件完成,使用统一的体系结构,通过一些冗余信息,让系统自己知道新添加的设备应该如何配置。关键的技术在于标准的设备驱动程序类,以及资源的动态管理技术。原先基本为硬件组成的总线-设备结构,现在更多的掺入了软件的干预,将人工的硬件资源配置过程按照某种标准统一化,从而交由计算机软件来完成硬件的识别和资源的动态调配。这样就弱化了人在硬件配置中的作用,实现了硬件识别和安装的智能化。         二、      参考文献Microsoft 《Operating System -- Plug and Play for Windows 2000 White Paper》 另 自google搜索结果摘抄部分定义及翻译