Co dzieje się podczas uruchamiania systemu Mac OS X?

Anonim

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 typu mkext 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ści OSBundleRequired w pliku Info.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 (zmienna sysctl kern.netboot zostanie ustawiona na1 w takim przypadku), działa /etc/rc.netboot z start 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 i sysctl 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 i netinfo 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 jak Description, 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!

Co dzieje się podczas uruchamiania systemu Mac OS X?