驱动程序通知简介

从 Windows Server 2008 开始,当处理器或内存模块动态添加到硬件分区时,操作系统可以通知设备驱动程序。 热添加操作过程的不同阶段会出现多个不同的通知。 每个通知使用不同的通知方法来通知设备驱动程序有关事件的信息。 可以使用其中一种或多种通知方法,让操作系统在热添加操作发生时通知驱动程序。 然后,驱动程序可以响应安全且最佳操作所需的响应。

下表标识了不同的通知方法,以及它们是应用于处理器、内存还是同时应用于处理器和内存。

通知方法 对于处理器 内存

同步驱动程序通知

X

异步驱动程序通知

X

X

内存通知事件

X

资源重新平衡

X

同步驱动程序通知

使用 同步驱动程序通知时,操作系统会同步通知设备驱动程序已将新处理器添加到硬件分区。 这是设备驱动程序收到的有关处理器数量更改的第一个通知。

将新处理器添加到硬件分区时,操作系统在操作系统启动新处理器之后,但在操作系统开始计划处理器上的线程之前,会向设备驱动程序发送此通知。 当设备驱动程序收到此通知时,它可以为每个处理器分配任何数据结构,并将任何其他每个处理器资源分配给新处理器。 这将准备设备驱动程序运行其调度例程、中断服务例程 (ISR) 、延迟过程调用 (DPC) 以及新处理器上任何其他驱动程序线程。

设备驱动程序必须将自身注册到操作系统,以接收同步驱动程序通知。 有关详细信息,请参阅 注册同步驱动程序通知

此通知方法仅适用于处理器。 内存没有同步通知机制。

异步驱动程序通知

借助 异步驱动程序通知,操作系统以异步方式通知设备驱动程序已将新的处理器或内存模块添加到硬件分区。 从 Windows Server 2008 开始,处理器和内存模块即插即用 (PnP) 设备。 因此,操作系统使用 PnP 通知机制进行异步驱动程序通知。

将新的处理器或内存模块添加到硬件分区时,操作系统在操作系统启动新的处理器或内存设备后,会向设备驱动程序发送此通知。 对于新处理器,操作系统在开始计划新处理器上的线程之前不会向设备驱动程序发送此通知。

注意

所有 PnP 通知都是异步的。 因此,在操作系统启动处理器或内存模块之后,设备驱动程序可能才会收到这些通知。

当设备驱动程序收到此通知时,它可以相应地调整以下部分或所有项:

  • 内存缓冲区和其他资源分配

  • 向特定处理器分配资源

  • 计划特定处理器上的 DPC 和其他线程

  • 负载均衡算法

重要

将新处理器添加到硬件分区时,操作系统不会发送 PnP 通知,直到新处理器启动并且操作系统已开始计划其上的线程。 如果设备驱动程序必须在操作系统开始计划新处理器上的线程之前执行某些任务,例如按处理器数据结构分配 ,则必须对驱动程序使用同步通知方法。

设备驱动程序必须将自身注册到操作系统,以接收异步驱动程序通知。 有关详细信息,请参阅 注册异步驱动程序通知

内存通知事件

使用内存通知事件方法,你可以让设备驱动程序计划等待操作系统设置 \KernelObjects\HighMemoryCondition 事件对象的线程。 当可用物理内存量超过特定值时,操作系统将设置此事件对象。 此事件通知等待事件对象的任何线程,指出系统中当前有大量物理内存可用。 此事件可能指示你动态地向系统添加了新的内存模块。 当操作系统设置此事件对象时,设备驱动程序可以通过分配额外的内存缓冲区来响应事件。

有关 \KernelObjects\HighMemoryCondition 事件对象的信息,请参阅 标准事件对象

重要

如果操作系统设置 \KernelObjects\HighMemoryCondition 事件对象,则该事件仅提供你可能已动态将新内存模块添加到硬件分区的指示。 还有其他可能导致操作系统设置此事件对象的情况。 因此,从 Windows Server 2008 开始,不建议设备驱动程序使用此通知方法。 设备驱动程序应改为使用异步驱动程序通知方法。

此方法仅适用于内存。 处理器没有相应的通知机制。

资源重新平衡

从 Windows Server 2008 开始,向硬件分区添加新处理器时,操作系统将启动系统范围的资源重新平衡。 设备是否将参与此类资源重新平衡取决于设备的 DEVPKEY_Device_DHP_Rebalance_Policy 属性的设置 。 网络适配器 (类 = Net) 设备 设置类中的设备的默认行为是,当新处理器动态添加到系统中时,它们不会参与资源重新平衡。 所有其他设备设置类中的设备的默认行为是,当新处理器动态添加到系统中时,这些设备将参与资源重新平衡。

如果设备是 即插即用 (PnP) 设备,并且它参与此类资源重新平衡,则操作系统在资源重新平衡操作期间将 IRP_MN_QUERY_STOP_DEVICEIRP_MN_STOP_DEVICEIRP_MN_START_DEVICE PnP IRP 发送到设备的驱动程序。 这些 PnP 请求通知驱动程序硬件分区中发生了硬件更改。 设备驱动程序应支持资源重新平衡,IRP_MN_QUERY_STOP_DEVICE和IRP_MN_STOP_DEVICE PnP 请求。 设备驱动程序永远不应 拒绝IRP_MN_QUERY_STOP_DEVICE PnP 请求。

这些 PnP 请求可让设备驱动程序在添加新处理器后充分利用硬件分区中新的活动处理器集。 具体而言,支持资源重新平衡的设备驱动程序使用它在资源重新平衡期间收到的 PnP 请求断开其中断服务例程 (ISR) 并使用更新的处理器关联值重新连接它们。 这使设备驱动程序能够使用硬件分区中所有当前处于活动状态的处理器(包括任何新处理器)来处理中断请求。

在资源重新平衡期间,设备驱动程序应排队所有 I/O 请求。

有关资源重新平衡详细信息,请参阅 停止设备以重新平衡资源

此方法仅适用于处理器。 将新的内存模块添加到硬件分区时,操作系统不会启动系统范围的资源重新平衡。