Wat gebeurt er in het opstartproces van Mac OS X?
Lang geleden waren de dagen van OS 9, het kijken naar onze Macs opstarten met een reeks van extensies en bedieningspanelen die we altijd konden identificeren. Vandaag de dag, met de Unix-onderbouwing van OS X, zijn veel gebruikers helemaal niet op de hoogte van wat er achter de schermen gebeurt. Dus wat gebeurt er precies tijdens het opstartproces van Mac OS X? Een segment op KernelThread geeft een zorgvuldig overzicht van de volgorde van gebeurtenissen, van start tot finish. Het is vrij grondig en het lezen waard. Dit wordt hieronder herhaald voor de nieuwsgierige Mac OS X-gebruikers die er zijn.
Opmerking: zoals een lezer heeft opgemerkt, gebruikt PPC OF, i386 gebruikt EFI
Je zet je Mac aan, en dit is wat er gebeurt:
- De voeding is ingeschakeld.
- OF EFI-code wordt uitgevoerd.
- Hardware-informatie wordt verzameld en hardware wordt geïnitialiseerd.
- Iets (meestal het besturingssysteem, maar ook dingen zoals de Apple Hardware Test, enz.) Is geselecteerd om op te starten. De gebruiker kan worden gevraagd om te selecteren wat op te starten.
- Controle gaat naar
/System/Library/CoreServices/BootX
, de bootloader. BootX laadt de kernel en tekent ook de OS-badges, indien aanwezig. - BootX probeert een eerder in de cache opgeslagen lijst met apparaatstuurprogramma's te laden (gemaakt / bijgewerkt door
/usr/sbin/kextcache
). Een dergelijke cache is van het typemkext
en bevat de info-woordenboeken en binaire bestanden voor meerderemkext
. Merk op dat als de mkext cache corrupt is of ontbreekt, BootX in/System/Library/Extensions
zou kijken voor extensies die nodig zijn in het huidige scenario (zoals bepaald door de waarde van de eigenschapOSBundleRequired
in het bestandInfo.plist
van de bundel van de extensie . - De
init
van de kernel wordt uitgevoerd. Het root-apparaat van het opstartsysteem wordt bepaald. Op dit moment is Firmware niet meer toegankelijk. - Verschillende Mach / BSD-datastructuren worden door de kernel geïnitialiseerd.
- De I / O-set is geïnitialiseerd.
- De kernel start
/sbin/mach_init
, de Mach-service benaming (bootstrap) daemon.mach_init
onderhoudt toewijzingen tussen servicenamen en de Mach-poorten die toegang bieden tot die services.
Vanaf hier wordt het opstarten op gebruikersniveau:
mach_init
start/sbin/init
, het traditionele BSD init-proces. init bepaalt het runlevel en voert/etc/rc.boot
, waarmee de machine voldoende wordt ingesteld om single-user uit te voeren.
Tijdens de uitvoering zijn rc.boot
en de andere rc
scripts bron /etc/rc.common
, een shellscript met hulpprogramma-functies, zoals CheckForNetwork()
(controleert of het netwerk actief is), GetPID()
, purgedir()
(verwijdert alleen directory-inhoud, niet de structuur), etc.
rc.boot
het type boot (Multi-User, Safe, CD-ROM, Network etc.). In het geval van een netwerk-opstart (desysctl
variabelekern.netboot
wordt in dat geval op1
), wordt/etc/rc.netboot
met eenkern.netboot
.
/etc/rc.netboot
behandelt verschillende aspecten van het opstarten van het netwerk. Het voert bijvoorbeeld netwerk- en (indien aanwezig) lokale mounts uit. Het roept ook /usr/bin/nbst
om een schaduwbestand te koppelen aan de schijfkopie die wordt gebruikt als het /usr/bin/nbst
. Het idee is om schrijfbewerkingen om te leiden naar het schaduwbestand, dat hopelijk lokaal wordt opgeslagen.
rc.boot
uit of een consistentiecontrole van het bestandssysteem vereist is. Single-user en CD-ROM-boots werken niet met fsck. SafeBoot draait altijd fsck.rc.boot
behandelt ook de retourstatus van fsck.- Als
rc.boot
succes wordt afgesloten,/etc/rc
, wordt het multi-user opstartscript uitgevoerd. Als u opstart vanaf een cd-rom, schakelt het script over naar/etc/rc.cdrom
(installatie). /etc/rc
mount lokale bestandssystemen (HFS +, HFS, UFS,/dev/fd
,/.vol
), zorgt ervoor dat de directory/private/var/tmp
bestaat en voert/etc/rc.installer_cleanup
, indien aanwezig ( achtergelaten door een installatieprogramma voordat opnieuw wordt opgestart)./etc/rc.cleanup
wordt uitgevoerd. Het "reinigt" een aantal Unix- en Mac-specifieke mappen / bestanden.- BootCache is gestart.
- Verschillende
sysctl
variabelen zijn ingesteld (zoals voor maximaal aantal vnodes, System V IPC, enz.). Als/etc/sysctl.conf
bestaat (plus/etc/sysctl-macosxserver.conf
op Mac OS X Server), worden deze gelezen en zijnsysctl
variabelen die daarin zijn ingesteld ingesteld. syslogd
is gestart.- Het Mach-symboolbestand wordt aangemaakt.
/etc/rc
startkextd
, het daemon-proces datkextd
laadt op verzoek vanuit kernel- of clientprocessen./usr/libexec/register_mach_bootstrap_servers
wordt uitgevoerd om verschillende op mach-bootstrap gebaseerde services te laden die zich bevinden in/etc/mach_init.d
portmap
ennetinfo
worden gestart.- Als
/System/Library/Extensions.mkext
ouder is dan/System/Library/Extensions
, verwijdert/etc/rc
de bestaande mkext en maakt een nieuwe. Het creëert ook een als een niet bestaat. /etc/rc
start/usr/sbin/update
, de daemon die het interne bestandssysteem regelmatig naar de harde schijf doorspoelt./etc/rc
start het virtuele geheugensysteem./private/var/vm
is ingesteld als de wisselmap./sbin/dynamic_pager
wordt gestart met de juiste argumenten (padsjabloon swapbestandsnaam, grootte van gemaakte swapbestanden, hoog / laag waterwaarschuwingstriggers die aangeven wanneer extra wisselbestanden moeten worden gemaakt of bestaande moeten worden verwijderd)./etc/rc
start/usr/libexec/fix_prebinding
om onjuist binom binaries te corrigeren./etc/rc
voert/etc/rc.cleanup
om bestanden en apparaten op te schonen en opnieuw in te stellen./etc/rc
uiteindelijk gestart/sbin/SystemStarter
om/sbin/SystemStarter
te handelen van locaties zoals/System/Library/StartupItems
en/Library/StartupItems
. Een StartupItem is een programma, meestal een shellscript waarvan de naam overeenkomt met de mapnaam. De map bevat een eigenschappenlijstbestand met sleutel / waarde-paren, zoalsDescription
,Provides
,Requires
,OrderPreference
, start / stop-berichten, enz. U kuntSystemStarter -n -D
als root uitvoeren om het programma foutopsporings- en afhankelijkheidsinformatie te laten afdrukken (zonder feitelijk iets uitvoeren).- Het
CoreGraphics
start de Apple Type Services-daemon (ATSServer
) en de Window Server (WindowServer
).
Bron: KernelThread