【翻譯】Mac OSX系統啟動

這篇我們來談談Mac OSX啟動過程會經歷的程序。
一些關於開機的細節部份,我已經在之前的文章「Mac OSX開機」與「XNU:核心」這兩篇文章中說明過了。略摘錄重點如下:

  • 電源打開
  • 執行韌體
  • 硬體資訊匯集與初使化
  • 開機項目選擇;此時可能會去詢問使用者要以何種裝置開機
  • 控制權移轉至Boot loader(/System/Library/CoreServices/BootX)。BootX會去載入核心與標記OS。
  • BootX此時會嘗試去載入之前的系統裝置驅動程式快取(/usr/sbin/kextcache)。快取裡面會包含相關資訊、函示庫以及套件供核心使用。如果說核心找不到或是檔案已經毀損,那核心會自動去讀取/System/Library/Extensions來完成開機動作。
  • 核心中重要參數此時會載入,同時有關裝置也會完成定義。在這個時點,Open Firmware跟著退出。
  • 各種Mach/BSD資料架構由核心完成初使化。
  • I/O kit初使化
  • 核心啟動/sbin/mach_init,開始各項系統上的服務與port。

此時,開機程序進入使用者層級

  • mach_init會去啟動/sbin/init(BSD基本init程序)。Init將會去定義系統上的運行層級,同時起動/etc/rc.boot來讓系統準備好進入單人模式。
  • rc.boot會去確定開機裝置為何(多人使用模式、安全模式、硬碟、光碟或是網路開機)。舉例來說,如果是網路開機模式,那rc.boot就會去啟動/etc/rc.netboot來進行開機程序。
  • rc.boot還會去確認是不是需要做磁碟修復的動作。單人模式或是光碟開機就不會有這個步驟;而安全模式開機不管如何都會做磁碟修復—fsck。
  • 如果rc.boot功成身退,/etc/rc多人模式開機程序就會啟動。如果是光碟開機,這時候就會轉去/etc/rc.cdrom。
  • /etc/rc會去載入本地磁碟(HFS、HFS+、UFS…),並確認/private/var/tmp目錄存在、執行/etc/rc.installer_cleanup。
  • /etc/rc.installer_cleanup會去清空一些Mac/Unix檔案
  • BootCache啟動
  • 各個sysctl變數設定完成,如果/etc/sysctl.conf存在,那變數就是這樣設定。
  • syslogd啟動
  • 建立Mach符號檔
  • /etc/rc啟動kextd,從核心或是終端程序中載入核心延伸程序
  • /usr/libexec/Register_mach_bootstrap_servers會去載入/etc/mach_initd檔案中所包含的各個Mach bootstrap服務
  • portmap與netinfo啟動
  • 如果/System/Library/Extensions.mkext檔案比/System/Library/Extensions舊,那麼/etc/rc會將之刪除並另外製作一個較新的。相對地,如果說那個檔案並不存在,則會製作一個全新的。
  • /etc/rc透過/usr/sbin/update將內部的檔案系統快取與各磁碟同步化
  • /etc/rc啟動虛擬記憶體。/private/var/vm會被設置成swap。
  • /etc/rc啟動/usr/libexec/fix_prebind來修復prebind binary的錯誤
  • /etc/rc透過/etc/rc.cleanup來清空並重新設置檔案和裝置
  • /etc/rc最後會載入/sbin/Systemstarter去啟動「啟動元件」,像是/System/Library/StartupItems和/Library/StartupItems。顧名思義,StartupItems這個Shell dcripts程式就是一個「啟動元件」,其中包含相當多的系統關鍵值,例如:Description、Provides、Requries、OrederPreference、開始/停止訊息…等等。你可以用root身分在Terminal底下輸入SystemStarter -n –D看看系統所有的錯與獨立資訊。
  • CoreGraphics啟動Apple Type Services(ATSServer)來作為視窗服務。(WindowServer)

根據預設,登入視窗(這個程式是在/System/Library/CoreServices底下)其實是一個指令模式的包裝。你可以透過修改/etc/ttys來讓登入時僅僅只有指令模式。

本文由張元毓所翻譯,本人保有一切法律權利。
Copyright@ alan chang

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz