Veja o kernel / sched / loadavg.c, que tem um comentário longo e excelente no início, explicando a derivação da média de carga de uma média exponencialmente decadente do número de threads executáveis (a "fila de execução") mais o número de threads ininterruptos (aguardando E / S ou aguardando um bloqueio).
Aqui está a essência do comentário, mas vale a pena ler na íntegra:
* 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)
A vida real torna o código um tanto complexo: contadores por CPU, kernels sem ticks, CPUs com hotswap, falta de código de ponto de floaing que requer uma implementação de exp (n) em ponto fixo. Mas é fácil perceber que todos eles estão trabalhando para implementar fielmente o método descrito no comentário.
Você observará que o Linux conta threads , não apenas processos, o que responde à sua pergunta.