init

Em sistemas operacionais baseados em Unix, init (abreviação de initialization, em português, inicialização) é o primeiro processo iniciado durante a inicialização do sistema de computador. O init é um processo daemon que continua executando até o sistema ser desligado. Ele é o ancestral direto ou indireto de todos os outros processos e automaticamente adota todos os processos órfãos. O init é iniciado pelo núcleo usando um nome de arquivo codificado de forma rígida. Uma pane do núcleo ocorrerá se o núcleo estiver impossibilitado de iniciar. Normalmente, o identificador de processo 1 é atribuído ao init.

Em sistemas Unix, como o System III e o System V, o projeto do init divergiu da funcionalidade fornecida pelo init nos derivados do Research Unix e BSD. Até recentemente, a maioria das distribuições Linux empregava um init tradicional que é um pouco compatível com o System V, enquanto algumas distribuições, como o Slackware, usam scripts de inicialização no estilo BSD e outras, como o Gentoo, têm suas próprias versões customizadas. O Systemd, inicialmente implementado pelo Fedora, suplantou o init tradicional nas versões mais recentes das distribuições mais usadas.

Diversas implementações de substituição do init foram criadas, tentando resolver as limitações de projeto nas versões padrões. Elas incluem o launchd, o Service Management Facility, o systemd e o Upstart. Desde março de 2015, o systemd foi adotado por várias distribuições Linux importantes, embora permaneça controverso.

Estilo Research Unix/Estilo BSD

O init do Research Unix executava o script shell de inicialização localizado em /etc/rc[1] e depois executava o getty em terminais sob o controle de /etc/ttys.[2] Não há níveis de execução e o arquivo /etc/rc determina quais programas são executados pelo init. A vantagem deste sistema é que é simples e fácil de editar manualmente. No entanto, novos softwares adicionados ao sistema podem exigir alterações nos arquivos existentes que correm o risco de produzir um sistema não inicializável.

O init do BSD era, antes do 4.3BSD, o mesmo init do Research UNIX. No 4.3BSD, ele adicionou suporte para rodar um sistema de janelas, como o X, em terminais gráficos sob o controle de /etc/ttys. Para remover o requisito de editar o /etc/rc, as variantes do BSD, há muito tempo, suportam um arquivo /etc/rc.local específico de site, que é executado em um sub-shell próximo ao final da seqüência de inicialização.

Um sistema totalmente modular foi introduzido com o NetBSD 1.5 e portado para o FreeBSD 5.0 ​​e sucessores. Este sistema executa scripts no diretório /etc/rc.d. Ao contrário da ordenação de script do System V, que é derivada do nome do arquivo de cada script, este sistema usa tags de dependência explícitas colocadas em cada script.[3] A ordem em que os scripts são executados é determinada pelo script rcorder com base nos requisitos declarados nessas tags.

Outras implementações

Tradicionalmente, uma das principais desvantagens do init é que ele inicia as tarefas em série, aguardando que cada uma termine o carregamento antes de passar para a próxima. Quando os processos de inicialização terminam bloqueados em entrada/saída (E/S), isso pode resultar em longos atrasos durante a inicialização. Acelerando a E/S, por ex. usando SSDs, pode encurtar os atrasos, mas não resolve a causa raiz.

Vários esforços foram feitos para substituir os daemons de inicialização tradicionais para resolver esse e outros problemas de projeto, incluindo:

  • BootScripts no GoboLinux
  • boot-scripts
  • busybox-init, adequado para sistemas operacionais embarcados, usado pelo OpenWrt antes de ser substituído por procd
  • Initng, um substituto completo do init projetado para iniciar processos de forma assíncrona
  • launchd, um substituto para o init em Darwin/macOS/iOS/tvOS a partir do Mac OS X v10.4 (lança o SystemStarter para executar processos 'rc.local' estilo antigo e SystemStarter)
  • minit
  • Mudur, um substituto do init escrito em Python e projetada para iniciar processos de forma assíncrona, em uso pela distribuição Pardus Linux
  • OpenRC, um gerador de processos que utiliza o init fornecido pelo sistema, enquanto fornece isolamento do processo, inicialização paralela e dependência de serviço; usado pelo Gentoo e seus derivados e disponível como uma opção no Devuan
  • procd é usado no LEDE/OpenWRT
  • runit, um substituto completo multiplataforma para o init com o início paralelo de serviços, usado por padrão no Void Linux
  • Shepherd, o serviço e gerenciador de daemon do GNU que fornece inicialização assíncrona baseada em dependência; escrito em Guile Scheme e destinado a ser interativamente hackeável durante a operação normal do sistema
  • systemd, uma suíte de software que inclui um daemon init e um gerenciador de serviços, entre outras coisas
  • SystemStarter, um gerador de processo iniciado pelo init estilo-BSD no Mac OS X antes do Mac OS X v10.4
  • svscan from daemontools used as process 1
  • Texas Flood Init System
  • Upstart, um substituto completo do init projetado para iniciar processos assincronamente iniciados pelo Ubuntu.

Referências

  1. «init(8)» (em inglês). . Capítulo 8. Manual da Sétima Edição do Unix. templatestyles stripmarker character in |título= at position 37 (ajuda)
  2. «ttys(5)» (em inglês). . Capítulo 5. Manual da Sétima Edição do Unix. templatestyles stripmarker character in |título= at position 37 (ajuda)
  3. Andrew Smallshaw (7 de dezembro de 2009). «Unix and Linux startup scripts, Parte 2»

Ligações externas

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.