題 計算機如何重啟?


計算機如何重啟?它關閉後,它如何告訴自己再次回來?什麼樣的軟件可以做到這一點?


484
2018-06-08 19:04


起源


@jer.salamon:它們實際上是完全不同的路徑。關閉會調用ACPI例程,該例程會向ATX電源發送信號,從而關閉主電壓軌。 - Ignacio Vazquez-Abrams
這是通過BIOS控制的 - 如果內存服務,感興趣的關鍵字是APM和APIC - pst
在重啟時它永遠不會真正“關閉”。 - Moab
沒有愚蠢的問題。不,可能有 - 但我認為這個實際上非常有趣。特色是 本週候選人的問題。 - slhck
我曾經在遠程服務器上進行遠程工作,該服務器基本上只是公司數據中心中沒有屏幕或鍵盤的PC。我的服務器從未正常關閉,但有時我會使用WinXP Start-> TurnOffComputer-> Restart從我的端重啟它,以解決因測試我自己的代碼而導致的不穩定性。當數據中心無人值守時,我經常在我自己選擇的時候工作。它是 非常 我不小心選擇了什麼 關掉 作為最後的選擇,並且必須等到兩天后操作員去按下 上 切換給我! - FumbleFingers


答案:


TL;博士: 計算機中的電源狀態由ACPI(高級配置和電源接口)的實現控制。在關閉過程結束時,操作系統會設置一個ACPI命令,指示計算機應該重新啟動。作為響應,主板使用它們各自的重置命令或線路重置所有組件,然後遵循引導過程。主板實際上從未關閉,它只會重置各種組件,然後就像按下電源按鈕一樣。

漫長而漫無邊際但(在我看來)更有趣的答案:

軟實力及其運作方式

在過去(好吧,好吧,對於像我這樣的大學生,很久以前的90年代),我們有AT(高科技)主板與 AT電源 管理。 AT電源系統非常非常簡單。計算機上的電源按鈕是硬件切換(可能位於機箱背面),您的120vac輸入正好通過它。它實際上打開和關閉了電源的電源,當這個開關處於關閉位置時,計算機中的所有東西都完全死了(這使得CMOS電池非常重要,因為沒有它就沒有電源來保持硬件時鐘滴答作響)。由於電源開關是一種物理機制,因此無法通過軟件方式打開和關閉電源。 Windows會顯示著名的“現在可以安全地關閉計算機”消息,因為雖然所有內容都已停放並準備關閉,但操作系統無法實際翻轉電源開關。這種配置有時被稱為 硬實力,因為它是所有硬件。

現在情況有所不同,因為ATX主板的奇蹟和 ATX電源 (如果您保持跟踪,那就是高級技術擴展)。除了許多其他進步(迷你DIN PS / 2,任何人?),ATX帶來了 軟實力。軟電源意味著可以通過軟件控制計算機的電源。這帶來了一些重大變化:

  • 待機功率:您可能已經看到電源引腳分配標記的“5v SB”或“5v待機”連接器。該 備用電源 即使計算機關閉,主板上的5v線始終打開。這就是為現代計算機維修時拔下或關閉PSU硬盤開關(如果有)的重要原因,因為即使它關閉也可能會使5v SB短路並損壞主板。這也是CMOS電池不再那麼重要的原因 - 只要電源具有主電源,5v SB就會用來替換CMOS電池,所以CMOS電池僅在您完全拔掉電腦時使用。 5v SB系列重要的是允許您的計算機組件(最重要的是BIOS和網絡適配器)在計算機關閉時繼續運行一些簡單的軟件。
  • 智能電源控制。如果你看一下電源主板(P1)連接器的引腳分配,你會發現兩個引腳通常是標記的 PS_ON 和 PS_RDY。這些代表“電源開啟”和“電源就緒”。如果您想進行試驗,請取出不在計算機中的電源,將其插入,並小心地將地線(黑線之一)短接到PS_ON線(綠線)。當風扇旋轉時,電源將明顯打開。主板上運行+ 5v SB的組件實際上通過連接PS_ON引腳來打開和關閉電源。由於電源中有一些電容器和其他組件需要花費一些時間來充電,因此在PSU開啟後,電源主輸出的電壓可能不會立即穩定。這就是PS_RDY引腳的用途,它在電源的內部邏輯確定電源“就緒”並且將提供穩定電源時亮起。主板等待直到PS_RDY打開才能繼續啟動。

