Ce se întâmplă în procesul de pornire Mac OS X?

Anonim

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 tipul mkext ș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ății OSBundleRequired din fișierul Info.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 (variabila sysctl kern.netboot va fi setată la1 în acest caz), rulează /etc/rc.netboot cu un start 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 și sysctl variabile conținute în acesta sunt setate.
  • syslogd este pornit.
  • Fișierul simbol Mach este creat.
  • /etc/rc începe kextd, 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 și netinfo 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 fi Description, Provides, Necesită, OrderPreference, mesaje de pornire/oprire etc. Puteți rula SystemStarter -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!

Ce se întâmplă în procesul de pornire Mac OS X?