中斷處理

中斷處理

從查詢式的傳輸過程可以看出,它的優點是硬體開銷小,使用起來比較簡單。但在此方式下,CPU要不斷地查詢外設的狀態,當外設未準備好時,CPU就只能循環等待,不能執行其它程式,這樣就浪費了CPU的大量時間,降低了主機的利用率。 為了解決這個矛盾,我們提出了中斷傳送方式,即當CPU進行主程式操作時,外設的數據已存入輸入連線埠的數據暫存器;或連線埠的數據輸出暫存器已空,由外設通過接口電路向CPU發出中斷請求信號,CPU在滿足一定的條件下,暫停執行當前正在執行的主程式,轉入執行相應能夠進行輸入/輸出操作的子程式,待輸入/輸出操作執行完畢之後CPU即返回繼續執行原來被中斷的主程式。這樣CPU就避免了把大量時間耗費在等待、查詢狀態信號的操作上,使其工作效率得以大大地提高。 能夠向CPU發出中斷請求的設備或事件稱為中斷源。而對其的處理方式即中斷處理.

基本介紹

  • 中文名:中斷處理
  • 領域:計算機作業系統
中斷處理,中斷向量,詳細內容,中斷處理過程,請求中斷,中斷回響,關閉中斷,保護斷點,中斷源識別,保護現場,中斷服務,恢復現場,中斷返回,

中斷處理

當CPU(中央處理器)執行一條現行指令的時候,如果外設向CPU發出中斷請求,那么CPU在滿足回響的情況下,將發出中斷回響信號,與此同時關閉中斷,表示CPU不在受理另外一個設備的中斷。這時,CPU將尋找中斷請求源是哪一個設備,並保存CPU自己的程式計數器(PC)的內容。然後,他將轉移到處理該中斷源中斷服務程式。CPU在保存現場信息,設備服務(如交換數據)以後,將恢復現場信息。在這些動作完成以後,開放中斷,並返回到原來被中斷的主程式的下一條指令。

中斷向量

詳細內容

最近在研究arm 對其啟動一直有一點不太明白。在上電啟動後,系統應該從跳入0地址異常中斷處執行,然而我們一般將代碼燒寫到SDRAM中0xc000000的地址。這裡的0xc000000並非0x00000000上電復位地址,為什麼卻可以啟動,跳到復位程式處執行.
AREA Boot ,CODE, READONLYENTRYB ResetHandlerB UndefHandlerB SWIHandlerB PreAbortHandlerB DataAbortHandlerBB IRQHandlerB FIQHandler0004,但實際卻不是這樣
同時 arm是32位處理器,PC指針是32位,按理說中斷向量地址應該也是32位,也就是4個byte,加上B這條指令,應該也是一個32bit的指令,總共就應該是8個byte,那么一個中斷向量,如B ResetHandler,就應該是占0x00000000~0x00000008,而不是0x00000000~0x0000

中斷處理過程


微機系統中,對於外部中斷,中斷請求信號是由外部設備產生,並施加到CPU的NMI或INTR引腳上,CPU通過不斷地檢測NMI和INTR引腳信號來識 別是否有中斷請求發生。對於內部中斷,中斷請求方式不需要外部施加信號激發,而是通過內部中斷控制邏輯去調用。無論是外部中斷還是內部中斷,中斷處理過程 都要經歷以下步驟: 請求中斷→回響中斷→關閉中斷→保留斷點→中斷源識別→保護現場→中斷服務子程式→恢復現場→中斷返回。

請求中斷

當某一中斷源需要CPU為其進行中斷服務時,就輸出中斷請求信號,使中斷控制系統的中斷請求觸發器置位,向CPU請求中斷。系統要求中斷請求信號一直保持到CPU對其進行中斷回響為止。

中斷回響

CPU對系統內部中斷源提出的中斷請求必須回響,而且自動取得中斷服務子程式的入口地址,執行中斷 服務子程式。對於外部中斷,CPU在執行當前指令的最後一個時鐘周期去查詢INTR引腳,若查詢到中斷請求信號有效,同時在系統開中斷(即IF=1)的情 況下,CPU向發出中斷請求的外設回送一個低電平有效的中斷應答信號,作為對中斷請求INTR的應答,系統自動進入中斷回響周期。

關閉中斷

CPU回響中斷後,輸出中斷回響信號,自動將狀態標誌暫存器FR或EFR的內容壓入堆疊保護起來,然後將FR或EFR中的中斷標誌位IF與陷阱標誌位TF清零,從而自動關閉外部硬體中斷。因為CPU剛進入中斷時要保護現場,主要涉及堆疊操作,此時不能再回響中斷,否則將造成系統混亂。

保護斷點

保護斷點就是將CS和IP/EIP的當前內容壓入堆疊保存,以便中斷處理完畢後能返回被中斷的原程式繼續執行,這一過程也是由CPU自動完成。

中斷源識別

當系統中有多個中斷源時,一旦有中斷請求,CPU必須確定是哪一個中斷源提出的中斷請求,並由中斷控制器給出中斷服務子程式的入口地址,裝入CS與IP/EIP兩個暫存器。CPU轉入相應的中斷服務子程式開始執行。

保護現場

主程式和中斷服務子程式都要使用CPU內部暫存器等資源,為使中斷處理程式不破壞主程式中暫存器的內容,應先將斷點處各暫存器的內容壓入堆疊保護起來,再進入的中斷處理。現場保護是由用戶使用PUSH指令來實現的。

中斷服務

中斷服務是執行中斷的主體部分,不同的中斷請求,有各自不同的中斷服務內容,需要根據中斷源所要完成的功能,事先編寫相應的中斷服務子程式存入記憶體,等待中斷請求回響後調用執行。

恢復現場

當中斷處理完畢後,用戶通過POP指令將保存在堆疊中的各個暫存器的內容彈出,即恢復主程式斷點處暫存器的原值。

中斷返回

在中斷服務子程式的最後要安排一條中斷返回指令IRET,執行該指令,系統自動將堆疊內保存的 IP/EIP和CS值彈出,從而恢復主程式斷點處的地址值,同時還自動恢復標誌暫存器FR或EFR的內容,使CPU轉到被中斷的程式中繼續執行。

相關詞條

熱門詞條

聯絡我們