Consulte kernel / sched / loadavg.c, que tiene un comentario largo y excelente al principio que explica la derivación del promedio de carga de un promedio en descomposición exponencial del número de subprocesos ejecutables (la "cola de ejecución") más el número de subprocesos ininterrumpidos (en espera en E / S o esperando en una cerradura).
Aquí está la esencia del comentario, pero vale la pena leerlo en su totalidad:
* The global load average is an exponentially decaying average of
* nr_running + nr_uninterruptible.
*
* Once every LOAD_FREQ:
* nr_active = 0;
* for_each_possible_cpu(cpu)
* nr_active += cpu_of(cpu)->nr_running +
* cpu_of(cpu)->nr_uninterruptible;
* avenrun[n] = avenrun[0] *
* exp_n + nr_active *
* (1 - exp_n)
La vida real hace que el código sea algo complejo: contadores por CPU, núcleos sin tick, CPU de hotswap, falta de código de punto flotante que requiere una implementación de punto fijo de exp (n). Pero es fácil ver que todos están trabajando para implementar fielmente el método descrito en el comentario.
Notarás que Linux cuenta hilos , no solo procesos, lo que responde a tu pregunta.