[[PageNavi(internal24-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シグナルを 発生させる。
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]