版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、定時(shí)器的分析徐駿王崢嶸第1頁(yè)20198291一一概述概述何為定時(shí)器?何為定時(shí)器?定時(shí)器(timer)是unix中提供的一種定時(shí)服務(wù)的機(jī)制。它所起的作用是在某個(gè)特定的時(shí)間喚醒某個(gè)進(jìn)程來(lái)做一些工作。用到定時(shí)器的unix指令有sleepat…etc.在windows95windows98中也有類似的機(jī)制。在硬件中,有一個(gè)系統(tǒng)時(shí)鐘,可以稱為硬時(shí)鐘。同時(shí),linux還維護(hù)一個(gè)軟件時(shí)鐘稱為軟時(shí)鐘。軟時(shí)鐘使用jiffies這個(gè)全程變量來(lái)維持服務(wù)。使用
2、兩套時(shí)鐘的原因是因?yàn)橛矔r(shí)鐘的讀取太麻煩。所消耗的時(shí)間太長(zhǎng)。Os通過(guò)跟蹤軟時(shí)鐘來(lái)提供定時(shí)服務(wù)。并在每次開(kāi)機(jī)時(shí),軟時(shí)鐘讀取一次硬時(shí)鐘,此后各不相關(guān)。定時(shí)器服務(wù)過(guò)程簡(jiǎn)介。定時(shí)器服務(wù)過(guò)程簡(jiǎn)介。定時(shí)器的初始化過(guò)程在開(kāi)機(jī)時(shí)就初始化完畢。(詳細(xì)分析見(jiàn)后)要求軟件定時(shí)服務(wù)的進(jìn)程(如sleepat)申請(qǐng)timer資源,申請(qǐng)成功后它將它所對(duì)應(yīng)的timer加入到timer_list鏈表中,并把這個(gè)定時(shí)器的timeout值交給timerexpirestimer
3、fn()對(duì)應(yīng)與該進(jìn)程的定時(shí)服務(wù)程序。隨著時(shí)鐘硬中斷的發(fā)生,timerexpires越來(lái)越小,當(dāng)expires=jiffies時(shí)(也就是說(shuō),到了定時(shí)服務(wù)的預(yù)定時(shí)間,當(dāng)最后一次時(shí)間中斷發(fā)生時(shí),激活該定時(shí)器,轉(zhuǎn)入定時(shí)器中斷處理程序,并把定時(shí)服務(wù)程序放入bottom_half(一個(gè)中斷響應(yīng)的緩沖機(jī)制)刪除該定時(shí)器。然后中斷返回。在bottom_half緩沖區(qū)中的定時(shí)服務(wù)程序由sched.c中的調(diào)度算法決定何時(shí)執(zhí)行(一般馬上就執(zhí)行)。分析簡(jiǎn)介分析
4、簡(jiǎn)介綜觀定時(shí)器的整個(gè)流程,我決定把我的分析分成3個(gè)部分:1.定時(shí)器的初始化過(guò)程。2.定時(shí)器的數(shù)據(jù)結(jié)構(gòu)以及定時(shí)服務(wù)程序的主體。3.定時(shí)器的輔助數(shù)據(jù)結(jié)構(gòu)以及他們所起的作用。備注:本文使用redhat2.0.34的代碼,故與原文可能有出入,請(qǐng)諒解。本文參考:linux電子書(shū)籍linuxtalking李善平老師的講義(linux2)。。定時(shí)器的分析徐駿王崢嶸第3頁(yè)20198293在time.c中,Linux首先定義了函數(shù)“timer_inter
5、rupt()”函數(shù),本文后續(xù)部分將會(huì)再提到此函數(shù),這兒,只需知道該函數(shù)就是時(shí)鐘中斷服務(wù)程序。接著,time.c中又定義了irqaction結(jié)類型的變量irq0:staticstructirqactionirq0=timer_interrupt00“timer“NULLNULL其中structirqaction結(jié)構(gòu)在interrupt.h中被定義,它包含與中斷服務(wù)程序有關(guān)的一些信息,如處理中斷的函數(shù)入口地址(即第一項(xiàng):void(hler)
6、(intvoidstructpt_regs))。除timer_inmterrupt()外,time.c中還定義了pentium_timer_interrupt(),這個(gè)函數(shù)與timer_inmterrupt相類似,但另外保存了中斷服務(wù)程序發(fā)生時(shí)的一些信息。最后,time.c定義了time_init()函數(shù),該函數(shù)用一個(gè)宏(#ifndefCONFIG_APM與#endif對(duì))包括如計(jì)算機(jī)中有CPUhardwaretimecounter時(shí)須
7、編譯的指令,它包括將中斷處理改為pentium_timer_interrupt(),最后,調(diào)用setup_x86_irq(0設(shè)置中斷向量。二:轉(zhuǎn)入二:轉(zhuǎn)入init進(jìn)程進(jìn)程start_kernel()在設(shè)置完irq0時(shí)間3中斷向量后,繼續(xù)各方面的初始化工作,且在此函數(shù)末尾調(diào)用:kernel_thread(initNULL0)在初始化進(jìn)行順利的前提下,函數(shù)必將執(zhí)行到這一步。kernel_thread(程序名,參數(shù),環(huán)境變量)是一個(gè)匯編語(yǔ)言函
8、數(shù)。只有在核心態(tài)運(yùn)行,且沒(méi)有調(diào)用過(guò)execve()的進(jìn)程,才可使用該函數(shù)。kernel_thread()利用linuxi386的系統(tǒng)調(diào)用(第0X80號(hào))創(chuàng)建一個(gè)新進(jìn)程。該系統(tǒng)調(diào)用返回后,可比較esp寄存器和esi寄存器的值來(lái)判斷父、子進(jìn)程。父進(jìn)程通過(guò)kernel_thread()函數(shù)返回,執(zhí)行task[0]進(jìn)程。子進(jìn)程則調(diào)用由參數(shù)“程序名”指定的程序。系統(tǒng)轉(zhuǎn)入init進(jìn)程。首先,init()調(diào)用kernel_thread(bdflush
9、NULL0)創(chuàng)建后臺(tái)進(jìn)程bdflush。bdflush(fsbuffer)不斷循環(huán)寫(xiě)出文件系統(tǒng)緩沖區(qū)中“臟”的內(nèi)容。接著,用調(diào)用函數(shù)init_swap_timer(),這個(gè)函數(shù)設(shè)置定時(shí)時(shí)鐘表(timer_table)的SWAP_TIMER表項(xiàng),并設(shè)定時(shí)鐘中斷響應(yīng)函數(shù)為“swap_tick”,在源代碼中為:timer_table[SWAP_TIMER].expires=0timer_table[SWAP_TIMER].fn=swap_ti
10、cktimer_active|=(1SWAP_TIMER)關(guān)于timer_table的數(shù)據(jù)結(jié)構(gòu),在下節(jié)有較詳細(xì)的討論。swap_tick函數(shù)在每個(gè)時(shí)間片滿時(shí)被調(diào)用,它首先判斷是否freepage不夠或swap間隔時(shí)間到,若是的話,喚醒睡眠在kswapd_awake隊(duì)列的進(jìn)程并告訴CPU需要重新調(diào)度。在該程序末尾,程序執(zhí)行:timer_active|=(1SWAP_TIMER)它再次激活timer_table[SWAP_TIMER]表項(xiàng),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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)論