“即插即用”想用就用

硬件周刊

  前言:相信大家对“即插即用”这个词并不陌生,但对于它背后的知识不知道大家了解多少?今天我们就来探讨一下这个问题。

  何为“即插即用”

  如果你是一位电脑老虾,曾经使用过Windows95以前的老操作系统,或许对添加、更换电脑配件遇到的“麻烦”深有感触──在安装新的硬件时,往往需要考虑到该设备所使用的I/O端口和IRQ资源,需要根据不同的设备手工对IRQ和I/O端口进行分配,以避免设备之间因竞争而出现冲突,甚至有时往往为解决硬件冲突问题逐个调整IRQ资源分配。即使到了现在,大家也会发现,尽管硬件设备的安装变得比较容易,但有时还会出现硬件安装后无法使用的情况。为什么会出现这样的情况呢?有哪些因素在影响我们硬件的安装呢?

  微软公司在研发Windows95时,为解决用户因调整周边硬件设定造成的困扰而引入了“即插即用(Plug-and-Play ,简称PnP)”。这是一项用于自动处理电脑硬件设备安装的工业标准,系统自动配置电脑中的适配器和其他设备,然后告诉系统对应的设备都做了什么。专业地说,PnP能自动将I/O 地址、IRQ等系统资源分配给硬件设备,在每个设备和它的驱动程序之间建立通信信道,由系统自身去解决底层硬件资源,不再需要用户调整主板、板卡上的IRQ、I/O地址等设置值。BIOS或操作系统会自动根据相关的注册信息对系统资源进行配置,如此一来便可避免因设置不当而引起的资源冲突。目前的操作系统、硬件均支持即插即用功能。

  在“即插即用”系统中,新硬件安装后首先自动搜索驱动

  提示:

  (1)IRQ,英文全称为Interrupt ReQuest,中文意思为“中断”。中断是电脑的核心部分和外围设备通讯的一个重要的接口,“中断”的意思就是无论核心部分在做什么,都要停下来处理,立即执行一段专为这个外围设备编写的程序,执行完以后,才恢复刚才所做的工作。

  举个例子来说,比如我们每按一下键盘,就产生一个键盘中断,CPU就要停下正在运行的工作来处理,记录下来哪个键被按下了。如果按下这个键要对应某一个操作,就赶快先做这个操作,做完之后,才恢复刚才的工作。比方说接在串口上的Modem也是一样,从电话线上传来数据了,串口就会产生一个中断,CPU就要停下来,先将数据收下来,放到一个地方。你能够一边写文章,一边从网上下载数据,就全靠中断的正常工作。如果键盘和Modem的中断有冲突,也就是键盘和Modem共同使用了一个中断,电脑就无法判断刚刚到达的数据是来自键盘还是来自Modem,就有可能将Modem收来的数据当作是你从键盘上输入的,而往你正在写的文章中输入一大堆乱字符。显卡的中断如果和IDE硬盘控制器的中断冲突了,那么机器可能就无法正常启动了。

  所以,要想电脑正常工作,必须把中断合理分配给外围设备,让它们没有冲突。现在大多数电脑都有16个硬中断,从中断0到中断15,其中大部分已经被系统隐含分配了。

  (2)I/O,英文全称为“Input/Output”,中文意思就是输入/输出端口,电脑外设与主机(CPU和内存)进行通信时,是通过接口来进行的,这个接口就叫做端口。每个端口赋与一个端口号称为地址,每一个端口都包含一组寄存器。在电脑内部一共有1024个地址,每一个与CPU通信的外设都有不同的I/O地址。

  如何实现即插即用

  那么电脑系统是如何实现“即插即用”功能呢?要实现即插即用功能仅有操作系统支持还不行,它还需要硬件及驱动程序的支持。

  1.主板、硬件支持是基础

  在主板支持方面,主要是需要BIOS支持即插即用功能。众所周知,电脑在启动时第一步就是由系统BIOS的启动代码进行POST(Power-On Self Test,加电后自检),POST的主要任务是检测系统中一些关键设备是否存在以及能否正常工作,例如内存和显卡等设备。如果硬件一切正常,POST结束之后就会调用硬件的代码逐步对硬件进行初始化……预先将各设备的ID号,参数存入到主板的BIOS中(注:针对不同的硬件,厂商都制定了不同的ID号,俗称“硬件身份证”,这有点像为各家各户装好一个门牌号,以方便他人来寻找)。而主板支持即插即用功能很大程度就是通过预先设置的不同硬件参数来为设备分配资源。

  在初始化过程中BIOS就会自动识别主板(包括总线类型)上的设备以及外部设备(如磁盘驱动器、键盘、视频显示和其他适配卡),根据预存的设备参数按部就班地加载设备,然后决定每一设备的资源(IRQ、DMA、I/O和存储器地址)要求。可以说,系统BIOS决定哪些设备为固定资源要求的传统设备,哪些是可以再配置资源要求的即插即用设备。

  2.操作系统、驱动程序一样也不能少

  通过BIOS检索后,下一步操作系统就会根据即插即用设备的实际情况,对传统设备占用之后的剩余资源进行分配。其中PC系统中的内存、I/O这两部分资源由PnP功能配置。操作系统的PnP功能分配 I/O 地址主要有两步:首先操作系统向该主板BIOS读取编排后的PnP设备的相关设定参数,如I/O 地址等(适配器的寄存器地址中一个),然后将这些配置好的I/O地址等相息反馈给设备驱动程序。此时操作系统就会在注册数据库中为这一配置创建一个最终系统配置并分配存储资源。

  以Windows2000为例,如果检测到有新添设备,Windows2000就会先搜索\WINDOWS\SYSTEM目录来寻找设备所需的驱动程序。如果设备驱动程序丢失,一个对话框出现,要求在驱动器中插入生产商提供的驱动程序软件,Windows 2000将该驱动程序加载到存储器中并调用即插即用管理器(PnP Manager)对相关参数相对匹配调试……在这期间系统会对驱动程序的子程序进行许多简短地调用,过程中的每一步均由系统来决定你的驱动需要做哪些事情,将它们初始化、处理中断等,直到完成设备驱动的配置、加载。驱动配置需要和BIOS中各硬件参数相对应,因为在电脑中驱动程序必须知道各硬件接口的地址,并且硬件必须设置为相同的地址,当然这些地址应是适配卡寄存器地址中的一个。

  可以在设备管理器中查看各硬件设备的IRQ

  因此,“即插即用”的工作原理就有点对号入座的味道,事先为各类硬件发一张身份证,然后系统根据不同硬件的身份证号分配系统中的IRQ、I/O等资源,并自动搜索、加载硬件的驱动程序。而在Windows 95以前,我们往往需要通过手动将系统中的IRQ、I/O等资源分配给各硬件,增加或减少某一适配卡往往都需要重新调整系统资源。可以说,即插即用功能大大降低了用户安装硬件、驱动程序的难度,让电脑应用更具人性化。

  PnP并非完全“想用就用”

  现在的Windows操作系统已经运用即插即用技术,硬件也均支持“即插即用”的功能,这都大大简化了用户的操作。不过这种“即插即用”技术也有它的弱点,那就是如果不能认出要安装的新设备,那么自动分配中断时就会产生冲突。我们日常所用的硬件对于IRQ的设置也不尽相同,所以在安装新硬件的时候,系统往往并不能自动检测正确的IRQ来分配给所用的硬件,这就会造成新硬件或旧硬件出现不能正常工作的现象。之所以出现这种情况,主要是由下面两种情况造成的:

  第一,因为系统可分配的IRQ、I/O等资源相当有限,而这些资源的分配必须把设备驱动程序和它们控制的硬件联系起来。假如只有少数几种设备并且设备都使用标准的资源,把驱动程序和设备联系在一起没什么问题。每个设备有一个固定的资源并且不与机器中的其他设备冲突,没有两个设备使用相同的I/O地址、IRQ等,厂商在编写驱动程序时把这些资源写进去即可。这样事情就简单了。

  但实际情况不是这样,随着电脑设备的增多,目前仅有的16个IRQ资源已经无法满足应用的需要,不少设备往往需要共享一个IRQ资源(这里的共享其实不是完全共享的意思,两个设备虽然共享一个IRQ时,其实是不可以同时使用的)。比如许多主板上有1个AGP插槽、5个PCI插槽,而其中的AGP插槽一般是和一个PCI插槽共享一个中断的,也就是这两个槽的中断号是相同的。当你在AGP槽上插了显示卡,如果你还在同中断的PCI槽上插了一块声卡的话,很容易产生中断冲突(特别是某些设备要求自身独享中断)。

  对不少5个PCI插槽的主板而言,第1和第5插槽是和AGP槽共享中断的(靠近AGP槽为PCI1,从近到远依次为PCI1~PCI5),第4插槽是和USB共享中断的,虽然可以在BIOS设置中强制给每个PCI槽位分配中断,但这对于大多数用户来说都是一个比较困难的事情。由于第2和第3插槽没有和其他设备共享中断,所以,在大多数情况下,显卡插在AGP槽上,声卡和其他PCI插卡(比如网卡),应该插在第2和第3PCI插槽上,这样一般都不用改变BIOS中的PnP设置,就能让这些卡正常工作。(编注:对于PCI槽的IRQ分配,不同的主板可能会不同,大家可以查看自己的主板说明书)

  第二,就是IRQ、I/O地址资源分配出现混乱。例如一个人可能想使用几个不同的磁盘驱动器,几个串口等等,因此,此时设备的搭配使用必须有一定的灵活性,可以把它们设置为自动选择地址、IRQ等等来避开资源冲突。但现在新的硬件产品层出不穷,各种产品又相互兼容,功能类似,这就导致了操作系统常常不能正确检测出新设备。而系统自动将该硬件的IRQ分配给了其他与此IRQ相同的硬件上,从而使硬件不能正常工作──这也叫资源分配错误,通俗地说就是“硬件不能对号入座”。

  正常情况下,资源分配如果正确,就可以在硬件和它们的驱动程序之间建立通信信道。例如,一个特定的I/O地址范围分配给一个设备驱动程序和一块硬件,那么就可在它们之间建立通信信道,驱动程序就可以向设备传送命令和信息。但如果驱动程序对从只读设备寄存器反馈的信息不能正确判断的话(注:往往是由于BIOS版本太旧所造成),这时就会出现通信配置混乱的情况。比如在正常情况下系统根据反馈回来的硬件参数应该在配置文件中配备IRQ4,可设备实际使用的是 IRQ5。一般如果遇到这种情况,只要将新旧两个硬件的IRQ配置手动调开就可以解决了。

  手动配置IRQ时,最好检查有无保留中断(IRQ),不要让其他设备使用该中断号,以免引起新的中断冲突,造成系统死机。此外,如果你的主板型号较老的话,我们可能通过刷新主板BIOS来更新各类适配器的设置信息数据库来解决。(注:PC设备生产厂商在推出新的硬件产品之前都会先为PnP设置信息数据库提供更新数据,Intel也在继续维护和提供最新版的数据库)

  大家可以使用操作系统的设备管理器(“查看”方式选择“依类型排序资源”)来查看IRQ的占用情况:系统占用IRQ的信息就被显示在右侧窗格中,包括IRQ号以及占用它的设备名称。

  系统IRQ使用情况

  与此相似,单击“硬件资源”目录下的“冲突/共享” ,就可以显示出系统中发生冲突或被多个设备共享的IRQ号。

  结语

  可以说,微软的“即插即用”创意确实为大家带来了不少便利,大大缩短了电脑与我们距离。不过,有了PnP并非完全达到想用就用的程度,有时硬件冲突仍然存在,不过我们了解“即插即用”的特点后,解决问题也会容易一些。值得一提的是,微软在推出WidnowsXP之时加入了UPnP(Universal Plug and Play,通用即插即用)的功能,UPnP在原PnP基础之上进行了扩展。通过UpnP技术,设备可以动态加入到网络中并获得 IP 地址、传达功能以及了解其他设备的存在和性能。所有这一切都是自动进行的,从而使得零配置的网络真正成为可能,将即插即用引入了一个全新的应用时代……