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 tipomkexte 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/Extensionsas extensões necessárias no cenário atual (conforme determinado por o valor da propriedadeOSBundleRequiredno 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_initstarts- /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.bootdescobre o tipo de inicialização (Multiusuário, Seguro, CD-ROM, Rede etc.). No caso de uma inicialização de rede (a variável- sysctl- kern.netbootserá definida como- 1nesse caso), ele executa- /etc/rc.netbootcom um- start 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.bootdescobre 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.bootsair 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/rcmonta sistemas de arquivos locais (HFS+, HFS, UFS,- /dev/ fd,- /.vol), garante que o diretório- /private/var/tmpexiste 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 sysctlvariáveis são definidas (como número máximo de vnodes, System V IPC, etc.). Se/etc/sysctl.confexiste (mais/etc/sysctl-macosxserver.confno Mac OS X Server), ele é lido esysctl variáveis contidas nele são definidas.
- syslogd é iniciado.
- O arquivo de símbolo Mach é criado.
- /etc/rccomeça- kextd, 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
- portmape- netinfo são iniciados.
- Se /System/Library/Extensions.mkextfor 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/rcstarts- /usr/sbin/update , o daemon que libera os caches do sistema de arquivos interno para o disco com frequência.
- /etc/rcinicia 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/rccomeça- /usr/libexec/fix_prebindingpara corrigir binários pré-vinculados incorretamente.
- /etc/rcexecuta- /etc/rc.cleanuppara limpar e redefinir arquivos e dispositivos.
- /etc/rcfinalmente lança- /sbin/SystemStarterpara lidar com itens de inicialização de locais como- /System/Library/StartupItemse- /Library/StartupItemsUm 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, como- Description,- Provides,- Requer,- OrderPreference, iniciar/parar mensagens etc. Você pode executar- SystemStarter -n -D como root para que o programa imprima informações de depuração e dependência (sem realmente executar nada).
- O CoreGraphicsitem 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!
 







 
 
