0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

異常、陷阱和中斷有什么區(qū)別呢?

冬至子 ? 來源:坐望云起時(shí) ? 作者:坐望云起時(shí) ? 2023-09-14 15:20 ? 次閱讀

異常和中斷會(huì)暫停程序以響應(yīng)硬件或軟件中的意外事件。中斷是異步事件,異常是同步事件,但是中斷和異常之間的區(qū)別也取決于具體情況。例如,x86 機(jī)器和 ARM 處理器之間以及 CISC 和 RISC 處理器之間的定義不同。

本常見問題解答首先概述了中斷的一般定義和各種類型的異常,然后比較了幾種計(jì)算環(huán)境中定義的差異以及如何優(yōu)先處理中斷。

異常有時(shí)被稱為“陷阱”,可以由執(zhí)行函數(shù)時(shí)進(jìn)程中的異?;蝈e(cuò)誤觸發(fā)。除零、斷點(diǎn)或無效內(nèi)存訪問等情況與程序的執(zhí)行同步發(fā)生。它們可能會(huì)導(dǎo)致異常,從而改變處理器的操作。一旦異常原因得到處理,處理器就會(huì)返回到之前的活動(dòng)。另一方面,中斷是異步發(fā)出的并且可以隨時(shí)到達(dá)。例如,用戶擊鍵的產(chǎn)生會(huì)啟動(dòng)中斷。

異常是軟件驅(qū)動(dòng)中斷的子集,而中斷可以源自軟件或硬件源。當(dāng)異常發(fā)生時(shí),異常處理程序執(zhí)行異常類型定義的特定功能。同樣,中斷會(huì)觸發(fā)處理器的特定例程,例如在擊鍵到達(dá)時(shí)及時(shí)處理它們。

在基本層面上,異常(陷阱)被定義為源自軟件的同步事件,而中斷是由外部硬件引起的異步事件。

MCU 中,中斷可以指示硬件設(shè)備中需要及時(shí)關(guān)注的電子或物理變化。中斷用于實(shí)時(shí)計(jì)算以支持多任務(wù)處理。大多數(shù) MCU 都是中斷驅(qū)動(dòng)設(shè)備。MCU 中的特定總線控制線通過 INT 引腳處理中斷的接收。

INT引腳連接多個(gè)外部設(shè)備,例如鍵盤;網(wǎng)絡(luò)互連卡、USB 接口等。中斷控制器通知處理器哪個(gè)設(shè)備發(fā)出中斷,使處理器能夠執(zhí)行必要的中斷處理程序。在某些情況下,中斷會(huì)導(dǎo)致 CPU 開始執(zhí)行中斷向量表中具有特定指令的代碼。中斷可能源自硬件、軟件或其他處理器 (圖 1) 。另一種對(duì)中斷進(jìn)行分類的方法是按來源分類:

  • CPU內(nèi)部觸發(fā)異常
  • 由外部硬件設(shè)備觸發(fā)的中斷
  • 由軟件源觸發(fā)的中斷。
  • 處理器間中斷由多任務(wù)或?qū)崟r(shí)計(jì)算環(huán)境中的不同CPU 觸發(fā)。

中斷可能源自外部硬件、處理器或另一個(gè)處理器(在多核環(huán)境中)或軟件。

有時(shí)根據(jù)情況的嚴(yán)重程度將異常分為兩類:

中止會(huì)停止代碼執(zhí)行,直到條件得到處理為止,并且中止是由硬件故障、被零除錯(cuò)誤等重大問題引起的。

陷阱需要被處理,但不會(huì)阻止代碼執(zhí)行,并且用于虛擬內(nèi)存管理、程序調(diào)試和類似功能。

處理中斷

異常或中斷處理通常分為三個(gè)階段:

  • 當(dāng)處理器識(shí)別出異常的來源時(shí),就會(huì)發(fā)生“識(shí)別”。
  • 當(dāng)處理程序控制指令執(zhí)行、保存上下文并且處理程序例程開始在管理員模式(有時(shí)稱為特權(quán)狀態(tài))下運(yùn)行時(shí),將“發(fā)生”異?;蛑袛唷?/li>
  • 異?;蛑袛唷疤幚怼卑l(fā)生在管理程序模式下,并持續(xù)到處理器恢復(fù)執(zhí)行程序代碼為止。

