"點我查看秘籍連載" 回到操作系統:中斷 要想在任何需要的時候回到操作系統,這相當於是改變了CPU的正常執行流程,所以一個非常熟悉的字眼—— 中斷 (Interrupt)就出現了。通過中斷,可以保證回到操作系統,從而將CPU的控制權交給操作系統。 中斷的字面意思就是打斷正常執行流程,但是註意,它表示 ...
回到操作系統:中斷
要想在任何需要的時候回到操作系統,這相當於是改變了CPU的正常執行流程,所以一個非常熟悉的字眼——中斷(Interrupt)就出現了。通過中斷,可以保證回到操作系統,從而將CPU的控制權交給操作系統。
中斷的字面意思就是打斷正常執行流程,但是註意,它表示的是打斷流程而不是終止流程,這是不同的概念。中斷是操作系統中非常重要的機制,正如上面所描述的:中斷用於保證CPU控制權交給操作系統,從而讓操作系統可以執行某些操作。
中斷分為硬體中斷和軟體中斷。
任何硬體,都有自己的IRQ(中斷請求),都可以在需要的時候通過匯流排向CPU發送硬體中斷通知。比如時鐘中斷,當進程執行耗光時間片時將產生一個時鐘中斷,使得能夠立刻進入操作系統並調度下一個要執行的進程,時鐘中斷是操作系統具有安全感的保證,只要時鐘開始運行後,就意味著操作系統最終總能夠獲取到CPU控制權。再比如硬碟的IO中斷,當硬碟讀取所請求的數據完成後,就會發送硬碟IO中斷,CPU接到該中斷後就會切換到操作系統,讓操作系統去處理這個中斷事件。
軟體也可以發送中斷,比如請求一個系統調用(system call),關於系統調用,後面再介紹。
無論是軟中斷還是硬體中斷,最終的目的都是為了回到操作系統,將CPU交給操作系統。那麼,中斷是如何回到操作系統的呢?換句話說,中斷時是如何進入內核態的呢?內核態又如何回到用戶態呢?
當操作系統執行完相關操作後,就要回到用戶態,要回到用戶態也只需執行特殊的指令即可,一般稱之為return-from-trap指令。(此處的trap又似乎是個名詞,表示脫離陷阱,回到用戶態之下。它將內核態描述為陷阱,這其實也是可以理解的,中斷是事件,收到事件表示捕獲到事件,什麼具有捕獲的能力?陷阱。在bash中也有一個trap命令,也可以理解為陷進,它用來設置信號處理程式,當捕獲到信號時就做出某些處理。我們不管trap是陷入還是陷阱,我們關註的是作用:進入內核態和退出內核態。)
中斷既然是打斷CPU的執行流程,那麼可能需要重新回到中斷點繼續正常的執行流程。所以,在發生中斷時,需要保存好中斷點以及相關的一些狀態,以便能夠在處理完中斷後恢復執行流程繼續向下執行。
所以,中斷就像是突發事件,處理完成後如果恢復到斷點處,那麼對整個流程來說,中斷就像是從未發生過的事一樣,但卻實實在在的被處理了。但是,中斷後並不一定會恢復到斷點處,因為中斷處理程式可能會在恢復斷點前直接退出這個執行流程,比如有些硬體中斷表示一些異常現象(比如除0異常),這些異常可能會導致終止進程。