Cosa succede durante il processo di avvio di Mac OS X?

Anonim

Vi siete mai chiesti cosa succede durante il processo di avvio e avvio di Mac OS X? Con Mac OS X è un po' più complicato rispetto a una volta, e sono lontani i tempi del Mac OS classico (System 9, 8, 7, 6), dove guardare i nostri Mac avviarsi con una serie di estensioni e pannelli di controllo che potremmo sempre identificarci solo con la loro icona, quindi andare a scavare nella cartella Estensioni per regolare facilmente ciò che si sta caricando e si verifica all'avvio del Mac.Oggi, con le basi Unix di Mac OS X, molti utenti sono completamente all'oscuro di ciò che accade dietro le quinte.

Quindi cosa succede esattamente durante il processo di avvio di Mac OS X? Puoi sempre avere un aspetto migliore avviando un Mac in modalità dettagliata, ma ciò non spiega necessariamente tutto ciò che vedi. Fortunatamente un'eccellente spiegazione è disponibile tramite segmento su KernelThread, che elenca attentamente la sequenza degli eventi di avvio di Mac OS X, dall'inizio alla fine. È abbastanza completo e vale la pena leggerlo, ripetuto di seguito per gli utenti Mac curiosi là fuori.

nota: come ha sottolineato un lettore, PPC utilizza OF (Openfirmware), i386 utilizza EFI (Extensible Firmware Interface)

