作業系統核心

開機程序(boot sequence)

當你按下電源鍵時,電腦面對一個雞生蛋的難題:那個負責執行一切的作業系統,本身只是磁碟上的一個檔案,而此刻還沒有任何東西被載入來讀取那個檔案。開機程序就是解決這件事、層層接力的一連串小程式——每一階段只需有足夠能力去找到並啟動下一個更大的階段,直到最後整個核心進入記憶體並開始執行。「boot」一詞源自「拉著自己的鞋帶把自己提起來」,這正是其中的把戲:系統一階一階地把自己拉進存在。

在現代 PC 上,這些階梯大致如下。首先,燒進晶片裡的韌體——如今通常是 UEFI(較舊的系統用 BIOS)——在電力穩定的那一刻就執行;它測試硬體,並懂得如何讀取磁碟。韌體載入一個載入器(bootloader,例如 GRUB),這是一個稍大的程式,其任務是找到核心(常以壓縮形式儲存以節省空間)、把它載入記憶體、解壓縮,再跳到它的進入點。接著核心接手:它把 CPU 初始化進完整模式,設定記憶體管理、分頁表、中斷與排程器,並偵測與初始化裝置。最後核心啟動最開頭的那個使用者空間行程,傳統上稱為 init,並賦予它行程識別碼 1(PID 1);systemd 是常見的現代 init。PID 1 接著啟動你實際看到的所有服務與登入提示。

為何這比冷知識更重要:幾乎每個「開不了機」的問題,都對應到某一階特定失敗的階梯——錯誤的韌體設定、找不到核心的載入器、在裝置初始化期間恐慌(panic)的核心,或啟動失敗的 PID 1。懂這條鏈,你就能推理出攀爬途中是哪裡斷了,而非把啟動當成一個不透明的單一事件。同樣的分階理念也出現在手機、伺服器與嵌入式板子上,只是換了不同的韌體與載入器。

通電 -> UEFI 韌體 -> 載入器(GRUB)載入並解壓縮核心映像 -> 核心初始化:CPU 模式、分頁表、中斷、排程器、驅動 -> 以 PID 1 執行 /sbin/init -> 服務與登入。

每一階都恰好有能力啟動下一階,直到核心開始執行並啟動 PID 1。

PID 1 很特別:核心在機器的整個生命期都保留它,它收養孤兒行程,而一旦它結束,核心便恐慌,因為系統再無第一個行程可以退而依靠。所以「init」不只是第一個程式——它是核心在結構上倚賴的一個行程。

又称
bootingsystem startup開機流程系統啟動