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

下載本文檔

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

文檔簡介

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

2、任何被訪問的數(shù)據(jù)結(jié)構(gòu)都應(yīng)該針對并發(fā)訪問進行保護,以防止競爭條件。內(nèi)核定時器的調(diào)度函數(shù)運行過一次后就不會再被運行了(相當于自動注銷),但可以通過在被調(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值,到達該jiffies值時,將調(diào)用function函數(shù),并傳遞data作為參數(shù)。當一個定時器被注冊到內(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)定時器機制,而只留下動態(tài)定時器。相應(yīng)地在timer_bh()函數(shù)中也不再通過run_old_timers()函數(shù)來運行老式的靜態(tài)定時器。動態(tài)定時器與靜態(tài)

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

7、隔。出現(xiàn)該接口的原因是,如果用戶定義了一個1ms的定時器,可能當時系統(tǒng)負荷很重,導(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論