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 typumkext
i 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/Extensions
rozszerzeń potrzebnych w bieżącym scenariuszu (zgodnie z wartość właściwościOSBundleRequired
w 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.boot
określa typ rozruchu (wielu użytkowników, sejf, CD-ROM, sieć itp.). W przypadku rozruchu sieciowego (zmiennasysctl
kern.netboot
zostanie ustawiona na1
w takim przypadku), działa/etc/rc.netboot
zstart 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.boot
okreś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.boot
zakoń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/rc
montuje lokalne systemy plików (HFS+, HFS, UFS,/dev/ fd
,/.vol
), gwarantuje, że katalog/private/var/tmp
istnieje 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
sysctl
są ustawione (takie jak maksymalna liczba vnodów, System V IPC itp.). Jeśli/etc/sysctl.conf
istnieje (plus/etc/sysctl-macosxserver.conf
w systemie Mac OS X Server), jest odczytywany isysctl zawarte w nim zmienne są ustawiane.
syslogd jest uruchamiany.
- Tworzony jest plik symboli Macha.
/etc/rc
kextd, proces demona ładuje rozszerzenie jądra na żądanie z procesów jądra lub klienta.
/usr/libexec/register_mach_bootstrap_servers
jest uruchamiany w celu załadowania różnych usług opartych na inicjalizacji Macha zawartych w/ etc/mach_init.d
portmap
inetinfo są uruchamiane.
- Jeśli
/System/Library/Extensions.mkext
jest 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/rc
uruchamia system pamięci wirtualnej./private/var/vm
jest 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/rc
wykonuje/etc/rc.cleanupdo czyszczenia i resetowania plików i urządzeń.
/etc/rc
w końcu uruchamia się/sbin/SystemStarter
do obsługi elementów startowych z lokalizacji, takich jak/System/Library/StartupItems
i/Library/StartupItems
StartupItem 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
CoreGraphics
uruchamia 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!