Linux啟動進程
Linux啟動進程是啟動Linux時執行的一個複雜的初始化過程。它在很多方面類似於BSD系統和別的類Unix系統的啟動過程。[1][2]
啟動Linux系統涉及到很多階段,包括硬件初始化(如BIOS或UEFI)、執行啟動程式(如GRUB、SYSLINUX)、加載和啟動Linux內核鏡像,執行init(如Systemd)和執行守護進程。
概述
- BIOS/UEFI針對實際的硬件平台執行硬件初始化任務。
- 由啟動程式載入initrd/initramfs,並由啟動程式載入Linux核心。
- 內核將配置系統功能,譬如配置硬件,稱為start_kernel(),這會執行大部分系統配置(中斷、內存管理、設備和驅動程式初始化等)。然後它分別啟動內存管理進程、init進程等在用戶空間執行的進程。
- Init有特定的運行級別(System V)或目標(Systemd),每個運行級別或目標都是由特定的一組服務(守護進程)組成。
- 一個典型的桌面環境從X顯示管理器開始初始化,X顯示管理器顯示登入畫面,成功登入後由X顯示管理器啟動桌面環境(如GNOME、KDE)。
關機時,init會結束所有用戶空間處理程序。init隨後終止,內核自行關閉。
啟動加載程序階段
x86和x86-64平台由BIOS或UEFI韌體初始化硬件,並由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
參考資料
- ^ Linux 引导过程内幕. www.ibm.com. 2006-07-26 [2017-06-29]. (原始內容存檔於2016-09-13) (中文(中國大陸)).
- ^ 13.3. 引导管理器和各引导阶段. www.freebsd.org. [2017-06-29]. (原始內容存檔於2020-11-23).
- ^ About initramfs. www.linuxfromscratch.org. [2017-06-29]. (原始內容存檔於2021-01-26).