Podkreślanie harmonogramu jądra systemu Linux

Badam jądro Linuksa i próbuję dowiedzieć się, jak działa algorytm szeregowania Round Robin. wkernel\sched_rt.c plik, istnieje metoda zwanatask_tick_rt zdefiniowane w ten sposób:

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);
    }

}

Czego nie rozumiem (poza faktem, że jest bezużytecznyqueued parametr) jest tym, co kod próbuje osiągnąćif (--p->rt.time_slice) czek. Nie rozumiem, dlaczego wskaźnik listy zadańp jest zmniejszany o 1, innymi słowy, dlaczego metoda sprawdzapoprzednie zadanie zamiast obecnego? Wszelkie wyjaśnienia na ten temat są mile widziane.

questionAnswers(1)

yourAnswerToTheQuestion