定義不同

中斷可以分為異常、陷阱、故障和中止,但事情并沒有那么簡(jiǎn)單。這取決于上下文和所考慮的特定平臺(tái)。在各種環(huán)境中,“陷阱”可以指任何中斷、軟件中斷或同步軟件中斷。此外,該術(shù)語僅適用于由名稱中帶有“trap”的指令產(chǎn)生的中斷或啟動(dòng)監(jiān)視程序或調(diào)試器的斷點(diǎn)。中斷在 x86 和 ARM 環(huán)境中具有不同的分類。

在x86環(huán)境中,存在硬件中斷和軟件異常,分為三種不同類型:故障、陷阱和中止。x86 環(huán)境中的中斷由任何 I/O 設(shè)備異步觸發(fā)。當(dāng)程序被“中斷”時(shí),它可以重新啟動(dòng)而不會(huì)丟失功能?!肮收稀币矔?huì)導(dǎo)致可重新啟動(dòng)的情況,但它是與軟件執(zhí)行相關(guān)的同步事件?!跋葳濉本拖褚粋€(gè)錯(cuò)誤,但具有不同的返回地址。在陷阱中,返回地址指向陷阱指令之后要執(zhí)行的指令,而在故障中,返回地址指向出錯(cuò)的指令。陷阱通常用于系統(tǒng)調(diào)用?!爸兄埂笔怯蓢?yán)重錯(cuò)誤引起的,并且通常不允許程序重新啟動(dòng)。

在 ARM 架構(gòu)中,術(shù)語“異常”可用于指代所有類型的中斷。在這種情況下,異常被分類為硬件中斷、復(fù)位、異常生成指令和中止。ARM MCU 中的中止包括數(shù)據(jù)中止(數(shù)據(jù)訪問失?。┗蛑噶钪兄梗ㄖ噶钭x取失?。卜Q為預(yù)取中止。雖然 x86 環(huán)境中的“異常”是同步事件,但它們?cè)?ARM 環(huán)境中可以是同步或異步的。此外,ARM“異?!笨梢允蔷_的,也可以是不精確的(如下一節(jié)中定義)。

RISC差異

與 CISC 架構(gòu)相比,RISC MCU 采用不同的方法來處理中斷或異常。對(duì)于設(shè)計(jì)人員來說,這些差異最初可能比 x86 和 ARM 架構(gòu)之間的差異更具挑戰(zhàn)性。RISC 機(jī)器識(shí)別四種類型的異常:

  • 異步精確和不精確
  • 同步精確、非精確

與其他情況一樣,異步異??梢噪S時(shí)發(fā)生,而同步異常則與指令流同步。精確例外和不精確例外概念的引入是一個(gè)重要的區(qū)別:

  • 精確異常具有精確定義的原因,并且通常是可恢復(fù)的。
  • 不精確的異常是不可恢復(fù)的,意味著處理器無法繼續(xù)執(zhí)行程序,通常會(huì)導(dǎo)致災(zāi)難性的故障。

同步精確是指令異常的結(jié)果。根據(jù)具體原因,保留出錯(cuò)指令或下一條指令的地址,以供異常處理后使用。異常處理程序確定錯(cuò)誤指令是否部分或全部完成,并確定應(yīng)如何處理它。

同步不精確異常用于 RISC-V 處理器,但在 PowerPC 設(shè)備中并不完全支持。同步不精確異常處理是針對(duì) PowerPC 架構(gòu)中的特定浮點(diǎn)異常定義的。同步不精確異常的一般概念將來可能會(huì)得到更全面的實(shí)現(xiàn)。

