?? timer.c.txt
字號:
any question,send email to netxiong@263.net
相關文件:
/include/linux/timer.h
***************************基本數據結構***********************************************
(1):tvec_base_t tvec_bases[NR_CPUS];
#每一個cpu都有一個tvec_base_t的結構對應。
**************************************************************************************
***********************初始化函數*****************************************************
(1):void __init init_timers(void)
#對所有的cpu的所有的tvec_bases[]結構進行初始化。
#init_bh(TIMER_BH, run_all_timers);
**************************************************************************************
****************************一般處理函數**********************************************
(1):static void run_all_timers(void)
#對所有的cpu上的時間等待隊列進行處理。
#for (i = 0; i < smp_num_cpus; i++)
#調用__run_timer進行處理
tvec_base_t *base = tvec_bases + i;
#
__run_timers(base);
(2):static void __run_timers(tvec_base_t *base)
#對所有在tv1上的等待隊列進行處理
#head = base->tv1.vec + base->tv1.index; //取出隊列的頭指針
#循環區數據直到回到頭指針。
#fn = timer->function;
data = timer->data; //取出處理函數和指針。
# detach_timer(timer); //從隊列中刪除。
#fn(data) //執行。
(3):void add_timer(timer_t *timer)
#把timer加入到timer隊列中去。
#首先檢查是否他已經在隊列中了
if (timer_pending(timer))
goto bug;
#調用 internal_add_timer(base, timer);加入
#參數設置timer->base = base把節點頭賦給它的參數。
(4):static inline void internal_add_timer(tvec_base_t *base, timer_t *timer)
#把timer加入到指定的base中區。
# list_add(&timer->list, vec->prev); //先來先服務。
(5):static inline int detach_timer(timer_t *timer)
#把timer從timer隊列中刪除。
#首先檢查是否他已經不在隊列中了,如果不在了,返回成功。
if (!timer_pending(timer))
return 0;
#否則刪除list_del(&timer->list);
**************************************************************************************
******************************時鐘中斷處理函數****************************************
(1):void do_timer(struct pt_regs *regs)
#(*(unsigned long *)&jiffies)++; //時標加一
# mark_bh(TIMER_BH); //標記timer的bottom half
# mark_bh(TQUEUE_BH); //同上
**************************************************************************************
**************************TQUEUE處理函數**********************************************
(1):void tqueue_bh(void)
#這個就是實事時鐘的處理函數。見do_timer時鐘中斷處理函數。
#每當一個jiffies發生后,do_timer就標記TQUEUE_BH,
#調用 run_task_queue(&tq_timer)對tq_timer隊列上等待處理的元素進行處理。
(2):void immediate_bh(void)
#immediate隊列的處理函數。
#調用 run_task_queue(&tq_immediate)對tq_timer隊列上等待處理的元素進行處理。
**************************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -