O que acontece no processo de inicialização do Mac OS X?
Já se perguntou o que acontece durante a inicialização do Mac OS X e o processo de inicialização? Com o Mac OS X é um pouco mais complicado do que antes, e já se foram os dias do Classic Mac OS (System 9, 8, 7, 6), onde assistir nossos Macs inicializarem com uma série de extensões e painéis de controle que sempre poderíamos identificar apenas por seu ícone e, em seguida, vasculhar a pasta Extensões para ajustar facilmente o que está carregando e ocorrendo na inicialização do Mac.Hoje, com os fundamentos Unix do Mac OS X, muitos usuários não sabem o que está acontecendo nos bastidores.
Então, o que exatamente acontece durante o processo de inicialização do Mac OS X? Você sempre pode ter uma visão melhor inicializando um Mac no modo detalhado, mas isso não explica necessariamente tudo o que você vê. Felizmente, uma explicação excelente está disponível no segmento KernelThread, que lista cuidadosamente a sequência de eventos de inicialização do Mac OS X, do início ao fim. É bastante completo e vale a pena ler, repetido abaixo para os curiosos usuários de Mac por aí.
observação: Como um leitor apontou, PPC usa OF (Openfirmware), i386 usa EFI (Extensible Firmware Interface)
Então, o que acontece durante o processo de inicialização do Mac OS X? Você liga o Mac e acontece o seguinte:
- A energia está ligada.
- O código OF ou EFI é executado.
- As informações de hardware são coletadas e o hardware é inicializado.
- Algo (geralmente o sistema operacional, mas também itens como Apple Hardware Test, etc.) é selecionado para inicializar. O usuário pode ser solicitado a selecionar o que inicializar.
- O controle passa para
/System/Library/CoreServices/BootX, o carregador de inicialização. O BootX carrega o kernel e também desenha os distintivos do sistema operacional, se houver.
- BootX tenta carregar uma lista de drivers de dispositivo previamente armazenada em cache (criada/atualizada por
/usr/sbin/kextcache
). Esse cache é do tipomkext
e contém os dicionários de informações e arquivos binários para várias extensões do kernel. Observe que, se o cache mkext estiver corrompido ou ausente, o BootX procurará em/System/Library/Extensions
as extensões necessárias no cenário atual (conforme determinado por o valor da propriedadeOSBundleRequired
no arquivoInfo.plist do pacote da extensão.
- A rotina
init do kernel é executada. O dispositivo raiz do sistema de inicialização é determinado. Neste ponto, o firmware não está mais acessível.
- Várias estruturas de dados Mach/BSD são inicializadas pelo kernel.
- O Kit I/O foi inicializado.
- O kernel inicia
/sbin/mach_init
, o daemon de nomenclatura do serviço Mach (inicialização).mach_init mantém mapeamentos entre nomes de serviço e as portas Mach que fornecem acesso a esses serviços.
A partir daqui, a inicialização se torna nível de usuário:
mach_init
starts/sbin/init
, o BSD tradicional processo de inicialização. init determina o nível de execução e executa/etc/rc.boot, que configura a máquina o suficiente para executar um único usuário.
Durante sua execução, rc.boot
e os outros rc
scripts source /etc/rc.common
, um script de shell contendo funções utilitárias, como
CheckForNetwork() (verifica se a rede está ativa),
GetPID (), purgedir() (exclui apenas o conteúdo do diretório, não a estrutura), etc.
rc.boot
descobre o tipo de inicialização (Multiusuário, Seguro, CD-ROM, Rede etc.). No caso de uma inicialização de rede (a variávelsysctl
kern.netboot
será definida como1
nesse caso), ele executa/etc/rc.netboot
com umstart argumento.
/etc/rc.netboot
lida com vários aspectos da inicialização de rede. Por exemplo, ele executa montagens de rede e (se houver) locais. Ele também chama /usr/bin/nbst para associar um arquivo shadow com a imagem de disco que está sendo usada como o dispositivo root.A ideia é redirecionar as gravações para o arquivo shadow, que provavelmente está no armazenamento local.
rc.boot
descobre se uma verificação de consistência do sistema de arquivos é necessária. Inicializações de usuário único e CD-ROM não executam fsck. O SafeBoot sempre executa o fsck.rc.boot também lida com o status de retorno de fsck.
- Se
rc.boot
sair com sucesso,/etc/rc
, o script de inicialização multiusuário é executado. Se inicializar a partir de um CD-ROM, o script muda para/etc/rc.cdrom (instalação).
/etc/rc
monta sistemas de arquivos locais (HFS+, HFS, UFS,/dev/ fd
,/.vol
), garante que o diretório/private/var/tmp
existe e executa/etc/rc.installer_cleanup, se existir (deixado por um instalador antes da reinicialização).
/etc/rc.cleanup é executado. Ele “limpa” vários diretórios/arquivos específicos do Unix e Mac.
- BootCache é iniciado.
- Várias
sysctl
variáveis são definidas (como número máximo de vnodes, System V IPC, etc.). Se/etc/sysctl.conf
existe (mais/etc/sysctl-macosxserver.conf
no Mac OS X Server), ele é lido esysctl variáveis contidas nele são definidas.
syslogd é iniciado.
- O arquivo de símbolo Mach é criado.
/etc/rc
começakextd, o processo daemon que carrega a extensão do kernel sob demanda do kernel ou dos processos do cliente.
/usr/libexec/register_mach_bootstrap_servers
é executado para carregar vários serviços baseados em bootstrap Mach contidos em/ etc/mach_init.d
portmap
enetinfo são iniciados.
- Se
/System/Library/Extensions.mkext
for mais antigo que/System/Library/Extensions
,/etc/rc exclui o mkext existente e cria um novo. Ele também cria um caso não exista.
/etc/rc
starts/usr/sbin/update , o daemon que libera os caches do sistema de arquivos interno para o disco com frequência.
/etc/rc
inicia o sistema de memória virtual./private/var/vm
é configurado como o diretório de troca./sbin/dynamic_pager é iniciado com os argumentos apropriados (trocar modelo de caminho de nome de arquivo, tamanho dos arquivos de troca criados, gatilhos de alerta de maré alta e baixa especificando quando criar troca adicional arquivos ou exclua os existentes).
/etc/rc
começa/usr/libexec/fix_prebindingpara corrigir binários pré-vinculados incorretamente.
/etc/rc
executa/etc/rc.cleanuppara limpar e redefinir arquivos e dispositivos.
/etc/rc
finalmente lança/sbin/SystemStarter
para lidar com itens de inicialização de locais como/System/Library/StartupItems
e/Library/StartupItems
Um StartupItem é um programa, geralmente um shell script, cujo nome corresponde ao nome da pasta. A pasta contém um arquivo de lista de propriedades contendo pares chave-valor, comoDescription
,Provides
,Requer
,OrderPreference
, iniciar/parar mensagens etc. Você pode executarSystemStarter -n -D como root para que o programa imprima informações de depuração e dependência (sem realmente executar nada).
- O
CoreGraphics
item de inicialização inicia o daemon Apple Type Services (ATSServer
), bem como o Windows Server (WindowServer).
E então seu Mac é inicializado!
Você mesmo pode ver um pouco desta atividade com o Modo Verbose (que você pode inicializar no Modo Verbose por inicialização, ou você pode até configurar um Mac para sempre inicializar no Modo Verbose se você quiser sempre ver a inicialização de estilo unix), mas esta é uma explicação bastante completa.
A Apple também tem alguma documentação disponível sobre o processo de inicialização do Mac disponível aqui na biblioteca de documentação do desenvolvedor aqui.
Observe que a URL original que fornece as informações acima não está mais ativa, portanto, essa postagem foi incluída acima para a posteridade via cache. A fonte original era um thread no KernelThread no seguinte URL: http://www.kernelthread.com/mac/osx/arch_startup.html que está atualmente offline e não redireciona para um novo local.
Se você tiver alguma dica ou outras adições para adicionar à sequência de inicialização do Mac OS X, compartilhe nos comentários!