問題:
早期的計算機各程式只能序列執行,系統資源利用率低。
解決:
發明了作業系統,引入中斷機制,實現多道程式併發執行。
本質:
傳送中斷意味著需要作業系統的介入,開展管理工作。
將多道程式(3個程式)同時放入到記憶體,各個程式併發執行:特點:當中斷發生時,cpu立即進入核心態程序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恢復執行,完成後續工作。
當中斷發生後,當前執行的程序暫停執行,並由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 斷點,監視點,捕獲點 斷點 以行號,函式名或程式的絕對位址中斷,某些系統可以在可執行程式執行前,在共享庫里設定斷點。監視點 特殊的斷點,在表示式的值改變的時候中斷程式。捕獲點 特殊的斷點,用來在某些事件發生時中斷程式...