異步精確有時(shí)稱為“可屏蔽”,可能由外部中斷、遞減器故障、系統(tǒng)管理中斷、熱管理中斷等引起。在異步精確異常期間,異常之前正在處理的指令在異常處理之前完成。當(dāng)異常被清除時(shí),下一條指令被存儲(chǔ)并執(zhí)行。由于這些異常是由外部設(shè)備引起的,因此在處理任何給定異常之前,可能會(huì)同時(shí)或快速連續(xù)發(fā)生多個(gè)異常。如果異常處理程序中的存儲(chǔ)空間不足,則可能會(huì)錯(cuò)過某些異常。解決這個(gè)潛在問題的一種方法是在異常處理程序和外部設(shè)備之間包含某種形式的握手,以確保所有異常都已被接收和確認(rèn)。

異步不精確,有時(shí)稱為“不可屏蔽”,例外情況僅包括系統(tǒng)重置和機(jī)器檢查。當(dāng)系統(tǒng)復(fù)位發(fā)生時(shí),CPU停止,所有內(nèi)部存儲(chǔ)器和寄存器復(fù)位,然后處理器重新啟動(dòng)。機(jī)器檢查異常是當(dāng)CPU檢測(cè)到處理器本身、內(nèi)存、I/O設(shè)備或系統(tǒng)總線中的硬件錯(cuò)誤時(shí)發(fā)生的計(jì)算機(jī)硬件錯(cuò)誤。對(duì)于 PowerPC 設(shè)備,軟件錯(cuò)誤(例如某些無效的內(nèi)存訪問)也可能導(dǎo)致機(jī)器檢查異常。大多數(shù)機(jī)器檢查異常都會(huì)停止操作系統(tǒng)并需要重新啟動(dòng)才能恢復(fù)操作。

識(shí)別 RISC 異常

當(dāng)指令不按程序順序執(zhí)行時(shí),異常識(shí)別尤其具有挑戰(zhàn)性。例如,PowerPC 按照嚴(yán)格的程序順序處理同步異常,即使程序流中后續(xù)的指令可能已生成了附加異常。第一個(gè)異常的處理就像前面的指令已全部執(zhí)行而后面的指令尚未執(zhí)行一樣。

當(dāng)然,多個(gè)異常可以同時(shí)發(fā)生。在這種情況下,將根據(jù)特定優(yōu)先級(jí)處理異常。異步不精確異常具有最高優(yōu)先級(jí),在此類別中,系統(tǒng)重置異常的優(yōu)先級(jí)高于機(jī)器檢查異常。接下來是按程序順序處理的同步精確異常,然后是同步不精確異常。異步精確異常的優(yōu)先級(jí)最低,外部中斷的優(yōu)先級(jí)高于內(nèi)部中斷(例如遞減器和系統(tǒng)管理中斷)。

當(dāng)多個(gè)異常同時(shí)發(fā)生時(shí),RISC 器件具有嚴(yán)格的異常處理優(yōu)先級(jí)。

概括

