6 中斷和異常

2021-10-24 16:46:28 字數 2183 閱讀 7395

問題:

早期的計算機各程式只能序列執行,系統資源利用率低。

解決:

發明了作業系統,引入中斷機制,實現多道程式併發執行。

本質:

傳送中斷意味著需要作業系統的介入,開展管理工作。

將多道程式(3個程式)同時放入到記憶體,各個程式併發執行:

程序1在使用者態下執行,一段時間後cpu收到計時部件發出的中斷訊號,切換為核心態對中斷進行處理。

cpu切換到核心態,把cpu使用許可權交給作業系統,作業系統核心負責對中斷訊號進行處理。

作業系統發現剛才的中斷訊號是告訴它時間片已到,則os決定程序1的時間片已用完,換程序2執行。

完成這一系列工作後,os會把cpu的使用權交還給使用者程序,程序2在使用者態下開始執行。

程序2執行一段時間後可能發出系統呼叫(內中斷訊號),請求輸出(特權指令,不允許使用者程序直接使用)。cpu切換為核心態,對中斷進行處理。

cpu進入核心態,os核心負責對中斷訊號進行處理。

由於程序2要等待i/o完成,程序2暫停執行,換程序3執行。

完成這一系列工作後,os會把cpu的使用權交還給使用者程序,程序3在使用者態下開始執行。此時輸出裝置在os要求下也會並行地工作,當i/o完成,裝置向cpu發出中斷訊號。

cpu收到i/o裝置發來的中斷訊號,切換為核心態對中斷進行處理。

os核心負責對中斷訊號進行處理。發現程序2地i/o操作完成,讓程序2恢復執行,完成後續工作。

特點:當中斷發生時,cpu立即進入核心態

當中斷發生後,當前執行的程序暫停執行,並由os核心對欄位進行處理

對不同的中斷訊號,會進行不同的處理

概念:

中斷指在程式執行過程中遇到急需處理的事件時,暫時中止現行程式在cpu上的執行,轉而執行相應的事件處理程式,等待處理完成後再返回斷點或排程其他程式執行的過程。

使用者態、核心態之間的切換是怎麼實現的?

使用者態->核心態:通過中斷實現。並且中斷是唯一的途徑。

核心態->使用者態:通過執行乙個特權指令,將psw的標誌位設為「使用者態」

內外中斷的區別:外中斷的處理過程: 中斷

異常與cpu非同步,cpu對中斷的響應完全是被動的

與cpu同步,允許指令在執行期間(可多次)響應異常

中斷的發生與cpu的狀態無關,可以發生在使用者態和核心態

大部分異常發生在使用者態,核心態內唯一發生的異常是「缺頁異常」

中斷處理過程中不能被阻塞:中斷要被快速處理,一邊響應其他中斷訊號

異常處理過程可以阻塞:異常處於被打斷的當前程序上下文中,所提供的服務是當前程序所需要的

中斷允許發生巢狀

異常大多為一重

中斷處理的過程不會被一場打斷

異常處理的過程可能被中斷打斷

中斷事件處理原則:

硬體故障中斷

程式性中斷

語法錯誤:編譯程式發現並報錯

邏輯錯誤:測試程式發現並報錯

程式執行過程中產生異常:如定點溢位等

i/o中斷

i/o操作發生故障:索取狀態字,分析股作原因,再進行復執或請求人工干預

i/o操作發生異常:分析情況採取相應措施,跟操作員報告

裝置報到或裝置結束:os修改系統資料結構中相應裝置的狀態

訪管中斷

程式執行訪管指令,通過適當方式指明系統呼叫號

通過中斷機制進入訪管中斷處理程式,現場資訊被保護到核心棧,按功能號實現跳轉

通過系統呼叫入口位址表找到相應中斷服務例程的入口位址

執行中斷服務例程,正常情況下在結束後返回系統呼叫的下一條指令繼續執行

時鐘中斷

中斷優先順序:中斷設定所預設的相應順序

中斷遮蔽:禁止cpu響應中斷或禁止中斷產生

多重中斷事件處理:

6 中斷系統

外部中斷0實驗 include reg52.h 此檔案中定義了微控制器的一些特殊功能暫存器 typedef unsigned int u16 對資料型別進行宣告定義 typedef unsigned char u8 sbit k3 p3 2 定義按鍵k3 sbit led p2 0 定義p20口是l...

Linux 核心學習 6 中斷和異常處理

配置功能選項 中斷流程 連線ioapic引腳的裝置觸發中斷 檢測delivery status是否為0,不是0則等待,否則設其為1 sent pending 將中斷傳送至對應的cpu cpu響應中斷 對於level觸發的中斷,設定irr為1,並等待cpu觸發eoi,再將irr復位0 delivery...

5 中斷和繼續

info program 顯示程式狀態資訊 是否在執行,什麼程序,為何中斷。5.1 斷點,監視點,捕獲點 斷點 以行號,函式名或程式的絕對位址中斷,某些系統可以在可執行程式執行前,在共享庫里設定斷點。監視點 特殊的斷點,在表示式的值改變的時候中斷程式。捕獲點 特殊的斷點,用來在某些事件發生時中斷程式...