国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 服務(wù)器 > Linux服務(wù)器 > 正文

簡(jiǎn)單談?wù)凩inux內(nèi)核定時(shí)器

2024-09-05 23:04:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

軟件意義上的定時(shí)器最終依賴(lài)硬件定時(shí)器來(lái)實(shí)現(xiàn), 內(nèi)核在時(shí)鐘中斷發(fā)生后檢測(cè)各定時(shí)器是否到期 , 到期后的定時(shí)器處理函數(shù)將作為軟中斷在底半部執(zhí)行 。實(shí)質(zhì)上,時(shí)鐘中斷處理程序會(huì) 換起TIMER_SOFTIRQ軟中斷 ,運(yùn)行當(dāng)前處理器上到期的所有定時(shí)器。

總結(jié)起來(lái)還是軟中斷的流程

a.注冊(cè)軟中斷處理函數(shù)

/*/linux/kernel.timer.c*/void __init init_timers(void)  -->open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);

b.添加timer_list到某個(gè)鏈表

void add_timer (struct timer_list *timer);

c.觸發(fā)軟中斷處理函數(shù)

void irq_exit(void)  -->tick_nohz_stop_sched_tick();    -->raise_softirq_irqoff(TIMER_SOFTIRQ);

d.調(diào)用軟中斷處理函數(shù)

static void run_timer_softirq(struct softirq_action *h)
    -->__run_timers(base);
        -->遍歷執(zhí)行時(shí)間到達(dá)的timer_list中的定時(shí)器處理函數(shù)
在Linux設(shè)備驅(qū)動(dòng)編程中,可以利用Linux內(nèi)核中提供的一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)來(lái)完成定時(shí)觸發(fā)工作或者完成某種周期性的事務(wù)。這組函數(shù)和數(shù)據(jù)結(jié)構(gòu)使得驅(qū)動(dòng)程序師在多數(shù)情況下不用關(guān)心具體的軟件定時(shí)器究竟對(duì)應(yīng)著怎樣的內(nèi)核和硬件行為。

1) 一個(gè)timer_list 結(jié)構(gòu)體的實(shí)例對(duì)應(yīng)一個(gè)定時(shí)器,其定義如下:

struct timer_list {   struct list_head entry, /*定時(shí)器列表*/   unsigned long expires, /*定時(shí)器到期時(shí)間*/   void (*function) (unsigned long), /*定時(shí)器處理函數(shù)*/   unsigned long data,/*作為參數(shù)被傳入定時(shí)器處理函數(shù)*/   struct timer_base_s *base,   ...};

實(shí)例化 struct timer_list my_timer;

2) 初始化定時(shí)器

void init_timer (struct timer_list *timer);TIMER_INITIALIZER (_function, _expires, _data)DEFINE_TIMER (_name, _function, _expires, _data)setup_timer ();

3) 增加定時(shí)器

void add_timer (struct timer_list *timer);

4) 刪除定時(shí)器

int del_timer (struct timer_list *timer);

5) 修改定時(shí)器的expire

int mod_timer (struct timer_list *timer, unsigned long expires);


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广河县| 大洼县| 东明县| 常熟市| 威远县| 朝阳县| 房产| 农安县| 霍山县| 北川| 沈丘县| 宽城| 治多县| 广汉市| 津市市| 延寿县| 隆德县| 鲁山县| 孟连| 休宁县| 富宁县| 泊头市| 星子县| 东乡族自治县| 蒙城县| 琼结县| 桃园县| 麻阳| 花莲县| 常宁市| 永定县| 镇赉县| 社会| 延津县| 建水县| 大港区| 长兴县| 临猗县| 巩义市| 天津市| 格尔木市|