處理器中斷的本質,硬中斷、軟中斷、異常的區別
硬中斷,CPU外部的硬件,引入的中斷,隨機的。
軟中斷,CPU中運行的軟件執行中斷指令,,引入的中斷,預先設計的。
中斷屏蔽
硬中斷是可屏蔽的,軟中斷不可屏蔽。
中斷嵌套
硬中斷是否可以嵌套的,是否有優先級(由硬件設計體系決定)。
軟中斷不能嵌套,但相同類型的軟中斷可以在不同CPU上並行執行。
1. 中斷的由來
1956年,ERA 1103A計算機系統引入了中斷(interrupt)機制。
ERA 1103A用於接收、處理風洞試驗數據,再將數據處理結果返回給風洞,如此循環往復。但風洞數據的准備時間比較長,ERA 1103A只能處於等待狀態,這段時間被白白的浪費掉了。為了提高ERA 1103A的利用率,其引出了一條中斷線,在等待風洞數據的這段時間運行其他程序,當風洞數據到來的時通過中斷線告知ERA 1103A停止當前工作去接收風洞數據。
以上就是最初的中斷設計原型。
ERA 1103A計算機系統
2. 中斷分類
現代處理器的中斷概念變得越來越廣泛,已經不僅僅局限於外部設備中斷。
中斷存在的意義是CPU控制外部設備的同時,外部設備也可以高效的“控制CPU”。這種設計思想擴展到了外部硬件控制CPU、軟件控制CPU、CPU運行管理等三個方面。
因此,使用events
事件表示,更加貼切實際,但在平時描述中,基本上仍然采用了中斷這個詞。
events
的分類如下圖所示,主要包括中斷和異常,外部硬件控制CPU對應hardware interupt
,軟件控制CPU對應software interrupt
,CPU運行管理則對應exception
。
2.1 hardware interrupt
硬件中斷是平時接觸的最多的一類event,比如鼠標、鍵盤、網卡等等都可以產生硬件中斷。因為CPU並不知道外部硬件設備何時產生硬件中斷請求,不會提前獲知產生硬件中斷的前提,因此,硬件中斷屬於異步event。
CPU和外部IO設備通過一根或多根硬件連線,進行硬件中斷信號的傳遞。這種硬件連線可以在SoC內部實現,可以在外部PCB板上實現。
當CPU內部集成了中斷控制器IP之后,各個IO設備的中斷信號線可以在SoC內部連接到中斷控制器。如非常常見的ARM GIC,不僅可以處理外部IO設備的硬件中斷,也可以處理CPU內部之間硬件中斷。其內部結構如下圖所示:
內部GIC
外部IO設備可以通過中斷控制芯片連接到CPU,該類芯片通常稱之為PIC。
此類中斷控制芯片中最具有代表性的應該是Intel 8259,在微機原理課程中就能找到它的影子。
Intel 8259 PIC
這是為Intel 8085和Intel 8086微處理器設計的可編程中斷控制器(PIC)。8259將多個中斷輸入源組合成一個到主微處理器的單一中斷輸出,將系統中可用的中斷級別擴展到處理器芯片上的一個或兩個級別之外。在如今高性能GIC中,仍然可見這種分層次、可擴展的中斷架構設計理念。
2.2 software interrupt
假設操作系統阻止非特權代碼直接訪問系統資源,那么應用程序如何訪問這些受保護的資源呢?此時,軟件中斷就可以實現這一目的。當一個應用軟件終止或者向操作系統請求一些服務時,軟件中斷就會發生。如果說在軟件代碼中包含了系統調用,可以將software interrupt
理解為同步事件。
當CPU接收到一個軟件中斷信號時,可能會暫時將控制切換到一個中斷處理程序程序,內核中被中斷掛起的進程(例如,一個程序的運行實例)將在中斷被接受后恢復。
應用程序基於系統調用完成應用層和操作系統內核之間的通信,實現對CPU的控制。
2.3 異常
CPU異常發生在各種錯誤的情況下,如當訪問無效的內存地址或除零時,為了作出反應,產生了異常處理機制。不同架構的處理器對異常類型的定義有所不同,但核心思想是CPU工作過程遇到了不被允許的錯誤或者強制停止指令等,可以將異常做如下分類。
對於Faults
異常,通常不影響軟件代碼的繼續運行,此類異常主要包括:
除0操作
無效操作碼
設備不可用
對於Traps
異常,比較常見的就是JTAG debug。當CPU收到了debug指令后,會進入到異常模式。此類異常主要包括:
斷點
溢出
調試指令
對於Abort
異常,比較常見的就是取指異常,當從RAM中沒有正確的獲取到待執行指令時,CPU進入到Abort
異常。此類異常主要包括:
訪存錯誤
總線錯誤
cache錯誤
參考鏈接
https://mp.weixin.qq.com/s/hG2Zp8imtvTATjclsUYVEw
https://blog.csdn.net/weixin_44124323/article/details/115914946