Linux啟動行程

描述Linux系统启动的整个过程

Linux啟動行程是啟動Linux時執行的一個複雜的初始化過程。它在很多方面類似於BSD系統和別的類Unix系統的啟動過程。[1][2]

啟動Linux系統涉及到很多階段,包括硬件初始化(如BIOSUEFI)、執行啟動程式(如GRUBSYSLINUX)、載入和啟動Linux內核鏡像,執行init(如Systemd)和執行守護行程

概述

x86x86-64是Linux作業系統的常用指令集架構

  1. BIOS/UEFI針對實際的硬件平台執行硬件初始化任務。
  2. 啟動程式載入initrd/initramfs,並由啟動程式載入Linux核心
  3. 內核將組態系統功能,譬如組態硬件,稱為start_kernel(),這會執行大部分系統組態(中斷、主記憶體管理、裝置和驅動程式初始化等)。然後它分別啟動主記憶體管理行程、init行程等在用戶空間執行的行程。
  4. Init有特定的運行級別(System V)或目標(Systemd),每個運行級別或目標都是由特定的一組服務(守護行程)組成。
  5. 一個典型的桌面環境從X顯示管理器開始初始化,X顯示管理器顯示登入畫面,成功登入後由X顯示管理器啟動桌面環境(如GNOMEKDE)。

關機時,init會結束所有用戶空間處理程式。init隨後終止,內核自行關閉。

啟動載入程式階段

x86x86-64平台由BIOSUEFI韌體初始化硬件,並由BIOS/UEFI載入啟動程式。由啟動程式載入Linux核心initrd。常見的啟動程式有:

內核階段

Linux內核處理所有作業系統行程,如主記憶體管理、任務排程、I/O行程間通訊和系統總體控制。這分為兩個階段 :

首先,內核被載入到主記憶體中,並且建立了一些基本的功能,如基本主記憶體管理。

內核會尋找並執行init行程。

initramfs

initramfs自Linux內核的2.5.46版本開始加入這個概念,initramfs取代了initrd。早期用戶空間的典型用途是檢測需要哪些裝置驅動程式來載入主用戶空間檔案系統,並從臨時檔案系統載入它們。[3]

init行程

init是Linux的根行程。行程號為1,它是所有行程的父行程。現時絕大多數Linux發行版都採用Systemd

System V init

Upstart init

Systemd init

參考資料

  1. ^ Linux 引导过程内幕. www.ibm.com. 2006-07-26 [2017-06-29]. (原始內容存檔於2016-09-13) (中文(中國大陸)). 
  2. ^ 13.3. 引导管理器和各引导阶段. www.freebsd.org. [2017-06-29]. (原始內容存檔於2020-11-23). 
  3. ^ About initramfs. www.linuxfromscratch.org. [2017-06-29]. (原始內容存檔於2021-01-26).