linux核心定時器機制
所謂“定時器向量”就是指一條雙向循環定時器佇列(對列中的每一個元素都是一個timer_list結構):對列中的所有定時器都在同一個時刻到期,也即對列中的每一個timer_list結構都具有相同的expires值。顯然,可以用一個timer_list結構類型的指針來表示一個定時器向量。
Linux在include/linux/timer.h頭檔案中定義了數據結構timer_list來描述一個核心定時器:
struct timer_list {
struct list_head list;
unsigned long expires;
unsigned long data;
void (*function)(unsigned long);
};
各數據成員的含義如下:
(1)雙向鍊表元素list:用來將多個定時器連線成一條雙向循環佇列。
(2)expires:指定定時器到期的時間,這個時間被表示成自系統啟動以來的時鐘滴答計數(也即時鐘節拍數)。當一個定時器的expires值小於或等於jiffies變數時,我們就說這個定時器已經逾時或到期了。在初始化一個定時器後,通常把它的expires域設定成當前expires變數的當前值加上某個時間間隔值(以時鐘滴答次數計)。
(3)函式指針function:指向一個可執行函式。當定時器到期時,核心就執行function所指定的函式。而data域則被核心用作Function函式的調用參數。