4

Linux のスケジューラ コードを見ています。

if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
    if (unlikely(signal_pending_state(prev->state, prev))) {
        prev->state = TASK_RUNNING;
    } else {
        deactivate_task(rq, prev, DEQUEUE_SLEEP);
        prev->on_rq = 0;

私が理解しているように、prevタスクが中断できない場合、このコードは提供されたタスクを非アクティブ化します(そしてランキューから削除します)

preempt_count() & PREEMPT_ACTIVE == 0

誰かが私に何preempt_countのためにあるのかthread_info、いつこの条件が満たされるかどうかを説明できますか?

4

1 に答える 1