Linux內核機制

Linux的中斷處理包含兩部分:低級處理部分和高級處理部分。低級處理部分負責響應中斷信號,保證中斷信號到來時能及時響應,同時完成數據讀取和傳送。這一階段要快速。高級處理處理和設備相關的各種數據結構。這一部分佔一次中斷的大部分時間。

Linux把一次中斷處理分割爲兩個部分:快速的top half處理和慢速的bottom half處理。Top half處理硬件發出的中斷請求,它必須在下一次中斷到來前完成。這一階段完成設備和緩衝區之間的數據傳遞。Bottom half處理與設備相關的數據結構,bottom half允許接收新的中斷請求。

2、內核機制的數據結構

bottom half函數的請求和bottom half函數的執行都在內核中完成,不涉及發出請求中斷的進程。bottom half用一個32位的指針數組完成處理。Linux採用數組方式實現內核機制,數組的每一項指向一個內核處理程序。

Linux系統中最多可以有32個不同的內核處理程序,每個內核處理程序管理一個任務隊列。bh_base是一個存儲32個處理程序入口的指針數組。bh_mask和bh_active分別表示那些處理程序是否已經安裝和激活。他們都是32位大小的數組。第N位被置位則表示bh_base的第N個元素有一個內核處理程序或第N個內核處理程序被激活。(被激活的意思是可被調度程序調度執行)。

當設備驅動或內核需要調度某任務,而該任務不能馬上被執行,則將該任務插入相應的系統隊列。然後,內核發出信號,通知它需要調用某個內核處理程序。系統通過設置bh_active相應位實現操作。每當系統調用結束並返回調用進程前都要檢查bh_active,如果有置1位,則調用對應的內核處理程序,檢查順序是從第0位到第31位。

調用時bh_active對應位會被清除。

3、任務隊列

任務隊列由一個tq_struct結構鏈表構成,每個結點包含處理程序的地址指針及指向數據的指針。處理任務隊列上的元素時會用到這些處理程序,同時也會用到指向數據的指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章