windows pnp/power status Manager(设备 电源状态介绍)

一、先记住两套状态机

Windows有两套电源状态:

系统状态(System Power State)

整个电脑的状态:

复制代码
复制代码
S0
S1
S2
S3
S4
S5

设备状态(Device Power State)

某个设备的状态:

复制代码
复制代码
D0
D1
D2
D3

例如:

  • 网卡
  • USB
  • SSD
  • 摄像头

每个设备都有自己的 D 状态。


二、系统状态 S-State


S0

正常工作

复制代码
复制代码
CPU运行
内存供电
设备供电

就是:

复制代码
复制代码
正在使用电脑

S1

轻度睡眠

CPU停止执行:

复制代码
复制代码
CPU Clock停止

但:

复制代码
复制代码
CPU供电
RAM供电

还在。


唤醒非常快。


现在基本很少见。


S2

比S1更深。

CPU断电:

复制代码
复制代码
CPU Power Off

但:

复制代码
复制代码
RAM仍供电

现代PC也很少使用。


S3(最重要)

传统意义:

Sleep(睡眠)


状态:

复制代码
复制代码
CPU断电
设备断电

但:

复制代码
复制代码
RAM保持供电

因此:

内存内容还在。


恢复时:

复制代码
复制代码
不用重新启动

直接恢复现场。


例如:

笔记本:

复制代码
复制代码
合盖

很多就是:

S3

(现代机器越来越多改成 Modern Standby)


S4(重点)

Hibernate(休眠)


状态:

复制代码
复制代码
RAM内容
写入硬盘

Windows生成:

复制代码
复制代码
hiberfil.sys

然后:

复制代码
复制代码
CPU断电
RAM断电
设备断电

整个机器:

几乎不耗电。


恢复时:

复制代码
复制代码
读取hiberfil.sys
恢复内存

S3 和 S4区别(面试高频)

项目 S3 S4
RAM供电
功耗 极低
恢复速度
数据保存位置 RAM 硬盘

S5

Soft Off


也就是:

复制代码
复制代码
正常关机

特点:

复制代码
复制代码
所有程序退出

内存内容丢失:

复制代码
复制代码
RAM清空

再次开机:

复制代码
复制代码
重新启动系统

三、设备状态 D-State

这是驱动面试更爱问的。


D0

正常工作

复制代码
复制代码
设备完全供电

例如:

复制代码
复制代码
网卡工作
SSD工作
USB工作

D1

浅睡眠

部分电路关闭。


恢复很快。


很多设备根本不支持。


D2

深睡眠

关闭更多硬件模块。


恢复比D1慢。


也不常见。


D3

设备关闭

最常见。


又分:

D3 Hot

设备有电:

复制代码
复制代码
还能响应唤醒

例如:

复制代码
复制代码
USB键盘唤醒电脑

D3 Cold

完全断电:

复制代码
复制代码
一点电都没有

四、系统状态和设备状态关系

很多人误解。


不是:

复制代码
复制代码
S3
=
D3

实际上:

系统状态变化时:

Power Manager会协调各设备进入对应状态。

例如:


电脑进入:

复制代码
复制代码
S3

那么:

网卡:

复制代码
复制代码
D3

USB:

复制代码
复制代码
D3

SSD:

复制代码
复制代码
D3

CPU:

停止运行。


五、真实例子

你合上笔记本盖子:

复制代码
复制代码
S3

Power Manager:

发送:

复制代码
复制代码
IRP_MJ_POWER

设备收到:

复制代码
复制代码
IRP_MN_SET_POWER

通知:

复制代码
复制代码
进入D3

网卡:

进入D3


USB:

进入D3


SSD:

进入D3


系统:

进入S3。


六、驱动中的体现

以前 WDM:

会处理:

复制代码
复制代码
IRP_MJ_POWER

例如:

复制代码
复制代码
IRP_MN_SET_POWER

复制代码
复制代码
IRP_MN_QUERY_POWER

KMDF:

一般:

复制代码
复制代码
EvtDeviceD0Entry

进入工作状态。


复制代码
复制代码
EvtDeviceD0Exit

离开工作状态。


七、面试标准回答

如果面试官问:

D0、D3是什么?

你可以回答:

D-State 是设备电源状态。D0 表示设备完全工作;D1、D2 是不同级别的低功耗状态;D3 表示设备关闭状态,其中 D3 Hot 仍保持部分供电支持唤醒,D3 Cold 则完全断电。


如果问:

S3 和 S4区别?

回答:

S3 是睡眠状态,RAM保持供电,系统上下文保存在内存中,恢复速度快;S4 是休眠状态,内存内容写入磁盘 hiberfil.sys,RAM断电,恢复速度较慢但几乎不耗电。


对于 Windows 驱动开发来说,真正需要掌握的是:

复制代码
复制代码
PnP状态机
Power状态机
IRP_MJ_PNP
IRP_MJ_POWER
D0Entry
D0Exit

这几个是面试和实际驱动开发中最常见的电源管理知识点。

相关推荐
qq_369224337 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
阿米亚波7 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
caimouse7 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
初圣魔门首席弟子7 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
CHENG-JustDoIt8 天前
AI工具 | 爆火开源项目Odysseus AI 工作台:从项目介绍、部署情况及其使用等多方位分析指南(含详细步骤)
大数据·人工智能·windows·python·ai·开源·github
kingbal8 天前
Windows:flutter环境搭建
windows·flutter
未若君雅裁8 天前
Python 数据容器详解,list、tuple、str、set、dict 到底怎么选
windows·python·list
CodeKwang8 天前
Windows 环境 OCCT 8.0 编译构建及与 Qt6 项目集成
windows·qt·opencascade
我是伪码农8 天前
小兔鲜1-25
linux·服务器·windows
vx-Biye_Design8 天前
springboot安阳地区研学旅游服务小程序-计算机毕业设计源码12785
java·vue.js·windows·spring boot·tomcat·maven·mybatis