2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、摘要本文主要從使用者的角度對(duì)Linux2.6內(nèi)核的下半部機(jī)制softirq、tasklet和wkqueue進(jìn)行分析,對(duì)于這三種機(jī)制在內(nèi)核中的具體實(shí)現(xiàn)并未進(jìn)行深入分析,倘若讀者有興趣了解,可以直接閱讀Linux內(nèi)核源代碼的相關(guān)部分。1概述概述中斷服務(wù)程序往往都需要在CPU關(guān)中斷的情況下運(yùn)行,以避免中斷嵌套而使控制復(fù)雜化,但是關(guān)中斷的時(shí)間又不能太長,否則會(huì)造成中斷信號(hào)的丟失。為此,在Linux中,將中斷處理程序分為兩部分,即上半部和下半部。

2、上半部通常用于執(zhí)行跟硬件關(guān)系密切的關(guān)鍵程序,這部分執(zhí)行時(shí)間非常短,而且是在關(guān)中斷的環(huán)境下運(yùn)行的。對(duì)時(shí)間要求不是很嚴(yán)格,而且通常比較耗時(shí)的一些操作,則交給下半部來執(zhí)行,這部分代碼是在開中斷中執(zhí)行的。上半部處理硬件相關(guān),稱為硬件中斷,這通常需要立即執(zhí)行。下半部則可以延遲一定時(shí)間,在內(nèi)核合適的時(shí)間段來執(zhí)行程序,這就是我們這里要討論的軟中斷。本文以目前最新版本的Linux內(nèi)核2.6.22為例,來討論Linux的中斷下半部機(jī)制。在2.6版本的內(nèi)核

3、中,下半部機(jī)制主要由softirq、tasklet和wkqueue來實(shí)現(xiàn),下面著重對(duì)這3種機(jī)制進(jìn)行分析。2Linux2.6內(nèi)核中斷下半部機(jī)制內(nèi)核中斷下半部機(jī)制老版本的Linux內(nèi)核中,下半部是以一種叫做BottomHalf(簡稱為BH)的機(jī)制來實(shí)現(xiàn)的,最初它是借助中斷向量來實(shí)現(xiàn)的,在系統(tǒng)中用一組(共32個(gè))函數(shù)指針,分別表示32個(gè)中斷向量,這種實(shí)現(xiàn)方式目前在2.4版本的內(nèi)核中還可以看到它的身影。但是目前在2.6版本的內(nèi)核中已經(jīng)看不到它了

4、?,F(xiàn)在的Linux內(nèi)核,一般以一種稱為softirq的軟中斷機(jī)制來實(shí)現(xiàn)下半部。2.1softirq機(jī)制機(jī)制原來的BH機(jī)制有兩個(gè)明顯的缺陷:一是系統(tǒng)中一次只能有一個(gè)CPU可以執(zhí)行BH代碼,二是BH函數(shù)不允許嵌套。這在單處理器系統(tǒng)中或許沒關(guān)系,但在SMP系統(tǒng)中卻是致命的缺陷。但是軟中斷機(jī)制就不一樣了。Linux的softirq機(jī)制與SMP是緊密相連的,整個(gè)softirq機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)始終貫穿著一個(gè)思想:“誰觸發(fā),誰執(zhí)行”(Whomarks

5、whoruns),也就是說,每個(gè)CPU都單獨(dú)負(fù)責(zé)它所觸發(fā)的軟中斷,互不干擾。這就有效地利用了SMP系統(tǒng)的性能和特點(diǎn),極大地提高了處理效率。Linux在includelinuxinterrupt.h中定義了一個(gè)softirq_action結(jié)構(gòu)來描述一個(gè)softirq請(qǐng)求,如下所示:structsoftirq_actionvoid(action)(structsoftirq_action)voiddata其中,函數(shù)指針action指向軟中斷

6、請(qǐng)求的服務(wù)函數(shù),而data則指向由服務(wù)函數(shù)自行解釋的參數(shù)數(shù)據(jù)?;谏鲜鼋Y(jié)構(gòu),系統(tǒng)在kernelsoftirq.c中定義了一個(gè)全局的softirq軟中斷向量表softirq_vec[32],對(duì)應(yīng)32個(gè)softirq_action結(jié)構(gòu)表示的軟中斷描述符。但實(shí)際上,Linux并沒有使用到32個(gè)軟中斷向量,內(nèi)核預(yù)定義了一些軟中斷向量的含義供我們使用:理器體系結(jié)構(gòu)。比如對(duì)于PowerPC處理器,這個(gè)結(jié)構(gòu)在includeasmpowerpchard

7、irq.h中定義如下:typedefstructunsignedint__softirq_pendingset_bitisusedonthisunsignedint__last_jiffy_stamp____cacheline_alignedirq_cpustat_texternirq_cpustat_tirq_stat[]definedinasmhardirq.h#define__IRQ_STAT(cpumember)(irq_sta

8、t[cpu].member)其中,__softirq_pending成員使用bitmap的方式來指示相應(yīng)的softirq是否激活(即是否處于pending狀態(tài))。raise_softirq的主要工作就是在__softirq_pending中設(shè)置softirq的相應(yīng)位,它的實(shí)現(xiàn)如下:voidfastcallraise_softirq(unsignedintnr)unsignedlongflagslocal_irq_save(flags)r

9、aise_softirq_irqoff(nr)local_irq_reste(flags)inlinefastcallvoidraise_softirq_irqoff(unsignedintnr)__raise_softirq_irqoff(nr)if(!in_interrupt())wakeup_softirqd()喚醒內(nèi)核線程ksoftirqd#define__raise_softirq_irqoff(nr)do_softirq_p

10、ending(1UL(nr))while(0)#define_softirq_pending(x)(local_softirq_pending()|=(x))#definelocal_softirq_pending()__IRQ_STAT(smp_process_id()__softirq_pending)這里有一個(gè)宏函數(shù)local_softirq_pending(),其實(shí)就是用于返回當(dāng)前cpu的相應(yīng)irq_cpustat_t結(jié)構(gòu)irq

11、_stat[cpu]的__softirq_pending成員值。因此__raise_softirq_irqoff(nr)的作用就是把要觸發(fā)的softirq在__softirq_pending中的相應(yīng)位置1,在do_softirq()中則通過檢查irq_stat[cpu]中相應(yīng)的pending位是否設(shè)置來執(zhí)行該softirq。2.2tasklet機(jī)制機(jī)制tasklet實(shí)際上是一種較為特殊的軟中斷,軟中斷向量HI_SOFTIRQ和TASKL

12、ET_SOFTIRQ均是用tasklet機(jī)制來實(shí)現(xiàn)的。tasklet一詞原意為“小片任務(wù)”,在這里指一小段可執(zhí)行的代碼。從某種程度上來講,tasklet機(jī)制是Linux內(nèi)核對(duì)BH機(jī)制的一種擴(kuò)展,但是它和BH不同,不同的tasklet代碼在同一時(shí)刻可以在多個(gè)CPU上并行執(zhí)行。同時(shí),它又和一般的softirq軟中斷不一樣,一段tasklet代碼在同一時(shí)刻只能在一個(gè)CPU上運(yùn)行,而softirq中注冊(cè)的軟中斷服務(wù)函數(shù)(即softirq_act

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論