大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 淺談Linux內(nèi)核定時(shí)器

淺談Linux內(nèi)核定時(shí)器

更新時(shí)間:2020-12-17 17:53:38 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1426次

Linux內(nèi)核定時(shí)器是內(nèi)核用來(lái)控制在未來(lái)某個(gè)時(shí)間點(diǎn)(基于jiffies)調(diào)度執(zhí)行某個(gè)函數(shù)的一種機(jī)制,其實(shí)現(xiàn)位于 <Linux/timer.h> 和 kernel/timer.c 文件中。無(wú)論是從單片機(jī)還是到后面的多任務(wù)系統(tǒng),還是RTOS到Linux,都需要用到定時(shí)器。

 

首先我們要知道被調(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) 任何被訪問的數(shù)據(jù)結(jié)構(gòu)都應(yīng)該針對(duì)并發(fā)訪問進(jìn)行保護(hù),以防止競(jìng)爭(zhēng)條件。

而內(nèi)核定時(shí)器的調(diào)度函數(shù)運(yùn)行過(guò)一次后就不會(huì)再被運(yùn)行了(相當(dāng)于自動(dòng)注銷),但可以通過(guò)在被調(diào)度的函數(shù)中重新調(diào)度自己來(lái)周期運(yùn)行。

在SMP系統(tǒng)中,調(diào)度函數(shù)總是在注冊(cè)它的同一CPU上運(yùn)行,以盡可能獲得緩存的局域性。

 

1.Linux內(nèi)核定時(shí)器的數(shù)據(jù)結(jié)構(gòu):

struct timer_list {

    struct list_head entry;

    unsigned long expires;

    void (*function)(unsigned long);

    unsigned long data;

    struct tvec_base *base;

    /* ... */

};

其中 expires 字段表示期望定時(shí)器執(zhí)行的 jiffies 值,到達(dá)該 jiffies 值時(shí),將調(diào)用 function 函數(shù),并傳遞 data 作為參數(shù)。當(dāng)一個(gè)定時(shí)器被注冊(cè)到內(nèi)核之后,entry 字段用來(lái)連接該定時(shí)器到一個(gè)內(nèi)核鏈表中。base 字段是內(nèi)核內(nèi)部實(shí)現(xiàn)所用的。

 

2.jiffies   

全局變量jiffies用來(lái)記錄自系統(tǒng)啟動(dòng)以來(lái)產(chǎn)生的節(jié)拍的總數(shù)。啟動(dòng)時(shí),內(nèi)核將該變量初始化為0,此后,每次時(shí)鐘中斷處理程序都會(huì)增加該變量的值。一秒內(nèi)時(shí)鐘中斷的次數(shù)等于Hz,所以jiffies一秒內(nèi)增加的值也就是Hz。  

HZ:這個(gè)可以認(rèn)為是一個(gè)頻率,一秒內(nèi)系統(tǒng)時(shí)鐘中斷的次數(shù)        

Jiffies/HZ:我想知道從系統(tǒng)開機(jī)到現(xiàn)在系統(tǒng)運(yùn)行了多少秒,可以這樣計(jì)算         jiffies類型為無(wú)符號(hào)長(zhǎng)整型(unsigned long)  

當(dāng)jiffies的值超過(guò)它的最大存放范圍后就會(huì)發(fā)生溢出。對(duì)于32位無(wú)符號(hào)長(zhǎng)整型,最大取值為(2^32)-1,即429496795。如果節(jié)拍計(jì)數(shù)達(dá)到了最大值后還要繼續(xù)增加,它的值就會(huì)回繞到0。

3.使用定時(shí)器步驟

struct timer_list  my_timer_list;//定義一個(gè)定時(shí)器,可以把它放在你的設(shè)備結(jié)構(gòu)中init_timer(&my_timer_list);//初始化一個(gè)定時(shí)器

my_timer_list.expire=jiffies+HZ;//定時(shí)器1s后運(yùn)行服務(wù)程序my_timer_list.function=timer_function;//定時(shí)器服務(wù)函數(shù)add_timer(&my_timer_list);//添加定時(shí)器

void timer_function(unsigned long);//寫定時(shí)器服務(wù)函數(shù)del_timer(&my_timer_list);//當(dāng)定時(shí)器不再需要時(shí)刪除定時(shí)器del_timer_sync(&my_timer_list);//基本和del_timer一樣,比較適合在多核處理器使用,一般推薦使用del_timer_sync

 

4.實(shí)例分析#include

#include

#include

#include   /*timer*/

#include   /*jiffies*/

 

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Qifa");

MODULE_DESCRIPTION("Timer Module");

MODULE_ALIAS("timer module");

 

struct timer_list timer;

 

void timer_function(int para)

{

    static int i = 0;

 

    printk("#########%d########Timer Expired and para is %d !!\n",i++,para);

    printk("jiffies:%lu jiffies/Hz: %lu HZ:%d\n",jiffies,(jiffies/HZ),HZ);

    mod_timer(&timer,jiffies+(2*HZ));    

}

 

 

int timer_init(void)

{

    init_timer(&timer);

    timer.data = 5;

    timer.expires = jiffies + (1 * HZ);

    timer.function = timer_function;

    add_timer(&timer);

 

    return 0;

}

 

 

void timer_exit(void)

{

    del_timer( &timer );

}

 

module_init(timer_init);

module_exit(timer_exit);

 

使用定時(shí)器的目的無(wú)外乎是為了周期性的執(zhí)行某一任務(wù),或者是到了一個(gè)指定時(shí)間去執(zhí)行某一個(gè)任務(wù)。只要掌握了這一關(guān)鍵點(diǎn),就能更好地理解定時(shí)器的工作機(jī)制,Linux內(nèi)核定時(shí)器也是如此。在本站的Linux教程里還有關(guān)于Linux中其他類型的定時(shí)器的介紹,感興趣的小伙伴可以深入學(xué)習(xí)一下。


提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 福利视频网 | 91拍拍在线观看 | 毛片女人| 伊人影视频 | 国产成人丝袜精品自啪在线 | 亚洲区视频在线观看 | 狼狼色丁香久久女婷婷综合 | 国产99久久九九精品免费 | 亚洲成人第一页 | 久草在线国产 | 婷婷毛片 | 四虎在线精品免费高清在线 | 久久免费大片 | 久久久噜噜噜久久网 | 国产精品女仆装在线播放 | 超91精品手机国产在线 | 亚洲综合日韩在线亚洲欧美专区 | 99国产成人高清在线视频 | 日韩免费视频一区二区 | 久久久青青 | 欧洲成人免费高清视频 | 7777精品久久久大香线蕉 | 亚洲欧美日韩在线一区二区三区 | 玖玖在线资源站 | 免费精品国产自产拍观看 | 国产欧美一区二区精品仙草咪 | a高清免费毛片久久 | 国产麻豆精品在线 | 97超精品视频在线观看 | 一区二区三区免费在线观看 | 国产你懂得| 日韩亚洲视频 | 亚洲 欧美 自拍 卡通 综合 | 五月婷婷视频在线 | 99精品视频99 | 四虎影院在线 | 日韩精品午夜视频一区二区三区 | 日韩欧美视频 | 中文字幕亚洲综合精品一区 | 国产在线麻豆精品 | 天天操夜夜做 |