淺談 Linux 下的 Timer 框架

n6xb 9年前發布 | 17K 次閱讀 Linux

前言

timer

看著圖中的計時器,想一想現實中我們是如何計時的?想一想如果計劃用 20 分鐘來煮一鍋粥都有哪些步驟?

  1. 在心里記下時鐘上 20 分鐘的位置。
  2. 開始煮粥,并按下計時器。
  3. 重復拿當前時間和 20 分鐘比較。如果還沒到,繼續煮粥。
  4. 當當前時間到達目標時間 20 分鐘后,告訴自己,粥好了可以吃了。

從上面的例子,我們能得到什么?如果抽象并構建一個時鐘模型,我們需要哪些東西呢?我想大概是這樣:

Timer Framework

  1. 一個單調遞增的計數器 counter
  2. 一個可設置的比較器 comparer
  3. 當 counter 中的數字增加到等于 comparer 的時候觸發中斷,告訴你,“粥”好了可以吃了

Linux 下的 Timer 框架

Linux 下的 Timer 框架和上面的例子大致相似,它把一個 Timer 拆分成兩部分:Clocksource 和 Clock_event_device。Clocksource 主要包括 counter 等時鐘源信息,Clock_event_device 主要包括:設置 comparer,觸發中斷,中斷處理等任務。

Liux Timer Framework

Clocksource

Clocksource 最重要的接口是 read counter func,通過此接口,內核可以讀取 counter 中的值。完整的 Clocksource 接口定義見 include/linux/clocksource.h。

Clock_event_device

Clock_event_device 部分需要實現如下接口

  • 通過 set_next_event 來設置下次時鐘中斷觸發的條件。
  • 通過 irq && irq_action 來設置時鐘中斷觸發后要做的事情。

完整的 Clock_event_device 接口定義見 include/linux/clockchips.h

來自:http://www.tinylab.org/take-a-look-at-the-linux-timer-framework/

 本文由用戶 n6xb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!