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

下載本文檔

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

文檔簡介

1、Linux定時(shí)器的使用定時(shí)器的使用內(nèi)核定時(shí)器是內(nèi)核用來控制在未來某個(gè)時(shí)間點(diǎn)(基于jiffies)調(diào)度執(zhí)行某個(gè)函數(shù)的一種機(jī)制,其實(shí)現(xiàn)位于和kerneltimer.c文件中。被調(diào)度的函數(shù)肯定是異步執(zhí)行的,它類似于一種“軟件中斷”,而且是處于非進(jìn)程的上下文中,所以調(diào)度函數(shù)必須遵守以下規(guī)則:1)沒有current指針、不允許訪問用戶空間。因?yàn)闆]有進(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)核定時(shí)器的調(diào)度函數(shù)運(yùn)行過一次后就不會(huì)再被運(yùn)行了(相當(dāng)于自動(dòng)注銷),但可以通過在被調(diào)度的函數(shù)中重新調(diào)度自己來周期運(yùn)行。在SMP系統(tǒng)中,調(diào)度函數(shù)總是在注冊它的同一CPU上運(yùn)行,以盡可能獲得緩存的局域性。內(nèi)核定時(shí)器的數(shù)據(jù)結(jié)構(gòu)structtimer_liststructlist_headentryunsignedlongexpiresvoid(function)(unsigned

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

4、ttimer_list之前,需要初始化該數(shù)據(jù)結(jié)構(gòu),確保所有的字段都被正確地設(shè)置。初始化有兩種方法。方法一:DEFINE_TIMER(timer_namefunction_nameexpires_valuedata)該宏會(huì)定義一個(gè)名叫timer_name內(nèi)核定時(shí)器,并初始化其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)核對定時(shí)器的描述Linux內(nèi)核2.4版中去掉了老版本內(nèi)核中的靜態(tài)定時(shí)器機(jī)制,而只留下動(dòng)態(tài)定時(shí)器。相應(yīng)地在timer_bh()函數(shù)中也不再通過run_old_timers()函數(shù)來運(yùn)行老式的靜態(tài)定時(shí)器。動(dòng)態(tài)定時(shí)器與靜態(tài)

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

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

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

溫馨提示

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

評論

0/150

提交評論