因此,您的電源開關不再“打開”計算機。相反,它連接到主板的基本控制器,它們檢測到按鈕已被按下並執行許多步驟以準備系統,包括點亮PS_ON以便可以使用電源。電源按鈕不是觸發啟動過程的唯一方法,擴展總線上的設備也可以這樣做。這很重要,因為您的以太網網絡適配器實際上在您的計算機關閉時保持打開並查找通常稱為“魔術數據包”的非常特定的數據包。如果他們檢測到這個尋址到其MAC地址的數據包,它們將觸發啟動過程。這就是“Wake-on-LAN”(WoL)的工作原理。時鐘也可以啟動啟動(大多數BIOS允許您設置計算機每天應該啟動的時間),USB和FireWire設備可以觸發啟動,雖然我不知道任何實現。

了解電源控制

好吧,我解釋了Soft Power的原因,因為我覺得它很有意思(總是我解釋事情的一個關鍵原因),因為它可以讓你了解你的計算機的電源和運行/關閉狀態是如何全部由軟件控制的。在大多數當前的計算機中,這個軟件系統是一個實現的 高級配置和電源接口,或ACPI。 ACPI是一個標準化的統一系統,允許軟件控制計算機的電源系統。你可能聽說過 ACPI電源狀態。電源控制的基本機制是這些“電源狀態”,您的操作系統通過準備開關(電源實際翻轉之前發生的關機/休眠過程)切換到電源模式,然後命令主板切換電源狀態。電源狀態如下所示:

  • G0:工作(您的計算機處於“開啟”狀態)
  • G1:睡眠(計算機的待機狀態,分為S子狀態)
    • S1:CPU和RAM的電源保持打開狀態,但CPU沒有執行指令。外圍設備已關閉。
    • S2:CPU斷電,RAM保持不變
    • S3:除RAM和触發恢復(鍵盤)的設備外,所有組件都斷電。當您告訴操作系統“睡眠”時,它將停止進程,然後進入此模式。
    • S4:冬眠。絕對一切都被關閉了。當您告訴操作系統休眠時,它會停止進程,將RAM的內容保存到磁盤,然後進入此模式。
  • G2:軟關閉。這是你電腦的“關閉”狀態。除了可以觸發啟動的設備外,電源關閉。
  • G3:機械關閉。

如何重置實際發生

您會注意到重啟不是這些狀態之一。那麼當你的電腦重新啟動時會發生什麼?答案可能令人驚訝,因為從電源管理的角度來看 幾乎沒有。有 ACPI重置命令。當您告訴操作系統重新啟動時,它會遵循其正常關閉過程(停止所有進程,執行一些維護,卸載文件系統等),然後作為最後一步,而不是將計算機發送到電源狀態G2(如果您只是告訴它關閉)它會設置重置命令。這通常被稱為“復位寄存器”,因為與大多數ACPI接口一樣,它只是一個地址,應該寫入特定值以請求復位。我將引用2.0規範來說明它的作用:

可選的ACPI重置機制指定了提供完整系統重置的標準機制。實施時,此機制必須重置整個系統。這包括處理器,核心邏輯,所有總線和所有外圍設備。從OSPM的角度來看,斷言復位機制在邏輯上等同於機器的電源循環。在重置後獲得控制權後,OSPM將以類似的方式執行冷啟動操作。

因此,當設置復位寄存器時,會發生一些事情。

  • 所有邏輯都被重置。這意味著將相應的複位命令發送到各種硬件,包括CPU,存儲器控制器,外圍控制器等。在大多數情況下,這僅僅意味著點亮物理RST線,正如AndrejaKo在上面所示。
  • 然後引導計算機。這是“以類似方式對冷啟動執行操作”部分。主板執行的步驟與按下電源按鈕後電源剛剛準備就緒的步驟相同。

這兩個步驟的最終效果(實際上分解為更多的步驟)是它看起來就像剛剛啟動的計算機一樣,但實際上是整個時間的力量。這意味著關閉和啟動所需的時間更少(因為您不必等待電源準備就緒),並且重要的是允許操作系統關閉啟動啟動。這意味著不需要使用另一個啟動觸發器(WoL等),並且當您無法觸發啟動時,允許您使用Reboot作為遠程重置系統的有效方法。


這是一個很長的答案。但是,嘿,希望你現在對計算機電源管理有更多的了解。我當然學到了一些研究這個的東西。


595
2018-06-08 21:06



+1。非常翔實和有用的答案。只需要一點 - PS_ON為低電平有效,即切換到0V而不是+ 5VSB以打開主輸出。 - MikeJ-UK
對於觸發啟動的USB設備,某些BIOS可以選擇通過雙擊或按鍵喚醒計算機。此外,一些Mac鍵盤有電源按鈕(傳統一直回到原來)。 - Stuart P. Bentley
很好的答案,我當然學到了很多東西。但問題仍然存在:從主板的角度來看,S4和G2狀態之間有什麼區別?將RAM保存到磁盤是由操作系統完成的,因此S4聽起來就像硬件的“軟關閉”一樣。 - EMP
我相信S4在功能上等同於G2,但存儲差異。某些BIOS在從S4開始時似乎執行“快速POST”,但在從G2開始時執行完整POST。我不認為這有任何理由,除了人們希望S4簡歷快。 - jcrawfordor
這實際上有點過分了;有(很多)非ACPI方法重啟計算機,有時ACPI單獨不起作用: superuser.com/questions/294681/... - Tobu


