2011-04-22 10 views
6

todos Tengo alguna pregunta sobre tareas en Linux, sé que todas las tareas que se encuentran actualmente en el estado TASK_RUNNING están en la estructura de datos llamada runqueue, pero ¿qué ocurre con las tareas que están esperando algún evento (estados que no son TASK_RUNNING, para ejemplo uno que está esperando la entrada del teclado). ¿Tengo alguna otra estructura de datos para tales tareas o solo general list of tasks? gracias de antemano por cualquier explicación¿Dónde se almacenan los procesos kernel que no se están ejecutando?

Respuesta

2

Los procesos en un estado TASK_INTERRUPTIBLE o TASK_UNINTERRUPTIBLE se subdividen en diferentes clases, cada una de las cuales corresponde a un evento específico. En este estado, el estado del proceso no proporciona suficiente información para recuperar el descriptor del proceso rápidamente, por lo que se utiliza otra lista de procesos llamada wait_queue. Wait_queue implementa esperas condicionales en eventos. Un proceso que espera un evento específico se coloca en la cola de espera adecuada.

Las colas de espera se implementan como listas cíclicas cuyos elementos incluyen punteros para procesar los descriptores . Cada elemento de una lista cola de espera es de tipo wait_queue:

struct wait_queue { 
    struct task_struct * task; 
    struct wait_queue * next; 
}; 
0

colas de espera se utilizan para permitir que los procesos que esperar a que un evento en particular que se produzca - tales como la espera de la entrada desde un teclado.

Cuestiones relacionadas