一、先记住两套状态机
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
这几个是面试和实际驱动开发中最常见的电源管理知识点。