這是一個起點:

芯片通常不會關閉然後再打開。相反,有一條復位線,當通常所有存儲器都被清除並且處理器看起來剛剛啟動時,處理器將處於所謂的複位狀態。當該引腳保持高電平(或低電平,具體取決於處理器)時,處理器處於復位狀態。釋放引腳後,它將繼續正常啟動,就像它第一次打開一樣。這一點是,本身沒有停電。

那麼它如何擴展到像現代PC這樣的大型系統呢?現代計算機由計算機製成,有時由計算機自己製造。因此,當您將計算機設置為重置時,“計算機”將使計算機開始保存其狀態(如果重置受到控制),或者只是將其重置引腳拉出。

一些處理器和微控制器(它們是微型獨立計算機,通常比現代台式計算機晚20年)可以使用內部交換機重置自己。正如我所說,一旦生成重置的信號消失,計算機將啟動。所以問題的前提並不完全正確。電腦不知道什麼時候開機。知道什麼時候它需要“關閉”或重置,當保持它的信號消失時,它將打開。

在現代計算機上,這種行為可能看起來很奇怪,可以設置為在特定時間或通過網絡等打開。正如我所說,電腦是由電腦製成的。因此,雖然主處理器可能已關閉,但其中可能存在許多其他芯片和微控制器。最明顯的情況是實時時鐘,通常由電池供電。然後它可以打開其他芯片,這將打開其他芯片,連鎖反應將持續到整個計算機開啟。在今天的計算機上,有一個名為+5 VDC待機電壓的PSU線。它為計算機“關閉”時打開的各種設備提供大約50 mW的功率。

一點點瑣事: Intel 386 EX處理器上的複位引腳為引腳號110。

386EX datasheet figure 2

在Intel i7-900上,它的地址是AL39。

我希望有人能夠提供一個答案,從高層次的角度解釋事情是如何運作的,因為它是一個非常複雜的系統。


79
2018-06-08 19:39



哇,徹底的回答。 - Seth Carnegie
@Seth Carnegie這不是那麼棒。我只是觸及了大多數計算機的低級別東西,從冰箱到PC。我甚至沒有提到ACPI,APM和其他現代電源系統或者如何在舊PC上使用英特爾8042微控制器控制鍵盤可以重置處理器,POST如何工作,重置矢量和許多其他東西。 - AndrejaKo
@netvope我想說太多想像了。您可能至少有一個鼠標,一個鍵盤,超過10個主板的最基本部分(即使我們考慮到高度集成的“芯片組”),也許一個在電源單元,至少一個在每個驅動器中(更可能是2-3個),每個擴展卡中有幾個...監視器也很嚴重,我的打印機現在擁有比我的第一台台式機更多的RAM。 - AndrejaKo
談到內存,一些新硬盤和CPU的緩存現在比我使用的第一台計算機的RAM要大。我們現在可以跑 Windows 95 完全在L2緩存中並將整個系統分區保留在驅動器緩存中! - netvope


這篇博文 描述Linux如何觸發重啟。

摘抄:

Linux有許多不同的方法來重置x86。其中一些只是32位,所以我只是忽略它們,因為老實說,你正在做什麼與你的生活。而且,他們太可怕了。所以,這給我們留下了五個。

  • kbd - 通過鍵盤控制器重啟。最初的IBM PC將CPU重置線連接到鍵盤控制器。寫入適當的魔術值會使線路發出脈衝並且機器會重置。這一切都非常簡單,除了現代機器沒有鍵盤控制器(它們實際上是嵌入式控制器的一部分)這一事實,甚至更現代的機器甚至不假裝有鍵盤控制器。現在,嵌入式控制器運行軟件。而且,眾所周知,軟件是可怕的。但更糟糕的是,嵌入式控制器上的軟件是由BIOS作者編寫的。很明顯,任何有效的假裝都是某種精心設計的小說。有些機器非常挑剔硬件處於Windows編程的確切狀態。有些機器在10次中工作9次,然後由於某些奇怪的計時問題而鎖定。而其他人根本就不工作。歡呼!

  • 三重 - 試圖產生三重故障。這是通過加載空中斷描述符表然後調用int(3)來完成的。中斷失敗(沒有IDT),故障處理程序失敗(沒有IDT)並且CPU進入一個條件,理論上應該觸發復位。除了似乎沒有要求這種情況發生,它只是在一堆機器上不起作用。

  • pci - 實際上不是pci。傳統的PCI配置空間訪問是通過將32位值寫入io端口0xcf8來識別總線,設備,功能和配置寄存器來實現的。然後,端口0xcfc包含有問題的寄存器。但是如果你將相應的魔術值寫入0xcf9,機器將重新啟動。壯觀!並且沒有以任何方式標準化(當然不是PCI規範的一部分),因此不同的芯片組可能有不同的要求。 Booo。

  • efi - EFI運行時服務提供了重新啟動計算機的入口點。它通常甚至有效!只要EFI運行時服務完全正常工作,這可能是一個延伸。

  • acpi - 最新版本的ACPI規範允許您提供一個地址(通常是內存或系統IO空間)以及在那裡寫入的值。想法是將值寫入地址會重置系統。事實證明,這樣做經常失敗。通過ACPI表示PCI重啟方法也是不可能的,因為PCI重啟方法需要一對值,而ACPI只給你一個。


