91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

簡單談談Linux內核定時器

發布時間:2020-09-26 07:39:05 來源:腳本之家 閱讀:251 作者:yangjiguang 欄目:服務器

軟件意義上的定時器最終依賴硬件定時器來實現, 內核在時鐘中斷發生后檢測各定時器是否到期 , 到期后的定時器處理函數將作為軟中斷在底半部執行 。實質上,時鐘中斷處理程序會 換起TIMER_SOFTIRQ軟中斷 ,運行當前處理器上到期的所有定時器。

總結起來還是軟中斷的流程

a.注冊軟中斷處理函數

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

b.添加timer_list到某個鏈表

void add_timer (struct timer_list *timer);

c.觸發軟中斷處理函數

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

d.調用軟中斷處理函數

static void run_timer_softirq(struct softirq_action *h)
    -->__run_timers(base);
        -->遍歷執行時間到達的timer_list中的定時器處理函數
在Linux設備驅動編程中,可以利用Linux內核中提供的一組函數和數據結構來完成定時觸發工作或者完成某種周期性的事務。這組函數和數據結構使得驅動程序師在多數情況下不用關心具體的軟件定時器究竟對應著怎樣的內核和硬件行為。

1) 一個timer_list 結構體的實例對應一個定時器,其定義如下:

struct timer_list {

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

};

實例化 struct timer_list my_timer;

2) 初始化定時器

void init_timer (struct timer_list *timer);

TIMER_INITIALIZER (_function, _expires, _data)

DEFINE_TIMER (_name, _function, _expires, _data)

setup_timer ();

3) 增加定時器

void add_timer (struct timer_list *timer);

4) 刪除定時器

int del_timer (struct timer_list *timer);

5) 修改定時器的expire

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜新市| 高台县| 布拖县| 界首市| 义乌市| 竹山县| 天镇县| 东乡族自治县| 息烽县| 金阳县| 阿拉善左旗| 天水市| 朝阳区| 大埔县| 香河县| 景德镇市| 临潭县| 太仆寺旗| 郓城县| 茂名市| 遵义市| 措勤县| 乃东县| 白沙| 康平县| 新昌县| 无为县| 塔河县| 青阳县| 寿阳县| 略阳县| 苍溪县| 彭泽县| 友谊县| 富锦市| 张掖市| 乐安县| 浪卡子县| 汝阳县| 新营市| 阳山县|