中斷被觸發後首先通知到的是cpu
1.cpu需要判斷自己當前所處的模式,根據cpl暫存器的值執行不同操作。如果cpl表明目前正處於核心態,則不需要作切換,相反,如果cpl表明目前是使用者態,那麼需要將自己標為標為核心態。當然,在標記自己之前,必然會存在一些暫存器的儲存以便日後恢復。
2. 需要做一些現場保護工作,就是把當前的暫存器存起來以便恢復。這個是跟使用者態和核心態無關的,而是cpu當前所處的乙個狀態的資訊儲存。
3. 終於進入真正的中斷了,cpu落到了中斷向量表上,這裡有一段匯程式設計序,根據中斷的型別跳轉到不同的系統中斷號(irq),這裡所說的irq是linux定義的乙個中斷對映表了。
4. 已經到達具體的中斷號的程式裡面了。首先中斷次數統計+1, 然後,還記得sa_interrupt, shr_interrupt嗎?對了,中斷註冊時設定的中斷型別。這裡就根據中斷型別的不同,選擇中斷繼續開啟(共享)還是中斷暫時關閉(快速),這裡會呼叫類似sti這樣的底層函式來控制中斷的使能與否(os級別的使能啦,與真正的硬體使能是兩回事)。
5. ok,呼叫註冊時的中斷控制代碼了。
6. 執行完畢後,中斷次數統計-1。
7. 中斷已經處理完畢,要返回了。這時候出現了linux特有的可能發生排程的時機,這個要與step1對應起來了。
7.1 如果原來的cpl標記是核心態的,那麼直接恢復暫存器後返回了。
7.2 如果原來的cpl標記是使用者態的,那麼並不直接就恢復暫存器返回使用者態的,而是在恢復前根據need_scheduled變數標誌呼叫schedule()函式,這個是linux指定的幾個排程時機之一。
8. 整個過程完畢了,以上的過程並沒有講述到軟中斷,實際上在6執行完畢後,是有可能會執行軟中斷的,軟中斷是一種延時處理中斷事件的方法,具體過程再議。
Linux中斷處理過程
如圖所示,完整的中斷系統由兩部分組成 硬體電路和軟體處理。1.硬體電路產生irq訊號。2.可程式設計中斷控制控制器 pic 收集irqn值,轉換成相應的向量。3.pic將中斷向量由int傳送到cpu,進入軟體中斷處理。1.初始化階段向linux核心註冊中斷處理程式。2.中斷發生時,通過中斷描述符表i...
中斷處理過程
部分摘自 中斷 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式...
中斷及中斷處理過程
1.中斷和異常的概念區別 intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。這是中斷和異常的共同點。不同點在於 中斷 interrupt 是非同步的事件,典型的比如由i o裝置觸發 異常 exception 是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。中斷又可以...