linuxのメモ

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

時間管理 - _msecs_to_jiffies()

概要

指定された時間(ミリ秒)に必要な周波数を算出する

詳細

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

  • HZ : _CONFIG_HZによって指定されるCPUの周波数を示す定数
  • MSEC_PER_SEC : 1秒 = 1000ミリ秒のため1000を示す定数

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

  • 周波数が1000以下で、周波数が1000の約数の場合
(m + (MSEC_PER_SEC / HZ) - 1) / (MSEC_PER_SEC / HZ)
  • 周波数が1000より大きく、周波数が1000の倍数の場合
    • mjiffies_to_msecs()MAX_JIFFY_OFFSETを渡して実行した値と比較して大きかった場合はMAX_JIFFY_OFFSETを返すがそれ以外は以下の式から算出される値を返す
m * (HZ / MSEC_PER_SEC)
  • 周波数がと1000の倍数でも約数でもない場合
    • 周波数が1000より大きく、mjiffies_to_msecs()MAX_JIFFY_OFFSETを渡して実行した値と比較して大きかった場合はMAX_JIFFY_OFFSETを返すがそれ以外は以下の式から算出される値を返す
(MSEC_TO_HZ_MUL32 * m + MSEC_TO_HZ_ADJ32) >> MSEC_TO_HZ_SHR32

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