操作系統-中斷(1)中斷


不同教材對中斷的定義不同,可以說是一個沒有嚴格定義的概念。
中斷(廣義的)是指程序執行過程中,遇到急需處理的事件時,暫時中止CPU上現行程序的運行,轉去執行相應的事件處理程序,待處理完成后再返回原程序被中斷處或調度其他程序執行的過程。
操作系統是“中斷驅動”的;換言之,中斷是激活操作系統的唯一方式。
中斷或異常處理執行的代碼不是一個進程,而是內核控制路徑,它代表異常或中斷發生時正在運行的當前進程在內核態執行一個獨立的指令序列。內核控制路徑比進程更“輕”,其上下文信息比進程上下文信息少得多。而上下文切換后CPU執行的是另一個用戶進程。
 
根據中斷源不同,中斷事件處理原則為:
  • 處理器硬件故障中斷:由處理器、內存儲器、總線等硬件故障引起
會通過中斷請求向CPU請求處理
處理原則為:保護現場,停止設備,停止CPU,向操作員報告並對故障造成的破壞進行估計和恢復,等待人工干預(復位、設置、替換等)
  • 程序性中斷:由處理器執行機器指令引起
不同用戶往往有不同處理要求,借助於信號機制,操作系統可將所捕獲的中斷事件原封不動的轉交給應用程序自行處理。
語法錯誤:編譯程序發現並報錯
邏輯錯誤:測試程序發現並報錯
程序運行過程中產生的異常:
        除數為零、操作數溢出等算術異常:簡單處理,報告用戶;也可以由用戶編寫中斷續元程序處理
        非法指令、用戶態使用特權指令、地址越界、非法存取等指令異常:終止進程
        終止進程指令:終止進程
        虛擬地址異常:調整內存后重新執行指令
  • 訪管中斷:處理器請求分配外設、請求I/O等時,執行訪管指令請求OS服務引起(系統調用通過訪管指令和中斷機制實現)
處理流程:(1)程序執行訪管指令,並通過適當方式指明系統調用號
                  (2)通過中斷機制進入訪管中斷處理程序,現場信息被保護到核心棧,按功能號實現跳轉
                  (3)通過系統調用入口地址表找到相應中斷服務例程的入口地址
                  (4)執行中斷服務例程,正常情況下載結束后返回系統調用的下一條指令繼續執行
  • I/O中斷事件:來源於外圍設備報告I/O狀態的中斷事件
I/O操作正常完成:把等待傳輸的下一個進程設置為就緒態,讓它占有設備和通道並啟動數據傳輸
I/O操作發生故障:先向設備發命令索取狀態字,分析產生故障的確切原因,再進行復執或請求人工干涉
I/O操作發生異常:分析情況采取相應措施,向操作員報告。
設備報到、設備結束:調整設備表
  • 時鍾中斷:由外圍設備發出的信號引起的中斷事件
絕對時鍾:硬件時鍾,按照固定周期發出中斷。系統設備絕對時鍾寄存器,開機后定時地把寄存器內容加1(可根據開機時間推測當前時間)
間隔時鍾:可通過系統調用設置間隔時鍾掛起、通過程序設置間隔時鍾寄存器的初值,每個時間切換點將其內容減1,為0時產生間隔時鍾中斷,喚醒掛起的進程
 
中斷系統是計算機系統中響應和處理中斷的系統,包括硬件子系統和軟件子系統兩部分
中斷響應和中斷處理的結果就是調出相應的中斷服務例程並執行
中斷響應由硬件子系統完成;中斷處理由軟件子系統完成
在指令執行周期最后增加一個微操作,以響應中斷
計算機系統中發現並響應中斷/異常的硬件裝置稱為中斷裝置
由於中斷源的多樣性,硬件實現的中斷裝置有多種,分別處理不同類型的中斷,這些中斷裝置因計算機而異,通常有:
  • 處理器內的異常:由指令的控制邏輯和實現線路發現和響應,相應機制稱為陷阱
處理器外中斷響應和處理器內異常響應的區別:通常在指令執行結束時查詢有無中斷請求,有則立即響應;而異常發生在指令執行過程中,一旦發現則馬上處理
  • 請求OS服務的系統異常:處理器執行陷入指令時直接觸發,相應機制稱為系統陷阱
陷阱與系統陷阱是指令的邏輯和實現線路的一部分
執行指令出現異常后,會根據異常情況轉向操作系統的異常處理程序;出現虛擬地址異常后,需要重新執行指令,往往越過陷阱獨立設置頁面異常處理程序;執行陷入指令后,越過陷阱處理,觸發系統陷阱,激活系統調用處理程序
  • 處理器外的中斷:由中斷控制器發現和響應
 
 
多重中斷處理:
不同類型的操作系統有不同的中斷響應優先級(當計算機同時檢測到多個中斷時, 中斷裝置響應中斷的順序,由中斷查詢程序或硬件判優電路決定),當有多個要響應的中斷源時,有以下兩種方法決定選哪一個:
  • 軟件方法:編寫一個查詢程序,依據優先級順序從高到低進行查詢,一旦發現中斷請求則轉入相應中斷事件處理程序
  • 硬件方法:根據排定的優先級順序做一個硬件鏈式排隊器,當產生中斷事件時屏蔽所有比它優先級低的中斷
當計算機響應中斷后,在中斷處理過程中,可以再響應其他中斷。操作系統是性能攸關程序系統,且中斷響應處理有硬件要求,考慮系統效率和實現代價問題,中斷的嵌套處理應限制在一定層數內(如3層)
中斷處理優先級----由中斷服務程序各自的中斷屏蔽字來動態設定,反映本中斷與其它中斷間的關系。
單重中斷不允許在中斷處理時被新的中斷打斷,因而直到中斷返回前才會開中斷。因此單重中斷系統無需設置中斷屏蔽字。
多重中斷處理處在開中斷狀態時,可被新的處理優先級更高的中斷打斷,從而使中斷可以嵌套處理,中斷的嵌套處理改變了中斷處理的次序,先響應的有可能后處理
  • 串行處理:XY兩個中斷同時發生,先響應X,因Y被屏蔽,繼續處理X,再響應並處理Y
  • 嵌套處理:XY兩個中斷同時發生,根據中斷優先級,先響應X;因未屏蔽Y,再響應並處理Y;Y處理完成后再處理X。
  • 即時處理:在運行中斷處理程序時,如果出現程序性中斷事件則表明中斷處理程序有異常,應立刻響應並進行處理

嵌套中斷處理舉例:
利用棧實現了中斷的嵌套處理。
圖中,中斷處理優先級的順序是:3# > 2# > 1#
1# 對 2# 開放(不屏蔽)
2# 對 3# 開放(不屏蔽)
 
綜上,決定中斷處理次序的因素:
  • 中斷屏蔽可以使中斷裝置不響應某些中斷
  • 中斷響應優先級決定了中斷裝置響應中斷的次序
例如一種可能的處理次序為:處理機硬件故障中斷事件、自願性中斷事件、程序性中斷事件、時鍾中斷等外部中斷事件、輸入輸出中斷事件、重啟動和關機中斷事件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM