关闭一台电脑的最简单方法就是按电源键,或者点击操作系统(如Windows)的关机按钮,当触发该操作时,操作系统将会将自己关闭,然后断掉主板的电源。更暴力一点的就是长按电源键,甚至拔电源。

本文将介绍一种通过软件的方式,将电脑瞬间关闭。

以Windows操作系统为例,为了实现该操作,需要下载一个免费的软件rweverything,也称为RW,可以通过该链接直接在官网上下载http://rweverything.com/downloads/RwPortableX64V1.7.zip,该软件不用安装,解压后就可以直接运行。

1. 进入Windows操作系统后,以管理员身份打开Rw.exe,然后点击上方的ACPI按钮:

电脑bios界面怎么关机 在bios里面怎么关机_睡眠

2. 在弹出的ACPI表界面中选择DSDT标签页

电脑bios界面怎么关机 在bios里面怎么关机_电脑bios界面怎么关机_02

3. 在DSDT页面中,寻找_S4 Package,可以通过多次点击左边的_S4来快速定位到_S4 Package的位置,同时记下_S4 Package的第一个值,在本例中是0x05

电脑bios界面怎么关机 在bios里面怎么关机_电脑bios界面怎么关机_03

4. 点开ACPI Table中的FACP标签页,然后找到PM1a_CNT_BLK项,PM1a_CNT_BLK项的值为一个IO port的地址,在本例中为0x4004,也就是十进制的16388,记住这个地址。

电脑bios界面怎么关机 在bios里面怎么关机_电源管理_04

5. 点击RW上边的IO Space按钮,打开IO Space窗口

电脑bios界面怎么关机 在bios里面怎么关机_电脑bios界面怎么关机_05

然后将IO Base设置为前面PM1a_CNT_BLK项的值,由于设置的是Base,可以有一定的偏移量所以这边将IO Base设置为0x4000,可以访问到0x4004的地址即可,点击OK,打开IO Space窗口。

电脑bios界面怎么关机 在bios里面怎么关机_电源管理_06

6. 点击IO Space窗口的16 bit按钮,让窗口中的数据以16bit为单元进行显示。同时双击PM1a_CNT_BLK位置即位置为0x4004的数值(如下红框所示)

电脑bios界面怎么关机 在bios里面怎么关机_电源管理_07

打开IO Space 4004的编辑界面

电脑bios界面怎么关机 在bios里面怎么关机_电源管理_08

7. 对0x4004的数据进行编辑(点击相应的位置,输入数值即可实现编辑),将bit13设置为1,同时bit10~bit12设置为步骤3中查找的_S4 Package的第一个数值,本例中为0x05,即将bit10~12设置为二进制的101。

电脑bios界面怎么关机 在bios里面怎么关机_计算机_09

最后点击"Done"按钮后,电脑瞬间就被关闭了。

基本原理说明

计算机行业中,有一个标准ACPI(Advanced Configuration and Power Management Interface),对计算机的电源管理进行了规定(只是标准的一小部分),其中包括对计算机电源状态的基本定义,包括以下几种基本状态:

  • S0,电脑正常工作,计算机的所有硬件设备全部处于打开或正常工作状态。
  • S1,也称为POS(Power on Suspend),CPU停止工作,其它的硬件设备仍然正常工作。
  • S2,CPU处于停止运作状态,总线时钟也被关闭,但其余的硬件设备仍然运转。
  • S3,STR(Suspend to RAM,挂起到内存),电源继续为内存供电,以确保数据未丢失,而其它的设备均处于关闭状态。该状态对应到Windows的睡眠状态。
  • S4,STD(Suspend to Disk,挂起到磁盘),将内存数据保存到磁盘,然后关闭系统。该状态对应到Windows的休眠状态。
  • S5,所有硬件设备(包括电源)全部关闭,即关机(shutdown)。

通常情况下,我们的电脑只会向用户提供S3、S4和S5的状态,分别对应了睡眠、休眠和关机。而S1和S2的定义比较模糊,现实中很少使用。

计算机上,ACPI相关的信息由UEFI/BIOS在初始化系统的时候,通过建立ACPI Table的形式传递给OS,ACPI表是一个大表,里面又会分很多小的表,如步骤2、4中提到的DSDT(Differentiated System Description Table)和FACP(Fixed ACPI Description Table)表。这些表一方面提供了计算机系统中的一些硬件设备相关的信息,另一方面也提供了一些操作方法。

另外计算机主板为了支持ACPI标准,还需要实现一些ACPI标准中定义的硬件寄存器用于控制主板的电源,如前面步骤4中提到的PM1a_CNT_BLK寄存器,该寄存器用于控制主板的电源状态。如下图所示:

电脑bios界面怎么关机 在bios里面怎么关机_计算机_10

  • 其中bit 12:10即为Sleep Type,也就是对应到前面的Sx状态,而具体Sx状态要对应到那个具体的数值,则在步骤3中的_Sx Package中定义,所以在对该区域进行写的时候,需要先查询DSDT表中_Sn Package的值(有些主板可能会实现多个PM Control Register,所以会看到_Sn Package的值可能不止一个,不过一般情况下,个人PC一般只会实现一个PM Control Register,所以大部分情况下只需要关注_Sn Package的第一个值即可)。
  • bit13则是提供一个接口,让写到SLP_TYPx的值生效。

目前,大部分的计算机都会遵循ACPI标准,即在硬件上实现ACPI标准规定的寄存器,同时UEFI/BIOS在初始化系统的时候,会收集ACPI相应的信息,以ACPI Table的形式呈现给OS。

在本例中,我们实际上是将S4对应的SLP_TYPx值写进去,即让计算机主板在电源上直接进入休眠对应的状态(一般情况下,S4休眠状态和S5关机状态,在主板电源来看是一样的,故在本例中,_S4 Pakage和_S5 Package的值是一样的),没有等OS在软件上进行相应的准备和处理,如应用程序和操作系统的关闭。

所以,在本质上,该操作和直接长按电源键强关电脑的操作是一样的,也会造成数据的丢失,只是我们是通过软件的方式更加直接地去操控主板上电源管理相关的寄存器。