Veja 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 decrescente do número de encadeamentos executáveis (a "fila de execução") mais o número de encadeamentos ininterruptos (aguardando E / S ou esperando em 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 hotswap, falta de código de ponto flutuante que exija uma implementação de ponto fixo de exp (n). Mas é fácil ver que todos estão trabalhando para implementar fielmente o método descrito no comentário.
Você notará que o Linux conta threads , não apenas os processos, que respondem à sua pergunta.