按下电源键后发生了什么?电脑是如何关机的?

按下电源键后发生了什么?电脑是如何关机的?

在Windows启动后,最自然的关机方式是什么呢?当然是按下电源键了。有没有好奇,当我们按下电源键,会发生什么呢?为什么Windows可以选择关机或者睡眠?背后的机理又是什么呢?

历史

如果你曾经使用过Windows95,你一定会记得当时的一个铁律,必须正确关机!我们要点击关机菜单,在三个选项中选择关机才好。像这样按下电源键是绝对不行的:


我们按下电源键真的会立刻切断整机电源,如果你足够幸运,下次也许跑个Scandisk就行了,如果你没有这么幸运,你没有保存的文件可能就丢失了!这个设计简直是反人类,和我们其他电器的使用习惯完全不同。幸亏当时PC还是高大上的高科技产品而不是现在四处可见的普通电器,否则微软一定会被骂死。

Window98和随后的WindowsXP引入了ACPI,情况才得到改善。我们来一起看一看当我们按下电源键后会发生什么。

原理

我们把按下电源键分成两种情况:一、按一下立刻抬起。二、按住不动超过5秒。这里需要ACPI的背景知识(ACPI与UEFI - 知乎专栏)。

1。按一下

ACPI定义了两种电源键:Fixed hardware power button和Control method power button。Fixed hardware power button一般对应南桥或者SOC中的PWRBTN#引脚,而Control method power button一般可以用GPIO等扩展,它需要在ACPI table中报告_HID(PNP0C0C)设备并提供_GPE Event。为了简单起见,我们以最常见的PWRBTN#来说明整个流程:

1. 用户按下电源键,并抬起。

2. PWRBTN#被触发。

3. PWRBTN_STS被置1。

4. SCI产生。

5. 操作系统的OSPM发现SCI是电源键产生,随后检查用户的电源键设置偏好。用户可以设置睡眠或者关机。

6. 如果是关机,通知各个应用程序保存退出;通知各个驱动程序电源事件。有序关闭应用和驱动。

7. 调用关机前的各个ACPI定义的Event。

8. 写MADT表中的电源寄存器真正关机,进入G2/S5状态。

2。按住不动超过5秒

这是一种强制关机操作。前一种操作需要OS配合,如果系统已经死机了呢?我们总不能拔电源插头或者抠出来电池吧,这是一种保险措施了。这个操作叫做Power button override。在PWRBTN#上,硬件都有专有的Timer来计时,超过5秒还没有抬起,就触发了强制关机,硬件会直接关闭CPU电源,进入G2/S5状态。

Tips

1。如何选择按下电源键后进入关机还是睡眠?

在控制面板的电源选项里选择,如下图:



也可以用命令行powercfg。

2。如何在命令行关机

用shutdown命令:


该命令还有重启等功能,可以配合mstsc远程重启。

结论

按下电源键,比较新的电脑先会尝试安全关机。操作系统和固件在ACPI规范下共同工作,不同分工,一步步安全关闭计算机。在操作系统死机等特殊情况下,用户可以尝试按住电源键不动5秒钟以上,硬件会自动强制关闭电源。这是最后一个手段,保证用户可以在极端条件下拥有强制关闭电脑的权利,毕竟谁也不想强拔电源(有时条件也不允许)。当然这种条件下,缓存中数据是有可能丢失的。

最新的电脑,如果不改变电源策略,按下电源键就是关闭电脑,而且是安全关闭。习惯老Win95的用户完全没有必要害怕直接按下电源键。

按下电源键如何开机的呢?见另一篇文章:按下电源键后发生了什么?电脑是如何优雅地开机的?

扩展阅读

1.实际上SOC和主板上有很多power rail,关机并不是简简单单切断电源就好了,有复杂的关闭各个power rail的时序,大家可以看看芯片手册了解一下。

2. ACPI 5.0后增加了10秒的power button override,需要Windows Blue + 平台支持并且BIOS需要报告_DSM,见: docs.microsoft.com/en-u-

3. 其他平台的电源状态欢迎阅读本专栏的其他文章:

老狼:按下电源键后发生了什么?电脑是如何优雅地开机的?zhuanlan.zhihu.com图标老狼:Reset重启后发生了什么?它和关机后再开机有什么区别?zhuanlan.zhihu.com图标July:一起学习电脑如何睡眠S3zhuanlan.zhihu.com图标老狼:CPU省电的秘密(一):EISTzhuanlan.zhihu.com图标老狼:CPU省电的秘密(二):CStateszhuanlan.zhihu.com图标老狼:睿频:榨干CPU所有的潜力(CPU电源管理系列番外篇)zhuanlan.zhihu.com图标

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!

用微信扫描二维码加入UEFIBlog公众号

编辑于 2019-01-12

文章被以下专栏收录

    从首次运用于Intel 安腾处理器,到第一版统一的可扩展固件接口(UEFI)规范出版,无论是在高性能服务器,移动设备或是深度嵌入式设备等,UEFI已在所有平台完全淘汰了BIOS。这里有关于UEFI的一切。