设备低功耗状态

设备电源状态 D1、D2 和 D3 是设备低功率状态。 从 Windows 8 开始,D3 分为两个子状态: D3hotD3cold

D1 和 D2 是中低功率状态。 许多设备类不定义这些状态。 所有设备都必须定义 D3hot。

以下部分介绍 D1、D2 和 D3:

设备电源状态 D1

设备电源状态 D1 是电源最高的设备低功率状态。 其具有以下特征:

功率消耗
消耗小于 D0 状态,但大于或等于 D2 状态。 通常,D1 是时钟封闭状态,设备接收的电源足以保留设备的硬件上下文。 通常,支持 D1 的总线或设备类的规范更详细地描述了此状态。

设备上下文
一般情况下,设备上下文由硬件保留,不需要由驱动程序还原。 支持 D1 的总线或设备类的规范通常提供保留此上下文的详细要求。

设备驱动程序行为
驱动程序必须保存和还原或重新初始化硬件丢失的任何上下文。 但是,通常,在进入此状态时,设备会丢失很少的上下文。

还原时间
通常,将设备从 D1 还原到 D0 所需的时间应小于从 D2 还原到 D0 的时间。

唤醒功能
D1 中的设备可能能够请求唤醒。 若要提供有关此状态是否可以支持唤醒信号的信息,总线驱动程序使用 DEVICE_CAPABILITIES 结构,或者从 Windows 8 开始, GUID_D3COLD_SUPPORT_INTERFACE 驱动程序接口。

通常,使用 D1 的设备这样做是因为从此状态恢复不需要驱动程序还原设备的完整硬件上下文。 为了最大程度地减少用户对延迟的感知,将设备从 D1 还原到 D0 应产生最少的延迟。 降低状态转换延迟比降低能耗更重要。

设备电源状态 D2

D2 是具有以下特征的中间设备低功率状态:

功率消耗
消耗量小于或等于处于 D1 状态的消耗量。

设备上下文
通常,大多数设备上下文都由硬件丢失。 通常,此状态会保留用于发出唤醒事件的上下文的一部分。 支持 D2 的总线或设备类的规范通常提供保留此上下文的详细要求。

设备驱动程序行为
设备驱动程序必须保存和还原或重新初始化硬件丢失的任何上下文。 典型设备在进入 D2 时会丢失大部分上下文。

还原时间
将设备从 D2 还原到 D0 至少需要将设备从 D1 还原到 D0。 具有大型帧缓冲区的图形适配器是一个在从 D2 到 D0 转换后要还原的大量硬件上下文的设备示例。 对于此类设备,D2 的还原时间可能大于 D1 的还原时间。

唤醒功能
D2 中的设备可能能够请求唤醒。 若要提供有关此状态是否可以支持唤醒信号的信息,总线驱动程序使用 DEVICE_CAPABILITIES 结构,或者从 Windows 8 开始, GUID_D3COLD_SUPPORT_INTERFACE 驱动程序接口。

通常,支持 D2 的驱动程序会这样做,因为它们的设备不支持从 D3 唤醒。 对于这些设备,D2 状态的能耗下降到设备可以恢复的最低级别,以响应唤醒信号。 与实现 D1 状态以减少用户感知的延迟相比,实现 D2 状态的目标是节省电力。 因此,从 D2 到 D0 的还原时间通常超过从 D1 到 D0 的还原时间。 例如,在 D2 状态下,总线的电源降低可能会导致设备关闭其某些功能,因此需要额外的时间来重启和还原设备。

许多设备类不定义此状态。

设备电源状态 D3

D3 是低功率设备低功率状态。 所有设备都必须支持此状态。

从 Windows 8 开始,操作系统将 D3 细分为两个单独的不同子统计信息 D3 和 D3cold。 早期版本的 Windows 定义 D3 状态,但不定义 D3hot 和 D3cold 子状态。 但是,PCI 总线电源管理接口规范的所有版本都定义了单独的 D3hot 和 D3cold 子状态,以及高级配置和 Power Interface 规范的版本 4 及更高版本定义了 D3hot 和 D3cold 子状态。

尽管 Windows 8 之前的 Windows 版本未显式定义 D3hot 和 D3cold 子统计信息 D3,但这些子状态在这些早期版本的 Windows 中隐式存在。 如果设备显式处于 D3 状态,并且计算机处于 S0 系统电源状态,则设备隐式处于 D3hot 子状态。 在 D3hot 中,设备连接到电源(尽管设备可能配置为绘制低电流),并且可以检测到总线上是否存在设备。 如果设备显式处于 D3 状态,并且计算机处于低功率 Sx 状态(非 S0 状态),则设备隐式处于 D3cold 子状态。 在此隐式 D3cold 子状态中,设备可能会收到一个棘手的当前状态,但设备与计算机会有效关闭,直到发生唤醒事件。

从 Windows 8 开始,设备可以在计算机保持 S0 状态时进入和离开 D3cold 子状态。 若要支持此新行为,必须将 D3hot 和 D3cold 显式定义为 D3 的非重复子状态。

D3hot 是设备可以直接从 D0 输入的 D3 的子状态。 设备在设备驱动程序的软件控制下从 D0 转换为 D3hot。 在 D3hot 中,可以在连接到的总线上检测到设备。 设备处于 D3hot 子状态时,总线必须保持 D0 状态。 从 D3hot,设备可以返回到 D0 或输入 D3cold。 只能从 D3hot 输入 D3cold。

