基礎:作業系統是什麼

開機程序

開機(booting)是一個雞生蛋、蛋生雞的把戲:要在一台機器上把作業系統啟動起來,而這台機器在你一按下電源的那一刻幾乎一無所知——記憶體裡沒有作業系統,甚至不知道作業系統在哪。它的名字來自「拉著自己的鞋帶把自己提起來」這句話,因為電腦必須一步一步載入能力逐漸增強的軟體,直到完整的作業系統運轉起來。每個小程式的工作,主要就是找到並啟動下一個稍大一點的程式。

用平白的步驟說明這條鏈。(1)通電:CPU 開始執行燒在主機板某顆晶片裡的固定韌體(BIOS,或在現代機器上是 UEFI)。韌體對硬體做一次基本的自我檢查。(2)韌體在某個儲存裝置上找到一個叫開機載入器(bootloader)的小程式,把它載入記憶體。(3)開機載入器的工作,是在磁碟上找到作業系統核心、把它載入記憶體,並把控制權交給它(有時會經過一個存放早期驅動程式的中介暫時檔案系統)。(4)核心初始化自己——設定記憶體管理、啟動裝置驅動程式、掛載真正的檔案系統。(5)最後,核心啟動第一個使用者空間行程(歷史上稱為 init,在許多 Linux 系統上是 systemd),而它接著啟動所有服務,最終帶出你看見的登入畫面或桌面。從近乎全然無知到一個可用的系統,只經過寥寥幾次交棒。

理解這條開機鏈,能解開許多實務經驗之謎:閃過的韌體畫面、開機選單、核心載入時磁碟燈閃動的那一刻。它也說明了為何開機是個對安全敏感的時刻——若攻擊者能在鏈的早期塞進惡意程式碼,那段程式碼會在任何防禦啟動之前就先執行,這正是安全開機(secure boot)存在的原因,用密碼學檢查每一階段。此處誠實的簡化是:真實的開機有多得多的細節(多個韌體階段、復原路徑、加密磁碟),但本質的形狀——韌體、然後開機載入器、然後核心、然後第一個行程——才是禁得起時間考驗的心智模型。

在一台 Linux 筆電上按下電源:UEFI 韌體做自我測試並載入一個開機載入器;開機載入器載入 Linux 核心(外加一小份裝早期驅動程式的 initramfs);核心把自己設好並掛載磁碟;接著它啟動第一號行程(systemd),由它帶起各項服務與登入畫面。

韌體到開機載入器到核心到第一個行程——每一階段啟動下一階段。

這是一張入門層級的草圖;真實的開機有許多額外階段。安全的角度是真實的:在早期執行的程式碼,是在防禦存在之前就執行,這正是為什麼安全開機要先驗證每一階段,才信任它。

又称
bootstrappingbootingstartup sequence啟動程序開機