Ce se întâmplă în procesul de pornire Mac OS X?
V-ați întrebat vreodată ce se întâmplă în timpul procesului de pornire și pornire Mac OS X? Cu Mac OS X este un pic mai complicat decât odinioară, iar vremea Mac OS clasic (System 9, 8, 7, 6) a trecut de mult, în care vizionarea Mac-urilor noastre pornind cu o serie de extensii și panouri de control care ne-am putea identifica întotdeauna numai după pictograma lor și apoi să caute în dosarul Extensii pentru a ajusta cu ușurință ceea ce se încarcă și se întâmplă la pornirea Mac.Astăzi, cu bazele Unix ale Mac OS X, mulți utilizatori nu sunt complet conștienți de ceea ce se întâmplă în culise.
Deci, ce se întâmplă exact în timpul procesului de pornire Mac OS X? Puteți obține întotdeauna o imagine mai bună pornind un Mac în modul Verbose, dar asta nu explică neapărat tot ceea ce vedeți. Din fericire, o explicație excelentă este disponibilă prin segment la KernelThread, care listează cu atenție secvența evenimentelor de boot Mac OS X, de la început până la sfârșit. Este destul de amănunțit și merită citit, repetat mai jos pentru utilizatorii curioși de Mac.
otă: După cum a subliniat un cititor, PPC folosește OF (Openfirmware), i386 folosește EFI (Extensible Firmware Interface)
Deci, ce se întâmplă în timpul procesului de pornire Mac OS X? Porniți Mac-ul și iată ce se întâmplă:
- Alimentarea este pornită.
- OF sau codul EFI este executat.
- Informațiile hardware sunt colectate și hardware-ul este inițializat.
- Ceva (de obicei sistemul de operare, dar și lucruri precum Apple Hardware Test etc.) este selectat pentru a porni. Utilizatorului i se poate solicita să selecteze ce să pornească.
- Controlul trece la
/System/Library/CoreServices/BootX, încărcătorul de pornire. BootX încarcă nucleul și desenează, de asemenea, insignele OS, dacă există.
- BootX încearcă să încarce o listă de drivere de dispozitiv memorată anterior în cache (creată/actualizată de
/usr/sbin/kextcache
). Un astfel de cache este de tipulmkext
și conține dicționare de informații și fișiere binare pentru extensii multiple de nucleu. Rețineți că, dacă memoria cache mkext este coruptă sau lipsește, BootX ar căuta în/System/Library/Extensions
pentru extensiile care sunt necesare în scenariul actual (după cum este determinat de valoarea proprietățiiOSBundleRequired
din fișierulInfo.plist al pachetului extensiei.
- Rutina
init a nucleului este executată. Dispozitivul rădăcină al sistemului de pornire este determinat. În acest moment, firmware-ul nu mai este accesibil.
- Diferitele structuri de date Mach/BSD sunt inițializate de kernel.
- Ktul I/O este inițializat.
- Nucleul pornește
/sbin/mach_init
, demonul de denumire a serviciului Mach (bootstrap).mach_init menține mapările între numele de servicii și porturile Mach care oferă acces la aceste servicii.
De aici încolo, pornirea devine la nivel de utilizator:
mach_init
începe/sbin/init
, tradiționalul BSD procesul init. init determină nivelul de rulare și rulează/etc/rc.boot, care setează mașina suficient pentru a rula cu un singur utilizator.
În timpul executării sale, rc.boot
și celel alte rc
sursa de scripturi /etc/rc.common
, un script shell care conține funcții utilitare, cum ar fi
CheckForNetwork() (verifică dacă rețeaua este activată),
GetPID (), purgedir() (șterge numai conținutul directorului, nu structura), etc.
rc.boot
identifică tipul de pornire (Multi-User, Safe, CD-ROM, Network etc.). În cazul unei porniri în rețea (variabilasysctl
kern.netboot
va fi setată la1
în acest caz), rulează/etc/rc.netboot
cu unstart argument.
/etc/rc.netboot
se ocupă de diverse aspecte ale pornirii în rețea. De exemplu, efectuează monturi în rețea și (dacă există) locale. De asemenea, apelează /usr/bin/nbst pentru a asocia un fișier umbră cu imaginea de disc folosită ca dispozitiv rădăcină.Ideea este să redirecționați scrierile către fișierul umbră, care, sperăm, este pe stocarea locală.
rc.boot
află dacă este necesară o verificare a coerenței sistemului de fișiere. Boot-urile pentru utilizator unic și CD-ROM nu rulează fsck. SafeBoot rulează întotdeauna fsck.rc.boot se ocupă și de starea de returnare a fsck.
- Dacă
rc.boot
iese cu succes,/etc/rc
, scriptul de pornire multi-utilizator este apoi rulat. Dacă porniți de pe un CD-ROM, scriptul trece la/etc/rc.cdrom (instalare).
/etc/rc
montează sisteme de fișiere locale (HFS+, HFS, UFS,/dev/ fd
,/.vol
), asigură că directorul/private/var/tmp
există și rulează/etc/rc.installer_cleanup, dacă există unul (lăsat de un program de instalare înainte de repornire).
/etc/rc.cleanup este rulat. Acesta „curăță” un număr de directoare/fișiere specifice Unix și Mac.
- BootCache este pornit.
- Diverse
sysctl
sunt setate (cum ar fi numărul maxim de vnodes, System V IPC etc.). Dacă/etc/sysctl.conf
există (plus/etc/sysctl-macosxserver.conf
pe Mac OS X Server), este citit șisysctl variabile conținute în acesta sunt setate.
syslogd este pornit.
- Fișierul simbol Mach este creat.
/etc/rc
începekextd, procesul daemon care încarcă extensia nucleului la cerere din procesele kernel sau client.
/usr/libexec/register_mach_bootstrap_servers
este rulat pentru a încărca diverse servicii bazate pe bootstrap Mach conținute în/ etc/mach_init.d
portmap
șinetinfo sunt pornite.
- If
/System/Library/Extensions.mkext
este mai vechi decât/System/Library/Extensions
,/etc/rc șterge mkext-ul existent și creează unul nou. De asemenea, creează unul dacă nu există unul.
/etc/rc
începe/usr/sbin/update , demonul care șterge frecvent cache-urile sistemului de fișiere intern pe disc.
/etc/rc
pornește sistemul de memorie virtuală./private/var/vm
este configurat ca director de schimb./sbin/dynamic_pager este pornit cu argumentele adecvate (șablon de cale pentru numele fișierului de schimb, dimensiunea fișierelor de schimb create, declanșează alerte de nivel maxim și scăzut de apă care specifică când se creează un schimb suplimentar fișiere sau ștergeți-le pe cele existente).
/etc/rc
începe/usr/libexec/fix_prebindingpentru a remedia fișierele binare prelegate incorect.
/etc/rc
execută/etc/rc.cleanuppentru a curăța și a reseta fișierele și dispozitivele.
/etc/rc
lansează în sfârșit/sbin/SystemStarter
pentru a gestiona articole de pornire din locații precum/System/Library/StartupItems
și/Library/StartupItems
Un StartupItem este un program, de obicei un script shell, al cărui nume se potrivește cu numele folderului. Dosarul conține un fișier cu listă de proprietăți care conține perechi cheie-valoare, cum ar fiDescription
,Provides
,Necesită
,OrderPreference
, mesaje de pornire/oprire etc. Puteți rulaSystemStarter -n -D ca root pentru ca programul să imprime informații despre depanare și dependență (fără a rula nimic de fapt).
CoreGraphics
elementul de pornire pornește demonul Apple Type Services (ATSServer
), precum și Windows Server (WindowServer).
Și apoi Mac-ul tău este pornit!
Puteți vedea singuri puțin din această activitate cu modul Verbose (pe care îl puteți porni în modul Verbose la fiecare pornire, sau puteți chiar seta un Mac să pornească întotdeauna în modul Verbose dacă doriți să vedeți mereu boot-ul în stil Unix), dar aceasta este o explicație destul de amănunțită.
Apple are, de asemenea, o documentație disponibilă despre procesul de pornire Mac, disponibilă aici, la biblioteca lor de documentație pentru dezvoltatori, aici.
Rețineți că adresa URL inițială care furnizează informațiile de mai sus nu mai este activă, astfel că acea postare a fost inclusă mai sus pentru posteritate prin cache. Sursa originală a fost un fir pe KernelThread la următoarea adresă URL: http://www.kernelthread.com/mac/osx/arch_startup.html, care este în prezent offline și nu redirecționează către o locație nouă.
Dacă aveți informații sau alte completări de adăugat la secvența de pornire Mac OS X, împărtășiți în comentarii!