recomendadas - ¿Por qué necesitamos una tarea de intercambio en Linux?
particiones linux recomendadas (4)
En realidad, hay una tarea inactiva por CPU, pero no se encuentra en la lista de tareas principal, sino que está en la estructura de ejecución de la estructura "struct rq" de la CPU, como struct task_struct *.
El planificador lo activa cuando no hay nada mejor que hacer (en esa CPU) y ejecuta algún código específico de la arquitectura para inactivar la CPU en un estado de baja energía.
La tarea inactiva (también conocida como swapper task) se elige para ejecutarse cuando no haya más tareas ejecutables en la cola de ejecución en el momento de la programación de tareas. Pero, ¿cuál es el uso para esta tarea tan especial? Otra pregunta es por qué no puedo encontrar este subproceso / proceso en la salida "ps aux" (PID = 0) del dominio del usuario.
La razón es histórica y programática. La tarea inactiva es la tarea que se ejecuta, si ninguna otra tarea es ejecutable, como usted lo dijo. Tiene la prioridad más baja posible, por eso es que no se está ejecutando otra tarea ejecutable.
Motivo del programa: esto simplifica mucho la programación del proceso, ya que no tiene que preocuparse por el caso especial: "¿Qué sucede si ninguna tarea es ejecutable?", Porque siempre hay al menos una tarea ejecutable, la tarea inactiva. También puede contar la cantidad de tiempo de CPU utilizado por tarea. Sin la tarea inactiva, ¿qué tarea obtiene el tiempo de CPU contado que nadie necesita?
Motivo histórico: antes de que tuviéramos CPUs que podían reducir o entrar en modos de ahorro de energía, TENÍAN que correr a toda velocidad en cualquier momento. Ejecutó una serie de instrucciones NOP, si no se podían ejecutar tareas. Hoy, la programación de la tarea inactiva generalmente baja la CPU utilizando instrucciones HLT (detener), de modo que se ahorra energía. Entonces, hay una funcionalidad de alguna manera en la tarea inactiva en nuestros días.
En Windows puede ver la tarea inactiva en la lista de procesos, es el proceso inactivo.
El kernel de Linux mantiene una lista de espera de los procesos que están "bloqueados" en IO / mutexes, etc. Si no hay proceso ejecutable, el proceso inactivo se coloca en la cola de ejecución hasta que una tarea que sale de la cola de espera la apropia.
La razón por la que tiene una tarea es para que pueda medir (aproximadamente) cuánto tiempo está desperdiciando el kernel debido a los bloques en IO / bloqueos, etc. Además, hace que el código sea mucho más fácil para el kernel, ya que la tarea inactiva es la misma que cada tarea que necesita para el cambio de contexto, en lugar de una tarea inactiva de "caso especial" que podría hacer que cambiar el comportamiento del núcleo sea más difícil.
Puede usar ps -ef y listará el no de proceso que se está ejecutando. Luego, en el primer enlace, listará el primer pid - 0 que es la tarea de intercambio.