Avvio di Mac OS X
Mi ricordo che anni fà con il vecchio System 9 sapere cosa c'era all'avvio era uno scherzo; se si era a conoscenza di cosa significavano le piccole icone delle estensioni che apparivano in basso era fatta. Oggi Mac OS X da questo punto di vista è diventato più riservato anche se c'è da dire che il concetto di estensioni in se è sparito.
Attualmente in base al modello di Mac, PPC o Intel esistono due diversi BIOS/Basic-Input-Ouput System (ovvero quella porzione di codice eseguito nella prima fase di avvio che si occupa di eseguire la diagnostica dell'hardware, localizzare il sistema operativo e fornire un'interfaccia software per l'accesso alle periferiche collegate), OF (Open Firmware) e EFI (Extensible Firmware Interface).
La sequenza di boot, che descriveremo dettagliatamente più avanti nel corso dell'articolo può essere sommariamente ordinata secondo 6 punti principali:
- Il Firmware: è la porzione di codice che si occuperà dell'inizializzazione della macchina a basso livello. Una volta completato il suo lavoro passerà il controllo a BootX che avrà come compito principale quello di inizializzare i bus di I/O e le variabili principali del kernel.
- Kernel: il kernel inizializzerà l'I/O Kit che ha il compito di controllare i dispositivi di ingresso e uscita collegati alla macchina. Il kernel a sua volta lancerà il launchd che si occuperà di eseguire il bootstrap del resto del sistema.
- Launchd: Launchd è stato introdotto a partire da OS X 10.4 ed è un demone che ha lo scopo di gestire i vari demoni da avviare contestualmente al sistema operativo e la comunicazione tra essi. Durante la fase di avvio launchd esegue il check per le cartelle di LaunchDaemons e LaunchAgents dentro /System/Library and /Library; si tratta di file plist che descrivono come gestire i vari demoni; al contrario dei programmi avviabili allo startup questi demoni sono eseguiti soltanto quando richiesti. Questo permette di ridurre drasticamente i processi concorrenti all'interno di una normale sessione.
- Startup scripts e items: dopo che il launchd è stato eseguito viene avviata l'inizializzazione di base del sistema che include il check del filesystem (il programma eseguito è fsck) e l'avvio del SystemStarter che si occupa di lanciare gli elementi di startup (si tratta di processi che vengono eseguiti per preparare il sistema ad essere utilizzato; sono sheell scripts che accompagnano i normali demoni). Questi elementi sono contenuti in /System/Library/StartupItems e consistono in cartelle con al minimo un programma che porta lo stesso nome della cartella ed è accompagnato da un file plist che ne descrive il caricamento.
Sebbene con l'arrivo di OS X 10.4 StartupItems sia stato abbandonato a favore di launchd, questo viene ancora supportato.
Gli elementi di launchd permettono di offrire servizi al sistema per ogni utente e sono figli (child) di launchd. I processi che verranno creati dopo loginwindow saranno invece indicati come processi di utente. Questi ultimi sono sempre collegati ad una particolare sessione di login.
- Loginwindow: questa sessione viene avviata con la visualizzazione della finestra di login. Si occuperà quindi di autenticare l'utente e di avviare tutte le applicazioni ad esso associato e le preferenze che sono relative alla sua configurazione. Quando viene terminata l'esecuzione di queste routine loginwindow ha completato l'intera procedura (Finder, Dock, SystemUIServer, e applicazioni specifiche utente).
- User Environment: benchè loginwindow si occupi di far visualizzare la finestra di login il controllo dell'autenticazione non è sua competenza. Questa passa infatti i dati del login all'Open Directory che si occuperà quindi di verificare i dati. A questo punto il sistema è stato configurato secondo i dati utenti ed è pronto per essere utilizzato.
Questa è invece la sequenza di passi dettagliata che viene eseguita all'avvio di un Mac dopo l'accensione:
- Il codice OF o EFI viene eseguito e viene identificato l'hardware della macchina
- Viene quindi scelto cosa far partire: generalmente si tratta del sistema operativo ma possono essere anche utilty di diagnostica o il Machine test messo a disposizione.
- Il controllo passa quindi dal BIOS al BootX, il boot loader che si ocuperà di caricare in memoria il kernel e visualizzare il logo di avvio del sistema.
- A questo punto BootX verifica se è presente una cache dei driver per le periferiche (si tratta di un file dentro /usr/sbin/kextcache dove kext è il suffisso per le Kernel Extension). Questo file contiene al suo interno un dizionario i file binari per le diverse estensioni. Se il mkext è corrotto o mancante (generalmente si ha questa situazione per un aggiornamento, una pulizia della cache forzata oppure un kernel panic) BootX guarda nella cartella /System/Library/Extensions in cerca delle estensioni disponibili. Le estensioni disponibili sono catalogate in base alle informazioni contenute dentro la chiave OSBundleRequired di Info.plist di ogni singola estensione.
- Viene ora avviata la sequenza init del kernel, da questo momento in poi il firmware, sia esso OF o EFI non è più accessibile.
- Sono caricate in memoria diverse strutture dati del sistema e per il framework per la gestione dell'I/O (I/O Kit per OS X).
- Il kernel avvia il comando mach_init (contenuto nel path /sbin/), il deamon di bootstrap del Mach. mach_init manterrà la mappa tra servizi disponibili e porte Mach che li soddisfano.
- A questo punto l'avvio entra nella zona userlevel dove viene avviato /sbin/init, l'init classico di un sistema BSD-Like.
- Il processo init avvierà /etc/rc.boot che imposterà la macchina per essere utilizzata dall'utente (durante l'esecuzione verranno avviati anche un file scripts rc, uno script shell etc/rc.common, il checking della rete CheckForNetwork(), GetPID() e purgedir()).
- rc.boot in generale imposterà il sistema, il CD-ROM, la rete e gli altri aspetti (rc.boot è sostituito da netboot in caso si tratti di avvio tramite remoto).
- /etc/rc carica i file systems disponibili (HFS,HFS+,UFS, /.vol e /dev/fd)
- /etc/rc.cleanup viene eseguito (si occupa della pulizia di directory temporanee o interne non utilit al sistema).
- BootCache viene avviato (diverse opzioni di sysct1 sono impostate e se esistente il file /etc/systct1.conf/sysct1-macosxserver.conf per la versione server viene utilizzato per configurare i parametri).
- syslogd, il deamon per il logging dei dati viene avviato
- Il file simbolico per Mach viene creato
- /etc/rc avvia kextd il deamon che si occuperà di gestire le richieste per le estensioni del kernel precedentemente avviate.
- /usr/libexec/register_mach_bootstrap_server inizializza adiversi servizi di bootstrap del kernel Mach (del file /etc/mach_init.d).
- I servizi netinfo e portmap vengono inizializzati
- /etc/rc avvia /usr/sbin/update il deamon che fa pulizia della cache di sistema periodicamente
- /etc/rc si occupa di avviare la memoria virtuale (/private/var/vm) e la directory di swap. Il paginatore di memoria, corrispondente all'applicazione /sbin/dynamic_pager viene avviato; si occuperà di gestire la paginazione di memoria dei vari processi in esecuzione durante la sessione (maggiori info sul paginatore le trovate qui).
- /etc/rc avvia il prebinding (/usr/libexec/fix_prebiding che si occuperà di aggiornare eventuali non corrispondenze tra i simboli cache e i binari reali (maggiori informazioni sul prebinding le trovate qui).
- /etc/rc avvia il cleanup dei file e delle periferiche (/etc/rc.cleanup).
- /etc/rc avvia quindi l'applicazione che si occuperà di lanciare le applicazioni che l'utente ha scelto per l'avvio; si tratta di /sbin/SystemStarter che cercherà per componenti da avviare dentro la cartella /Library/StartupItems dell'utente e del sistema.
- CoreGraphics, ATSServer e infine WindowServer sono avviati; il sistema è quindi pronto e la modalità grafica è attiva.
Maggiori informazioni possono essere trovate anche a questi indirizzi:
- KernelThread di Amit Sigh
- System Startup the boot sequence (Apple Developer Connection - ADC)
- Mac OS X Startup Sequence
- Apple Training Series: Mac OS X Support Essentials, 2nd Edition
Il documento è relativo alla versione 10.4 di OS X ed è quindi possibile che aggiornamenti futuri del sistema operativo possano rendere i dati obsoleti.
[tags]Mac OS X Boot, OS X Boot Sequence, Avvio Mac OS X, Sequenza di Avvio Mac OS X, launchd, SystemServer, SystemStarter, ATSServer, WindowServer, BootX[/tags]
About this page
You’re currently reading “Avvio di Mac OS X,” an entry on malcom
- Published:
- 2.16.07 / 12pm
- Category:
- Blog Cafe
3 Comments
Jump to comment form | comments rss | trackback uriShow / Hide Comments