2020年1月|s3睡眠模式代表着什么?( 二 )


以低功耗蓝牙设备为例 , 不同电源状态下的功耗、恢复到正常状态的延迟和Sx状态类似 , 参考数据如下表所示:
2020年1月|s3睡眠模式代表着什么?
文章图片
表注:数据来自微软文档和维基百科
设备的电源状态由对应的驱动程序控制 , 驱动程序可以相对独立地控制设备状态 。 例如 , 我们在日常使用(S0)时 , 摄像头无需开启 , 那么此时的摄像头就会被调整为D3状态 。 但是 , 当电源管理器决定要切换系统状态时 , 它们必须接受调度 , 系统电源状态和设备电源状态有预设的映射关系 , 我们可以在Windows设备管理器>设备>属性>详细信息>电源数据看到:
2020年1月|s3睡眠模式代表着什么?
文章图片
如上图所示 , 我的显示器支持D0和D3两种状态 , 在系统为S0的情况下 , 最低可以达到D0状态 , 也就是说 , 可以处于D0-D3任意一种状态;而在系统为S3的情况下 , 则最低可以处于D3状态 , 也就是必须关闭 。 硬件设备的制造商大多认为不需要在S3模式下保持功能正常 , 几乎所有设备被设定为S3对应D3 。
在Windows7及之前 , 以及目前的部分PC中 , 进入睡眠模式实质上就是系统电源状态由S0切换为S3 , 设备状态再根据映射关系 , 切换对应的Dx状态 , 这常常也被称为传统待机或是S3待机 。
以管理员权限打开终端 , 输入powercfg/a , 如果得到的结果中显示支持Standby(S3) , 则说明你的设备为传统待机:
2020年1月|s3睡眠模式代表着什么?
文章图片
来源:forum.gigabyte.us
因此 , 在一台采用了传统待机模式的PC上 , 进入睡眠模式的步骤大致如下:
电源管理器决定切换系统状态为S3;
告知应用在规定时间内完成最后的操作 , 之后将它们挂起到内存;
通知硬件设备配合系统状态切换 , 设备悉数从D0切换到D3状态 。
至此 , 我们已经解决了S3睡眠模式是什么的问题 , 那么为什么微软抛弃它 , 选择所谓新型待机呢?
▍新需求与Sx状态的变体
虽然ACPI制定了电源管理的规范 , 但随着时间的推移 , 新的需求被发掘 , 人们开始在Sx状态的基础上做文章 。
例如 , Linux、Windows会支持一种叫做混合睡眠(hybirdsleep)的状态 。 这种情况下 , 机器状态既会被保存到磁盘 , 也会被保存到RAM , 是S3和S4状态的混合;Mac也曾经宣传过这项特性 。 ArchLinuxWiki解释了设置这种状态的目的:
如果电池没有耗尽 , 那么系统可以从RAM恢复 。 如果电池耗尽 , 系统可以从磁盘恢复 , 这比从RAM恢复慢 , 但至少机器的状态没有丢失 。
在S3睡眠下 , 系统状态被保存到了RAM中 , 前面提到过RAM一旦断电 , 保存的内容就会消失;想要进入系统必须重新进行引导 , 而S4状态中用于保存系统状态的磁盘没有这种问题 。 所以将两者结合的混合睡眠 , 既解决了数据安全问题 , 也可以在没耗尽电量之前尽可能缩短唤醒的时间 。
另外 , 比较知名的例子就是Windows中的「快速启动」功能 。 很多人可能都不知道 , 在开启「快速启动」的这项功能以后 , Windows的关机功能不再是真的关机了 , 电脑在你点下关机按钮以后并不会进入S5状态 , 而是进入了S4休眠状态 。 但休眠功能不是保存系统的全部状态吗?为什么Windows关机后还要输入密码 , 重新打开应用呢?
确实 , 传统的S4休眠会保存系统的全部状态 , 包括登录的用户、开启的应用 , 重启后 , 引导程序会直接将磁盘中的状态加载到内存中 , 这样就省去了重新加载内核、初始化硬件的功夫 。 Windows10开始菜单中 , 休眠选项默认是隐藏的 , 可以通过电源选项>更改电源按钮的功能>关机设置重新打开 。