作業系統和中斷

2021-09-10 04:37:18 字數 1730 閱讀 4256

硬中斷由與系統相連的外設(比如網絡卡、硬碟)自動產生的。主要是用來通知作業系統系統外設狀態的變化。比如當網絡卡收到資料報的時候,就會發出乙個中斷。我們通常所說的中斷指的是硬中斷(hardirq)。硬中斷是可以遮蔽的,軟中斷是不可以遮蔽的。

軟中斷則是手動由中斷指令產生。核心不會立即處理重新觸發的軟中斷。當大量軟中斷出現的時候,核心會喚醒一組核心執行緒來處理。這些執行緒的優先順序最低(nice值為19),這能避免它們跟其它重要的任務搶奪資源。但它們最終肯定會被執行,所以這個折中的方案能夠保證在軟中斷很多時使用者程式不會因為得不到處理時間而處於飢餓狀態,同時也保證過量的軟中斷最終會得到處理。

設計中斷系統時,硬中斷用於緊急的響應,而軟中斷一般用於處理硬中斷沒有完成的工作。

中斷有兩個重要的屬性,中斷號和中斷處理程式。中斷號用來標識不同的中斷,不同的中斷具有不同的中斷處理程式。在作業系統核心中維護著乙個中斷向量表(interrupt vector table),這個陣列儲存了所有中斷處理程式的位址,而中斷號就是相應中斷在中斷向量表中的偏移量。

中斷產生時候 保護系統當前狀態,也就是把cpu當前的狀態儲存起來

執行中斷程式,執行的中斷程式應該盡量短,不去過多占用cpu時長,此處引入linux的頂半部機制以及底半部機制,頂半部是指中斷**需要立即執行的情況,對於情況不緊急的情況,會將中斷程式註冊到佇列,在cpu執行狀態不是那麼繁忙的情況下再去執行程式,底半部機制是指中帶**需要立即執行,不得延誤(後面會詳細介紹頂半部機制以及底半部機制)。

恢復現場工作,中斷執行後,跳出中斷程式,並恢復中斷前cpu狀態,繼續執行之前的任務

linux實現下半部的機制主要有tasklet和工作佇列。

tasklet或者軟中斷

記住tasklet是乙個可以在由系統決定的安全時刻在軟體中斷上下文被排程執行的特殊函式,它們可以被多次排程執行,但tasklet不會積累,也就是說,實際只會執行一次。不會有同乙個tasklet的多個例項並行的執行,因為它們只執行一次,但是tasklet可以與其它的tasklet並行的執行在對稱多處理器(smp)系統上。如果驅動程式中有多個tasklet,它們必須使用某種機制鎖來避免衝突。tasklet在中斷處理例程結束前不會開始執行,tasklet執行時,可以有其它的中斷發生。tasklet通常是底半部處理的優選機制,因為這種機制非常快,但是所有的tasklet都必須是原子的。

tasklet就是軟中斷實現的。。當然也可以通過直接修改核心自己加入自己的軟中斷,但是一般來說這是不合理的,軟中斷的優先順序比較高,如果不是在核心處理頻繁的任務不建議使用。通常驅動使用者使用 tasklet 足夠了。

工作佇列

從上面的介紹看以看出,軟中斷執行在中斷上下文中,因此不能阻塞和睡眠,而tasklet使用軟中斷實現,當然也不能阻塞和睡眠。但如果某延遲處理函式需要睡眠或者阻塞呢?沒關係工作佇列就可以如您所願了。

把推後執行的任務叫做工作(work),描述它的資料結構為work_struct ,這些工作以佇列結構組織成工作佇列(workqueue),其資料結構為workqueue_struct ,而工作執行緒就是負責執行工作佇列中的工作。系統預設的工作者執行緒為events。

工作佇列(work queue)是另外一種將工作推後執行的形式。工作佇列可以把工作推後,交由乙個核心執行緒去執行—這個下半部分總是會在程序上下文執行,但由於是核心執行緒,其不能訪問使用者空間。最重要特點的就是工作佇列允許重新排程甚至是睡眠。

通常,在工作佇列和軟中斷/tasklet中作出選擇非常容易。可使用以下規則:

作業系統 中斷和異常

中斷是為了實現多道程式併發執行而引入的一種技術 當中斷發生時,cpu立即進入核心態 當中斷發生後,當前執行的程序暫停執行,並由作業系統核心對中斷進行處理 對於不同的中斷訊號,會進行不同的處理 發生了中斷,就意味著需要作業系統介入,開展管理工作。由於作業系統的管理工作 比如程序切換 分配i 0裝置等 ...

作業系統中斷和異常

1.1 中斷機制的誕生早期的計算機 只能序列執行,系統資源利用率低。為了解決資源利用率低的問題,人們發明了作業系統 作為計算機的管理者 引入中斷機制,實現了多道程式的併發執行。中斷的概念和作用 本質 發生中斷就意味著需要作業系統介入,開展管理工作。由於作業系統的管理工作 比如程序切換 分配i o裝置...

作業系統 中斷

寫在前面 參考中斷 中斷是指cpu對i o裝置發來的中斷訊號的一種響應。cpu暫停正在執行的程式,保留cpu環境後,自動地去執行該i o裝置的中斷處理程式。執行完後,再回到斷點,繼續執行原來的程式。i o裝置可以是字元裝置,也可以是塊裝置 通訊裝置。由於中斷時由外部裝置引起的,故又稱外中斷。在作業系...