定時器是一種軟體功能,即允許在將來的某個時刻,函式在給定的時間間隔用完時被呼叫。超時表示與定時器相關的時間間隔已經用完的那個時刻。
linux上考慮兩種型別的定時器,即動態定時和間隔定時器。第一種型別由核心使用,而間隔定時器由程序在使用者態建立。
動態定時器
動態定時的主要資料結構是乙個叫做tvec_bases的per cpu變數,他包含nr_cpus個元素,系統中每個cpu都有乙個。每個元素是乙個tvec_base_t型別的資料結構,他包含相應cpu中處理動態定時器需要的所有資料。
struct tvec_base ____cacheline_aligned;
欄位tv1的資料解雇為tvec_root_t型別,包含乙個vec陣列,這個陣列由256個list_head元素組成(即256個動態定時器鍊錶組成)。這個結構包含了在緊接著到來的255個節拍內將要到期的所有動態定時器。
欄位tv2,tv3和tv4的資料結構都是tvec_t型別,該型別有乙個陣列vec。這些鍊錶包含在緊接著到來的2^14-1/2^20-1以及2^26-1個節拍內將要到期的所有動態定時器。
欄位tv5與前面的字段幾乎相同,但唯一區別就是vec陣列的最後一項是乙個大expires欄位值得動態定時器鍊錶。tv5從不需要從其他的陣列補充。
動態定時器程式設計
1,申請timer_list結構並對其初始化,其中必須初始化的有expires,function
struct timer_list ;
2,呼叫init_timer函式初始化
該函式最終呼叫下面函式
static void __init_timer(struct timer_list *timer, const char *name, struct lock_class_key *key)
可看到初始化的幾個相關變數。
3,呼叫add_timer函式將申請的timer_list結構新增到合適的鍊錶
其中對於定時器的修改、刪除等操作,核心提供了相應的函式。
linux 核心 核心定時器
一.時鐘中斷概念 1.時鐘中斷由系統的定時硬體以週期性的時間間隔產生,這個間隔 即頻率 由核心根據hz來確定,hz是乙個與體系結構無關的常數,可配置 50 1200 在x86平台上預設值是1000 2.每當時鐘中斷發生的時候,全域性變數jiffies unsigned long 就加1,所以jiff...
linux核心驅動之定時器
運用場景 1.初始化乙個驅動,經過一定的時間再執行乙個特殊動作 2.初始化乙個驅動,之後每隔一定的時間執行乙個特殊動作 定時器工作流程 a.建立timer,編寫定時器處理函式 b.為timer的expires data function賦值 c.呼叫add timer將timer加入列表 d.定時器...
linux核心定時器
度量時間差 時鐘中斷由系統的定時硬體以週期性的時間間隔產生,這個間隔 頻率 由核心根據hz來確定,hz是乙個與體系結構無關的常數,可配置 50 1200 在x86平台,預設值為1000.每秒鐘產生1000次時鐘中斷 每當時鐘中斷發生時,全域性變數jiffies就加1,因此其記錄了自linux啟動後時...