Quindi cosa succede durante il processo di avvio di Mac OS X? Accendi il tuo Mac e questo è ciò che accade:

  • L'alimentazione è accesa.
  • Il codice OF o EFI viene eseguito.
  • Le informazioni sull'hardware vengono raccolte e l'hardware viene inizializzato.
  • Qualcosa (di solito il sistema operativo, ma anche cose come l'Apple Hardware Test, ecc.) è selezionato per l'avvio. All'utente potrebbe essere richiesto di selezionare cosa avviare.
  • Il controllo passa a /System/Library/CoreServices/BootX, il boot loader. BootX carica il kernel e disegna anche i badge del sistema operativo, se presenti.
  • BootX tenta di caricare un elenco di driver di dispositivo precedentemente memorizzato nella cache (creato/aggiornato da /usr/sbin/kextcache). Tale cache è del tipo mkext e contiene i dizionari informativi ei file binari per più estensioni del kernel. Si noti che se la cache mkext è danneggiata o mancante, BootX cercherà in /System/Library/Extensions le estensioni necessarie nello scenario corrente (come determinato da il valore della proprietà OSBundleRequired nel file Info.plist del pacchetto dell'estensione.
  • Viene eseguita la routine init del kernel. Viene determinato il dispositivo root del sistema di avvio. A questo punto, il firmware non è più accessibile.
  • Varie strutture dati Mach/BSD sono inizializzate dal kernel.
  • Il kit I/O è inizializzato.
  • Il kernel avvia /sbin/mach_init, il demone di denominazione dei servizi Mach (bootstrap). mach_init mantiene le mappature tra i nomi dei servizi e le porte Mach che forniscono l'accesso a quei servizi.

Da qui in poi, la startup diventa a livello di utente:

  • mach_init inizia /sbin/init, il BSD tradizionale processo iniz. init determina il runlevel ed esegue /etc/rc.boot, che imposta la macchina abbastanza per eseguire single-user.

Durante la sua esecuzione, rc.boot e l' altro rc script sorgente /etc/rc.common , uno script di shell contenente funzioni di utilità, come CheckForNetwork() (verifica se la rete è attiva), GetPID (), purgedir() (elimina solo il contenuto della directory, non la struttura), ecc.

  • rc.boot calcola il tipo di avvio (multiutente, cassaforte, CD-ROM, rete ecc.). In caso di avvio da rete (la sysctl variabile kern.netboot verrà impostata su1 nel qual caso), esegue /etc/rc.netboot con un inizio argomento.

/etc/rc.netboot gestisce vari aspetti dell'avvio di rete. Ad esempio, esegue montaggi di rete e (se presenti) locali. Chiama anche /usr/bin/nbst per associare un file shadow con l'immagine disco utilizzata come dispositivo root.L'idea è di reindirizzare le scritture al file shadow, che si spera si trovi nella memoria locale.

  • rc.boot capisce se è necessario un controllo di coerenza del file system. Gli avviamenti per utente singolo e da CD-ROM non eseguono fsck. SafeBoot esegue sempre fsck. rc.boot gestisce anche lo stato di ritorno di fsck.
  • Se rc.boot esce con successo, /etc/rc , viene quindi eseguito lo script di avvio multiutente. Se si esegue l'avvio da un CD-ROM, lo script passa a /etc/rc.cdrom (installazione).
  • /etc/rc monta i file system locali (HFS+, HFS, UFS, /dev/ fd, /.vol), assicura che la directory /private/var/tmp esiste ed esegue /etc/rc.installer_cleanup, se ne esiste uno (lasciato da un programma di installazione prima del riavvio).
  • /etc/rc.cleanup viene eseguito. "Pulisce" una serie di directory/file specifici per Unix e Mac.
  • BootCache è avviato.
  • Varie sysctlsono impostate variabili (come per il numero massimo di vnodi, System V IPC, ecc.). Se /etc/sysctl.conf esiste (più /etc/sysctl-macosxserver.conf su Mac OS X Server), viene letto e sysctl le variabili in esso contenute vengono impostate.
  • syslogd è avviato.
  • Viene creato il file dei simboli Mach.
  • /etc/rc inizia kextd, il processo demone che carica l'estensione del kernel su richiesta dal kernel o dai processi client.
  • /usr/libexec/register_mach_bootstrap_servers viene eseguito per caricare vari servizi basati su Mach bootstrap contenuti in / etc/mach_init.d
  • portmap e netinfo sono avviati.
  • Se /System/Library/Extensions.mkext è precedente a /System/Library/Extensions , /etc/rc cancella l'mkext esistente e ne crea uno nuovo. Ne crea uno anche se non esiste.
  • /etc/rc avvia /usr/sbin/update , il demone che svuota frequentemente le cache del file system interno su disco.
  • /etc/rc avvia il sistema di memoria virtuale. /private/var/vm è impostato come directory di scambio. /sbin/dynamic_pager viene avviato con gli argomenti appropriati (modello di percorso del nome del file di scambio, dimensione dei file di scambio creati, trigger di avviso di alta e bassa marea che specificano quando creare ulteriori swap o eliminare quelli esistenti).
  • /etc/rc avvia /usr/libexec/fix_prebindingper correggere binari prebound errati.
  • /etc/rc esegue /etc/rc.cleanupper ripulire e reimpostare file e dispositivi.
  • /etc/rc finalmente lancia /sbin/SystemStarter per gestire gli elementi di avvio da posizioni come /Sistema/Library/StartupItems e /Library/StartupItems Un StartupItem è un programma, solitamente uno script di shell, il cui nome corrisponde al nome della cartella. La cartella contiene un file di elenco delle proprietà contenente coppie chiave-valore come Descrizione, Provides, Richiede, OrderPreference, avvia/interrompi messaggi ecc. Puoi eseguire SystemStarter -n -D come root per fare in modo che il programma stampi le informazioni di debug e sulle dipendenze (senza eseguire effettivamente nulla).
  • L'elemento di avvio CoreGraphics avvia il demone Apple Type Services (ATSServer ) così come il Window Server (WindowServer).

E poi il tuo Mac è avviato!

Puoi vedere tu stesso un po' di questa attività con la modalità dettagliata (che puoi avviare in modalità dettagliata all'avvio, oppure puoi persino impostare un Mac in modo che si avvii sempre in modalità dettagliata se vuoi vedere sempre l'avvio in stile unix), ma questa è una spiegazione abbastanza completa.

Apple ha anche della documentazione disponibile sul processo di avvio del Mac disponibile qui nella loro libreria di documenti per sviluppatori qui.

Nota che l'URL originale che fornisce le informazioni di cui sopra non è più attivo, quindi quel post è stato incluso sopra per i posteri tramite cache. La fonte originale era un thread su KernelThread al seguente URL: http://www.kernelthread.com/mac/osx/arch_startup.html che è attualmente offline e non reindirizza a una nuova posizione.

Se hai curiosità o altre aggiunte da aggiungere alla sequenza di avvio di Mac OS X, condividi nei commenti!

Cosa succede durante il processo di avvio di Mac OS X?