D3cold 是 D3 的子状态,设备在物理上连接到总线,但无法检测到总线上的设备(也就是说,在设备再次打开之前)。 在 D3cold 中,以下一项或两者均属实:

  • 设备连接到的总线处于低功率状态。
  • 设备处于低功率状态,当总线驱动程序尝试在总线上检测到其状态时,设备不会做出响应。

从 D3hot 到 D3cold 的转换没有设备驱动程序交互。 相反,设备驱动程序指示它在启动从 D0 到 D3hot 的转换之前是否为 D3cold 转换做好准备。 随后,可能会发生从 D3hot 到 D3cold 的转换,具体取决于所有条件是否都适合启用此转换。

有两种情况是,使用同一电源的所有设备都在 D3hot 中,并已准备好进行 D3cold 转换。 当这些设备中的最后一个输入 D3hot 时,父总线驱动程序或 ACPI 筛选器驱动程序会关闭这些设备的电源,也就是说设备进入 D3cold。

D3cold 中的设备只能通过输入 D0 离开此子状态。 从 D3cold 到 D3hot 没有直接转换。

当计算机处于 S0 状态并且设备进入 D3hot 子状态时,设备驱动程序通常无法提前确定设备的下一次转换是 D3cold 还是 D0。 一个例外是计算机准备离开 S0 状态。 在这种情况下,下一个转换是 D3cold。

以下部分介绍 D3hot 和 D3cold:

有关详细信息,请参阅在驱动程序中支持 D3cold

D3hot 子州

D3hot 具有以下特征:

电源 消耗主要从设备中删除,但不是从计算机整体中删除的。 处于 S0 状态的计算机可能继续处于此状态,或者它可能正准备从 S0 移动到低功率 Sx 状态。

设备上下文
设备驱动程序仅负责还原设备上下文。 驱动程序必须保留并还原所有设备上下文,或者在转换为 D0 状态时重新初始化设备。

设备驱动程序行为
设备驱动程序仅负责还原设备上下文,通常来自最新的工作配置。

还原时间
总还原时间是除 D3cold 以外的任何设备电源状态中最高的,但通常不大于 D2 的还原时间。

唤醒功能
D3hot 子状态中的设备可能或可能无法请求唤醒。 若要提供有关此子州是否可以支持唤醒信号的信息,总线驱动程序使用 DEVICE_CAPABILITIES 结构,或者从 Windows 8 开始, GUID_D3COLD_SUPPORT_INTERFACE 驱动程序接口。

在 D3hot 中,只有最少的流式当前可用。 驱动程序和硬件必须准备好,才能缺电。 支持 D3hot 的总线的规范通常提供可用于此状态的电源的详细要求。 若要将设备返回到工作状态,设备驱动程序必须能够还原并重新初始化设备,而无需依赖 BIOS 在可能可用于设备的选项 ROM 中运行任何代码。

设备的所有类都定义 D3hot 子州。

D3cold 子州

D3cold 具有以下特征:

功率消耗
电源已完全从设备中删除,可能已从整个系统中删除。 根据设备的构造,设备可能能够从侧带源中绘制当前。

设备上下文
设备驱动程序仅负责还原设备上下文。 驱动程序必须保留并还原设备上下文,或者在转换为 D0 状态时重新初始化设备。

设备驱动程序行为
设备驱动程序仅负责还原设备上下文,通常来自最新的工作配置。

还原时间
总还原时间是任何设备电源状态中最高的。

唤醒功能
在 D3cold 子状态中,设备可能能够触发唤醒信号来唤醒睡眠计算机。 此功能在DEVICE_CAPABILITIES结构中报告,从 Windows 8 开始,由 GUID_D3COLD_SUPPORT_INTERFACE 驱动程序接口中的 GetIdleWakeInfo 例程报告。 信号唤醒计算机后,设备驱动程序启动设备从 D3cold 到 D0 的转换。 有关详细信息,请参阅以下注解。

从 Windows 8 开始,D3cold 子状态中的设备可能能够向处于 S0 系统电源状态的计算机触发唤醒信号。 GetIdleWakeInfo 例程报告了此功能。 DEVICE_CAPABILITIES结构不包含有关此功能的信息。 唤醒信号到达后,设备驱动程序启动设备从 D3cold 到 D0 的转换。 在这种情况下,当信号到达时,计算机处于唤醒状态,并且只有设备需要唤醒。

在许多现有硬件平台中,处于低功率 Dx 状态的设备可以触发唤醒信号来唤醒睡眠计算机。 但是,如果计算机处于 S0 状态,同一设备可能无法触发唤醒信号。 因此,当计算机处于 S0 状态时,此设备的驱动程序不得启动从 D0 到低功率 Dx 状态的转换。 否则,设备离开 D0 后,计算机将不可用,直到计算机保持 S0 状态。 仅当计算机准备离开 S0 状态时,此设备才应保留 D0 状态。

如果处于低功率 Dx 状态的设备可以触发到处于 S0 状态的计算机的唤醒信号,则当计算机处于 S0 时,无需将设备保留在 D0 中。 如果计算机位于 S0 中,并且设备处于 D0 但处于空闲状态,驱动程序可以武装设备以触发唤醒信号,然后启动设备从 D0 到此低功率 Dx 状态的转换。

设备的某些类定义 D3cold 子州。

有关详细信息,请参阅在驱动程序中支持 D3cold