Понимание планировщика ядра Linux

Я изучаю ядро Linux и пытаюсь понять, как работает алгоритм планирования Round Robin. вkernel\sched_rt.c файл тамметод называетсяtask_tick_rt определяется так:}

static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued)
{
    update_curr_rt(rq);

    watchdog(rq, p);

    /*
     * RR tasks need a special form of timeslice management.
     * FIFO tasks have no timeslices.
     */
    if (p->policy != SCHED_RR)
            return;

    if (--p->rt.time_slice)
            return;

    p->rt.time_slice = DEF_TIMESLICE;

    /*
     * Requeue to the end of queue if we are not the only element
     * on the queue:
     */
    if (p->rt.run_list.prev != p->rt.run_list.next) {
            requeue_task_rt(rq, p, 0);
            set_tsk_need_resched(p);
    }

Что я не делаюне понимаю (кроме того факта, чтобесполезныйqueued параметр) это то, что код пытается достичь с помощьюif (--p->rt.time_slice) проверять. Я нене понимаю, почему указатель списка задачp уменьшается на 1, другими словами, почему метод проверяетпредыдущее задание вместо текущего? Любые разъяснения по этому поводу приветствуются.

Ответы на вопрос(1)

Ваш ответ на вопрос