即插即用可以帮助我们发现系统中的硬件组件,而无需物理配置或用户干预来解决资源冲突。
但我想知道:为了使即插即用功能能够工作,对硬件和/或软件是否有特殊要求?以 USB 为例;为了使用标准 Microsoft 驱动程序,对 USB 记忆棒或 USB 磁盘是否有任何要求?
答案1
“即插即用”是 Windows 特有的术语,最初是指 ISA 和 PCI 设备允许操作系统选择其所消耗的资源的方法。BIOS 也可以为 DOS 执行此操作,或者让 Windows 完全执行此操作。
资源包括 A) 内存地址、B) I/O 地址、C) IRQ 和/或 D) DMA 通道。设备可以使用其中的每一个、几个或全部与 CPU 进行通信。
因此,最初的“即插即用”驱动程序是一种能够了解如何初始化设备的驱动程序,即将其配置为占用其他设备未使用的资源。
即插即用的另一个重要部分是设备识别自身的标准方法,PCI(可能还有 ISAPNP)规定每个设备都有唯一的供应商和设备 ID。这延续到了 USB。因此主机操作系统可以找出“什么”设备并加载正确的驱动程序。
现在,当我们讨论设计为“热插拔”的设备时,情况会略有不同,但显然“即插即用”一词仍用于描述它。大多数热插拔设备由非热插拔设备“托管”。USB 设备由 USB 控制器“托管”,而 USB 控制器本身就是一个 PCI 设备,消耗通常通过即插即用分配的一个或多个资源。通过 USB 总线与设备通信需要“通过”USB 控制器。SCSI、IDE 和 SATA 设备也存在类似的情况。
因此,要使热插拔功能发挥作用,“主机”控制器的驱动程序需要一种机制来告诉代表其“上层”设备的驱动程序正在发生什么,即 USB 控制器驱动程序需要一种方法来告诉 USB 大容量存储驱动程序该设备已断开连接。“上层”驱动程序需要有代码,当被要求移除时,它可以干净地终止,而不是期望一直驻留直到重新启动。
大多数总线类型(例如 USB、SCSI、SATA)都受驱动程序必须识别和实施的标准的管辖。
在硬件层面,大多数热插拔设备的设计都考虑到了连接器的一部分会释放静电,并且传输电源的引脚比传输数据的引脚早几分之一秒连接。仔细查看 USB 和 SATA 连接器引脚;这就是为什么有些引脚比其他的更长。IDE 连接器不会这样做,因此热插拔并不安全。
答案2
据我所知,整个即插即用的“魔法”只有两个基本的核心部分:
- 该软件必须能够识别已连接的某些新硬件(例如 USB 标准的一部分)。
- 可以识别硬件。使用特殊请求(不使用供应商特定驱动程序)可以检索唯一 ID(通常由供应商 ID 和设备/硬件 ID 组成)。操作系统可以使用这些来识别特定硬件并安装正确的驱动程序,而无需先询问用户。
- (可选:)理想情况下,硬件和软件(驱动程序)应该无需重新启动即可工作。
要使用提供的标准驱动程序,硬件必须对发送的命令做出正确的反应(即硬件必须使用正确的“语言”)。根据硬件的类型,这通常已经标准化(例如USB 大容量存储设备)。