Wat gebeurt er tijdens het opstartproces van Mac OS X?
Heb je je ooit afgevraagd wat er gebeurt tijdens het opstart- en opstartproces van Mac OS X? Met Mac OS X is het een beetje ingewikkelder dan de dingen ooit waren, en de dagen van Classic Mac OS (System 9, 8, 7, 6) zijn allang voorbij, waarin je onze Macs ziet opstarten met een reeks extensies en bedieningspanelen die we zouden ons altijd kunnen identificeren aan de hand van hun pictogram alleen, en dan gaan graven in de map Extensies om gemakkelijk aan te passen wat er wordt geladen en gebeurt tijdens het opstarten van de Mac.Met de Unix-onderbouwing van Mac OS X zijn veel gebruikers zich totaal niet bewust van wat er achter de schermen gebeurt.
Wat gebeurt er precies tijdens het opstartproces van Mac OS X? Je kunt het altijd beter bekijken door een Mac op te starten in Verbose-modus, maar dat verklaart niet noodzakelijkerwijs alles wat je ziet. Gelukkig is er een uitstekende uitleg beschikbaar via segment op KernelThread, die zorgvuldig de volgorde van Mac OS X-opstartgebeurtenissen opsomt, van begin tot eind. Het is redelijk grondig en het lezen waard, hieronder herhaald voor de nieuwsgierige Mac-gebruikers die er zijn.
opmerking: Zoals een lezer opmerkte, gebruikt PPC OF (Openfirmware), i386 gebruikt EFI (Extensible Firmware Interface)
Dus wat gebeurt er tijdens het opstartproces van Mac OS X? Je zet je Mac aan en dit is wat er gebeurt:
- Stroom is ingeschakeld.
- OF of EFI-code wordt uitgevoerd.
- Hardware-informatie wordt verzameld en hardware wordt geïnitialiseerd.
- Iets (meestal het besturingssysteem, maar ook zaken als de Apple Hardware Test, enz.) is geselecteerd om op te starten. De gebruiker kan worden gevraagd om te selecteren wat hij wil opstarten.
- De 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
). Zo'n cache is van het typemkext
en bevat de infowoordenboeken en binaire bestanden voor meerdere kernelextensies. Merk op dat als de mkext-cache corrupt is of ontbreekt, BootX zou zoeken in/System/Library/Extensions
voor extensies die nodig zijn in het huidige scenario (zoals bepaald door de waarde van de eigenschapOSBundleRequired
in het bestandInfo.plist van de extensiebundel.
- De routine
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 geïnitialiseerd door de kernel.
- De I/O-kit is geïnitialiseerd.
- De kernel start
/sbin/mach_init
, de naamgevende (bootstrap) daemon van de Mach-service.mach_init onderhoudt koppelingen tussen servicenamen en de Mach-poorten die toegang bieden tot die services.
Vanaf nu wordt de opstart op gebruikersniveau:
mach_init
start/sbin/init
, de traditionele BSD init-proces. init bepa alt het runlevel en voert/etc/rc.boot uit, waarmee de machine voldoende wordt ingesteld om single-user te draaien.
Tijdens de uitvoering, rc.boot
en de andere rc
scriptbron /etc/rc.common
, een shellscript met hulpprogrammafuncties, zoals
CheckForNetwork() (controleert of het netwerk actief is),
GetPID (), purgedir() (verwijdert alleen de inhoud van de directory, niet de structuur), etc.
rc.boot
berekent het type opstart (Multi-User, Safe, CD-ROM, Network etc.). In het geval van een netwerkboot (desysctl
variabelekern.netboot
wordt ingesteld op1
in welk geval), het draait/etc/rc.netboot
met eenstart argument.
/etc/rc.netboot
behandelt verschillende aspecten van het opstarten via het netwerk. Het voert bijvoorbeeld netwerk- en (indien aanwezig) lokale mounts uit. Het roept ook /usr/bin/nbst aan om een schaduwbestand te associëren met de schijfkopie die wordt gebruikt als het root-apparaat.Het idee is om schrijfbewerkingen om te leiden naar het schaduwbestand, dat zich hopelijk op de lokale opslag bevindt.
rc.boot
berekent of een consistentiecontrole van het bestandssysteem vereist is. Opstarten voor één gebruiker en cd-rom voeren fsck niet uit. SafeBoot draait altijd fsck.rc.boot behandelt ook de retourstatus van fsck.
- Als
rc.boot
succesvol wordt afgesloten,/etc/rc
, wordt het opstartscript voor meerdere gebruikers uitgevoerd. Bij opstarten vanaf een cd-rom schakelt het script over naar/etc/rc.cdrom (installatie).
/etc/rc
activeert lokale bestandssystemen (HFS+, HFS, UFS,/dev/ fd
,/.vol
), zorgt ervoor dat de directory/private/var/tmp
bestaat en draait/etc/rc.installer_cleanup, als er een bestaat (achtergelaten door een installatieprogramma voordat opnieuw wordt opgestart).
/etc/rc.cleanup wordt uitgevoerd. Het “schoont” een aantal Unix- en Mac-specifieke mappen/bestanden op.
- BootCache is gestart. Er zijn
- Diverse
sysctl
variabelen ingesteld (zoals voor maximaal aantal vnodes, System V IPC, etc.). Als/etc/sysctl.conf
bestaat (plus/etc/sysctl-macosxserver.conf
op Mac OS X Server), wordt het gelezen en wordensysctl variabelen daarin ingesteld.
syslogd is gestart.
- Het Mach-symboolbestand is aangemaakt.
/etc/rc
startkextd, het daemon-proces die kernelextensie laadt op verzoek van kernel- of clientprocessen.
/usr/libexec/register_mach_bootstrap_servers
wordt uitgevoerd om verschillende op Mach bootstrap gebaseerde services in/ te laden etc/mach_init.d
portmap
ennetinfo zijn gestart.
- Als
/System/Library/Extensions.mkext
ouder is dan/System/Library/Extensions
,/etc/rc verwijdert de bestaande mkext en maakt een nieuwe aan. Er wordt er ook een gemaakt als er nog geen bestaat.
/etc/rc
start/usr/sbin/update , de daemon die de caches van het interne bestandssysteem regelmatig naar schijf spoelt.
/etc/rc
start het virtuele geheugensysteem./private/var/vm
is ingesteld als de wisseldirectory./sbin/dynamic_pager wordt gestart met de juiste argumenten (pad voor wisselbestandsnaam, grootte van aangemaakte wisselbestanden, triggers voor hoog- en laagwaterwaarschuwingen die aangeven wanneer extra wisselbestanden moeten worden gemaakt bestanden of bestaande verwijderen).
/etc/rc
start/usr/libexec/fix_prebindingom onjuist vooraf gebonden binaire bestanden te herstellen.
/etc/rc
voert/etc/rc.cleanup uitom bestanden en apparaten op te schonen en opnieuw in te stellen.
/etc/rc
lanceert eindelijk/sbin/SystemStarter
om opstartitems te verwerken 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-waardeparen zoalsDescription
,Provides
,Vereist
,OrderPreference
, start/stop berichten enz. U kuntuitvoeren SystemStarter -n -D als root om het programma foutopsporings- en afhankelijkheidsinformatie te laten afdrukken (zonder daadwerkelijk iets uit te voeren).
- Het opstartitem
CoreGraphics
start de Apple Type Services-daemon (ATSServer
) en de Windows Server (WindowServer).
En dan is je Mac opgestart!
Je kunt zelf een beetje van deze activiteit zien met Verbose Mode (die je kunt opstarten in Verbose Mode per keer opstarten, of je kunt zelfs een Mac instellen om altijd op te starten in Verbose Mode als je altijd wilt zien de unix-stijl boot), maar dit is een behoorlijk grondige uitleg.
Apple heeft ook enige documentatie beschikbaar over het Mac-opstartproces, hier beschikbaar in hun ontwikkelaarsdocumentatiebibliotheek hier.
Let op: de oorspronkelijke URL die de bovenstaande informatie verschaft, is niet langer actief, dus dat bericht is hierboven opgenomen voor het nageslacht via cache. De oorspronkelijke bron was een thread op KernelThread op de volgende url: http://www.kernelthread.com/mac/osx/arch_startup.html die momenteel offline is en niet doorverwijst naar een nieuwe locatie.
Als je weetjes of andere toevoegingen hebt om toe te voegen aan de opstartvolgorde van Mac OS X, deel deze dan in de reacties!