Mi történik a Mac OS X rendszerindítási folyamatában?

Anonim

Elgondolkozott már azon, hogy mi történik a Mac OS X rendszerindítási és indítási folyamata során? A Mac OS X esetében ez egy kicsit bonyolultabb, mint régen, és rég elmúltak a klasszikus Mac OS (System 9, 8, 7, 6) napjai, amikor figyelve, ahogy Mac gépeink elindulnak egy sor bővítmény és vezérlőpanel segítségével, mindig azonosítani tudtuk csak az ikonjuk alapján, majd körbejártuk az Extensions mappát, hogy könnyen beállíthassuk, mi töltődik be és mi történjen a Mac rendszerindításkor.Ma a Mac OS X Unix-alapú alapjaival sok felhasználó egyáltalán nincs tisztában azzal, hogy mi történik a színfalak mögött.

Tehát mi történik pontosan a Mac OS X rendszerindítási folyamata során? Mindig jobban megtekintheti, ha a Macet Verbose módban indítja, de ez nem feltétlenül magyarázza meg mindazt, amit lát. Szerencsére kiváló magyarázat érhető el a KernelThread szegmensén keresztül, amely gondosan felsorolja a Mac OS X rendszerindítási eseményeinek sorrendjét az elejétől a végéig. Meglehetősen alapos és érdemes elolvasni, alább ismételje meg a kíváncsi Mac-felhasználók számára.

Megjegyzés: Ahogy az olvasó rámutatott, a PPC az OF-t (Openfirmware), az i386 az EFI-t (Extensible Firmware Interface) használja.

Mi történik tehát a Mac OS X rendszerindítási folyamata során? Bekapcsolja a Mac-et, és ez történik:

  • A tápellátás be van kapcsolva.
  • OF vagy EFI kód ​​végrehajtásra kerül.
  • A hardverinformációk összegyűjtése és a hardver inicializálása megtörténik.
  • Valamit (általában az operációs rendszert, de olyan dolgokat is, mint az Apple Hardware Test stb.) kiválasztunk a rendszerindításhoz. A rendszer felkérheti a felhasználót, hogy válassza ki, mit indítson.
  • A vezérlés átkerül a /System/Library/CoreServices/BootX rendszerbetöltőhöz. A BootX betölti a kernelt, és kirajzolja az operációs rendszer jelvényeit is, ha vannak.
  • A BootX megpróbálja betölteni az eszközillesztők korábban gyorsítótárazott listáját (/usr/sbin/kextcache készítette/frissítette). Az ilyen gyorsítótár a mkext típusú, és tartalmazza az információs szótárakat és a több kernelkiterjesztéshez tartozó bináris fájlokat. Vegye figyelembe, hogy ha az mkext gyorsítótár sérült vagy hiányzik, a BootX a /System/Library/Extensions fájlban keresi azokat a kiterjesztéseket, amelyekre az aktuális forgatókönyv szerint szükség van a OSBundleRequired tulajdonság értéke a Info.plist fájlban a bővítménycsomagban.
  • A kernel init rutinja végrehajtódik. Meg van határozva a rendszerindító rendszer gyökéreszköze. Ezen a ponton a firmware már nem érhető el.
  • A kernel különféle Mach/BSD adatstruktúrákat inicializál.
  • Az I/O Kit inicializálva.
  • A kernel elindul /sbin/mach_init, a Mach szolgáltatásnévadó (bootstrap) démon. mach_init leképezéseket tart fenn a szolgáltatások nevei és az ezekhez a szolgáltatásokhoz hozzáférést biztosító Mach-portok között.

Innentől kezdve az indítás felhasználói szintű lesz:

  • mach_init elindul /sbin/init, a hagyományos BSD folyamat beindítása. Az init meghatározza a futási szintet, és lefuttatja a /etc/rc.boot parancsot, amely eléggé beállítja a gépet az egyfelhasználós futtatáshoz.

Végrehajtása során rc.boot és a többi rc szkript forrása /etc/rc.common , segédfunkciókat tartalmazó shell-szkript, például CheckForNetwork() (ellenőrzi, hogy a hálózat működik-e), GetPID (), purgedir() (csak a könyvtár tartalmát törli, a struktúrát nem) stb.

  • rc.boot kitalálja a rendszerindítás típusát (többfelhasználós, biztonságos, CD-ROM, hálózat stb.). Hálózati rendszerindítás esetén (a sysctl kern.netbootértékelesz 1, ebben az esetben a /etc/rc.netboot jellel fut. start argumentum.
A

/etc/rc.netboot a hálózati indítás különböző aspektusait kezeli. Például hálózati és (ha van ilyen) helyi csatlakoztatást hajt végre. A /usr/bin/nbst parancsot is meghívja, hogy árnyékfájlt társítson a gyökéreszközként használt lemezképhez.Az ötlet az, hogy az írásokat átirányítsuk az árnyékfájlba, amely remélhetőleg a helyi tárhelyen található.

  • rc.boot kitalálja, hogy szükséges-e a fájlrendszer konzisztencia ellenőrzése. Az egyfelhasználós és a CD-ROM rendszerindítások nem futtatják az fsck-t. A SafeBoot mindig az fsck-t futtatja. rc.boot kezeli az fsck visszatérési állapotát is.
  • Ha rc.boot sikeresen kilép, /etc/rc , akkor a többfelhasználós indítószkript fut. Ha CD-ROM-ról indít, a szkript átvált a /etc/rc.cdrom (telepítés) fájlra.
  • /etc/rc csatlakoztatja a helyi fájlrendszereket (HFS+, HFS, UFS, /dev/ fd, /.vol), biztosítja, hogy a /private/var/tmp könyvtár létezik, és fut a /etc/rc.installer_cleanup, ha létezik (a telepítő hagyta meg az újraindítás előtt).
  • /etc/rc.cleanup fut. Számos Unix és Mac specifikus könyvtárat/fájlt „megtisztít”.
  • A BootCache elindult.
  • Különféle sysctl változók vannak beállítva (például a vnode-ok maximális száma, System V IPC stb.). Ha /etc/sysctl.conf létezik (plusz /etc/sysctl-macosxserver.conf Mac OS X Server rendszeren) beolvasásra kerül, és sysctl a benne található változók beállítása.
  • syslogd elindult.
  • A Mach szimbólumfájl létrejött.
  • /etc/rc elindul kextd, a démon folyamat amely igény szerint betölti a kernelbővítményt a kernel- vagy kliensfolyamatokból.
  • /usr/libexec/register_mach_bootstrap_servers a / fájlban található különböző Mach bootstrap alapú szolgáltatások betöltésére fut. etc/mach_init.d
  • portmap és netinfo elindult.
  • Ha /System/Library/Extensions.mkext régebbi, mint /System/Library/Extensions , /etc/rc törli a meglévő mkext-et, és újat hoz létre. Akkor is létrehoz egyet, ha nem létezik.
  • /etc/rc elindul /usr/sbin/update , a démon, amely gyakran kiüríti a belső fájlrendszer gyorsítótárait a lemezre.
  • /etc/rc elindítja a virtuális memóriarendszert. A /private/var/vm cserekönyvtárként van beállítva. A /sbin/dynamic_pager a megfelelő argumentumokkal indul (cserefájlnév-útvonal-sablon, a létrehozott cserefájlok mérete, magas és alacsony vízszintes riasztási triggerek, amelyek meghatározzák, hogy mikor kell további swapot létrehozni fájlokat, vagy törölje a meglévőket).
  • /etc/rc elindul /usr/libexec/fix_prebindinga helytelenül előre bekötött binárisok javításához.
  • /etc/rc végrehajtja a /etc/rc.cleanupa fájlok és eszközök megtisztításához és visszaállításához.
  • /etc/rc végre elindul /sbin/SystemStarter az indítási elemek kezelésére olyan helyekről, mint a /System/Library/StartupItems és /Library/StartupItems A StartupItem egy program, általában egy shell szkript, amelynek neve megegyezik a mappa nevével. A mappa olyan tulajdonságlista fájlt tartalmaz, amely kulcs-érték párokat tartalmaz, például Description, Provides, Requires, OrderPreference, start/stop üzenetek stb. Futtathatja a SystemStarter -n -D rootként, hogy a program kinyomtassa a hibakeresési és függőségi információkat (anélkül, hogy bármit is futtatna).
  • A CoreGraphics indítási elem elindítja az Apple Type Services démont (ATSServer ), valamint a Window Server (WindowServer).

És akkor a Mac elindul!

Ebből a tevékenységből egy keveset saját maga is láthat a Verbose Mode segítségével (amelyet rendszerindításonként Verbose módba indíthat, vagy akár beállíthatja a Mac számítógépet, hogy mindig Verbose módban induljon el, ha mindig látni szeretné a unix stílusú rendszerindítás), de ez elég alapos magyarázat.

Az Apple a Mac rendszerindítási folyamatáról is rendelkezik néhány dokumentációval, amely elérhető itt a fejlesztői dokumentációs könyvtárában.

Ne feledje, hogy a fenti információkat tartalmazó eredeti URL már nem aktív, így a bejegyzést a gyorsítótáron keresztül az utókor számára felvették. Az eredeti forrás a KernelThread egyik szála volt a következő URL-címen: http://www.kernelthread.com/mac/osx/arch_startup.html, amely jelenleg offline állapotban van, és nem irányít át új helyre.

Ha bármilyen apróságot vagy más kiegészítést szeretne hozzáadni a Mac OS X rendszerindítási sorrendjéhez, ossza meg megjegyzésekben!

Mi történik a Mac OS X rendszerindítási folyamatában?