計算機掉電的時候 CPU 真的會中斷嗎?操作系統會進行那些動作?

看到書上說計算機電源掉電,會產生中斷,這是真的嗎?掉電後CPU還能工作多長時間?這個時間的供電是誰提供的?操作系統如何處理這個中斷?


查了一下Intel的手冊,目前沒發現關於掉電中斷的介紹(電源管理、APIC),目前我認為是沒有這種東西的,至少早期肯定是沒有的,高端的板子或者CPU上也許有,但沒找到介紹(手冊太多,一個一個看也看不完)。

所以,如果題主問的是「計算機」或者「PC」的話,可以認為,沒有中斷,操作系統不會收到任何信號,Windows也不會利用這個信號幹什麼事情。 @Lennith 的說法不太正確。

至於UPS的工作原因,UPS不是靠CPU中斷來觸發的,UPS有兩路電源輸入,一路是正常的供電,另一路是電池或者備用電源,當第一路供電出問題時,UPS負責切換電源,跟CPU和主板沒有任何關係(想了解UPS的,我找到一個文檔:UPS的組成與基本原理),截個簡圖:

Windows檢測非法關機的機制是:在關機完成的最後階段,向磁碟寫入一個正常關機的標識(日誌),表示正常關機。下次開機時檢查這個標識,如果沒有,說明是非法關機。

掉電後電源和主板的電容確實能支撐一會,大概毫秒級,但這時候基本上啥都幹不了,因為外設可能已經不工作了,想要保存掉電事件也沒地方保存,誰知道外設還能不能工作?總不能把掉電事件寫到CPU里吧?寫進去以後怎麼清除呢?

其實驗證Windows掉電保護事件保存在哪是很簡單的:弄兩台一模一樣配置的PC,一台正常關機,一台直接斷電,然後交換以下硬碟就知道了。

再說一遍Windows的掉電事件是記錄在硬碟上的,跟CPU無關,CPU不給中斷,操作系統也不處理。

當然,以上僅限於Intel平台(AMD沒驗證過),嵌入式環境里,有些板子、CPU是支持這種行為的,比如STM的某些憑條(我沒接觸過具體設備,不了解)。

所以,書上的東西如果說的是「PC」的話,可以認為,書上的內容是錯的。

另外,關機(按下電源按鈕)在新的機器(2000年以後吧)都是會讓操作系統得到中斷的,是一個NMI中斷,操作系統會處理這個中斷並正常關機,但需要注意的是,這個中斷和掉電不是同一回事


沒有掉電中斷這種東西。按下電源鍵後會有SCI產生,之後ASPM會調用一些ACPI的method,之後會寫cf9寄存器或者電源管理寄存器進入Sx mode。


感謝下面評論里兩位指出,UPS的切換不是操作系統做的,是UPS設備自己做的。。。

---下面是原答案----

我是這麼猜測的:掉電之後殘餘電荷(主板上那麼多電容)支撐主板正常運行幾十毫秒,CPU在幾納秒之內收到並處理中斷,幾毫秒之後UPS啟動備用電源~就切換過來了


我大學學過一種東西叫UPS。間隔小於0.02秒,CPU還是在工作狀態的。大概是這個數字我記不太清了。

UPS的主要作用就是在斷電以後給你一個關機的時間。大概是這樣。所以UPS倫功率,不論大小。


1. 會中斷,斷電中斷屬於內部中斷,在中斷請求中排列優先順序靠前。

2. 臨時的電量是電容里放出來的。 能工作多久不知道。

3. 中斷以後基本不做什麼事情,在操作系統內留下一個觸發了該中斷的痕迹,在下次操作系統開機後才進行錯誤的檢測。//所以windows斷電重開會到選擇啟動方式的畫面。

—————————————————————————————————————————

評論區有測試 cpu中斷對操作系統本身沒影響。


外部電源掉電後,ATX電源內的電容及主板上的電容能夠維護幾十毫秒的正常工作,然後一切就停止了。

中斷可以有也可以沒有,看有沒有必要了。一般家用計算機電斷了就是斷了,也不會有專門的操作。但如果是比較重要的計算機系統或專用的計算機系統(比如一些嵌入式系統),則可以設計專門的軟體、硬體用於處理這種突然斷電的事件。比如用電壓比較器判斷是否即將斷電,如果是則會向CPU發出最高優先順序的中斷。CPU收到中斷後則會啟動專門的中斷服務進程去處理掉電前的工作,比如保存重要的數據、操作一些關鍵的開關、發出一些信息等。

在掉電前需要處理一些任務的計算機系統,往往會設計額外的電容以延長CPU接收到中斷到電壓降低到維護系統正常工作的門限的時間,以確保可以執行完所有必要的操作。


請不要如此機械的去理解書上的,盡信書不如無書!

請問沒電了怎麼可能繼續工作?!

書上一定是其他的意思,可能表述容易產生誤解,但你應該能判斷!


這個書講的其實是MCU,lz沒弄明白。MCU電壓下降到EEPROM操作電壓以下是有幾毫秒的,用電壓比較器可以提前得到這個中斷進行保存數據和發出警告、切換電源,進入掉電模式。PC(個人電腦)是沒有這個玩意的。


看到大家都開始扯ups就補充一點,ups一般都可以串口輸出工作狀態,所以不必糾結電壓,想知道是不是快沒電了用串口查啊,高級點的還帶網口,估計snmp就可以


好像會禁止讀寫一些對電壓比較敏感的寄存器。。。防止錯誤動作。。。


推薦閱讀:

mac上有必要裝linux嗎?
為何windows系統沒有訂閱模式?
linux下如何測量進程線程context switch花費的時間?
現在有哪些國產 CPU 和操作系統?現狀如何?
windows下有哪些非常有用or高逼格的命令?

TAG:操作系統 | 中央處理器CPU | 硬體 | 計算機組成原理 | 中斷 |