您好,登錄后才能下訂單哦!
這篇文章主要介紹了Linux內核中斷的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
中斷是指在CPU正常運行期間,由于內外部事件或由程序預先安排的事件引起的CPU暫時停止正在運行的程序,轉而為該內部或外部事件或預先安排的事件服務的程序中去,服務完畢后再返回去繼續運行被暫時中斷的程序。
定義
中斷請求(IRQ)是由可編程的中斷控制器(PIC)發起的,其目的是為了中斷 CPU 和執行中斷服務程序(ISR)。中斷服務程序(ISR)是一個小的程序,用來處理具體的數據,其具體的處理方式依賴于造成中斷請求(IRQ)的原因。之前正在運行的進程在中斷服務程序(ISR)運行結束前都會被中斷。
在過去,中斷請求由單獨的芯片處理(中斷控制器芯片 PIC),I/O 設備直接與中斷控制器(PIC)相連。中斷控制器(PIC)管理著多種硬件的中斷請求(IRQ),并且可以直接與 CPU 通信。當一個中斷請求(IRQ)產生后,中斷控制器(PIC)向 CPU 寫入數據,并且觸發中斷請求引腳(INTR)。
現如今,中斷請求(IRQ)由 CPU 中的高級可編程中斷控制器advanced programmable interrupt controller(APIC)部分來處理。每個核中都擁有屬于自己的高級可編程中斷控制器。
中斷的類型
正如我前文中提到的,中斷可以根據其來源分為三種類型。
硬件中斷
當一個硬件設備想要告訴 CPU 某一需要處理的數據已經準備好后(例如:當鍵盤被按下或者一個數據包到了網絡接口處),它將會發送一個中斷請求(IRQ)來告訴 CPU 數據是可用的。接下來會調用在內核啟動時設備驅動注冊的對應的中斷服務程序(ISR)。
軟件中斷
當你在播放一個視頻時,音頻和視頻是同步播放是相當重要的,這樣音樂的速度才不會變化。這是由軟件中斷實現的,由精確的計時器系統(稱為 jiffies)重復發起的。這個計時器會使得你的音樂播放器同步。軟件中斷也可以被特殊的指令所調用,來讀取或寫入數據到硬件設備。
當系統需要實時性時(例如在工業應用中),軟件中斷會變得重要。你可以在 Linux 基金會的文章中找到更多相關信息:面向嵌入式開發者的實時 Linux 介紹。
異常
異常exception是你可能之前就知道的中斷類型。當 CPU 執行一些將會導致除零或缺頁錯誤的指令時,任何其他運行中的程序都會被中斷。在這種情況下,你會被一個彈窗提醒,或在控制臺輸出中看到段錯誤segmentation fault(核心已轉儲core dumped)。但并不是所有異常都是由指令錯誤引起的。
異常可以進一步分為錯誤Fault、陷阱Trap和終止Abort。
動手實踐
中斷請求按照高級可編程中斷控制器(APIC)中的優先級高低排序(0是最高優先級)。前 32 個中斷(0~31)是由 CPU 指定的固定序列。你可以在 OsDev 異常 頁面找到關于它們的概述。隨后的中斷請求可以以不同的方式進行分配。中斷描述表interrupt descriptor table(IDT)中記錄了中斷請求(IRQ)和中斷服務程序(ISR)的對應關系。Linux 中定義了從 0 到 256 的 IRQ 向量。
為了打印出在你的系統中已注冊的中斷,打開一個終端并輸入:
cat /proc/interrupts
你應該會看到類似如下圖的結果:
內核版本為5.6.6中注冊的中斷 (Stephan Avenwedde, CC BY-SA 4.0)
從左到右各列的含義依次為:中斷向量號、每個 CPU(0~n)中斷發生次數、硬件來源、硬件源通道信息、以及造成中斷請求的設備名。
在表的末尾,有一些非數字的中斷。它們是特定于體系結構的中斷,如本地計時器中斷local timer interrupt(LOC)的中斷請求(IRQ)號為 236。其中一些在 Linux 內核源樹中的Linux IRQ 向量布局中指定。
特定于體系結構的中斷 (Stephan Avenwedde, CC BY-SA 4.0)
如果要實時獲取該表,請運行如下命令:
watch -n1 "cat /proc/interrupts"
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Linux內核中斷的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。