驱动程序通知简介

从 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_DEVICEIRP_MN_STOP_DEVICE PnP 请求来支持资源再平衡。 设备驱动程序绝不应拒绝 IRP_MN_QUERY_STOP_DEVICE PnP 请求。

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

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

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

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