Kaj se zgodi v procesu zagona Mac OS X?

Anonim

Ste se kdaj vprašali, kaj se zgodi med zagonom in zagonom Mac OS X? Z Mac OS X je nekoliko bolj zapleteno, kot je bilo nekoč, in že zdavnaj so minili dnevi klasičnega Mac OS (Sistem 9, 8, 7, 6), ko smo opazovali, kako se naši Maci zaganjajo z vrsto razširitev in nadzornih plošč, vedno bi jih lahko prepoznali samo po njihovi ikoni in nato pobrskali po mapi Razširitve, da bi enostavno prilagodili, kaj se nalaga in dogaja ob zagonu Maca.Danes, ko Mac OS X uporablja Unix, se mnogi uporabniki sploh ne zavedajo, kaj se dogaja v zakulisju.

Torej, kaj točno se zgodi med postopkom zagona Mac OS X? Vedno si lahko ogledate bolje, če Mac zaženete v podrobnem načinu, vendar to ne pojasni nujno vsega, kar vidite. Na srečo je odlična razlaga na voljo prek segmenta na KernelThread, ki natančno navaja zaporedje zagonskih dogodkov Mac OS X, od začetka do konca. Je dokaj temeljit in vreden branja, ponovljen spodaj za radovedne uporabnike Maca.

opomba: Kot je poudaril bralec, PPC uporablja OF (Openfirmware), i386 uporablja EFI (Extensible Firmware Interface)

