setitimerシステムコール

setitimerシステムコールを実現するため、各プロセスはtask_struct内に各々 タイマーリストに登録するためのテーブル(real_timerメンバ)を一つ持たせてある。 setitimerシステムコールを発行するとこのテーブルをadd_timer関数により上記タイマーリストに登録する。指定された時間が経過すると登録されたハンドラが呼び出され、そのプロセスにシグナル(SIGALRM,SIGVTLALRM,SIGPROF)を送る。シグナル送信後、再びadd_timer関数によりタイマーリストに再登録される。

  • do_setitimer()
    • 実時間指定でsetitimerが指定された時、カレントプロセスの real_timerをタイマーリストに登録する。
    • 相対時間指定でsetitimerが指定された時は、タイムアウト時間の 設定のみでタイマーリストは使わない。タイムアウト時間は クロック処理の中からのポーリングで実現される。
  • it_real_fn()
    • 実時間指定でsetitimerが指定された時、タイムアウト時に呼び出される関数
    • SIGALRMシグナルを発生した後、add_timerで再度ハンドラを登録する。
  • do_it_virt()
    • クロック処理(timer_bh関数)の処理の延長で呼び出される。
    • カレントプロセスの走行時間を計算し、タイムアウト時間に達したら SIGVTLALRMシグナルを発生する。その後、次のタイムアウト時間を設定する。
  • do_it_prof()
  • do_int_virt関数と同様。SIGVTLALRMの代わりにSIGPROFシグナルを 発生させる。

XXX: SIGALRM(sys_alarm)、各種時刻関連システムコールの説明も追加するか...


(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1