教你如何將電腦瞬間關掉

關閉一臺電腦的最簡單方法就是按電源鍵,或者點擊操作系統(如Windows)的關機按鈕,當觸發該操作時,操作系統將會將自己關閉,然後斷掉主板的電源。更暴力一點的就是長按電源鍵,甚至拔電源。

本文將介紹一種通過軟件的方式,將電腦瞬間關閉。

以Windows操作系統爲例,爲了實現該操作,需要下載一個免費的軟件rweverything,也稱爲RW,可以通過該鏈接直接在官網上下載http://rweverything.com/downloads/RwPortableX64V1.7.zip,該軟件不用安裝,解壓後就可以直接運行。

1. 進入Windows操作系統後,以管理員身份打開Rw.exe,然後點擊上方的ACPI按鈕:

2. 在彈出的ACPI表界面中選擇DSDT標籤頁

3. 在DSDT頁面中,尋找_S4 Package,可以通過多次點擊左邊的_S4來快速定位到_S4 Package的位置,同時記下_S4 Package的第一個值,在本例中是0x05

4. 點開ACPI Table中的FACP標籤頁,然後找到PM1a_CNT_BLK項,PM1a_CNT_BLK項的值爲一個IO port的地址,在本例中爲0x4004,也就是十進制的16388,記住這個地址。

5. 點擊RW上邊的IO Space按鈕,打開IO Space窗口

然後將IO Base設置爲前面PM1a_CNT_BLK項的值,由於設置的是Base,可以有一定的偏移量所以這邊將IO Base設置爲0x4000,可以訪問到0x4004的地址即可,點擊OK,打開IO Space窗口。

6. 點擊IO Space窗口的16 bit按鈕,讓窗口中的數據以16bit爲單元進行顯示。同時雙擊PM1a_CNT_BLK位置即位置爲0x4004的數值(如下紅框所示)

打開IO Space 4004的編輯界面

7. 對0x4004的數據進行編輯(點擊相應的位置,輸入數值即可實現編輯),將bit13設置爲1,同時bit10~bit12設置爲步驟3中查找的_S4 Package的第一個數值,本例中爲0x05,即將bit10~12設置爲二進制的101。

最後點擊"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寄存器,該寄存器用於控制主板的電源狀態。如下圖所示:

  • 其中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在軟件上進行相應的準備和處理,如應用程序和操作系統的關閉。

所以,在本質上,該操作和直接長按電源鍵強關電腦的操作是一樣的,也會造成數據的丟失,只是我們是通過軟件的方式更加直接地去操控主板上電源管理相關的寄存器。

發佈了36 篇原創文章 · 獲贊 21 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章