中斷下半部的妙用

2021-09-01 11:43:21 字數 1309 閱讀 7292

中斷下半部

中斷處理程式是核心中很重要的一部分,但是由於本身存在著一些限制,所以他只能完成整個中斷處理程式中的上半部分。

具體侷限如下:

中斷處理程式是以非同步方式執行,並且他有可能會打斷其他重要的**(甚至有可能是其他的中斷程式)的執行,因此為了避免被打斷的**停止時間過長。中斷處理程式要執行的越快越好

如果當前有乙個中斷處理程式正在執行,在最好的情況下,在最好的情況下(irqf_disabled沒有被設定),與該中斷同級的其他中斷會被遮蔽,如果設定了irqf_disabled,當預處理器上所有其他的中斷都會被遮蔽,因為禁止中斷後硬體與系統無法通訊。

由於中斷處理程式需要對硬體進行操作,所以他們通常有很高的時限要求

中斷處理程式不再程序上下文中執行,所以他們不能阻塞。

因為上述原因,所以整個中斷處理流程就被分為了兩部分,第一部分是中斷處理程式(上半部),核心通過對他的非同步執行完成對硬體中斷的即時響應。

下半部下半部的任務就是執行與中斷處理程式密切相關但中斷處理程式本身不執行的工作,理想的情況是,最好是中斷處理程式將所有的工作都交給下半部來執行,我們只希望在上半部執行的越少越好,我們期望中斷處理程式能夠盡快的返回。

但是中斷處理程式注定要完成一部分工作,例如,中斷處理程式幾乎都需要通過操作硬體對中斷的到達進行確認,有時他還會從硬體拷貝資料,因為這些工作對時間十分敏感,所以只能交給中斷處理程式去執行。

剩下的幾乎所有其他工作都是下半部執行的目標。實際上並不存在嚴格明確的規定來說明到底什麼任務應該在那個部分中完成,具體如何做決定完全取決於驅動程式開發者自己的判斷,在理論上不存在什麼錯誤,但是輕率的實現效果往往不理想。記住中斷處理程式會非同步執行,並且在最好的情況下他也會鎖定當前的中斷線,因此將中斷處理程式持續執行的時間縮短到最小成都線的非常重要。對於上半部和下半部之間劃分工作,儘管不存在某種嚴格的規則,但還是有一些提示可供借鑑

為什麼要用下半部

理解為什麼要讓工作推後執行以及在什麼時候推後執行非常關鍵,你希望儘量減少中斷處理程式中要完成的工作,因為它在執行的時候,當前的中斷線在所有處理器上都會被遮蔽,更糟糕的是,如果乙個處理程式是irqf_disabled型別,他執行的時候會禁止所有本地終端,而且把本地中斷線全聚德遮蔽掉,而縮短中斷被遮蔽的時間對系統的響應能力和效能都至關重要,再加上中斷處理程式要與其他程式非同步執行,所以很明顯,我們必須盡力縮短中斷處理程式的執行。解決辦法就是把一些工作放到以後去做。

但具體放到以後什麼時候去執行呢?在這裡,以後僅僅用來強調不是馬上而已,理解這一點相當重要,下班並不需要知名乙個確切時間,只要把這些任務推遲一點,讓他們在系統不太繁忙並且中斷恢復後執行就可以了。通常下半部在中斷處理程式一返回就馬上執行。下半部執行的關鍵在於當他們執行的時候,允許響應所有的中斷。

筆記 中斷,下半部

先弄清兩個概念,程序上下文和中斷上下文 處理器總處於以下狀態中的一種 核心態,執行於程序上下文,核心代表程序執行於核心空間 核心態,執行於中斷上下文,核心代表硬體執行於核心空間 使用者態,執行於使用者空間。使用者空間的應用程式,通過系統呼叫,進入核心空間。這個時候使用者空間的程序要傳遞很多變數 引數...

中斷的上下半部

因為輸入類裝置的輸入都是非同步事件,因此一般使用中斷來處理和響應。當中斷處理程式比較長,而又希望優良的響應特性時,linux核心處理中斷的方案是 人為地將處理程式分為兩部分。1 為什麼要分上半部 top half,又叫頂半部 和下半部 bottom half,又叫底半部 2 下半部處理策略1 tas...

linux中斷與下半部

中斷 解決cpu和硬體速度差距太大問題,不能讓cpu等,也不能讓cpu輪詢,所以硬體好了給cpu發個訊號 硬體 控制器 中斷控制器 cpu 中斷控制器在中斷線啟用 未被遮蔽 才發向cpu 中斷 不需要與cpu時鐘同步,非同步,隨時可以來 異常 缺頁,0除 與cpu時鐘同步,同步,cpu產生,如系統呼...