Por que um processo no estado TASK_INTERRUPTIBLE que está preempted permanece na fila de execução?

1

Sou totalmente novo no kernel do Linux.

Em "Entendendo o Kernel do Linux", página 279, o autor diz o seguinte, onde prev refere-se ao processo que chamou schedule() :

schedule() examines the state of prev. If it is not runnable and it has not been preempted in Kernel Mode (see the section “Returning from Interrupts and Exceptions” in Chapter 4), then it should be removed from the runqueue. However, if it has nonblocked pending signals and its state is TASK_INTERRUPTIBLE, the function sets the process state to TASK_RUNNING and leaves it into the runqueue.

Por que prev deve permanecer na fila de execução em vez de adormecer?

E se prev não for executável e impedido no modo kernel?

    
por pooyan 01.12.2017 / 15:53

1 resposta

1

Do que você disse acima:

... if it has nonblocked pending signals and its state is TASK_INTERRUPTIBLE ...

Ao deixá-lo na fila de execução, ele dará ao processo uma oportunidade de lidar com seus sinais pendentes. Um processo deve lidar com sinais pendentes antes de dormir.

    
por 01.12.2017 / 16:08

Tags