27
2018-06-08 23:11



這是相關的,但如果你在這裡放一個其他頁面的信息摘錄,答案會更有用。 - calvinf
tl; dr有很多方法可以重啟;有些董事會破壞得太厲害了 假裝是窗戶,一種涉及一些嘗試和睡眠的啟發式,是唯一的方法。 - Tobu


它會觸發一個I / O位置,該位置將數據線拉低,告訴CPU應該停止正在執行的任何操作,並從BIOS中的某個位置開始運行代碼。


10
2017-07-28 20:19



...並且該位置是在傳遞給重新引導系統調用的代碼中指定的? - Knight Samar
@Knight Samar:不; I / O位置通常是內核知道的體系結構常量。你可以看到這個,例如在Linux重啟代碼中,例如arch / x86 / kernel / reboot.c。 - sleske
有沒有人有一個很好的資源來進一步閱讀這件事? - matthias krull
@ mugen.kenichi和所有,朋友給我這個參考 howstuffworks.com/bios.htm/printable - Knight Samar
我建議 superuser.com/a/347115/38062 。 - JdeBP


回到過去的電源管理之前,計算機當然還可以自行重啟。 (任何人都記得凍結程序意味著您必須使用Ctrl + Alt + Delete重新啟動計算機?)

在我的舊486上,彙編語言命令 JMP FFFF:0000 (即,將CPU的指令指針設置為所述地址)將導致整個計算機重新啟動。換句話說,FFFF:0000尋址BIOS中的一個位置,該位置具有計算機首次啟動時應該執行的操作的說明。我懷疑AndrejaKo的回答所描述的重置引腳,或者在電源管理前幾天的重置按鈕,也會強制指令指針指向相同的地址。

一個 Google搜索JMP FFFF:0000 揭示了很多有趣的網頁。


10
2018-06-12 14:38



您還需要將特定值寫入0040:0072以確定它是冷(0x0000)還是熱啟動(0x1234)。 - Synetech


還有一個名為看門狗的東西。 該設備用作死人的開關。 計算機必須每隔一分鐘向看門狗發出信號 它還活著。當計算機崩潰時,例如 通過進入無限循環,它將失敗 向監視器發出信號,它仍在按預期運行, 在什麼情況下看門狗將執行硬件復位。 這在終結者的流行電視連續劇中得到了證明, 機器人被高壓電源浪湧擊倒的地方。 它會在2分鐘後重置。


9
2018-06-09 14:24



這是正確的,但並沒有真正回答這個問題。 - sleske
是否有看門狗會實際重啟整台計算機?我知道它們有時用於計算機內部的各種微控制器,但是在整個計算機級別中有一個嗎?我個人的經歷讓我說不,但是歡迎一些支持或反對的證據。 - AndrejaKo
@AndrejaKo:我曾經為一家製造通信服務器的公司工作(主要是連接調製解調器的刀片服務器)。他們有一個看門狗定時器連接到主板上的複位引腳。計時器被主板上運行的後台工具定期撞擊,因此如果處理器掛起,看門狗最終會按下復位按鈕。當主板重新啟動時,它被綁在一條使電話線忙的電路上。 - Robert Harvey


回到舊的IBM PC-1鍵盤控制器,奇怪的是,處理重啟。 IBM嵌入了一個小型微處理器來處理鍵盤,它有一些備用I / O線,因此他們使用其中一條線來驅動主CPU的複位線。發送到鍵盤控制器的命令將導致CPU被重置,就像剛剛接通電源一樣。

我猜這個傳統一直延續到“AT”時代,今天ACPI可能還有遺跡。

補充:有關上述重置方案的有趣細節。在早期啟動序列期間,代碼在RAM中查找可能已由先前執行的代碼設置的特定模式。如果存在此代碼,則會跳過某些POST(開機自檢)診斷。該圖案僅出現在“溫暖”的靴子上。


4
2017-12-03 04:47