簡單談談Linux內(nèi)核定時器
軟件意義上的定時器最終依賴硬件定時器來實現(xiàn), 內(nèi)核在時鐘中斷發(fā)生后檢測各定時器是否到期 , 到期后的定時器處理函數(shù)將作為軟中斷在底半部執(zhí)行 。實質(zhì)上,時鐘中斷處理程序會 換起TIMER_SOFTIRQ軟中斷 ,運行當前處理器上到期的所有定時器。
總結(jié)起來還是軟中斷的流程
a.注冊軟中斷處理函數(shù)
/*/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.觸發(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í)行時間到達的timer_list中的定時器處理函數(shù)
在Linux設備驅(qū)動編程中,可以利用Linux內(nèi)核中提供的一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)來完成定時觸發(fā)工作或者完成某種周期性的事務。這組函數(shù)和數(shù)據(jù)結(jié)構(gòu)使得驅(qū)動程序師在多數(shù)情況下不用關(guān)心具體的軟件定時器究竟對應著怎樣的內(nèi)核和硬件行為。
1) 一個timer_list 結(jié)構(gòu)體的實例對應一個定時器,其定義如下:
struct timer_list {
struct list_head entry, /*定時器列表*/
unsigned long expires, /*定時器到期時間*/
void (*function) (unsigned long), /*定時器處理函數(shù)*/
unsigned long data,/*作為參數(shù)被傳入定時器處理函數(shù)*/
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);
- 探索Linux內(nèi)核:Kconfig的秘密
- 詳解Linux內(nèi)核內(nèi)存管理架構(gòu)
- Linux 內(nèi)核空間與用戶空間實現(xiàn)與分析
- 詳解Linux內(nèi)核進程調(diào)度函數(shù)schedule()的觸發(fā)和執(zhí)行時機
- Linux利用Sysctl命令調(diào)整內(nèi)核參數(shù)
- Linux內(nèi)核參數(shù)調(diào)整方法
- Linux內(nèi)核啟動參數(shù)詳解
- Linux中的內(nèi)核鏈表實例詳解
- 淺談安裝ORACLE時在Linux上設置內(nèi)核參數(shù)的含義
- Linux內(nèi)核設備驅(qū)動之Linux內(nèi)核基礎筆記整理
相關(guān)文章
Xshell實現(xiàn)Windows上傳文件到Linux主機的方法
這篇文章主要介紹了Xshell實現(xiàn)Windows上傳文件到Linux主機的方法,需要的朋友可以參考下2017-12-12
Ubuntu 16.04與Apache虛擬主機配置的步驟詳解
這篇文章主要給大家介紹了關(guān)于Ubuntu 16.04與Apache虛擬主機配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用ubuntu16.04系統(tǒng)具有一定的參考學習價值,需要的朋友們來一起看看吧。2018-04-04
VirtualBox 未指定要bridged的網(wǎng)絡界面的解決辦法
這篇文章主要介紹了VirtualBox 未指定要bridged的網(wǎng)絡界面的解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家解決遇到這樣的問題,需要的朋友可以參考下2017-10-10

