內(nèi)核定時(shí)器
軟件上的定時(shí)器最終要依靠硬件時(shí)鐘來(lái)實(shí)現(xiàn),簡(jiǎn)單的說(shuō),內(nèi)核會(huì)在時(shí)鐘中斷發(fā)生后檢測(cè)各個(gè)注冊(cè)到內(nèi)核的定時(shí)器是否到期,如果到期,就回調(diào)相應(yīng)的注冊(cè)函數(shù),將其作為中斷底半部來(lái)執(zhí)行。實(shí)際上,時(shí)鐘中斷處理程序會(huì)觸發(fā)TIMER_SOFTIRQ軟中斷,運(yùn)行當(dāng)前處理器上到期的所有定時(shí)器。
設(shè)備驅(qū)動(dòng)程序如要獲得時(shí)間信息以及需要定時(shí)服務(wù),都可以使用內(nèi)核定時(shí)器。
jiffies
要說(shuō)內(nèi)核定時(shí)器,首先就得說(shuō)說(shuō)內(nèi)核中關(guān)于時(shí)間的一個(gè)重要的概念:jiffies變量,作為內(nèi)核時(shí)鐘的基礎(chǔ),jiffies每隔一個(gè)固定的時(shí)間就會(huì)增加1,稱為增加一個(gè)節(jié)拍,這個(gè)固定間隔由定時(shí)器中斷來(lái)實(shí)現(xiàn),每秒中產(chǎn)生多少個(gè)定時(shí)器中斷,由在<linux/param.h>中定義的HZ宏來(lái)確定,如此,可以通過(guò)jiffies獲取一段時(shí)間,比如jiffies/HZ表示自系統(tǒng)啟動(dòng)的秒數(shù)。下兩秒就是(jiffies/HZ+2),內(nèi)核中用jiffies來(lái)計(jì)時(shí),秒轉(zhuǎn)換成的jiffies:seconds*HZ,所以以jiffiy為單位,以當(dāng)前時(shí)刻為基準(zhǔn)計(jì)時(shí)2秒:(jiffies/HZ+2)*HZ=jiffies+2*HZ如果要獲取當(dāng)前時(shí)間,可以使用do_gettimeofday(),該函數(shù)填充一個(gè)struct timeval結(jié)構(gòu),有著接近微妙的分辨率。
//kernel/time/timekeeping.c 473 /** 474 * do_gettimeofday - Returns the time of day in a timeval 475 * @tv: pointer to the timeval to be set 476 * 477 * NOTE: Users should be converted to using getnstimeofday() 478 */ 479 void do_gettimeofday(struct timeval *tv)
驅(qū)動(dòng)程序?yàn)榱俗層布凶銐虻臅r(shí)間完成一些任務(wù),常常需要將特定的代碼延后一段時(shí)間來(lái)執(zhí)行,根據(jù)延時(shí)的長(zhǎng)短,內(nèi)核開發(fā)中使用長(zhǎng)延時(shí)和短延時(shí)兩個(gè)概念。長(zhǎng)延時(shí)的定義為:延時(shí)時(shí)間>多個(gè)jiffies,實(shí)現(xiàn)長(zhǎng)延時(shí)可以用查詢jiffies的方法:
time_before(jiffies, new_jiffies);time_after(new_jiffiesmjiffies);
**短延時(shí)的定義為:延遲事件接近或短于一個(gè)jiffy,實(shí)現(xiàn)短延時(shí)可以調(diào)用
udelay();mdelay();
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26