學習交流加微信
- 我的qq: 1126137994
- 我的微信: liu1126137994
- 學習交流資源分享qq羣: 962535112
本篇文章咱們學習中斷的概念與意義。本片文章只學習中斷概念與意義,並不深刻研究中斷向量表與ISR中斷服務程序的實現。同時本片文章講解一個與中斷有關的應用:斷點調試。固然具體的斷點調試方法會在後面講解,本次只是說明中斷在斷點調試中的應用。函數
上面只是中斷的簡單概念。舉個例子,咱們點擊鼠標的時候,鼠標這個外設會產生一箇中斷,當CPU收到這個中斷的時候,CPU會響應這個中斷,進而執行ISR(中斷服務程序),在中斷服務程序中確定會調用鼠標的驅動模塊,從而在電腦上咱們才能看到鼠標的點擊效果。工具
那麼什麼是中斷服務程序呢(ISR)?學習
下面看一個圖示來表示一箇中斷產生的過程: 設計
那麼,從程序的角度來考慮,中斷服務程序(ISR)有哪些特徵呢?調試
咱們知道,中斷服務程序執行完以後,須要再次回到以前的程序繼續執行,因此ISR不能有返回值(想想你有返回值獲得話,誰來接收這個返回值呢?),而且,沒有參數傳遞!由於前期已經通斷中斷向量表來選取了特定類型的處理邏輯,此處無需再讓中斷的類型當作參數傳遞來決定如何設計處理邏輯,因此無需參數。同時,對於這種打斷程序運行的,好比後面的信號,程序最好不要太長,容易產生錯誤。因此ISR最好短小精悍,爲了可以快速結束,最好少作浮點運算。cdn
硬中斷blog
軟中斷事件
好比此時有好幾個中斷信號產生,好比你的電腦正在運行微博程序,你點擊鼠標,立馬有反應,這說明什麼?說明鼠標的優先級比微博程序的優先級高。其實,任何ISR的優先級,都比應用程序的優先級高。而中斷中,也分爲不一樣的優先級,高優先級的中斷會優先獲得CPU的處理,且一箇中斷ISR在運行時,若是再來一個比它優先級高的中斷,這個高優先級的中斷會打斷那個正在執行的中斷程序。圖片
中斷優先級
你們都知道斷點調試。程序的斷點,其實就是一個指令的地址。這個指令的地址,是調試工具(例如GDB)讓代碼中止執行時候的位置。當你設置斷點後,程序會在你設置的斷點處中止執行。而後去執行你的調試工具裏面的相應程序,那麼接下來你就可使用調試工具來獲取程序的相應信息,好比上下文環境,棧信息等
程序斷點的實現原理,依賴於CPU的中斷機制。包括CPU的硬中斷機制與軟中斷機制。
說的通俗一點,就是將斷點處的指令替換爲中斷觸發指令,再也不繼續執行當前程序,而是去執行中斷服務程序ISR,而後ISR再將CPU控制權交給你的調試工具的處理程序。
程序斷點的實現原理
下面來看一張圖理解斷點的實現原理
其中中斷觸發指令,被CPU執行後,OS會向調試程序發送signal,signal後面會講。調試程序收到signal,會執行響應的處理函數handle。
以上只是大體講原理,沒有深刻研究源碼。
本篇文章要學會: