Co dzieje się podczas uruchamiania systemu Mac OS X?

Czy zastanawiałeś się kiedyś, co dzieje się podczas uruchamiania systemu Mac OS X? W systemie Mac OS X jest to nieco bardziej skomplikowane niż kiedyś, a czasy klasycznego systemu Mac OS (System 9, 8, 7, 6) dawno już minęły, kiedy nasze komputery Mac można było oglądać za pomocą szeregu rozszerzeń i paneli sterowania, które zawsze mogliśmy zidentyfikować tylko na podstawie ich ikony, a następnie przeszukać folder Rozszerzenia, aby łatwo dostosować to, co ładuje się i dzieje podczas uruchamiania komputera Mac.Obecnie, z systemem Mac OS X opartym na systemie Unix, wielu użytkowników jest całkowicie nieświadomych tego, co dzieje się za kulisami.
Co dokładnie dzieje się podczas procesu uruchamiania systemu Mac OS X? Zawsze możesz uzyskać lepszy wygląd, uruchamiając komputer Mac w trybie szczegółowym, ale to niekoniecznie wyjaśnia wszystko, co widzisz. Na szczęście doskonałe wyjaśnienie jest dostępne za pośrednictwem segmentu na KernelThread, który dokładnie wymienia sekwencję zdarzeń startowych Mac OS X, od początku do końca. Jest dość dokładna i warta przeczytania, powtórzona poniżej dla dociekliwych użytkowników komputerów Mac.
Uwaga: Jak zauważył czytelnik, PPC używa OF (Openfirmware), i386 używa EFI (Extensible Firmware Interface)
Co się dzieje podczas procesu uruchamiania systemu Mac OS X? Włączasz Maca i dzieje się tak:
- Zasilanie jest włączone.
- wykonany jest kod OF lub EFI.
- Zbierane są informacje o sprzęcie i inicjowany sprzęt.
- Coś (zwykle system operacyjny, ale także np. Apple Hardware Test itp.) jest wybrane do uruchomienia. Użytkownik może zostać poproszony o wybranie, co ma zostać uruchomione.
- Kontrola przechodzi do
/System/Library/CoreServices/BootX, program ładujący. BootX ładuje jądro, a także rysuje odznaki systemu operacyjnego, jeśli takie istnieją. - BootX próbuje załadować wcześniej zapisaną w pamięci podręcznej listę sterowników urządzeń (utworzoną/zaktualizowaną przez
/usr/sbin/kextcache). Taka pamięć podręczna jest typumkexti zawiera słowniki informacyjne i pliki binarne dla wielu rozszerzeń jądra. Zauważ, że jeśli pamięć podręczna mkext jest uszkodzona lub jej brakuje, BootX będzie szukać w/System/Library/Extensionsrozszerzeń potrzebnych w bieżącym scenariuszu (zgodnie z wartość właściwościOSBundleRequiredw plikuInfo.plist pakietu rozszerzeń. - Wykonywana jest procedura
init jądra. Określane jest urządzenie główne systemu rozruchowego. W tym momencie oprogramowanie układowe nie jest już dostępne. - Różne struktury danych Mach/BSD są inicjowane przez jądro.
- Zestaw we/wy został zainicjowany.
- Jądro uruchamia się
/sbin/mach_init, demon nazewnictwa usług Macha (bootstrap).mach_init utrzymuje mapowania między nazwami usług a portami Macha, które zapewniają dostęp do tych usług.
Od tego momentu uruchamianie przechodzi na poziom użytkownika:
mach_init/sbin/init, tradycyjny BSD proces init. init określa poziom pracy i uruchamia/etc/rc.boot, co ustawia maszynę na tyle, aby mogła działać w trybie pojedynczego użytkownika.
Podczas wykonywania rc.boot i inne rc skrypty source /etc/rc.common , skrypt powłoki zawierający funkcje narzędziowe, takie jak CheckForNetwork() (sprawdza, czy sieć działa), GetPID (), purgedir() (usuwa tylko zawartość katalogu, nie strukturę) itp.
rc.bootokreśla typ rozruchu (wielu użytkowników, sejf, CD-ROM, sieć itp.). W przypadku rozruchu sieciowego (zmiennasysctlkern.netbootzostanie ustawiona na1w takim przypadku), działa/etc/rc.netbootzstart argument.
/etc/rc.netboot obsługuje różne aspekty uruchamiania sieciowego. Na przykład wykonuje montowania sieciowe i (jeśli są) lokalne. Wywołuje również /usr/bin/nbst w celu powiązania pliku cienia z obrazem dysku używanym jako urządzenie root.Chodzi o to, aby przekierować zapisy do pliku cienia, który, miejmy nadzieję, znajduje się w pamięci lokalnej.
rc.bootokreśla, czy wymagana jest kontrola spójności systemu plików. Rozruchy dla jednego użytkownika i CD-ROM nie uruchamiają fsck. SafeBoot zawsze uruchamia fsck.rc.boot obsługuje również zwracany status fsck.- Jeśli program
rc.bootzakończy się pomyślnie,/etc/rc, uruchamiany jest skrypt startowy dla wielu użytkowników. W przypadku uruchamiania z dysku CD-ROM skrypt przełącza się na/etc/rc.cdrom (instalacja). /etc/rcmontuje lokalne systemy plików (HFS+, HFS, UFS,/dev/ fd,/.vol), gwarantuje, że katalog/private/var/tmpistnieje i działa/etc/rc.installer_cleanup, jeśli taki istnieje (pozostawiony przez instalatora przed ponownym uruchomieniem)./etc/rc.cleanup jest uruchamiany. „Czyści” wiele katalogów/plików specyficznych dla systemów Unix i Mac.- BootCache jest uruchomiony.
- Różne
sysctlsą ustawione (takie jak maksymalna liczba vnodów, System V IPC itp.). Jeśli/etc/sysctl.confistnieje (plus/etc/sysctl-macosxserver.confw systemie Mac OS X Server), jest odczytywany isysctl zawarte w nim zmienne są ustawiane. syslogd jest uruchamiany.- Tworzony jest plik symboli Macha.
/etc/rckextd, proces demona ładuje rozszerzenie jądra na żądanie z procesów jądra lub klienta./usr/libexec/register_mach_bootstrap_serversjest uruchamiany w celu załadowania różnych usług opartych na inicjalizacji Macha zawartych w/ etc/mach_init.dportmapinetinfo są uruchamiane.- Jeśli
/System/Library/Extensions.mkextjest starszy niż/System/Library/Extensions,/etc/rc usuwa istniejący mkext i tworzy nowy. Tworzy go również, jeśli taki nie istnieje. /etc/rc/usr/sbin/update , demon, który często opróżnia wewnętrzne pamięci podręczne systemu plików na dysk./etc/rcuruchamia system pamięci wirtualnej./private/var/vmjest ustawiony jako katalog wymiany./sbin/dynamic_pager jest uruchamiany z odpowiednimi argumentami (szablon ścieżki nazwy pliku wymiany, rozmiar utworzonych plików wymiany, wyzwalacze alertów wysokiego i niskiego poziomu wody określające, kiedy utworzyć dodatkową wymianę pliki lub usuń istniejące)./etc/rc/usr/libexec/fix_prebindingnaprawić niepoprawnie wstępnie powiązane pliki binarne./etc/rcwykonuje/etc/rc.cleanupdo czyszczenia i resetowania plików i urządzeń./etc/rcw końcu uruchamia się/sbin/SystemStarterdo obsługi elementów startowych z lokalizacji, takich jak/System/Library/StartupItemsi/Library/StartupItemsStartupItem to program, zwykle skrypt powłoki, którego nazwa odpowiada nazwie folderu. Folder zawiera plik listy właściwości zawierający pary klucz-wartość, takie jakDescription,Provides,Wymaga,OrderPreference, komunikaty start/stop itp. Możesz uruchomićSystemStarter -n -D jako root, aby program wydrukował informacje o debugowaniu i zależnościach (bez faktycznego uruchamiania czegokolwiek).- Element startowy
CoreGraphicsuruchamia demona Apple Type Services (ATSServer) oraz Windows Server (WindowServer).
Następnie uruchamia się komputer Mac!
Możesz zobaczyć trochę tej aktywności w trybie szczegółowym (który możesz uruchamiać w trybie szczegółowym przy każdym rozruchu, a nawet możesz ustawić komputer Mac tak, aby zawsze uruchamiał się w trybie szczegółowym, jeśli chcesz zawsze widzieć rozruch w stylu uniksowym), ale jest to dość dokładne wyjaśnienie.
Apple udostępnia również dokumentację dotyczącą procesu rozruchu komputera Mac, dostępną tutaj w bibliotece dokumentacji dla programistów tutaj.
Zwróć uwagę, że oryginalny adres URL, pod którym znajdują się powyższe informacje, nie jest już aktywny, dlatego ten post został dołączony powyżej dla potomności za pośrednictwem pamięci podręcznej. Oryginalnym źródłem był wątek na KernelThread pod następującym adresem URL: http://www.kernelthread.com/mac/osx/arch_startup.html, który jest obecnie offline i nie przekierowuje do nowej lokalizacji.
Jeśli masz jakieś ciekawostki lub inne dodatki do sekwencji startowej systemu Mac OS X, podziel się nimi w komentarzach!






