Windows的I/O系统由5个部分组成:I/O管理器、即插即用管理器、电源管理器、WMI例程,以及设备驱动程序。图6.4显示了Windows操作系统中的I/O系统结构。其中I/O管理器是整个I/O系统的核心,它定义了一个非常通用的框架,允许各种功能的设备驱动程序容纳于其中。WRK包含有I/O管理器的绝大部分代码,位于base\ntos\io\iomgr目录下。

如何查看win架构 win10系统架构_WMI

I/O管理器除了支持与设备相关的驱动程序以外,它也允许与设备无关的驱动程序加入到内核中。这一类驱动程序并不操纵任何硬件设备,它们进入到内核中以后,将变成内核的一部分,一旦经过I/O管理器的初始化,便于内核融为一体。因此,设备驱动程序也是内核扩展的一种形式。

Windows设备驱动程序可以直接访问硬件,或者通过硬件抽象层(HAL)访问硬件。HAL实际上将不同平台之间的差异隐藏了起来,向操作系统提供了一组例程,允许操作系统的内核在多种体系结构下工作。这样同样适用于设备驱动程序,因此,设备驱动程序可以调用HAL中的例程。但对于HAL未涵盖的硬件特性,设备驱动程序可以直接操纵设备控制器,以完成其功能。

自Windows 2000(也包括 Windows 98/Me)开始,Microsoft定义了设备驱动程序的模型,称为WDM。WDM驱动程序除了遵循I/O管理器规定的驱动程序框架,还增加了对Windows即插即用(简称PnP)、电源管理以及WMI(Windows管理规范)的支持:

Windows定义了即插即用设备的管理框架,即插即用管理器与一种称为总线驱动程序的驱动程序一起协作,以便在检测到一个设备加入或移除时,加载或卸载该设备的驱动程序,而且,设备的硬件资源,比如I/O端口地址、中断向量等,也可以实现自动择优分配。

电源管理器也是Windows I/O系统的一部分,负责指示设备驱动程序执行电源状态的变化。Windows的电源管理建立在ACPI(高级配置和电源接口)规范的基础上。

一组WMI例程。严格来讲,WMI是系统的管理机制,而非I/O机制。WMI定义了一个通用的事件报告框架,它采用了提供者-消费者模型,将提供事件和使用事件分离开。Windows实现了WMI框架的管理功能,并提供了相应的API供系统模块或应用程序实现提供者或消费者功能。I/O系统包含了一个特殊的WMI提供者(称为WDM WMI提供者)。设备驱动程序通过响应特定类型的 I/O 请求,以及调用一组 WMI 例程,可以向WMI提供数据或者接收命令。WMI 与 I/O系统相对独立。

Windows的 I/O 系统不仅提供了对硬件设备的灵活控制,而且也允许多个驱动程序协同完成 I/O任务,这是Windows的层次驱动程序模型,或者称为分层的驱动程序模型。当I/O管理器接到一个I/O 请求时,它可以将该请求传递给一个设备栈。位于栈顶的驱动程序首先处理 I/O 请求,然后依次将其向下传递, 直到该 I/O 请求被完成。通常,与硬件关联的驱动程序位于设备栈的底端,它们直接驱动硬件设备来完成 I/O 任务。这种分层模型带来了极大的灵活性,每个驱动程序只需关注自己的职责,而不必包揽 I/O 请求的完成处理过程。

Windows I/O系统非常依赖注册表,例如,设备和驱动程序的很多配置信息都保存在注册表中,包括和硬件有关的一些描述信息,以及驱动程序初始化所需要的信息等。注册表是由Windows 内核中的配置管理器来实现的。