【軟件開發底層知識修煉】二 深刻淺出處理器之二 中斷的概念與意義

學習交流加微信

  • 我的qq: 1126137994
  • 我的微信: liu1126137994
  • 學習交流資源分享qq羣: 962535112

本篇文章咱們學習中斷的概念與意義。本片文章只學習中斷概念與意義,並不深刻研究中斷向量表與ISR中斷服務程序的實現。同時本片文章講解一個與中斷有關的應用:斷點調試。固然具體的斷點調試方法會在後面講解,本次只是說明中斷在斷點調試中的應用。函數

一、中斷的概念與意義

1.二、 中斷的概念

  • 中斷是一種處理器與外設進行通訊的機制(在咱們學習了信號機制,會發現不必定是與外設之間)
  • 外設經過產生中斷,向處理器告知,外部有重要事件發生
  • 處理器收到中斷後,須要響應中斷(具體如何響應見後面內容)

上面只是中斷的簡單概念。舉個例子,咱們點擊鼠標的時候,鼠標這個外設會產生一箇中斷,當CPU收到這個中斷的時候,CPU會響應這個中斷,進而執行ISR(中斷服務程序),在中斷服務程序中確定會調用鼠標的驅動模塊,從而在電腦上咱們才能看到鼠標的點擊效果。工具

那麼什麼是中斷服務程序呢(ISR)?學習

  1. 首先中斷服務程序會從外設中讀取外設的中斷寄存器,從而得到中斷的類型
  2. 而後根據中斷類型,設計具體的處理邏輯(後面的學習中咱們會發現其實是經過中斷向量表來選取具體的處理邏輯)
  3. 中斷處理完畢後,還須要清除外設中的中斷寄存器內容
  4. 而後清除CPU中的中斷標識位
  5. 最後還須要恢復CPU中本該執行的指令

下面看一個圖示來表示一箇中斷產生的過程: 設計

在這裏插入圖片描述

  • 步驟一外設產生中斷
  • 步驟二要先把當前正在執行的程序的上下文保存(好比通用寄存器的值)
  • 步驟三四讀取外設中斷寄存器的值,得到中斷類型
  • 步驟五執行相應的中斷處理程序
  • 步驟六清除外設的中斷寄存器的值
  • 步驟七清除CPU的中斷標識位
  • 步驟八恢復當前須要執行程序的上下文環境

那麼,從程序的角度來考慮,中斷服務程序(ISR)有哪些特徵呢?調試

咱們知道,中斷服務程序執行完以後,須要再次回到以前的程序繼續執行,因此ISR不能有返回值(想想你有返回值獲得話,誰來接收這個返回值呢?),而且,沒有參數傳遞!由於前期已經通斷中斷向量表來選取了特定類型的處理邏輯,此處無需再讓中斷的類型當作參數傳遞來決定如何設計處理邏輯,因此無需參數。同時,對於這種打斷程序運行的,好比後面的信號,程序最好不要太長,容易產生錯誤。因此ISR最好短小精悍,爲了可以快速結束,最好少作浮點運算。cdn

  • 不能有返回值,不能有參數傳遞
  • 儘可能短小高效,避免浮點運算

1.二、中斷的意義

  • 應用程序沒必要關心中斷的處理與發生
  • 中斷服務程序也不用關心應用程序的狀態
  • 中斷是上層應用與底層代碼的分界線
    在這裏插入圖片描述

1.三、中斷的類型

  • 硬中斷blog

    • 經過處理器的中斷信號線產生的中斷(鼠標按一下產生的中斷,經過中斷信號線發送給處理器)
  • 軟中斷事件

    • 經過非法指令或者特殊指令陷入的中斷(好比系統調用也是一種軟中斷,它就是經過特殊指令Int 0x80陷入內核,也能夠看作一種中斷。再好比後面會學習的信號,也是一種中斷)

1.四、中斷的優先級

好比此時有好幾個中斷信號產生,好比你的電腦正在運行微博程序,你點擊鼠標,立馬有反應,這說明什麼?說明鼠標的優先級比微博程序的優先級高。其實,任何ISR的優先級,都比應用程序的優先級高。而中斷中,也分爲不一樣的優先級,高優先級的中斷會優先獲得CPU的處理,且一箇中斷ISR在運行時,若是再來一個比它優先級高的中斷,這個高優先級的中斷會打斷那個正在執行的中斷程序。圖片

  • 中斷優先級

    1. 多箇中斷同時出現時,處理器優先響應高優先級的中斷
    2. 低優先級中斷的ISR執行時,能夠被高優先級的中斷再次打斷
    3. ISR比上層應用程序的優先級都高

二、中斷的應用-斷點調試

2.二、什麼是程序的斷點?

你們都知道斷點調試。程序的斷點,其實就是一個指令的地址。這個指令的地址,是調試工具(例如GDB)讓代碼中止執行時候的位置。當你設置斷點後,程序會在你設置的斷點處中止執行。而後去執行你的調試工具裏面的相應程序,那麼接下來你就可使用調試工具來獲取程序的相應信息,好比上下文環境,棧信息等

2.二、 程序斷點的實現原理

程序斷點的實現原理,依賴於CPU的中斷機制。包括CPU的硬中斷機制與軟中斷機制。

說的通俗一點,就是將斷點處的指令替換爲中斷觸發指令,再也不繼續執行當前程序,而是去執行中斷服務程序ISR,而後ISR再將CPU控制權交給你的調試工具的處理程序。

  • 程序斷點的實現原理

    1. 獲取源程序指定行對應的代碼地址(指令地址)
    2. 保存當前程序的上下文環境信息
    3. 把該指令地址處的指令,替換爲中斷觸發指令
    4. 在中斷服務程序ISR中將CPU控制權交給調試工具的處理程序
    5. 調試程序開始作相應處理(好比能夠讀取源程序的上下文信息或者棧信息)
    6. 調試程序處理完後,將以前指令地址處的指令還原
    7. 恢復以前程序的上下文信息
    8. 源程序繼續從斷點處執行程序

下面來看一張圖理解斷點的實現原理

在這裏插入圖片描述

其中中斷觸發指令,被CPU執行後,OS會向調試程序發送signal,signal後面會講。調試程序收到signal,會執行響應的處理函數handle。

以上只是大體講原理,沒有深刻研究源碼。

三、總結

本篇文章要學會:

  • 中斷的概念與意義
  • 中斷的類型(硬中斷與軟中斷)
  • 中斷的應用-斷點與斷點的實現原理
相關文章
相關標籤/搜索