Kaj se torej zgodi med postopkom zagona Mac OS X? Vklopite svoj Mac in zgodi se tole:

  • Napajanje je vklopljeno.
  • Izvede se koda OF ali EFI.
  • Podatki o strojni opremi se zbirajo in strojna oprema se inicializira.
  • Nekaj ​​(običajno OS, pa tudi stvari, kot je Apple Hardware Test itd.) je izbrano za zagon. Uporabnik bo morda pozvan, da izbere, kaj naj zažene.
  • Nadzor preide na /System/Library/CoreServices/BootX, zagonski nalagalnik. BootX naloži jedro in nariše značke OS, če obstajajo.
  • BootX poskuša naložiti predhodno predpomnjen seznam gonilnikov naprav (ki ga je ustvaril/posodobil /usr/sbin/kextcache). Takšen predpomnilnik je vrste mkext in vsebuje informacijske slovarje in binarne datoteke za več razširitev jedra. Upoštevajte, da če je predpomnilnik mkext poškodovan ali manjka, bo BootX v /System/Library/Extensions iskal razširitve, ki so potrebne v trenutnem scenariju (kot določa vrednost lastnosti OSBundleRequired v datoteki Info.plist snopa razširitve.
  • Izvedena je init rutina jedra. Določena je korenska naprava zagonskega sistema. Na tej točki vdelana programska oprema ni več dostopna.
  • Različne podatkovne strukture Mach/BSD inicializira jedro.
  • I/O komplet je inicializiran.
  • Jedro zažene /sbin/mach_init, Machov demon za poimenovanje storitev (bootstrap). mach_init vzdržuje preslikave med imeni storitev in vrati Mach, ki omogočajo dostop do teh storitev.

Od tu naprej zagon postane uporabniški:

  • mach_init zažene /sbin/init, tradicionalni BSD init proces. init določi raven izvajanja in zažene /etc/rc.boot, ki nastavi stroj tako, da deluje z enim uporabnikom.

Med izvajanjem rc.boot in drugi rc vir skriptov /etc/rc.common , lupinski skript, ki vsebuje pomožne funkcije, kot je CheckForNetwork() (preveri, ali omrežje deluje), GetPID (), purgedir() (izbriše samo vsebino imenika, ne strukture), itd.

  • rc.boot določa vrsto zagona (večuporabniški, varen, CD-ROM, omrežni itd.). V primeru omrežnega zagona (spremenljivka sysctl kern.netboot bo nastavljena na1 v tem primeru), zažene /etc/rc.netboot z start argument.

/etc/rc.netboot obravnava različne vidike omrežnega zagona. Na primer, izvaja omrežne in (če obstajajo) lokalne namestitve. Pokliče tudi /usr/bin/nbst za povezavo senčne datoteke s sliko diska, ki se uporablja kot korenska naprava.Ideja je preusmeriti pisanje v senčno datoteko, ki je, upajmo, v lokalni shrambi.

  • rc.boot ugotovi, ali je potrebno preverjanje skladnosti datotečnega sistema. Zagoni za enega uporabnika in CD-ROM-a ne izvajajo fsck. SafeBoot vedno izvaja fsck. rc.boot obravnava tudi povratni status fsck.
  • Če se rc.boot uspešno zaključi, /etc/rc , se nato zažene večuporabniški zagonski skript. Pri zagonu s CD-ROM-a se skript preklopi na /etc/rc.cdrom (namestitev).
  • /etc/rc priklopi lokalne datotečne sisteme (HFS+, HFS, UFS, /dev/ fd, /.vol), zagotavlja, da je imenik /private/var/tmp obstaja in izvaja /etc/rc.installer_cleanup, če obstaja (pustil ga je namestitveni program pred ponovnim zagonom).
  • /etc/rc.cleanup se zažene. "Očisti" številne imenike/datoteke, specifične za Unix in Mac.
  • BootCache je zagnan.
  • Nastavljene so različne sysctl spremenljivke (kot na primer za največje število vnodes, System V IPC itd.). Če /etc/sysctl.conf obstaja (plus /etc/sysctl-macosxserver.conf v strežniku Mac OS X), se prebere in nastavi sysctl spremenljivk, ki jih vsebuje.
  • syslogd se zažene.
  • Datoteka s simbolom Mach je ustvarjena.
  • /etc/rc zažene kextd, proces demona ki naloži razširitev jedra na zahtevo procesov jedra ali odjemalca.
  • /usr/libexec/register_mach_bootstrap_servers se zažene za nalaganje različnih Machovih zagonskih storitev, ki jih vsebuje / etc/mach_init.d
  • portmap in netinfo se zaženeta.
  • Če je /System/Library/Extensions.mkext starejši od /System/Library/Extensions , /etc/rc izbriše obstoječi mkext in ustvari novega. Ustvari ga tudi, če ne obstaja.
  • /etc/rc zažene /usr/sbin/update , demon, ki pogosto izpira predpomnilnike notranjega datotečnega sistema na disk.
  • /etc/rc zažene sistem navideznega pomnilnika. /private/var/vm je nastavljen kot izmenjalni imenik. /sbin/dynamic_pager se zažene z ustreznimi argumenti (predloga poti imena datoteke zamenjave, velikost ustvarjenih datotek zamenjave, sprožilci opozoril o visoki in nizki vodi, ki določajo, kdaj ustvariti dodatno zamenjavo datoteke ali izbrišite obstoječe).
  • /etc/rc zažene /usr/libexec/fix_prebindingza popravljanje nepravilno vnaprej vezanih dvojiških datotek.
  • /etc/rc izvede /etc/rc.cleanupza čiščenje in ponastavitev datotek in naprav.
  • /etc/rc končno zažene /sbin/SystemStarter za obdelavo zagonskih elementov z lokacij, kot sta /System/Library/StartupItems in /Library/StartupItems StartupItem je program, običajno lupinski skript, katerega ime se ujema z imenom mape. Mapa vsebuje datoteko s seznamom lastnosti, ki vsebuje pare ključ-vrednost, kot so Description, Provides, Requires, OrderPreference, start/stop messages itd. Zaženete lahko SystemStarter -n -D kot root, da program natisne informacije o odpravljanju napak in odvisnosti (ne da bi karkoli dejansko zagnal).
  • CoreGraphics zagonski element Apple Type Services daemon (ATSServer ) kot tudi okenski strežnik (WindowServer).

In potem se vaš Mac zažene!

Malo te dejavnosti si lahko ogledate sami s podrobnim načinom (ki ga lahko zaženete v podrobnem načinu na vsak zagon ali pa celo nastavite Mac, da se vedno zaganja v podrobnem načinu, če želite vedno videti zagon v slogu unix), vendar je to precej temeljita razlaga.

Apple ima na voljo tudi nekaj dokumentacije o postopku zagona Mac, ki je na voljo tukaj v njihovi knjižnici dokumentov za razvijalce tukaj.

Upoštevajte, da prvotni URL, ki zagotavlja zgornje informacije, ni več aktiven, zato je bila ta objava vključena zgoraj za prihodnje prek predpomnilnika. Prvotni vir je bila nit na KernelThread na naslednjem url-ju: http://www.kernelthread.com/mac/osx/arch_startup.html, ki je trenutno brez povezave in ne preusmerja na novo lokacijo.

Če želite zagonskemu zaporedju Mac OS X dodati kakšne zanimivosti ali druge dodatke, jih delite v komentarjih!

Kaj se zgodi v procesu zagona Mac OS X?