中斷是什么?
中斷是指計算機在執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前正在執行的程序而轉去執行相應的中斷服務程序(Interrupt Service Routine,ISR)。這個事件可以是由硬件設備觸發(如硬盤讀寫錯誤、打印機沒有紙等),也可以是由軟件觸發(如用戶按下Ctrl+C)。
當發生中斷時,CPU會暫停當前正在執行的程序,并跳轉到相應的中斷處理程序(Interrupt Service Routine,ISR)去處理這個事件。中斷處理程序通常會保存當前任務的上下文信息(如CPU寄存器的狀態、內存中的數據等),然后執行相應的中斷處理操作(如讀取數據、發送響應等)。在中斷處理完畢后,CPU會恢復之前保存的上下文信息,并回到被中斷的任務繼續執行。
中斷是一種異步的事件處理機制,可以提高系統的并發處理能力。在現代計算機系統中,中斷被廣泛應用于處理各種硬件設備事件和軟件異常情況。
我們知道中斷的發生與處理是一個需要軟硬件交互的操作。
?關中斷:進入不可響應中斷請求的中斷,由硬件自動完成
?保存斷點:把當前的程序計數器PC中的內容保存起來,用于中斷處理結束后能繼續執行主程序
?識別中斷源:有多個中斷源同時請求時,只能響應最高優先級的,因此需進一步判斷中斷源
?保存現場和屏蔽字:進入中斷服務程序后,要先保存現場
?設置新的屏蔽字:用于改變中斷優先級和控制中斷的產生
?開中斷:執行中斷程序時,打開中斷可實現更高優先級的中斷響應,實現中斷嵌套
?執行中斷服務程序:執行中斷服務程序中的內容
?再次關中斷:使得恢復現場和屏蔽字時不會被中斷打斷
?恢復現場和屏蔽字:使現場和屏蔽字恢復到中斷之前的狀態
?再次開中斷:中斷執行完,現場恢復完后,可以打開中斷
?中斷返回:返回原程序繼續執行
處理過程,會經歷兩次的開/關中斷,也可用下圖描述
在之前我們在做嵌入式的時候,大多是關注了軟件層面,如何注冊中斷,如何設計中斷的參數,如何編寫中斷服務函數,如何將中斷服務綁定到中斷號。做linux中斷的話,這些都是定義好的,你可以去調用接口,當然也支持自定義添加新的中斷。
-
cpu
+關注
關注
68文章
10863瀏覽量
211768 -
計算機
+關注
關注
19文章
7494瀏覽量
87957 -
中斷
+關注
關注
5文章
898瀏覽量
41497
發布評論請先 登錄
相關推薦
評論