kthread schedule

線程狀態,摘自kernel-3.10.102 include/linux/sched.h
這裏寫圖片描述
除了RUNNING外,都不佔有CPU。
線(進)程描述符task_struct。

當線程執行的條件得不到滿足,可以用以下兩行使線程讓出CPU:

set_current_state(TASK_INTERRUPTIBLE);
schedule();

爲什麼schedule前要set_current_state
schedule實現如下

asmlinkage void __sched schedule(void)
{
    struct task_struct *tsk = current;
    sched_submit_work(tsk);
    __schedule();
}

__schedule()註釋
如果當前task state還是running狀態,
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) 無法進入,
不會執行到deactivate_task,線程仍有可能佔有CPU,沒有sleep。

schedule也有帶超時的函數

signed long __sched schedule_timeout(signed long timeout)

實現也在sched.h中,簡單來說就是在schedule()前設置了一個timer,timeout的時間後就wake_up_process(current)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章