在基本層面上,異常被分類為中斷的子集。更具體地說,異常是源自軟件的同步事件,而中斷被定義為由外部硬件引起的異步事件。中斷和異常的定義因 x86、ARM 和 RISC 等計(jì)算架構(gòu)而異。異常和中斷的各種原因在中斷系統(tǒng)操作方面具有不同的嚴(yán)重程度。因此,要根據(jù)具體情況制定嚴(yán)格的優(yōu)先順序。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • USB接口
    +關(guān)注

    關(guān)注

    9

    文章

    701

    瀏覽量

    55653
  • ARM處理器
    +關(guān)注

    關(guān)注

    6

    文章

    360

    瀏覽量

    41750
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    305

    瀏覽量

    23742
  • 中斷控制器
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    9458
  • 異常中斷
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    1224
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)字地與模擬地什么區(qū)別?

    數(shù)字地與模擬地什么區(qū)別?
    發(fā)表于 09-26 17:13

    請(qǐng)問事件請(qǐng)求與中斷請(qǐng)求什么區(qū)別?

    請(qǐng)問事件請(qǐng)求與中斷請(qǐng)求什么區(qū)別???
    發(fā)表于 06-28 04:35

    STM32中斷的分類不同組之間什么區(qū)別

    常說的0-4 的分組,只不過,按照不同的分組規(guī)則,可以分為5大類:Group_0-----Group_4,不同組之間什么區(qū)別?其實(shí)就是把所有中斷按數(shù)量分成了兩大類(一類是可以被
    發(fā)表于 08-13 06:19

    時(shí)序電路與普通邏輯電路什么區(qū)別

    什么是中斷?為什么CPU要用時(shí)序電路?時(shí)序電路與普通邏輯電路什么區(qū)別?
    發(fā)表于 10-29 07:03

    一文讀懂中斷方式和輪詢操作什么區(qū)別

    一文讀懂中斷方式和輪詢操作什么區(qū)別嗎?
    發(fā)表于 12-10 06:00

    什么是中斷?系統(tǒng)異常和外部中斷什么區(qū)別

    異常的優(yōu)先級(jí)都是可編程的。每個(gè)外設(shè)都可以產(chǎn)生中斷,可以將中斷異常等價(jià),不要深究它們到底什么區(qū)別
    發(fā)表于 01-07 07:39

    vitis和vivado什么區(qū)別和聯(lián)系?

    vitis和vivado什么區(qū)別和聯(lián)系
    發(fā)表于 10-16 07:55

    51的內(nèi)部中斷源與外部中斷什么區(qū)別

    51的內(nèi)部中斷源與外部中斷什么區(qū)別?
    發(fā)表于 11-08 07:49

    中斷、異常和系統(tǒng)調(diào)用

    1、中斷的種類 由CPU外部產(chǎn)生的中斷(interrupt) 由專設(shè)指令(如INT)產(chǎn)生的陷阱 (trap)由CPU本身在執(zhí)行指令時(shí)產(chǎn)生的異常(exception) 2、X86 CPU
    發(fā)表于 11-03 22:36 ?54次下載

    FPGA和單片機(jī)什么區(qū)別

    到底FPGA和單片機(jī)什么區(qū)別?根據(jù)我的經(jīng)驗(yàn),可以用下面進(jìn)行概述。
    發(fā)表于 02-11 08:00 ?4.3w次閱讀

    hdmi與vga什么區(qū)別

    現(xiàn)在的有線連接一般都是利用HDMI和VGA這兩種接口,但HDMI和VGA接口到底什么區(qū)別?
    的頭像 發(fā)表于 01-24 13:58 ?3.9w次閱讀

    RTOS和 TSOS什么區(qū)別?

    RTOS和TSOS什么區(qū)別?
    的頭像 發(fā)表于 03-12 11:22 ?4580次閱讀

    單片機(jī)中斷與CPU的輪詢什么區(qū)別

    在單片機(jī)編程過程中,經(jīng)常會(huì)使用到中斷。那么,什么是單片機(jī)中斷,它與CPU的輪詢什么區(qū)別?在本文中,單片機(jī)開發(fā)工程師將對(duì)單片機(jī)中斷和CPU輪
    發(fā)表于 06-29 11:30 ?3621次閱讀

    type-c和普通接口什么區(qū)別?

      隨著type-c接口的普及,現(xiàn)在越來越多的電子產(chǎn)品都使用了type-c接口,那么,type-c和普通接口什么區(qū)別?
    的頭像 發(fā)表于 07-28 11:17 ?6044次閱讀
    type-c和普通接口<b class='flag-5'>有</b><b class='flag-5'>什么區(qū)別</b><b class='flag-5'>呢</b>?

    ARM中的異常中斷是如何實(shí)現(xiàn)進(jìn)入中斷程序的?如何進(jìn)入?

    ARM中的異常中斷是如何實(shí)現(xiàn)進(jìn)入中斷程序的?如何進(jìn)入? 在計(jì)算機(jī)系統(tǒng)中,異常中斷是兩個(gè)常見的概念。 在ARM中,
    的頭像 發(fā)表于 10-19 16:36 ?1041次閱讀