Subrayando el Programador de Kernel de Linux

Estoy estudiando el kernel de Linux y estoy tratando de averiguar cómo funciona el algoritmo de programación de Round Robin. En elkernel\sched_rt.c archivo, hay un método llamadotask_tick_rt así definido:

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

}

Lo que no entiendo (además del hecho de que hay un inútilqueued parámetro) es lo que el código está tratando de lograr por elif (--p->rt.time_slice) comprobar. No entiendo por qué el puntero de la lista de tareasp se está reduciendo en 1, en otras palabras, ¿por qué el método verifica eltarea previa en lugar de la actual? Cualquier aclaración sobre esto es apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta