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