linux中斷處理中斷使硬體發出通知給cpu,cpu接收到中斷後即停止當前工作並立刻向作業系統告知此訊號的到來(中斷控制器連線著多路中斷管線,當接收到乙個中斷後,中斷控制器便向cpu傳送乙個電訊號)。
硬體裝置生成中斷並不考慮與處理器的時鐘同步——中斷隨時可以產生,核心隨時被中斷。
不同的裝置對應不同的中斷,每個中斷都有乙個唯一的數字標誌,這樣作業系統就可以給不同的中斷提供對應的中斷處理程式。
在作業系統中,異常不同於中斷,異常產生必須考慮與處理器時鐘同步(也稱同步中斷),比如cpu執行到錯誤指令、通過軟中斷實現系統呼叫以及發生記憶體缺頁等(由軟體引起的),必須由核心來處理時,cpu就會產生乙個異常。
核心響應乙個中斷是通過乙個名為中斷處理程式的函式。產生中斷的每個裝置都有乙個相應的中斷處理程式(但通常不是和特定裝置關聯,而是和特定中斷關聯,即如果乙個裝置可以產生多種不同的中斷,那麼該裝置就可以對應多個中斷處理程式,相應的該裝置驅動程式也就需要準備多個這樣的函式),乙個裝置的中斷處理程式是其裝置驅動程式的一部分——裝置驅動程式是用於對裝置進行管理的核心**。
一般把中斷處理流程分為兩部分:上半部和下半部。上半部是中斷處理程式——接收到乙個中斷後立即開始執行,但只做有嚴格時限的工作;下半部則執行能夠被允許稍後完成的工作。以網絡卡為例,當網絡卡接收到來自網路的資料報時,需要通知核心資料報到達,因此網絡卡立即發出中斷,核心執行網絡卡已註冊的中斷處理程式,中斷開始執行,通知硬體拷貝最新資料報到記憶體——這些都有需要快速完成而又與硬體相關的工作,核心也需要快速拷貝資料報到記憶體中(因為接收緩衝區大小有限),避免網絡卡/核心快取溢位。當資料報被拷貝到系統記憶體後,中斷即將控制權交還給之前的程式,處理資料的其他工作在隨後的下半部中進行。
另外在linux中,中斷處理程式不是可重入的。
當執行乙個中斷處理程式時,核心就處於中斷上下文,相對於程序上下文(執行系統呼叫/核心執行緒),核心代表程序執行,程序上下文可以休眠或者呼叫排程程式,而中斷上下文則與程序沒有任何關係,因此中斷上下文不能休眠(也就不能再中斷處理程式中呼叫睡眠阻塞函式)。
linux處理下半部中斷處理程式只能完成中斷處理流程的上半部。在最理想的情況下,最好是中斷處理程式將所有工作都交給下半部執行,這樣中斷處理程式能夠盡快地返回——取決於驅動程式開發者自己判斷。
中斷處理程式會非同步執行,並且在最好的情況下也會鎖定當前的中斷線,所以中斷處理程式執行越快越好:
下半部的執行沒有明確的時間,通常在中斷處理程式一返回就馬上執行。下半部的關鍵在於當它們執行時允許響應所有中斷。此外,和上半部只能通過中斷處理程式實現不同,下半部可以通過多種機制實現。
下半部的實現:
LINUX下三個核心檔案詳解
在網路中,不少伺服器採用的是linux系統。為了進一步提高伺服器的效能,可能需要根據特定的硬體及需求重新編譯linux核心。編譯linux核心,需要根據規定的步驟進行,編譯核心過程中涉及到幾個重要的檔案。比如對於redhat linux,在 boot目錄下有一些與linux核心有關的檔案,進入 bo...
linux核心引數詳解
系統引數詳解如下 fs.aio max nr 1048576 同時可以擁有的的非同步io請求數目。1048576 即 1024 1024 也就是 1024k 個。fs.file max 6553600 系統允許開啟的檔案數。kernel.shmall 4194304 設定共享記憶體總頁數。這個值太小...
Linux核心優化詳解
vi etc sysctl.conf 優化tcp vi etc sysctl.conf 禁用包過濾功能 net.ipv4.ip forward 0 啟用源路由核查功能 net.ipv4.conf.default.rp filter 1 禁用所有ip源路由 net.ipv4.conf.default....