異常和中斷會暫停程序以響應(yīng)硬件或軟件中的意外事件。中斷是異步事件,異常是同步事件,但是中斷和異常之間的區(qū)別也取決于具體情況。例如,x86 機器和 ARM 處理器之間以及 CISC 和 RISC 處理器之間的定義不同。
本常見問題解答首先概述了中斷的一般定義和各種類型的異常,然后比較了幾種計算環(huán)境中定義的差異以及如何優(yōu)先處理中斷。
異常有時被稱為“陷阱”,可以由執(zhí)行函數(shù)時進程中的異?;蝈e誤觸發(fā)。除零、斷點或無效內(nèi)存訪問等情況與程序的執(zhí)行同步發(fā)生。它們可能會導致異常,從而改變處理器的操作。一旦異常原因得到處理,處理器就會返回到之前的活動。另一方面,中斷是異步發(fā)出的并且可以隨時到達。例如,用戶擊鍵的產(chǎn)生會啟動中斷。
異常是軟件驅(qū)動中斷的子集,而中斷可以源自軟件或硬件源。當異常發(fā)生時,異常處理程序執(zhí)行異常類型定義的特定功能。同樣,中斷會觸發(fā)處理器的特定例程,例如在擊鍵到達時及時處理它們。
在基本層面上,異常(陷阱)被定義為源自軟件的同步事件,而中斷是由外部硬件引起的異步事件。
在 MCU 中,中斷可以指示硬件設(shè)備中需要及時關(guān)注的電子或物理變化。中斷用于實時計算以支持多任務(wù)處理。大多數(shù) MCU 都是中斷驅(qū)動設(shè)備。MCU 中的特定總線控制線通過 INT 引腳處理中斷的接收。
INT引腳連接多個外部設(shè)備,例如鍵盤;網(wǎng)絡(luò)互連卡、USB 接口等。中斷控制器通知處理器哪個設(shè)備發(fā)出中斷,使處理器能夠執(zhí)行必要的中斷處理程序。在某些情況下,中斷會導致 CPU 開始執(zhí)行中斷向量表中具有特定指令的代碼。中斷可能源自硬件、軟件或其他處理器 (圖 1) 。另一種對中斷進行分類的方法是按來源分類:
- CPU內(nèi)部觸發(fā)異常
- 由外部硬件設(shè)備觸發(fā)的中斷
- 由軟件源觸發(fā)的中斷。
- 處理器間中斷由多任務(wù)或?qū)崟r計算環(huán)境中的不同CPU 觸發(fā)。
中斷可能源自外部硬件、處理器或另一個處理器(在多核環(huán)境中)或軟件。
有時根據(jù)情況的嚴重程度將異常分為兩類:
中止會停止代碼執(zhí)行,直到條件得到處理為止,并且中止是由硬件故障、被零除錯誤等重大問題引起的。
陷阱需要被處理,但不會阻止代碼執(zhí)行,并且用于虛擬內(nèi)存管理、程序調(diào)試和類似功能。
處理中斷
異?;蛑袛嗵幚硗ǔ7譃槿齻€階段:
- 當處理器識別出異常的來源時,就會發(fā)生“識別”。
- 當處理程序控制指令執(zhí)行、保存上下文并且處理程序例程開始在管理員模式(有時稱為特權(quán)狀態(tài))下運行時,將“發(fā)生”異常或中斷。
- 異?;蛑袛唷疤幚怼卑l(fā)生在管理程序模式下,并持續(xù)到處理器恢復執(zhí)行程序代碼為止。
定義不同
中斷可以分為異常、陷阱、故障和中止,但事情并沒有那么簡單。這取決于上下文和所考慮的特定平臺。在各種環(huán)境中,“陷阱”可以指任何中斷、軟件中斷或同步軟件中斷。此外,該術(shù)語僅適用于由名稱中帶有“trap”的指令產(chǎn)生的中斷或啟動監(jiān)視程序或調(diào)試器的斷點。中斷在 x86 和 ARM 環(huán)境中具有不同的分類。
在x86環(huán)境中,存在硬件中斷和軟件異常,分為三種不同類型:故障、陷阱和中止。x86 環(huán)境中的中斷由任何 I/O 設(shè)備異步觸發(fā)。當程序被“中斷”時,它可以重新啟動而不會丟失功能?!肮收稀币矔е驴芍匦聠拥那闆r,但它是與軟件執(zhí)行相關(guān)的同步事件?!跋葳濉本拖褚粋€錯誤,但具有不同的返回地址。在陷阱中,返回地址指向陷阱指令之后要執(zhí)行的指令,而在故障中,返回地址指向出錯的指令。陷阱通常用于系統(tǒng)調(diào)用?!爸兄埂笔怯蓢乐劐e誤引起的,并且通常不允許程序重新啟動。
在 ARM 架構(gòu)中,術(shù)語“異?!笨捎糜谥复蓄愋偷闹袛唷T谶@種情況下,異常被分類為硬件中斷、復位、異常生成指令和中止。ARM MCU 中的中止包括數(shù)據(jù)中止(數(shù)據(jù)訪問失?。┗蛑噶钪兄梗ㄖ噶钭x取失敗),也稱為預取中止。雖然 x86 環(huán)境中的“異?!笔峭绞录鼈冊?ARM 環(huán)境中可以是同步或異步的。此外,ARM“異?!笨梢允蔷_的,也可以是不精確的(如下一節(jié)中定義)。
RISC差異
與 CISC 架構(gòu)相比,RISC MCU 采用不同的方法來處理中斷或異常。對于設(shè)計人員來說,這些差異最初可能比 x86 和 ARM 架構(gòu)之間的差異更具挑戰(zhàn)性。RISC 機器識別四種類型的異常:
- 異步精確和不精確
- 同步精確、非精確
與其他情況一樣,異步異常可以隨時發(fā)生,而同步異常則與指令流同步。精確例外和不精確例外概念的引入是一個重要的區(qū)別:
- 精確異常具有精確定義的原因,并且通常是可恢復的。
- 不精確的異常是不可恢復的,意味著處理器無法繼續(xù)執(zhí)行程序,通常會導致災難性的故障。
同步精確是指令異常的結(jié)果。根據(jù)具體原因,保留出錯指令或下一條指令的地址,以供異常處理后使用。異常處理程序確定錯誤指令是否部分或全部完成,并確定應(yīng)如何處理它。
同步不精確異常用于 RISC-V 處理器,但在 PowerPC 設(shè)備中并不完全支持。同步不精確異常處理是針對 PowerPC 架構(gòu)中的特定浮點異常定義的。同步不精確異常的一般概念將來可能會得到更全面的實現(xiàn)。
異步精確有時稱為“可屏蔽”,可能由外部中斷、遞減器故障、系統(tǒng)管理中斷、熱管理中斷等引起。在異步精確異常期間,異常之前正在處理的指令在異常處理之前完成。當異常被清除時,下一條指令被存儲并執(zhí)行。由于這些異常是由外部設(shè)備引起的,因此在處理任何給定異常之前,可能會同時或快速連續(xù)發(fā)生多個異常。如果異常處理程序中的存儲空間不足,則可能會錯過某些異常。解決這個潛在問題的一種方法是在異常處理程序和外部設(shè)備之間包含某種形式的握手,以確保所有異常都已被接收和確認。
異步不精確,有時稱為“不可屏蔽”,例外情況僅包括系統(tǒng)重置和機器檢查。當系統(tǒng)復位發(fā)生時,CPU停止,所有內(nèi)部存儲器和寄存器復位,然后處理器重新啟動。機器檢查異常是當CPU檢測到處理器本身、內(nèi)存、I/O設(shè)備或系統(tǒng)總線中的硬件錯誤時發(fā)生的計算機硬件錯誤。對于 PowerPC 設(shè)備,軟件錯誤(例如某些無效的內(nèi)存訪問)也可能導致機器檢查異常。大多數(shù)機器檢查異常都會停止操作系統(tǒng)并需要重新啟動才能恢復操作。
識別 RISC 異常
當指令不按程序順序執(zhí)行時,異常識別尤其具有挑戰(zhàn)性。例如,PowerPC 按照嚴格的程序順序處理同步異常,即使程序流中后續(xù)的指令可能已生成了附加異常。第一個異常的處理就像前面的指令已全部執(zhí)行而后面的指令尚未執(zhí)行一樣。
當然,多個異??梢酝瑫r發(fā)生。在這種情況下,將根據(jù)特定優(yōu)先級處理異常。異步不精確異常具有最高優(yōu)先級,在此類別中,系統(tǒng)重置異常的優(yōu)先級高于機器檢查異常。接下來是按程序順序處理的同步精確異常,然后是同步不精確異常。異步精確異常的優(yōu)先級最低,外部中斷的優(yōu)先級高于內(nèi)部中斷(例如遞減器和系統(tǒng)管理中斷)。
當多個異常同時發(fā)生時,RISC 器件具有嚴格的異常處理優(yōu)先級。
概括
在基本層面上,異常被分類為中斷的子集。更具體地說,異常是源自軟件的同步事件,而中斷被定義為由外部硬件引起的異步事件。中斷和異常的定義因 x86、ARM 和 RISC 等計算架構(gòu)而異。異常和中斷的各種原因在中斷系統(tǒng)操作方面具有不同的嚴重程度。因此,要根據(jù)具體情況制定嚴格的優(yōu)先順序。
-
USB接口
+關(guān)注
關(guān)注
9文章
701瀏覽量
55634 -
ARM處理器
+關(guān)注
關(guān)注
6文章
360瀏覽量
41720 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
303瀏覽量
23716 -
中斷控制器
+關(guān)注
關(guān)注
0文章
59瀏覽量
9452 -
異常中斷
+關(guān)注
關(guān)注
0文章
9瀏覽量
1223
發(fā)布評論請先 登錄
相關(guān)推薦
評論