硬中斷和軟中斷的區分

2021-10-20 22:24:58 字數 1524 閱讀 1994

概述:

從本質上來講,中斷是一種電訊號,當裝置有某種事件發生時,它就會產生中斷,通過匯流排把電訊號傳送給中斷控制器。

如果中斷的線是啟用的,中斷控制器就把電訊號傳送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事, 跳到中斷處理程式的入口點,進行中斷處理。

(1) 硬中斷

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

(2) 軟中斷

為了滿足實時系統的要求,中斷處理應該是越快越好。linux為了實現這個特點,當中斷發生的時候,硬中斷處理那些短時間

就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之後來完成,也就是軟中斷(softirq)來完成。

(3) 中斷巢狀

linux下硬中斷是可以巢狀的,但是沒有優先順序的概念,也就是說任何乙個新的中斷都可以打斷正在執行的中斷,但同種中斷

除外。軟中斷不能巢狀,但相同型別的軟中斷可以在不同cpu上並行執行。

(4) 軟中斷指令

int是軟中斷指令。

中斷向量表是中斷號和中斷處理函式位址的對應表。

(5)硬中斷和軟中斷的區別

軟中斷是執行中斷指令產生的,而硬中斷是由外設引發的。

硬中斷的中斷號是由中斷控制器提供的,軟中斷的中斷號由指令直接指出,無需使用中斷控制器。

硬中斷是可遮蔽的,軟中斷不可遮蔽。

硬中斷處理程式要確保它能快速地完成任務,這樣程式執行時才不會等待較長時間,稱為上半部。

軟中斷處理硬中斷未完成的工作,是一種推後執行的機制,屬於下半部。

在下列地方,待處理的軟中斷會被檢查和執行:

從乙個硬體中斷**處返回時

在ksoftirqd核心執行緒中

在那些顯示檢查和執行待處理的軟中斷的**中,如網路子系統中

而不管是用什麼方法喚起,軟中斷都要在do_softirq()中執行。如果有待處理的軟中斷,

do_softirq()會迴圈遍歷每乙個,呼叫它們的相應的處理程式。

在中斷處理程式中觸發軟中斷是最常見的形式。中斷處理程式執行硬體裝置的相關操作,

然後觸發相應的軟中斷,最後退出。核心在執行完中斷處理程式以後,馬上就會呼叫

do_softirq(),於是軟中斷開始執行中斷處理程式完成剩餘的任務。

ksoftirqd核心執行緒

核心不會立即處理重新觸發的軟中斷。

當大量軟中斷出現的時候,核心會喚醒一組核心執行緒來處理。

這些執行緒的優先順序最低(nice值為19),這能避免它們跟其它重要的任務搶奪資源。

但它們最終肯定會被執行,所以這個折中的方案能夠保證在軟中斷很多時使用者程式不會

因為得不到處理時間而處於飢餓狀態,同時也保證過量的軟中斷最終會得到處理。

每個處理器都有乙個這樣的執行緒,名字為ksoftirqd/n,n為處理器的編號。

硬中斷和軟中斷

中斷是一種電訊號,當裝置有某種事件發生時,它就會產生中斷,通過匯流排把電訊號傳送給中斷控制器。如果中斷的線是啟用的,中斷控制器就把電訊號傳送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事,跳到中斷處理程式的入口點,進行中斷處理。由與系統相連的外設 比如網絡卡 硬碟 自動產生的。主要是用來通...

軟中斷和硬中斷的區別

目錄硬中斷 1.由與系統相連的外設 比如網絡卡 硬碟 自動產生的。主要是用來通知作業系統系統外設狀態的變化。比如當網絡卡收到資料報 的時候,就會發出乙個中斷。我們通常所說的中斷指的是硬中斷 hardirq 2.硬中斷是外部裝置對cpu的中斷 3.硬中斷是由硬體產生的,比如,像磁碟,網絡卡,鍵盤,時鐘...

軟中斷 硬中斷 區別

from 軟中斷一般是指由指令int引起的 偽 中斷動作 給cpu製造乙個中斷的假象 而硬中斷則是實實在在由8259的連線觸發的中斷。因此,嚴格的講,int與irq毫無關係,但二者均與中斷向量有關係。int引起的中斷,cpu是從指令中取得中斷向量號 而irq引起的中斷,cpu必須從資料線上取回中斷號...