合上笔记本的盖子会发生什么?背后的机理是什么?

合上笔记本的盖子会发生什么?背后的机理是什么?

用笔记本的人都是合上盖子,带了就走,十分方便。在享受这种便利的同时,也有很多烦恼。知乎上不少问题都是关于再掀开盖子后,黑屏的问题。我们今天就来看看,如何设置笔记本合上盖子的动作,底层的处理逻辑和顺序,以及一些有趣的相关话题。

如何设置合上盖子的动作

这个十分简单,老鸟可以跳过这一节。我们可以在控制面板的电源选项里面进行设置:

接着选择“更改计划设置”

点击进入“更改高级电源设置”:

可以看到我的合上盖子的动作会产生“睡眠”,无论是电池还是接上电源:

如果对这个安排不满意,也可以换成其他的

其实还有个更方便的进入路径:在电源选项里面直接进入:

界面稍有不同,内容完全一样:

这里的睡眠是指Sleep,也就是S3:

休眠是指Hibernation,也就是S4:

ACPI提供了一种机制使系统在Working状态(G0)和Sleeping状态(G1)以及soft-off (G2)状态之间转换。

G1 Sleeping状态下系统耗电较少,没有程序在执行,如果有任何唤醒事件传入系统会使系统快速恢复至G0工作状态。Sleeping状态分为四种:

S0:正常工作状态,所有设备正常运转。

S1:Sleeping with Processor Context Maintained, CPU停止工作,不执行任何指令,但是CPU,芯片组以及DRAM内容没有遗失。此状态可以快速恢复到工作状态。

S2:比S1的睡眠状态更深更省电,CPU停止工作,但是CPU和cache的内容已丢失。DRAM仍处于带电状态。

S3:又叫Suspend to RAM,功耗更低,内存信息得以保持,CPU, Cache, Chipset的内容均丢失。DRAM仍处于带电状态。

S4:又叫Suspend to Disk,hibernate。功耗最低,唤醒需要的时间最长,所有设备都不再工作。Memory的资料被保存在Disk中。当系统收到唤醒信号后,首先从Disk中恢复memory。

在缺省情况下,合上盖子就是进入S3。这样,再打开盖子后可以迅速点亮屏幕,继续工作。微软要求这个时间必须在500ms内,主板厂商必须优化BIOS来达到这个要求,否则不能拿到微软的logo认证。S3的缺点是还要消耗少量电能,它的问题我们后面再说。

工作原理

在介绍完设置后,照例进入本专栏的特色,原理时间。合上盖子,进入Sleep,简单的动作,行云流水般的操作,完成它其实颇为复杂。其中就包括三个玩家:EC、BIOS和操作系统。

几乎所有的笔记本的主板上都一个小家伙:EC(Embed Controller),它是一个16位的小芯片,它与服务器中的BMC类似,掌控笔记本电脑的方方面面。它最早脱胎于笔记本的键盘控制器,现在笔记本上诸多特色功能,背后都有它的身影。充电指示灯为什么会亮?EC在合适的时间让它亮;风扇为什么狂转?EC觉得你的CPU太热了;各种功能键和上面的小灯也是它的功劳。甚至关机后EC还在不知疲倦的工作,它的特色功能也是笔记本厂商要发力的重点。

我们来一起复盘一下合上盖子(LID)的整个过程。

1. 盖子合上。EC通过IO端口探知到这个变化,设置EC event标志位,从而触发一个SCI中断。

2.Windows在收到SCI中断后,知道这是一个ACPI中断,从而调用BIOS的_GPE event。

3. BIOS在_GPE的event处理method中,发现是个EC事件,在EC事件处理Method中进一步发现盖子合上了。通知LID对象变更状态。

4.LID对象报告Windows盖子被合上了。

5.Windows检查电源Policy,发现要进入S3。执行_PTS control method,获取SLP_TYP3,把SLP_TYP3数值写入PM1_CNT(Power Management 1 control)的slp_typ域,并且slp_en置1就可以使系统进入相应的S3.

6. 硬件做以下事情使系统进入S3状态:1)使memory进入低功耗自刷新状态。2)除了memory,把电源从其他设备移除,仅保留需要唤醒设备的后背电源。

7. EC发现系统进入S3,置起呼吸灯等,提升用户现在已经进入S3。

睡眠时耗完电怎么办?

S3有个问题是它还在消耗着电力,尽管比较少。这就带来一个严重的问题,如果在S3情况下电力消耗殆尽,那么未存储的东西不就丢失了吗?过去这种情况都由UEFI固件偷偷处理,它会在电力下降到一个阈值后偷偷开机,帮你把S3转换到S4。微软发现关闭电脑,尤其是笔记本的人越来越少。经过平板浪潮的洗礼,大部分人开始习惯把笔记本一合就完事了,而S3转S4的问题有些小笔记本厂商处理的并不好。于是微软不但把休眠用到了开机上,还创造出了一个叫做混合睡眠的概念。它是这样工作的:

1. 合上盖子的时候进入混合睡眠模式,即虽然要进入S3,但也把S4需要的内容存储下来了。

2. 如果在电源消耗完之前从S3回来,例如开启盖子等。就按照S3启动路径。

3. 如果电源消耗结束后再回来,就按照S4的路径启动。

这样相当于为S3加上了S4的双保险,保证文件不会丢失。

你可以通过powercfg看一下你开启混合启动了吗:

结论

合上盖子,还有这么多动作需要做,也许很多人都没有想到。老鸟通过本文也可以不仅知其然,而且知其所以然,举一反三,了解我们日常生活中许多现象的运行机理。

其他相关文章:

编辑于 2021-07-05 15:22