關於linux的中斷系統網上有好多文章,基本的原理流程都能查的差不多。
這裡是我個人學習或使用中遇到的一些疑問,作為乙個記錄。
個人理解,可能會有錯漏,歡迎指出。
1,linux核心有沒有中斷優先順序?
linux中斷沒有引入優先順序的概念,並且現在linux核心會在執行中斷處理函式時禁止cpu中斷。
2,關於irqf_disabled
這個flag已經在新版本核心中不再使用,加與不加都沒有區別。 之前版本核心(2.6.35之前)加上該標誌表示該中斷為快速中斷,中斷處理全程禁止cpu中斷,如果不加則為慢速中斷,執行中斷處理函式時不會禁止cpu中斷。
現在,所有中斷都會禁止cpu中斷。
3,中斷執行緒化
linux引入了中斷執行緒化,是為了提高系統實時性,
intrequest_threaded_irq(unsigned
intirq, irq_handler_t handler
irq_handler_t thread_fn, unsigned long
irqflags,
const
char
*devname,
void
*dev_id)
借用宋寶華老師的話:
申請乙個執行緒化的irq,kernel會為中斷的底版本建立乙個名字為irq/%d-%s的執行緒,%d對應著中斷號。其中頂半部(硬中斷)
handler
在做完必要的處理工作之後,會返回irq_wake_thread,之後kernel會喚醒irq/%d-%s執行緒,而該kernel執行緒會呼叫
thread_fn
函式,因此,該執行緒成為底半部。
還有網路上這張圖:
4,cpu收到中斷之後如何獲取中斷號?
cpu從中斷控制器獲取中斷號的**在各個平台的
entry-macro.s檔案,巨集:get_irqnr_preamble
中斷號會存在 r0
之後跳轉到asm_do_irq第乙個引數就是中斷號。
關於Linux中斷一些思考
目錄前言 關於中斷歷史與發展 linux中斷設計 linux中斷下半部實現 軟中斷 tasklet 工作佇列 關於可重入和不可重入函式 在我們學習中斷的時候,先要了解幾個概念。何為中斷?為什麼要使用中斷?中斷如何運作?弄明白這些再去使用中斷會顯得得心應手。何為中斷?cpu在執行的過程中,由於外部因素...
中斷筆記 一些常見的中斷問題
中斷簡述 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式的資訊...
關於中斷的一些整理
中斷裝置和中斷處理程式統稱為中斷系統。中斷系統是計算機的重要組成部分。實時控制 故障自動處理 計算機與外圍裝置間的資料傳送往往採用中斷系統。中斷系統的應用大大提高了計算機效率。不同的計算機其硬體結構和軟體指令是不完全相同的,因此,中斷系統也是不相同的。計算機的中斷系統能夠加強cpu對多工事件的處理能...