Olhando para a fonte strace
, encontrei o uso da bandeira do clone, CLONE_IDLETASK
que é descrita como:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Depois de analisar mais detalhadamente, descobri que, embora esse sinalizador não seja coberto, man clone
ele é realmente usado pelo kernel durante o processo de inicialização para criar processos inativos (todos com PID 0) para cada CPU na máquina. isto é, uma máquina com 8 CPUs terá pelo menos 7 (veja a pergunta abaixo) esses processos "em execução" (aspas).
Agora, isso me leva a algumas perguntas sobre o que esse processo "inativo" realmente faz. Minha suposição é que ele execute a operação NOP continuamente até o período terminar e o kernel atribua um processo real para executar ou atribuir o processo inativo novamente (se a CPU não estiver sendo usada). No entanto, esse é um palpite completo. Assim:
Em uma máquina com, digamos, 8 CPUs, 7 desses processos ociosos serão criados? (e uma CPU será mantida pelo próprio kernel enquanto nenhum trabalho do espaço do usuário estiver funcionando?)
O processo inativo é realmente apenas um fluxo infinito de operações NOP? (ou um loop que faz o mesmo).
O uso da CPU (digamos
uptime
) é simplesmente calculado por quanto tempo o processo ocioso estava na CPU e por quanto tempo ele não estava lá durante um determinado período de tempo?
PS É provável que boa parte dessa pergunta se deva ao fato de eu não entender completamente como uma CPU funciona. ou seja, eu entendo a montagem, os prazos e as interrupções, mas não sei como, por exemplo, uma CPU pode usar mais ou menos energia, dependendo do que está executando. Ficaria muito grato se alguém puder me esclarecer sobre isso também.