嵌入式100題(76):中斷和異常的區別


中斷和異常的區別

1、異常:

  是指CPU內部出現的中斷,即在CPU執行特定指令時出現的非法情況。同時異常也稱為同步中斷,因此只有在一條指令執行后才會發出中斷,不可能在指令執行期間發生異常。

  產生的原因:

  •     程序的錯誤產生的,編程異常通常叫做軟中斷(eg:除數為0)
  •     內核必須處理的異常條件產生的(eg:缺頁)

  產生的目的:

     Linux利用異常來達到兩個截然不同的目的:

  •     給進程發送一個信號以通報一個反常情況
  •     管理硬件資源

    對於第一種情況,例如,如果進程執行了一個被0除的操作,CPU則會產生一個“除法錯誤”異常,並由相應的異常處理程序向當前進程發送一個SIGFPE信號。當前進程接收到這個信號后,就要采取若干必要的步驟,或者從錯誤中恢復,或者終止執行(如果這個信號沒有相應的信號處理程序)。 

    對於第二種情況,內核使用兩種異常來有效地管理硬件資源,相應的處理程序也就更復雜。在這種情況下,異常並不表示一種錯誤情況:

  •     用“設備不可用”異常來推遲裝載浮點寄存器。
  •     用“缺頁”異常推遲把新頁框分配給進程。

     異常又分為故障和陷阱。

  產生都不使用中斷控制器,中斷號由指令直接給出。不能被屏蔽。

  異常沒有自己的進程上下文,會用到當前進程的進程上下文。

  在CPU執行一個異常處理程序時,就不再響應其他異常和中斷請求服務。如果此時發生了一個異常,CPU不能去響應它,又不能把它的信息丟失該怎么辦呢?這是就用到了堆棧,把所有的信息壓入棧。等當前異常處理后,才從堆棧中取出信息再響應剛才的異常。

  X86處理處理器中大約有20種異常。Linux內核必須為每種異常提供一個專門的異常處理程序。

2、中斷:

  也稱為異步中斷。因此它是由其他硬件設備依照CPU時鍾信號隨機產生,即意味着中斷能在指令之間發生。

  中斷主要是響應外部硬件設備的。

  產生通過中斷控制器,中斷號是由中斷控制器提供的(NMI硬中斷中斷號系統指定為02H)。中斷又分為外部可屏蔽中斷(INTR)和外部非屏蔽中斷(NMI)。

  •     所用I0設備產生的中斷請求均引起可屏蔽中斷。
  •     硬件故障引起的故障則產生非屏蔽中斷。

  中斷使用自己的中斷上下文,原來的進程上下文保持不變,而且可以返回中斷之前所作的事件。

  在CPU執行一個異常處理程序時,就不再響應其他異常和中斷請求服務.如果此時產生多個非屏蔽中斷時,CPU的處理方法跟異常處理方法一樣,使用堆棧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM