Linux2 6軟中斷分析

2021-05-23 21:40:21 字數 1325 閱讀 9070

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處開始執行,首先執行...