linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

時間管理 - jiffies_to_msecs()

概要

周波数の回数から時間(ミリ秒)を算出する

詳細

周波数の回数を表す符号なし整数jを引数として取得し、以下の定数からミリ秒に変換する

  • HZ : _CONFIG_HZによって指定されるCPUの周波数を示す定数
  • MSEC_PER_SEC : 1秒 = 1000ミリ秒のため1000を示す定数
  • BITS_PER_LONG : CONFIG_64BITが有効な場合は64、無効な場合は32を示す定数

周波数の設定によって以下のように処理内容が変わる

  • 周波数が1000以下で、周波数が1000の約数の場合
(MSEC_PER_SEC / HZ) * j
  • 周波数が1000より大きく、周波数が1000の倍数の場合
(j + (HZ / MSEC_PER_SEC) - 1)/(HZ / MSEC_PER_SEC)
  • 周波数がと1000の倍数でも約数でもない場合
    • _BITS_PER_LONG == 32
(HZ_TO_MSEC_MUL32 * j) >> HZ_TO_MSEC_SHR32
  • _BITS_PER_LONG != 32
(j * HZ_TO_MSEC_NUM) / HZ_TO_MSEC_DEN

HZ_TO_MSEC_NUMHZ_TO_MSEC_DENHZ_TO_MSEC_MUL32HZ_TO_MSEC_SHR32は両方とも定義先が不明な謎定数です。。