[[PageNavi(internal22-navi)]]
{{{ comment
h2w-title:setitimerシステムコール
}}}
== setitimerシステムコール == #SECTION02332000000000000000
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 [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1
[[PageNavi(internal22-navi)]]