內核--時間

功能:實現定時器到期後調用一個函數進行相關事件的處理!編程

獲取內核時間:數組

內核延時:函數

  死循環延時:進程

    長延時:jiffies事件

    短延時:mdelay  udelayssl

  睡眠延時:多進程

    ssleep變量

    msleep原理

內核定時器:循環

    內核定時器原理:

    內核本身有一個結構體來實現內核定時器的機制:使用全局的jiffies變量:這個變量是在內核啓動的過程逐漸累加的:初始值是-5*HZ*60 也就是5分鐘。

    爲何初始值是個負數呢?由於在內核啓動的時候,有不少進程會對jiffies進行檢查:若是jiffies是正數,可能會檢查失敗直接退出,因此這個進程發就會啓動失敗。

    內核本身維護了一個鏈表數組:數組大小爲256:便可以掛載256條鏈表:這些鏈表存放着內核的定時器jiff的值與jiffies的差值:相同的在一個鏈表中。以下圖

    ------------------------0ms  :即馬上要到時的定時器:可能會掛載一些定時器處理函數。

    ------------------------1ms :

    ------------------------2ms :

          |

          |

    ------------------------255ms :

    除了這條鏈表外,內核還維護其餘255個鏈表:分紅四個部分,每部分64個鏈表:他們存放的着內核的定時器jiff的值與jiffies的差值:就不是1ms的間距了:具體的我也不知道!!!!呵呵

    一樣是上面的實現機制:

    jiffies每次增長的時候:內核都會對這些鏈表裏面的內容進行遷移:保證對應鏈表裏面記錄的定時器到時時間的一致性。

    上面對應的內核中的定時器原理講述完成:

    對應的進行代碼編寫的時候:也是有相應的函數供咱們使用:這裏就再也不進行描述了:能夠參考一些其餘的編程手冊!

 

高精度定時器:

    高精度定時器:是內核提供的一種更加精密的時間計時方式:不是依賴於jiffies這個全局變量。能夠實現相對時間的定時,也能夠實現絕對時間的定時。同時能夠實現循環定時,這個要根據定時觸發的handler的返回值來決定的。

    固然具體的代碼:內核也提供了一套高精度定時器的操做函數:須要本身去參考編程手冊練習下:hr_timer xxxxx等一列函數!

關於內核時間相關的知識點實際經常使用的就這些了!但願小夥伴們多加練習,結合實際項目去鞏固這些知識!

相關文章
相關標籤/搜索