クロックハンドラ

Linuxの時計処理は二つに分けられている。一つがハードウェア割り込みハンドラとして動作する部分であり、もう一つがBHハンドラとして動作する部分である。

割り込みハンドラとして動く時計(do_timer)はjiffiesと呼ばれるシステム起動からの時刻を数える変数を更新と、カレントプロセスに関する処理を行う。それ以外の処理は全て遅延処理として実現している。

カレントプロセスに対する処理は、v2.4でBHハンドラから割り込みハンドラの処理へ移された。

  • システム起動からの時刻jiffiesの更新
  • カレントプロセスに対する処理(update_process_times関数)
    • プロファイリング
    • 統計情報収集
    • 再スケジューリング要求
  • 時計処理本体(timer_bh関数)の起動要求
  • タスクキューtq_timerの起動要求

クロック処理本体(timer_bh関数)はBHハンドラとして起動される。この関数では以下にあげた処理を実行する。割り込みハンドラと異なり大きく処理が遅延させられる事もありうる。その場合、このBHハンドラ(timer_bh関数)が起動される前に、割り込みハンドラ(do_timer関数)が複数回動いていることもあるので、その場合timer_bh関数では数クロック分の処理をまとめて行わねばならない。

  • カレンダ(GMT時刻)の更新(update_wall_time関数)
  • ロードアベレージの計算(calc_load関数)
  • タイマーリストの管理および実行(run_timer_list関数)
img16.gif

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1