【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义
學習交流加
- 個人qq:
1126137994 - 個人微信:
liu1126137994 - 學習交流資源分享qq群:
962535112
上一篇文章我們學習了微處理器與微控制器的區別。點擊鏈接查看上一篇文章的內容:微處理器與微控制器
本篇文章我們學習中斷的概念與意義。本片文章只學習中斷概念與意義,并不深入研究中斷向量表與ISR中斷服務程序的實現。同時本片文章講解一個與中斷有關的應用:斷點調試。當然具體的斷點調試方法會在后面講解,本次只是說明中斷在斷點調試中的應用。
文章目錄
- 1、中斷的概念與意義
- 1.2、 中斷的概念
- 1.2、中斷的意義
- 1.3、中斷的類型
- 1.4、中斷的優先級
- 2、中斷的應用-斷點調試
- 2.2、什么是程序的斷點?
- 2.2、 程序斷點的實現原理
- 3、總結
1、中斷的概念與意義
1.2、 中斷的概念
- 中斷是一種處理器與外設進行通信的機制(在我們學習了信號機制,會發現不一定是與外設之間)
- 外設通過產生中斷,向處理器告知,外部有重要事件發生
- 處理器收到中斷后,需要響應中斷(具體如何響應見后面內容)
上面只是中斷的簡單概念。舉個例子,我們點擊鼠標的時候,鼠標這個外設會產生一個中斷,當CPU收到這個中斷的時候,CPU會響應這個中斷,進而執行ISR(中斷服務程序),在中斷服務程序中肯定會調用鼠標的驅動模塊,從而在電腦上我們才能看到鼠標的點擊效果。
那么什么是中斷服務程序呢(ISR)?
下面看一個圖示來表示一個中斷產生的過程:
- 步驟一外設產生中斷
- 步驟二要先把當前正在執行的程序的上下文保存(比如通用寄存器的值)
- 步驟三四讀取外設中斷寄存器的值,獲得中斷類型
- 步驟五執行相應的中斷處理程序
- 步驟六清除外設的中斷寄存器的值
- 步驟七清除CPU的中斷標識位
- 步驟八恢復當前需要執行程序的上下文環境
那么,從程序的角度來考慮,中斷服務程序(ISR)有哪些特征呢?
我們知道,中斷服務程序執行完之后,需要再次回到之前的程序繼續執行,所以ISR不能有返回值(想一想你有返回值得到話,誰來接收這個返回值呢?),并且,沒有參數傳遞!因為前期已經通斷中斷向量表來選取了特定類型的處理邏輯,此處無需再讓中斷的類型當做參數傳遞來決定如何設計處理邏輯,所以無需參數。同時,對于這種打斷程序運行的,比如后面的信號,程序最好不要太長,容易產生錯誤。所以ISR最好短小精悍,為了能夠快速結束,最好少做浮點運算。
- 不能有返回值,不能有參數傳遞
- 盡量短小高效,避免浮點運算
1.2、中斷的意義
- 應用程序不必關心中斷的處理與發生
- 中斷服務程序也不用關心應用程序的狀態
- 中斷是上層應用與底層代碼的分界線
1.3、中斷的類型
-
硬中斷
- 通過處理器的中斷信號線產生的中斷(鼠標按一下產生的中斷,通過中斷信號線發送給處理器)
-
軟中斷
- 通過非法指令或者特殊指令陷入的中斷(比如系統調用也是一種軟中斷,它就是通過特殊指令Int 0x80陷入內核,也可以看做一種中斷。再比如后面會學習的信號,也是一種中斷)
1.4、中斷的優先級
比如此時有好幾個中斷信號產生,比如你的電腦正在運行微博程序,你點擊鼠標,立馬有反應,這說明什么?說明鼠標的優先級比微博程序的優先級高。其實,任何ISR的優先級,都比應用程序的優先級高。而中斷中,也分為不同的優先級,高優先級的中斷會優先得到CPU的處理,且一個中斷ISR在運行時,如果再來一個比它優先級高的中斷,這個高優先級的中斷會打斷那個正在執行的中斷程序。
-
中斷優先級
- 多個中斷同時出現時,處理器優先響應高優先級的中斷
- 低優先級中斷的ISR執行時,可以被高優先級的中斷再次打斷
- ISR比上層應用程序的優先級都高
2、中斷的應用-斷點調試
2.2、什么是程序的斷點?
大家都知道斷點調試。程序的斷點,其實就是一個指令的地址。這個指令的地址,是調試工具(例如GDB)讓代碼停止執行時候的位置。當你設置斷點后,程序會在你設置的斷點處停止執行。然后去執行你的調試工具里面的相應程序,那么接下來你就可以使用調試工具來獲取程序的相應信息,比如上下文環境,棧信息等
2.2、 程序斷點的實現原理
程序斷點的實現原理,依賴于CPU的中斷機制。包括CPU的硬中斷機制與軟中斷機制。
說的通俗一點,就是將斷點處的指令替換為中斷觸發指令,不再繼續執行當前程序,而是去執行中斷服務程序ISR,然后ISR再將CPU控制權交給你的調試工具的處理程序。
-
程序斷點的實現原理
- 獲取源程序指定行對應的代碼地址(指令地址)
- 保存當前程序的上下文環境信息
- 把該指令地址處的指令,替換為中斷觸發指令
- 在中斷服務程序ISR中將CPU控制權交給調試工具的處理程序
- 調試程序開始做相應處理(比如可以讀取源程序的上下文信息或者棧信息)
- 調試程序處理完后,將之前指令地址處的指令還原
- 恢復之前程序的上下文信息
- 源程序繼續從斷點處執行程序
下面來看一張圖理解斷點的實現原理
其中中斷觸發指令,被CPU執行后,OS會向調試程序發送signal,signal后面會講。調試程序收到signal,會執行響應的處理函數handle。
以上只是大致講原理,沒有深入研究源碼。
3、總結
本篇文章要學會:
- 中斷的概念與意義
- 中斷的類型(硬中斷與軟中斷)
- 中斷的應用-斷點與斷點的實現原理
本系列文章幾乎全部參考狄泰軟件學院相關課程,想學習的可以加群,
群聊號碼:199546072
學習探討加個人:
qq:1126137994
微信:liu1126137994
總結
以上是生活随笔為你收集整理的【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql against包含英文_在M
- 下一篇: 一. Vue项目引入字体(思源黑体)