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
- ↑ Predefinição:Man
- ↑ Predefinição:Man
- ↑ Andrew Smallshaw (7 de dezembro de 2009). «Unix and Linux startup scripts, Parte 2»