linux2.6
的軟中斷框架與
2.4相比有了一些不同:2.2之前的傳統bottom half已經幾乎沒有了,任務佇列被取消,軟中斷的呼叫時機也有所不同。下面分析一下
2.6軟中斷的框架。
2.6中軟中斷還是由函式
do_softirq
呼叫,但異常和系統呼叫返回、排程時不再執行軟中斷,執行時機變為以下3個:
l硬體處理完乙個中斷之後(
irq_exit
函式)l
核心執行緒
ksoftirqd l
顯式呼叫
do_softirq
的地方(比如
net子系統中)
do_softirq
會遍歷所有的
softirq_vec
,依次呼叫其中的
action
函式。系統預定義的軟中斷有:
enum ;
ltasklet_softirq
:tasklet_schedule
函式實現了公共的
tasklet
機制,這個函式內部所做的就是把乙個
tasklet
掛到cpu
的tasklet
鍊錶,然後標記
tasklet_softirq
軟中斷。
lhi_softirq
:tasklet_hi_schedule
函式實現另乙個
tasklet佇列例項,
這個函式內部是把
tasklet
掛到cpu
的索引為
tasklet_hi_vec
的軟中斷鍊錶,然後標記軟中斷。處理方式與tasklet_softirq相同。 l
timer_softirq
:實現定時器操作,核心中的
msleep
函式由這個軟中斷實現(注意這裡實現的是
msleep
,不是udelay
和mdelay
)。另外核心定時器也通過此軟中斷實現。
lhrtimer_softirq
:高精度時鐘,實現
itimers
,posix timers
,nanosleep
,precise in-kernel timing. l
sched_softirq:用於
cpu的
load balance
軟中斷不能巢狀,也不能在硬中斷服務程式中執行,但多個軟中斷能在多個
cpu上併發。
由於軟中斷的呼叫時機中,有乙個是處理完硬體中斷之後,實現中斷的底半部機制。所以軟中斷中不能阻塞。
Linux2 6核心啟動分析
我們已知u boot的終極目的是啟動核心,那麼核心啟動的開始必定是u boot傳入的引數。開啟armlinux.c 發現有一行的 為 thekernel 0,bd bi arch number,bd bi boot params 帶入三個引數 第乙個引數是0,第二個引數是機器id,第三個引數是引數所...
Linux 2 6 核心引導過程分析
本文以x86為例,x86與嵌入式系統的區別在於多了乙個bios轉移到bootloader的過程。linux核心引導的過程包含多個階段,接下來將依次解讀 系統加電時,處理器會執行乙個位於已知位置處的 pc中即我們熟知的bios,它儲存在主機板的快閃儲存器中。bios從0xffff0處開始執行,首先執行...
Linux 2 6 核心引導過程分析
本文以x86為例,x86與嵌入式系統的區別在於多了乙個bios轉移到bootloader的過程。linux核心引導的過程包含多個階段,接下來將依次解讀 系統加電時,處理器會執行乙個位於已知位置處的 pc中即我們熟知的bios,它儲存在主機板的快閃儲存器中。bios從0xffff0處開始執行,首先執行...