Mirando la fuente de strace
, encontré el uso de la bandera de clonación CLONE_IDLETASK
que se describe allí como:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Después de profundizar en él, descubrí que, aunque ese indicador no está cubierto man clone
, el núcleo lo usa realmente durante el proceso de arranque para crear procesos inactivos (todos los cuales deberían tener PID 0) para cada CPU en la máquina. es decir, una máquina con 8 CPU tendrá al menos 7 (ver pregunta más abajo) tales procesos "en ejecución" (comillas).
Ahora, esto me lleva a un par de preguntas sobre qué hace realmente ese proceso "inactivo". Mi suposición es que ejecuta la operación NOP continuamente hasta que finaliza su período de tiempo y el núcleo asigna un proceso real para ejecutar o asignar el proceso inactivo una vez más (si la CPU no se está utilizando). Sin embargo, eso es una suposición completa. Entonces:
En una máquina con, digamos, 8 CPU, ¿se crearán 7 procesos inactivos? (¿y el núcleo mismo tendrá una CPU mientras no se realice el trabajo en el espacio del usuario?)
¿Es el proceso inactivo realmente solo un flujo infinito de operaciones NOP? (o un bucle que hace lo mismo).
¿El uso de la CPU (por ejemplo
uptime
) simplemente se calcula por cuánto tiempo estuvo el proceso inactivo en la CPU y cuánto tiempo no estuvo allí durante un cierto período de tiempo?
PD: es probable que buena parte de esta pregunta se deba al hecho de que no entiendo completamente cómo funciona una CPU. es decir, entiendo el ensamblaje, los plazos y las interrupciones, pero no sé cómo, por ejemplo, una CPU puede usar más o menos energía dependiendo de lo que esté ejecutando. Estaría agradecido si alguien me puede iluminar sobre eso también.