Mitä Mac OS X:n käynnistysprosessissa tapahtuu?

Anonim

Oletko koskaan miettinyt, mitä Mac OS X:n käynnistys- ja käynnistysprosessin aikana tapahtuu? Mac OS X:llä se on hieman monimutkaisempaa kuin ennen, ja perinteisen Mac OS:n (System 9, 8, 7, 6) ajat ovat kauan menneet, jolloin Mac-tietokoneiden käynnistymisen katseleminen sarjalla laajennuksia ja ohjauspaneeleja, jotka Voisimme aina tunnistaa heidän kuvakkeensa ja sitten kaivella Extensions-kansiota säätääksesi helposti, mitä latautuu ja tapahtuu Macin käynnistyksessä.Nykyään Mac OS X:n Unix-perustalla monet käyttäjät ovat täysin tietämättömiä siitä, mitä kulissien takana tapahtuu.

Mitä sitten tarkalleen ottaen tapahtuu Mac OS X:n käynnistyksen aikana? Saat aina paremman kuvan käynnistämällä Macin monisanaisessa tilassa, mutta se ei välttämättä selitä kaikkea näkemääsi. Onneksi erinomainen selitys on saatavilla KernelThreadin segmentin kautta, joka listaa huolellisesti Mac OS X:n käynnistystapahtumien järjestyksen alusta loppuun. Se on melko perusteellinen ja lukemisen arvoinen, toistetaan alla uteliaille Mac-käyttäjille.

huomautus: Kuten lukija huomautti, PPC käyttää OF:ää (Openfirmware), i386 käyttää EFI:tä (Extensible Firmware Interface)

