17 pontos por GN⁺ 2024-06-08 | 3 comentários | Compartilhar no WhatsApp
  • Ao pesquisar sobre PID 0 na web, a maioria das informações encontradas está errada.
  • Ao buscar por PID 0 no Google, Bing, DuckDuckGo e Kagi, foi difícil encontrar uma resposta correta.
  • Informações incorretas da Wikipedia se espalharam por 16 anos, e muitos sites passaram a citá-las.

História do PID 0

  • O PID 0 está envolvido em escalonamento e gerenciamento de energia, e não tem relação com paginação.
  • O PID 0 atua como o agendador executado quando um núcleo de CPU não tem nada para fazer.
  • Nos primeiros Unix, o PID 0 fazia trabalhos relacionados ao gerenciamento de memória, mas isso não ocorre nos Unix modernos.

O papel real do PID 0

  • O PID 0 inicia o kernel e, depois disso, passa a gerenciar os núcleos da CPU.
  • No kernel Linux, o PID 0 é implementado pela função do_idle.
  • Em outros kernels, como o FreeBSD, ele desempenha um papel semelhante.

A confusão em torno do PID 0

  • O significado de PID é diferente no kernel e no espaço do usuário.
  • No kernel, task_struct representa uma thread, e PID significa ID da thread.
  • No espaço do usuário, PID representa um processo, e isso é igual ao ID do grupo de threads.

PID 0 em sistemas multicore

  • Em sistemas multicore, existe uma thread idle para cada núcleo de CPU.
  • Todas essas threads idle pertencem ao grupo de threads 0.
  • No espaço do usuário, isso é reconhecido como PID 0.

Conclusão

  • O PID 0 existe e é a thread que inicia o kernel.
  • O PID 0 executa as tarefas iniciais de inicialização do kernel e, depois, se transforma em uma thread idle.
  • O PID 0 não tem relação com gerenciamento de memória.
  • Em sistemas multicore, há uma thread idle por núcleo, e todas pertencem ao grupo de threads 0.

Opinião do GN⁺

  • A importância da informação correta: quando informações erradas se espalham por muito tempo, muitas pessoas passam a aceitá-las como verdade. Isso relembra a importância de fornecer informação precisa.
  • A complexidade do kernel: o processo de inicialização do kernel e o mecanismo de escalonamento são extremamente complexos, e entendê-los ajuda bastante engenheiros de software.
  • A confusão sobre PID: como o significado de PID é diferente no kernel e no espaço do usuário, é importante compreender isso com clareza.
  • Sistemas multicore: entender o papel do PID 0 nos sistemas multicore modernos ajuda na otimização do desempenho do sistema.
  • A influência da Wikipedia: isso mostra o quanto as informações da Wikipedia influenciam muitos sites da web. Reforça a importância de manter informações corretas e atualizadas.

3 comentários

 
thinkpad 2024-07-17

Lembrando daquele velho incidente em que aquele agent deu kill -9 0...

 
whizkyu 2024-06-09

Interessante.

 
GN⁺ 2024-06-08
Comentários do Hacker News
  • Interessante de uma perspectiva arqueológica: dizer que "pid 0 faz parte do kernel [Linux]" é útil ao depurar o kernel. Do ponto de vista dos processos em espaço de usuário, "pid 0 significa eu mesmo".
  • Excesso de confiança online: na internet, muitas pessoas demonstram excesso de confiança sobre o que sabem. Um tom categórico só deveria ser usado por especialistas.
  • PID 0 no Windows: no Windows baseado em NT, o PID 0 é o "System Idle Process", semelhante ao Linux. No Windows baseado em DOS, não existe PID 0, e o loop ocioso fica dentro do VMM32.
  • PID 0 no Unix acadêmico: na maioria dos Unix acadêmicos, o PID 0 está relacionado ao subsistema de memória (paging). O Linux não é o único dono do conceito de PID 0.
  • Erros no conhecimento comum: o "conhecimento comum" muitas vezes está errado. O jeito certo é verificar o código-fonte do kernel.
  • Terceiro uso do PID 0: no Linux, quando getppid retorna 0, isso significa que o pai está em outro namespace de PID.
  • Recomendação de material adicional: se você se interessa pelo boot inicial do kernel, vale a pena ler este excelente material. Linux Insides
  • Pergunta sobre o comando ps -aux: ao digitar o comando "ps -aux", também são exibidas informações de outros usuários. Isso não deveria ser informação privada por padrão?
  • Uso interessante de kill 0: compartilhamento de um script que usa kill 0 para executar um comando por um tempo limitado e depois encerrá-lo.
  • Reutilização do PID 0 no código v4: é interessante que o código v4 reutilize o pid 0. Lembro de ter precisado resolver esse problema no kernel em meados dos anos 80.