Què passa en el procés d'arrencada de Mac OS X?
Alguna vegada t'has preguntat què passa durant el procés d'arrencada i arrencada de Mac OS X? Amb Mac OS X és una mica més complicat del que eren les coses abans, i ja han passat els dies del Mac OS clàssic (System 9, 8, 7, 6), on veure com arrenquen els nostres Mac amb una sèrie d'extensions i panells de control que sempre podríem identificar-nos només per la seva icona i després anar a buscar a la carpeta Extensions per ajustar fàcilment el que es carrega i es produeix a l'arrencada del Mac.Avui dia, amb els fonaments Unix de Mac OS X, molts usuaris desconeixen del tot el que passa darrere de les escenes.
Llavors, què passa exactament durant el procés d'arrencada de Mac OS X? Sempre podeu veure'n millor arrencant un Mac en mode detallat, però això no necessàriament explica tot el que veieu. Afortunadament, hi ha una explicació excel·lent disponible a través del segment a KernelThread, que enumera acuradament la seqüència d'esdeveniments d'arrencada de Mac OS X, des del principi fins al final. És bastant exhaustiu i val la pena llegir-lo, repetit a continuació per als usuaris curiosos de Mac que hi ha.
nota: Com va assenyalar un lector, PPC utilitza OF (Openfirmware), i386 utilitza EFI (Extensible Firmware Interface)
Llavors, què passa durant el procés d'arrencada de Mac OS X? Engegues el teu Mac i això és el que passa:
- L'alimentació està engegada.
- S'executa el codi OF o EFI.
- Es recull la informació del maquinari i s'inicia el maquinari.
- Alguna cosa (normalment el sistema operatiu, però també coses com la prova de maquinari d'Apple, etc.) està seleccionada per arrencar. Es pot demanar a l'usuari que seleccioneu què arrencar.
- El control passa a
/System/Library/CoreServices/BootX, el carregador d'arrencada. BootX carrega el nucli i també dibuixa les insígnies del sistema operatiu, si n'hi ha.
- BootX intenta carregar una llista prèviament guardada a la memòria cau de controladors de dispositius (creats/actualitzats per
/usr/sbin/kextcache
). Aquesta memòria cau és del tipusmkext
i conté els diccionaris d'informació i fitxers binaris per a múltiples extensions del nucli. Tingueu en compte que si la memòria cau mkext està corrupta o f alta, BootX buscarà a/System/Library/Extensions
les extensions que es necessiten en l'escenari actual (segons el determinat per el valor de la propietatOSBundleRequired
al fitxerInfo.plist del paquet de l'extensió.
- La rutina
init del nucli s'executa. Es determina el dispositiu arrel del sistema d'arrencada. En aquest moment, el firmware ja no és accessible.
- El nucli inicialitza diverses estructures de dades Mach/BSD.
- El kit d'E/S està inicialitzat.
- El nucli comença
/sbin/mach_init
, el dimoni de nomenclatura del servei Mach (bootstrap).mach_init manté els mapes entre els noms de servei i els ports Mach que proporcionen accés a aquests serveis.
A partir d'aquí, l'inici esdevé a nivell d'usuari:
mach_init
comença/sbin/init
, el tradicional BSD procés d'inici. init determina el nivell d'execució i s'executa/etc/rc.boot, que configura la màquina prou per executar-se en un sol usuari.
Durant la seva execució, rc.boot
i els altres rc
font d'scripts /etc/rc.common
, un script d'intèrpret d'ordres que conté funcions d'utilitat, com ara
CheckForNetwork() (comprova si la xarxa està activada),
GetPID (), purgedir() (esborra només el contingut del directori, no l'estructura), etc.
rc.boot
esbrina el tipus d'arrencada (Multiusuari, Segur, CD-ROM, Xarxa, etc.). En cas d'arrencada de xarxa (la variablesysctl
kern.netboot
s'establirà en1
en aquest cas), s'executa/etc/rc.netboot
amb uniniciar argument.
/etc/rc.netboot
gestiona diversos aspectes de l'arrencada de la xarxa. Per exemple, realitza muntatges de xarxa i (si n'hi ha) locals. També crida a /usr/bin/nbst per associar un fitxer ombra amb la imatge de disc que s'utilitza com a dispositiu arrel.La idea és redirigir les escriptures al fitxer ombra, que esperem que estigui a l'emmagatzematge local.
rc.boot
esbrina si cal una comprovació de la coherència del sistema de fitxers. Les arrencades d'un sol usuari i de CD-ROM no executen fsck. SafeBoot sempre executa fsck.rc.boot també gestiona l'estat de retorn de fsck.
- Si
rc.boot
surt correctament,/etc/rc
, llavors s'executa l'script d'inici multiusuari. Si arrenqueu des d'un CD-ROM, l'script canvia a/etc/rc.cdrom (instal·lació).
/etc/rc
munta sistemes de fitxers locals (HFS+, HFS, UFS,/dev/ fd
,/.vol
), assegura que el directori/private/var/tmp
existeix i s'executa/etc/rc.installer_cleanup, si n'hi ha un (que l'instal·la ha deixat abans de reiniciar).
/etc/rc.cleanup s'executa. "Neteja" una sèrie de directoris/fitxers específics d'Unix i Mac.
- BootCache s'ha iniciat. S'estableixen
- Variables
sysctl
(com ara el nombre màxim de vnodes, System V IPC, etc.). Si/etc/sysctl.conf
existeix (a més de/etc/sysctl-macosxserver.conf
a Mac OS X Server), es llegeix i s'estableixensysctl variables que hi conté.
syslogd s'inicia.
- S'ha creat el fitxer de símbols Mach.
/etc/rc
començakextd, el procés dimoni que carrega l'extensió del nucli a demanda dels processos del nucli o del client.
/usr/libexec/register_mach_bootstrap_servers
s'executa per carregar diversos serveis basats en bootstrap de Mach continguts a/ etc/mach_init.d
S'inicien portmap
inetinfo.
- Si
/System/Library/Extensions.mkext
és més antic que/System/Library/Extensions
,/etc/rc suprimeix el mkext existent i en crea un de nou. També en crea un si no existeix.
/etc/rc
comença/usr/sbin/update , el dimoni que buida la memòria cau del sistema de fitxers intern al disc amb freqüència.
/etc/rc
inicia el sistema de memòria virtual./private/var/vm
està configurat com a directori d'intercanvi./sbin/dynamic_pager s'inicia amb els arguments adequats (plantilla de ruta de nom de fitxer d'intercanvi, mida dels fitxers d'intercanvi creats, activadors d'alerta d'aigua alta i baixa que especifiquen quan s'ha de crear un intercanvi addicional fitxers o suprimir els existents).
/etc/rc
comença/usr/libexec/fix_prebindingper corregir els binaris preenllaçats incorrectament.
/etc/rc
executa/etc/rc.cleanupper netejar i restablir fitxers i dispositius.
/etc/rc
finalment llança/sbin/SystemStarter
per gestionar elements d'inici des d'ubicacions com ara/System/Library/StartupItems
i/Library/StartupItems
Un StartupItem és un programa, normalment un script de shell, el nom del qual coincideix amb el nom de la carpeta. La carpeta conté un fitxer de llista de propietats que conté parells clau-valor com araDescription
,Provides
,Requereix
,OrderPreference
, missatges d'inici/aturada, etc. Podeu executarSystemStarter -n -D com a root perquè el programa imprimeixi informació de depuració i dependència (sense executar res).
- L'element d'inici
CoreGraphics
inicia el dimoni Apple Type Services (ATSServer
), així com el servidor de la finestra ().
I aleshores s'inicia el teu Mac!
Podeu veure una mica d'aquesta activitat amb el mode Verbose (que podeu arrencar en Mode Verbose per arrencada, o fins i tot podeu configurar un Mac perquè arrenqui sempre en Mode Verbose si voleu veure'l sempre l'arrencada d'estil Unix), però aquesta és una explicació bastant completa.
Apple també té una mica de documentació disponible sobre el procés d'arrencada del Mac disponible aquí a la seva biblioteca de documentació per a desenvolupadors aquí.
Tingueu en compte que l'URL original que proporciona la informació anterior ja no està activa, de manera que aquesta publicació s'ha inclòs a d alt per a la posteritat a través de la memòria cau. La font original era un fil de KernelThread a l'URL següent: http://www.kernelthread.com/mac/osx/arch_startup.html que actualment està fora de línia i no redirigeix a una ubicació nova.
Si teniu alguna cosa o altres addicions per afegir a la seqüència d'arrencada de Mac OS X, compartiu-lo als comentaris!