このページを編集する際は、編集に関する方針に従ってください。

概要

  • linux2.6/kernel/itimer.cにて定義
  • 引数で渡された時間タイプに基づき、引数で渡されたインターバルタイマをカレントタスクに設定する
    • 問題なく設定できた場合は0を返す

引数

  • which--時間タイプ
    名前説明
    ITIMER_REAL0リアルタイムタスクの走行時間
    ITIMER_VIRTUAL1タスクのユーザモードでの走行時間
    ITIMER_PROF2タスクの走行時間(ユーザモード、カーネルモードとも)を合計
  • value--カレントタスクに設定するインターバルタイマ
  • ovalue--既にカレントタスクに設定されていたインターバルタイマをここに退避する

実装

int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue) {

	register unsigned long i, j;
	int k;
	i = timeval_to_jiffies(&value->it_interval);
	j = timeval_to_jiffies(&value->it_value);
	if (ovalue && (k = do_getitimer(which, ovalue)) < 0)
		return k;
  • 時間タイプwhichで指定されたカレントタスクのインターバルタイマでの残り時間を、インターバルタイマovalueに設定する
	switch (which) {
		case ITIMER_REAL:
  • リアルタイムタスクの走行時間:
			del_timer_sync(&current->real_timer);
  • タイマcurrent->real_timerをタイマリスト副表から削除し、他のCPUで実行されている場合は実行が終了するまで待つ
			current->it_real_value = j;
			current->it_real_incr = i;
			if (!j)
				break;
			if (j > (unsigned long) LONG_MAX)
				j = LONG_MAX;
			i = j + jiffies;
			current->real_timer.expires = i;
			add_timer(&current->real_timer);
  • タイマリスト副表にタイマcurrent->real_timerを追加する
			break;
		case ITIMER_VIRTUAL:
  • タスクのユーザモードでの走行時間:
			if (j)
				j++;
			current->it_virt_value = j;
			current->it_virt_incr = i;
			break;
		case ITIMER_PROF:
  • タスクの走行時間(ユーザモード、カーネルモードとも)を合計:
			if (j)
				j++;
			current->it_prof_value = j;
			current->it_prof_incr = i;
			break;
		default:
			return -EINVAL;
	}
	return 0;

}

呼出元


履歴

  • 作者:ひら
  • 日付:2007/2/24
  • 対象:2.6.10
    更新日更新者更新内容

コメント/タグ?



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-26 (火) 14:31:10 (2520d)