Linux如何處理共享中斷

2021-05-26 07:21:00 字數 843 閱讀 4305

linux可以讓多個裝置共享乙個中斷號,而且共享同一中斷的中斷處理程式形成乙個鍊錶,核心對每個中斷處理程式都要執行,那麼,沒有產生中斷的裝置本

該靠邊站的,它的中斷處理程式也被執行了?到底是怎麼會事?實際上:

共享的處理程式與非共享的處理程式在註冊和執行方式上比較相似,但差異主要有以下三處:

* request_irq()的引數flags必須設定sa_shirq標誌。

* 對每個註冊的中斷處理程式來說,dev_id引數必須唯一。指向任一裝置結構的指標就可以滿足這一要求;通常會選擇裝置結構,因為它是唯一的,而且

中斷處理程式可能會用到它。不能給共享的處理程式傳遞null值。

* 中斷處理程式必須能夠區分它的裝置是否真的產生了中斷。這既需要硬體的支援,也需要處理程式中有相關的處理邏輯。如果硬體不支援這一功能,那中斷處

理程式肯定會束手無策,它根本沒法知道到底是與它對應的裝置發出了這個中斷,還是共享這條中斷線的其他裝置發出了這個中斷。

所有共享中斷線的驅動程式都必須滿足以上要求。只要有任何乙個裝置沒有按規則進行共享,那麼中斷線就無法共享了。指定sa_shirq標誌以呼叫

request_irq()時,只有在以下兩種情況下才可能成功:中斷線當前未被註冊,或者在該線上的所有已註冊處理程式都指定了sa_shirq。注

意,在這一點上2.6與以前的核心是不同的,共享的處理程式可以混用sa_ interrupt。

核心接收乙個中斷後,它將依次呼叫在該中斷線上註冊的每乙個處理程式。因此,乙個處理程式必須知道它是否應該為這個中斷負責。如果與它相關的裝置並沒有

產生中斷,那麼處理程式應該立即退出。這需要硬體裝置提供狀態暫存器(或類似機制),以便中斷處理程式進行檢查。毫無疑問,大多數硬體都提供這種功能

Linux中斷處理之共享中斷處理初探

在看lkd 第二版 第六章 中斷和中斷處理程式 的時候,剛開始接觸到中斷線號和共享中斷線的時候半天愣是沒有想明白,原來理解的中斷和中斷和中斷處理程式就是通過中斷線號來進行關聯,硬體發生中斷,然後通過中斷線號查詢對應的中斷處理程式,最後中斷處理程式返回,此次中斷則處理完畢,沒想到冒出來個共享中斷線,呵...

Linux如何處理訊號

其實這個操作就是向前臺程序傳送sigint訊號。以下是linux支援的訊號列表 使用kill n pid或在 中使用int kill pid t pid,int sig 可以向乙個程序傳送訊號。如果 中沒有顯式的用signal去註冊訊號對應的控制代碼,那就會採用預設的處理方式,例如接收到sigint...

如何理解Linux中斷處理

中斷是一種非同步事件的處理機制,可以提高系統的併發處理能力。為了減少對正常程序排程的影響,中斷處理程式需要盡可能快的執行,為 了解決中斷程式執行過長和中斷丟失的問題,linux將中斷處理過程分成了兩個階段,即上半部與下半部。上半部 proc softirqs提供了軟中斷的運 況 proc inter...