本章描述了 Linux 核心需要提供的一些一般的任務和機制,讓核心的其餘部分可
以有效地工作。
11.1 Bottom Half Handling
通常在覈心中會有這樣的時候:你不希望執行工作。一個好例子是在中斷處理
的過程中。當引發了中斷,處理器停止它正在執行的工作,操作系統把中斷傳遞到
適當的設備驅動程序。設備驅動程序不應該花費太多時間來處理中斷,因爲在這段
時間,系統中的其他東西都不能運行。通常一些工作可以在稍後的時候進行。
Linux 發明了 boffom half 處理程序,這樣設備驅動程序和 Linux 核心的其它部
分可以把可以稍後作的工作排隊。圖 11.1 顯示了同 bottom half 處理相關的核
心數據結構。有多達 32 個不同的 bottom half 處理程序: bh_base 是一個指針
的向量表,指向核心的每一個 bottom half 處理例程, bh_active 和 bh_mask
按照安裝和激活了哪些處理程序設置它們的位。如果 bh_mask 的位 N 設置,則
bh_base 中的第 N 個元素會包含一個 bottom half 例程的地址。如果 bh_active
的第 N 位設置,那麼一旦調度程序認爲合理,就會調用第 N 位的 bottom
half 處理程序。這些索引是靜態定義的: timer bottom half 處理器優先級最高
(索引 0 ), console bottom half 處理程序優先級次之( index 1 )等等。
通常 bottom half 處理例程會有和它關聯的任務列表。例如這個 immediate
buttom half handler 通過包含需要立即執行的任務的 immediate 任務隊列(
tq_immediate )來工作。
參見 include/linux/interrupt.h