高精度カーネルタイマ hrtimer のコールバックの仕組み(途中)
hrtimer は、 tick ベースの timer_list を用いた従来のカーネルタイマよりも、よりきめ細やかにタイマ管理を行いたい、というニーズに合わせて実装されました*1. カーネルタイマはタイマ割り込みのカウンタ jiffies が指定した値になると起動しますが、hrtimerでは ktime_t という単位を使ってコールバックが発生する時間を指定します.
hrtimerを使うための api の一覧は以下の通りです:
- hrtimer_init
- hrtimer 構造体の初期化を行う.
- hrtimer_start
- 高精度カーネルタイマの開始.
- hrtimer_try_to_cancel
- 高精度カーネルタイマのキャンセルを試みる. コールバック処理が実行中だったら、あきらめる.
- hrtimer_cancel
- 高精度カーネルタイマのキャンセル. 成功するまで hrtimer_try_to_cancel し続ける.
- hrtimer_get_remaining
- タイマが起動するまでの残り時間を、 ktime_t 型で返す.
- hrtimer_forward
- 現在時刻から、 ktime_t 分だけタイマの起動時間を進める.
その他、ktime_t と timespec 構造体の変換や、ktime_tの計算を行うための関数がいくつか用意されています.
(続く)
ktime_t の定義
// linux-2.6.27.8/linux/ktime.h 46 union ktime { 47 s64 tv64; 48 #if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR) 49 struct { 50 # ifdef __BIG_ENDIAN 51 s32 sec, nsec; 52 # else 53 s32 nsec, sec; 54 # endif 55 } tv; 56 #endif 57 };