O que acontece no processo de inicialização do Mac OS X?

Anonim

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 tipo mkext 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 propriedade OSBundleRequired no arquivo Info.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ável sysctl kern.netboot será definida como1 nesse caso), ele executa /etc/rc.netboot com 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.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 e sysctl variáveis ​​contidas nele são definidas.
  • syslogd é iniciado.
  • O arquivo de símbolo Mach é criado.
  • /etc/rc começ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
  • portmap e netinfo 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, 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 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!

O que acontece no processo de inicialização do Mac OS X?