Mitä sitten tapahtuu Mac OS X:n käynnistysprosessin aikana? Käynnistät Macin, ja näin tapahtuu:

  • Virta on kytketty.
  • OF tai EFI-koodi suoritetaan.
  • Laitteistotiedot kerätään ja laitteisto alustetaan.
  • Jotain (yleensä käyttöjärjestelmä, mutta myös asioita, kuten Apple Hardware Test jne.) on valittu käynnistymään. Käyttäjää saatetaan pyytää valitsemaan, mitä käynnistetään.
  • Control siirtyy käynnistyslataimeen /System/Library/CoreServices/BootX. BootX lataa ytimen ja piirtää myös käyttöjärjestelmätunnukset, jos sellaisia ​​on.
  • BootX yrittää ladata aiemmin välimuistissa olevan laiteajureiden luettelon (luonut/päivittänyt /usr/sbin/kextcache). Tällainen välimuisti on tyyppiä mkext ja sisältää tietosanakirjoja ja binääritiedostoja useille ydinlaajennuksille. Huomaa, että jos mkext-välimuisti on vioittunut tai puuttuu, BootX etsii hakemistosta /System/Library/Extensions laajennuksia, joita tarvitaan nykyisessä skenaariossa (määritettynä OSBundleRequired-ominaisuuden arvo Info.plist laajennuspaketin tiedostossa.
  • Ytimen init-rutiini suoritetaan. Käynnistysjärjestelmän juurilaite määritetään. Tässä vaiheessa laiteohjelmisto ei ole enää käytettävissä.
  • Ydin alustaa erilaisia ​​Mach/BSD-tietorakenteita.
  • I/O-sarja on alustettu.
  • Ydin käynnistää /sbin/mach_init, Mach-palvelun nimeämisen (bootstrap) -daemonin. mach_init ylläpitää kartoituksia palvelujen nimien ja Mach-porttien välillä, jotka tarjoavat pääsyn näihin palveluihin.

Tästä eteenpäin käynnistyksestä tulee käyttäjätaso:

  • mach_init alkaa /sbin/init, perinteinen BSD aloita prosessi. init määrittää ajon tason ja suorittaa /etc/rc.boot, mikä määrittää koneen riittävän hyvin yhden käyttäjän suorittamiseen.

Suorituksensa aikana rc.boot ja muut rc komentosarjan lähde /etc/rc.common , komentosarja, joka sisältää aputoimintoja, kuten CheckForNetwork() (tarkistaa, onko verkko päällä), GetPID (), purgedir() (poistaa vain hakemiston sisällön, ei rakennetta) jne.

  • rc.boot selvittää käynnistystyypin (Multi-User, Safe, CD-ROM, Network jne.). Verkkokäynnistyksen tapauksessa (sysctl-muuttuja kern.netboot asetetaan arvoon1, jolloin se suorittaa /etc/rc.netboot aloitus argumentti.

/etc/rc.netboot käsittelee useita verkkokäynnistyksen näkökohtia. Se esimerkiksi suorittaa verkko- ja (jos sellaisia ​​on) paikallisia liitoksia. Se kutsuu myös /usr/bin/nbst yhdistääkseen varjotiedoston juurilaitteena käytettävään levykuvaan.Ajatuksena on ohjata kirjoitukset varjotiedostoon, joka toivottavasti on paikallisessa tallennustilassa.

  • rc.boot selvittää, tarvitaanko tiedostojärjestelmän yhdenmukaisuuden tarkistusta. Yhden käyttäjän ja CD-ROM-käynnistykset eivät suorita fsck:tä. SafeBoot suorittaa aina fsck:n. rc.boot käsittelee myös fsck:n palautustilan.
  • Jos rc.boot sulkeutuu onnistuneesti, /etc/rc , usean käyttäjän käynnistyskomentosarja suoritetaan sitten. Jos käynnistetään CD-ROM-levyltä, komentosarja vaihtuu muotoon /etc/rc.cdrom (asennus).
  • /etc/rc liittää paikalliset tiedostojärjestelmät (HFS+, HFS, UFS, /dev/ fd, /.vol), varmistaa, että hakemisto /private/var/tmp on olemassa ja suorittaa /etc/rc.installer_cleanup, jos sellainen on olemassa (asennusohjelman jättämä ennen uudelleenkäynnistystä).
  • /etc/rc.cleanup suoritetaan. Se "puhdistaa" useita Unix- ja Mac-kohtaisia ​​hakemistoja/tiedostoja.
  • BootCache on käynnistetty.
  • Erilaiset sysctl muuttujat on asetettu (kuten vsolmujen enimmäismäärälle, System V IPC:lle jne.). Jos /etc/sysctl.conf on olemassa (plus /etc/sysctl-macosxserver.conf Mac OS X Serverissä), se luetaan ja sysctl siinä olevat muuttujat asetetaan.
  • syslogd on aloitettu.
  • Mach-symbolitiedosto on luotu.
  • /etc/rc alkaa kextd, demoniprosessi joka lataa ytimen laajennuksen pyynnöstä ytimestä tai asiakasprosesseista.
  • /usr/libexec/register_mach_bootstrap_servers suoritetaan lataamaan erilaisia ​​Mach-käynnistyspohjaisia ​​palveluja, jotka sisältyvät / etc/mach_init.d
  • portmap ja netinfo aloitetaan.
  • Jos /System/Library/Extensions.mkext on vanhempi kuin /System/Library/Extensions , /etc/rc poistaa olemassa olevan mkextin ja luo uuden. Se myös luo sellaisen, jos sellaista ei ole olemassa.
  • /etc/rc alkaa /usr/sbin/update , demoni, joka huuhtelee sisäiset tiedostojärjestelmän välimuistit levylle usein.
  • /etc/rc käynnistää virtuaalimuistijärjestelmän. /private/var/vm on asetettu swap-hakemistoksi. /sbin/dynamiikka tiedostot tai poista olemassa olevat).
  • /etc/rc alkaa /usr/libexec/fix_prebindingkorjataksesi virheelliset esisidottu binaarit.
  • /etc/rc suorittaa /etc/rc.cleanuptiedostojen ja laitteiden puhdistamiseen ja nollaukseen.
  • /etc/rc käynnistyy vihdoin /sbin/SystemStarter käsitellä aloituskohteita paikoista, kuten /System/Library/StartupItems ja /Library/StartupItems StartupItem on ohjelma, yleensä komentosarja, jonka nimi vastaa kansion nimeä. Kansio sisältää ominaisuusluettelotiedoston, joka sisältää avainarvopareja, kuten Description, Provides, Requires, OrderPreference, aloitus-/lopetusviestit jne. Voit suorittaa SystemStarter -n -D pääkäyttäjänä, jotta ohjelma tulostaa virheenkorjaus- ja riippuvuustiedot (käyttämättä mitään).
  • CoreGraphics käynnistyskohde käynnistää Apple Type Services -daemonin (ATSServer ) sekä Window Server (WindowServer).

Ja sitten Mac käynnistetään!

Voit nähdä osan tästä toiminnasta itse Verbose Mode -tilassa (jonka voit käynnistää Verbose Mode -tilassa käynnistystä kohti, tai voit jopa asettaa Macin käynnistymään aina monisanaisessa tilassa, jos haluat aina nähdä unix-tyylinen käynnistys), mutta tämä on melko perusteellinen selitys.

Applella on myös saatavilla Macin käynnistysprosessiin liittyviä asiakirjoja, jotka ovat saatavilla täällä heidän kehittäjien dokumentaatiokirjastossaan.

Huomaa, että alkuperäinen URL-osoite, joka tarjoaa yllä olevat tiedot, ei ole enää aktiivinen, joten viesti on sisällytetty yllä olevaan jälkipolville välimuistin kautta. Alkuperäinen lähde oli KernelThreadin säiettä seuraavassa URL-osoitteessa: http://www.kernelthread.com/mac/osx/arch_startup.html, joka on tällä hetkellä offline-tilassa eikä ohjaa uuteen paikkaan.

Jos sinulla on jotain lisättävää Mac OS X:n käynnistysjärjestykseen, jaa kommenteissa!

Mitä Mac OS X:n käynnistysprosessissa tapahtuu?