Cosa succede durante il processo di avvio di Mac OS X?
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 tipomkext
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 fileInfo.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 (lasysctl
variabilekern.netboot
verrà impostata su1
nel qual caso), esegue/etc/rc.netboot
con uninizio 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
sysctl
sono 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 esysctl le variabili in esso contenute vengono impostate.
syslogd è avviato.
- Viene creato il file dei simboli Mach.
/etc/rc
iniziakextd, 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
enetinfo 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 comeDescrizione
,Provides
,Richiede
,OrderPreference
, avvia/interrompi messaggi ecc. Puoi eseguireSystemStarter -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!