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

下載本文檔

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

文檔簡介

1、Linux定時器的使用定時器的使用內(nèi)核定時器是內(nèi)核用來控制在未來某個時間點(基于jiffies)調(diào)度執(zhí)行某個函數(shù)的一種機(jī)制,其實現(xiàn)位于和kerneltimer.c文件中。被調(diào)度的函數(shù)肯定是異步執(zhí)行的,它類似于一種“軟件中斷”,而且是處于非進(jìn)程的上下文中,所以調(diào)度函數(shù)必須遵守以下規(guī)則:1)沒有current指針、不允許訪問用戶空間。因為沒有進(jìn)程上下文,相關(guān)代碼和被中斷的進(jìn)程沒有任何聯(lián)系。2)不能執(zhí)行休眠(或可能引起休眠的函數(shù))和調(diào)度。3)

2、任何被訪問的數(shù)據(jù)結(jié)構(gòu)都應(yīng)該針對并發(fā)訪問進(jìn)行保護(hù),以防止競爭條件。內(nèi)核定時器的調(diào)度函數(shù)運行過一次后就不會再被運行了(相當(dāng)于自動注銷),但可以通過在被調(diào)度的函數(shù)中重新調(diào)度自己來周期運行。在SMP系統(tǒng)中,調(diào)度函數(shù)總是在注冊它的同一CPU上運行,以盡可能獲得緩存的局域性。內(nèi)核定時器的數(shù)據(jù)結(jié)構(gòu)structtimer_liststructlist_headentryunsignedlongexpiresvoid(function)(unsigned

3、long)unsignedlongdatastructtvec_basebase...其中expires字段表示期望定時器執(zhí)行的jiffies值,到達(dá)該jiffies值時,將調(diào)用function函數(shù),并傳遞data作為參數(shù)。當(dāng)一個定時器被注冊到內(nèi)核之后,entry字段用來連接該定時器到一個內(nèi)核鏈表中。base字段是內(nèi)核內(nèi)部實現(xiàn)所用的。需要注意的是expires的值是32位的,因為內(nèi)核定時器并不適用于長的未來時間點。初始化在使用struc

4、ttimer_list之前,需要初始化該數(shù)據(jù)結(jié)構(gòu),確保所有的字段都被正確地設(shè)置。初始化有兩種方法。方法一:DEFINE_TIMER(timer_namefunction_nameexpires_valuedata)該宏會定義一個名叫timer_name內(nèi)核定時器,并初始化其functionexpiresname和base字段。方法二:structtimer_listmytimersetup_timer(mytimer.expires=j

5、iffies5HZstaticvoid__exitmytimer_exit(void)del_timer(module_init(mytimer_init)module_exit(mytimer_exit)761Linux內(nèi)核對定時器的描述Linux內(nèi)核2.4版中去掉了老版本內(nèi)核中的靜態(tài)定時器機(jī)制,而只留下動態(tài)定時器。相應(yīng)地在timer_bh()函數(shù)中也不再通過run_old_timers()函數(shù)來運行老式的靜態(tài)定時器。動態(tài)定時器與靜態(tài)

6、定時器這二個概念是相對于Linux內(nèi)核定時器機(jī)制的可擴(kuò)展功能而言的,動態(tài)定時器是指內(nèi)核的定時器隊列是可以動態(tài)變化的,然而就定時器本身而言,二者并無本質(zhì)的區(qū)別。考慮到靜態(tài)定時器機(jī)制的能力有限,因此Linux內(nèi)核2.4版中完全去掉了以前的靜態(tài)定時器機(jī)制。timer_create(2):創(chuàng)建了一個定時器。timer_settime(2):啟動或者停止一個定時器。timer_gettime(2):返回到下一次到期的剩余時間值和定時器定義的時間間

7、隔。出現(xiàn)該接口的原因是,如果用戶定義了一個1ms的定時器,可能當(dāng)時系統(tǒng)負(fù)荷很重,導(dǎo)致該定時器實際山10ms后才超時,這種情況下,overrun=9ms。timer_getoverrun(2):返回上次定時器到期時超限值。timer_(2):停止并刪除一個定時器。上面最重要的接口是timer_create(2),其中,clockid表明了要使用的時鐘類型,在POSIX中要求必須實現(xiàn)CLOCK_REALTIME類型的時鐘。evp參數(shù)指明了在

8、定時到期后,調(diào)用者被通知的方式。該結(jié)構(gòu)體定義如下:Linux在includelinuxtimer.h頭文件中定義了數(shù)據(jù)結(jié)構(gòu)timer_list來描述一個內(nèi)核定時器:structtimer_liststructlist_headlistunsignedlongexpiresunsignedlongdatavoid(function)(unsignedlong)各數(shù)據(jù)成員的含義如下:(1)雙向鏈表元素list:用來將多個定時器連接成一條雙向

溫馨提示

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

評論

0/150

提交評論